Android Open Source - DashClockWidget Periodic Extension Refresh Receiver






From Project

Back to project page DashClockWidget.

License

The source code is released under:

Apache License

If you think the Android project DashClockWidget listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2013 Google Inc./*  ww  w .j a  v a  2s.c  o  m*/
 *
 * 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.google.android.apps.dashclock;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.SystemClock;
import android.support.v4.content.WakefulBroadcastReceiver;

import com.google.android.apps.dashclock.api.DashClockExtension;

import static com.google.android.apps.dashclock.LogUtils.LOGD;
import static com.google.android.apps.dashclock.Utils.MINUTES_MILLIS;

/**
 * A broadcast receiver in charge of scheduling DashClock extension refreshes. This was
 * originally handled by updatePeriodMillis but custom refresh behavior and a separation of
 * extension refreshes from widget refreshes was desirable so was moved here.
 */
public class PeriodicExtensionRefreshReceiver extends WakefulBroadcastReceiver {
    private static final String TAG = LogUtils.makeLogTag(PeriodicExtensionRefreshReceiver.class);

    private static final String ACTION_PERIODIC_ALARM
            = "com.google.android.apps.dashclock.action.PERIODIC_ALARM";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent == null || !ACTION_PERIODIC_ALARM.equals(intent.getAction())) {
            return;
        }

        // Periodic alarm has triggered. Update all extensions.
        startWakefulService(context,
                getUpdateAllExtensionsIntent(context, DashClockExtension.UPDATE_REASON_PERIODIC));
    }

    private static Intent getUpdateAllExtensionsIntent(Context context, int reason) {
        LOGD(TAG, "getUpdateAllExtensionsIntent, reason=" + reason);
        return new Intent(context, DashClockService.class)
                .setAction(DashClockService.ACTION_UPDATE_EXTENSIONS)
                .putExtra(DashClockService.EXTRA_UPDATE_REASON, reason);
    }

    /**
     * Sets the refresh schedule if one isn't set already.
     */
    public static void updateExtensionsAndEnsurePeriodicRefresh(final Context context) {
        LOGD(TAG, "updateExtensionsAndEnsurePeriodicRefresh");
        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

        // Update all extensions now.
        context.startService(getUpdateAllExtensionsIntent(context,
                DashClockExtension.UPDATE_REASON_MANUAL));

        // Schedule an alarm for every 30 minutes; it will not wake up the device;
        // it will be handled only once the device is awake. The first time that this
        // alarm can go off is in 15 minutes, and the latest time it will go off is
        // 45 minutes from now.
        PendingIntent pi = PendingIntent.getBroadcast(context, 0,
                new Intent(context, PeriodicExtensionRefreshReceiver.class)
                        .setAction(ACTION_PERIODIC_ALARM),
                PendingIntent.FLAG_UPDATE_CURRENT);
        am.cancel(pi);
        am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                SystemClock.elapsedRealtime() + 15 * MINUTES_MILLIS,
                AlarmManager.INTERVAL_HALF_HOUR,
                pi);
    }
}




Java Source Code List

com.example.dashclock.exampleextension.ExampleExtension.java
com.example.dashclock.exampleextension.ExampleSettingsActivity.java
com.google.android.apps.dashclock.BackupAgent.java
com.google.android.apps.dashclock.DashClockService.java
com.google.android.apps.dashclock.DaydreamService.java
com.google.android.apps.dashclock.ExtensionHost.java
com.google.android.apps.dashclock.ExtensionManager.java
com.google.android.apps.dashclock.ExtensionPackageChangeReceiver.java
com.google.android.apps.dashclock.HelpUtils.java
com.google.android.apps.dashclock.LogAttachmentProvider.java
com.google.android.apps.dashclock.LogUtils.java
com.google.android.apps.dashclock.PeriodicExtensionRefreshReceiver.java
com.google.android.apps.dashclock.Utils.java
com.google.android.apps.dashclock.WidgetClickProxyActivity.java
com.google.android.apps.dashclock.WidgetProvider.java
com.google.android.apps.dashclock.api.DashClockExtension.java
com.google.android.apps.dashclock.api.ExtensionData.java
com.google.android.apps.dashclock.api.VisibleExtension.java
com.google.android.apps.dashclock.api.package-info.java
com.google.android.apps.dashclock.calendar.CalendarExtension.java
com.google.android.apps.dashclock.calendar.CalendarSelectionPreference.java
com.google.android.apps.dashclock.calendar.CalendarSettingsActivity.java
com.google.android.apps.dashclock.configuration.AppChooserPreference.java
com.google.android.apps.dashclock.configuration.AppearanceConfig.java
com.google.android.apps.dashclock.configuration.BaseSettingsActivity.java
com.google.android.apps.dashclock.configuration.ColorPreference.java
com.google.android.apps.dashclock.configuration.ConfigurationActivity.java
com.google.android.apps.dashclock.configuration.ConfigureAdvancedFragment.java
com.google.android.apps.dashclock.configuration.ConfigureAppearanceFragment.java
com.google.android.apps.dashclock.configuration.ConfigureDaydreamFragment.java
com.google.android.apps.dashclock.configuration.ConfigureExtensionsFragment.java
com.google.android.apps.dashclock.configuration.DaydreamProxyActivity.java
com.google.android.apps.dashclock.gmail.GmailContract.java
com.google.android.apps.dashclock.gmail.GmailExtension.java
com.google.android.apps.dashclock.gmail.GmailSettingsActivity.java
com.google.android.apps.dashclock.nextalarm.NextAlarmExtension.java
com.google.android.apps.dashclock.nextalarm.NextAlarmSettingsActivity.java
com.google.android.apps.dashclock.phone.MissedCallsExtension.java
com.google.android.apps.dashclock.phone.SmsExtension.java
com.google.android.apps.dashclock.phone.TelephonyProviderConstants.java
com.google.android.apps.dashclock.render.DashClockRenderer.java
com.google.android.apps.dashclock.render.SimpleRenderer.java
com.google.android.apps.dashclock.render.SimpleViewBuilder.java
com.google.android.apps.dashclock.render.ViewBuilder.java
com.google.android.apps.dashclock.render.WidgetRemoteViewsFactoryService.java
com.google.android.apps.dashclock.render.WidgetRenderer.java
com.google.android.apps.dashclock.render.WidgetViewBuilder.java
com.google.android.apps.dashclock.ui.DragGripView.java
com.google.android.apps.dashclock.ui.EdgeEffectUtil.java
com.google.android.apps.dashclock.ui.PagerPositionStrip.java
com.google.android.apps.dashclock.ui.SimplePagedTabsHelper.java
com.google.android.apps.dashclock.ui.SwipeDismissListViewTouchListener.java
com.google.android.apps.dashclock.ui.UndoBarController.java
com.google.android.apps.dashclock.weather.CantGetWeatherException.java
com.google.android.apps.dashclock.weather.WeatherData.java
com.google.android.apps.dashclock.weather.WeatherExtension.java
com.google.android.apps.dashclock.weather.WeatherLocationPreference.java
com.google.android.apps.dashclock.weather.WeatherRetryReceiver.java
com.google.android.apps.dashclock.weather.WeatherSettingsActivity.java
com.google.android.apps.dashclock.weather.YahooWeatherApiClient.java
com.google.android.apps.dashclock.weather.YahooWeatherApiConfig.java