Loading apex/jobscheduler/service/java/com/android/server/job/controllers/idle/DeviceIdlenessTracker.java +81 −39 Original line number Diff line number Diff line Loading @@ -19,10 +19,12 @@ package com.android.server.job.controllers.idle; import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock; import android.app.AlarmManager; import android.app.UiModeManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.PowerManager; import android.util.Log; import android.util.Slog; import android.util.proto.ProtoOutputStream; Loading @@ -39,6 +41,7 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id || Log.isLoggable(TAG, Log.DEBUG); private AlarmManager mAlarm; private PowerManager mPowerManager; // After construction, mutations of idle/screen-on state will only happen // on the main looper thread, either in onReceive() or in an alarm callback. Loading @@ -47,6 +50,7 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id private boolean mIdle; private boolean mScreenOn; private boolean mDockIdle; private boolean mInCarMode; private IdlenessListener mIdleListener; private AlarmManager.OnAlarmListener mIdleAlarmListener = () -> { Loading @@ -59,6 +63,7 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id mIdle = false; mScreenOn = true; mDockIdle = false; mInCarMode = false; } @Override Loading @@ -74,6 +79,7 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id mIdleWindowSlop = context.getResources().getInteger( com.android.internal.R.integer.config_jobSchedulerIdleWindowSlop); mAlarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); mPowerManager = context.getSystemService(PowerManager.class); IntentFilter filter = new IntentFilter(); Loading @@ -92,6 +98,10 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id filter.addAction(Intent.ACTION_DOCK_IDLE); filter.addAction(Intent.ACTION_DOCK_ACTIVE); // Car mode filter.addAction(UiModeManager.ACTION_ENTER_CAR_MODE_PRIORITIZED); filter.addAction(UiModeManager.ACTION_EXIT_CAR_MODE_PRIORITIZED); context.registerReceiver(this, filter); } Loading @@ -100,6 +110,8 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id pw.print(" mIdle: "); pw.println(mIdle); pw.print(" mScreenOn: "); pw.println(mScreenOn); pw.print(" mDockIdle: "); pw.println(mDockIdle); pw.print(" mInCarMode: "); pw.println(mInCarMode); } @Override Loading @@ -116,6 +128,9 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id proto.write( StateControllerProto.IdleController.IdlenessTracker.DeviceIdlenessTracker.IS_DOCK_IDLE, mDockIdle); proto.write( StateControllerProto.IdleController.IdlenessTracker.DeviceIdlenessTracker.IN_CAR_MODE, mInCarMode); proto.end(diToken); proto.end(token); Loading @@ -124,33 +139,37 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (action.equals(Intent.ACTION_SCREEN_ON) || action.equals(Intent.ACTION_DREAMING_STOPPED) || action.equals(Intent.ACTION_DOCK_ACTIVE)) { if (action.equals(Intent.ACTION_DOCK_ACTIVE)) { if (DEBUG) { Slog.v(TAG, "Received action: " + action); } switch (action) { case Intent.ACTION_DOCK_ACTIVE: if (!mScreenOn) { // Ignore this intent during screen off return; } else { mDockIdle = false; } } else { // Intentional fallthrough case Intent.ACTION_DREAMING_STOPPED: if (!mPowerManager.isInteractive()) { // Ignore this intent if the device isn't interactive. return; } // Intentional fallthrough case Intent.ACTION_SCREEN_ON: mScreenOn = true; mDockIdle = false; } if (DEBUG) { Slog.v(TAG,"exiting idle : " + action); Slog.v(TAG, "exiting idle"); } //cancel the alarm mAlarm.cancel(mIdleAlarmListener); cancelIdlenessCheck(); if (mIdle) { // possible transition to not-idle mIdle = false; mIdleListener.reportNewIdleState(mIdle); } } else if (action.equals(Intent.ACTION_SCREEN_OFF) || action.equals(Intent.ACTION_DREAMING_STARTED) || action.equals(Intent.ACTION_DOCK_IDLE)) { break; case Intent.ACTION_SCREEN_OFF: case Intent.ACTION_DREAMING_STARTED: case Intent.ACTION_DOCK_IDLE: // when the screen goes off or dreaming starts or wireless charging dock in idle, // we schedule the alarm that will tell us when we have decided the device is // truly idle. Loading @@ -165,22 +184,45 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id mScreenOn = false; mDockIdle = false; } maybeScheduleIdlenessCheck(action); break; case UiModeManager.ACTION_ENTER_CAR_MODE_PRIORITIZED: mInCarMode = true; cancelIdlenessCheck(); if (mIdle) { mIdle = false; mIdleListener.reportNewIdleState(mIdle); } break; case UiModeManager.ACTION_EXIT_CAR_MODE_PRIORITIZED: mInCarMode = false; maybeScheduleIdlenessCheck(action); break; case ActivityManagerService.ACTION_TRIGGER_IDLE: handleIdleTrigger(); break; } } private void maybeScheduleIdlenessCheck(String reason) { if ((!mScreenOn || mDockIdle) && !mInCarMode) { final long nowElapsed = sElapsedRealtimeClock.millis(); final long when = nowElapsed + mInactivityIdleThreshold; if (DEBUG) { Slog.v(TAG, "Scheduling idle : " + action + " now:" + nowElapsed + " when=" + when); Slog.v(TAG, "Scheduling idle : " + reason + " now:" + nowElapsed + " when=" + when); } mAlarm.setWindow(AlarmManager.ELAPSED_REALTIME_WAKEUP, when, mIdleWindowSlop, "JS idleness", mIdleAlarmListener, null); } else if (action.equals(ActivityManagerService.ACTION_TRIGGER_IDLE)) { handleIdleTrigger(); } } private void cancelIdlenessCheck() { mAlarm.cancel(mIdleAlarmListener); } private void handleIdleTrigger() { // idle time starts now. Do not set mIdle if screen is on. if (!mIdle && (!mScreenOn || mDockIdle)) { if (!mIdle && (!mScreenOn || mDockIdle) && !mInCarMode) { if (DEBUG) { Slog.v(TAG, "Idle trigger fired @ " + sElapsedRealtimeClock.millis()); } Loading @@ -189,7 +231,7 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id } else { if (DEBUG) { Slog.v(TAG, "TRIGGER_IDLE received but not changing state; idle=" + mIdle + " screen=" + mScreenOn); + mIdle + " screen=" + mScreenOn + " car=" + mInCarMode); } } } Loading apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java +1 −2 Original line number Diff line number Diff line Loading @@ -172,8 +172,7 @@ public class AppStandbyController implements AppStandbyInternal { COMPRESS_TIME ? 1 * ONE_MINUTE : 12 * ONE_HOUR, COMPRESS_TIME ? 4 * ONE_MINUTE : 24 * ONE_HOUR, COMPRESS_TIME ? 16 * ONE_MINUTE : 48 * ONE_HOUR, // TODO(149050681): increase timeout to 30+ days COMPRESS_TIME ? 32 * ONE_MINUTE : 4 * ONE_DAY COMPRESS_TIME ? 32 * ONE_MINUTE : 30 * ONE_DAY }; /** The minimum allowed values for each index in {@link #ELAPSED_TIME_THRESHOLDS}. */ Loading apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java +10 −16 Original line number Diff line number Diff line Loading @@ -166,13 +166,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { } private static void informAllUids(Context context) { UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); PackageManager pm = context.getPackageManager(); final List<UserHandle> users = um.getUserHandles(true); if (DEBUG) { Log.d(TAG, "Iterating over " + users.size() + " userHandles."); } ParcelFileDescriptor[] fds; try { fds = ParcelFileDescriptor.createPipe(); Loading @@ -185,6 +178,12 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { backgroundThread.start(); Handler handler = new Handler(backgroundThread.getLooper()); handler.post(() -> { UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); PackageManager pm = context.getPackageManager(); final List<UserHandle> users = um.getUserHandles(true); if (DEBUG) { Log.d(TAG, "Iterating over " + users.size() + " userHandles."); } IStatsd statsd = getStatsdNonblocking(); if (statsd == null) { return; Loading Loading @@ -699,8 +698,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { deathRecipient.addRegisteredBroadcastReceivers( List.of(appUpdateReceiver, userUpdateReceiver, shutdownEventReceiver)); final long token = Binder.clearCallingIdentity(); // Used so we can call statsd.bootComplete() outside of the lock. boolean shouldSendBootComplete = false; synchronized (sStatsdLock) { Loading @@ -713,13 +710,10 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { statsd.bootCompleted(); } try { // Pull the latest state of UID->app name, version mapping when // statsd starts. informAllUids(mContext); } finally { Binder.restoreCallingIdentity(token); } Log.i(TAG, "Told statsd that StatsCompanionService is alive."); } catch (RemoteException e) { Log.e(TAG, "Failed to inform statsd that statscompanion is ready", e); Loading cmds/statsd/src/atoms.proto +3 −2 Original line number Diff line number Diff line Loading @@ -9249,12 +9249,13 @@ message SharesheetStarted { optional bool is_workprofile = 7; enum SharesheetPreviewType { // Constants from ChooserActivity.java CONTENT_PREVIEW_TYPE_UNKNOWN = 0; // Default for proto 2 / 3 compatibility. CONTENT_PREVIEW_IMAGE = 1; // The preview shown in the sharesheet is an image. CONTENT_PREVIEW_FILE = 2; // The preview shown in the sharesheet is a file. CONTENT_PREVIEW_TEXT = 3; // The preview shown in the sharesheet is text. } // How the sharesheet preview is presented. optional SharesheetPreviewType previewType = 8; optional SharesheetPreviewType preview_type = 8; enum ResolverActivityIntent { // Intents handled by ResolverActivity.java INTENT_DEFAULT = 0; Loading @@ -9267,7 +9268,7 @@ message SharesheetStarted { INTENT_ACTION_MAIN = 7; } // The intent being processed (only SEND and SEND_MULTIPLE are system sharesheet) optional ResolverActivityIntent intentType = 9; optional ResolverActivityIntent intent_type = 9; } /** Loading core/java/android/app/INotificationManager.aidl +2 −3 Original line number Diff line number Diff line Loading @@ -78,10 +78,9 @@ interface INotificationManager boolean shouldHideSilentStatusIcons(String callingPkg); void setHideSilentStatusIcons(boolean hide); void setBubblesAllowed(String pkg, int uid, boolean allowed); void setBubblesAllowed(String pkg, int uid, int bubblePreference); boolean areBubblesAllowed(String pkg); boolean areBubblesAllowedForPackage(String pkg, int uid); boolean hasUserApprovedBubblesForPackage(String pkg, int uid); int getBubblePreferenceForPackage(String pkg, int uid); void createNotificationChannelGroups(String pkg, in ParceledListSlice channelGroupList); void createNotificationChannels(String pkg, in ParceledListSlice channelsList); Loading Loading
apex/jobscheduler/service/java/com/android/server/job/controllers/idle/DeviceIdlenessTracker.java +81 −39 Original line number Diff line number Diff line Loading @@ -19,10 +19,12 @@ package com.android.server.job.controllers.idle; import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock; import android.app.AlarmManager; import android.app.UiModeManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.PowerManager; import android.util.Log; import android.util.Slog; import android.util.proto.ProtoOutputStream; Loading @@ -39,6 +41,7 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id || Log.isLoggable(TAG, Log.DEBUG); private AlarmManager mAlarm; private PowerManager mPowerManager; // After construction, mutations of idle/screen-on state will only happen // on the main looper thread, either in onReceive() or in an alarm callback. Loading @@ -47,6 +50,7 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id private boolean mIdle; private boolean mScreenOn; private boolean mDockIdle; private boolean mInCarMode; private IdlenessListener mIdleListener; private AlarmManager.OnAlarmListener mIdleAlarmListener = () -> { Loading @@ -59,6 +63,7 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id mIdle = false; mScreenOn = true; mDockIdle = false; mInCarMode = false; } @Override Loading @@ -74,6 +79,7 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id mIdleWindowSlop = context.getResources().getInteger( com.android.internal.R.integer.config_jobSchedulerIdleWindowSlop); mAlarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); mPowerManager = context.getSystemService(PowerManager.class); IntentFilter filter = new IntentFilter(); Loading @@ -92,6 +98,10 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id filter.addAction(Intent.ACTION_DOCK_IDLE); filter.addAction(Intent.ACTION_DOCK_ACTIVE); // Car mode filter.addAction(UiModeManager.ACTION_ENTER_CAR_MODE_PRIORITIZED); filter.addAction(UiModeManager.ACTION_EXIT_CAR_MODE_PRIORITIZED); context.registerReceiver(this, filter); } Loading @@ -100,6 +110,8 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id pw.print(" mIdle: "); pw.println(mIdle); pw.print(" mScreenOn: "); pw.println(mScreenOn); pw.print(" mDockIdle: "); pw.println(mDockIdle); pw.print(" mInCarMode: "); pw.println(mInCarMode); } @Override Loading @@ -116,6 +128,9 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id proto.write( StateControllerProto.IdleController.IdlenessTracker.DeviceIdlenessTracker.IS_DOCK_IDLE, mDockIdle); proto.write( StateControllerProto.IdleController.IdlenessTracker.DeviceIdlenessTracker.IN_CAR_MODE, mInCarMode); proto.end(diToken); proto.end(token); Loading @@ -124,33 +139,37 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (action.equals(Intent.ACTION_SCREEN_ON) || action.equals(Intent.ACTION_DREAMING_STOPPED) || action.equals(Intent.ACTION_DOCK_ACTIVE)) { if (action.equals(Intent.ACTION_DOCK_ACTIVE)) { if (DEBUG) { Slog.v(TAG, "Received action: " + action); } switch (action) { case Intent.ACTION_DOCK_ACTIVE: if (!mScreenOn) { // Ignore this intent during screen off return; } else { mDockIdle = false; } } else { // Intentional fallthrough case Intent.ACTION_DREAMING_STOPPED: if (!mPowerManager.isInteractive()) { // Ignore this intent if the device isn't interactive. return; } // Intentional fallthrough case Intent.ACTION_SCREEN_ON: mScreenOn = true; mDockIdle = false; } if (DEBUG) { Slog.v(TAG,"exiting idle : " + action); Slog.v(TAG, "exiting idle"); } //cancel the alarm mAlarm.cancel(mIdleAlarmListener); cancelIdlenessCheck(); if (mIdle) { // possible transition to not-idle mIdle = false; mIdleListener.reportNewIdleState(mIdle); } } else if (action.equals(Intent.ACTION_SCREEN_OFF) || action.equals(Intent.ACTION_DREAMING_STARTED) || action.equals(Intent.ACTION_DOCK_IDLE)) { break; case Intent.ACTION_SCREEN_OFF: case Intent.ACTION_DREAMING_STARTED: case Intent.ACTION_DOCK_IDLE: // when the screen goes off or dreaming starts or wireless charging dock in idle, // we schedule the alarm that will tell us when we have decided the device is // truly idle. Loading @@ -165,22 +184,45 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id mScreenOn = false; mDockIdle = false; } maybeScheduleIdlenessCheck(action); break; case UiModeManager.ACTION_ENTER_CAR_MODE_PRIORITIZED: mInCarMode = true; cancelIdlenessCheck(); if (mIdle) { mIdle = false; mIdleListener.reportNewIdleState(mIdle); } break; case UiModeManager.ACTION_EXIT_CAR_MODE_PRIORITIZED: mInCarMode = false; maybeScheduleIdlenessCheck(action); break; case ActivityManagerService.ACTION_TRIGGER_IDLE: handleIdleTrigger(); break; } } private void maybeScheduleIdlenessCheck(String reason) { if ((!mScreenOn || mDockIdle) && !mInCarMode) { final long nowElapsed = sElapsedRealtimeClock.millis(); final long when = nowElapsed + mInactivityIdleThreshold; if (DEBUG) { Slog.v(TAG, "Scheduling idle : " + action + " now:" + nowElapsed + " when=" + when); Slog.v(TAG, "Scheduling idle : " + reason + " now:" + nowElapsed + " when=" + when); } mAlarm.setWindow(AlarmManager.ELAPSED_REALTIME_WAKEUP, when, mIdleWindowSlop, "JS idleness", mIdleAlarmListener, null); } else if (action.equals(ActivityManagerService.ACTION_TRIGGER_IDLE)) { handleIdleTrigger(); } } private void cancelIdlenessCheck() { mAlarm.cancel(mIdleAlarmListener); } private void handleIdleTrigger() { // idle time starts now. Do not set mIdle if screen is on. if (!mIdle && (!mScreenOn || mDockIdle)) { if (!mIdle && (!mScreenOn || mDockIdle) && !mInCarMode) { if (DEBUG) { Slog.v(TAG, "Idle trigger fired @ " + sElapsedRealtimeClock.millis()); } Loading @@ -189,7 +231,7 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id } else { if (DEBUG) { Slog.v(TAG, "TRIGGER_IDLE received but not changing state; idle=" + mIdle + " screen=" + mScreenOn); + mIdle + " screen=" + mScreenOn + " car=" + mInCarMode); } } } Loading
apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java +1 −2 Original line number Diff line number Diff line Loading @@ -172,8 +172,7 @@ public class AppStandbyController implements AppStandbyInternal { COMPRESS_TIME ? 1 * ONE_MINUTE : 12 * ONE_HOUR, COMPRESS_TIME ? 4 * ONE_MINUTE : 24 * ONE_HOUR, COMPRESS_TIME ? 16 * ONE_MINUTE : 48 * ONE_HOUR, // TODO(149050681): increase timeout to 30+ days COMPRESS_TIME ? 32 * ONE_MINUTE : 4 * ONE_DAY COMPRESS_TIME ? 32 * ONE_MINUTE : 30 * ONE_DAY }; /** The minimum allowed values for each index in {@link #ELAPSED_TIME_THRESHOLDS}. */ Loading
apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java +10 −16 Original line number Diff line number Diff line Loading @@ -166,13 +166,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { } private static void informAllUids(Context context) { UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); PackageManager pm = context.getPackageManager(); final List<UserHandle> users = um.getUserHandles(true); if (DEBUG) { Log.d(TAG, "Iterating over " + users.size() + " userHandles."); } ParcelFileDescriptor[] fds; try { fds = ParcelFileDescriptor.createPipe(); Loading @@ -185,6 +178,12 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { backgroundThread.start(); Handler handler = new Handler(backgroundThread.getLooper()); handler.post(() -> { UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); PackageManager pm = context.getPackageManager(); final List<UserHandle> users = um.getUserHandles(true); if (DEBUG) { Log.d(TAG, "Iterating over " + users.size() + " userHandles."); } IStatsd statsd = getStatsdNonblocking(); if (statsd == null) { return; Loading Loading @@ -699,8 +698,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { deathRecipient.addRegisteredBroadcastReceivers( List.of(appUpdateReceiver, userUpdateReceiver, shutdownEventReceiver)); final long token = Binder.clearCallingIdentity(); // Used so we can call statsd.bootComplete() outside of the lock. boolean shouldSendBootComplete = false; synchronized (sStatsdLock) { Loading @@ -713,13 +710,10 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { statsd.bootCompleted(); } try { // Pull the latest state of UID->app name, version mapping when // statsd starts. informAllUids(mContext); } finally { Binder.restoreCallingIdentity(token); } Log.i(TAG, "Told statsd that StatsCompanionService is alive."); } catch (RemoteException e) { Log.e(TAG, "Failed to inform statsd that statscompanion is ready", e); Loading
cmds/statsd/src/atoms.proto +3 −2 Original line number Diff line number Diff line Loading @@ -9249,12 +9249,13 @@ message SharesheetStarted { optional bool is_workprofile = 7; enum SharesheetPreviewType { // Constants from ChooserActivity.java CONTENT_PREVIEW_TYPE_UNKNOWN = 0; // Default for proto 2 / 3 compatibility. CONTENT_PREVIEW_IMAGE = 1; // The preview shown in the sharesheet is an image. CONTENT_PREVIEW_FILE = 2; // The preview shown in the sharesheet is a file. CONTENT_PREVIEW_TEXT = 3; // The preview shown in the sharesheet is text. } // How the sharesheet preview is presented. optional SharesheetPreviewType previewType = 8; optional SharesheetPreviewType preview_type = 8; enum ResolverActivityIntent { // Intents handled by ResolverActivity.java INTENT_DEFAULT = 0; Loading @@ -9267,7 +9268,7 @@ message SharesheetStarted { INTENT_ACTION_MAIN = 7; } // The intent being processed (only SEND and SEND_MULTIPLE are system sharesheet) optional ResolverActivityIntent intentType = 9; optional ResolverActivityIntent intent_type = 9; } /** Loading
core/java/android/app/INotificationManager.aidl +2 −3 Original line number Diff line number Diff line Loading @@ -78,10 +78,9 @@ interface INotificationManager boolean shouldHideSilentStatusIcons(String callingPkg); void setHideSilentStatusIcons(boolean hide); void setBubblesAllowed(String pkg, int uid, boolean allowed); void setBubblesAllowed(String pkg, int uid, int bubblePreference); boolean areBubblesAllowed(String pkg); boolean areBubblesAllowedForPackage(String pkg, int uid); boolean hasUserApprovedBubblesForPackage(String pkg, int uid); int getBubblePreferenceForPackage(String pkg, int uid); void createNotificationChannelGroups(String pkg, in ParceledListSlice channelGroupList); void createNotificationChannels(String pkg, in ParceledListSlice channelsList); Loading