/* * 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; import android.view.ViewDebug; /** * A dozer is a class that fires a trigger after it falls asleep. * You can occasionally poke the trigger to wake it up, but it will fall asleep if left untouched. */ public class DozeTrigger { Handler mHandler; @ViewDebug.ExportedProperty(category="recents") boolean mIsDozing; @ViewDebug.ExportedProperty(category="recents") boolean mIsAsleep; @ViewDebug.ExportedProperty(category="recents") int mDozeDurationMilliseconds; Runnable mOnSleepRunnable; // Sleep-runnable Runnable mDozeRunnable = new Runnable() { @Override public void run() { mIsDozing = false; mIsAsleep = true; mOnSleepRunnable.run(); } }; public DozeTrigger(int dozeDurationMilliseconds, Runnable onSleepRunnable) { mHandler = new Handler(); mDozeDurationMilliseconds = dozeDurationMilliseconds; mOnSleepRunnable = onSleepRunnable; } /** * Starts dozing and queues the onSleepRunnable to be called. This also resets the trigger flag. */ public void startDozing() { forcePoke(); mIsAsleep = false; } /** * Stops dozing and prevents the onSleepRunnable from being called. */ public void stopDozing() { mHandler.removeCallbacks(mDozeRunnable); mIsDozing = false; mIsAsleep = false; } /** * Updates the duration that we have to wait until dozing triggers. */ public void setDozeDuration(int duration) { mDozeDurationMilliseconds = duration; } /** * Poke this dozer to wake it up if it is dozing, delaying the onSleepRunnable from being * called for a for the doze duration. */ public void poke() { if (mIsDozing) { forcePoke(); } } /** * Poke this dozer to wake it up even if it is not currently dozing. */ void forcePoke() { mHandler.removeCallbacks(mDozeRunnable); mHandler.postDelayed(mDozeRunnable, mDozeDurationMilliseconds); 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 isAsleep() { return mIsAsleep; } }