package yuku.alkitab.base.ac; import android.appwidget.AppWidgetManager; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.CheckBox; import android.widget.CheckedTextView; import android.widget.ListView; import android.widget.SeekBar; import android.widget.TextView; import yuku.afw.V; import yuku.afw.widget.EasyAdapter; import yuku.alkitab.base.App; import yuku.alkitab.base.S; import yuku.alkitab.base.ac.base.BaseActivity; import yuku.alkitab.base.br.DailyVerseAppWidgetReceiver; import yuku.alkitab.base.model.MVersion; import yuku.alkitab.base.util.DailyVerseData; import yuku.alkitab.debug.R; import java.util.List; public class DailyVerseAppWidgetConfigurationActivity extends BaseActivity { private VersionAdapter adapter; int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; int selectedVersionPosition = -1; CheckBox cDarkText; SeekBar sbTextSize; TextView tTextSize; View panelTransparent; SeekBar sbTransparent; TextView tTransparent; private CheckBox cTransparentBackground; final BroadcastReceiver br = new BroadcastReceiver() { @Override public void onReceive(final Context context, final Intent intent) { if (VersionsActivity.VersionListFragment.ACTION_RELOAD.equals(intent.getAction())) { if (adapter != null) adapter.reload(); } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setResult(RESULT_CANCELED); setContentView(R.layout.activity_daily_verse_configuration); final Toolbar toolbar = V.get(this, R.id.toolbar); setSupportActionBar(toolbar); final ActionBar ab = getSupportActionBar(); assert ab != null; ab.setDisplayHomeAsUpEnabled(true); ab.setHomeAsUpIndicator(R.drawable.ic_action_remove); final ListView lsVersionsAppWidget = V.get(this, R.id.lsVersionsAppWidget); final Button bOk = V.get(this, R.id.bOk); final Button bCancel = V.get(this, R.id.bCancel); cTransparentBackground = V.get(this, R.id.cTransparentBackground); cDarkText = V.get(this, R.id.cDarkText); sbTextSize = V.get(this, R.id.sbTextSize); tTextSize = V.get(this, R.id.tTextSize); panelTransparent = V.get(this, R.id.panelTransparent); sbTransparent = V.get(this, R.id.sbTransparent); tTransparent = V.get(this, R.id.tTransparent); // Find the widget id from the intent. final Intent intent = getIntent(); final Bundle extras = intent.getExtras(); if (extras != null) { mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } // If they gave us an intent without the widget id, just bail. if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) { finish(); return; } adapter = new VersionAdapter(); adapter.reload(); lsVersionsAppWidget.setAdapter(adapter); lsVersionsAppWidget.setOnItemClickListener((parent, view, position, id) -> { selectedVersionPosition = position; bOk.setEnabled(true); adapter.notifyDataSetChanged(); }); bOk.setEnabled(false); bOk.setOnClickListener(bOk_click); bCancel.setOnClickListener(v -> finish()); cTransparentBackground.setOnCheckedChangeListener((buttonView, isChecked) -> { panelTransparent.setVisibility(isChecked ? View.VISIBLE : View.GONE); cDarkText.setEnabled(isChecked); if (!isChecked) { cDarkText.setChecked(false); } }); sbTextSize.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(final SeekBar seekBar, final int progress, final boolean fromUser) { sbTextSize_progressChanged(progress); } @Override public void onStartTrackingTouch(final SeekBar seekBar) { } @Override public void onStopTrackingTouch(final SeekBar seekBar) { } }); sbTextSize_progressChanged(sbTextSize.getProgress()); sbTransparent.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(final SeekBar seekBar, final int progress, final boolean fromUser) { sbTransparent_progressChanged(progress); } @Override public void onStartTrackingTouch(final SeekBar seekBar) { } @Override public void onStopTrackingTouch(final SeekBar seekBar) { } }); sbTransparent_progressChanged(sbTransparent.getProgress()); App.getLbm().registerReceiver(br, new IntentFilter(VersionsActivity.VersionListFragment.ACTION_RELOAD)); } @Override protected void onDestroy() { super.onDestroy(); App.getLbm().unregisterReceiver(br); } void sbTextSize_progressChanged(final int progress) { final float textSize = progressToActualTextSize(progress); tTextSize.setText("" + (int) textSize); } void sbTransparent_progressChanged(final int progress) { final int percent = progressToActualTransparentPercent(progress); tTransparent.setText(percent + "%"); } int progressToActualTransparentPercent(final int progress) { return progress * 5; } int progressToActualAlpha(final int progress) { return (int) (255.f * ((100 - progressToActualTransparentPercent(progress)) / 100.f)); } float progressToActualTextSize(final int progress) { return progress + 8.f; } final View.OnClickListener bOk_click = v -> { final Context context = DailyVerseAppWidgetConfigurationActivity.this; final String versionId = adapter.versions.get(selectedVersionPosition).getVersionId(); final DailyVerseData.SavedState savedState = new DailyVerseData.SavedState(); savedState.versionId = versionId; savedState.transparentBackground = cTransparentBackground.isChecked(); savedState.backgroundAlpha = cTransparentBackground.isChecked() ? progressToActualAlpha(sbTransparent.getProgress()) : 255; savedState.darkText = cDarkText.isChecked(); savedState.textSize = progressToActualTextSize(sbTextSize.getProgress()); savedState.click = 0; DailyVerseData.saveSavedState(mAppWidgetId, savedState); DailyVerseAppWidgetReceiver.buildUpdate(context, mAppWidgetId, 1); ComponentName provider = new ComponentName(context, DailyVerseAppWidgetReceiver.class); int[] ids = AppWidgetManager.getInstance(context).getAppWidgetIds(provider); DailyVerseAppWidgetReceiver.setAlarm(DailyVerseAppWidgetConfigurationActivity.this, ids); Intent resultValue = new Intent(); resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); setResult(RESULT_OK, resultValue); finish(); }; class VersionAdapter extends EasyAdapter { private List<MVersion> versions; void reload() { versions = S.getAvailableVersions(); notifyDataSetChanged(); } @Override public View newView(final int position, final ViewGroup parent) { return getLayoutInflater().inflate(android.R.layout.simple_list_item_single_choice, parent, false); } @Override public void bindView(final View view, final int position, final ViewGroup parent) { CheckedTextView text1 = V.get(view, android.R.id.text1); text1.setText(versions.get(position).longName); text1.setChecked(position == selectedVersionPosition); } @Override public int getCount() { return versions.size(); } } }