/* 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.Context; import android.content.DialogInterface; import android.os.Build; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.support.v7.widget.Toolbar; import android.view.MenuItem; import android.view.View; import android.widget.Toast; import com.linkbubble.BuildConfig; import com.linkbubble.MainApplication; import com.linkbubble.MainController; import com.linkbubble.R; import com.linkbubble.Settings; import com.linkbubble.util.AppPickerList; import com.linkbubble.util.CrashTracking; import com.linkbubble.util.Util; import com.squareup.otto.Bus; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Locale; /* * This class exists solely because Android's PreferenceScreen implementation doesn't do anything * when the Up button is touched, and we need to go back in that case given our use of the Up button. */ public class SettingsMoreActivity extends AppCompatPreferenceActivity { public static class AdBlockTurnOnEvent { public AdBlockTurnOnEvent() { } } public static class TrackingProtectionTurnOnEvent { public TrackingProtectionTurnOnEvent() { } } public static class HttpsEverywhereTurnOnEvent { public HttpsEverywhereTurnOnEvent() { } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings_more); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle(R.string.preference_more_title); 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 boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: finish(); return true; } return super.onOptionsItemSelected(item); } @Override public void finish() { super.finish(); overridePendingTransition(R.anim.activity_close_enter, R.anim.activity_close_exit); } static public class SettingsMoreFragment extends SettingsBaseFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences_more); final CheckBoxPreference articleModeWearPreference = (CheckBoxPreference) findPreference(Settings.KEY_ARTICLE_MODE_ON_WEAR_PREFERENCE); articleModeWearPreference.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.article_mode_changed_reloading_current, Toast.LENGTH_SHORT).show(); } return true; } }); final CheckBoxPreference articleModePreference = (CheckBoxPreference) findPreference(Settings.KEY_ARTICLE_MODE_PREFERENCE); articleModePreference.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.article_mode_changed_reloading_current, Toast.LENGTH_SHORT).show(); } return true; } }); final CheckBoxPreference adBlockPreference = (CheckBoxPreference) findPreference(Settings.PREFERENCE_ADBLOCK_MODE); final CheckBoxPreference trackingProtectionPreference = (CheckBoxPreference) findPreference(Settings.PREFERENCE_TRACKINGPROTECTION_MODE); // Hide Adblock and tracking protection preferences on API level lower then 21 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { trackingProtectionPreference.setSummary(R.string.preference_adblock_tracking_protection_from_disabled); trackingProtectionPreference.setChecked(false); trackingProtectionPreference.setEnabled(false); adBlockPreference.setSummary(R.string.preference_adblock_tracking_protection_from_disabled); adBlockPreference.setChecked(false); adBlockPreference.setEnabled(false); } else { trackingProtectionPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if ((boolean) newValue) { MainApplication app = (MainApplication) getActivity().getApplication(); Bus bus = app.getBus(); bus.post(new TrackingProtectionTurnOnEvent()); } return true; } }); adBlockPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if ((boolean) newValue) { MainApplication app = (MainApplication) getActivity().getApplication(); Bus bus = app.getBus(); bus.post(new AdBlockTurnOnEvent()); } return true; } }); } final CheckBoxPreference httpsEverywherePreference = (CheckBoxPreference) findPreference(Settings.PREFERENCE_HTTPS_EVERYWHERE_MODE); httpsEverywherePreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if ((boolean) newValue) { MainApplication app = (MainApplication) getActivity().getApplication(); Bus bus = app.getBus(); bus.post(new HttpsEverywhereTurnOnEvent()); } return true; } }); Preference interceptLinksFromPreference = findPreference(Settings.PREFERENCE_IGNORE_LINKS_FROM); if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) { interceptLinksFromPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { getDontInterceptLinksFromDialog(getActivity()).show(); return true; } }); } else { interceptLinksFromPreference.setSummary(R.string.preference_intercept_links_from_disabled_for_L); interceptLinksFromPreference.setEnabled(false); } } public AlertDialog getDontInterceptLinksFromDialog(final Context context) { final List<String> browserPackageNames = Settings.get().getBrowserPackageNames(); final View layout = AppPickerList.createView(context, ((MainApplication) context.getApplicationContext()).mIconCache, AppPickerList.SelectionType.MultipleSelection, new AppPickerList.Initializer() { @Override public boolean setChecked(String packageName, String activityName) { return Settings.get().ignoreLinkFromPackageName(packageName) ? false : true; } @Override public boolean addToList(String packageName) { if (packageName.equals(BuildConfig.APPLICATION_ID)) { return false; } for (String browserPackageName : browserPackageNames) { if (browserPackageName.equals(packageName)) { return false; } } return true; } }); AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setView(layout); builder.setIcon(Util.getAlertIcon(getActivity())); builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { ArrayList<String> ignorePackageNames = new ArrayList<String>(); ArrayList<AppPickerList.AppInfo> results = AppPickerList.getUnselected(layout); if (results != null) { for (AppPickerList.AppInfo result : results) { ignorePackageNames.add(result.mPackageName); } } Settings.get().setIgnoreLinksFromPackageNames(ignorePackageNames); } }); builder.setTitle(R.string.preference_intercept_links_from_title); return builder.create(); } } static class AppInfo { String mActivityName; String mPackageName; String mDisplayName; String mSortName; AppInfo(String activityName, String packageName, String displayName) { mActivityName = activityName; mPackageName = packageName; mDisplayName = displayName; mSortName = displayName.toLowerCase(Locale.getDefault()); } } public static class AppInfoComparator implements Comparator<AppInfo> { @Override public int compare(AppInfo lhs, AppInfo rhs) { return lhs.mSortName.compareTo(rhs.mSortName); } } }