From afae4bd437563c3997740ff6a537108409f7884c Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Tue, 15 Dec 2015 14:20:06 -0500 Subject: [PATCH] Add internal power mode changed broadcast This broadcast allows settings to be (rarely) be started by a power change event. Settings will have a conditional item informing the user of battery saving mode, when they dismiss it, the item will not show up again until after power saving mode has been exited and re-entered. Settings will catch the exit of power saving mode by enabling a receiver for this broadcast only when in this state. Change-Id: I62385413e4b8b004d4e1e0e5ba250730848ba013 --- core/java/android/os/PowerManager.java | 8 +++++ .../android/server/power/PowerManagerService.java | 35 +++++++++++----------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index a0a006044751..120654fcf534 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -973,6 +973,14 @@ public final class PowerManager { = "android.os.action.POWER_SAVE_MODE_CHANGED"; /** + * Intent that is broadcast when the state of {@link #isPowerSaveMode()} changes. + * @hide + */ + @SdkConstant(SdkConstant.SdkConstantType.BROADCAST_INTENT_ACTION) + public static final String ACTION_POWER_SAVE_MODE_CHANGED_INTERNAL + = "android.os.action.POWER_SAVE_MODE_CHANGED_INTERNAL"; + + /** * Intent that is broadcast when the state of {@link #isDeviceIdleMode()} changes. * This broadcast is only sent to registered receivers. */ diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index 6498dd941a32..290019c73ba4 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -16,21 +16,8 @@ package com.android.server.power; -import android.app.ActivityManager; -import android.util.SparseIntArray; -import com.android.internal.app.IAppOpsService; -import com.android.internal.app.IBatteryStats; -import com.android.internal.os.BackgroundThread; -import com.android.server.EventLogTags; -import com.android.server.ServiceThread; -import com.android.server.SystemService; -import com.android.server.am.BatteryStatsService; -import com.android.server.lights.Light; -import com.android.server.lights.LightsManager; -import com.android.server.Watchdog; - import android.Manifest; -import android.app.AppOpsManager; +import android.app.ActivityManager; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; @@ -65,22 +52,32 @@ import android.provider.Settings; import android.service.dreams.DreamManagerInternal; import android.util.EventLog; import android.util.Slog; +import android.util.SparseIntArray; import android.util.TimeUtils; import android.view.Display; import android.view.WindowManagerPolicy; +import com.android.internal.app.IAppOpsService; +import com.android.internal.app.IBatteryStats; +import com.android.internal.os.BackgroundThread; +import com.android.server.EventLogTags; +import com.android.server.ServiceThread; +import com.android.server.SystemService; +import com.android.server.Watchdog; +import com.android.server.am.BatteryStatsService; +import com.android.server.lights.Light; +import com.android.server.lights.LightsManager; +import libcore.util.Objects; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; -import libcore.util.Objects; - import static android.os.PowerManagerInternal.POWER_HINT_INTERACTION; import static android.os.PowerManagerInternal.WAKEFULNESS_ASLEEP; import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE; -import static android.os.PowerManagerInternal.WAKEFULNESS_DREAMING; import static android.os.PowerManagerInternal.WAKEFULNESS_DOZING; +import static android.os.PowerManagerInternal.WAKEFULNESS_DREAMING; /** * The power manager service is responsible for coordinating power management @@ -771,6 +768,10 @@ public final class PowerManagerService extends SystemService intent = new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED); intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); mContext.sendBroadcast(intent); + // Send internal version that requires signature permission. + mContext.sendBroadcastAsUser(new Intent( + PowerManager.ACTION_POWER_SAVE_MODE_CHANGED_INTERNAL), UserHandle.ALL, + Manifest.permission.DEVICE_POWER); } }); } -- 2.11.0