Merge "Delay power broadcasts until system is booted." into nyc-dev
This commit is contained in:
@@ -60,6 +60,7 @@ import android.view.WindowManagerPolicy;
|
|||||||
import com.android.internal.app.IAppOpsService;
|
import com.android.internal.app.IAppOpsService;
|
||||||
import com.android.internal.app.IBatteryStats;
|
import com.android.internal.app.IBatteryStats;
|
||||||
import com.android.internal.os.BackgroundThread;
|
import com.android.internal.os.BackgroundThread;
|
||||||
|
import com.android.internal.util.ArrayUtils;
|
||||||
import com.android.server.EventLogTags;
|
import com.android.server.EventLogTags;
|
||||||
import com.android.server.ServiceThread;
|
import com.android.server.ServiceThread;
|
||||||
import com.android.server.SystemService;
|
import com.android.server.SystemService;
|
||||||
@@ -254,6 +255,9 @@ public final class PowerManagerService extends SystemService
|
|||||||
// True if boot completed occurred. We keep the screen on until this happens.
|
// True if boot completed occurred. We keep the screen on until this happens.
|
||||||
private boolean mBootCompleted;
|
private boolean mBootCompleted;
|
||||||
|
|
||||||
|
// Runnables that should be triggered on boot completed
|
||||||
|
private Runnable[] mBootCompletedRunnables;
|
||||||
|
|
||||||
// True if auto-suspend mode is enabled.
|
// True if auto-suspend mode is enabled.
|
||||||
// Refer to autosuspend.h.
|
// Refer to autosuspend.h.
|
||||||
private boolean mHalAutoSuspendModeEnabled;
|
private boolean mHalAutoSuspendModeEnabled;
|
||||||
@@ -525,6 +529,14 @@ public final class PowerManagerService extends SystemService
|
|||||||
userActivityNoUpdateLocked(
|
userActivityNoUpdateLocked(
|
||||||
now, PowerManager.USER_ACTIVITY_EVENT_OTHER, 0, Process.SYSTEM_UID);
|
now, PowerManager.USER_ACTIVITY_EVENT_OTHER, 0, Process.SYSTEM_UID);
|
||||||
updatePowerStateLocked();
|
updatePowerStateLocked();
|
||||||
|
|
||||||
|
if (!ArrayUtils.isEmpty(mBootCompletedRunnables)) {
|
||||||
|
Slog.d(TAG, "Posting " + mBootCompletedRunnables.length + " delayed runnables");
|
||||||
|
for (Runnable r : mBootCompletedRunnables) {
|
||||||
|
BackgroundThread.getHandler().post(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mBootCompletedRunnables = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -750,6 +762,16 @@ public final class PowerManagerService extends SystemService
|
|||||||
mDirty |= DIRTY_SETTINGS;
|
mDirty |= DIRTY_SETTINGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void postAfterBootCompleted(Runnable r) {
|
||||||
|
if (mBootCompleted) {
|
||||||
|
BackgroundThread.getHandler().post(r);
|
||||||
|
} else {
|
||||||
|
Slog.d(TAG, "Delaying runnable until system is booted");
|
||||||
|
mBootCompletedRunnables = ArrayUtils.appendElement(Runnable.class,
|
||||||
|
mBootCompletedRunnables, r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void updateLowPowerModeLocked() {
|
void updateLowPowerModeLocked() {
|
||||||
if (mIsPowered && mLowPowerModeSetting) {
|
if (mIsPowered && mLowPowerModeSetting) {
|
||||||
if (DEBUG_SPEW) {
|
if (DEBUG_SPEW) {
|
||||||
@@ -767,7 +789,7 @@ public final class PowerManagerService extends SystemService
|
|||||||
if (mLowPowerModeEnabled != lowPowerModeEnabled) {
|
if (mLowPowerModeEnabled != lowPowerModeEnabled) {
|
||||||
mLowPowerModeEnabled = lowPowerModeEnabled;
|
mLowPowerModeEnabled = lowPowerModeEnabled;
|
||||||
powerHintInternal(POWER_HINT_LOW_POWER, lowPowerModeEnabled ? 1 : 0);
|
powerHintInternal(POWER_HINT_LOW_POWER, lowPowerModeEnabled ? 1 : 0);
|
||||||
BackgroundThread.getHandler().post(new Runnable() {
|
postAfterBootCompleted(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
Intent intent = new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGING)
|
Intent intent = new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGING)
|
||||||
|
|||||||
Reference in New Issue
Block a user