Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e727454d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Implement Dumpable on StatusBarStateController"

parents 01a82fdd 2ce144e4
Loading
Loading
Loading
Loading
+72 −1
Original line number Original line Diff line number Diff line
@@ -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;


@@ -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;
@@ -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.
     */
     */
@@ -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
@@ -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);
@@ -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();
        }
    }
}
}