Search in sources :

Example 61 with AlarmManager

use of android.app.AlarmManager in project platform_frameworks_base by android.

the class AlarmImpl method setAlarmAndWait.

@Override
public int setAlarmAndWait(long timeoutMills) throws RemoteException {
    // calculate when device should be waken up
    long atTime = SystemClock.elapsedRealtime() + timeoutMills;
    AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
    Intent wakupIntent = new Intent(WakeUpCall.WAKEUP_CALL);
    PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, wakupIntent, 0);
    // set alarm, which will be delivered in form of the wakeupIntent
    am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, atTime, pi);
    Log.d(LOG_TAG, String.format("Alarm set: %d, giving up wake lock", atTime));
    Object lock = WakeUpController.getController().getWakeSync();
    // release wakelock and wait for the lock to be poked from the broadcast receiver
    WakeUpController.getController().getWakeLock().release();
    // does not really matter if device enters suspend before we start waiting on lock
    synchronized (lock) {
        try {
            lock.wait();
        } catch (InterruptedException e) {
        }
    }
    Log.d(LOG_TAG, String.format("Alarm triggered, done waiting"));
    return 0;
}
Also used : AlarmManager(android.app.AlarmManager) Intent(android.content.Intent) PendingIntent(android.app.PendingIntent) PendingIntent(android.app.PendingIntent)

Example 62 with AlarmManager

use of android.app.AlarmManager in project platform_frameworks_base by android.

the class WakeLoopService method onStartCommand.

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // get wakeup interval from intent
    long wakeupInterval = intent.getLongExtra(WAKEUP_INTERNAL, 0);
    long maxLoop = intent.getLongExtra(MAX_LOOP, 0);
    if (wakeupInterval == 0) {
        // stop and error
        Log.e(LOG_TAG, "No wakeup interval specified, not starting the service");
        stopSelf();
        return START_NOT_STICKY;
    }
    FileUtil.get().writeDateToFile(new File(Environment.getExternalStorageDirectory(), "wakeup-loop-start.txt"));
    Log.d(LOG_TAG, String.format("WakeLoop: STARTED interval = %d, total loop = %d", wakeupInterval, maxLoop));
    // calculate when device should be waken up
    long atTime = SystemClock.elapsedRealtime() + wakeupInterval;
    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    Intent wakupIntent = new Intent(WakeUpCall.WAKEUP_CALL).putExtra(WAKEUP_INTERNAL, wakeupInterval).putExtra(MAX_LOOP, maxLoop).putExtra(THIS_LOOP, 0L).putExtra(STOP_CALLBACK, new Messenger(mHandler));
    PendingIntent pi = PendingIntent.getBroadcast(this, 0, wakupIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    // set alarm, which will be delivered in form of the wakeupIntent
    am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, atTime, pi);
    return START_NOT_STICKY;
}
Also used : AlarmManager(android.app.AlarmManager) Intent(android.content.Intent) PendingIntent(android.app.PendingIntent) Messenger(android.os.Messenger) PendingIntent(android.app.PendingIntent) File(java.io.File)

Example 63 with AlarmManager

use of android.app.AlarmManager in project platform_frameworks_base by android.

the class ScheduleConditionProvider method updateAlarm.

private void updateAlarm(long now, long time) {
    final AlarmManager alarms = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
    final PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, REQUEST_CODE_EVALUATE, new Intent(ACTION_EVALUATE).addFlags(Intent.FLAG_RECEIVER_FOREGROUND).putExtra(EXTRA_TIME, time), PendingIntent.FLAG_UPDATE_CURRENT);
    alarms.cancel(pendingIntent);
    if (time > now) {
        if (DEBUG)
            Slog.d(TAG, String.format("Scheduling evaluate for %s, in %s, now=%s", ts(time), formatDuration(time - now), ts(now)));
        alarms.setExact(AlarmManager.RTC_WAKEUP, time, pendingIntent);
    } else {
        if (DEBUG)
            Slog.d(TAG, "Not scheduling evaluate");
    }
}
Also used : AlarmManager(android.app.AlarmManager) Intent(android.content.Intent) PendingIntent(android.app.PendingIntent) PendingIntent(android.app.PendingIntent)

Example 64 with AlarmManager

use of android.app.AlarmManager in project platform_frameworks_base by android.

the class CountdownConditionProvider method onSubscribe.

@Override
public void onSubscribe(Uri conditionId) {
    if (DEBUG)
        Slog.d(TAG, "onSubscribe " + conditionId);
    mTime = ZenModeConfig.tryParseCountdownConditionId(conditionId);
    final AlarmManager alarms = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
    final Intent intent = new Intent(ACTION).putExtra(EXTRA_CONDITION_ID, conditionId).setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
    final PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    alarms.cancel(pendingIntent);
    if (mTime > 0) {
        final long now = System.currentTimeMillis();
        final CharSequence span = DateUtils.getRelativeTimeSpanString(mTime, now, DateUtils.MINUTE_IN_MILLIS);
        if (mTime <= now) {
            // in the past, already false
            notifyCondition(newCondition(mTime, Condition.STATE_FALSE));
        } else {
            // in the future, set an alarm
            alarms.setExact(AlarmManager.RTC_WAKEUP, mTime, pendingIntent);
        }
        if (DEBUG)
            Slog.d(TAG, String.format("%s %s for %s, %s in the future (%s), now=%s", (mTime <= now ? "Not scheduling" : "Scheduling"), ACTION, ts(mTime), mTime - now, span, ts(now)));
    }
}
Also used : AlarmManager(android.app.AlarmManager) Intent(android.content.Intent) PendingIntent(android.app.PendingIntent) PendingIntent(android.app.PendingIntent)

Example 65 with AlarmManager

use of android.app.AlarmManager in project platform_frameworks_base by android.

the class EventConditionProvider method rescheduleAlarm.

private void rescheduleAlarm(long now, long time) {
    mNextAlarmTime = time;
    final AlarmManager alarms = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
    final PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, REQUEST_CODE_EVALUATE, new Intent(ACTION_EVALUATE).addFlags(Intent.FLAG_RECEIVER_FOREGROUND).putExtra(EXTRA_TIME, time), PendingIntent.FLAG_UPDATE_CURRENT);
    alarms.cancel(pendingIntent);
    if (time == 0 || time < now) {
        if (DEBUG)
            Slog.d(TAG, "Not scheduling evaluate: " + (time == 0 ? "no time specified" : "specified time in the past"));
        return;
    }
    if (DEBUG)
        Slog.d(TAG, String.format("Scheduling evaluate for %s, in %s, now=%s", ts(time), formatDuration(time - now), ts(now)));
    alarms.setExact(AlarmManager.RTC_WAKEUP, time, pendingIntent);
}
Also used : AlarmManager(android.app.AlarmManager) Intent(android.content.Intent) PendingIntent(android.app.PendingIntent) PendingIntent(android.app.PendingIntent)

Aggregations

AlarmManager (android.app.AlarmManager)471 PendingIntent (android.app.PendingIntent)349 Intent (android.content.Intent)323 Calendar (java.util.Calendar)75 SuppressLint (android.annotation.SuppressLint)24 Date (java.util.Date)24 Context (android.content.Context)22 SharedPreferences (android.content.SharedPreferences)20 SimpleDateFormat (java.text.SimpleDateFormat)18 Test (org.junit.Test)17 VisibleForTesting (com.android.internal.annotations.VisibleForTesting)13 Config (org.robolectric.annotation.Config)13 Handler (android.os.Handler)11 HashMap (java.util.HashMap)11 PowerManager (android.os.PowerManager)10 File (java.io.File)10 Map (java.util.Map)10 Activity (android.app.Activity)9 ShadowAlarmManager (org.robolectric.shadows.ShadowAlarmManager)9 TargetApi (android.annotation.TargetApi)8