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;

Reply via email to