232 lines
8.7 KiB
Java
232 lines
8.7 KiB
Java
/*
|
|
* Copyright 2014 A.C.R. Development
|
|
*/
|
|
package acr.browser.lightning.fragment;
|
|
|
|
import android.app.Activity;
|
|
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;
|
|
|
|
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 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 CheckBoxPreference cbstatus, cbfullscreen, cbviewport, cboverview, cbreflow;
|
|
private Preference theme;
|
|
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();
|
|
|
|
theme = findPreference(SETTINGS_THEME);
|
|
Preference textsize = findPreference(SETTINGS_TEXTSIZE);
|
|
cbstatus = (CheckBoxPreference) findPreference(SETTINGS_HIDESTATUSBAR);
|
|
cbfullscreen = (CheckBoxPreference) findPreference(SETTINGS_FULLSCREEN);
|
|
cbviewport = (CheckBoxPreference) findPreference(SETTINGS_VIEWPORT);
|
|
cboverview = (CheckBoxPreference) findPreference(SETTINGS_OVERVIEWMODE);
|
|
cbreflow = (CheckBoxPreference) findPreference(SETTINGS_REFLOW);
|
|
|
|
theme.setOnPreferenceClickListener(this);
|
|
textsize.setOnPreferenceClickListener(this);
|
|
cbstatus.setOnPreferenceChangeListener(this);
|
|
cbfullscreen.setOnPreferenceChangeListener(this);
|
|
cbviewport.setOnPreferenceChangeListener(this);
|
|
cboverview.setOnPreferenceChangeListener(this);
|
|
cbreflow.setOnPreferenceChangeListener(this);
|
|
|
|
cbstatus.setChecked(mPreferenceManager.getHideStatusBarEnabled());
|
|
cbfullscreen.setChecked(mPreferenceManager.getFullScreenEnabled());
|
|
cbviewport.setChecked(mPreferenceManager.getUseWideViewportEnabled());
|
|
cboverview.setChecked(mPreferenceManager.getOverviewModeEnabled());
|
|
cbreflow.setChecked(mPreferenceManager.getTextReflowEnabled());
|
|
|
|
theme.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) {
|
|
// switch preferences
|
|
switch (preference.getKey()) {
|
|
case SETTINGS_HIDESTATUSBAR:
|
|
mPreferenceManager.setHideStatusBarEnabled((Boolean) newValue);
|
|
cbstatus.setChecked((Boolean) newValue);
|
|
return true;
|
|
case SETTINGS_FULLSCREEN:
|
|
mPreferenceManager.setFullScreenEnabled((Boolean) newValue);
|
|
cbfullscreen.setChecked((Boolean) newValue);
|
|
return true;
|
|
case SETTINGS_VIEWPORT:
|
|
mPreferenceManager.setUseWideViewportEnabled((Boolean) newValue);
|
|
cbviewport.setChecked((Boolean) newValue);
|
|
return true;
|
|
case SETTINGS_OVERVIEWMODE:
|
|
mPreferenceManager.setOverviewModeEnabled((Boolean) newValue);
|
|
cboverview.setChecked((Boolean) newValue);
|
|
return true;
|
|
case SETTINGS_REFLOW:
|
|
mPreferenceManager.setTextReflowEnabled((Boolean) newValue);
|
|
cbreflow.setChecked((Boolean) newValue);
|
|
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());
|
|
}
|
|
|
|
});
|
|
builder.show();
|
|
}
|
|
|
|
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) {
|
|
theme.setSummary(mThemeOptions[which]);
|
|
}
|
|
}
|
|
});
|
|
picker.setNeutralButton(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();
|
|
}
|
|
}
|
|
});
|
|
picker.show();
|
|
}
|
|
|
|
private static class TextSeekBarListener implements SeekBar.OnSeekBarChangeListener {
|
|
|
|
private final TextView sample;
|
|
|
|
public TextSeekBarListener(TextView sample) {this.sample = sample;}
|
|
|
|
@Override
|
|
public void onProgressChanged(SeekBar view, int size, boolean user) {
|
|
this.sample.setTextSize(getTextSize(size));
|
|
}
|
|
|
|
@Override
|
|
public void onStartTrackingTouch(SeekBar arg0) {
|
|
}
|
|
|
|
@Override
|
|
public void onStopTrackingTouch(SeekBar arg0) {
|
|
}
|
|
|
|
}
|
|
}
|