package com.gettingmobile.goodnews.settings; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.preference.*; import android.text.InputType; import com.gettingmobile.android.app.actions.Action; import com.gettingmobile.android.app.actions.GenerateTeaserAction; import com.gettingmobile.android.app.settings.BooleanOverride; import com.gettingmobile.goodnews.Application; import com.gettingmobile.goodnews.R; import com.gettingmobile.google.reader.*; import com.gettingmobile.google.reader.db.FeedDatabaseAdapter; public final class ElementSettingsActivity extends AbstractSettingsActivity { public static final String EXTRA_KEY_BASE = "com.gettingmobile.goodnews."; public static final String EXTRA_KEY_ELEMENT_ID = EXTRA_KEY_BASE + "ELEMENT_ID"; public static final String EXTRA_KEY_ELEMENT_TITLE = EXTRA_KEY_BASE + "ELEMENT_TITLE"; public ElementSettingsActivity() { } /* * create helpers */ private static Intent createStandardIntent(Context packageContext) { return new Intent(packageContext, ElementSettingsActivity.class); } public static Intent createElementSettingsIntent(Context packageContext, ElementId elementId, String elementTitle) { final Intent intent; if (elementId != null) { intent = createStandardIntent(packageContext); intent.putExtra(EXTRA_KEY_ELEMENT_ID, elementId.getId()); intent.putExtra(EXTRA_KEY_ELEMENT_TITLE, elementTitle); } else { intent = null; } return intent; } public static Intent createFeedSettingsIntent(Application app, ElementId elementId) { return createElementSettingsIntent(app, elementId, new FeedDatabaseAdapter().readTitle(app.getDbHelper().getDatabase(), elementId)); } /* * lifecycle management */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* * populate preferences based on intent */ final ElementId elementId = getIntentElementId(); if (elementId.getType() == ElementType.FEED) { populateFeedPreferences(); } else if ((elementId.getType() == ElementType.LABEL) || (ItemState.STARRED.getId().equals(elementId))) { populateLabelPreferences(); } } /* * helpers */ protected ElementId getIntentElementId() { final Bundle extras = getIntent().getExtras(); final String elementIdText = extras != null ? extras.get(EXTRA_KEY_ELEMENT_ID).toString() : null; return elementIdText != null ? new ElementId(elementIdText) : null; } protected String getIntentElementTitle() { final Bundle extras = getIntent().getExtras(); return extras != null ? extras.getString(EXTRA_KEY_ELEMENT_TITLE) : null; } protected PreferenceCategory createCategory(PreferenceScreen screen, int titleId) { final PreferenceCategory c = new PreferenceCategory(this); c.setTitle(titleId); screen.addPreference(c); return c; } protected ListPreference createListPreference(String key, String title, int summaryId, int dialogTitleId, int entriesId, int entryValuesId, Object defaultValue) { final ListPreference lp = new ListPreference(this); lp.setKey(key); lp.setTitle(title); lp.setSummary(summaryId); lp.setDialogTitle(dialogTitleId); lp.setEntries(entriesId); lp.setEntryValues(entryValuesId); lp.setDefaultValue(defaultValue); return lp; } protected CheckBoxPreference createCheckBoxPreference(String key, String title, int summaryId, boolean defaultValue) { final CheckBoxPreference p = new CheckBoxPreference(this); p.setKey(key); p.setTitle(title); p.setSummary(summaryId); p.setDefaultValue(defaultValue); return p; } protected ListPreference createBooleanOverridePreference(String key, int titleId, int summaryId) { return createListPreference(key, getString(titleId), summaryId, titleId, R.array.boolean_override, R.array.boolean_override_values, BooleanOverride.GLOBAL.name()); } protected EditTextPreference createEditTextPreference(String key, int titleId, int summaryId, int inputType, Object defaultValue) { final EditTextPreference p = new EditTextPreference(this); p.setKey(key); p.setTitle(getString(titleId)); p.setSummary(summaryId); p.getEditText().setInputType(inputType); p.getEditText().setSingleLine(); p.setDefaultValue(defaultValue.toString()); return p; } protected Preference createActionPreference(String key, int titleId, int summaryId, Action<? extends android.app.Application> action) { final Preference p = new Preference(this); p.setKey(key); p.setTitle(titleId); p.setSummary(summaryId); registerAction(key, action); return p; } protected void populateFeedPreferences() { final ElementId feedId = getIntentElementId(); assert feedId.getType() == ElementType.FEED; final PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(this); screen.setKey(feedId.getId() + "_screen"); screen.setTitle(getIntentElementTitle()); /* * sync settings */ final PreferenceCategory sync = createCategory(screen, R.string.pref_sync); // create ignore setting sync.addPreference(createCheckBoxPreference( feedId.getId() + "_ignore_unread", getString(R.string.pref_feed_ignore_unread), R.string.pref_feed_ignore_unread_summary, false)); // create auto add to list setting sync.addPreference(createListPreference( feedId.getId() + "_autolist", getString(R.string.pref_feed_autolist), R.string.pref_feed_autolist_summay, R.string.pref_feed_autolist, R.array.boolean_override, R.array.boolean_override_values, BooleanOverride.GLOBAL.name())); /* * teaser settings */ final PreferenceCategory teaser = createCategory(screen, R.string.pref_teaser); // create teaser setting teaser.addPreference(createListPreference( feedId.getId() + "_teaser_source", getString(R.string.pref_teaser_source), R.string.pref_teaser_source_summary, R.string.pref_teaser_source, R.array.pref_teaser_source_choice, R.array.pref_teaser_source_choice_values, ItemTeaserSource.PREFER_SUMMARY.name())); // create teaser offset setting //noinspection PointlessBitwiseExpression teaser.addPreference(createEditTextPreference( feedId.getId() + "_teaser_start_char", R.string.pref_teaser_start_char, R.string.pref_teaser_start_char_summary, InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL, 0)); // create teaser generate action teaser.addPreference(createActionPreference("teaser_generate", R.string.pref_teaser_generate, R.string.pref_teaser_generate_summary, new GenerateTeaserAction(feedId))); /* * user interface settings */ final PreferenceCategory ui = createCategory(screen, R.string.pref_ui); // create item display setting ui.addPreference(createListPreference( feedId.getId() + "_item_view", getString(R.string.pref_feeds_item_view), R.string.pref_feeds_item_view_summary, R.string.pref_item_view_choice, R.array.pref_feed_item_view_choice, R.array.pref_feed_item_view_choice_values, "GLOBAL")); // create scale images setting ui.addPreference(createBooleanOverridePreference( feedId.getId() + "_scale_images", R.string.pref_scale_images, R.string.pref_scale_images_summary)); /* * news reading settings */ final PreferenceCategory newsReading = createCategory(screen, R.string.pref_news_reading); // create mobilizer setting newsReading.addPreference(createListPreference( feedId.getId() + "_mobilizer", getString(R.string.pref_mobilizer), R.string.pref_mobilizer_summary, R.string.pref_mobilizer_choice_title, R.array.pref_feed_mobilizer_choice, R.array.pref_feed_mobilizer_choice_values, Settings.GLOBAL)); // create offline reading setting newsReading.addPreference(createListPreference( feedId.getId() + "_offline_content", getString(R.string.pref_offline_reading), R.string.pref_offline_content_summary, R.string.pref_offline_content_choice_title, R.array.pref_feed_offline_content_choice, R.array.pref_feed_offline_content_choice_values, Settings.GLOBAL)); // create content treatment settings newsReading.addPreference(createListPreference( feedId.getId() + "_summary_treatment", getString(R.string.pref_feed_summary_treatment), R.string.pref_feed_summary_treatment_summary, R.string.pref_feed_summary_treatment_choice_title, R.array.pref_feed_content_treatment_choice, R.array.pref_feed_content_treatment_choice_values, ItemContentTreatment.TREAT_AS_SUMMARY.name())); newsReading.addPreference(createListPreference( feedId.getId() + "_content_treatment", getString(R.string.pref_feed_content_treatment), R.string.pref_feed_content_treatment_summary, R.string.pref_feed_content_treatment_choice_title, R.array.pref_feed_content_treatment_choice, R.array.pref_feed_content_treatment_choice_values, ItemContentTreatment.TREAT_AS_CONTENT.name())); setPreferenceScreen(screen); } protected void populateLabelPreferences() { final ElementId tagId = getIntentElementId(); assert tagId.getType() == ElementType.LABEL; final PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(this); screen.setKey(tagId.getId() + "_screen"); screen.setTitle(getIntentElementTitle()); screen.addPreference(createCheckBoxPreference( tagId.getId() + "_sync", getString(R.string.pref_tag_sync), R.string.pref_tag_sync_summary, true)); setPreferenceScreen(screen); } }