summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/permission/PermissionManager.java31
-rw-r--r--core/java/android/permission/PermissionUsageHelper.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java6
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