Loading core/java/android/provider/Settings.java +6 −0 Original line number Diff line number Diff line Loading @@ -6000,6 +6000,12 @@ public final class Settings { */ public static final String DOZE_ENABLED = "doze_enabled"; /** * Whether doze should be always on. * @hide */ public static final String DOZE_ALWAYS_ON = "doze_always_on"; /** * Whether the device should pulse on pick up gesture. * @hide Loading packages/SystemUI/res/values/strings.xml +8 −0 Original line number Diff line number Diff line Loading @@ -1667,6 +1667,14 @@ not appear on production builds ever. --> <string name="plugins" translatable="false">Plugins</string> <!-- Ambient display section of the tuner. Non-translatable since it should not appear on production builds ever. --> <string name="tuner_doze" translatable="false">Ambient Display</string> <!-- Ambient display always-on of the tuner. Non-translatable since it should not appear on production builds ever. --> <string name="tuner_doze_always_on" translatable="false">Always on</string> <!-- PIP section of the tuner. Non-translatable since it should not appear on production builds ever. --> <string name="picture_in_picture" translatable="false">Picture-in-Picture</string> Loading packages/SystemUI/res/xml/tuner_prefs.xml +11 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,17 @@ </PreferenceScreen> <PreferenceScreen android:key="doze" android:title="@string/tuner_doze"> <com.android.systemui.tuner.TunerSwitch android:key="doze_always_on" android:title="@string/tuner_doze_always_on" sysui:defValue="false" /> </PreferenceScreen> <!-- <Preference android:key="nav_bar" Loading packages/SystemUI/src/com/android/systemui/doze/DozeHost.java +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ public interface DozeHost { void startDozing(@NonNull Runnable ready); void pulseWhileDozing(@NonNull PulseCallback callback, int reason); void stopDozing(); void dozeTimeTick(); boolean isPowerSaveActive(); boolean isNotificationLightOn(); boolean isPulsingBlocked(); Loading packages/SystemUI/src/com/android/systemui/doze/DozeService.java +35 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.doze; import android.app.AlarmManager; import android.app.UiModeManager; import android.content.BroadcastReceiver; import android.content.Context; Loading Loading @@ -43,7 +44,9 @@ import com.android.systemui.util.Assert; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; public class DozeService extends DreamService implements DozeSensors.Callback { private static final String TAG = "DozeService"; Loading Loading @@ -77,6 +80,7 @@ public class DozeService extends DreamService implements DozeSensors.Callback { private long mNotificationPulseTime; private AmbientDisplayConfiguration mConfig; private AlarmManager mAlarmManager; public DozeService() { if (DEBUG) Log.d(mTag, "new DozeService()"); Loading Loading @@ -114,6 +118,7 @@ public class DozeService extends DreamService implements DozeSensors.Callback { setWindowless(true); mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); mAlarmManager = (AlarmManager) mContext.getSystemService(AlarmManager.class); mConfig = new AmbientDisplayConfiguration(mContext); mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); Loading Loading @@ -168,6 +173,10 @@ public class DozeService extends DreamService implements DozeSensors.Callback { // stopDozing because can we just keep dozing until the bitter end. } })); if (mDozeParameters.getAlwaysOn()) { mTimeTick.onAlarm(); } } @Override Loading @@ -184,6 +193,7 @@ public class DozeService extends DreamService implements DozeSensors.Callback { // Tell the host that it's over. mHost.stopDozing(); mAlarmManager.cancel(mTimeTick); } private void requestPulse(final int reason) { Loading Loading @@ -264,8 +274,12 @@ public class DozeService extends DreamService implements DozeSensors.Callback { private void turnDisplayOff() { if (DEBUG) Log.d(mTag, "Display off"); if (mDozeParameters.getAlwaysOn()) { turnDisplayOn(); } else { setDozeScreenState(Display.STATE_OFF); } } private void turnDisplayOn() { if (DEBUG) Log.d(mTag, "Display on"); Loading Loading @@ -353,6 +367,26 @@ public class DozeService extends DreamService implements DozeSensors.Callback { } }; private AlarmManager.OnAlarmListener mTimeTick = new AlarmManager.OnAlarmListener() { @Override public void onAlarm() { mHost.dozeTimeTick(); // Keep wakelock until a frame has been pushed. mHandler.post(mWakeLock.wrap(()->{})); Calendar calendar = GregorianCalendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.add(Calendar.MINUTE, 1); long delta = calendar.getTimeInMillis() - System.currentTimeMillis(); mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + delta, "doze_time_tick", mTimeTick, mHandler); } }; private final DozeHost.Callback mHostCallback = new DozeHost.Callback() { @Override public void onNewNotifications() { Loading Loading
core/java/android/provider/Settings.java +6 −0 Original line number Diff line number Diff line Loading @@ -6000,6 +6000,12 @@ public final class Settings { */ public static final String DOZE_ENABLED = "doze_enabled"; /** * Whether doze should be always on. * @hide */ public static final String DOZE_ALWAYS_ON = "doze_always_on"; /** * Whether the device should pulse on pick up gesture. * @hide Loading
packages/SystemUI/res/values/strings.xml +8 −0 Original line number Diff line number Diff line Loading @@ -1667,6 +1667,14 @@ not appear on production builds ever. --> <string name="plugins" translatable="false">Plugins</string> <!-- Ambient display section of the tuner. Non-translatable since it should not appear on production builds ever. --> <string name="tuner_doze" translatable="false">Ambient Display</string> <!-- Ambient display always-on of the tuner. Non-translatable since it should not appear on production builds ever. --> <string name="tuner_doze_always_on" translatable="false">Always on</string> <!-- PIP section of the tuner. Non-translatable since it should not appear on production builds ever. --> <string name="picture_in_picture" translatable="false">Picture-in-Picture</string> Loading
packages/SystemUI/res/xml/tuner_prefs.xml +11 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,17 @@ </PreferenceScreen> <PreferenceScreen android:key="doze" android:title="@string/tuner_doze"> <com.android.systemui.tuner.TunerSwitch android:key="doze_always_on" android:title="@string/tuner_doze_always_on" sysui:defValue="false" /> </PreferenceScreen> <!-- <Preference android:key="nav_bar" Loading
packages/SystemUI/src/com/android/systemui/doze/DozeHost.java +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ public interface DozeHost { void startDozing(@NonNull Runnable ready); void pulseWhileDozing(@NonNull PulseCallback callback, int reason); void stopDozing(); void dozeTimeTick(); boolean isPowerSaveActive(); boolean isNotificationLightOn(); boolean isPulsingBlocked(); Loading
packages/SystemUI/src/com/android/systemui/doze/DozeService.java +35 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.doze; import android.app.AlarmManager; import android.app.UiModeManager; import android.content.BroadcastReceiver; import android.content.Context; Loading Loading @@ -43,7 +44,9 @@ import com.android.systemui.util.Assert; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; public class DozeService extends DreamService implements DozeSensors.Callback { private static final String TAG = "DozeService"; Loading Loading @@ -77,6 +80,7 @@ public class DozeService extends DreamService implements DozeSensors.Callback { private long mNotificationPulseTime; private AmbientDisplayConfiguration mConfig; private AlarmManager mAlarmManager; public DozeService() { if (DEBUG) Log.d(mTag, "new DozeService()"); Loading Loading @@ -114,6 +118,7 @@ public class DozeService extends DreamService implements DozeSensors.Callback { setWindowless(true); mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE); mAlarmManager = (AlarmManager) mContext.getSystemService(AlarmManager.class); mConfig = new AmbientDisplayConfiguration(mContext); mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); Loading Loading @@ -168,6 +173,10 @@ public class DozeService extends DreamService implements DozeSensors.Callback { // stopDozing because can we just keep dozing until the bitter end. } })); if (mDozeParameters.getAlwaysOn()) { mTimeTick.onAlarm(); } } @Override Loading @@ -184,6 +193,7 @@ public class DozeService extends DreamService implements DozeSensors.Callback { // Tell the host that it's over. mHost.stopDozing(); mAlarmManager.cancel(mTimeTick); } private void requestPulse(final int reason) { Loading Loading @@ -264,8 +274,12 @@ public class DozeService extends DreamService implements DozeSensors.Callback { private void turnDisplayOff() { if (DEBUG) Log.d(mTag, "Display off"); if (mDozeParameters.getAlwaysOn()) { turnDisplayOn(); } else { setDozeScreenState(Display.STATE_OFF); } } private void turnDisplayOn() { if (DEBUG) Log.d(mTag, "Display on"); Loading Loading @@ -353,6 +367,26 @@ public class DozeService extends DreamService implements DozeSensors.Callback { } }; private AlarmManager.OnAlarmListener mTimeTick = new AlarmManager.OnAlarmListener() { @Override public void onAlarm() { mHost.dozeTimeTick(); // Keep wakelock until a frame has been pushed. mHandler.post(mWakeLock.wrap(()->{})); Calendar calendar = GregorianCalendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.add(Calendar.MINUTE, 1); long delta = calendar.getTimeInMillis() - System.currentTimeMillis(); mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + delta, "doze_time_tick", mTimeTick, mHandler); } }; private final DozeHost.Callback mHostCallback = new DozeHost.Callback() { @Override public void onNewNotifications() { Loading