Move UsageStatsManagerInternal to services.jar
UsageStatsManagerInternal is also no longer an API surface for registration of app idle state change listeners. AppStandbyInternal has become a proper LocalService and interested clients can just use that directly. Bug: 140833849 Test: boot & run normally Test: verify system package backup Change-Id: Ie63f438f129cd8f41169778a3045d131ca7322fb
This commit is contained in:
committed by
Chris Tate
parent
b9e31e10a4
commit
b909c4d55a
@@ -1,9 +1,9 @@
|
||||
package com.android.server.usage;
|
||||
|
||||
import android.annotation.UserIdInt;
|
||||
import android.app.usage.AppStandbyInfo;
|
||||
import android.app.usage.UsageEvents;
|
||||
import android.app.usage.UsageStatsManager.StandbyBuckets;
|
||||
import android.app.usage.UsageStatsManagerInternal.AppIdleStateChangeListener;
|
||||
import android.content.Context;
|
||||
import android.os.Looper;
|
||||
|
||||
@@ -33,6 +33,24 @@ public interface AppStandbyInternal {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Listener interface for notifications that an app's idle state changed.
|
||||
*/
|
||||
abstract static class AppIdleStateChangeListener {
|
||||
|
||||
/** Callback to inform listeners that the idle state has changed to a new bucket. */
|
||||
public abstract void onAppIdleStateChanged(String packageName, @UserIdInt int userId,
|
||||
boolean idle, int bucket, int reason);
|
||||
|
||||
/**
|
||||
* Optional callback to inform the listener that the app has transitioned into
|
||||
* an active state due to user interaction.
|
||||
*/
|
||||
public void onUserInteractionStarted(String packageName, @UserIdInt int userId) {
|
||||
// No-op by default
|
||||
}
|
||||
}
|
||||
|
||||
void onBootPhase(int phase);
|
||||
|
||||
void postCheckIdleStates(int userId);
|
||||
|
||||
@@ -37,7 +37,6 @@ import android.app.job.JobSnapshot;
|
||||
import android.app.job.JobWorkItem;
|
||||
import android.app.usage.UsageStatsManager;
|
||||
import android.app.usage.UsageStatsManagerInternal;
|
||||
import android.app.usage.UsageStatsManagerInternal.AppIdleStateChangeListener;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ComponentName;
|
||||
import android.content.ContentResolver;
|
||||
@@ -103,6 +102,8 @@ import com.android.server.job.controllers.StorageController;
|
||||
import com.android.server.job.controllers.TimeController;
|
||||
import com.android.server.job.restrictions.JobRestriction;
|
||||
import com.android.server.job.restrictions.ThermalStatusRestriction;
|
||||
import com.android.server.usage.AppStandbyInternal;
|
||||
import com.android.server.usage.AppStandbyInternal.AppIdleStateChangeListener;
|
||||
|
||||
import libcore.util.EmptyArray;
|
||||
|
||||
@@ -1295,7 +1296,9 @@ public class JobSchedulerService extends com.android.server.SystemService
|
||||
// Set up the app standby bucketing tracker
|
||||
mStandbyTracker = new StandbyTracker();
|
||||
mUsageStats = LocalServices.getService(UsageStatsManagerInternal.class);
|
||||
mUsageStats.addAppIdleStateChangeListener(mStandbyTracker);
|
||||
|
||||
AppStandbyInternal appStandby = LocalServices.getService(AppStandbyInternal.class);
|
||||
appStandby.addListener(mStandbyTracker);
|
||||
|
||||
// The job store needs to call back
|
||||
publishLocalService(JobSchedulerInternal.class, new LocalService());
|
||||
|
||||
@@ -35,8 +35,6 @@ import android.app.ActivityManagerInternal;
|
||||
import android.app.AlarmManager;
|
||||
import android.app.AppGlobals;
|
||||
import android.app.IUidObserver;
|
||||
import android.app.usage.UsageStatsManagerInternal;
|
||||
import android.app.usage.UsageStatsManagerInternal.AppIdleStateChangeListener;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
@@ -70,6 +68,8 @@ import com.android.server.job.ConstantsProto;
|
||||
import com.android.server.job.JobSchedulerService;
|
||||
import com.android.server.job.JobServiceContext;
|
||||
import com.android.server.job.StateControllerProto;
|
||||
import com.android.server.usage.AppStandbyInternal;
|
||||
import com.android.server.usage.AppStandbyInternal.AppIdleStateChangeListener;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -574,9 +574,8 @@ public final class QuotaController extends StateController {
|
||||
mContext.registerReceiverAsUser(mPackageAddedReceiver, UserHandle.ALL, filter, null, null);
|
||||
|
||||
// Set up the app standby bucketing tracker
|
||||
UsageStatsManagerInternal usageStats = LocalServices.getService(
|
||||
UsageStatsManagerInternal.class);
|
||||
usageStats.addAppIdleStateChangeListener(new StandbyTracker());
|
||||
AppStandbyInternal appStandby = LocalServices.getService(AppStandbyInternal.class);
|
||||
appStandby.addListener(new StandbyTracker());
|
||||
|
||||
try {
|
||||
ActivityManager.getService().registerUidObserver(mUidObserver,
|
||||
|
||||
@@ -53,7 +53,6 @@ import android.app.AppGlobals;
|
||||
import android.app.usage.AppStandbyInfo;
|
||||
import android.app.usage.UsageEvents;
|
||||
import android.app.usage.UsageStatsManager.StandbyBuckets;
|
||||
import android.app.usage.UsageStatsManagerInternal.AppIdleStateChangeListener;
|
||||
import android.appwidget.AppWidgetManager;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ContentResolver;
|
||||
@@ -102,6 +101,7 @@ import com.android.internal.util.ConcurrentUtils;
|
||||
import com.android.internal.util.IndentingPrintWriter;
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.usage.AppIdleHistory.AppUsageHistory;
|
||||
import com.android.server.usage.AppStandbyInternal.AppIdleStateChangeListener;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.PrintWriter;
|
||||
|
||||
@@ -23,6 +23,8 @@ import android.content.res.Configuration;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
|
||||
import com.android.server.usage.AppStandbyInternal.AppIdleStateChangeListener;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -153,35 +155,6 @@ public abstract class UsageStatsManagerInternal {
|
||||
*/
|
||||
public abstract int[] getIdleUidsForUser(@UserIdInt int userId);
|
||||
|
||||
/**
|
||||
* Sets up a listener for changes to packages being accessed.
|
||||
* @param listener A listener within the system process.
|
||||
*/
|
||||
public abstract void addAppIdleStateChangeListener(
|
||||
AppIdleStateChangeListener listener);
|
||||
|
||||
/**
|
||||
* Removes a listener that was previously added for package usage state changes.
|
||||
* @param listener The listener within the system process to remove.
|
||||
*/
|
||||
public abstract void removeAppIdleStateChangeListener(
|
||||
AppIdleStateChangeListener listener);
|
||||
|
||||
public static abstract class AppIdleStateChangeListener {
|
||||
|
||||
/** Callback to inform listeners that the idle state has changed to a new bucket. */
|
||||
public abstract void onAppIdleStateChanged(String packageName, @UserIdInt int userId,
|
||||
boolean idle, int bucket, int reason);
|
||||
|
||||
/**
|
||||
* Optional callback to inform the listener that the app has transitioned into
|
||||
* an active state due to user interaction.
|
||||
*/
|
||||
public void onUserInteractionStarted(String packageName, @UserIdInt int userId) {
|
||||
// No-op by default
|
||||
}
|
||||
}
|
||||
|
||||
/** Backup/Restore API */
|
||||
public abstract byte[] getBackupPayload(@UserIdInt int userId, String key);
|
||||
|
||||
@@ -99,6 +99,8 @@ import com.android.internal.util.IndentingPrintWriter;
|
||||
import com.android.internal.util.LocalLog;
|
||||
import com.android.internal.util.StatLogger;
|
||||
import com.android.server.AppStateTracker.Listener;
|
||||
import com.android.server.usage.AppStandbyInternal;
|
||||
import com.android.server.usage.AppStandbyInternal.AppIdleStateChangeListener;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.FileDescriptor;
|
||||
@@ -1599,7 +1601,9 @@ class AlarmManagerService extends SystemService {
|
||||
LocalServices.getService(DeviceIdleInternal.class);
|
||||
mUsageStatsManagerInternal =
|
||||
LocalServices.getService(UsageStatsManagerInternal.class);
|
||||
mUsageStatsManagerInternal.addAppIdleStateChangeListener(new AppStandbyTracker());
|
||||
AppStandbyInternal appStandbyInternal =
|
||||
LocalServices.getService(AppStandbyInternal.class);
|
||||
appStandbyInternal.addListener(new AppStandbyTracker());
|
||||
|
||||
mAppStateTracker = LocalServices.getService(AppStateTracker.class);
|
||||
mAppStateTracker.addListener(mForceAppStandbyListener);
|
||||
@@ -4468,7 +4472,7 @@ class AlarmManagerService extends SystemService {
|
||||
* Tracking of app assignments to standby buckets
|
||||
*/
|
||||
private final class AppStandbyTracker extends
|
||||
UsageStatsManagerInternal.AppIdleStateChangeListener {
|
||||
AppIdleStateChangeListener {
|
||||
@Override
|
||||
public void onAppIdleStateChanged(final String packageName, final @UserIdInt int userId,
|
||||
boolean idle, int bucket, int reason) {
|
||||
|
||||
@@ -24,7 +24,6 @@ import android.app.IActivityManager;
|
||||
import android.app.IUidObserver;
|
||||
import android.app.usage.UsageStatsManager;
|
||||
import android.app.usage.UsageStatsManagerInternal;
|
||||
import android.app.usage.UsageStatsManagerInternal.AppIdleStateChangeListener;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -58,6 +57,8 @@ import com.android.internal.util.Preconditions;
|
||||
import com.android.internal.util.StatLogger;
|
||||
import com.android.server.AppStateTrackerProto.ExemptedPackage;
|
||||
import com.android.server.AppStateTrackerProto.RunAnyInBackgroundRestrictedPackages;
|
||||
import com.android.server.usage.AppStandbyInternal;
|
||||
import com.android.server.usage.AppStandbyInternal.AppIdleStateChangeListener;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Arrays;
|
||||
@@ -89,7 +90,7 @@ public class AppStateTracker {
|
||||
IAppOpsService mAppOpsService;
|
||||
PowerManagerInternal mPowerManagerInternal;
|
||||
StandbyTracker mStandbyTracker;
|
||||
UsageStatsManagerInternal mUsageStatsManagerInternal;
|
||||
AppStandbyInternal mAppStandbyInternal;
|
||||
|
||||
private final MyHandler mHandler;
|
||||
|
||||
@@ -420,8 +421,7 @@ public class AppStateTracker {
|
||||
mAppOpsManager = Preconditions.checkNotNull(injectAppOpsManager());
|
||||
mAppOpsService = Preconditions.checkNotNull(injectIAppOpsService());
|
||||
mPowerManagerInternal = Preconditions.checkNotNull(injectPowerManagerInternal());
|
||||
mUsageStatsManagerInternal = Preconditions.checkNotNull(
|
||||
injectUsageStatsManagerInternal());
|
||||
mAppStandbyInternal = Preconditions.checkNotNull(injectAppStandbyInternal());
|
||||
|
||||
mFlagsObserver = new FeatureFlagsObserver();
|
||||
mFlagsObserver.register();
|
||||
@@ -429,7 +429,7 @@ public class AppStateTracker {
|
||||
mForceAllAppStandbyForSmallBattery =
|
||||
mFlagsObserver.isForcedAppStandbyForSmallBatteryEnabled();
|
||||
mStandbyTracker = new StandbyTracker();
|
||||
mUsageStatsManagerInternal.addAppIdleStateChangeListener(mStandbyTracker);
|
||||
mAppStandbyInternal.addListener(mStandbyTracker);
|
||||
|
||||
try {
|
||||
mIActivityManager.registerUidObserver(new UidObserver(),
|
||||
@@ -494,8 +494,8 @@ public class AppStateTracker {
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
UsageStatsManagerInternal injectUsageStatsManagerInternal() {
|
||||
return LocalServices.getService(UsageStatsManagerInternal.class);
|
||||
AppStandbyInternal injectAppStandbyInternal() {
|
||||
return LocalServices.getService(AppStandbyInternal.class);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
|
||||
@@ -229,6 +229,8 @@ import com.android.server.EventLogTags;
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.ServiceThread;
|
||||
import com.android.server.SystemConfig;
|
||||
import com.android.server.usage.AppStandbyInternal;
|
||||
import com.android.server.usage.AppStandbyInternal.AppIdleStateChangeListener;
|
||||
|
||||
import libcore.io.IoUtils;
|
||||
|
||||
@@ -396,6 +398,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
||||
private NetworkStatsManagerInternal mNetworkStats;
|
||||
private final INetworkManagementService mNetworkManager;
|
||||
private UsageStatsManagerInternal mUsageStats;
|
||||
private AppStandbyInternal mAppStandby;
|
||||
private final Clock mClock;
|
||||
private final UserManager mUserManager;
|
||||
private final CarrierConfigManager mCarrierConfigManager;
|
||||
@@ -734,6 +737,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
||||
}
|
||||
|
||||
mUsageStats = LocalServices.getService(UsageStatsManagerInternal.class);
|
||||
mAppStandby = LocalServices.getService(AppStandbyInternal.class);
|
||||
mNetworkStats = LocalServices.getService(NetworkStatsManagerInternal.class);
|
||||
|
||||
synchronized (mUidRulesFirstLock) {
|
||||
@@ -868,7 +872,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
||||
mContext.getSystemService(ConnectivityManager.class).registerNetworkCallback(
|
||||
new NetworkRequest.Builder().build(), mNetworkCallback);
|
||||
|
||||
mUsageStats.addAppIdleStateChangeListener(new AppIdleStateChangeListener());
|
||||
mAppStandby.addListener(new NetPolicyAppIdleStateChangeListener());
|
||||
|
||||
// Listen for subscriber changes
|
||||
mContext.getSystemService(SubscriptionManager.class).addOnSubscriptionsChangedListener(
|
||||
@@ -4375,9 +4379,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
||||
return newUidRules;
|
||||
}
|
||||
|
||||
private class AppIdleStateChangeListener
|
||||
extends UsageStatsManagerInternal.AppIdleStateChangeListener {
|
||||
|
||||
private class NetPolicyAppIdleStateChangeListener extends AppIdleStateChangeListener {
|
||||
@Override
|
||||
public void onAppIdleStateChanged(String packageName, int userId, boolean idle, int bucket,
|
||||
int reason) {
|
||||
|
||||
@@ -85,6 +85,7 @@ import androidx.test.filters.FlakyTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.android.internal.annotations.GuardedBy;
|
||||
import com.android.server.usage.AppStandbyInternal;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
@@ -108,7 +109,7 @@ public class AlarmManagerServiceTest {
|
||||
|
||||
private long mAppStandbyWindow;
|
||||
private AlarmManagerService mService;
|
||||
private UsageStatsManagerInternal.AppIdleStateChangeListener mAppStandbyListener;
|
||||
private AppStandbyInternal.AppIdleStateChangeListener mAppStandbyListener;
|
||||
private AlarmManagerService.ChargingReceiver mChargingReceiver;
|
||||
@Mock
|
||||
private ContentResolver mMockResolver;
|
||||
@@ -119,6 +120,8 @@ public class AlarmManagerServiceTest {
|
||||
@Mock
|
||||
private UsageStatsManagerInternal mUsageStatsManagerInternal;
|
||||
@Mock
|
||||
private AppStandbyInternal mAppStandbyInternal;
|
||||
@Mock
|
||||
private AppStateTracker mAppStateTracker;
|
||||
@Mock
|
||||
private AlarmManagerService.ClockReceiver mClockReceiver;
|
||||
@@ -257,6 +260,8 @@ public class AlarmManagerServiceTest {
|
||||
doReturn(mAppStateTracker).when(() -> LocalServices.getService(AppStateTracker.class));
|
||||
doReturn(null)
|
||||
.when(() -> LocalServices.getService(DeviceIdleInternal.class));
|
||||
doReturn(mAppStandbyInternal).when(
|
||||
() -> LocalServices.getService(AppStandbyInternal.class));
|
||||
doReturn(mUsageStatsManagerInternal).when(
|
||||
() -> LocalServices.getService(UsageStatsManagerInternal.class));
|
||||
when(mUsageStatsManagerInternal.getAppStandbyBucket(eq(TEST_CALLING_PACKAGE),
|
||||
@@ -289,9 +294,9 @@ public class AlarmManagerServiceTest {
|
||||
assertEquals(0, mService.mConstants.MIN_FUTURITY);
|
||||
assertEquals(0, mService.mConstants.MIN_INTERVAL);
|
||||
mAppStandbyWindow = mService.mConstants.APP_STANDBY_WINDOW;
|
||||
ArgumentCaptor<UsageStatsManagerInternal.AppIdleStateChangeListener> captor =
|
||||
ArgumentCaptor.forClass(UsageStatsManagerInternal.AppIdleStateChangeListener.class);
|
||||
verify(mUsageStatsManagerInternal).addAppIdleStateChangeListener(captor.capture());
|
||||
ArgumentCaptor<AppStandbyInternal.AppIdleStateChangeListener> captor =
|
||||
ArgumentCaptor.forClass(AppStandbyInternal.AppIdleStateChangeListener.class);
|
||||
verify(mAppStandbyInternal).addListener(captor.capture());
|
||||
mAppStandbyListener = captor.getValue();
|
||||
|
||||
ArgumentCaptor<AlarmManagerService.ChargingReceiver> chargingReceiverCaptor =
|
||||
|
||||
@@ -45,7 +45,6 @@ import android.app.IActivityManager;
|
||||
import android.app.IUidObserver;
|
||||
import android.app.usage.UsageStatsManager;
|
||||
import android.app.usage.UsageStatsManagerInternal;
|
||||
import android.app.usage.UsageStatsManagerInternal.AppIdleStateChangeListener;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -70,6 +69,8 @@ import androidx.test.runner.AndroidJUnit4;
|
||||
import com.android.internal.app.IAppOpsCallback;
|
||||
import com.android.internal.app.IAppOpsService;
|
||||
import com.android.server.AppStateTracker.Listener;
|
||||
import com.android.server.usage.AppStandbyInternal;
|
||||
import com.android.server.usage.AppStandbyInternal.AppIdleStateChangeListener;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -128,8 +129,8 @@ public class AppStateTrackerTest {
|
||||
}
|
||||
|
||||
@Override
|
||||
UsageStatsManagerInternal injectUsageStatsManagerInternal() {
|
||||
return mMockUsageStatsManagerInternal;
|
||||
AppStandbyInternal injectAppStandbyInternal() {
|
||||
return mMockAppStandbyInternal;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -175,7 +176,7 @@ public class AppStateTrackerTest {
|
||||
private PowerManagerInternal mMockPowerManagerInternal;
|
||||
|
||||
@Mock
|
||||
private UsageStatsManagerInternal mMockUsageStatsManagerInternal;
|
||||
private AppStandbyInternal mMockAppStandbyInternal;
|
||||
|
||||
private MockContentResolver mMockContentResolver;
|
||||
|
||||
@@ -271,7 +272,7 @@ public class AppStateTrackerTest {
|
||||
|
||||
verify(mMockContext).registerReceiver(
|
||||
receiverCaptor.capture(), any(IntentFilter.class));
|
||||
verify(mMockUsageStatsManagerInternal).addAppIdleStateChangeListener(
|
||||
verify(mMockAppStandbyInternal).addListener(
|
||||
appIdleStateChangeListenerCaptor.capture());
|
||||
|
||||
mIUidObserver = uidObserverArgumentCaptor.getValue();
|
||||
|
||||
@@ -86,6 +86,7 @@ import com.android.internal.util.DumpUtils;
|
||||
import com.android.internal.util.IndentingPrintWriter;
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.SystemService;
|
||||
import com.android.server.usage.AppStandbyInternal.AppIdleStateChangeListener;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
@@ -180,8 +181,8 @@ public class UsageStatsService extends SystemService implements
|
||||
}
|
||||
}
|
||||
|
||||
private UsageStatsManagerInternal.AppIdleStateChangeListener mStandbyChangeListener =
|
||||
new UsageStatsManagerInternal.AppIdleStateChangeListener() {
|
||||
private AppIdleStateChangeListener mStandbyChangeListener =
|
||||
new AppIdleStateChangeListener() {
|
||||
@Override
|
||||
public void onAppIdleStateChanged(String packageName, int userId, boolean idle,
|
||||
int bucket, int reason) {
|
||||
@@ -253,6 +254,7 @@ public class UsageStatsService extends SystemService implements
|
||||
null, mHandler);
|
||||
|
||||
publishLocalService(UsageStatsManagerInternal.class, new LocalService());
|
||||
publishLocalService(AppStandbyInternal.class, mAppStandby);
|
||||
publishBinderService(Context.USAGE_STATS_SERVICE, new BinderService());
|
||||
}
|
||||
|
||||
@@ -2028,17 +2030,6 @@ public class UsageStatsService extends SystemService implements
|
||||
UsageStatsService.this.prepareForPossibleShutdown();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addAppIdleStateChangeListener(AppIdleStateChangeListener listener) {
|
||||
mAppStandby.addListener(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeAppIdleStateChangeListener(
|
||||
AppIdleStateChangeListener listener) {
|
||||
mAppStandby.removeListener(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getBackupPayload(int user, String key) {
|
||||
synchronized (mLock) {
|
||||
|
||||
Reference in New Issue
Block a user