| /* | |
| * 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<String, Integer>[] 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<String, Integer> 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")); | |
| } | |
| } | |
| } |