alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Android example source code file (DoubleDigitManager.java)

This example Android source code file (DoubleDigitManager.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Android by Example" TM.

Java - Android tags/keywords

android, callback, doubledigitmanager, integer, os, runnable

The DoubleDigitManager.java Android example source code

/*
 * 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 {@link TimeSpinnerHelper}.
 */
class DoubleDigitManager {

    private final long timeoutInMillis;
    private final CallBack mCallBack;

    private Integer intermediateDigit;

    /**
     * @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.
     * @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.
     */
    static interface CallBack {

        /**
         * 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 {@link #singleDigitIntermediate}
         *   returned false.
         * @param digit The digit.
         */
        void singleDigitFinal(int digit);

        /**
         * The user pressed digit1, then digit2 within the timeout.
         * @param digit1
         * @param digit2
         */
        boolean twoDigitsFinal(int digit1, int digit2);
    }

}

Other Android examples (source code examples)

Here is a short list of links related to this Android DoubleDigitManager.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.