Loading packages/SystemUI/src/com/android/systemui/idle/IdleHostViewController.java +67 −13 Original line number Original line Diff line number Diff line Loading @@ -19,14 +19,21 @@ package com.android.systemui.idle; import static com.android.systemui.communal.dagger.CommunalModule.IDLE_VIEW; import static com.android.systemui.communal.dagger.CommunalModule.IDLE_VIEW; import android.annotation.IntDef; import android.annotation.IntDef; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; import android.content.res.Resources; import android.os.Looper; import android.os.Looper; import android.os.PowerManager; import android.os.SystemClock; import android.service.dreams.Sandman; import android.util.Log; import android.util.Log; import android.view.Choreographer; import android.view.Choreographer; import android.view.View; import android.view.View; import android.view.ViewGroup; import com.android.systemui.R; import com.android.systemui.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.shared.system.InputMonitorCompat; import com.android.systemui.shared.system.InputMonitorCompat; Loading @@ -48,6 +55,7 @@ public class IdleHostViewController extends ViewController<IdleHostView> { private static final String INPUT_MONITOR_IDENTIFIER = "IdleHostViewController"; private static final String INPUT_MONITOR_IDENTIFIER = "IdleHostViewController"; private static final String TAG = "IdleHostViewController"; private static final String TAG = "IdleHostViewController"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final int TIMEOUT_TO_DOZE_MS = 10000; @Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME) @IntDef({STATE_IDLE_MODE_ENABLED, STATE_DOZING, STATE_KEYGUARD_SHOWING, STATE_IDLING}) @IntDef({STATE_IDLE_MODE_ENABLED, STATE_DOZING, STATE_KEYGUARD_SHOWING, STATE_IDLING}) Loading Loading @@ -77,6 +85,8 @@ public class IdleHostViewController extends ViewController<IdleHostView> { private int mState; private int mState; private boolean mIdleModeActive; private boolean mIdleModeActive; private final Context mContext; // Timeout to idle in milliseconds. // Timeout to idle in milliseconds. private final int mIdleTimeout; private final int mIdleTimeout; Loading @@ -86,6 +96,10 @@ public class IdleHostViewController extends ViewController<IdleHostView> { // Delayable executor. // Delayable executor. private final DelayableExecutor mDelayableExecutor; private final DelayableExecutor mDelayableExecutor; private final BroadcastDispatcher mBroadcastDispatcher; private final PowerManager mPowerManager; // Runnable for canceling enabling idle. // Runnable for canceling enabling idle. private Runnable mCancelEnableIdling; private Runnable mCancelEnableIdling; Loading @@ -112,6 +126,20 @@ public class IdleHostViewController extends ViewController<IdleHostView> { setState(STATE_IDLING, true); setState(STATE_IDLING, true); }; }; // Delayed callback for enabling doze mode from idle. private Runnable mIdleModeToDozeCallback = new Runnable() { @Override public void run() { if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "Start dozing from timeout"); } mPowerManager.goToSleep(SystemClock.uptimeMillis(), PowerManager.GO_TO_SLEEP_REASON_TIMEOUT, 0); } }; private Runnable mCancelIdleModeToDoze; private final KeyguardStateController.Callback mKeyguardCallback = private final KeyguardStateController.Callback mKeyguardCallback = new KeyguardStateController.Callback() { new KeyguardStateController.Callback() { @Override @Override Loading @@ -128,10 +156,22 @@ public class IdleHostViewController extends ViewController<IdleHostView> { } } }; }; private final BroadcastReceiver mDreamEndedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_DREAMING_STOPPED.equals(intent.getAction())) { setState(STATE_IDLING, false); } } }; final Provider<View> mIdleViewProvider; final Provider<View> mIdleViewProvider; @Inject @Inject protected IdleHostViewController( protected IdleHostViewController( Context context, BroadcastDispatcher broadcastDispatcher, PowerManager powerManager, IdleHostView view, InputMonitorFactory factory, IdleHostView view, InputMonitorFactory factory, @Main DelayableExecutor delayableExecutor, @Main DelayableExecutor delayableExecutor, @Main Resources resources, @Main Resources resources, Loading @@ -141,12 +181,17 @@ public class IdleHostViewController extends ViewController<IdleHostView> { KeyguardStateController keyguardStateController, KeyguardStateController keyguardStateController, StatusBarStateController statusBarStateController) { StatusBarStateController statusBarStateController) { super(view); super(view); mContext = context; mBroadcastDispatcher = broadcastDispatcher; mPowerManager = powerManager; mIdleViewProvider = idleViewProvider; mIdleViewProvider = idleViewProvider; mKeyguardStateController = keyguardStateController; mKeyguardStateController = keyguardStateController; mStatusBarStateController = statusBarStateController; mStatusBarStateController = statusBarStateController; mLooper = looper; mLooper = looper; mChoreographer = choreographer; mChoreographer = choreographer; mState = STATE_KEYGUARD_SHOWING; final boolean enabled = resources.getBoolean(R.bool.config_enableIdleMode); final boolean enabled = resources.getBoolean(R.bool.config_enableIdleMode); if (enabled) { if (enabled) { mState |= STATE_IDLE_MODE_ENABLED; mState |= STATE_IDLE_MODE_ENABLED; Loading Loading @@ -248,19 +293,28 @@ public class IdleHostViewController extends ViewController<IdleHostView> { } } mIdleModeActive = enable; mIdleModeActive = enable; mDelayableExecutor.execute(() -> { mView.setVisibility(mIdleModeActive ? View.VISIBLE : View.GONE); if (mIdleModeActive) { if (mIdleModeActive) { final View idleView = mIdleViewProvider.get(); mCancelIdleModeToDoze = mDelayableExecutor.executeDelayed(mIdleModeToDozeCallback, idleView.setLayoutParams( TIMEOUT_TO_DOZE_MS); new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); // Track when the dream ends to cancel any timeouts. mView.addView(idleView); final IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_DREAMING_STOPPED); mBroadcastDispatcher.registerReceiver(mDreamEndedReceiver, filter); // Start dream. Sandman.startDreamByUserRequest(mContext); } else { } else { mView.removeAllViews(); // Stop tracking dream end. mBroadcastDispatcher.unregisterReceiver(mDreamEndedReceiver); // Remove timeout. if (mCancelIdleModeToDoze != null) { mCancelIdleModeToDoze.run(); mCancelIdleModeToDoze = null; } } } }); } } @Override @Override Loading Loading
packages/SystemUI/src/com/android/systemui/idle/IdleHostViewController.java +67 −13 Original line number Original line Diff line number Diff line Loading @@ -19,14 +19,21 @@ package com.android.systemui.idle; import static com.android.systemui.communal.dagger.CommunalModule.IDLE_VIEW; import static com.android.systemui.communal.dagger.CommunalModule.IDLE_VIEW; import android.annotation.IntDef; import android.annotation.IntDef; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; import android.content.res.Resources; import android.os.Looper; import android.os.Looper; import android.os.PowerManager; import android.os.SystemClock; import android.service.dreams.Sandman; import android.util.Log; import android.util.Log; import android.view.Choreographer; import android.view.Choreographer; import android.view.View; import android.view.View; import android.view.ViewGroup; import com.android.systemui.R; import com.android.systemui.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.shared.system.InputMonitorCompat; import com.android.systemui.shared.system.InputMonitorCompat; Loading @@ -48,6 +55,7 @@ public class IdleHostViewController extends ViewController<IdleHostView> { private static final String INPUT_MONITOR_IDENTIFIER = "IdleHostViewController"; private static final String INPUT_MONITOR_IDENTIFIER = "IdleHostViewController"; private static final String TAG = "IdleHostViewController"; private static final String TAG = "IdleHostViewController"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private static final int TIMEOUT_TO_DOZE_MS = 10000; @Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME) @IntDef({STATE_IDLE_MODE_ENABLED, STATE_DOZING, STATE_KEYGUARD_SHOWING, STATE_IDLING}) @IntDef({STATE_IDLE_MODE_ENABLED, STATE_DOZING, STATE_KEYGUARD_SHOWING, STATE_IDLING}) Loading Loading @@ -77,6 +85,8 @@ public class IdleHostViewController extends ViewController<IdleHostView> { private int mState; private int mState; private boolean mIdleModeActive; private boolean mIdleModeActive; private final Context mContext; // Timeout to idle in milliseconds. // Timeout to idle in milliseconds. private final int mIdleTimeout; private final int mIdleTimeout; Loading @@ -86,6 +96,10 @@ public class IdleHostViewController extends ViewController<IdleHostView> { // Delayable executor. // Delayable executor. private final DelayableExecutor mDelayableExecutor; private final DelayableExecutor mDelayableExecutor; private final BroadcastDispatcher mBroadcastDispatcher; private final PowerManager mPowerManager; // Runnable for canceling enabling idle. // Runnable for canceling enabling idle. private Runnable mCancelEnableIdling; private Runnable mCancelEnableIdling; Loading @@ -112,6 +126,20 @@ public class IdleHostViewController extends ViewController<IdleHostView> { setState(STATE_IDLING, true); setState(STATE_IDLING, true); }; }; // Delayed callback for enabling doze mode from idle. private Runnable mIdleModeToDozeCallback = new Runnable() { @Override public void run() { if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "Start dozing from timeout"); } mPowerManager.goToSleep(SystemClock.uptimeMillis(), PowerManager.GO_TO_SLEEP_REASON_TIMEOUT, 0); } }; private Runnable mCancelIdleModeToDoze; private final KeyguardStateController.Callback mKeyguardCallback = private final KeyguardStateController.Callback mKeyguardCallback = new KeyguardStateController.Callback() { new KeyguardStateController.Callback() { @Override @Override Loading @@ -128,10 +156,22 @@ public class IdleHostViewController extends ViewController<IdleHostView> { } } }; }; private final BroadcastReceiver mDreamEndedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_DREAMING_STOPPED.equals(intent.getAction())) { setState(STATE_IDLING, false); } } }; final Provider<View> mIdleViewProvider; final Provider<View> mIdleViewProvider; @Inject @Inject protected IdleHostViewController( protected IdleHostViewController( Context context, BroadcastDispatcher broadcastDispatcher, PowerManager powerManager, IdleHostView view, InputMonitorFactory factory, IdleHostView view, InputMonitorFactory factory, @Main DelayableExecutor delayableExecutor, @Main DelayableExecutor delayableExecutor, @Main Resources resources, @Main Resources resources, Loading @@ -141,12 +181,17 @@ public class IdleHostViewController extends ViewController<IdleHostView> { KeyguardStateController keyguardStateController, KeyguardStateController keyguardStateController, StatusBarStateController statusBarStateController) { StatusBarStateController statusBarStateController) { super(view); super(view); mContext = context; mBroadcastDispatcher = broadcastDispatcher; mPowerManager = powerManager; mIdleViewProvider = idleViewProvider; mIdleViewProvider = idleViewProvider; mKeyguardStateController = keyguardStateController; mKeyguardStateController = keyguardStateController; mStatusBarStateController = statusBarStateController; mStatusBarStateController = statusBarStateController; mLooper = looper; mLooper = looper; mChoreographer = choreographer; mChoreographer = choreographer; mState = STATE_KEYGUARD_SHOWING; final boolean enabled = resources.getBoolean(R.bool.config_enableIdleMode); final boolean enabled = resources.getBoolean(R.bool.config_enableIdleMode); if (enabled) { if (enabled) { mState |= STATE_IDLE_MODE_ENABLED; mState |= STATE_IDLE_MODE_ENABLED; Loading Loading @@ -248,19 +293,28 @@ public class IdleHostViewController extends ViewController<IdleHostView> { } } mIdleModeActive = enable; mIdleModeActive = enable; mDelayableExecutor.execute(() -> { mView.setVisibility(mIdleModeActive ? View.VISIBLE : View.GONE); if (mIdleModeActive) { if (mIdleModeActive) { final View idleView = mIdleViewProvider.get(); mCancelIdleModeToDoze = mDelayableExecutor.executeDelayed(mIdleModeToDozeCallback, idleView.setLayoutParams( TIMEOUT_TO_DOZE_MS); new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); // Track when the dream ends to cancel any timeouts. mView.addView(idleView); final IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_DREAMING_STOPPED); mBroadcastDispatcher.registerReceiver(mDreamEndedReceiver, filter); // Start dream. Sandman.startDreamByUserRequest(mContext); } else { } else { mView.removeAllViews(); // Stop tracking dream end. mBroadcastDispatcher.unregisterReceiver(mDreamEndedReceiver); // Remove timeout. if (mCancelIdleModeToDoze != null) { mCancelIdleModeToDoze.run(); mCancelIdleModeToDoze = null; } } } }); } } @Override @Override Loading