package de.tap.easy_xkcd.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.os.AsyncTask;
import android.view.View;
import android.widget.RemoteViews;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.AppWidgetTarget;
import com.tap.xkcd_reader.R;
import java.io.IOException;
import de.tap.easy_xkcd.utils.Comic;
import de.tap.easy_xkcd.utils.OfflineComic;
import de.tap.easy_xkcd.utils.PrefHelper;
public class WidgetRandomProvider extends AppWidgetProvider {
private PrefHelper prefHelper;
private int lastComicNumber;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
if (prefHelper == null)
prefHelper = new PrefHelper(context);
if (lastComicNumber == 0)
lastComicNumber = prefHelper.getRandomNumber(prefHelper.getLastComic());
else
lastComicNumber = prefHelper.getRandomNumber(lastComicNumber);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_random_layout);
if (prefHelper.fullOfflineEnabled()) {
OfflineComic comic = new OfflineComic(lastComicNumber, context, prefHelper);
remoteViews.setImageViewBitmap(R.id.ivComic, comic.getBitmap());
remoteViews.setTextViewText(R.id.tvTitle, lastComicNumber + ": " + comic.getComicData()[0]);
} else if (prefHelper.isOnline(context)) {
new LoadComicTask(context).execute();
}
Intent intent = new Intent(context, WidgetRandomProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.shuffle, pendingIntent);
Intent intent2 = new Intent("de.tap.easy_xkcd.ACTION_COMIC");
intent2.putExtra("number", lastComicNumber);
PendingIntent openInApp = PendingIntent.getActivity(context, 1, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.ivComic, openInApp);
appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
}
private class LoadComicTask extends AsyncTask<Void, Void, Comic> {
Context context;
public LoadComicTask(Context context) {
this.context = context;
}
@Override
protected Comic doInBackground(Void... dummy) {
Comic comic = null;
try {
comic = new Comic(lastComicNumber);
} catch (IOException e) {
e.printStackTrace();
}
return comic;
}
@Override
protected void onPostExecute(Comic comic) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName thisAppWidget = new ComponentName(context.getPackageName(), WidgetRandomProvider.class.getName());
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisAppWidget);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_random_layout);
AppWidgetTarget appWidgetTarget = new AppWidgetTarget(context, remoteViews, R.id.ivComic, appWidgetIds);
if (comic != null) {
Glide.with(context)
.load(comic.getComicData()[2])
.asBitmap()
.into(appWidgetTarget);
String title = prefHelper.widgetShowComicNumber() ? (lastComicNumber + ": ") : "";
remoteViews.setTextViewText(R.id.tvTitle, title + comic.getComicData()[0]);
remoteViews.setTextViewText(R.id.tvAlt, comic.getComicData()[1]);
if (prefHelper.widgetShowAlt())
remoteViews.setViewVisibility(R.id.tvAlt, View.VISIBLE);
}
}
}
}