From 08161059c9fc86a96d073e84ddb0a1078aedb9f6 Mon Sep 17 00:00:00 2001 From: Anthony Restaino Date: Sat, 10 Sep 2016 12:17:24 -0400 Subject: [PATCH] Support swapping tabs and bookmarks drawers --- .../lightning/activity/BrowserActivity.java | 27 ++++++++-- .../activity/ThemableBrowserActivity.java | 2 +- .../fragment/DisplaySettingsFragment.java | 53 +++++++++++++------ .../fragment/GeneralSettingsFragment.java | 10 +--- .../preference/PreferenceManager.java | 9 ++++ app/src/main/res/values/strings.xml | 5 +- app/src/main/res/xml/preference_display.xml | 26 +++++---- app/src/main/res/xml/preference_general.xml | 4 -- 8 files changed, 90 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java b/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java index 88fcd42..4506f98 100644 --- a/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java +++ b/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java @@ -173,6 +173,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements private boolean mIsFullScreen = false; private boolean mIsImmersive = false; private boolean mShowTabsInDrawer; + private boolean mSwapBookmarksAndTabs; private int mOriginalOrientation; private int mBackgroundColor; private int mIconColor; @@ -247,6 +248,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements mDisabledIconColor = mDarkTheme ? ContextCompat.getColor(this, R.color.icon_dark_theme_disabled) : ContextCompat.getColor(this, R.color.icon_light_theme_disabled); mShowTabsInDrawer = mPreferences.getShowTabsInDrawer(!isTablet()); + mSwapBookmarksAndTabs = mPreferences.getBookmarksAndTabsSwapped(); // initialize background ColorDrawable int primaryColor = ThemeUtils.getPrimaryColor(this); @@ -289,7 +291,6 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements final TabsFragment tabsFragment = new TabsFragment(); mTabsView = tabsFragment; - final int containerId = mShowTabsInDrawer ? R.id.left_drawer : R.id.tabs_toolbar_container; final Bundle tabsFragmentArguments = new Bundle(); tabsFragmentArguments.putBoolean(TabsFragment.IS_INCOGNITO, isIncognito()); tabsFragmentArguments.putBoolean(TabsFragment.VERTICAL_MODE, mShowTabsInDrawer); @@ -303,8 +304,8 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements final FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager .beginTransaction() - .replace(containerId, tabsFragment, TAG_TABS_FRAGMENT) - .replace(R.id.right_drawer, bookmarksFragment, TAG_BOOKMARK_FRAGMENT) + .replace(getTabsFragmentViewId(), tabsFragment, TAG_TABS_FRAGMENT) + .replace(getBookmarksFragmentViewId(), bookmarksFragment, TAG_BOOKMARK_FRAGMENT) .commit(); if (mShowTabsInDrawer) { mToolbarLayout.removeView(findViewById(R.id.tabs_toolbar_container)); @@ -333,7 +334,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements } updateTabNumber(0); } else { - mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mDrawerLeft); + mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, mSwapBookmarksAndTabs ? mDrawerRight : mDrawerLeft); mArrowImage.setImageResource(R.drawable.ic_action_home); mArrowImage.setColorFilter(mIconColor, PorterDuff.Mode.SRC_IN); } @@ -378,6 +379,7 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements WebIconDatabase.getInstance().open(getDir("icons", MODE_PRIVATE).getPath()); } + @SuppressWarnings("VariableNotUsedInsideIf") Intent intent = savedInstanceState == null ? getIntent() : null; boolean launchedFromHistory = intent != null && (intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0; @@ -395,6 +397,19 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements } } + @IdRes + private int getBookmarksFragmentViewId() { + return mSwapBookmarksAndTabs ? R.id.left_drawer : R.id.right_drawer; + } + + private int getTabsFragmentViewId() { + if (mShowTabsInDrawer) { + return mSwapBookmarksAndTabs ? R.id.right_drawer : R.id.left_drawer; + } else { + return R.id.tabs_toolbar_container; + } + } + static boolean isPanicTrigger(@Nullable Intent intent) { return intent != null && INTENT_PANIC_TRIGGER.equals(intent.getAction()); } @@ -1239,6 +1254,10 @@ public abstract class BrowserActivity extends ThemableBrowserActivity implements protected void onResume() { super.onResume(); Log.d(TAG, "onResume"); + if (mSwapBookmarksAndTabs != mPreferences.getBookmarksAndTabsSwapped()) { + restart(); + } + if (mSuggestionsAdapter != null) { mSuggestionsAdapter.refreshPreferences(); mSuggestionsAdapter.refreshBookmarks(); diff --git a/app/src/main/java/acr/browser/lightning/activity/ThemableBrowserActivity.java b/app/src/main/java/acr/browser/lightning/activity/ThemableBrowserActivity.java index c8a6fea..25c6ab0 100644 --- a/app/src/main/java/acr/browser/lightning/activity/ThemableBrowserActivity.java +++ b/app/src/main/java/acr/browser/lightning/activity/ThemableBrowserActivity.java @@ -68,7 +68,7 @@ public abstract class ThemableBrowserActivity extends AppCompatActivity { return (getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE; } - private void restart() { + protected void restart() { finish(); startActivity(new Intent(this, getClass())); } diff --git a/app/src/main/java/acr/browser/lightning/fragment/DisplaySettingsFragment.java b/app/src/main/java/acr/browser/lightning/fragment/DisplaySettingsFragment.java index 32fe36c..a76b7b5 100644 --- a/app/src/main/java/acr/browser/lightning/fragment/DisplaySettingsFragment.java +++ b/app/src/main/java/acr/browser/lightning/fragment/DisplaySettingsFragment.java @@ -31,6 +31,9 @@ public class DisplaySettingsFragment extends LightningPreferenceFragment impleme 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 float XXLARGE = 30.0f; private static final float XLARGE = 26.0f; private static final float LARGE = 22.0f; @@ -67,6 +70,8 @@ public class DisplaySettingsFragment extends LightningPreferenceFragment impleme cbviewport = (CheckBoxPreference) findPreference(SETTINGS_VIEWPORT); cboverview = (CheckBoxPreference) findPreference(SETTINGS_OVERVIEWMODE); cbreflow = (CheckBoxPreference) findPreference(SETTINGS_REFLOW); + CheckBoxPreference cbDrawerTabs = (CheckBoxPreference) findPreference(SETTINGS_DRAWERTABS); + CheckBoxPreference cbSwapTabs = (CheckBoxPreference) findPreference(SETTINGS_SWAPTABS); theme.setOnPreferenceClickListener(this); textsize.setOnPreferenceClickListener(this); @@ -75,12 +80,16 @@ public class DisplaySettingsFragment extends LightningPreferenceFragment impleme cbviewport.setOnPreferenceChangeListener(this); cboverview.setOnPreferenceChangeListener(this); cbreflow.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()); + cbDrawerTabs.setChecked(mPreferenceManager.getShowTabsInDrawer(true)); + cbSwapTabs.setChecked(mPreferenceManager.getBookmarksAndTabsSwapped()); theme.setSummary(mThemeOptions[mPreferenceManager.getUseTheme()]); } @@ -101,27 +110,37 @@ public class DisplaySettingsFragment extends LightningPreferenceFragment impleme @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((Boolean) newValue); - cbstatus.setChecked((Boolean) newValue); + mPreferenceManager.setHideStatusBarEnabled(checked); + cbstatus.setChecked(checked); return true; case SETTINGS_FULLSCREEN: - mPreferenceManager.setFullScreenEnabled((Boolean) newValue); - cbfullscreen.setChecked((Boolean) newValue); + mPreferenceManager.setFullScreenEnabled(checked); + cbfullscreen.setChecked(checked); return true; case SETTINGS_VIEWPORT: - mPreferenceManager.setUseWideViewportEnabled((Boolean) newValue); - cbviewport.setChecked((Boolean) newValue); + mPreferenceManager.setUseWideViewportEnabled(checked); + cbviewport.setChecked(checked); return true; case SETTINGS_OVERVIEWMODE: - mPreferenceManager.setOverviewModeEnabled((Boolean) newValue); - cboverview.setChecked((Boolean) newValue); + mPreferenceManager.setOverviewModeEnabled(checked); + cboverview.setChecked(checked); return true; case SETTINGS_REFLOW: - mPreferenceManager.setTextReflowEnabled((Boolean) newValue); - cbreflow.setChecked((Boolean) newValue); + mPreferenceManager.setTextReflowEnabled(checked); + cbreflow.setChecked(checked); + return true; + case SETTINGS_DRAWERTABS: + mPreferenceManager.setShowTabsInDrawer(checked); + return true; + case SETTINGS_SWAPTABS: + mPreferenceManager.setBookmarkAndTabsSwapped(checked); return true; default: return false; @@ -191,15 +210,15 @@ public class DisplaySettingsFragment extends LightningPreferenceFragment impleme } }); picker.setPositiveButton(getResources().getString(R.string.action_ok), - new DialogInterface.OnClickListener() { + new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (mCurrentTheme != mPreferenceManager.getUseTheme()) { - getActivity().onBackPressed(); - } + @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) { diff --git a/app/src/main/java/acr/browser/lightning/fragment/GeneralSettingsFragment.java b/app/src/main/java/acr/browser/lightning/fragment/GeneralSettingsFragment.java index 9bb0419..a9ce3d9 100644 --- a/app/src/main/java/acr/browser/lightning/fragment/GeneralSettingsFragment.java +++ b/app/src/main/java/acr/browser/lightning/fragment/GeneralSettingsFragment.java @@ -43,8 +43,6 @@ public class GeneralSettingsFragment extends LightningPreferenceFragment impleme private static final String SETTINGS_HOME = "home"; private static final String SETTINGS_SEARCHENGINE = "search"; private static final String SETTINGS_GOOGLESUGGESTIONS = "google_suggestions"; - private static final String SETTINGS_DRAWERTABS = "cb_drawertabs"; - private Activity mActivity; private static final int API = android.os.Build.VERSION.SDK_INT; private CharSequence[] mProxyChoices; @@ -77,7 +75,6 @@ public class GeneralSettingsFragment extends LightningPreferenceFragment impleme CheckBoxPreference cbJsScript = (CheckBoxPreference) findPreference(SETTINGS_JAVASCRIPT); CheckBoxPreference cbColorMode = (CheckBoxPreference) findPreference(SETTINGS_COLORMODE); CheckBoxPreference cbgooglesuggest = (CheckBoxPreference) findPreference(SETTINGS_GOOGLESUGGESTIONS); - CheckBoxPreference cbDrawerTabs = (CheckBoxPreference) findPreference(SETTINGS_DRAWERTABS); proxy.setOnPreferenceClickListener(this); useragent.setOnPreferenceClickListener(this); @@ -90,7 +87,6 @@ public class GeneralSettingsFragment extends LightningPreferenceFragment impleme cbJsScript.setOnPreferenceChangeListener(this); cbColorMode.setOnPreferenceChangeListener(this); cbgooglesuggest.setOnPreferenceChangeListener(this); - cbDrawerTabs.setOnPreferenceChangeListener(this); mAgentChoice = mPreferenceManager.getUserAgentChoice(); mHomepage = mPreferenceManager.getHomepage(); @@ -149,7 +145,6 @@ public class GeneralSettingsFragment extends LightningPreferenceFragment impleme cbAds.setChecked(Constants.FULL_VERSION && mPreferenceManager.getAdBlockEnabled()); cbColorMode.setChecked(mPreferenceManager.getColorModeEnabled()); cbgooglesuggest.setChecked(mPreferenceManager.getGoogleSearchSuggestionsEnabled()); - cbDrawerTabs.setChecked(mPreferenceManager.getShowTabsInDrawer(true)); } private void searchUrlPicker() { @@ -543,7 +538,7 @@ public class GeneralSettingsFragment extends LightningPreferenceFragment impleme public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) { boolean checked = false; if (newValue instanceof Boolean) { - checked = (Boolean) newValue; + checked = Boolean.TRUE.equals(newValue); } switch (preference.getKey()) { case SETTINGS_FLASH: @@ -574,9 +569,6 @@ public class GeneralSettingsFragment extends LightningPreferenceFragment impleme case SETTINGS_GOOGLESUGGESTIONS: mPreferenceManager.setGoogleSearchSuggestionsEnabled(checked); return true; - case SETTINGS_DRAWERTABS: - mPreferenceManager.setShowTabsInDrawer(checked); - return true; default: return false; } diff --git a/app/src/main/java/acr/browser/lightning/preference/PreferenceManager.java b/app/src/main/java/acr/browser/lightning/preference/PreferenceManager.java index e5a418c..fe45442 100644 --- a/app/src/main/java/acr/browser/lightning/preference/PreferenceManager.java +++ b/app/src/main/java/acr/browser/lightning/preference/PreferenceManager.java @@ -54,6 +54,7 @@ public class PreferenceManager { public static final String SHOW_TABS_IN_DRAWER = "showTabsInDrawer"; public static final String DO_NOT_TRACK = "doNotTrack"; public static final String IDENTIFYING_HEADERS = "removeIdentifyingHeaders"; + public static final String SWAP_BOOKMARKS_AND_TABS = "swapBookmarksAndTabs"; public static final String USE_PROXY = "useProxy"; public static final String PROXY_CHOICE = "proxyChoice"; @@ -74,6 +75,14 @@ public class PreferenceManager { mPrefs = context.getSharedPreferences(PREFERENCES, 0); } + public boolean getBookmarksAndTabsSwapped() { + return mPrefs.getBoolean(Name.SWAP_BOOKMARKS_AND_TABS, false); + } + + public void setBookmarkAndTabsSwapped(boolean swap) { + putBoolean(Name.SWAP_BOOKMARKS_AND_TABS, swap); + } + public boolean getAdBlockEnabled() { return mPrefs.getBoolean(Name.BLOCK_ADS, false); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cf89b96..0fd714e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -225,10 +225,11 @@ What would you like to do with this folder? Clear Web Storage Clear web storage on exit - Web Storage Cleared + Web storage cleared Hosts File Ad Blocking Source Ad Block Settings - Show tabs in Navigation Drawer + Show tabs in navigation drawer + Swap bookmark and tab drawers Request \'Do Not Track\' Remove Identifying Headers Add to Homescreen diff --git a/app/src/main/res/xml/preference_display.xml b/app/src/main/res/xml/preference_display.xml index 0a7f0a2..8aad3a3 100644 --- a/app/src/main/res/xml/preference_display.xml +++ b/app/src/main/res/xml/preference_display.xml @@ -2,33 +2,41 @@ + + + android:title="@string/fullScreenOption"/> + android:title="@string/fullscreen"/> + android:summary="@string/recommended" + android:title="@string/wideViewPort"/> + android:summary="@string/recommended" + android:title="@string/overViewMode"/> + android:title="@string/reflow"/> + android:title="@string/theme"/> + android:title="@string/title_text_size"/> \ No newline at end of file diff --git a/app/src/main/res/xml/preference_general.xml b/app/src/main/res/xml/preference_general.xml index 45cfb68..d2b3d99 100644 --- a/app/src/main/res/xml/preference_general.xml +++ b/app/src/main/res/xml/preference_general.xml @@ -2,10 +2,6 @@ -