Alarm.java revision d3ef3065ab0941567c45e9aec98783138b623c68
1d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka/* 2d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka * Copyright (C) 2010 The Android Open Source Project 3d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka * 4d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka * Licensed under the Apache License, Version 2.0 (the "License"); 5d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka * you may not use this file except in compliance with the License. 6d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka * You may obtain a copy of the License at 7d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka * 8d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka * http://www.apache.org/licenses/LICENSE-2.0 9d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka * 10d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka * Unless required by applicable law or agreed to in writing, software 11d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka * distributed under the License is distributed on an "AS IS" BASIS, 12d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka * See the License for the specific language governing permissions and 14d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka * limitations under the License. 15d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka */ 16d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka 17d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurkapackage com.android.launcher2; 18d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka 19d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurkaimport android.os.Handler; 20d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka 21d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurkapublic class Alarm implements Runnable{ 22d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka // if we reach this time and the alarm hasn't been cancelled, call the listener 23d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka private long mAlarmTriggerTime; 24d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka 25d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka // if we've scheduled a call to run() (ie called mHandler.postDelayed), this variable is true. 26d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka // We use this to avoid having multiple pending callbacks 27d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka private boolean mWaitingForCallback; 28d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka 29d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka private Handler mHandler; 30d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka private OnAlarmListener mAlarmListener; 31d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka 32d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka public Alarm() { 33d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka mHandler = new Handler(); 34d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka } 35d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka 36d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka public void setOnAlarmListener(OnAlarmListener alarmListener) { 37d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka mAlarmListener = alarmListener; 38d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka } 39d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka 40d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka // Sets the alarm to go off in a certain number of milliseconds. If the alarm is already set, 41d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka // it's overwritten and only the new alarm setting is used 42d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka public void setAlarm(long millisecondsInFuture) { 43d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka long currentTime = System.currentTimeMillis(); 44d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka mAlarmTriggerTime = currentTime + millisecondsInFuture; 45d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka if (!mWaitingForCallback) { 46d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka mHandler.postDelayed(this, mAlarmTriggerTime - currentTime); 47d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka mWaitingForCallback = true; 48d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka } 49d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka } 50d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka 51d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka public void cancelAlarm() { 52d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka mAlarmTriggerTime = 0; 53d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka } 54d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka 55d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka // this is called when our timer runs out 56d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka public void run() { 57d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka mWaitingForCallback = false; 58d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka if (mAlarmTriggerTime != 0) { 59d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka long currentTime = System.currentTimeMillis(); 60d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka if (mAlarmTriggerTime > currentTime) { 61d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka // We still need to wait some time to trigger spring loaded mode-- 62d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka // post a new callback 63d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka mHandler.postDelayed(this, Math.max(0, mAlarmTriggerTime - currentTime)); 64d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka mWaitingForCallback = true; 65d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka } else { 66d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka if (mAlarmListener != null) { 67d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka mAlarmListener.onAlarm(this); 68d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka } 69d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka } 70d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka } 71d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka } 72d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka} 73d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka 74d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurkainterface OnAlarmListener { 75d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka public void onAlarm(Alarm alarm); 76d3ef3065ab0941567c45e9aec98783138b623c68Michael Jurka} 77