Home | History | Annotate | Download | only in alarmclock
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.alarmclock;
     18 
     19 import android.app.PendingIntent;
     20 import android.appwidget.AppWidgetManager;
     21 import android.appwidget.AppWidgetProvider;
     22 import android.content.ComponentName;
     23 import android.content.Context;
     24 import android.content.Intent;
     25 import android.widget.RemoteViews;
     26 
     27 import com.android.deskclock.DeskClock;
     28 import com.android.deskclock.R;
     29 import com.android.deskclock.Utils;
     30 import com.android.deskclock.data.DataModel;
     31 
     32 /**
     33  * Simple widget to show an analog clock.
     34  */
     35 public class AnalogAppWidgetProvider extends AppWidgetProvider {
     36 
     37     @Override
     38     public void onReceive(Context context, Intent intent) {
     39         super.onReceive(context, intent);
     40 
     41         final AppWidgetManager wm = AppWidgetManager.getInstance(context);
     42         if (wm == null) {
     43             return;
     44         }
     45 
     46         // Send events for newly created/deleted widgets.
     47         final ComponentName provider = new ComponentName(context, getClass());
     48         final int widgetCount = wm.getAppWidgetIds(provider).length;
     49 
     50         final DataModel dm = DataModel.getDataModel();
     51         dm.updateWidgetCount(getClass(), widgetCount, R.string.category_analog_widget);
     52     }
     53 
     54     /**
     55      * Called when widgets must provide remote views.
     56      */
     57     @Override
     58     public void onUpdate(Context context, AppWidgetManager wm, int[] widgetIds) {
     59         super.onUpdate(context, wm, widgetIds);
     60 
     61         for (int widgetId : widgetIds) {
     62             final String packageName = context.getPackageName();
     63             final RemoteViews widget = new RemoteViews(packageName, R.layout.analog_appwidget);
     64 
     65             // Tapping on the widget opens the app (if not on the lock screen).
     66             if (Utils.isWidgetClickable(wm, widgetId)) {
     67                 final Intent openApp = new Intent(context, DeskClock.class);
     68                 final PendingIntent pi = PendingIntent.getActivity(context, 0, openApp, 0);
     69                 widget.setOnClickPendingIntent(R.id.analog_appwidget, pi);
     70             }
     71 
     72             wm.updateAppWidget(widgetId, widget);
     73         }
     74     }
     75 }