From ca9001dcf5292ff15b5464e473d6f32329f41b8e Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 29 May 2023 15:19:22 +0200 Subject: [PATCH] Added OpenAI Uri option --- .../faircode/email/FragmentOptionsMisc.java | 28 ++++++++++++++++++- .../main/java/eu/faircode/email/OpenAI.java | 7 ++++- .../main/res/layout/fragment_options_misc.xml | 17 +++++++++-- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java index bb5867e316..9386f93d4b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java @@ -161,6 +161,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc private ImageButton ibSend; private SwitchCompat swOpenAi; private TextView tvOpenAiPrivacy; + private EditText etOpenAi; private TextInputLayout tilOpenAi; private EditText etOpenAiModel; private TextView tvOpenAiTemperature; @@ -280,7 +281,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc "deepl_enabled", "vt_enabled", "vt_apikey", "send_enabled", "send_host", "send_dlimit", "send_tlimit", - "openai_enabled", "openai_apikey", "openai_model", "openai_temperature", "openai_moderation", + "openai_enabled", "openai_uri", "openai_apikey", "openai_model", "openai_temperature", "openai_moderation", "updates", "weekly", "beta", "show_changelog", "announcements", "crash_reports", "cleanup_attachments", "watchdog", "experiments", "main_log", "main_log_memory", "protocol", "log_level", "debug", "leak_canary", @@ -406,6 +407,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc ibSend = view.findViewById(R.id.ibSend); swOpenAi = view.findViewById(R.id.swOpenAi); tvOpenAiPrivacy = view.findViewById(R.id.tvOpenAiPrivacy); + etOpenAi = view.findViewById(R.id.etOpenAi); tilOpenAi = view.findViewById(R.id.tilOpenAi); etOpenAiModel = view.findViewById(R.id.etOpenAiModel); tvOpenAiTemperature = view.findViewById(R.id.tvOpenAiTemperature); @@ -1047,6 +1049,28 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc } }); + etOpenAi.setHint(BuildConfig.OPENAI_ENDPOINT); + etOpenAi.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + // Do nothing + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + // Do nothing + } + + @Override + public void afterTextChanged(Editable s) { + String apikey = s.toString().trim(); + if (TextUtils.isEmpty(apikey)) + prefs.edit().remove("openai_uri").apply(); + else + prefs.edit().putString("openai_uri", apikey).apply(); + } + }); + tilOpenAi.getEditText().addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { @@ -2238,6 +2262,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc "lt_key".equals(key) || "vt_apikey".equals(key) || "send_host".equals(key) || + "openai_uri".equals(key) || "openai_apikey".equals(key) || "openai_model".equals(key)) return; @@ -2430,6 +2455,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc swSend.setChecked(prefs.getBoolean("send_enabled", false)); etSend.setText(prefs.getString("send_host", null)); swOpenAi.setChecked(prefs.getBoolean("openai_enabled", false)); + etOpenAi.setText(prefs.getString("openai_uri", null)); tilOpenAi.getEditText().setText(prefs.getString("openai_apikey", null)); etOpenAiModel.setText(prefs.getString("openai_model", null)); diff --git a/app/src/main/java/eu/faircode/email/OpenAI.java b/app/src/main/java/eu/faircode/email/OpenAI.java index b1dbbd589d..f06a43fe86 100644 --- a/app/src/main/java/eu/faircode/email/OpenAI.java +++ b/app/src/main/java/eu/faircode/email/OpenAI.java @@ -154,12 +154,17 @@ public class OpenAI { return choices; } + private static String getUri(Context context) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + return prefs.getString("openai_uri", BuildConfig.OPENAI_ENDPOINT); + } + private static JSONObject call(Context context, String method, String path, JSONObject args) throws JSONException, IOException { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); String apikey = prefs.getString("openai_apikey", null); // https://platform.openai.com/docs/api-reference/introduction - Uri uri = Uri.parse(BuildConfig.OPENAI_ENDPOINT).buildUpon().appendEncodedPath(path).build(); + Uri uri = Uri.parse(getUri(context)).buildUpon().appendEncodedPath(path).build(); Log.i("OpenAI uri=" + uri); long start = new Date().getTime(); diff --git a/app/src/main/res/layout/fragment_options_misc.xml b/app/src/main/res/layout/fragment_options_misc.xml index 747692c4cb..8c0642f8a1 100644 --- a/app/src/main/res/layout/fragment_options_misc.xml +++ b/app/src/main/res/layout/fragment_options_misc.xml @@ -967,6 +967,19 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvOpenAiHint" /> + + + app:layout_constraintTop_toBottomOf="@+id/etOpenAi"> + app:constraint_referenced_ids="swOpenAi,tvOpenAiHint,tvOpenAiPrivacy,etOpenAi,tilOpenAi,ibOpenAi,etOpenAiModel,tvOpenAiTemperature,sbOpenAiTemperature" />