diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
index 33932c11e0..9500dabc6c 100644
--- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
+++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
@@ -123,6 +123,23 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
private TextView tvFtsIndexed;
private TextView tvFtsPro;
private Spinner spLanguage;
+ private SwitchCompat swUpdates;
+ private TextView tvGithubPrivacy;
+ private ImageButton ibChannelUpdated;
+ private SwitchCompat swCheckWeekly;
+ private SwitchCompat swBeta;
+ private TextView tvBitBucketPrivacy;
+ private SwitchCompat swChangelog;
+ private SwitchCompat swAnnouncements;
+ private TextView tvAnnouncementsPrivacy;
+ private SwitchCompat swCrashReports;
+ private TextView tvUuid;
+ private Button btnReset;
+ private SwitchCompat swCleanupAttachments;
+ private Button btnCleanup;
+ private TextView tvLastCleanup;
+ private TextView tvSdcard;
+
private SwitchCompat swLanguageTool;
private TextView tvLanguageToolPrivacy;
private SwitchCompat swLanguageToolAuto;
@@ -148,22 +165,6 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
private TextView tvOpenAiTemperature;
private SeekBar sbOpenAiTemperature;
private ImageButton ibOpenAi;
- private SwitchCompat swUpdates;
- private TextView tvGithubPrivacy;
- private ImageButton ibChannelUpdated;
- private SwitchCompat swCheckWeekly;
- private SwitchCompat swBeta;
- private TextView tvBitBucketPrivacy;
- private SwitchCompat swChangelog;
- private SwitchCompat swAnnouncements;
- private TextView tvAnnouncementsPrivacy;
- private SwitchCompat swCrashReports;
- private TextView tvUuid;
- private Button btnReset;
- private SwitchCompat swCleanupAttachments;
- private Button btnCleanup;
- private TextView tvLastCleanup;
- private TextView tvSdcard;
private CardView cardAdvanced;
private SwitchCompat swWatchdog;
@@ -356,6 +357,23 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
tvFtsIndexed = view.findViewById(R.id.tvFtsIndexed);
tvFtsPro = view.findViewById(R.id.tvFtsPro);
spLanguage = view.findViewById(R.id.spLanguage);
+ swUpdates = view.findViewById(R.id.swUpdates);
+ tvGithubPrivacy = view.findViewById(R.id.tvGithubPrivacy);
+ ibChannelUpdated = view.findViewById(R.id.ibChannelUpdated);
+ swCheckWeekly = view.findViewById(R.id.swWeekly);
+ swBeta = view.findViewById(R.id.swBeta);
+ tvBitBucketPrivacy = view.findViewById(R.id.tvBitBucketPrivacy);
+ swChangelog = view.findViewById(R.id.swChangelog);
+ swAnnouncements = view.findViewById(R.id.swAnnouncements);
+ tvAnnouncementsPrivacy = view.findViewById(R.id.tvAnnouncementsPrivacy);
+ swCrashReports = view.findViewById(R.id.swCrashReports);
+ tvUuid = view.findViewById(R.id.tvUuid);
+ btnReset = view.findViewById(R.id.btnReset);
+ swCleanupAttachments = view.findViewById(R.id.swCleanupAttachments);
+ btnCleanup = view.findViewById(R.id.btnCleanup);
+ tvLastCleanup = view.findViewById(R.id.tvLastCleanup);
+ tvSdcard = view.findViewById(R.id.tvSdcard);
+
swLanguageTool = view.findViewById(R.id.swLanguageTool);
tvLanguageToolPrivacy = view.findViewById(R.id.tvLanguageToolPrivacy);
swLanguageToolAuto = view.findViewById(R.id.swLanguageToolAuto);
@@ -381,22 +399,6 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
tvOpenAiTemperature = view.findViewById(R.id.tvOpenAiTemperature);
sbOpenAiTemperature = view.findViewById(R.id.sbOpenAiTemperature);
ibOpenAi = view.findViewById(R.id.ibOpenAi);
- swUpdates = view.findViewById(R.id.swUpdates);
- tvGithubPrivacy = view.findViewById(R.id.tvGithubPrivacy);
- ibChannelUpdated = view.findViewById(R.id.ibChannelUpdated);
- swCheckWeekly = view.findViewById(R.id.swWeekly);
- swBeta = view.findViewById(R.id.swBeta);
- tvBitBucketPrivacy = view.findViewById(R.id.tvBitBucketPrivacy);
- swChangelog = view.findViewById(R.id.swChangelog);
- swAnnouncements = view.findViewById(R.id.swAnnouncements);
- tvAnnouncementsPrivacy = view.findViewById(R.id.tvAnnouncementsPrivacy);
- swCrashReports = view.findViewById(R.id.swCrashReports);
- tvUuid = view.findViewById(R.id.tvUuid);
- btnReset = view.findViewById(R.id.btnReset);
- swCleanupAttachments = view.findViewById(R.id.swCleanupAttachments);
- btnCleanup = view.findViewById(R.id.btnCleanup);
- tvLastCleanup = view.findViewById(R.id.tvLastCleanup);
- tvSdcard = view.findViewById(R.id.tvSdcard);
cardAdvanced = view.findViewById(R.id.cardAdvanced);
swWatchdog = view.findViewById(R.id.swWatchdog);
@@ -683,6 +685,124 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
}
});
+ swUpdates.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
+ prefs.edit().putBoolean("updates", checked).apply();
+ swCheckWeekly.setEnabled(checked);
+ swBeta.setEnabled(checked);
+ if (!checked) {
+ NotificationManager nm =
+ Helper.getSystemService(getContext(), NotificationManager.class);
+ nm.cancel(NotificationHelper.NOTIFICATION_UPDATE);
+ }
+ }
+ });
+
+ tvGithubPrivacy.getPaint().setUnderlineText(true);
+ tvGithubPrivacy.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Helper.view(v.getContext(), Uri.parse(Helper.GITHUB_PRIVACY_URI), true);
+ }
+ });
+
+ final Intent channelUpdate = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS)
+ .putExtra(Settings.EXTRA_APP_PACKAGE, getContext().getPackageName())
+ .putExtra(Settings.EXTRA_CHANNEL_ID, "update");
+
+ ibChannelUpdated.setVisibility(View.GONE);
+ ibChannelUpdated.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ v.getContext().startActivity(channelUpdate);
+ }
+ });
+
+ swCheckWeekly.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
+ prefs.edit().putBoolean("weekly", checked).apply();
+ }
+ });
+
+ swBeta.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
+ prefs.edit().putBoolean("beta", checked).apply();
+ }
+ });
+
+ tvBitBucketPrivacy.getPaint().setUnderlineText(true);
+ tvBitBucketPrivacy.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Helper.view(v.getContext(), Uri.parse(Helper.BITBUCKET_PRIVACY_URI), true);
+ }
+ });
+
+ swChangelog.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
+ prefs.edit().putBoolean("show_changelog", checked).apply();
+ }
+ });
+
+ swAnnouncements.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
+ prefs.edit().putBoolean("announcements", checked).apply();
+ }
+ });
+
+ tvAnnouncementsPrivacy.getPaint().setUnderlineText(true);
+ tvAnnouncementsPrivacy.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Helper.view(v.getContext(), Uri.parse(Helper.GITHUB_PRIVACY_URI), true);
+ }
+ });
+
+ swCrashReports.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
+ prefs.edit()
+ .remove("crash_report_count")
+ .putBoolean("crash_reports", checked)
+ .apply();
+ Log.setCrashReporting(checked);
+ }
+ });
+
+ btnReset.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onResetQuestions();
+ }
+ });
+
+ swCleanupAttachments.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
+ prefs.edit().putBoolean("cleanup_attachments", checked).apply();
+ }
+ });
+
+ btnCleanup.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ onCleanup();
+ }
+ });
+
+ tvSdcard.setPaintFlags(tvSdcard.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
+ tvSdcard.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Helper.viewFAQ(v.getContext(), 93);
+ }
+ });
+
swLanguageTool.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
@@ -968,124 +1088,6 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
}
});
- swUpdates.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
- prefs.edit().putBoolean("updates", checked).apply();
- swCheckWeekly.setEnabled(checked);
- swBeta.setEnabled(checked);
- if (!checked) {
- NotificationManager nm =
- Helper.getSystemService(getContext(), NotificationManager.class);
- nm.cancel(NotificationHelper.NOTIFICATION_UPDATE);
- }
- }
- });
-
- tvGithubPrivacy.getPaint().setUnderlineText(true);
- tvGithubPrivacy.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Helper.view(v.getContext(), Uri.parse(Helper.GITHUB_PRIVACY_URI), true);
- }
- });
-
- final Intent channelUpdate = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS)
- .putExtra(Settings.EXTRA_APP_PACKAGE, getContext().getPackageName())
- .putExtra(Settings.EXTRA_CHANNEL_ID, "update");
-
- ibChannelUpdated.setVisibility(View.GONE);
- ibChannelUpdated.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- v.getContext().startActivity(channelUpdate);
- }
- });
-
- swCheckWeekly.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
- prefs.edit().putBoolean("weekly", checked).apply();
- }
- });
-
- swBeta.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
- prefs.edit().putBoolean("beta", checked).apply();
- }
- });
-
- tvBitBucketPrivacy.getPaint().setUnderlineText(true);
- tvBitBucketPrivacy.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Helper.view(v.getContext(), Uri.parse(Helper.BITBUCKET_PRIVACY_URI), true);
- }
- });
-
- swChangelog.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
- prefs.edit().putBoolean("show_changelog", checked).apply();
- }
- });
-
- swAnnouncements.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
- prefs.edit().putBoolean("announcements", checked).apply();
- }
- });
-
- tvAnnouncementsPrivacy.getPaint().setUnderlineText(true);
- tvAnnouncementsPrivacy.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Helper.view(v.getContext(), Uri.parse(Helper.GITHUB_PRIVACY_URI), true);
- }
- });
-
- swCrashReports.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
- prefs.edit()
- .remove("crash_report_count")
- .putBoolean("crash_reports", checked)
- .apply();
- Log.setCrashReporting(checked);
- }
- });
-
- btnReset.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- onResetQuestions();
- }
- });
-
- swCleanupAttachments.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
- prefs.edit().putBoolean("cleanup_attachments", checked).apply();
- }
- });
-
- btnCleanup.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- onCleanup();
- }
- });
-
- tvSdcard.setPaintFlags(tvSdcard.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
- tvSdcard.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Helper.viewFAQ(v.getContext(), 93);
- }
- });
-
swWatchdog.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
@@ -2055,16 +2057,15 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
}
});
- grpVirusTotal.setVisibility(BuildConfig.PLAY_STORE_RELEASE ? View.GONE : View.VISIBLE);
- grpSend.setVisibility(BuildConfig.PLAY_STORE_RELEASE ? View.GONE : View.VISIBLE);
- grpOpenAi.setVisibility(BuildConfig.PLAY_STORE_RELEASE ? View.GONE : View.VISIBLE);
-
grpUpdates.setVisibility(!BuildConfig.DEBUG &&
(Helper.isPlayStoreInstall() || !Helper.hasValidFingerprint(getContext()))
? View.GONE : View.VISIBLE);
grpBitbucket.setVisibility(View.GONE);
grpAnnouncements.setVisibility(TextUtils.isEmpty(BuildConfig.ANNOUNCEMENT_URI)
? View.GONE : View.VISIBLE);
+ grpVirusTotal.setVisibility(BuildConfig.PLAY_STORE_RELEASE ? View.GONE : View.VISIBLE);
+ grpSend.setVisibility(BuildConfig.PLAY_STORE_RELEASE ? View.GONE : View.VISIBLE);
+ grpOpenAi.setVisibility(BuildConfig.PLAY_STORE_RELEASE ? View.GONE : View.VISIBLE);
grpTest.setVisibility(BuildConfig.TEST_RELEASE ? View.VISIBLE : View.GONE);
setLastCleanup(prefs.getLong("last_cleanup", -1));
@@ -2303,6 +2304,18 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
selected = pos + 1;
}
+ swUpdates.setChecked(prefs.getBoolean("updates", true));
+ swCheckWeekly.setChecked(prefs.getBoolean("weekly", Helper.hasPlayStore(getContext())));
+ swCheckWeekly.setEnabled(swUpdates.isChecked());
+ swBeta.setChecked(prefs.getBoolean("beta", false));
+ swBeta.setEnabled(swUpdates.isChecked());
+ swChangelog.setChecked(prefs.getBoolean("show_changelog", !BuildConfig.PLAY_STORE_RELEASE));
+ swAnnouncements.setChecked(prefs.getBoolean("announcements", true));
+ swExperiments.setChecked(prefs.getBoolean("experiments", false));
+ swCrashReports.setChecked(prefs.getBoolean("crash_reports", false));
+ tvUuid.setText(prefs.getString("uuid", null));
+ swCleanupAttachments.setChecked(prefs.getBoolean("cleanup_attachments", false));
+
ArrayAdapter adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_spinner_item, android.R.id.text1, display);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spLanguage.setAdapter(adapter);
@@ -2330,18 +2343,6 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
tvOpenAiTemperature.setText(getString(R.string.title_advanced_openai_temperature, NF.format(temperature)));
sbOpenAiTemperature.setProgress(Math.round(temperature * 10));
- swUpdates.setChecked(prefs.getBoolean("updates", true));
- swCheckWeekly.setChecked(prefs.getBoolean("weekly", Helper.hasPlayStore(getContext())));
- swCheckWeekly.setEnabled(swUpdates.isChecked());
- swBeta.setChecked(prefs.getBoolean("beta", false));
- swBeta.setEnabled(swUpdates.isChecked());
- swChangelog.setChecked(prefs.getBoolean("show_changelog", !BuildConfig.PLAY_STORE_RELEASE));
- swAnnouncements.setChecked(prefs.getBoolean("announcements", true));
- swExperiments.setChecked(prefs.getBoolean("experiments", false));
- swCrashReports.setChecked(prefs.getBoolean("crash_reports", false));
- tvUuid.setText(prefs.getString("uuid", null));
- swCleanupAttachments.setChecked(prefs.getBoolean("cleanup_attachments", false));
-
swWatchdog.setChecked(prefs.getBoolean("watchdog", true));
swMainLog.setChecked(prefs.getBoolean("main_log", true));
swMainLogMem.setChecked(prefs.getBoolean("main_log_memory", false));
diff --git a/app/src/main/res/layout/fragment_options_misc.xml b/app/src/main/res/layout/fragment_options_misc.xml
index ecc7409d21..f2b5b72ba4 100644
--- a/app/src/main/res/layout/fragment_options_misc.xml
+++ b/app/src/main/res/layout/fragment_options_misc.xml
@@ -307,32 +307,24 @@
app:layout_constraintTop_toBottomOf="@id/spLanguage" />
-
-
+ app:layout_constraintTop_toBottomOf="@id/swUpdates" />
+
+
-
+ app:layout_constraintTop_toBottomOf="@id/swBeta" />
-
+ app:layout_constraintTop_toBottomOf="@id/tvBitBucketPrivacy"
+ app:switchPadding="12dp" />
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@id/swChangelog"
+ app:switchPadding="12dp" />
-
-
+ app:layout_constraintTop_toBottomOf="@id/swAnnouncements" />
+ app:layout_constraintTop_toBottomOf="@id/swCrashReports" />
-
+ app:layout_constraintTop_toBottomOf="@id/tvUuid" />
-
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@id/swCleanupAttachments" />
-
+ app:layout_constraintTop_toBottomOf="@id/tvCleanupAttachmentsHint" />
-
+ app:layout_constraintTop_toBottomOf="@id/btnCleanup" />
-
+ app:layout_constraintTop_toBottomOf="@id/tvCleanupHint" />
-
+ app:layout_constraintTop_toBottomOf="@id/tvLastCleanup" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@id/tvLanguageToolHint" />
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@id/tvLanguageToolPrivacy"
+ app:switchPadding="12dp" />
-
+ app:layout_constraintTop_toBottomOf="@id/swLanguageToolAuto"
+ app:switchPadding="12dp" />
+ app:layout_constraintTop_toBottomOf="@id/swLanguageToolPicky" />
-
+ app:layout_constraintTop_toBottomOf="@id/etLanguageTool" />
-
+ app:layout_constraintTop_toBottomOf="@+id/etLanguageToolUser">
+
+
+
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@id/tvDeepLHint" />
+ app:layout_constraintTop_toBottomOf="@id/tvDeepLPrivacy"
+ app:srcCompat="@drawable/twotone_settings_24" />
-
+ app:layout_constraintTop_toBottomOf="@id/swVirusTotal" />
+ app:layout_constraintTop_toBottomOf="@id/tvVirusTotalHint" />
-
+ app:layout_constraintTop_toBottomOf="@+id/tvVirusTotalPrivacy">
+
+
+
+
+
-
+
+
+ app:layout_constraintTop_toBottomOf="@id/etSend"
+ app:srcCompat="@drawable/twotone_info_24" />
+ app:layout_constraintTop_toBottomOf="@id/swOpenAi" />
-
+ app:layout_constraintTop_toBottomOf="@id/tvOpenAiHint" />
-
+ app:layout_constraintTop_toBottomOf="@+id/tvOpenAiPrivacy">
+
+
+
+ app:layout_constraintTop_toBottomOf="@id/tilOpenAi" />
-
+ app:layout_constraintTop_toBottomOf="@id/tvOpenAiModel" />
+ app:layout_constraintTop_toBottomOf="@id/etOpenAiModel" />
-
+ app:layout_constraintTop_toBottomOf="@id/tvOpenAiTemperature" />
-
+ app:layout_constraintTop_toBottomOf="@id/sbOpenAiTemperature"
+ app:srcCompat="@drawable/twotone_info_24" />
+ app:constraint_referenced_ids="swVirusTotal,tvVirusTotalHint,tvVirusTotalPrivacy,tilVirusTotal,ibVirusTotal" />
-
-
-
-
+ app:constraint_referenced_ids="swOpenAi,tvOpenAiHint,tvOpenAiPrivacy,tilOpenAi,ibOpenAi,etOpenAiModel,tvOpenAiTemperature,sbOpenAiTemperature" />
-
@@ -950,7 +1028,7 @@
app:cardElevation="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@id/cardGeneral">
+ app:layout_constraintTop_toBottomOf="@id/cardIntegration">
Message body
File
Cloud
+ Integrations
Debug
Portrait mode