Loading src/com/android/settings/applications/AppStateAppOpsBridge.java +24 −14 Original line number Diff line number Diff line Loading @@ -19,12 +19,12 @@ import android.app.AppGlobals; import android.app.AppOpsManager; import android.app.AppOpsManager.PackageOps; import android.content.Context; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; import android.support.annotation.VisibleForTesting; import android.util.ArrayMap; import android.util.Log; import android.util.SparseArray; Loading @@ -46,7 +46,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { private static final String TAG = "AppStateAppOpsBridge"; private final IPackageManager mIPackageManager; private final IPackageManagerWrapper mIPackageManager; private final UserManager mUserManager; private final List<UserHandle> mProfiles; private final AppOpsManager mAppOpsManager; Loading @@ -56,9 +56,16 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { public AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback, int appOpsOpCode, String[] permissions) { this(context, appState, callback, appOpsOpCode, permissions, new IPackageManagerWrapperImpl(AppGlobals.getPackageManager())); } @VisibleForTesting(otherwise = VisibleForTesting.NONE) AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback, int appOpsOpCode, String[] permissions, IPackageManagerWrapper packageManager) { super(appState, callback); mContext = context; mIPackageManager = AppGlobals.getPackageManager(); mIPackageManager = packageManager; mUserManager = UserManager.get(context); mProfiles = mUserManager.getUserProfiles(); mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); Loading Loading @@ -92,8 +99,9 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { .getUserId(uid))); try { permissionState.packageInfo = mIPackageManager.getPackageInfo(pkg, PackageManager.GET_PERMISSIONS | PackageManager.MATCH_UNINSTALLED_PACKAGES, PackageManager.GET_PERMISSIONS | PackageManager.MATCH_ANY_USER, permissionState.userHandle.getIdentifier()); if (permissionState.packageInfo != null) { // Check static permission state (whatever that is declared in package manifest) String[] requestedPermissions = permissionState.packageInfo.requestedPermissions; int[] permissionFlags = permissionState.packageInfo.requestedPermissionsFlags; Loading @@ -101,13 +109,15 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { for (int i = 0; i < requestedPermissions.length; i++) { if (doesAnyPermissionMatch(requestedPermissions[i], mPermissions)) { permissionState.permissionDeclared = true; if ((permissionFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) { if ((permissionFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) { permissionState.staticPermissionGranted = true; break; } } } } } // Check app op state. List<PackageOps> ops = mAppOpsManager.getOpsForPackage(uid, pkg, mAppOpsOpCodes); if (ops != null && ops.size() > 0 && ops.get(0).getOps().size() > 0) { Loading src/com/android/settings/applications/IPackageManagerWrapper.java +31 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.settings.applications; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.ParceledListSlice; import android.content.pm.ResolveInfo; import android.os.RemoteException; Loading @@ -41,4 +43,33 @@ public interface IPackageManagerWrapper { * @see android.content.pm.IPackageManager#findPersistentPreferredActivity */ ResolveInfo findPersistentPreferredActivity(Intent intent, int userId) throws RemoteException; /** * Calls {@code IPackageManager.getPackageInfo()}. * * @see android.content.pm.IPackageManager#getPackageInfo */ PackageInfo getPackageInfo(String packageName, int flags, int userId) throws RemoteException; /** * Calls {@code IPackageManager.getAppOpPermissionPackages()}. * * @see android.content.pm.IPackageManager#getAppOpPermissionPackages */ String[] getAppOpPermissionPackages(String permissionName) throws RemoteException; /** * Calls {@code IPackageManager.isPackageAvailable()}. * * @see android.content.pm.IPackageManager#isPackageAvailable */ boolean isPackageAvailable(String packageName, int userId) throws RemoteException; /** * Calls {@code IPackageManager.getPackagesHoldingPermissions()}. * * @see android.content.pm.IPackageManager#getPackagesHoldingPermissions */ ParceledListSlice<PackageInfo> getPackagesHoldingPermissions( String[] permissions, int flags, int userId) throws RemoteException; } src/com/android/settings/applications/IPackageManagerWrapperImpl.java +25 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.settings.applications; import android.content.Intent; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.content.pm.ParceledListSlice; import android.content.pm.ResolveInfo; import android.os.RemoteException; Loading @@ -39,4 +41,27 @@ public class IPackageManagerWrapperImpl implements IPackageManagerWrapper { throws RemoteException { return mPms.findPersistentPreferredActivity(intent, userId); } @Override public PackageInfo getPackageInfo(String packageName, int flags, int userId) throws RemoteException { return mPms.getPackageInfo(packageName, flags, userId); } @Override public String[] getAppOpPermissionPackages(String permissionName) throws RemoteException { return mPms.getAppOpPermissionPackages(permissionName); } @Override public boolean isPackageAvailable(String packageName, int userId) throws RemoteException { return mPms.isPackageAvailable(packageName, userId); } @Override public ParceledListSlice<PackageInfo> getPackagesHoldingPermissions( String[] permissions, int flags, int userId) throws RemoteException { return mPms.getPackagesHoldingPermissions(permissions, flags, userId); } } src/com/android/settings/applications/RunningState.java +1 −1 Original line number Diff line number Diff line Loading @@ -500,7 +500,7 @@ public class RunningState { si.mRunningService = service; try { si.mServiceInfo = ActivityThread.getPackageManager().getServiceInfo( service.service, PackageManager.MATCH_UNINSTALLED_PACKAGES, service.service, PackageManager.MATCH_ANY_USER, UserHandle.getUserId(service.uid)); if (si.mServiceInfo == null) { Loading src/com/android/settings/core/instrumentation/SharedPreferencesLogger.java +1 −1 Original line number Diff line number Diff line Loading @@ -144,7 +144,7 @@ public class SharedPreferencesLogger implements SharedPreferences { } catch (Exception e) { } try { pm.getPackageInfo(value, PackageManager.MATCH_UNINSTALLED_PACKAGES); pm.getPackageInfo(value, PackageManager.MATCH_ANY_USER); logPackageName(key, value); } catch (PackageManager.NameNotFoundException e) { // Clearly not a package, and it's unlikely this preference is in prefSet, so Loading Loading
src/com/android/settings/applications/AppStateAppOpsBridge.java +24 −14 Original line number Diff line number Diff line Loading @@ -19,12 +19,12 @@ import android.app.AppGlobals; import android.app.AppOpsManager; import android.app.AppOpsManager.PackageOps; import android.content.Context; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; import android.support.annotation.VisibleForTesting; import android.util.ArrayMap; import android.util.Log; import android.util.SparseArray; Loading @@ -46,7 +46,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { private static final String TAG = "AppStateAppOpsBridge"; private final IPackageManager mIPackageManager; private final IPackageManagerWrapper mIPackageManager; private final UserManager mUserManager; private final List<UserHandle> mProfiles; private final AppOpsManager mAppOpsManager; Loading @@ -56,9 +56,16 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { public AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback, int appOpsOpCode, String[] permissions) { this(context, appState, callback, appOpsOpCode, permissions, new IPackageManagerWrapperImpl(AppGlobals.getPackageManager())); } @VisibleForTesting(otherwise = VisibleForTesting.NONE) AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback, int appOpsOpCode, String[] permissions, IPackageManagerWrapper packageManager) { super(appState, callback); mContext = context; mIPackageManager = AppGlobals.getPackageManager(); mIPackageManager = packageManager; mUserManager = UserManager.get(context); mProfiles = mUserManager.getUserProfiles(); mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); Loading Loading @@ -92,8 +99,9 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { .getUserId(uid))); try { permissionState.packageInfo = mIPackageManager.getPackageInfo(pkg, PackageManager.GET_PERMISSIONS | PackageManager.MATCH_UNINSTALLED_PACKAGES, PackageManager.GET_PERMISSIONS | PackageManager.MATCH_ANY_USER, permissionState.userHandle.getIdentifier()); if (permissionState.packageInfo != null) { // Check static permission state (whatever that is declared in package manifest) String[] requestedPermissions = permissionState.packageInfo.requestedPermissions; int[] permissionFlags = permissionState.packageInfo.requestedPermissionsFlags; Loading @@ -101,13 +109,15 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { for (int i = 0; i < requestedPermissions.length; i++) { if (doesAnyPermissionMatch(requestedPermissions[i], mPermissions)) { permissionState.permissionDeclared = true; if ((permissionFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) { if ((permissionFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) { permissionState.staticPermissionGranted = true; break; } } } } } // Check app op state. List<PackageOps> ops = mAppOpsManager.getOpsForPackage(uid, pkg, mAppOpsOpCodes); if (ops != null && ops.size() > 0 && ops.get(0).getOps().size() > 0) { Loading
src/com/android/settings/applications/IPackageManagerWrapper.java +31 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.settings.applications; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.ParceledListSlice; import android.content.pm.ResolveInfo; import android.os.RemoteException; Loading @@ -41,4 +43,33 @@ public interface IPackageManagerWrapper { * @see android.content.pm.IPackageManager#findPersistentPreferredActivity */ ResolveInfo findPersistentPreferredActivity(Intent intent, int userId) throws RemoteException; /** * Calls {@code IPackageManager.getPackageInfo()}. * * @see android.content.pm.IPackageManager#getPackageInfo */ PackageInfo getPackageInfo(String packageName, int flags, int userId) throws RemoteException; /** * Calls {@code IPackageManager.getAppOpPermissionPackages()}. * * @see android.content.pm.IPackageManager#getAppOpPermissionPackages */ String[] getAppOpPermissionPackages(String permissionName) throws RemoteException; /** * Calls {@code IPackageManager.isPackageAvailable()}. * * @see android.content.pm.IPackageManager#isPackageAvailable */ boolean isPackageAvailable(String packageName, int userId) throws RemoteException; /** * Calls {@code IPackageManager.getPackagesHoldingPermissions()}. * * @see android.content.pm.IPackageManager#getPackagesHoldingPermissions */ ParceledListSlice<PackageInfo> getPackagesHoldingPermissions( String[] permissions, int flags, int userId) throws RemoteException; }
src/com/android/settings/applications/IPackageManagerWrapperImpl.java +25 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.settings.applications; import android.content.Intent; import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.content.pm.ParceledListSlice; import android.content.pm.ResolveInfo; import android.os.RemoteException; Loading @@ -39,4 +41,27 @@ public class IPackageManagerWrapperImpl implements IPackageManagerWrapper { throws RemoteException { return mPms.findPersistentPreferredActivity(intent, userId); } @Override public PackageInfo getPackageInfo(String packageName, int flags, int userId) throws RemoteException { return mPms.getPackageInfo(packageName, flags, userId); } @Override public String[] getAppOpPermissionPackages(String permissionName) throws RemoteException { return mPms.getAppOpPermissionPackages(permissionName); } @Override public boolean isPackageAvailable(String packageName, int userId) throws RemoteException { return mPms.isPackageAvailable(packageName, userId); } @Override public ParceledListSlice<PackageInfo> getPackagesHoldingPermissions( String[] permissions, int flags, int userId) throws RemoteException { return mPms.getPackagesHoldingPermissions(permissions, flags, userId); } }
src/com/android/settings/applications/RunningState.java +1 −1 Original line number Diff line number Diff line Loading @@ -500,7 +500,7 @@ public class RunningState { si.mRunningService = service; try { si.mServiceInfo = ActivityThread.getPackageManager().getServiceInfo( service.service, PackageManager.MATCH_UNINSTALLED_PACKAGES, service.service, PackageManager.MATCH_ANY_USER, UserHandle.getUserId(service.uid)); if (si.mServiceInfo == null) { Loading
src/com/android/settings/core/instrumentation/SharedPreferencesLogger.java +1 −1 Original line number Diff line number Diff line Loading @@ -144,7 +144,7 @@ public class SharedPreferencesLogger implements SharedPreferences { } catch (Exception e) { } try { pm.getPackageInfo(value, PackageManager.MATCH_UNINSTALLED_PACKAGES); pm.getPackageInfo(value, PackageManager.MATCH_ANY_USER); logPackageName(key, value); } catch (PackageManager.NameNotFoundException e) { // Clearly not a package, and it's unlikely this preference is in prefSet, so Loading