OSDN Git Service

Fix RequestPermissionActivity crash
authortmfang <tmfang@google.com>
Thu, 9 Aug 2018 04:48:58 +0000 (12:48 +0800)
committertmfang <tmfang@google.com>
Thu, 9 Aug 2018 04:48:58 +0000 (12:48 +0800)
- Dialog needs to use AppCompat theme.
- Activity needs to finish itself when user closed AlertDialog.
If we don't fix it, you can see a window after AlertDialog was dismissed.

Change-Id: Idfbd6b68bcdd3b577f1459657b635b7af9397276
Fixes: 112018696
Test: robo test, manual test

res/values/themes.xml
src/com/android/settings/bluetooth/RequestPermissionActivity.java

index 63944d9..0f15053 100644 (file)
         <item name="android:navigationBarColor">#00000000</item>
     </style>
 
-    <style name="Theme.BluetoothPermission" parent="@android:style/Theme.Material.Light.Dialog.Alert">
+    <style name="Theme.BluetoothPermission" parent="@style/Theme.AlertDialog">
         <item name="android:windowNoTitle">true</item>
     </style>
 
index fff6f12..5485406 100644 (file)
@@ -32,17 +32,17 @@ import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.Log;
 
+import androidx.appcompat.app.AlertDialog;
+
 import com.android.settings.R;
 import com.android.settingslib.bluetooth.BluetoothDiscoverableTimeoutReceiver;
 
-import androidx.appcompat.app.AlertDialog;
-
 /**
  * RequestPermissionActivity asks the user whether to enable discovery. This is
  * usually started by an application wanted to start bluetooth and or discovery
  */
 public class RequestPermissionActivity extends Activity implements
-        DialogInterface.OnClickListener {
+        DialogInterface.OnClickListener, DialogInterface.OnDismissListener {
     // Command line to test this
     // adb shell am start -a android.bluetooth.adapter.action.REQUEST_ENABLE
     // adb shell am start -a android.bluetooth.adapter.action.REQUEST_DISCOVERABLE
@@ -188,6 +188,7 @@ public class RequestPermissionActivity extends Activity implements
             builder.setNegativeButton(getString(R.string.deny), this);
         }
 
+        builder.setOnDismissListener(this);
         mDialog = builder.create();
         mDialog.show();
     }
@@ -238,12 +239,16 @@ public class RequestPermissionActivity extends Activity implements
                 break;
 
             case DialogInterface.BUTTON_NEGATIVE:
-                setResult(RESULT_CANCELED);
-                finish();
+                cancelAndFinish();
                 break;
         }
     }
 
+    @Override
+    public void onDismiss(final DialogInterface dialog) {
+        cancelAndFinish();
+    }
+
     private void proceedAndFinish() {
         int returnCode;