package com.infonuascape.osrshelper.widget;
import java.util.Arrays;
import com.infonuascape.osrshelper.R;
import com.infonuascape.osrshelper.UsernameActivity;
import com.infonuascape.osrshelper.db.OSRSHelperDataSource;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import android.widget.RemoteViews;
public class OSRSAppWidgetProvider extends AppWidgetProvider {
public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;
Log.i("OSRSAppWidgetProvider", "Updating widgets " + Arrays.asList(appWidgetIds));
// Perform this loop procedure for each App Widget that belongs to this
// provider
for (int i = 0; i < N; i++) {
int appWidgetId = appWidgetIds[i];
// Create an Intent to launch ExampleActivity
Intent intentSync = new Intent(context, OSRSAppWidgetProvider.class);
intentSync.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
PendingIntent pendingSync = PendingIntent.getBroadcast(context, 0, intentSync, PendingIntent.FLAG_UPDATE_CURRENT); //You need to specify a proper flag for the intent. Or else the intent will become deleted.
Intent intentService = new Intent(context, OSRSWidgetService.class);
// Add the app widget ID to the intent extras.
intentService.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
intentService.setData(Uri.parse(intentService.toUri(Intent.URI_INTENT_SCHEME)));
// Get the layout for the App Widget and attach an on-click listener
// to the button
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
views.setOnClickPendingIntent(R.id.update_btn, pendingSync);
//Username
OSRSHelperDataSource osrsHelperDataSource = new OSRSHelperDataSource(context);
osrsHelperDataSource.open();
final String username = osrsHelperDataSource.getUsernameForWidget(appWidgetId);
osrsHelperDataSource.close();
views.setTextViewText(R.id.username, username);
//Config
Intent configIntent = new Intent(context, UsernameActivity.class);
configIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
configIntent.putExtra("type", 2);
configIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent configPendingIntent = PendingIntent.getActivity(context, appWidgetId, configIntent, 0);
views.setOnClickPendingIntent(R.id.username_btn, configPendingIntent);
configIntent.setAction(ACTION_WIDGET_CONFIGURE + Integer.toString(appWidgetId));
views.setRemoteAdapter(R.id.grid_view, intentService);
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.grid_view);
// Tell the AppWidgetManager to perform an update on the current app
// widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName thisAppWidget = new ComponentName(context.getPackageName(), OSRSAppWidgetProvider.class.getName());
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget);
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.grid_view);
onUpdate(context, appWidgetManager, appWidgetIds);
}
}