Experiment: open side-by-side

pull/214/head
M66B 1 year ago
parent 4b12584e46
commit 75f73fe63b

@ -248,6 +248,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
private SwitchCompat swThreadByRef; private SwitchCompat swThreadByRef;
private SwitchCompat swMdn; private SwitchCompat swMdn;
private SwitchCompat swAppChooser; private SwitchCompat swAppChooser;
private SwitchCompat swAdjacent;
private SwitchCompat swDeleteConfirmation; private SwitchCompat swDeleteConfirmation;
private SwitchCompat swDmarcViewer; private SwitchCompat swDmarcViewer;
private EditText etKeywords; private EditText etKeywords;
@ -313,7 +314,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
"exact_alarms", "exact_alarms",
"native_dkim", "native_arc", "native_arc_whitelist", "native_dkim", "native_arc", "native_arc_whitelist",
"webp", "easy_correct", "infra", "tld_flags", "dup_msgids", "thread_byref", "mdn", "webp", "easy_correct", "infra", "tld_flags", "dup_msgids", "thread_byref", "mdn",
"app_chooser", "delete_confirmation", "global_keywords", "test_iab" "app_chooser", "adjacent", "delete_confirmation", "global_keywords", "test_iab"
}; };
private final static String[] RESET_QUESTIONS = new String[]{ private final static String[] RESET_QUESTIONS = new String[]{
@ -510,6 +511,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
swThreadByRef = view.findViewById(R.id.swThreadByRef); swThreadByRef = view.findViewById(R.id.swThreadByRef);
swMdn = view.findViewById(R.id.swMdn); swMdn = view.findViewById(R.id.swMdn);
swAppChooser = view.findViewById(R.id.swAppChooser); swAppChooser = view.findViewById(R.id.swAppChooser);
swAdjacent = view.findViewById(R.id.swAdjacent);
swDeleteConfirmation = view.findViewById(R.id.swDeleteConfirmation); swDeleteConfirmation = view.findViewById(R.id.swDeleteConfirmation);
swDmarcViewer = view.findViewById(R.id.swDmarcViewer); swDmarcViewer = view.findViewById(R.id.swDmarcViewer);
etKeywords = view.findViewById(R.id.etKeywords); etKeywords = view.findViewById(R.id.etKeywords);
@ -1942,6 +1944,13 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
} }
}); });
swAdjacent.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
prefs.edit().putBoolean("adjacent", checked).apply();
}
});
swDeleteConfirmation.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { swDeleteConfirmation.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override @Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
@ -2724,6 +2733,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
swThreadByRef.setChecked(prefs.getBoolean("thread_byref", true)); swThreadByRef.setChecked(prefs.getBoolean("thread_byref", true));
swMdn.setChecked(prefs.getBoolean("mdn", swExperiments.isChecked())); swMdn.setChecked(prefs.getBoolean("mdn", swExperiments.isChecked()));
swAppChooser.setChecked(prefs.getBoolean("app_chooser", false)); swAppChooser.setChecked(prefs.getBoolean("app_chooser", false));
swAdjacent.setChecked(prefs.getBoolean("adjacent", false));
swDeleteConfirmation.setChecked(prefs.getBoolean("delete_confirmation", true)); swDeleteConfirmation.setChecked(prefs.getBoolean("delete_confirmation", true));
swDmarcViewer.setChecked(Helper.isComponentEnabled(getContext(), ActivityDmarc.class)); swDmarcViewer.setChecked(Helper.isComponentEnabled(getContext(), ActivityDmarc.class));
etKeywords.setText(prefs.getString("global_keywords", null)); etKeywords.setText(prefs.getString("global_keywords", null));

@ -1008,6 +1008,14 @@ public class Helper {
intent.setDataAndTypeAndNormalize(uri, type); intent.setDataAndTypeAndNormalize(uri, type);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
// https://developer.android.com/guide/topics/large-screens/multi-window-support#launch_adjacent
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean adjacent = prefs.getBoolean("adjacent", false);
if (adjacent &&
context instanceof ActivityView &&
!((ActivityView) context).isSplit())
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT | Intent.FLAG_ACTIVITY_NEW_TASK);
if (!TextUtils.isEmpty(name)) if (!TextUtils.isEmpty(name))
intent.putExtra(Intent.EXTRA_TITLE, Helper.sanitizeFilename(name)); intent.putExtra(Intent.EXTRA_TITLE, Helper.sanitizeFilename(name));
Log.i("Intent=" + intent + " type=" + type); Log.i("Intent=" + intent + " type=" + type);
@ -1119,6 +1127,13 @@ public class Helper {
if (task) if (task)
view.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); view.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// https://developer.android.com/guide/topics/large-screens/multi-window-support#launch_adjacent
boolean adjacent = prefs.getBoolean("adjacent", false);
if (adjacent &&
context instanceof ActivityView &&
!((ActivityView) context).isSplit())
view.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT | Intent.FLAG_ACTIVITY_NEW_TASK);
if ("chooser".equals(open_with_pkg) && !open_with_tabs) { if ("chooser".equals(open_with_pkg) && !open_with_tabs) {
try { try {
EntityLog.log(context, "Launching chooser uri=" + uri + EntityLog.log(context, "Launching chooser uri=" + uri +

@ -2380,6 +2380,18 @@
app:layout_constraintTop_toBottomOf="@id/swMdn" app:layout_constraintTop_toBottomOf="@id/swMdn"
app:switchPadding="12dp" /> app:switchPadding="12dp" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/swAdjacent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:checked="true"
android:text="@string/title_advanced_adjacent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/swAppChooser"
app:switchPadding="12dp" />
<androidx.appcompat.widget.SwitchCompat <androidx.appcompat.widget.SwitchCompat
android:id="@+id/swDeleteConfirmation" android:id="@+id/swDeleteConfirmation"
android:layout_width="0dp" android:layout_width="0dp"
@ -2388,7 +2400,7 @@
android:text="@string/title_advanced_delete_confirmation" android:text="@string/title_advanced_delete_confirmation"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/swAppChooser" app:layout_constraintTop_toBottomOf="@id/swAdjacent"
app:switchPadding="12dp" /> app:switchPadding="12dp" />
<TextView <TextView

@ -919,6 +919,7 @@
<string name="title_advanced_thread_by_ref" translatable="false">Thread by common reference</string> <string name="title_advanced_thread_by_ref" translatable="false">Thread by common reference</string>
<string name="title_advanced_mdn" translatable="false">Process MDNs</string> <string name="title_advanced_mdn" translatable="false">Process MDNs</string>
<string name="title_advanced_app_chooser" translatable="false">Use Android app chooser</string> <string name="title_advanced_app_chooser" translatable="false">Use Android app chooser</string>
<string name="title_advanced_adjacent" translatable="false">Open side-by-side</string>
<string name="title_advanced_delete_confirmation" translatable="false">Permanent deletion confirmation</string> <string name="title_advanced_delete_confirmation" translatable="false">Permanent deletion confirmation</string>
<string name="title_advanced_deletion_confirmation_hint" translatable="false">If you turn this off, please do not complain if you accidentally delete messages irreversibly</string> <string name="title_advanced_deletion_confirmation_hint" translatable="false">If you turn this off, please do not complain if you accidentally delete messages irreversibly</string>
<string name="title_advanced_dmarc_viewer" translatable="false">DMARC viewer</string> <string name="title_advanced_dmarc_viewer" translatable="false">DMARC viewer</string>

Loading…
Cancel
Save