Loading packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java +72 −1 Original line number Original line Diff line number Diff line Loading @@ -18,15 +18,19 @@ package com.android.systemui.statusbar; import android.animation.ObjectAnimator; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.animation.ValueAnimator; import android.text.format.DateFormat; import android.util.FloatProperty; import android.util.FloatProperty; import android.view.animation.Interpolator; import android.view.animation.Interpolator; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy; import com.android.systemui.Dumpable; import com.android.systemui.Interpolators; import com.android.systemui.Interpolators; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; import com.android.systemui.statusbar.notification.stack.StackStateAnimator; import com.android.systemui.statusbar.notification.stack.StackStateAnimator; import com.android.systemui.statusbar.policy.CallbackController; import com.android.systemui.statusbar.policy.CallbackController; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; import java.util.ArrayList; import java.util.Comparator; import java.util.Comparator; Loading @@ -38,8 +42,10 @@ import javax.inject.Singleton; */ */ @Singleton @Singleton public class StatusBarStateControllerImpl implements SysuiStatusBarStateController, public class StatusBarStateControllerImpl implements SysuiStatusBarStateController, CallbackController<StateListener> { CallbackController<StateListener>, Dumpable { private static final String TAG = "SbStateController"; private static final String TAG = "SbStateController"; // Must be a power of 2 private static final int HISTORY_SIZE = 32; private static final int MAX_STATE = StatusBarState.FULLSCREEN_USER_SWITCHER; private static final int MAX_STATE = StatusBarState.FULLSCREEN_USER_SWITCHER; private static final int MIN_STATE = StatusBarState.SHADE; private static final int MIN_STATE = StatusBarState.SHADE; Loading @@ -66,6 +72,10 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll private boolean mLeaveOpenOnKeyguardHide; private boolean mLeaveOpenOnKeyguardHide; private boolean mKeyguardRequested; private boolean mKeyguardRequested; // Record the HISTORY_SIZE most recent states private int mHistoryIndex = 0; private HistoricalState[] mHistoricalRecords = new HistoricalState[HISTORY_SIZE]; /** /** * If the device is currently dozing or not. * If the device is currently dozing or not. */ */ Loading Loading @@ -93,6 +103,9 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll @Inject @Inject public StatusBarStateControllerImpl() { public StatusBarStateControllerImpl() { for (int i = 0; i < HISTORY_SIZE; i++) { mHistoricalRecords[i] = new HistoricalState(); } } } @Override @Override Loading @@ -108,6 +121,10 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll if (state == mState) { if (state == mState) { return false; return false; } } // Record the to-be mState and mLastState recordHistoricalState(state, mState); synchronized (mListeners) { synchronized (mListeners) { for (RankedListener rl : new ArrayList<>(mListeners)) { for (RankedListener rl : new ArrayList<>(mListeners)) { rl.mListener.onStatePreChange(mState, state); rl.mListener.onStatePreChange(mState, state); Loading Loading @@ -281,4 +298,58 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll public static String describe(int state) { public static String describe(int state) { return StatusBarState.toShortString(state); return StatusBarState.toShortString(state); } } @Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("StatusBarStateController: "); pw.println(" mState=" + mState + " (" + describe(mState) + ")"); pw.println(" mLastState=" + mLastState + " (" + describe(mLastState) + ")"); pw.println(" mLeaveOpenOnKeyguardHide=" + mLeaveOpenOnKeyguardHide); pw.println(" mKeyguardRequested=" + mKeyguardRequested); pw.println(" mIsDozing=" + mIsDozing); pw.println(" Historical states:"); // Ignore records without a timestamp int size = 0; for (int i = 0; i < HISTORY_SIZE; i++) { if (mHistoricalRecords[i].mTimestamp != 0) size++; } for (int i = mHistoryIndex + HISTORY_SIZE; i >= mHistoryIndex + HISTORY_SIZE - size + 1; i--) { pw.println(" (" + (mHistoryIndex + HISTORY_SIZE - i + 1) + ")" + mHistoricalRecords[i & (HISTORY_SIZE - 1)]); } } private void recordHistoricalState(int currentState, int lastState) { mHistoryIndex = (mHistoryIndex + 1) % HISTORY_SIZE; HistoricalState state = mHistoricalRecords[mHistoryIndex]; state.mState = currentState; state.mLastState = lastState; state.mTimestamp = System.currentTimeMillis(); } /** * For keeping track of our previous state to help with debugging */ private static class HistoricalState { int mState; int mLastState; long mTimestamp; @Override public String toString() { if (mTimestamp != 0) { StringBuilder sb = new StringBuilder(); sb.append("state=").append(mState) .append(" (").append(describe(mState)).append(")"); sb.append("lastState=").append(mLastState).append(" (").append(describe(mLastState)) .append(")"); sb.append("timestamp=") .append(DateFormat.format("MM-dd HH:mm:ss", mTimestamp)); return sb.toString(); } return "Empty " + getClass().getSimpleName(); } } } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/StatusBarStateControllerImpl.java +72 −1 Original line number Original line Diff line number Diff line Loading @@ -18,15 +18,19 @@ package com.android.systemui.statusbar; import android.animation.ObjectAnimator; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.animation.ValueAnimator; import android.text.format.DateFormat; import android.util.FloatProperty; import android.util.FloatProperty; import android.view.animation.Interpolator; import android.view.animation.Interpolator; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy; import com.android.systemui.Dumpable; import com.android.systemui.Interpolators; import com.android.systemui.Interpolators; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; import com.android.systemui.statusbar.notification.stack.StackStateAnimator; import com.android.systemui.statusbar.notification.stack.StackStateAnimator; import com.android.systemui.statusbar.policy.CallbackController; import com.android.systemui.statusbar.policy.CallbackController; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; import java.util.ArrayList; import java.util.Comparator; import java.util.Comparator; Loading @@ -38,8 +42,10 @@ import javax.inject.Singleton; */ */ @Singleton @Singleton public class StatusBarStateControllerImpl implements SysuiStatusBarStateController, public class StatusBarStateControllerImpl implements SysuiStatusBarStateController, CallbackController<StateListener> { CallbackController<StateListener>, Dumpable { private static final String TAG = "SbStateController"; private static final String TAG = "SbStateController"; // Must be a power of 2 private static final int HISTORY_SIZE = 32; private static final int MAX_STATE = StatusBarState.FULLSCREEN_USER_SWITCHER; private static final int MAX_STATE = StatusBarState.FULLSCREEN_USER_SWITCHER; private static final int MIN_STATE = StatusBarState.SHADE; private static final int MIN_STATE = StatusBarState.SHADE; Loading @@ -66,6 +72,10 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll private boolean mLeaveOpenOnKeyguardHide; private boolean mLeaveOpenOnKeyguardHide; private boolean mKeyguardRequested; private boolean mKeyguardRequested; // Record the HISTORY_SIZE most recent states private int mHistoryIndex = 0; private HistoricalState[] mHistoricalRecords = new HistoricalState[HISTORY_SIZE]; /** /** * If the device is currently dozing or not. * If the device is currently dozing or not. */ */ Loading Loading @@ -93,6 +103,9 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll @Inject @Inject public StatusBarStateControllerImpl() { public StatusBarStateControllerImpl() { for (int i = 0; i < HISTORY_SIZE; i++) { mHistoricalRecords[i] = new HistoricalState(); } } } @Override @Override Loading @@ -108,6 +121,10 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll if (state == mState) { if (state == mState) { return false; return false; } } // Record the to-be mState and mLastState recordHistoricalState(state, mState); synchronized (mListeners) { synchronized (mListeners) { for (RankedListener rl : new ArrayList<>(mListeners)) { for (RankedListener rl : new ArrayList<>(mListeners)) { rl.mListener.onStatePreChange(mState, state); rl.mListener.onStatePreChange(mState, state); Loading Loading @@ -281,4 +298,58 @@ public class StatusBarStateControllerImpl implements SysuiStatusBarStateControll public static String describe(int state) { public static String describe(int state) { return StatusBarState.toShortString(state); return StatusBarState.toShortString(state); } } @Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("StatusBarStateController: "); pw.println(" mState=" + mState + " (" + describe(mState) + ")"); pw.println(" mLastState=" + mLastState + " (" + describe(mLastState) + ")"); pw.println(" mLeaveOpenOnKeyguardHide=" + mLeaveOpenOnKeyguardHide); pw.println(" mKeyguardRequested=" + mKeyguardRequested); pw.println(" mIsDozing=" + mIsDozing); pw.println(" Historical states:"); // Ignore records without a timestamp int size = 0; for (int i = 0; i < HISTORY_SIZE; i++) { if (mHistoricalRecords[i].mTimestamp != 0) size++; } for (int i = mHistoryIndex + HISTORY_SIZE; i >= mHistoryIndex + HISTORY_SIZE - size + 1; i--) { pw.println(" (" + (mHistoryIndex + HISTORY_SIZE - i + 1) + ")" + mHistoricalRecords[i & (HISTORY_SIZE - 1)]); } } private void recordHistoricalState(int currentState, int lastState) { mHistoryIndex = (mHistoryIndex + 1) % HISTORY_SIZE; HistoricalState state = mHistoricalRecords[mHistoryIndex]; state.mState = currentState; state.mLastState = lastState; state.mTimestamp = System.currentTimeMillis(); } /** * For keeping track of our previous state to help with debugging */ private static class HistoricalState { int mState; int mLastState; long mTimestamp; @Override public String toString() { if (mTimestamp != 0) { StringBuilder sb = new StringBuilder(); sb.append("state=").append(mState) .append(" (").append(describe(mState)).append(")"); sb.append("lastState=").append(mLastState).append(" (").append(describe(mLastState)) .append(")"); sb.append("timestamp=") .append(DateFormat.format("MM-dd HH:mm:ss", mTimestamp)); return sb.toString(); } return "Empty " + getClass().getSimpleName(); } } } }