package de.fun2code.android.piratebox.widget;
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.widget.RemoteViews;
import android.widget.Toast;
import de.fun2code.android.piratebox.Constants;
import de.fun2code.android.piratebox.R;
public class InfoWidget extends AppWidgetProvider {
private static String TAG = "PirateBoxInfoWidget";
private final String WIDGET_INTENT_CLICKED = "de.fun2code.android.piratebox.infowidget.intent.clicked";
private static boolean serverRunning = false;
private static int uploads = 0;
private static int shouts = 0;
private static int connections = 0;
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
int[] widgetIds = manager.getAppWidgetIds(new ComponentName(context,
InfoWidget.class));
//Toast.makeText(context, intent.getAction(), Toast.LENGTH_SHORT).show();
if(intent.getAction()
.equals(Constants.BROADCAST_INTENT_SERVER)) {
serverRunning = intent.getBooleanExtra(Constants.INTENT_SERVER_EXTRA_STATE, false);
if(!serverRunning) {
uploads = shouts = connections = 0;
showWidget(context, manager, widgetIds);
}
else {
// Send broadcast to request info
context.sendBroadcast(new Intent(Constants.BROADCAST_INTENT_STATUS_REQUEST));
}
}
else if(intent.getAction()
.equals(Constants.BROADCAST_INTENT_STATUS_RESULT)) {
serverRunning = intent.getBooleanExtra(Constants.INTENT_SERVER_EXTRA_STATE, false);
uploads = intent.getIntExtra(Constants.INTENT_UPLOAD_EXTRA_NUMBER, 0);
shouts = intent.getIntExtra(Constants.INTENT_SHOUT_EXTRA_NUMBER, 0);
connections = intent.getIntExtra(Constants.INTENT_CONNECTION_EXTRA_NUMBER, 0);
showWidget(context, manager, widgetIds);
}
else if(intent.getAction()
.equals(Constants.BROADCAST_INTENT_UPLOAD)) {
uploads++;
showWidget(context, manager, widgetIds);
}
else if(intent.getAction()
.equals(Constants.BROADCAST_INTENT_SHOUT)) {
shouts++;
showWidget(context, manager, widgetIds);
}
else if(intent.getAction()
.equals(Constants.BROADCAST_INTENT_CONNECTION)) {
connections++;
showWidget(context, manager, widgetIds);
}
else if(intent.getAction()
.equals(WIDGET_INTENT_CLICKED) ||
intent.getAction()
.equals(AppWidgetManager.ACTION_APPWIDGET_UPDATE)) {
// Send broadcast to request info
context.sendBroadcast(new Intent(Constants.BROADCAST_INTENT_STATUS_REQUEST));
}
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] ints) {
context.sendBroadcast(new Intent(Constants.BROADCAST_INTENT_STATUS_REQUEST));
showWidget(context, appWidgetManager, ints);
}
private void showWidget(Context context, AppWidgetManager manager,
int[] widgetIds) {
RemoteViews views = createRemoteViews(context);
manager.updateAppWidget(widgetIds, views);
}
private RemoteViews createRemoteViews(Context context) {
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.widget_info_layout);
CharSequence noValue = context.getText(R.string.pref_dev_info_default_summary);
views.setTextViewText(R.id.textUploads, serverRunning ? String.valueOf(uploads) : noValue);
views.setTextViewText(R.id.textShouts, serverRunning ? String.valueOf(shouts) : noValue);
views.setTextViewText(R.id.textConnections, serverRunning ? String.valueOf(connections) : noValue);
Intent msg = new Intent(WIDGET_INTENT_CLICKED);
PendingIntent intent = PendingIntent.getBroadcast(context, -1 /*not used*/, msg, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.main, intent);
return views;
}
@Override
public void onDisabled(Context context) {
super.onDisabled(context);
}
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
context.sendBroadcast(new Intent(Constants.BROADCAST_INTENT_STATUS_REQUEST));
}
}