Loading src/com/android/settings/applications/AppStateAppOpsBridge.java +26 −8 Original line number Diff line number Diff line Loading @@ -34,8 +34,11 @@ import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.ApplicationsState.AppFilter; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; /* * Connects app ops info to the ApplicationsState. Makes use of AppOpsManager to Loading @@ -54,7 +57,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { private final String[] mPermissions; public AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback, int appOpsOpCode, String permissionName) { int appOpsOpCode, String[] permissions) { super(appState, callback); mContext = context; mIPackageManager = AppGlobals.getPackageManager(); Loading @@ -62,7 +65,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { mProfiles = mUserManager.getUserProfiles(); mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); mAppOpsOpCodes = new int[] {appOpsOpCode}; mPermissions = new String[] {permissionName}; mPermissions = permissions; } private boolean isThisUserAProfileOfCurrentUser(final int userId) { Loading @@ -77,6 +80,15 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { protected abstract void updateExtraInfo(AppEntry app, String pkg, int uid); private boolean doesAnyPermissionMatch(String permissionToMatch, String[] permissions) { for (String permission : permissions) { if (permissionToMatch.equals(permission)) { return true; } } return false; } public PermissionState getPermissionInfo(String pkg, int uid) { PermissionState permissionState = new PermissionState(pkg, new UserHandle(UserHandle .getUserId(uid))); Loading @@ -88,7 +100,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { int[] permissionFlags = permissionState.packageInfo.requestedPermissionsFlags; if (requestedPermissions != null) { for (int i = 0; i < requestedPermissions.length; i++) { if (mPermissions[0].equals(requestedPermissions[i])) { if (doesAnyPermissionMatch(requestedPermissions[i], mPermissions)) { permissionState.permissionDeclared = true; if ((permissionFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) { permissionState.staticPermissionGranted = true; Loading Loading @@ -133,9 +145,15 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { */ private SparseArray<ArrayMap<String, PermissionState>> getEntries() { try { final String[] packages = mIPackageManager.getAppOpPermissionPackages(mPermissions[0]); Set<String> packagesSet = new HashSet<>(); for (String permission : mPermissions) { String[] pkgs = mIPackageManager.getAppOpPermissionPackages(permission); if (pkgs != null) { packagesSet.addAll(Arrays.asList(pkgs)); } } if (packages == null) { if (packagesSet.isEmpty()) { // No packages are requesting permission as specified by mPermissions. return null; } Loading @@ -147,7 +165,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { final ArrayMap<String, PermissionState> entriesForProfile = new ArrayMap<>(); final int profileId = profile.getIdentifier(); entries.put(profileId, entriesForProfile); for (final String packageName : packages) { for (final String packageName : packagesSet) { final boolean isAvailable = mIPackageManager.isPackageAvailable(packageName, profileId); if (!shouldIgnorePackage(packageName) && isAvailable) { Loading Loading @@ -193,7 +211,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { } } catch (RemoteException e) { Log.w(TAG, "PackageManager is dead. Can't get list of packages granted " + mPermissions[0], e); + mPermissions, e); return; } } Loading Loading @@ -223,7 +241,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { if (pe == null) { Log.w(TAG, "AppOp permission exists for package " + packageOp.getPackageName() + " of user " + userId + " but package doesn't exist or did not request " + mPermissions[0] + " access"); + mPermissions + " access"); continue; } Loading src/com/android/settings/applications/AppStateOverlayBridge.java +4 −1 Original line number Diff line number Diff line Loading @@ -34,9 +34,12 @@ public class AppStateOverlayBridge extends AppStateAppOpsBridge { private static final String TAG = "AppStateOverlayBridge"; private static final int APP_OPS_OP_CODE = AppOpsManager.OP_SYSTEM_ALERT_WINDOW; private static final String PM_SYSTEM_ALERT_WINDOW = Manifest.permission.SYSTEM_ALERT_WINDOW; private static final String[] PM_PERMISSION = { PM_SYSTEM_ALERT_WINDOW }; public AppStateOverlayBridge(Context context, ApplicationsState appState, Callback callback) { super(context, appState, callback, APP_OPS_OP_CODE, PM_SYSTEM_ALERT_WINDOW); super(context, appState, callback, APP_OPS_OP_CODE, PM_PERMISSION); } @Override Loading src/com/android/settings/applications/AppStateUsageBridge.java +4 −1 Original line number Diff line number Diff line Loading @@ -35,9 +35,12 @@ public class AppStateUsageBridge extends AppStateAppOpsBridge { private static final String PM_USAGE_STATS = Manifest.permission.PACKAGE_USAGE_STATS; private static final int APP_OPS_OP_CODE = AppOpsManager.OP_GET_USAGE_STATS; private static final String[] PM_PERMISSION = { PM_USAGE_STATS }; public AppStateUsageBridge(Context context, ApplicationsState appState, Callback callback) { super(context, appState, callback, APP_OPS_OP_CODE, PM_USAGE_STATS); super(context, appState, callback, APP_OPS_OP_CODE, PM_PERMISSION); } @Override Loading src/com/android/settings/applications/AppStateWriteSettingsBridge.java +7 −1 Original line number Diff line number Diff line Loading @@ -34,10 +34,16 @@ public class AppStateWriteSettingsBridge extends AppStateAppOpsBridge { private static final String TAG = "AppStateWriteSettingsBridge"; private static final int APP_OPS_OP_CODE = AppOpsManager.OP_WRITE_SETTINGS; private static final String PM_WRITE_SETTINGS = Manifest.permission.WRITE_SETTINGS; private static final String PM_CHANGE_NETWORK_STATE = Manifest.permission.CHANGE_NETWORK_STATE; // CHANGE_NETWORK_STATE is now merged with WRITE_SETTINGS private static final String[] PM_PERMISSIONS = { PM_WRITE_SETTINGS, PM_CHANGE_NETWORK_STATE }; public AppStateWriteSettingsBridge(Context context, ApplicationsState appState, Callback callback) { super(context, appState, callback, APP_OPS_OP_CODE, PM_WRITE_SETTINGS); super(context, appState, callback, APP_OPS_OP_CODE, PM_PERMISSIONS); } @Override Loading Loading
src/com/android/settings/applications/AppStateAppOpsBridge.java +26 −8 Original line number Diff line number Diff line Loading @@ -34,8 +34,11 @@ import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.applications.ApplicationsState.AppFilter; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; /* * Connects app ops info to the ApplicationsState. Makes use of AppOpsManager to Loading @@ -54,7 +57,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { private final String[] mPermissions; public AppStateAppOpsBridge(Context context, ApplicationsState appState, Callback callback, int appOpsOpCode, String permissionName) { int appOpsOpCode, String[] permissions) { super(appState, callback); mContext = context; mIPackageManager = AppGlobals.getPackageManager(); Loading @@ -62,7 +65,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { mProfiles = mUserManager.getUserProfiles(); mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); mAppOpsOpCodes = new int[] {appOpsOpCode}; mPermissions = new String[] {permissionName}; mPermissions = permissions; } private boolean isThisUserAProfileOfCurrentUser(final int userId) { Loading @@ -77,6 +80,15 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { protected abstract void updateExtraInfo(AppEntry app, String pkg, int uid); private boolean doesAnyPermissionMatch(String permissionToMatch, String[] permissions) { for (String permission : permissions) { if (permissionToMatch.equals(permission)) { return true; } } return false; } public PermissionState getPermissionInfo(String pkg, int uid) { PermissionState permissionState = new PermissionState(pkg, new UserHandle(UserHandle .getUserId(uid))); Loading @@ -88,7 +100,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { int[] permissionFlags = permissionState.packageInfo.requestedPermissionsFlags; if (requestedPermissions != null) { for (int i = 0; i < requestedPermissions.length; i++) { if (mPermissions[0].equals(requestedPermissions[i])) { if (doesAnyPermissionMatch(requestedPermissions[i], mPermissions)) { permissionState.permissionDeclared = true; if ((permissionFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0) { permissionState.staticPermissionGranted = true; Loading Loading @@ -133,9 +145,15 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { */ private SparseArray<ArrayMap<String, PermissionState>> getEntries() { try { final String[] packages = mIPackageManager.getAppOpPermissionPackages(mPermissions[0]); Set<String> packagesSet = new HashSet<>(); for (String permission : mPermissions) { String[] pkgs = mIPackageManager.getAppOpPermissionPackages(permission); if (pkgs != null) { packagesSet.addAll(Arrays.asList(pkgs)); } } if (packages == null) { if (packagesSet.isEmpty()) { // No packages are requesting permission as specified by mPermissions. return null; } Loading @@ -147,7 +165,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { final ArrayMap<String, PermissionState> entriesForProfile = new ArrayMap<>(); final int profileId = profile.getIdentifier(); entries.put(profileId, entriesForProfile); for (final String packageName : packages) { for (final String packageName : packagesSet) { final boolean isAvailable = mIPackageManager.isPackageAvailable(packageName, profileId); if (!shouldIgnorePackage(packageName) && isAvailable) { Loading Loading @@ -193,7 +211,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { } } catch (RemoteException e) { Log.w(TAG, "PackageManager is dead. Can't get list of packages granted " + mPermissions[0], e); + mPermissions, e); return; } } Loading Loading @@ -223,7 +241,7 @@ public abstract class AppStateAppOpsBridge extends AppStateBaseBridge { if (pe == null) { Log.w(TAG, "AppOp permission exists for package " + packageOp.getPackageName() + " of user " + userId + " but package doesn't exist or did not request " + mPermissions[0] + " access"); + mPermissions + " access"); continue; } Loading
src/com/android/settings/applications/AppStateOverlayBridge.java +4 −1 Original line number Diff line number Diff line Loading @@ -34,9 +34,12 @@ public class AppStateOverlayBridge extends AppStateAppOpsBridge { private static final String TAG = "AppStateOverlayBridge"; private static final int APP_OPS_OP_CODE = AppOpsManager.OP_SYSTEM_ALERT_WINDOW; private static final String PM_SYSTEM_ALERT_WINDOW = Manifest.permission.SYSTEM_ALERT_WINDOW; private static final String[] PM_PERMISSION = { PM_SYSTEM_ALERT_WINDOW }; public AppStateOverlayBridge(Context context, ApplicationsState appState, Callback callback) { super(context, appState, callback, APP_OPS_OP_CODE, PM_SYSTEM_ALERT_WINDOW); super(context, appState, callback, APP_OPS_OP_CODE, PM_PERMISSION); } @Override Loading
src/com/android/settings/applications/AppStateUsageBridge.java +4 −1 Original line number Diff line number Diff line Loading @@ -35,9 +35,12 @@ public class AppStateUsageBridge extends AppStateAppOpsBridge { private static final String PM_USAGE_STATS = Manifest.permission.PACKAGE_USAGE_STATS; private static final int APP_OPS_OP_CODE = AppOpsManager.OP_GET_USAGE_STATS; private static final String[] PM_PERMISSION = { PM_USAGE_STATS }; public AppStateUsageBridge(Context context, ApplicationsState appState, Callback callback) { super(context, appState, callback, APP_OPS_OP_CODE, PM_USAGE_STATS); super(context, appState, callback, APP_OPS_OP_CODE, PM_PERMISSION); } @Override Loading
src/com/android/settings/applications/AppStateWriteSettingsBridge.java +7 −1 Original line number Diff line number Diff line Loading @@ -34,10 +34,16 @@ public class AppStateWriteSettingsBridge extends AppStateAppOpsBridge { private static final String TAG = "AppStateWriteSettingsBridge"; private static final int APP_OPS_OP_CODE = AppOpsManager.OP_WRITE_SETTINGS; private static final String PM_WRITE_SETTINGS = Manifest.permission.WRITE_SETTINGS; private static final String PM_CHANGE_NETWORK_STATE = Manifest.permission.CHANGE_NETWORK_STATE; // CHANGE_NETWORK_STATE is now merged with WRITE_SETTINGS private static final String[] PM_PERMISSIONS = { PM_WRITE_SETTINGS, PM_CHANGE_NETWORK_STATE }; public AppStateWriteSettingsBridge(Context context, ApplicationsState appState, Callback callback) { super(context, appState, callback, APP_OPS_OP_CODE, PM_WRITE_SETTINGS); super(context, appState, callback, APP_OPS_OP_CODE, PM_PERMISSIONS); } @Override Loading