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

Commit 1e453b0f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Dismiss permission dialog if requesting app is uninstalled"

parents b15729a4 90fc86d1
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);
    }