/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.documentsui.base; import static com.android.documentsui.base.SharedMinimal.VERBOSE; import android.util.Log; import android.util.Pair; import com.android.documentsui.Injector; import com.android.documentsui.R; /** * Debug menu tools requested by QA Fred. */ public class DebugHelper { private static final String TAG = "DebugHelper"; private static final int[][] sCode = new int[][] { {19, 19, 20, 20, 21, 22, 21, 22, 30, 29}, {51, 51, 47, 47, 29, 32, 29, 32, 30, 29} }; private static final int[][] sColors = new int[][] { {0xFFDB3236, 0xFFB71C1C}, {0xFF3cba54, 0xFF1B5E20}, {0xFFf4c20d, 0xFFF9A825}, {0xFF4885ed, 0xFF0D47A1} }; @SuppressWarnings("unchecked") private static final Pair[] sMessages = new Pair[]{ new Pair<>("Woof Woof", R.drawable.debug_msg_1), new Pair<>("ワンワン", R.drawable.debug_msg_2) }; private final Injector mInjector; private boolean mDebugEnabled; private long mLastTime; private int mPosition; private int mCodeIndex; private int mColorIndex; private int mMessageIndex; public DebugHelper(Injector injector) { mInjector = injector; } public int[] getNextColors() { assert (mInjector.features.isDebugSupportEnabled()); if (mColorIndex == sColors.length) { mColorIndex = 0; } return sColors[mColorIndex++]; } public Pair getNextMessage() { assert (mInjector.features.isDebugSupportEnabled()); if (mMessageIndex == sMessages.length) { mMessageIndex = 0; } return sMessages[mMessageIndex++]; } public void debugCheck(long time, int keyCode) { if (time == mLastTime) { return; } mLastTime = time; if (mPosition == 0) { for (int i = 0; i < sCode.length; i++) { if (keyCode == sCode[i][0]) { mCodeIndex = i; break; } } } if (keyCode == sCode[mCodeIndex][mPosition]) { mPosition++; } else if (mPosition > 2 || (mPosition == 2 && keyCode != sCode[mCodeIndex][0])) { mPosition = 0; } if (mPosition == sCode[mCodeIndex].length) { mPosition = 0; toggleDebugMode(); } } public void toggleDebugMode() { mDebugEnabled = !mDebugEnabled; // Actions is content-scope, so it can technically be null, though // not likely. if (mInjector.actions != null) { mInjector.actions.setDebugMode(mDebugEnabled); } if (VERBOSE) { Log.v(TAG, "Debug mode " + (mDebugEnabled ? "on" : "off")); } } }