Loading core/java/android/os/PowerManager.java +8 −0 Original line number Diff line number Diff line Loading @@ -624,6 +624,7 @@ public final class PowerManager { WAKE_REASON_TAP, WAKE_REASON_LIFT, WAKE_REASON_BIOMETRIC, WAKE_REASON_DOCK, }) @Retention(RetentionPolicy.SOURCE) public @interface WakeReason{} Loading Loading @@ -764,6 +765,12 @@ public final class PowerManager { */ public static final int WAKE_REASON_BIOMETRIC = 17; /** * Wake up reason code: Waking up due to a user docking the device. * @hide */ public static final int WAKE_REASON_DOCK = 18; /** * Convert the wake reason to a string for debugging purposes. * @hide Loading @@ -788,6 +795,7 @@ public final class PowerManager { case WAKE_REASON_TAP: return "WAKE_REASON_TAP"; case WAKE_REASON_LIFT: return "WAKE_REASON_LIFT"; case WAKE_REASON_BIOMETRIC: return "WAKE_REASON_BIOMETRIC"; case WAKE_REASON_DOCK: return "WAKE_REASON_DOCK"; default: return Integer.toString(wakeReason); } } Loading services/core/java/com/android/server/DockObserver.java +36 −32 Original line number Diff line number Diff line Loading @@ -27,7 +27,6 @@ import android.media.RingtoneManager; import android.net.Uri; import android.os.Binder; import android.os.Handler; import android.os.Message; import android.os.PowerManager; import android.os.SystemClock; import android.os.UEventObserver; Loading @@ -37,6 +36,7 @@ import android.util.Pair; import android.util.Slog; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.DumpUtils; import com.android.internal.util.FrameworkStatsLog; Loading @@ -57,8 +57,6 @@ import java.util.Map; final class DockObserver extends SystemService { private static final String TAG = "DockObserver"; private static final int MSG_DOCK_STATE_CHANGED = 0; private final PowerManager mPowerManager; private final PowerManager.WakeLock mWakeLock; Loading @@ -66,11 +64,16 @@ final class DockObserver extends SystemService { private boolean mSystemReady; @GuardedBy("mLock") private int mActualDockState = Intent.EXTRA_DOCK_STATE_UNDOCKED; @GuardedBy("mLock") private int mReportedDockState = Intent.EXTRA_DOCK_STATE_UNDOCKED; @GuardedBy("mLock") private int mPreviousDockState = Intent.EXTRA_DOCK_STATE_UNDOCKED; @GuardedBy("mLock") private boolean mUpdatesStopped; private final boolean mKeepDreamingWhenUnplugging; Loading Loading @@ -182,10 +185,15 @@ final class DockObserver extends SystemService { ExtconInfo.EXTCON_DOCK }); synchronized (mLock) { if (!infos.isEmpty()) { ExtconInfo info = infos.get(0); Slog.i(TAG, "Found extcon info devPath: " + info.getDevicePath() + ", statePath: " + info.getStatePath()); Slog.i( TAG, "Found extcon info devPath: " + info.getDevicePath() + ", statePath: " + info.getStatePath()); // set initial status setDockStateFromProviderLocked(ExtconStateProvider.fromFile(info.getStatePath())); Loading @@ -195,6 +203,7 @@ final class DockObserver extends SystemService { } else { Slog.i(TAG, "No extcon dock device found in this kernel."); } } mDockObserverLocalService = new DockObserverLocalService(); LocalServices.addService(DockObserverInternal.class, mDockObserverLocalService); Loading Loading @@ -223,13 +232,15 @@ final class DockObserver extends SystemService { } } @GuardedBy("mLock") private void updateIfDockedLocked() { // don't bother broadcasting undocked here if (mReportedDockState != Intent.EXTRA_DOCK_STATE_UNDOCKED) { updateLocked(); postWakefulDockStateChange(); } } @GuardedBy("mLock") private void setActualDockStateLocked(int newState) { mActualDockState = newState; if (!mUpdatesStopped) { Loading @@ -237,6 +248,7 @@ final class DockObserver extends SystemService { } } @GuardedBy("mLock") private void setDockStateLocked(int newState) { if (newState != mReportedDockState) { mReportedDockState = newState; Loading @@ -246,10 +258,12 @@ final class DockObserver extends SystemService { if (mSystemReady) { // Wake up immediately when docked or undocked unless prohibited from doing so. if (allowWakeFromDock()) { mPowerManager.wakeUp(SystemClock.uptimeMillis(), mPowerManager.wakeUp( SystemClock.uptimeMillis(), PowerManager.WAKE_REASON_DOCK, "android.server:DOCK"); } updateLocked(); postWakefulDockStateChange(); } } } Loading @@ -263,9 +277,8 @@ final class DockObserver extends SystemService { Settings.Global.THEATER_MODE_ON, 0) == 0); } private void updateLocked() { mWakeLock.acquire(); mHandler.sendEmptyMessage(MSG_DOCK_STATE_CHANGED); private void postWakefulDockStateChange() { mHandler.post(mWakeLock.wrap(this::handleDockStateChange)); } private void handleDockStateChange() { Loading Loading @@ -348,17 +361,7 @@ final class DockObserver extends SystemService { } } private final Handler mHandler = new Handler(true /*async*/) { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_DOCK_STATE_CHANGED: handleDockStateChange(); mWakeLock.release(); break; } } }; private final Handler mHandler = new Handler(true /*async*/); private int getDockedStateExtraValue(ExtconStateProvider state) { for (ExtconStateConfig config : mExtconStateConfigs) { Loading Loading @@ -386,6 +389,7 @@ final class DockObserver extends SystemService { } } @GuardedBy("mLock") private void setDockStateFromProviderLocked(ExtconStateProvider provider) { int state = Intent.EXTRA_DOCK_STATE_UNDOCKED; if ("1".equals(provider.getValue("DOCK"))) { Loading Loading
core/java/android/os/PowerManager.java +8 −0 Original line number Diff line number Diff line Loading @@ -624,6 +624,7 @@ public final class PowerManager { WAKE_REASON_TAP, WAKE_REASON_LIFT, WAKE_REASON_BIOMETRIC, WAKE_REASON_DOCK, }) @Retention(RetentionPolicy.SOURCE) public @interface WakeReason{} Loading Loading @@ -764,6 +765,12 @@ public final class PowerManager { */ public static final int WAKE_REASON_BIOMETRIC = 17; /** * Wake up reason code: Waking up due to a user docking the device. * @hide */ public static final int WAKE_REASON_DOCK = 18; /** * Convert the wake reason to a string for debugging purposes. * @hide Loading @@ -788,6 +795,7 @@ public final class PowerManager { case WAKE_REASON_TAP: return "WAKE_REASON_TAP"; case WAKE_REASON_LIFT: return "WAKE_REASON_LIFT"; case WAKE_REASON_BIOMETRIC: return "WAKE_REASON_BIOMETRIC"; case WAKE_REASON_DOCK: return "WAKE_REASON_DOCK"; default: return Integer.toString(wakeReason); } } Loading
services/core/java/com/android/server/DockObserver.java +36 −32 Original line number Diff line number Diff line Loading @@ -27,7 +27,6 @@ import android.media.RingtoneManager; import android.net.Uri; import android.os.Binder; import android.os.Handler; import android.os.Message; import android.os.PowerManager; import android.os.SystemClock; import android.os.UEventObserver; Loading @@ -37,6 +36,7 @@ import android.util.Pair; import android.util.Slog; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.DumpUtils; import com.android.internal.util.FrameworkStatsLog; Loading @@ -57,8 +57,6 @@ import java.util.Map; final class DockObserver extends SystemService { private static final String TAG = "DockObserver"; private static final int MSG_DOCK_STATE_CHANGED = 0; private final PowerManager mPowerManager; private final PowerManager.WakeLock mWakeLock; Loading @@ -66,11 +64,16 @@ final class DockObserver extends SystemService { private boolean mSystemReady; @GuardedBy("mLock") private int mActualDockState = Intent.EXTRA_DOCK_STATE_UNDOCKED; @GuardedBy("mLock") private int mReportedDockState = Intent.EXTRA_DOCK_STATE_UNDOCKED; @GuardedBy("mLock") private int mPreviousDockState = Intent.EXTRA_DOCK_STATE_UNDOCKED; @GuardedBy("mLock") private boolean mUpdatesStopped; private final boolean mKeepDreamingWhenUnplugging; Loading Loading @@ -182,10 +185,15 @@ final class DockObserver extends SystemService { ExtconInfo.EXTCON_DOCK }); synchronized (mLock) { if (!infos.isEmpty()) { ExtconInfo info = infos.get(0); Slog.i(TAG, "Found extcon info devPath: " + info.getDevicePath() + ", statePath: " + info.getStatePath()); Slog.i( TAG, "Found extcon info devPath: " + info.getDevicePath() + ", statePath: " + info.getStatePath()); // set initial status setDockStateFromProviderLocked(ExtconStateProvider.fromFile(info.getStatePath())); Loading @@ -195,6 +203,7 @@ final class DockObserver extends SystemService { } else { Slog.i(TAG, "No extcon dock device found in this kernel."); } } mDockObserverLocalService = new DockObserverLocalService(); LocalServices.addService(DockObserverInternal.class, mDockObserverLocalService); Loading Loading @@ -223,13 +232,15 @@ final class DockObserver extends SystemService { } } @GuardedBy("mLock") private void updateIfDockedLocked() { // don't bother broadcasting undocked here if (mReportedDockState != Intent.EXTRA_DOCK_STATE_UNDOCKED) { updateLocked(); postWakefulDockStateChange(); } } @GuardedBy("mLock") private void setActualDockStateLocked(int newState) { mActualDockState = newState; if (!mUpdatesStopped) { Loading @@ -237,6 +248,7 @@ final class DockObserver extends SystemService { } } @GuardedBy("mLock") private void setDockStateLocked(int newState) { if (newState != mReportedDockState) { mReportedDockState = newState; Loading @@ -246,10 +258,12 @@ final class DockObserver extends SystemService { if (mSystemReady) { // Wake up immediately when docked or undocked unless prohibited from doing so. if (allowWakeFromDock()) { mPowerManager.wakeUp(SystemClock.uptimeMillis(), mPowerManager.wakeUp( SystemClock.uptimeMillis(), PowerManager.WAKE_REASON_DOCK, "android.server:DOCK"); } updateLocked(); postWakefulDockStateChange(); } } } Loading @@ -263,9 +277,8 @@ final class DockObserver extends SystemService { Settings.Global.THEATER_MODE_ON, 0) == 0); } private void updateLocked() { mWakeLock.acquire(); mHandler.sendEmptyMessage(MSG_DOCK_STATE_CHANGED); private void postWakefulDockStateChange() { mHandler.post(mWakeLock.wrap(this::handleDockStateChange)); } private void handleDockStateChange() { Loading Loading @@ -348,17 +361,7 @@ final class DockObserver extends SystemService { } } private final Handler mHandler = new Handler(true /*async*/) { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_DOCK_STATE_CHANGED: handleDockStateChange(); mWakeLock.release(); break; } } }; private final Handler mHandler = new Handler(true /*async*/); private int getDockedStateExtraValue(ExtconStateProvider state) { for (ExtconStateConfig config : mExtconStateConfigs) { Loading Loading @@ -386,6 +389,7 @@ final class DockObserver extends SystemService { } } @GuardedBy("mLock") private void setDockStateFromProviderLocked(ExtconStateProvider provider) { int state = Intent.EXTRA_DOCK_STATE_UNDOCKED; if ("1".equals(provider.getValue("DOCK"))) { Loading