diff --git a/app/src/main/java/eu/faircode/email/DeepL.java b/app/src/main/java/eu/faircode/email/DeepL.java index 714b6495d8..b45cca2413 100644 --- a/app/src/main/java/eu/faircode/email/DeepL.java +++ b/app/src/main/java/eu/faircode/email/DeepL.java @@ -78,8 +78,46 @@ public class DeepL { JSONObject jroot = new JSONObject(response); JSONArray jtranslations = jroot.getJSONArray("translations"); + if (jtranslations.length() == 0) + throw new FileNotFoundException(); JSONObject jtranslation = (JSONObject) jtranslations.get(0); - return jtranslation.getString("text"); + String detected = jtranslation.getString("detected_source_language"); + String translated = jtranslation.getString("text"); + return translated; + } finally { + connection.disconnect(); + } + } + + public static Integer[] getUsage(Context context) throws IOException, JSONException { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + String deepl = prefs.getString("deepl", null); + + URL url = new URL(DEEPL_BASE_URI + "usage?auth_key=" + deepl); + HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); + connection.setReadTimeout(DEEPL_TIMEOUT * 1000); + connection.setConnectTimeout(DEEPL_TIMEOUT * 1000); + connection.setRequestProperty("User-Agent", WebViewEx.getUserAgent(context)); + connection.connect(); + + try { + int status = connection.getResponseCode(); + if (status != HttpsURLConnection.HTTP_OK) { + String error = "Error " + status + ": " + connection.getResponseMessage(); + try { + error += "\n" + Helper.readStream(connection.getErrorStream()); + } catch (Throwable ex) { + Log.w(ex); + } + throw new FileNotFoundException(error); + } + + String response = Helper.readStream(connection.getInputStream()); + + JSONObject jroot = new JSONObject(response); + int count = jroot.getInt("character_count"); + int limit = jroot.getInt("character_limit"); + return new Integer[]{count, limit}; } finally { connection.disconnect(); } diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index ff95612dd1..f8795aed8b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -2068,7 +2068,7 @@ public class FragmentCompose extends FragmentBase { @Override protected void onException(Bundle args, Throwable ex) { - Log.unexpectedError(getParentFragmentManager(), ex); + Log.unexpectedError(getParentFragmentManager(), ex, false); } }.execute(this, args, "compose:translate"); } @@ -6732,15 +6732,14 @@ public class FragmentCompose extends FragmentBase { @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { - final Context context = getContext(); final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + String key = prefs.getString("deepl", null); View view = LayoutInflater.from(context).inflate(R.layout.dialog_deepl, null); - final EditText etKey = view.findViewById(R.id.etKey); final ImageButton ibInfo = view.findViewById(R.id.ibInfo); - - etKey.setText(prefs.getString("deepl", null)); + final EditText etKey = view.findViewById(R.id.etKey); + final TextView tvUsage = view.findViewById(R.id.tvUsage); ibInfo.setOnClickListener(new View.OnClickListener() { @Override @@ -6749,6 +6748,37 @@ public class FragmentCompose extends FragmentBase { } }); + etKey.setText(key); + + tvUsage.setVisibility(View.GONE); + + if (!TextUtils.isEmpty(key)) { + Bundle args = new Bundle(); + args.putString("key", key); + + new SimpleTask() { + @Override + protected Integer[] onExecute(Context context, Bundle args) throws Throwable { + String key = args.getString("key"); + return DeepL.getUsage(context); + } + + @Override + protected void onExecuted(Bundle args, Integer[] usage) { + tvUsage.setText( + Helper.humanReadableByteCount(usage[0]) + "/" + + Helper.humanReadableByteCount(usage[1])); + tvUsage.setVisibility(View.VISIBLE); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + if (BuildConfig.DEBUG) + Log.unexpectedError(getParentFragmentManager(), ex); + } + }.execute(this, new Bundle(), "deepl:usage"); + } + return new AlertDialog.Builder(context) .setView(view) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { diff --git a/app/src/main/res/layout/dialog_deepl.xml b/app/src/main/res/layout/dialog_deepl.xml index c1442d9d86..8dcecaebe6 100644 --- a/app/src/main/res/layout/dialog_deepl.xml +++ b/app/src/main/res/layout/dialog_deepl.xml @@ -44,4 +44,14 @@ + + \ No newline at end of file