diff options
3 files changed, 35 insertions, 7 deletions
diff --git a/core/java/android/permission/PermissionManager.java b/core/java/android/permission/PermissionManager.java index 63bcc9c89ca9..c64aa4db561a 100644 --- a/core/java/android/permission/PermissionManager.java +++ b/core/java/android/permission/PermissionManager.java @@ -159,8 +159,6 @@ public final class PermissionManager { mPermissionManager = IPermissionManager.Stub.asInterface(ServiceManager.getServiceOrThrow( "permissionmgr")); mLegacyPermissionManager = context.getSystemService(LegacyPermissionManager.class); - //TODO ntmyren: there should be a way to only enable the watcher when requested - mUsageHelper = new PermissionUsageHelper(context); } /** @@ -872,6 +870,29 @@ public final class PermissionManager { } /** + * Initialize the PermissionUsageHelper, which will register active app op listeners + * + * @hide + */ + public void initializeUsageHelper() { + if (mUsageHelper == null) { + mUsageHelper = new PermissionUsageHelper(mContext); + } + } + + /** + * Teardown the PermissionUsageHelper, removing listeners + * + * @hide + */ + public void tearDownUsageHelper() { + if (mUsageHelper != null) { + mUsageHelper.tearDown(); + mUsageHelper = null; + } + } + + /** * @return A list of permission groups currently or recently used by all apps by all users in * the current profile group. * @@ -881,7 +902,7 @@ public final class PermissionManager { @NonNull @RequiresPermission(Manifest.permission.GET_APP_OPS_STATS) public List<PermGroupUsage> getIndicatorAppOpUsageData() { - return mUsageHelper.getOpUsageData(new AudioManager().isMicrophoneMute()); + return getIndicatorAppOpUsageData(new AudioManager().isMicrophoneMute()); } /** @@ -896,9 +917,7 @@ public final class PermissionManager { @RequiresPermission(Manifest.permission.GET_APP_OPS_STATS) public List<PermGroupUsage> getIndicatorAppOpUsageData(boolean micMuted) { // Lazily initialize the usage helper - if (mUsageHelper == null) { - mUsageHelper = new PermissionUsageHelper(mContext); - } + initializeUsageHelper(); return mUsageHelper.getOpUsageData(micMuted); } diff --git a/core/java/android/permission/PermissionUsageHelper.java b/core/java/android/permission/PermissionUsageHelper.java index 19f204b377c8..20f6c10f929e 100644 --- a/core/java/android/permission/PermissionUsageHelper.java +++ b/core/java/android/permission/PermissionUsageHelper.java @@ -176,6 +176,11 @@ public class PermissionUsageHelper implements AppOpsManager.OnOpActiveChangedLis return mUserContexts.get(user); } + public void tearDown() { + mAppOpsManager.stopWatchingActive(this); + mAppOpsManager.stopWatchingStarted(this); + } + @Override public void onOpActiveChanged(@NonNull String op, int uid, @NonNull String packageName, boolean active) { diff --git a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java index 79723188348e..b51eb0734a77 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java @@ -442,7 +442,11 @@ public class FrameworkServicesModule { @Provides @Singleton static PermissionManager providePermissionManager(Context context) { - return context.getSystemService(PermissionManager.class); + PermissionManager pm = context.getSystemService(PermissionManager.class); + if (pm != null) { + pm.initializeUsageHelper(); + } + return pm; } @Provides |