/*
 * Copyright (C) 2007 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 android.widget;

import android.os.Handler;

Provides callbacks indicating the steps in two digit pressing within a timeout. Package private: only relevant in helping TimeSpinnerHelper.
/** * Provides callbacks indicating the steps in two digit pressing within a * timeout. * * Package private: only relevant in helping {@link TimeSpinnerHelper}. */
class DoubleDigitManager { private final long timeoutInMillis; private final CallBack mCallBack; private Integer intermediateDigit;
Params:
  • timeoutInMillis – How long after the first digit is pressed does the user have to press the second digit?
  • callBack – The callback to indicate what's going on with the user.
/** * @param timeoutInMillis How long after the first digit is pressed does * the user have to press the second digit? * @param callBack The callback to indicate what's going on with the user. */
public DoubleDigitManager(long timeoutInMillis, CallBack callBack) { this.timeoutInMillis = timeoutInMillis; mCallBack = callBack; }
Report to this manager that a digit was pressed.
Params:
  • digit –
/** * Report to this manager that a digit was pressed. * @param digit */
public void reportDigit(int digit) { if (intermediateDigit == null) { intermediateDigit = digit; new Handler().postDelayed(new Runnable() { public void run() { if (intermediateDigit != null) { mCallBack.singleDigitFinal(intermediateDigit); intermediateDigit = null; } } }, timeoutInMillis); if (!mCallBack.singleDigitIntermediate(digit)) { // this wasn't a good candidate for the intermediate digit, // make it the final digit (since there is no opportunity to // reject the final digit). intermediateDigit = null; mCallBack.singleDigitFinal(digit); } } else if (mCallBack.twoDigitsFinal(intermediateDigit, digit)) { intermediateDigit = null; } }
The callback to indicate what is going on with the digits pressed.
/** * The callback to indicate what is going on with the digits pressed. */
static interface CallBack {
A digit was pressed, and there are no intermediate digits.
Params:
  • digit – The digit pressed.
Returns:Whether the digit was accepted; how the user of this manager tells us that the intermediate digit is acceptable as an intermediate digit.
/** * A digit was pressed, and there are no intermediate digits. * @param digit The digit pressed. * @return Whether the digit was accepted; how the user of this manager * tells us that the intermediate digit is acceptable as an * intermediate digit. */
boolean singleDigitIntermediate(int digit);
A single digit was pressed, and it is 'the final answer'. - a single digit pressed, and the timeout expires. - a single digit pressed, and singleDigitIntermediate returned false.
Params:
  • digit – The digit.
/** * A single digit was pressed, and it is 'the final answer'. * - a single digit pressed, and the timeout expires. * - a single digit pressed, and {@link #singleDigitIntermediate} * returned false. * @param digit The digit. */
void singleDigitFinal(int digit);
The user pressed digit1, then digit2 within the timeout.
Params:
  • digit1 –
  • digit2 –
/** * The user pressed digit1, then digit2 within the timeout. * @param digit1 * @param digit2 */
boolean twoDigitsFinal(int digit1, int digit2); } }