Java tutorial
/* * Copyright (C) 2016 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.talkback; import android.os.SystemClock; import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; /** * Maintains a history of when EditText actions occurred. */ public class EditTextActionHistory { /** * Lazily-initialized shared instance. */ private static EditTextActionHistory sInstance; /** * @return A shared instance of the action history. */ public static EditTextActionHistory getInstance() { if (sInstance == null) { sInstance = new EditTextActionHistory(); } return sInstance; } /** * Map of action identifiers to start times. */ private long mCutStartTime = -1; private long mPasteStartTime = -1; private long mSelectAllStartTime = -1; /** * Map of action identifiers to finish times. */ private long mCutFinishTime = -1; private long mPasteFinishTime = -1; private long mSelectAllFinishTime = -1; private EditTextActionHistory() { // This class is not publicly instantiable. } /** * Stores the start time for a cut action. This should be called immediately before * {@link AccessibilityNodeInfoCompat#performAction}. */ public void beforeCut() { mCutStartTime = SystemClock.uptimeMillis(); } /** * Stores the finish time for a cut action. This should be called immediately after * {@link AccessibilityNodeInfoCompat#performAction}. */ public void afterCut() { mCutFinishTime = SystemClock.uptimeMillis(); } /** * Stores the start time for a paste action. This should be called immediately before * {@link AccessibilityNodeInfoCompat#performAction}. */ public void beforePaste() { mPasteStartTime = SystemClock.uptimeMillis(); } /** * Stores the finish time for a paste action. This should be called immediately after * {@link AccessibilityNodeInfoCompat#performAction}. */ public void afterPaste() { mPasteFinishTime = SystemClock.uptimeMillis(); } public void beforeSelectAll() { mSelectAllStartTime = SystemClock.uptimeMillis(); } public void afterSelectAll() { mSelectAllFinishTime = SystemClock.uptimeMillis(); } /** * Returns whether the specified event time falls between the start and finish times of the last * cut action. * * @param eventTime The event time to check. * @return {@code true} if the event time falls between the start and finish * times of the specified action. */ public boolean hasCutActionAtTime(long eventTime) { return !((mCutStartTime == -1) || (mCutStartTime > eventTime)) && !((mCutFinishTime >= mCutStartTime) && (mCutFinishTime < eventTime)); } /** * Returns whether the specified event time falls between the start and finish times of the last * paste action. * * @param eventTime The event time to check. * @return {@code true} if the event time falls between the start and finish * times of the specified action. */ public boolean hasPasteActionAtTime(long eventTime) { return !((mPasteStartTime == -1) || (mPasteStartTime > eventTime)) && !((mPasteFinishTime >= mPasteStartTime) && (mPasteFinishTime < eventTime)); } public boolean hasSelectAllActionAtTime(long eventTime) { return !((mSelectAllFinishTime == -1) || (mSelectAllStartTime > eventTime)) && !((mSelectAllFinishTime >= mSelectAllStartTime) && (mSelectAllFinishTime < eventTime)); } }