Only initialize PermissionUsageHelper lazily or when requested
This should fix a memory leak caused by automatically registering a PermissionManager Bug: 204222680 Test: manual Change-Id: I94c6da3dd89e8b158552e94c94e4d0fb3f5d6f0d Merged-In: I94c6da3dd89e8b158552e94c94e4d0fb3f5d6f0d
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -871,6 +869,29 @@ public final class PermissionManager {
|
||||
return mSplitPermissionInfos;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user