/* * Copyright (C) 2008 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.google.code.appsorganizer.appwidget; import java.util.ArrayList; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.graphics.BitmapFactory; import android.util.Log; import android.widget.RemoteViews; import com.google.code.appsorganizer.R; import com.google.code.appsorganizer.db.DatabaseHelper; import com.google.code.appsorganizer.model.Label; import com.google.code.appsorganizer.shortcut.LabelShortcut; import com.google.code.appsorganizer.shortcut.ShortcutCreator; public class AppsOrganizerAppWidgetProvider extends AppWidgetProvider { // log tag private static final String TAG = "AppsOrganizer.AppWidgetProvider"; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { Log.d(TAG, "onUpdate"); final int N = appWidgetIds.length; DatabaseHelper dbHelper = DatabaseHelper.initOrSingleton(context); for (int i = 0; i < N; i++) { int appWidgetId = appWidgetIds[i]; long labelId = AppWidgetConfigure.loadLabelId(context, appWidgetId); Label label = getLabel(context, dbHelper, labelId); updateAppWidget(context, appWidgetManager, appWidgetId, label); } } private Label getLabel(Context context, DatabaseHelper dbHelper, long labelId) { if (labelId == LabelShortcut.ALL_LABELS_ID) { return new Label(labelId, context.getString(R.string.all_labels), R.drawable.icon); } if (labelId == LabelShortcut.ALL_STARRED_ID) { return new Label(labelId, context.getString(R.string.Starred_apps), R.drawable.favorites); } if (labelId == LabelShortcut.OTHER_APPS) { return new Label(labelId, context.getString(R.string.other_label), 0); } return dbHelper.labelDao.queryById(labelId); } @Override public void onDeleted(Context context, int[] appWidgetIds) { Log.d(TAG, "onDeleted"); final int N = appWidgetIds.length; for (int i = 0; i < N; i++) { AppWidgetConfigure.deleteWidgetPref(context, appWidgetIds[i]); } } @Override public void onEnabled(Context context) { } @Override public void onDisabled(Context context) { } public static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Label label) { Log.d(TAG, "updateAppWidget appWidgetId=" + appWidgetId + " titlePrefix=" + label); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider); if (label != null) { views.setTextViewText(R.id.appwidget_text, label.getLabel()); byte[] imageBytes = label.getImageBytes(); if (imageBytes != null) { views.setImageViewBitmap(R.id.appwidget_image, BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length)); } else { views.setImageViewResource(R.id.appwidget_image, label.getIcon()); } PendingIntent pendingIntent = PendingIntent.getActivity(context, label.getId().intValue(), ShortcutCreator.createOpenLabelIntent(context, label.getId()), 0); views.setOnClickPendingIntent(R.id.widget, pendingIntent); } else { views.setTextViewText(R.id.appwidget_text, context.getText(R.string.Deleted_label)); views.setImageViewResource(R.id.appwidget_image, R.drawable.icon_default); } appWidgetManager.updateAppWidget(appWidgetId, views); } public static void updateAppWidget(Context context, Label label) { ArrayList<Integer> widgets = AppWidgetConfigure.getWidgets(context, label.getId()); if (!widgets.isEmpty()) { AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); for (Integer widgetId : widgets) { updateAppWidget(context, appWidgetManager, widgetId, label); } } } }