/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package com.linkbubble.ui;
import android.app.AlertDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.SwitchPreference;
import android.support.annotation.DrawableRes;
import android.support.v4.graphics.drawable.DrawableCompat;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.CookieManager;
import android.webkit.WebView;
import android.webkit.WebViewDatabase;
import android.widget.ArrayAdapter;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import com.linkbubble.BuildConfig;
import com.linkbubble.Config;
import com.linkbubble.Constant;
import com.linkbubble.MainApplication;
import com.linkbubble.MainController;
import com.linkbubble.MainService;
import com.linkbubble.R;
import com.linkbubble.Settings;
import com.linkbubble.util.ActionItem;
import com.linkbubble.util.CrashTracking;
import com.linkbubble.util.IconCache;
import com.linkbubble.util.Util;
import com.squareup.otto.Bus;
import java.util.ArrayList;
public class SettingsActivity extends AppCompatPreferenceActivity {
public static class IncognitoModeChangedEvent {
public IncognitoModeChangedEvent(boolean value, MainController controller) {
mIncognito = value;
mainController = controller;
}
public boolean mIncognito;
public MainController mainController;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MainApplication mainApplication = (MainApplication) getApplicationContext();
if (mainApplication.mIconCache == null) {
mainApplication.mIconCache = new IconCache(mainApplication);
}
setContentView(R.layout.activity_settings);
setTitle(R.string.title_settings);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onStart() {
super.onStart();
MainApplication.checkRestoreCurrentTabs(this);
}
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.activity_close_enter, R.anim.activity_close_exit);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (super.onOptionsItemSelected(item) == true) {
return true;
}
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return false;
}
static public class SettingsFragment extends SettingsBaseFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
private Preference mWebViewTextZoomPreference;
private Preference mThemePreference;
private Preference mWebViewBatterySavePreference;
private ListPreference mUserAgentPreference;
private Handler mHandler = new Handler();
Drawable getTintedDrawable(@DrawableRes int drawable, int color) {
Drawable d = getResources().getDrawable(drawable);
d = DrawableCompat.wrap(d);
DrawableCompat.setTint(d, color);
return d;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int tintColor = getResources().getColor(R.color.color_primary);
MainApplication app = (MainApplication) getActivity().getApplicationContext();
Bus bus = app.getBus();
bus.register(this);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
PreferenceCategory generalCategory = (PreferenceCategory) findPreference("preference_category_general");
PreferenceCategory configurationCategory = (PreferenceCategory) findPreference("preference_category_configuration");
mWebViewBatterySavePreference = findPreference(Settings.PREFERENCE_WEBVIEW_BATTERY_SAVING_MODE);
mWebViewBatterySavePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Util.showThemedDialog(getWebViewBatterySaveDialog());
return true;
}
});
mWebViewBatterySavePreference.setIcon(getTintedDrawable(R.drawable.ic_battery_full_white_36dp, tintColor));
updateWebViewBatterySaveSummary();
Preference domainsPref = findPreference("preference_domains");
domainsPref.setIcon(getTintedDrawable(R.drawable.ic_open_in_browser_white_36dp, tintColor));
domainsPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
startActivity(new Intent(getActivity(), SettingsDomainsActivity.class));
return true;
}
});
Preference incognitoButton = findPreference(Settings.PREFERENCE_INCOGNITO_MODE);
if (incognitoButton != null) {
incognitoButton.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
MainApplication app = (MainApplication) getActivity().getApplication();
Bus bus = app.getBus();
bus.post(new IncognitoModeChangedEvent((Boolean) newValue, MainController.get()));
if (MainController.get() != null && MainController.get().reloadAllTabs(getActivity())) {
Toast.makeText(getActivity(), R.string.incognito_mode_changed_reloading_current, Toast.LENGTH_SHORT).show();
}
return true;
}
});
}
incognitoButton.setIcon(getTintedDrawable(R.drawable.ic_person_outline_white_36dp, tintColor));
mThemePreference = findPreference("preference_theme");
mThemePreference.setIcon(getTintedDrawable(R.drawable.ic_color_lens_white_36dp, tintColor));
mThemePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Util.showThemedDialog(getThemeDialog());
return true;
}
});
updateThemeSummary();
final SwitchPreference themeToolbarPreference = (SwitchPreference) findPreference(Settings.PREFERENCE_THEME_TOOLBAR);
themeToolbarPreference.setChecked(Settings.get().getThemeToolbar());
themeToolbarPreference.setIcon(getTintedDrawable(R.drawable.ic_colorize_white_36dp, tintColor));
themeToolbarPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (MainController.get() != null && MainController.get().reloadAllTabs(getActivity())) {
Toast.makeText(getActivity(), R.string.theme_toolbar_reloading_current, Toast.LENGTH_SHORT).show();
}
return true;
}
});
Preference crashButton = findPreference("debug_crash");
if (crashButton != null) {
crashButton.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
throw new RuntimeException("CRASH BUTTON PRESSED!"); }
});
}
final Preference leftConsumeBubblePreference = findPreference(Settings.PREFERENCE_LEFT_CONSUME_BUBBLE);
leftConsumeBubblePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
AlertDialog alertDialog = ActionItem.getConfigureBubbleAlert(getActivity(), new ActionItem.OnActionItemSelectedListener() {
@Override
public void onSelected(ActionItem actionItem) {
Settings.get().setConsumeBubble(Constant.BubbleAction.ConsumeLeft, actionItem.mType, actionItem.getLabel(),
actionItem.mPackageName, actionItem.mActivityClassName);
updateConsumeBubblePreference(leftConsumeBubblePreference, Constant.BubbleAction.ConsumeLeft);
}
});
Util.showThemedDialog(alertDialog);
return true;
}
});
updateConsumeBubblePreference(leftConsumeBubblePreference, Constant.BubbleAction.ConsumeLeft);
final Preference rightConsumeBubblePreference = findPreference(Settings.PREFERENCE_RIGHT_CONSUME_BUBBLE);
rightConsumeBubblePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
AlertDialog alertDialog = ActionItem.getConfigureBubbleAlert(getActivity(), new ActionItem.OnActionItemSelectedListener() {
@Override
public void onSelected(ActionItem actionItem) {
Settings.get().setConsumeBubble(Constant.BubbleAction.ConsumeRight, actionItem.mType, actionItem.getLabel(),
actionItem.mPackageName, actionItem.mActivityClassName);
updateConsumeBubblePreference(rightConsumeBubblePreference, Constant.BubbleAction.ConsumeRight);
}
});
Util.showThemedDialog(alertDialog);
return true;
}
});
updateConsumeBubblePreference(rightConsumeBubblePreference, Constant.BubbleAction.ConsumeRight);
/*
final Preference linkDoubleTapPreference = findPreference(Settings.PREFERENCE_LINK_DOUBLE_TAP);
linkDoubleTapPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
AlertDialog alertDialog = ActionItem.getConfigureBubbleAlert(getActivity(), new ActionItem.OnActionItemSelectedListener() {
@Override
public void onSelected(ActionItem actionItem) {
Settings.get().setConsumeBubble(Constant.BubbleAction.LinkDoubleTap, actionItem.mType, actionItem.getLabel(),
actionItem.mPackageName, actionItem.mActivityClassName);
linkDoubleTapPreference.setSummary(Settings.get().getConsumeBubbleLabel(Constant.BubbleAction.LinkDoubleTap));
}
});
alertDialog.show();
return true;
}
});
linkDoubleTapPreference.setSummary(Settings.get().getConsumeBubbleLabel(Constant.BubbleAction.LinkDoubleTap));
*/
Preference clearCachePref = findPreference("preference_clear_browser_cache");
clearCachePref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
return onClearBrowserCachePreferenceClick();
}
});
clearCachePref.setIcon(getTintedDrawable(R.drawable.ic_delete_white_36dp, tintColor));
mWebViewTextZoomPreference = findPreference(Settings.PREFERENCE_WEBVIEW_TEXT_ZOOM);
mWebViewTextZoomPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Util.showThemedDialog(getTextZoomDialog());
return true;
}
});
mWebViewTextZoomPreference.setIcon(getTintedDrawable(R.drawable.ic_pageview_white_36dp, tintColor));
mWebViewTextZoomPreference.setSummary(Settings.get().getWebViewTextZoom() + "%");
mUserAgentPreference = (ListPreference) findPreference(Settings.PREFERENCE_USER_AGENT);
mUserAgentPreference.setIcon(getTintedDrawable(R.drawable.ic_web_white_36dp, tintColor));
Preference otherAppsPreference = findPreference("preference_my_other_apps");
otherAppsPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Intent intent = MainApplication.getStoreIntent(getActivity(), BuildConfig.STORE_MY_OTHER_APPS_URL);
if (intent != null) {
startActivity(intent);
return true;
}
return false;
}
});
otherAppsPreference.setIcon(getTintedDrawable(R.drawable.ic_shop_two_white_36dp, tintColor));
Preference faqPref = findPreference("preference_faq");
faqPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
FAQDialog dialog = new FAQDialog(getActivity());
dialog.show();
return true;
}
});
faqPref.setIcon(getTintedDrawable(R.drawable.ic_question_answer_white_36dp, tintColor));
findPreference("preference_default_apps").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
startActivity(new Intent(getActivity(), SettingsDefaultAppsActivity.class));
return true;
}
});
Preference morePref = findPreference("preference_more");
morePref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
startActivity(new Intent(getActivity(), SettingsMoreActivity.class));
return true;
}
});
morePref.setIcon(getTintedDrawable(R.drawable.ic_more_horiz_white_36dp, tintColor));
Preference helpPref = findPreference("preference_help");
helpPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
startActivity(new Intent(getActivity(), SettingsHelpActivity.class));
return true;
}
});
helpPref.setIcon(getTintedDrawable(R.drawable.ic_help_white_36dp, tintColor));
Preference versionPreference = findPreference("preference_version");
try {
PackageInfo packageInfo = getActivity().getPackageManager().getPackageInfo(getActivity().getPackageName(), 0);
versionPreference.setTitle(getString(R.string.preference_version_title) + " " + packageInfo.versionName);
} catch (PackageManager.NameNotFoundException e) {
}
versionPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
ChangeLogDialog changelogDialog = new ChangeLogDialog(getActivity());
changelogDialog.show();
//FAQDialog faqDialog = new FAQDialog(SettingsActivity.this);
//faqDialog.show();
return true;
}
});
versionPreference.setIcon(getTintedDrawable(R.drawable.ic_info_white_36dp, tintColor));
}
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
if (mUserAgentPreference.getEntry() == null) {
mUserAgentPreference.setValueIndex(0);
}
mUserAgentPreference.setSummary(mUserAgentPreference.getEntry());
Preference defaultAppsPreference = findPreference(Settings.PREFERENCE_DEFAULT_APPS);
setPreferenceIcon(defaultAppsPreference, Settings.get().getDefaultBrowserIcon(getActivity()));
checkDefaultBrowser();
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onDestroy() {
super.onDestroy();
MainApplication app = (MainApplication) getActivity().getApplicationContext();
Bus bus = app.getBus();
bus.unregister(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Preference preference = findPreference(key);
if (preference instanceof ListPreference) {
ListPreference listPref = (ListPreference) preference;
preference.setSummary(listPref.getEntry());
if (preference == mUserAgentPreference) {
if (MainController.get() != null && MainController.get().reloadAllTabs(getActivity())) {
Toast.makeText(getActivity(), R.string.user_agent_changed_reloading_current, Toast.LENGTH_SHORT).show();
}
}
}
}
void checkDefaultBrowser() {
PackageManager packageManager = getActivity().getPackageManager();
Preference setDefaultBrowserPreference = findPreference("preference_set_default_browser");
// Will be null if onResume() is called after the preference has already been removed.
if (setDefaultBrowserPreference != null) {
//PreferenceCategory category = (PreferenceCategory) findPreference("preference_category_configuration");
//category.removePreference(setDefaultBrowserPreference);
setDefaultBrowserPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
// Via http://stackoverflow.com/a/13239706/328679
PackageManager packageManager = getActivity().getPackageManager();
ComponentName dummyComponentName = new ComponentName(getActivity().getApplication(),
DefaultBrowserResetActivity.class);
packageManager.setComponentEnabledSetting(dummyComponentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(Config.SET_DEFAULT_BROWSER_URL));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
getActivity().startActivity(intent);
packageManager.setComponentEnabledSetting(dummyComponentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP);
return true;
}
});
setDefaultBrowserPreference.setIcon(getTintedDrawable(R.drawable.ic_warning_white_36dp,
getResources().getColor(android.R.color.holo_orange_light)));
ResolveInfo defaultBrowserResolveInfo = Util.getDefaultBrowser(packageManager);
if (defaultBrowserResolveInfo != null) {
String defaultBrowserPackageName = defaultBrowserResolveInfo.activityInfo != null ? defaultBrowserResolveInfo.activityInfo.packageName : null;
if (defaultBrowserPackageName != null
&& (defaultBrowserPackageName.equals(BuildConfig.APPLICATION_ID)
|| defaultBrowserPackageName.equals(BuildConfig.TAP_PATH_PACKAGE_NAME))) {
PreferenceCategory category = (PreferenceCategory) findPreference("preference_category_configuration");
category.removePreference(setDefaultBrowserPreference);
}
}
}
}
private static final int THEME_LIGHT_COLOR = 0;
private static final int THEME_LIGHT_NO_COLOR = 1;
private static final int THEME_DARK_COLOR = 2;
private static final int THEME_DARK_NO_COLOR = 3;
void updateThemeSummary() {
boolean darkTheme = Settings.get().getDarkThemeEnabled();
boolean color = Settings.get().getColoredProgressIndicator();
if (darkTheme) {
if (color) {
mThemePreference.setSummary(R.string.preference_theme_dark_color);
//setPreferenceIcon(mThemePreference, R.drawable.preference_theme_dark_color);
} else {
mThemePreference.setSummary(R.string.preference_theme_dark_no_color);
//setPreferenceIcon(mThemePreference, R.drawable.preference_theme_dark_no_color);
}
} else {
if (color) {
mThemePreference.setSummary(R.string.preference_theme_light_color);
//setPreferenceIcon(mThemePreference, R.drawable.preference_theme_light_color);
} else {
mThemePreference.setSummary(R.string.preference_theme_light_no_color);
//setPreferenceIcon(mThemePreference, R.drawable.preference_theme_light_no_color);
}
}
}
AlertDialog getThemeDialog() {
final String lightColor = getString(R.string.preference_theme_light_color);
final String lightNoColor = getString(R.string.preference_theme_light_no_color);
final String darkColor = getString(R.string.preference_theme_dark_color);
final String darkNoColor = getString(R.string.preference_theme_dark_no_color);
final ArrayList<String> items = new ArrayList<String>();
items.add(lightColor);
items.add(lightNoColor);
items.add(darkColor);
items.add(darkNoColor);
boolean darkTheme = Settings.get().getDarkThemeEnabled();
boolean color = Settings.get().getColoredProgressIndicator();
final int startSelectedIndex = darkTheme ? (color ? THEME_DARK_COLOR : 3) : (color ? THEME_LIGHT_COLOR : THEME_LIGHT_NO_COLOR);
final PreferenceThemeAdapter adapter = new PreferenceThemeAdapter(getActivity(),
R.layout.view_preference_theme_item,
startSelectedIndex,
items.toArray(new String[0]));
final ListView listView = new ListView(getActivity());
listView.setAdapter(adapter);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(listView);
builder.setIcon(Util.getAlertIcon(getActivity()));
builder.setPositiveButton(R.string.action_ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (adapter.mSelectedIndex != startSelectedIndex) {
switch (adapter.mSelectedIndex) {
case THEME_LIGHT_COLOR:
Settings.get().setDarkThemeEnabled(false);
Settings.get().setColoredProgressIndicator(true);
break;
case THEME_LIGHT_NO_COLOR:
Settings.get().setDarkThemeEnabled(false);
Settings.get().setColoredProgressIndicator(false);
break;
case THEME_DARK_COLOR:
Settings.get().setDarkThemeEnabled(true);
Settings.get().setColoredProgressIndicator(true);
break;
case THEME_DARK_NO_COLOR:
Settings.get().setDarkThemeEnabled(true);
Settings.get().setColoredProgressIndicator(false);
break;
}
updateThemeSummary();
if (MainController.get() != null) {
MainApplication.postEvent(getActivity(), new MainService.ReloadMainServiceEvent(getActivity()));
}
}
}
});
builder.setTitle(R.string.preference_theme_title);
return builder.create();
}
private static class PreferenceThemeAdapter extends ArrayAdapter<String> {
Context mContext;
int mLayoutResourceId;
int mSelectedIndex;
public PreferenceThemeAdapter(Context context, int layoutResourceId, int initialSelectedIndex, String[] data) {
super(context, layoutResourceId, data);
mLayoutResourceId = layoutResourceId;
mContext = context;
mSelectedIndex = initialSelectedIndex;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView==null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(mLayoutResourceId, parent, false);
}
TextView label = (TextView) convertView.findViewById(R.id.label);
ImageView icon = (ImageView) convertView.findViewById(R.id.icon);
final RadioButton radioButton = (RadioButton) convertView.findViewById(R.id.radio_button);
switch (position) {
case THEME_LIGHT_COLOR:
label.setText(mContext.getString(R.string.preference_theme_light_color));
icon.setImageDrawable(mContext.getResources().getDrawable(R.drawable.preference_theme_light_color));
break;
case THEME_LIGHT_NO_COLOR:
label.setText(mContext.getString(R.string.preference_theme_light_no_color));
icon.setImageDrawable(mContext.getResources().getDrawable(R.drawable.preference_theme_light_no_color));
break;
case THEME_DARK_COLOR:
label.setText(mContext.getString(R.string.preference_theme_dark_color));
icon.setImageDrawable(mContext.getResources().getDrawable(R.drawable.preference_theme_dark_color));
break;
case THEME_DARK_NO_COLOR:
label.setText(mContext.getString(R.string.preference_theme_dark_no_color));
icon.setImageDrawable(mContext.getResources().getDrawable(R.drawable.preference_theme_dark_no_color));
break;
default:
break;
}
convertView.setTag(position);
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
radioButton.setChecked(true);
mSelectedIndex = position;
PreferenceThemeAdapter.this.notifyDataSetChanged();
}
});
convertView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
// Pass event along to radio button so UI visually updates
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP: {
radioButton.onTouchEvent(event);
return true;
}
}
return false;
}
});
radioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
mSelectedIndex = position;
PreferenceThemeAdapter.this.notifyDataSetChanged();
}
}
});
radioButton.setChecked(position == mSelectedIndex);
return convertView;
}
}
void updateWebViewBatterySaveSummary() {
int position = Settings.get().getWebViewBatterySaveMode().ordinal();
if (position == Settings.WebViewBatterySaveMode.Aggressive.ordinal()) {
mWebViewBatterySavePreference.setSummary(getString(R.string.preference_webview_battery_save_aggressive_title));
} else if (position == Settings.WebViewBatterySaveMode.Default.ordinal()) {
mWebViewBatterySavePreference.setSummary(getString(R.string.preference_webview_battery_save_default_title));
} else if (position == Settings.WebViewBatterySaveMode.Off.ordinal()) {
mWebViewBatterySavePreference.setSummary(getString(R.string.preference_webview_battery_save_off_title));
}
}
AlertDialog getWebViewBatterySaveDialog() {
final ArrayList<String> items = new ArrayList<String>();
items.add(getString(R.string.preference_webview_battery_save_aggressive_title));
items.add(getString(R.string.preference_webview_battery_save_default_title));
items.add(getString(R.string.preference_webview_battery_save_off_title));
final PreferenceBatterySaveAdapter adapter = new PreferenceBatterySaveAdapter(getActivity(),
R.layout.view_preference_webview_battery_save_item,
Settings.get().getWebViewBatterySaveMode().ordinal(),
items.toArray(new String[0]));
final ListView listView = new ListView(getActivity());
listView.setAdapter(adapter);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(listView);
builder.setIcon(Util.getAlertIcon(getActivity()));
builder.setPositiveButton(R.string.action_ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Settings.WebViewBatterySaveMode mode = Settings.WebViewBatterySaveMode.values()[adapter.mSelectedIndex];
Settings.get().setWebViewBatterySaveMode(mode);
updateWebViewBatterySaveSummary();
}
});
builder.setTitle(R.string.preference_webview_battery_save_title);
return builder.create();
}
private static class PreferenceBatterySaveAdapter extends ArrayAdapter<String> {
Context mContext;
int mLayoutResourceId;
int mSelectedIndex;
public PreferenceBatterySaveAdapter(Context context, int layoutResourceId, int initialSelectedIndex, String[] data) {
super(context, layoutResourceId, data);
mLayoutResourceId = layoutResourceId;
mContext = context;
mSelectedIndex = initialSelectedIndex;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView==null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(mLayoutResourceId, parent, false);
}
TextView label = (TextView) convertView.findViewById(R.id.title);
TextView summary = (TextView) convertView.findViewById(R.id.summary);
final RadioButton radioButton = (RadioButton) convertView.findViewById(R.id.radio_button);
if (position == Settings.WebViewBatterySaveMode.Aggressive.ordinal()) {
label.setText(mContext.getString(R.string.preference_webview_battery_save_aggressive_title));
summary.setText(mContext.getString(R.string.preference_webview_battery_save_aggressive_summary));
} else if (position == Settings.WebViewBatterySaveMode.Default.ordinal()) {
label.setText(mContext.getString(R.string.preference_webview_battery_save_default_title));
summary.setText(mContext.getString(R.string.preference_webview_battery_save_default_summary));
} else if (position == Settings.WebViewBatterySaveMode.Off.ordinal()) {
label.setText(mContext.getString(R.string.preference_webview_battery_save_off_title));
summary.setText(mContext.getString(R.string.preference_webview_battery_save_off_summary));
}
convertView.setTag(position);
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
radioButton.setChecked(true);
mSelectedIndex = position;
PreferenceBatterySaveAdapter.this.notifyDataSetChanged();
}
});
convertView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
// Pass event along to radio button so UI visually updates
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP: {
radioButton.onTouchEvent(event);
return true;
}
}
return false;
}
});
radioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
mSelectedIndex = position;
PreferenceBatterySaveAdapter.this.notifyDataSetChanged();
}
}
});
radioButton.setChecked(position == mSelectedIndex);
return convertView;
}
}
AlertDialog getTextZoomDialog() {
final View layout = View.inflate(getActivity(), R.layout.view_preference_text_zoom, null);
final int initialZoom = Settings.get().getWebViewTextZoom();
final TextView textView = (TextView) layout.findViewById(R.id.seekbar_title);
final SeekBar seekBar = (SeekBar) layout.findViewById(R.id.seekbar_text_zoom);
textView.setText((initialZoom + Settings.PREFERENCE_WEBVIEW_TEXT_ZOOM_MIN) + "%");
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (progress < 0) {
progress = 0;
} else {
final int stepSize = 5;
progress = (Math.round(progress/stepSize))*stepSize;
}
seekBar.setProgress(progress);
textView.setText((progress + Settings.PREFERENCE_WEBVIEW_TEXT_ZOOM_MIN) + "%");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
seekBar.setMax(Settings.PREFERENCE_WEBVIEW_TEXT_ZOOM_MAX - Settings.PREFERENCE_WEBVIEW_TEXT_ZOOM_MIN);
seekBar.setProgress(initialZoom - Settings.PREFERENCE_WEBVIEW_TEXT_ZOOM_MIN);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setIcon(Util.getAlertIcon(getActivity()));
builder.setView(layout);
builder.setTitle(R.string.preference_webview_text_zoom_title);
AlertDialog alertDialog = builder.create();
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, getString(android.R.string.ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Settings.get().setWebViewTextZoom(seekBar.getProgress() + Settings.PREFERENCE_WEBVIEW_TEXT_ZOOM_MIN);
int currentZoom = Settings.get().getWebViewTextZoom();
mWebViewTextZoomPreference.setSummary(currentZoom + "%");
if (currentZoom != initialZoom && MainController.get() != null) {
if (MainController.get().reloadAllTabs(getActivity())) {
Toast.makeText(getActivity(), R.string.preference_webview_text_zoom_reloading_current, Toast.LENGTH_SHORT).show();
}
}
}
});
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, getString(R.string.action_use_default), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Settings.get().setWebViewTextZoom(Settings.PREFERENCE_WEBVIEW_TEXT_ZOOM_DEFAULT);
int currentZoom = Settings.get().getWebViewTextZoom();
mWebViewTextZoomPreference.setSummary(currentZoom + "%");
if (currentZoom != initialZoom && MainController.get() != null) {
if (MainController.get().reloadAllTabs(getActivity())) {
Toast.makeText(getActivity(), R.string.preference_webview_text_zoom_reloading_current, Toast.LENGTH_SHORT).show();
}
}
}
});
return alertDialog;
}
private boolean onClearBrowserCachePreferenceClick() {
final String clearCache = getString(R.string.preference_clear_cache);
final String clearCookies = getString(R.string.preference_clear_cookies);
final String clearFavicons = getString(R.string.preference_clear_favicons);
final String clearFormData = getString(R.string.preference_clear_form_data);
final String clearHistory = getString(R.string.preference_clear_history);
final String clearPasswords = getString(R.string.preference_clear_passwords);
final ArrayList<String> items = new ArrayList<String>();
items.add(clearCache);
items.add(clearCookies);
items.add(clearFavicons);
items.add(clearFormData);
items.add(clearHistory);
items.add(clearPasswords);
ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_multiple_choice, items);
final ListView listView = new ListView(getActivity());
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setAdapter(listAdapter);
for (int i = 0; i < items.size(); i++) {
listView.setItemChecked(i, items.get(i).equals(clearFavicons) ? false : true);
}
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(listView);
builder.setIcon(Util.getAlertIcon(getActivity()));
builder.setPositiveButton(R.string.action_clear_data, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
WebView webView = new WebView(getActivity());
WebViewDatabase webViewDatabase = WebViewDatabase.getInstance(getActivity().getApplicationContext());
boolean dataCleared = false;
int count = listView.getCount();
for (int i = 0; i < count; i++) {
if (listView.isItemChecked(i)) {
String item = items.get(i);
if (item.equals(clearCache)) {
webView.clearCache(true);
dataCleared = true;
} else if (item.equals(clearCookies)) {
CookieManager cookieManager = CookieManager.getInstance();
if (cookieManager != null && cookieManager.hasCookies()) {
cookieManager.removeAllCookie();
}
dataCleared = true;
} else if (item.equals(clearFavicons)) {
MainApplication.sDatabaseHelper.deleteAllFavicons();
MainApplication.recreateFaviconCache();
dataCleared = true;
} else if (item.equals(clearFormData)) {
if (webViewDatabase != null) {
webViewDatabase.clearFormData();
dataCleared = true;
}
} else if (item.equals(clearHistory)) {
webView.clearHistory();
MainApplication.sDatabaseHelper.deleteAllHistoryRecords();
Settings.get().saveCurrentTabs(null);
dataCleared = true;
} else if (item.equals(clearPasswords)) {
if (webViewDatabase != null) {
webViewDatabase.clearHttpAuthUsernamePassword();
webViewDatabase.clearUsernamePassword();
dataCleared = true;
}
}
}
}
if (dataCleared) {
boolean reloaded = false;
if (MainController.get() != null) {
reloaded = MainController.get().reloadAllTabs(getActivity());
}
Toast.makeText(getActivity(), reloaded ? R.string.private_data_cleared_reloading_current : R.string.private_data_cleared,
Toast.LENGTH_SHORT).show();
}
}
});
builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setTitle(R.string.preference_clear_browser_cache_title);
AlertDialog alertDialog = builder.create();
Util.showThemedDialog(alertDialog);
return true;
}
void updateConsumeBubblePreference(Preference preference, Constant.BubbleAction action) {
preference.setSummary(Settings.get().getConsumeBubbleLabel(action));
setPreferenceIcon(preference, Settings.get().getConsumeBubbleIcon(action, false));
}
}
}