/* * Copyright 2014 A.C.R. Development */ package acr.browser.lightning.fragment; import android.app.Activity; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.support.annotation.NonNull; import android.support.v7.app.AlertDialog; import android.view.Gravity; import android.view.LayoutInflater; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.TextView; import acr.browser.lightning.R; import acr.browser.lightning.dialog.BrowserDialog; public class DisplaySettingsFragment extends LightningPreferenceFragment implements Preference.OnPreferenceClickListener, Preference.OnPreferenceChangeListener { private static final String SETTINGS_HIDESTATUSBAR = "fullScreenOption"; private static final String SETTINGS_FULLSCREEN = "fullscreen"; private static final String SETTINGS_VIEWPORT = "wideViewPort"; private static final String SETTINGS_OVERVIEWMODE = "overViewMode"; private static final String SETTINGS_REFLOW = "text_reflow"; private static final String SETTINGS_THEME = "app_theme"; private static final String SETTINGS_TEXTSIZE = "text_size"; private static final String SETTINGS_DRAWERTABS = "cb_drawertabs"; private static final String SETTINGS_SWAPTABS = "cb_swapdrawers"; private static final String SETTINGS_BLACK_STATUS = "black_status_bar"; private static final float XXLARGE = 30.0f; private static final float XLARGE = 26.0f; private static final float LARGE = 22.0f; private static final float MEDIUM = 18.0f; private static final float SMALL = 14.0f; private static final float XSMALL = 10.0f; private Activity mActivity; private Preference mTheme; private String[] mThemeOptions; private int mCurrentTheme; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.preference_display); mActivity = getActivity(); initPrefs(); } private void initPrefs() { // mPreferences storage mThemeOptions = this.getResources().getStringArray(R.array.themes); mCurrentTheme = mPreferenceManager.getUseTheme(); mTheme = findPreference(SETTINGS_THEME); Preference textSize = findPreference(SETTINGS_TEXTSIZE); CheckBoxPreference cbStatus = (CheckBoxPreference) findPreference(SETTINGS_HIDESTATUSBAR); CheckBoxPreference cbFullScreen = (CheckBoxPreference) findPreference(SETTINGS_FULLSCREEN); CheckBoxPreference cbViewPort = (CheckBoxPreference) findPreference(SETTINGS_VIEWPORT); CheckBoxPreference cbOverview = (CheckBoxPreference) findPreference(SETTINGS_OVERVIEWMODE); CheckBoxPreference cbReflow = (CheckBoxPreference) findPreference(SETTINGS_REFLOW); CheckBoxPreference cbBlackStatus = (CheckBoxPreference) findPreference(SETTINGS_BLACK_STATUS); CheckBoxPreference cbDrawerTabs = (CheckBoxPreference) findPreference(SETTINGS_DRAWERTABS); CheckBoxPreference cbSwapTabs = (CheckBoxPreference) findPreference(SETTINGS_SWAPTABS); mTheme.setOnPreferenceClickListener(this); textSize.setOnPreferenceClickListener(this); cbStatus.setOnPreferenceChangeListener(this); cbFullScreen.setOnPreferenceChangeListener(this); cbViewPort.setOnPreferenceChangeListener(this); cbOverview.setOnPreferenceChangeListener(this); cbReflow.setOnPreferenceChangeListener(this); cbBlackStatus.setOnPreferenceChangeListener(this); cbDrawerTabs.setOnPreferenceChangeListener(this); cbSwapTabs.setOnPreferenceChangeListener(this); cbStatus.setChecked(mPreferenceManager.getHideStatusBarEnabled()); cbFullScreen.setChecked(mPreferenceManager.getFullScreenEnabled()); cbViewPort.setChecked(mPreferenceManager.getUseWideViewportEnabled()); cbOverview.setChecked(mPreferenceManager.getOverviewModeEnabled()); cbReflow.setChecked(mPreferenceManager.getTextReflowEnabled()); cbBlackStatus.setChecked(mPreferenceManager.getUseBlackStatusBar()); cbDrawerTabs.setChecked(mPreferenceManager.getShowTabsInDrawer(true)); cbSwapTabs.setChecked(mPreferenceManager.getBookmarksAndTabsSwapped()); mTheme.setSummary(mThemeOptions[mPreferenceManager.getUseTheme()]); } @Override public boolean onPreferenceClick(@NonNull Preference preference) { switch (preference.getKey()) { case SETTINGS_THEME: themePicker(); return true; case SETTINGS_TEXTSIZE: textSizePicker(); return true; default: return false; } } @Override public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) { boolean checked = false; if (newValue instanceof Boolean) { checked = Boolean.TRUE.equals(newValue); } // switch preferences switch (preference.getKey()) { case SETTINGS_HIDESTATUSBAR: mPreferenceManager.setHideStatusBarEnabled(checked); return true; case SETTINGS_FULLSCREEN: mPreferenceManager.setFullScreenEnabled(checked); return true; case SETTINGS_VIEWPORT: mPreferenceManager.setUseWideViewportEnabled(checked); return true; case SETTINGS_OVERVIEWMODE: mPreferenceManager.setOverviewModeEnabled(checked); return true; case SETTINGS_REFLOW: mPreferenceManager.setTextReflowEnabled(checked); return true; case SETTINGS_DRAWERTABS: mPreferenceManager.setShowTabsInDrawer(checked); return true; case SETTINGS_SWAPTABS: mPreferenceManager.setBookmarkAndTabsSwapped(checked); return true; case SETTINGS_BLACK_STATUS: mPreferenceManager.setUseBlackStatusBar(checked); return true; default: return false; } } private void textSizePicker() { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); LinearLayout view = (LinearLayout) inflater.inflate(R.layout.seek_layout, null); final SeekBar bar = (SeekBar) view.findViewById(R.id.text_size_seekbar); final TextView sample = new TextView(getActivity()); sample.setText(R.string.untitled); sample.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT)); sample.setGravity(Gravity.CENTER_HORIZONTAL); view.addView(sample); bar.setOnSeekBarChangeListener(new TextSeekBarListener(sample)); final int MAX = 5; bar.setMax(MAX); bar.setProgress(MAX - mPreferenceManager.getTextSize()); builder.setView(view); builder.setTitle(R.string.title_text_size); builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { mPreferenceManager.setTextSize(MAX - bar.getProgress()); } }); Dialog dialog = builder.show(); BrowserDialog.setDialogSize(mActivity, dialog); } private static float getTextSize(int size) { switch (size) { case 0: return XSMALL; case 1: return SMALL; case 2: return MEDIUM; case 3: return LARGE; case 4: return XLARGE; case 5: return XXLARGE; default: return MEDIUM; } } private void themePicker() { AlertDialog.Builder picker = new AlertDialog.Builder(mActivity); picker.setTitle(getResources().getString(R.string.theme)); int n = mPreferenceManager.getUseTheme(); picker.setSingleChoiceItems(mThemeOptions, n, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mPreferenceManager.setUseTheme(which); if (which < mThemeOptions.length) { mTheme.setSummary(mThemeOptions[which]); } } }); picker.setPositiveButton(getResources().getString(R.string.action_ok), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (mCurrentTheme != mPreferenceManager.getUseTheme()) { getActivity().onBackPressed(); } } }); picker.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { if (mCurrentTheme != mPreferenceManager.getUseTheme()) { getActivity().onBackPressed(); } } }); Dialog dialog = picker.show(); BrowserDialog.setDialogSize(mActivity, dialog); } private static class TextSeekBarListener implements SeekBar.OnSeekBarChangeListener { private final TextView mSample; public TextSeekBarListener(TextView sample) {this.mSample = sample;} @Override public void onProgressChanged(SeekBar view, int size, boolean user) { this.mSample.setTextSize(getTextSize(size)); } @Override public void onStartTrackingTouch(SeekBar arg0) { } @Override public void onStopTrackingTouch(SeekBar arg0) { } } }