Loading AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ <uses-permission android:name="android.permission.MANAGE_APP_OPS_RESTRICTIONS" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS" /> <uses-permission android:name="android.permission.USE_RESERVED_DISK" /> <uses-permission android:name="com.google.android.permission.INSTALL_WEARABLE_PACKAGES" /> Loading src/com/android/packageinstaller/UninstallerActivity.java +30 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ */ package com.android.packageinstaller; import static android.app.AppOpsManager.MODE_ALLOWED; import static com.android.packageinstaller.PackageUtil.getMaxTargetSdkVersionForUid; import android.Manifest; Loading @@ -23,6 +25,7 @@ import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityThread; import android.app.AppGlobals; import android.app.AppOpsManager; import android.app.DialogFragment; import android.app.Fragment; import android.app.FragmentTransaction; Loading Loading @@ -89,6 +92,25 @@ public class UninstallerActivity extends Activity { try { int callingUid = ActivityManager.getService().getLaunchedFromUid(getActivityToken()); String callingPackage = getPackageNameForUid(callingUid); if (callingPackage == null) { Log.e(TAG, "Package not found for originating uid " + callingUid); setResult(Activity.RESULT_FIRST_USER); finish(); return; } else { AppOpsManager appOpsManager = (AppOpsManager) getSystemService( Context.APP_OPS_SERVICE); if (appOpsManager.noteOpNoThrow( AppOpsManager.OPSTR_REQUEST_DELETE_PACKAGES, callingUid, callingPackage) != MODE_ALLOWED) { Log.e(TAG, "Install from uid " + callingUid + " disallowed by AppOps"); setResult(Activity.RESULT_FIRST_USER); finish(); return; } } if (getMaxTargetSdkVersionForUid(this, callingUid) >= Build.VERSION_CODES.P && AppGlobals.getPackageManager().checkUidPermission( Manifest.permission.REQUEST_DELETE_PACKAGES, callingUid) Loading Loading @@ -360,4 +382,12 @@ public class UninstallerActivity extends Activity { } } } private String getPackageNameForUid(int sourceUid) { String[] packagesForUid = getPackageManager().getPackagesForUid(sourceUid); if (packagesForUid == null) { return null; } return packagesForUid[0]; } } Loading
AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ <uses-permission android:name="android.permission.MANAGE_APP_OPS_RESTRICTIONS" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS" /> <uses-permission android:name="android.permission.USE_RESERVED_DISK" /> <uses-permission android:name="com.google.android.permission.INSTALL_WEARABLE_PACKAGES" /> Loading
src/com/android/packageinstaller/UninstallerActivity.java +30 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ */ package com.android.packageinstaller; import static android.app.AppOpsManager.MODE_ALLOWED; import static com.android.packageinstaller.PackageUtil.getMaxTargetSdkVersionForUid; import android.Manifest; Loading @@ -23,6 +25,7 @@ import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityThread; import android.app.AppGlobals; import android.app.AppOpsManager; import android.app.DialogFragment; import android.app.Fragment; import android.app.FragmentTransaction; Loading Loading @@ -89,6 +92,25 @@ public class UninstallerActivity extends Activity { try { int callingUid = ActivityManager.getService().getLaunchedFromUid(getActivityToken()); String callingPackage = getPackageNameForUid(callingUid); if (callingPackage == null) { Log.e(TAG, "Package not found for originating uid " + callingUid); setResult(Activity.RESULT_FIRST_USER); finish(); return; } else { AppOpsManager appOpsManager = (AppOpsManager) getSystemService( Context.APP_OPS_SERVICE); if (appOpsManager.noteOpNoThrow( AppOpsManager.OPSTR_REQUEST_DELETE_PACKAGES, callingUid, callingPackage) != MODE_ALLOWED) { Log.e(TAG, "Install from uid " + callingUid + " disallowed by AppOps"); setResult(Activity.RESULT_FIRST_USER); finish(); return; } } if (getMaxTargetSdkVersionForUid(this, callingUid) >= Build.VERSION_CODES.P && AppGlobals.getPackageManager().checkUidPermission( Manifest.permission.REQUEST_DELETE_PACKAGES, callingUid) Loading Loading @@ -360,4 +382,12 @@ public class UninstallerActivity extends Activity { } } } private String getPackageNameForUid(int sourceUid) { String[] packagesForUid = getPackageManager().getPackagesForUid(sourceUid); if (packagesForUid == null) { return null; } return packagesForUid[0]; } }