Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 90fc86d1 authored by Philip P. Moltmann's avatar Philip P. Moltmann
Browse files

Dismiss permission dialog if requesting app is uninstalled

Test: Made app request permissions and then uninstalled it via adb.
Bug: 73118709
Change-Id: I4427afb55e356a5a63564dc7f0b49829617066b0
parent 86878138
Loading
Loading
Loading
Loading
+29 −1
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import android.view.View;
import android.view.Window;
import android.view.WindowManager;

import com.android.internal.content.PackageMonitor;
import com.android.internal.logging.nano.MetricsProto;
import com.android.packageinstaller.DeviceUtils;
import com.android.packageinstaller.R;
@@ -74,6 +75,8 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
    boolean mResultSet;

    private PackageManager.OnPermissionsChangedListener mPermissionChangeListener;
    private PackageMonitor mPackageMonitor;

    private String mCallingPackage;

    private int getPermissionPolicy() {
@@ -88,6 +91,17 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
        // Cache this as this can only read on onCreate, not later.
        mCallingPackage = getCallingPackage();

        mPackageMonitor = new PackageMonitor() {
            @Override
            public void onPackageRemoved(String packageName, int uid) {
                if (mCallingPackage.equals(packageName)) {
                    Log.w(LOG_TAG, mCallingPackage + " was uninstalled");

                    finish();
                }
            }
        };

        setFinishOnTouchOutside(false);

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
@@ -309,7 +323,19 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
    protected void onStart() {
        super.onStart();

        getPackageManager().addOnPermissionsChangeListener(mPermissionChangeListener);
        PackageManager pm = getPackageManager();
        pm.addOnPermissionsChangeListener(mPermissionChangeListener);

        // get notified when the package is removed
        mPackageMonitor.register(this, getMainLooper(), false);

        // check if the package was removed while this activity was not started
        try {
            pm.getPackageInfo(mCallingPackage, 0);
        } catch (NameNotFoundException e) {
            Log.w(LOG_TAG, mCallingPackage + " was uninstalled while this activity was stopped", e);
            finish();
        }

        updateIfPermissionsWereGranted();
    }
@@ -318,6 +344,8 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
    protected void onStop() {
        super.onStop();

        mPackageMonitor.unregister();

        getPackageManager().removeOnPermissionsChangeListener(mPermissionChangeListener);
    }