/* * Copyright (C) 2014 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.systemui.recents.misc; import android.os.Handler; /** * A dozer is a class that fires a trigger after it falls asleep. You can occasionally poke it to * wake it up, but it will fall asleep if left untouched. */ public class DozeTrigger { Handler mHandler; boolean mIsDozing; boolean mHasTriggered; int mDozeDurationSeconds; Runnable mSleepRunnable; // Sleep-runnable Runnable mDozeRunnable = new Runnable() { @Override public void run() { mSleepRunnable.run(); mIsDozing = false; mHasTriggered = true; } }; public DozeTrigger(int dozeDurationSeconds, Runnable sleepRunnable) { mHandler = new Handler(); mDozeDurationSeconds = dozeDurationSeconds; mSleepRunnable = sleepRunnable; } /** Starts dozing. This also resets the trigger flag. */ public void startDozing() { forcePoke(); mHasTriggered = false; } /** Stops dozing. */ public void stopDozing() { mHandler.removeCallbacks(mDozeRunnable); mIsDozing = false; } /** Poke this dozer to wake it up for a little bit, if it is dozing. */ public void poke() { if (mIsDozing) { forcePoke(); } } /** Poke this dozer to wake it up for a little bit. */ void forcePoke() { mHandler.removeCallbacks(mDozeRunnable); mHandler.postDelayed(mDozeRunnable, mDozeDurationSeconds * 1000); mIsDozing = true; } /** Returns whether we are dozing or not. */ public boolean isDozing() { return mIsDozing; } /** Returns whether the trigger has fired at least once. */ public boolean hasTriggered() { return mHasTriggered; } /** Resets the doze trigger state. */ public void resetTrigger() { mHasTriggered = false; } }