package yuku.alkitab.base.widget; import android.appwidget.AppWidgetManager; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.support.annotation.Nullable; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.style.RelativeSizeSpan; import android.text.style.SuperscriptSpan; import android.util.Log; import android.widget.RemoteViews; import android.widget.RemoteViewsService; import yuku.alkitab.base.App; import yuku.alkitab.base.U; import yuku.alkitab.base.util.DailyVerseData; import yuku.alkitab.debug.R; import yuku.alkitab.model.Version; import yuku.alkitab.util.Ari; public class DailyVerseFactory implements RemoteViewsService.RemoteViewsFactory { static final String TAG = DailyVerseFactory.class.getSimpleName(); private int appWidgetId; private DailyVerseData.SavedState savedState; private Version version; @Nullable private int[] aris; public DailyVerseFactory(final Intent intent) { this.appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } public static SpannableStringBuilder getText(Version version, int ari, boolean showVerseNumber) { final SpannableStringBuilder sb = new SpannableStringBuilder(); String verseText = U.removeSpecialCodes(version.loadVerseText(ari)); if (verseText == null) { verseText = Localized.string(R.string.generic_verse_not_available_in_this_version); } if (showVerseNumber) { final String verseNumber = "" + Ari.toVerse(ari); sb.append(verseNumber).append(" ").append(verseText); sb.setSpan(new RelativeSizeSpan(0.7f), 0, verseNumber.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); sb.setSpan(new SuperscriptSpan(), 0, verseNumber.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } else { sb.append(verseText); } return sb; } @Override public void onCreate() { Log.d(TAG, "@@onCreate"); reload(); } @Override public void onDataSetChanged() { Log.d(TAG, "@@onDataSetChanged"); reload(); } private void reload() { savedState = DailyVerseData.loadSavedState(appWidgetId); version = DailyVerseData.getVersion(savedState.versionId); aris = DailyVerseData.getAris(appWidgetId, savedState, version, 1); } @Override public void onDestroy() { } @Override public int getCount() { return aris == null? 0: aris.length; } @Override public RemoteViews getViewAt(final int position) { final RemoteViews row = new RemoteViews(App.context.getPackageName(), R.layout.item_daily_verse_app_widget); assert aris != null; // getCount returns 0 if aris == null final boolean showVerseNumber = aris.length > 1; row.setTextViewText(R.id.text1, getText(version, aris[position], showVerseNumber)); if (savedState.darkText) { row.setTextColor(R.id.text1, Color.BLACK); } else { row.setTextColor(R.id.text1, Color.WHITE); } row.setFloat(R.id.text1, "setTextSize", savedState.textSize); final Intent intent = new Intent(); final Bundle extras = new Bundle(); extras.putInt("ari", aris[position]); intent.putExtras(extras); row.setOnClickFillInIntent(R.id.text1, intent); return row; } @Override public RemoteViews getLoadingView() { return null; } @Override public int getViewTypeCount() { return 1; } @Override public long getItemId(final int position) { return position; } @Override public boolean hasStableIds() { return false; } }