android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java | 86 +++++----- 1 file changed, 49 insertions(+), 37 deletions(-)
New commits: commit 212de77c88d43ed373e35413deab714f453f64c2 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Wed Jul 9 13:54:23 2025 +0200 Commit: Adolfo Jayme Barrientos <fit...@ubuntu.com> CommitDate: Mon Jul 14 19:05:24 2025 +0200 android: Port from deprecated ComponentActivity.onBackPressed (I) Port LibreOfficeMainActivity from overriding the deprecated androidx.ComponentActivity.onBackPressed method [1] and register a androidx.activity.OnBackPressedCallback [2]. Overriding the deprecated API was already triggering warning /home/michi/development/git/libreoffice-WORKTREE-android/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java:511: warning: [deprecation] onBackPressed() in ComponentActivity has been deprecated public void onBackPressed() { ^ and that was turned into a build/lint error in a WIP branch updating the compileSdkVersion and targetSdkVersion to 36: /home/michi/development/git/libreoffice-WORKTREE-android/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java:511: Error: onBackPressed is no longer called for back gestures; migrate to AndroidX's backward compatible OnBackPressedDispatcher [GestureBackNavigation] public void onBackPressed() { ~~~~~~~~~~~~~ Interaction when using the back button (or gesture) remains as before in a quick test (with an additional local revert of commit 9d1e76f7da12353afc3d9479d3b2ecddbb2a71e6 to prevent a deadlock when opening documents that is unrelated to this change here). [1] https://developer.android.com/reference/androidx/activity/ComponentActivity#onBackPressed() [2] https://developer.android.com/reference/androidx/activity/OnBackPressedCallback Change-Id: Id5bde62fede7e0550a86bd0ba9bd1535a84003dc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187572 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> (cherry picked from commit 9fa0ea06bc4f6be647ef4ac4d5bc1830bfc93ec4) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187686 Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> diff --git a/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java b/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java index 505c886c4403..63e7e8a314f4 100644 --- a/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java +++ b/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java @@ -14,6 +14,8 @@ import android.os.Bundle; import android.provider.DocumentsContract; import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.google.android.material.snackbar.Snackbar; + +import androidx.activity.OnBackPressedCallback; import androidx.drawerlayout.widget.DrawerLayout; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; @@ -259,6 +261,53 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Shared bottomToolbarSheetBehavior.setHideable(true); toolbarColorPickerBottomSheetBehavior.setHideable(true); toolbarBackColorPickerBottomSheetBehavior.setHideable(true); + + getOnBackPressedDispatcher().addCallback(new OnBackPressedCallback(true) { + private void forwardBackPress() + { + setEnabled(false); + LibreOfficeMainActivity.this.getOnBackPressedDispatcher().onBackPressed(); + setEnabled(true); + } + + @Override + public void handleOnBackPressed() { + if (!isDocumentChanged) { + forwardBackPress(); + return; + } + + + DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which){ + case DialogInterface.BUTTON_POSITIVE: + mTileProvider.saveDocument(); + isDocumentChanged=false; + forwardBackPress(); + break; + case DialogInterface.BUTTON_NEGATIVE: + //CANCEL + break; + case DialogInterface.BUTTON_NEUTRAL: + //NO + isDocumentChanged=false; + forwardBackPress(); + break; + } + } + }; + + AlertDialog.Builder builder = new AlertDialog.Builder(LibreOfficeMainActivity.this); + builder.setMessage(R.string.save_alert_dialog_title) + .setPositiveButton(R.string.save_document, dialogClickListener) + .setNegativeButton(R.string.action_cancel, dialogClickListener) + .setNeutralButton(R.string.no_save_document, dialogClickListener) + .show(); + + } + }); } private void updatePreferences() { @@ -507,43 +556,6 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Shared } } } - @Override - public void onBackPressed() { - if (!isDocumentChanged) { - super.onBackPressed(); - return; - } - - - DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - switch (which){ - case DialogInterface.BUTTON_POSITIVE: - mTileProvider.saveDocument(); - isDocumentChanged=false; - onBackPressed(); - break; - case DialogInterface.BUTTON_NEGATIVE: - //CANCEL - break; - case DialogInterface.BUTTON_NEUTRAL: - //NO - isDocumentChanged=false; - onBackPressed(); - break; - } - } - }; - - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setMessage(R.string.save_alert_dialog_title) - .setPositiveButton(R.string.save_document, dialogClickListener) - .setNegativeButton(R.string.action_cancel, dialogClickListener) - .setNeutralButton(R.string.no_save_document, dialogClickListener) - .show(); - - } public List<DocumentPartView> getDocumentPartView() { return mDocumentPartView;