diff options
| author | 2019-10-24 19:34:05 +0000 | |
|---|---|---|
| committer | 2019-10-24 19:34:05 +0000 | |
| commit | 1faf4274fc8c0415b0a18cd0278cffdae720a3ec (patch) | |
| tree | 7f98a486c294e7aa29c63070ea41056869c4678f | |
| parent | 1c717580e59bb667c23a81529b06368238f74570 (diff) | |
| parent | b909c4d55a2fd487a56612e26d20e63a8e24a2cd (diff) | |
Merge "Move UsageStatsManagerInternal to services.jar"
13 files changed, 69 insertions, 73 deletions
diff --git a/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java b/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java index c036c772d7d0..041825c235d0 100644 --- a/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java +++ b/apex/jobscheduler/framework/java/com/android/server/usage/AppStandbyInternal.java @@ -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); diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java index c3ffad66d829..a1734d8d25d5 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java @@ -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()); diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java index 14dce84e686a..cda524418664 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java +++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java @@ -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, diff --git a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java index ecc045995521..bcd8be7b63e0 100644 --- a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java +++ b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java @@ -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; diff --git a/core/java/android/app/usage/UsageStatsManagerInternal.java b/services/core/java/android/app/usage/UsageStatsManagerInternal.java index 024afe25f98e..6641b5be651d 100644 --- a/core/java/android/app/usage/UsageStatsManagerInternal.java +++ b/services/core/java/android/app/usage/UsageStatsManagerInternal.java @@ -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); diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java index b41e95fee15c..ff0044f6f1ad 100644 --- a/services/core/java/com/android/server/AlarmManagerService.java +++ b/services/core/java/com/android/server/AlarmManagerService.java @@ -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) { diff --git a/services/core/java/com/android/server/AppStateTracker.java b/services/core/java/com/android/server/AppStateTracker.java index da760b6f7ffd..5eff2c5c1d37 100644 --- a/services/core/java/com/android/server/AppStateTracker.java +++ b/services/core/java/com/android/server/AppStateTracker.java @@ -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 diff --git a/core/java/com/android/server/backup/SystemBackupAgent.java b/services/core/java/com/android/server/backup/SystemBackupAgent.java index 35e8f56cf36d..35e8f56cf36d 100644 --- a/core/java/com/android/server/backup/SystemBackupAgent.java +++ b/services/core/java/com/android/server/backup/SystemBackupAgent.java diff --git a/core/java/com/android/server/backup/UsageStatsBackupHelper.java b/services/core/java/com/android/server/backup/UsageStatsBackupHelper.java index d6a70d369cdc..d6a70d369cdc 100644 --- a/core/java/com/android/server/backup/UsageStatsBackupHelper.java +++ b/services/core/java/com/android/server/backup/UsageStatsBackupHelper.java diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 09be474a5598..3b14d50f3c07 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -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) { diff --git a/services/tests/mockingservicestests/src/com/android/server/AlarmManagerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/AlarmManagerServiceTest.java index 7b7b8e6c628a..9e7b80567263 100644 --- a/services/tests/mockingservicestests/src/com/android/server/AlarmManagerServiceTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/AlarmManagerServiceTest.java @@ -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 = diff --git a/services/tests/mockingservicestests/src/com/android/server/AppStateTrackerTest.java b/services/tests/mockingservicestests/src/com/android/server/AppStateTrackerTest.java index 80d11290fdd4..1f4656ae54a4 100644 --- a/services/tests/mockingservicestests/src/com/android/server/AppStateTrackerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/AppStateTrackerTest.java @@ -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(); diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index 5d03e151e993..6a805683e23d 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -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()); } @@ -2029,17 +2031,6 @@ public class UsageStatsService extends SystemService implements } @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) { if (!mUserUnlockedStates.get(user)) { |