package me.ccrama.redditslide; import android.appwidget.AppWidgetManager; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.text.Html; import android.util.Log; import android.widget.RemoteViews; import android.widget.RemoteViewsService; import net.dean.jraw.models.Submission; import java.util.ArrayList; import java.util.List; import me.ccrama.redditslide.Adapters.SubredditPosts; import me.ccrama.redditslide.util.LogUtil; /** * Created by ccrama on 10/2/2015. */ public class StackWidgetService extends RemoteViewsService { @Override public RemoteViewsFactory onGetViewFactory(Intent intent) { return new StackRemoteViewsFactory(this.getApplicationContext(), intent); } } class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory { private final Context mContext; private List<Submission> submissions = new ArrayList<>(); private SubredditPosts posts; public StackRemoteViewsFactory(Context context, Intent intent) { mContext = context; int mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } public void onCreate() { } public void onDestroy() { submissions.clear(); } public int getCount() { return submissions.size(); } public RemoteViews getViewAt(int position) { final RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.submission_widget); if (position <= getCount()) { final Submission submission = submissions.get(position); String url = ""; ContentType.Type type = ContentType.getContentType(submission); if (type == ContentType.Type.IMAGE) { url = submission.getUrl(); } else if (submission.getDataNode().has("preview") && submission.getDataNode().get("preview").get("images").get(0).get("source").has("height") && submission.getDataNode().get("preview").get("images").get(0).get("source").get("height").asInt() > 200) { url = submission.getDataNode().get("preview").get("images").get(0).get("source").get("url").asText(); } else if (submission.getThumbnail() != null && (submission.getThumbnailType() == Submission.ThumbnailType.URL || submission.getThumbnailType() == Submission.ThumbnailType.NSFW)) { url = submission.getThumbnail(); } try { //todo rv.setImageViewBitmap(R.id.thumbnail, Glide.with(mContext).load(url).asBitmap().); rv.setTextViewText(R.id.title, Html.fromHtml(submission.getTitle())); } catch (Exception e) { Log.v(LogUtil.getTag(), e.toString()); } rv.setTextViewText(R.id.title, Html.fromHtml(submission.getTitle())); rv.setTextViewText(R.id.subreddit, submission.getSubredditName()); rv.setTextViewText(R.id.info, submission.getAuthor() + " " + TimeUtils.getTimeAgo(submission.getCreated().getTime(), mContext)); Bundle extras = new Bundle(); extras.putString("url", submission.getUrl()); Intent fillInIntent = new Intent(); fillInIntent.putExtras(extras); rv.setOnClickFillInIntent(R.id.card, fillInIntent); } return rv; } public RemoteViews getLoadingView() { return null; } public int getViewTypeCount() { return 1; } public long getItemId(int position) { return position; } public boolean hasStableIds() { return true; } public void onDataSetChanged() { // if (posts == null) { // posts = new SubredditPosts("all", StackWidgetService.this); Log.v(LogUtil.getTag(), "MAKING POSTS"); // } // posts.loadMore(mContext, null, true); //TODO submissions = posts.posts; Log.v(LogUtil.getTag(), "POSTS IS SIZE " + submissions.size()); } }