From 19103e9b2ca84d978172a08ccaf2116c4505c1b8 Mon Sep 17 00:00:00 2001 From: Anthony Restaino Date: Sat, 25 Jul 2015 10:19:14 -0400 Subject: [PATCH] Added Bookmark folders, Added actions to the bookmark drawer, + other Updated icons, removed light/dark versions only have one version now that uses a color filter to be themed to save space, optimized view layouts --- app/app.iml | 10 +- app/proguard-project.txt | 7 + .../lightning/activity/BrowserActivity.java | 343 ++++++++++++++---- .../lightning/activity/IncognitoActivity.java | 3 +- .../lightning/activity/MainActivity.java | 3 +- .../lightning/activity/ReadingActivity.java | 51 ++- .../lightning/activity/ThemableActivity.java | 5 +- .../activity/ThemableSettingsActivity.java | 7 +- .../lightning/constant/HistoryPage.java | 7 +- .../controller/BrowserController.java | 2 + .../lightning/database/BookmarkManager.java | 236 ++++++++---- .../lightning/database/HistoryItem.java | 17 + .../fragment/DisplaySettingsFragment.java | 84 ++++- .../lightning/object/SearchAdapter.java | 76 ++-- .../reading/ArticleTextExtractor.java | 16 +- .../lightning/receiver/NetworkReceiver.java | 22 ++ .../browser/lightning/utils/ThemeUtils.java | 54 +++ .../acr/browser/lightning/utils/Utils.java | 40 +- .../browser/lightning/view/LightningView.java | 76 ++-- .../main/res/drawable-hdpi/ic_action_back.png | Bin 297 -> 212 bytes .../res/drawable-hdpi/ic_action_back_dark.png | Bin 262 -> 0 bytes .../res/drawable-hdpi/ic_action_collapse.png | Bin 509 -> 219 bytes .../main/res/drawable-hdpi/ic_action_copy.png | Bin 353 -> 244 bytes .../res/drawable-hdpi/ic_action_delete.png | Bin 371 -> 282 bytes .../drawable-hdpi/ic_action_delete_dark.png | Bin 355 -> 0 bytes .../res/drawable-hdpi/ic_action_desktop.png | Bin 0 -> 242 bytes .../res/drawable-hdpi/ic_action_expand.png | Bin 546 -> 227 bytes .../res/drawable-hdpi/ic_action_forward.png | Bin 292 -> 204 bytes .../drawable-hdpi/ic_action_forward_dark.png | Bin 268 -> 0 bytes .../res/drawable-hdpi/ic_action_invert.png | Bin 0 -> 331 bytes .../drawable-hdpi/ic_action_invert_dark.png | Bin 304 -> 0 bytes .../drawable-hdpi/ic_action_invert_light.png | Bin 332 -> 0 bytes .../main/res/drawable-hdpi/ic_action_plus.png | Bin 181 -> 153 bytes .../res/drawable-hdpi/ic_action_plus_dark.png | Bin 166 -> 0 bytes .../res/drawable-hdpi/ic_action_reading.png | Bin 0 -> 126 bytes .../res/drawable-hdpi/ic_action_refresh.png | Bin 753 -> 492 bytes .../main/res/drawable-hdpi/ic_action_star.png | Bin 820 -> 649 bytes .../res/drawable-hdpi/ic_action_star_dark.png | Bin 652 -> 0 bytes .../main/res/drawable-hdpi/ic_action_tabs.png | Bin 0 -> 135 bytes .../res/drawable-hdpi/ic_action_tabs_dark.png | Bin 165 -> 0 bytes .../drawable-hdpi/ic_action_tabs_light.png | Bin 178 -> 0 bytes .../res/drawable-hdpi/ic_action_text_size.png | Bin 0 -> 163 bytes .../ic_action_text_size_dark.png | Bin 210 -> 0 bytes .../ic_action_text_size_light.png | Bin 237 -> 0 bytes .../main/res/drawable-hdpi/ic_bookmark.png | Bin 617 -> 480 bytes .../res/drawable-hdpi/ic_bookmark_dark.png | Bin 516 -> 0 bytes app/src/main/res/drawable-hdpi/ic_folder.png | Bin 0 -> 196 bytes app/src/main/res/drawable-hdpi/ic_history.png | Bin 756 -> 633 bytes .../res/drawable-hdpi/ic_history_dark.png | Bin 696 -> 0 bytes app/src/main/res/drawable-hdpi/ic_search.png | Bin 748 -> 524 bytes .../main/res/drawable-hdpi/ic_search_dark.png | Bin 640 -> 0 bytes app/src/main/res/drawable-hdpi/ic_webpage.png | Bin 805 -> 620 bytes .../res/drawable-hdpi/ic_webpage_dark.png | Bin 637 -> 0 bytes .../res/drawable-xhdpi/ic_action_back.png | Bin 391 -> 174 bytes .../drawable-xhdpi/ic_action_back_dark.png | Bin 339 -> 0 bytes .../res/drawable-xhdpi/ic_action_collapse.png | Bin 659 -> 199 bytes .../res/drawable-xhdpi/ic_action_copy.png | Bin 417 -> 244 bytes .../res/drawable-xhdpi/ic_action_delete.png | Bin 529 -> 290 bytes .../drawable-xhdpi/ic_action_delete_dark.png | Bin 479 -> 0 bytes .../res/drawable-xhdpi/ic_action_desktop.png | Bin 0 -> 268 bytes .../res/drawable-xhdpi/ic_action_expand.png | Bin 691 -> 209 bytes .../res/drawable-xhdpi/ic_action_forward.png | Bin 365 -> 180 bytes .../drawable-xhdpi/ic_action_forward_dark.png | Bin 332 -> 0 bytes .../res/drawable-xhdpi/ic_action_invert.png | Bin 0 -> 372 bytes .../drawable-xhdpi/ic_action_invert_dark.png | Bin 422 -> 0 bytes .../drawable-xhdpi/ic_action_invert_light.png | Bin 462 -> 0 bytes .../res/drawable-xhdpi/ic_action_plus.png | Bin 206 -> 137 bytes .../drawable-xhdpi/ic_action_plus_dark.png | Bin 183 -> 0 bytes .../res/drawable-xhdpi/ic_action_reading.png | Bin 0 -> 124 bytes .../res/drawable-xhdpi/ic_action_refresh.png | Bin 1081 -> 626 bytes .../res/drawable-xhdpi/ic_action_star.png | Bin 1113 -> 807 bytes .../drawable-xhdpi/ic_action_star_dark.png | Bin 910 -> 0 bytes .../res/drawable-xhdpi/ic_action_tabs.png | Bin 0 -> 121 bytes .../drawable-xhdpi/ic_action_tabs_dark.png | Bin 177 -> 0 bytes .../drawable-xhdpi/ic_action_tabs_light.png | Bin 193 -> 0 bytes .../drawable-xhdpi/ic_action_text_size.png | Bin 0 -> 149 bytes .../ic_action_text_size_dark.png | Bin 226 -> 0 bytes .../ic_action_text_size_light.png | Bin 254 -> 0 bytes .../main/res/drawable-xhdpi/ic_bookmark.png | Bin 804 -> 593 bytes .../res/drawable-xhdpi/ic_bookmark_dark.png | Bin 703 -> 0 bytes app/src/main/res/drawable-xhdpi/ic_folder.png | Bin 0 -> 230 bytes .../main/res/drawable-xhdpi/ic_history.png | Bin 1061 -> 851 bytes .../res/drawable-xhdpi/ic_history_dark.png | Bin 998 -> 0 bytes app/src/main/res/drawable-xhdpi/ic_search.png | Bin 992 -> 535 bytes .../res/drawable-xhdpi/ic_search_dark.png | Bin 886 -> 0 bytes .../main/res/drawable-xhdpi/ic_webpage.png | Bin 1078 -> 764 bytes .../res/drawable-xhdpi/ic_webpage_dark.png | Bin 921 -> 0 bytes .../res/drawable-xxhdpi/ic_action_back.png | Bin 556 -> 316 bytes .../drawable-xxhdpi/ic_action_back_dark.png | Bin 508 -> 0 bytes .../drawable-xxhdpi/ic_action_collapse.png | Bin 1068 -> 331 bytes .../res/drawable-xxhdpi/ic_action_copy.png | Bin 621 -> 379 bytes .../res/drawable-xxhdpi/ic_action_delete.png | Bin 853 -> 490 bytes .../drawable-xxhdpi/ic_action_delete_dark.png | Bin 764 -> 0 bytes .../res/drawable-xxhdpi/ic_action_desktop.png | Bin 0 -> 461 bytes .../res/drawable-xxhdpi/ic_action_expand.png | Bin 1098 -> 337 bytes .../res/drawable-xxhdpi/ic_action_forward.png | Bin 537 -> 328 bytes .../ic_action_forward_dark.png | Bin 512 -> 0 bytes .../res/drawable-xxhdpi/ic_action_invert.png | Bin 0 -> 668 bytes .../drawable-xxhdpi/ic_action_invert_dark.png | Bin 643 -> 0 bytes .../ic_action_invert_light.png | Bin 686 -> 0 bytes .../res/drawable-xxhdpi/ic_action_plus.png | Bin 267 -> 177 bytes .../drawable-xxhdpi/ic_action_plus_dark.png | Bin 237 -> 0 bytes .../res/drawable-xxhdpi/ic_action_reading.png | Bin 0 -> 162 bytes .../res/drawable-xxhdpi/ic_action_refresh.png | Bin 1717 -> 1134 bytes .../res/drawable-xxhdpi/ic_action_star.png | Bin 1803 -> 1528 bytes .../drawable-xxhdpi/ic_action_star_dark.png | Bin 1455 -> 0 bytes .../res/drawable-xxhdpi/ic_action_tabs.png | Bin 0 -> 160 bytes .../drawable-xxhdpi/ic_action_tabs_dark.png | Bin 235 -> 0 bytes .../drawable-xxhdpi/ic_action_tabs_light.png | Bin 252 -> 0 bytes .../drawable-xxhdpi/ic_action_text_size.png | Bin 0 -> 194 bytes .../ic_action_text_size_dark.png | Bin 275 -> 0 bytes .../ic_action_text_size_light.png | Bin 308 -> 0 bytes .../main/res/drawable-xxhdpi/ic_bookmark.png | Bin 1261 -> 1050 bytes .../res/drawable-xxhdpi/ic_bookmark_dark.png | Bin 1129 -> 0 bytes .../main/res/drawable-xxhdpi/ic_folder.png | Bin 0 -> 363 bytes .../main/res/drawable-xxhdpi/ic_history.png | Bin 1783 -> 1602 bytes .../res/drawable-xxhdpi/ic_history_dark.png | Bin 1649 -> 0 bytes .../main/res/drawable-xxhdpi/ic_search.png | Bin 1550 -> 1010 bytes .../res/drawable-xxhdpi/ic_search_dark.png | Bin 1399 -> 0 bytes .../main/res/drawable-xxhdpi/ic_webpage.png | Bin 1745 -> 1461 bytes .../res/drawable-xxhdpi/ic_webpage_dark.png | Bin 1457 -> 0 bytes app/src/main/res/layout/bookmark_drawer.xml | 117 ++++-- app/src/main/res/layout/reading_view.xml | 21 +- app/src/main/res/layout/tab_drawer.xml | 103 +++--- app/src/main/res/layout/tab_list_item.xml | 40 +- app/src/main/res/layout/toolbar.xml | 4 +- app/src/main/res/layout/toolbar_content.xml | 5 +- app/src/main/res/layout/toolbar_settings.xml | 4 +- app/src/main/res/menu-large/incognito.xml | 4 +- app/src/main/res/menu-large/main.xml | 8 +- app/src/main/res/menu-xlarge/incognito.xml | 4 +- app/src/main/res/menu-xlarge/main.xml | 8 +- app/src/main/res/menu/main.xml | 3 +- app/src/main/res/menu/reading.xml | 4 +- app/src/main/res/values-pt/strings.xml | 30 +- app/src/main/res/values-v21/styles.xml | 30 +- app/src/main/res/values/attr.xml | 8 - app/src/main/res/values/colors.xml | 3 + app/src/main/res/values/dimens.xml | 5 +- app/src/main/res/values/strings.xml | 1 + app/src/main/res/values/styles.xml | 30 +- 141 files changed, 986 insertions(+), 505 deletions(-) create mode 100644 app/src/main/java/acr/browser/lightning/receiver/NetworkReceiver.java delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_back_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_delete_dark.png create mode 100644 app/src/main/res/drawable-hdpi/ic_action_desktop.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_forward_dark.png create mode 100644 app/src/main/res/drawable-hdpi/ic_action_invert.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_invert_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_invert_light.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_plus_dark.png create mode 100644 app/src/main/res/drawable-hdpi/ic_action_reading.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_star_dark.png create mode 100644 app/src/main/res/drawable-hdpi/ic_action_tabs.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_tabs_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_tabs_light.png create mode 100644 app/src/main/res/drawable-hdpi/ic_action_text_size.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_text_size_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_action_text_size_light.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_bookmark_dark.png create mode 100644 app/src/main/res/drawable-hdpi/ic_folder.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_history_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_search_dark.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_webpage_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_back_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_delete_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_desktop.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_forward_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_invert.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_invert_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_invert_light.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_plus_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_reading.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_star_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_tabs.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_tabs_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_tabs_light.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_action_text_size.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_text_size_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_action_text_size_light.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_bookmark_dark.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_folder.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_history_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_search_dark.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_webpage_dark.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_back_dark.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_delete_dark.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_desktop.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_forward_dark.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_invert.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_invert_dark.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_invert_light.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_plus_dark.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_reading.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_star_dark.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_tabs.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_tabs_dark.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_tabs_light.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_text_size.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_text_size_dark.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_action_text_size_light.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_bookmark_dark.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_folder.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_history_dark.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_search_dark.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_webpage_dark.png diff --git a/app/app.iml b/app/app.iml index 3d6f837..2bb4528 100644 --- a/app/app.iml +++ b/app/app.iml @@ -50,13 +50,13 @@ - - + + - + - - + + diff --git a/app/proguard-project.txt b/app/proguard-project.txt index c821b33..9c79170 100644 --- a/app/proguard-project.txt +++ b/app/proguard-project.txt @@ -36,6 +36,13 @@ -keep public class com.android.vending.licensing.ILicensingService -keep public class acr.browser.lightning.reading.* +-assumenosideeffects class android.util.Log { + public static *** d(...); + public static *** v(...); + public static *** w(...); + public static *** i(...); +} + # this will fix a force close in ReadingActivity -keep public class org.jsoup.** { public *; 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 9d8c046..ce9eaee 100644 --- a/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java +++ b/app/src/main/java/acr/browser/lightning/activity/BrowserActivity.java @@ -8,13 +8,13 @@ import android.animation.ArgbEvaluator; import android.animation.LayoutTransition; import android.animation.ValueAnimator; import android.animation.ValueAnimator.AnimatorUpdateListener; -import android.annotation.SuppressLint; import android.app.Activity; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.IntentFilter; import android.content.res.Configuration; import android.content.res.Resources.Theme; import android.database.Cursor; @@ -25,6 +25,7 @@ import android.graphics.Canvas; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.Paint; +import android.graphics.PorterDuff; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.media.MediaPlayer; @@ -36,6 +37,7 @@ import android.os.Handler; import android.os.Message; import android.provider.Browser; import android.provider.MediaStore; +import android.support.annotation.IdRes; import android.support.annotation.NonNull; import android.support.v4.view.GravityCompat; import android.support.v4.view.ViewCompat; @@ -49,6 +51,7 @@ import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; +import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; @@ -61,6 +64,7 @@ import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.Window; import android.view.WindowManager; +import android.view.animation.AccelerateInterpolator; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.DecelerateInterpolator; @@ -121,12 +125,14 @@ import acr.browser.lightning.object.ClickHandler; import acr.browser.lightning.object.DrawerArrowDrawable; import acr.browser.lightning.object.SearchAdapter; import acr.browser.lightning.preference.PreferenceManager; +import acr.browser.lightning.receiver.NetworkReceiver; import acr.browser.lightning.utils.ProxyUtils; +import acr.browser.lightning.utils.ThemeUtils; import acr.browser.lightning.utils.Utils; import acr.browser.lightning.view.AnimatedProgressBar; import acr.browser.lightning.view.LightningView; -public abstract class BrowserActivity extends ThemableActivity implements BrowserController, OnClickListener { +public abstract class BrowserActivity extends ThemableActivity implements BrowserController, OnClickListener, OnLongClickListener { // Layout private DrawerLayout mDrawerLayout; @@ -144,7 +150,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse private AnimatedProgressBar mProgressBar; private AutoCompleteTextView mSearch; - private ImageView mArrowImage; + private ImageView mArrowImage, mBookmarkTitleImage, mBookmarkImage; private VideoView mVideoView; private View mCustomView, mVideoProgressView; @@ -164,7 +170,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse // Primatives private boolean mSystemBrowser = false, mIsNewIntent = false, mFullScreen, mColorMode, mDarkTheme; - private int mOriginalOrientation, mBackgroundColor, mIdGenerator; + private int mOriginalOrientation, mBackgroundColor, mIdGenerator, mIconColor; private String mSearchText, mUntitledTitle, mHomepage, mCameraPhotoPath; // Storage @@ -173,7 +179,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse private PreferenceManager mPreferences; // Image - private Bitmap mDefaultVideoPoster, mWebpageBitmap; + private Bitmap mDefaultVideoPoster, mWebpageBitmap, mFolderBitmap; private final ColorDrawable mBackground = new ColorDrawable(); private Drawable mDeleteIcon, mRefreshIcon, mCopyIcon, mIcon; private DrawerArrowDrawable mArrowDrawable; @@ -183,6 +189,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse // Constant private static final int API = android.os.Build.VERSION.SDK_INT; + private static final String NETWORK_BROADCAST_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"; private static final LayoutParams MATCH_PARENT = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); private static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS = new FrameLayout.LayoutParams( @@ -216,6 +223,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse mPreferences = PreferenceManager.getInstance(); //TODO make sure dark theme flag gets set correctly mDarkTheme = mPreferences.getUseTheme() != 0 || isIncognito(); + mIconColor = mDarkTheme ? ThemeUtils.getIconDarkThemeColor(this) : ThemeUtils.getIconLightThemeColor(this); mActivity = this; mWebViewList.clear(); @@ -227,7 +235,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse mUiLayout = (LinearLayout) findViewById(R.id.ui_layout); mProgressBar = (AnimatedProgressBar) findViewById(R.id.progress_view); - RelativeLayout newTab = (RelativeLayout) findViewById(R.id.new_tab_button); + setupFrameLayoutButton(R.id.new_tab_button, R.id.icon_plus); mDrawerLeft = (LinearLayout) findViewById(R.id.left_drawer); // Drawer stutters otherwise mDrawerLeft.setLayerType(View.LAYER_TYPE_HARDWARE, null); @@ -236,11 +244,16 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse mDrawerRight = (LinearLayout) findViewById(R.id.right_drawer); mDrawerRight.setLayerType(View.LAYER_TYPE_HARDWARE, null); mDrawerListRight = (ListView) findViewById(R.id.right_drawer_list); + mBookmarkTitleImage = (ImageView) findViewById(R.id.starIcon); + mBookmarkTitleImage.setColorFilter(mIconColor, PorterDuff.Mode.SRC_IN); + ImageView tabTitleImage = (ImageView) findViewById(R.id.plusIcon); + tabTitleImage.setColorFilter(mIconColor, PorterDuff.Mode.SRC_IN); setNavigationDrawerWidth(); mDrawerLayout.setDrawerListener(new DrawerLocker()); - mWebpageBitmap = Utils.getWebpageBitmap(getResources(), mDarkTheme); + mWebpageBitmap = ThemeUtils.getThemedBitmap(this, R.drawable.ic_webpage, mDarkTheme); + mFolderBitmap = ThemeUtils.getThemedBitmap(this, R.drawable.ic_folder, mDarkTheme); mHomepage = mPreferences.getHomepage(); @@ -273,34 +286,29 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse // Use hardware acceleration for the animation mArrowImage.setLayerType(View.LAYER_TYPE_HARDWARE, null); mArrowImage.setImageDrawable(mArrowDrawable); - LinearLayout arrowButton = (LinearLayout) actionBar.getCustomView().findViewById( + FrameLayout arrowButton = (FrameLayout) actionBar.getCustomView().findViewById( R.id.arrow_button); arrowButton.setOnClickListener(this); mProxyUtils = ProxyUtils.getInstance(this); - RelativeLayout back = (RelativeLayout) findViewById(R.id.action_back); - back.setOnClickListener(this); + setupFrameLayoutButton(R.id.action_back, R.id.icon_back); + setupFrameLayoutButton(R.id.action_forward, R.id.icon_forward); + setupFrameLayoutButton(R.id.action_add_bookmark, R.id.icon_star); + setupFrameLayoutButton(R.id.action_toggle_desktop, R.id.icon_desktop); + setupFrameLayoutButton(R.id.action_reading, R.id.icon_reading); - RelativeLayout forward = (RelativeLayout) findViewById(R.id.action_forward); - forward.setOnClickListener(this); + mBookmarkImage = (ImageView) findViewById(R.id.icon_star); // create the search EditText in the ToolBar mSearch = (AutoCompleteTextView) actionBar.getCustomView().findViewById(R.id.search); mUntitledTitle = getString(R.string.untitled); mBackgroundColor = getResources().getColor(R.color.primary_color); - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - mDeleteIcon = getResources().getDrawable(R.drawable.ic_action_delete); - mRefreshIcon = getResources().getDrawable(R.drawable.ic_action_refresh); - mCopyIcon = getResources().getDrawable(R.drawable.ic_action_copy); - } else { - Theme theme = getTheme(); - mDeleteIcon = getResources().getDrawable(R.drawable.ic_action_delete, theme); - mRefreshIcon = getResources().getDrawable(R.drawable.ic_action_refresh, theme); - mCopyIcon = getResources().getDrawable(R.drawable.ic_action_copy, theme); - } + mDeleteIcon = ThemeUtils.getLightThemedDrawable(this, R.drawable.ic_action_delete); + mRefreshIcon = ThemeUtils.getLightThemedDrawable(this, R.drawable.ic_action_refresh); + mCopyIcon = ThemeUtils.getLightThemedDrawable(this, R.drawable.ic_action_copy); - int iconBounds = Utils.convertDpToPixels(24); + int iconBounds = Utils.convertDpToPixels(30); mDeleteIcon.setBounds(0, 0, iconBounds, iconBounds); mRefreshIcon.setBounds(0, 0, iconBounds, iconBounds); mCopyIcon.setBounds(0, 0, iconBounds, iconBounds); @@ -318,8 +326,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse @Override public void run() { mBookmarkManager = BookmarkManager.getInstance(mActivity.getApplicationContext()); - mBookmarkList.clear(); - mBookmarkList.addAll(mBookmarkManager.getBookmarks(true)); + setBookmarkDataSet(mBookmarkManager.getBookmarksFromFolder(null, true), false); if (mBookmarkList.size() == 0 && mPreferences.getDefaultBookmarks()) { for (String[] array : BookmarkManager.DEFAULT_BOOKMARKS) { HistoryItem bookmark = new HistoryItem(array[0], array[1]); @@ -339,20 +346,16 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse }); initialize.run(); - newTab.setOnClickListener(this); - newTab.setOnLongClickListener(new OnLongClickListener() { - + View view = findViewById(R.id.bookmark_back_button); + view.setOnClickListener(new OnClickListener() { @Override - public boolean onLongClick(View v) { - String url = mPreferences.getSavedUrl(); - if (url != null) { - newTab(url, true); - Utils.showSnackbar(mActivity, R.string.deleted_tab); + public void onClick(View v) { + if (mBookmarkManager == null) + return; + if (!mBookmarkManager.isRootFolder()) { + setBookmarkDataSet(mBookmarkManager.getBookmarksFromFolder(null, true), true); } - mPreferences.setSavedUrl(null); - return true; } - }); mDrawerLayout.setDrawerShadow(R.drawable.drawer_right_shadow, GravityCompat.END); @@ -492,7 +495,6 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse public class TouchListener implements OnTouchListener { - @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouch(View v, MotionEvent event) { if (mSearch.getCompoundDrawables()[2] != null) { @@ -791,14 +793,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse return true; case R.id.action_add_bookmark: if (mCurrentView != null && !mCurrentView.getUrl().startsWith(Constants.FILE)) { - HistoryItem bookmark = new HistoryItem(mCurrentView.getUrl(), - mCurrentView.getTitle()); - if (mBookmarkManager.addBookmark(bookmark)) { - mBookmarkList.add(bookmark); - Collections.sort(mBookmarkList, new SortIgnoreCase()); - notifyBookmarkDataSetChanged(); - mSearchAdapter.refreshBookmarks(); - } + addBookmark(mCurrentView.getTitle(), mCurrentView.getUrl()); } return true; case R.id.action_find: @@ -819,9 +814,71 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse * adapter doesn't always change when notifyDataChanged gets called. */ private void notifyBookmarkDataSetChanged() { + if (mBookmarkAdapter == null) + return; mBookmarkAdapter.notifyDataSetChanged(); } + private void addBookmark(String title, String url) { + HistoryItem bookmark = new HistoryItem(url, title); + if (mBookmarkManager.addBookmark(bookmark)) { + mBookmarkList.add(bookmark); + Collections.sort(mBookmarkList, new SortIgnoreCase()); + notifyBookmarkDataSetChanged(); + mSearchAdapter.refreshBookmarks(); + updateBookmarkIndicator(mCurrentView.getUrl()); + } + } + + private void setBookmarkDataSet(List items, boolean animate) { + mBookmarkList.clear(); + mBookmarkList.addAll(items); + if (mBookmarkAdapter != null) + mBookmarkAdapter.notifyDataSetChanged(); + final int resource; + if (mBookmarkManager.isRootFolder()) + resource = R.drawable.ic_action_star; + else + resource = R.drawable.ic_action_back; + + final Animation startRotation = new Animation() { + @Override + protected void applyTransformation(float interpolatedTime, Transformation t) { + mBookmarkTitleImage.setRotationY(90 * interpolatedTime); + } + }; + final Animation finishRotation = new Animation() { + @Override + protected void applyTransformation(float interpolatedTime, Transformation t) { + mBookmarkTitleImage.setRotationY((-90) + (90 * interpolatedTime)); + } + }; + startRotation.setAnimationListener(new AnimationListener() { + @Override + public void onAnimationStart(Animation animation) { + } + + @Override + public void onAnimationEnd(Animation animation) { + mBookmarkTitleImage.setImageResource(resource); + mBookmarkTitleImage.startAnimation(finishRotation); + } + + @Override + public void onAnimationRepeat(Animation animation) { + } + }); + startRotation.setInterpolator(new AccelerateInterpolator()); + finishRotation.setInterpolator(new DecelerateInterpolator()); + startRotation.setDuration(250); + finishRotation.setDuration(250); + + if (animate) + mBookmarkTitleImage.startAnimation(startRotation); + else + mBookmarkTitleImage.setImageResource(resource); + } + /** * method that shows a dialog asking what string the user wishes to search * for. It highlights the text entered. @@ -918,6 +975,10 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse @Override public void onItemClick(AdapterView parent, View view, int position, long id) { + if (mBookmarkList.get(position).getIsFolder()) { + setBookmarkDataSet(mBookmarkManager.getBookmarksFromFolder(mBookmarkList.get(position).getUrl(), true), true); + return; + } if (mCurrentView != null) { mCurrentView.loadUrl(mBookmarkList.get(position).getUrl()); } @@ -938,6 +999,8 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse @Override public boolean onItemLongClick(AdapterView arg0, View arg1, final int position, long arg3) { + if (mBookmarkList.get(position).getIsFolder()) + return true; AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); builder.setTitle(mActivity.getResources().getString(R.string.action_bookmarks)); builder.setMessage(getResources().getString(R.string.dialog_bookmark)) @@ -955,12 +1018,14 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse @Override public void onClick(DialogInterface dialog, int which) { - if (mBookmarkManager.deleteBookmark(mBookmarkList.get(position) - .getUrl())) { + if (mBookmarkManager.deleteBookmark(mBookmarkList.get(position))) { mBookmarkList.remove(position); notifyBookmarkDataSetChanged(); mSearchAdapter.refreshBookmarks(); openBookmarks(); + if (mCurrentView != null) { + updateBookmarkIndicator(mCurrentView.getUrl()); + } } } }) @@ -985,38 +1050,58 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse * @param id which id in the list was chosen */ private synchronized void editBookmark(final int id) { - final AlertDialog.Builder homePicker = new AlertDialog.Builder(mActivity); - homePicker.setTitle(getResources().getString(R.string.title_edit_bookmark)); + final AlertDialog.Builder editBookmarkDialog = new AlertDialog.Builder(mActivity); + editBookmarkDialog.setTitle(R.string.title_edit_bookmark); final EditText getTitle = new EditText(mActivity); - getTitle.setHint(getResources().getString(R.string.hint_title)); + getTitle.setHint(R.string.hint_title); getTitle.setText(mBookmarkList.get(id).getTitle()); getTitle.setSingleLine(); final EditText getUrl = new EditText(mActivity); - getUrl.setHint(getResources().getString(R.string.hint_url)); + getUrl.setHint(R.string.hint_url); getUrl.setText(mBookmarkList.get(id).getUrl()); getUrl.setSingleLine(); + final EditText getFolder = new EditText(mActivity); + getFolder.setHint(R.string.folder); + getFolder.setText(mBookmarkList.get(id).getFolder()); + getFolder.setSingleLine(); LinearLayout layout = new LinearLayout(mActivity); layout.setOrientation(LinearLayout.VERTICAL); + int padding = Utils.convertDpToPixels(10); + layout.setPadding(padding, padding, padding, padding); layout.addView(getTitle); layout.addView(getUrl); - homePicker.setView(layout); - homePicker.setPositiveButton(getResources().getString(R.string.action_ok), + layout.addView(getFolder); + editBookmarkDialog.setView(layout); + editBookmarkDialog.setPositiveButton(getResources().getString(R.string.action_ok), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - mBookmarkList.get(id).setTitle(getTitle.getText().toString()); - mBookmarkList.get(id).setUrl(getUrl.getText().toString()); - mBookmarkManager.overwriteBookmarks(mBookmarkList); + HistoryItem item = new HistoryItem(); + String currentFolder = mBookmarkList.get(id).getFolder(); + item.setTitle(getTitle.getText().toString()); + item.setUrl(getUrl.getText().toString()); + item.setFolder(getFolder.getText().toString()); + mBookmarkManager.editBookmark(mBookmarkList.get(id), item); + + List list = mBookmarkManager.getBookmarksFromFolder(currentFolder, true); + if (list.size() == 0) { + setBookmarkDataSet(mBookmarkManager.getBookmarksFromFolder(null, true), true); + } else { + setBookmarkDataSet(list, false); + } + Collections.sort(mBookmarkList, new SortIgnoreCase()); - notifyBookmarkDataSetChanged(); if (mCurrentView != null && mCurrentView.getUrl().startsWith(Constants.FILE) && mCurrentView.getUrl().endsWith("bookmarks.html")) { openBookmarkPage(mWebView); } + if (mCurrentView != null) { + updateBookmarkIndicator(mCurrentView.getUrl()); + } } }); - homePicker.show(); + editBookmarkDialog.show(); } /** @@ -1080,6 +1165,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse } }, 150); + updateBookmarkIndicator(mWebView.getUrl()); // new Handler().postDelayed(new Runnable() { // @Override @@ -1296,7 +1382,6 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse Utils.trimCache(this); } - @SuppressLint("NewApi") @SuppressWarnings("deprecation") private void clearCookies() { // TODO Break out web storage deletion into its own option/action @@ -1317,7 +1402,11 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse if (mDrawerLayout.isDrawerOpen(mDrawerLeft)) { mDrawerLayout.closeDrawer(mDrawerLeft); } else if (mDrawerLayout.isDrawerOpen(mDrawerRight)) { - mDrawerLayout.closeDrawer(mDrawerRight); + if (!mBookmarkManager.isRootFolder()) { + setBookmarkDataSet(mBookmarkManager.getBookmarksFromFolder(null, true), true); + } else { + mDrawerLayout.closeDrawer(mDrawerRight); + } } else { if (mCurrentView != null) { Log.d(Constants.TAG, "onBackPressed"); @@ -1347,6 +1436,11 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse mCurrentView.pauseTimers(); mCurrentView.onPause(); } + try { + unregisterReceiver(mNetworkReceiver); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } } void saveOpenTabs() { @@ -1372,6 +1466,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse Log.d(Constants.TAG, "onDestroy"); if (mHistoryDatabase != null) { mHistoryDatabase.close(); + mHistoryDatabase = null; } super.onDestroy(); } @@ -1395,9 +1490,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse mCurrentView.onResume(); } mHistoryDatabase = HistoryDatabase.getInstance(getApplicationContext()); - mBookmarkList.clear(); - mBookmarkList.addAll(mBookmarkManager.getBookmarks(true)); - notifyBookmarkDataSetChanged(); + setBookmarkDataSet(mBookmarkManager.getBookmarksFromFolder(null, true), false); initializePreferences(); for (int n = 0; n < mWebViewList.size(); n++) { if (mWebViewList.get(n) != null) { @@ -1408,6 +1501,10 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse } supportInvalidateOptionsMenu(); + + IntentFilter filter = new IntentFilter(); + filter.addAction(NETWORK_BROADCAST_ACTION); + registerReceiver(mNetworkReceiver, filter); } /** @@ -1486,14 +1583,15 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse holder.txtTitle = (TextView) row.findViewById(R.id.textTab); holder.favicon = (ImageView) row.findViewById(R.id.faviconTab); holder.exit = (ImageView) row.findViewById(R.id.deleteButton); - holder.exit.setTag(position); + holder.exitButton = (FrameLayout) row.findViewById(R.id.deleteAction); + holder.exit.setColorFilter(mIconColor, PorterDuff.Mode.SRC_IN); row.setTag(holder); } else { holder = (LightningViewHolder) row.getTag(); } - holder.exit.setTag(position); - holder.exit.setOnClickListener(mExitListener); + holder.exitButton.setTag(position); + holder.exitButton.setOnClickListener(mExitListener); ViewCompat.jumpDrawablesToCurrentState(holder.exit); @@ -1534,6 +1632,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse TextView txtTitle; ImageView favicon; ImageView exit; + FrameLayout exitButton; } } @@ -1592,12 +1691,14 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse final Context context; List data = null; final int layoutResourceId; + final Bitmap folderIcon; public BookmarkViewAdapter(Context context, int layoutResourceId, List data) { super(context, layoutResourceId, data); this.layoutResourceId = layoutResourceId; this.context = context; this.data = data; + this.folderIcon = mFolderBitmap; } @Override @@ -1617,10 +1718,14 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse holder = (BookmarkViewHolder) row.getTag(); } + ViewCompat.jumpDrawablesToCurrentState(row); + HistoryItem web = data.get(position); holder.txtTitle.setText(web.getTitle()); holder.favicon.setImageBitmap(mWebpageBitmap); - if (web.getBitmap() == null) { + if (web.getIsFolder()) { + holder.favicon.setImageBitmap(this.folderIcon); + } else if (web.getBitmap() == null) { getImage(holder.favicon, web); } else { holder.favicon.setImageBitmap(web.getBitmap()); @@ -1663,34 +1768,40 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse } // checks to see if the image exists if (!image.exists()) { + FileOutputStream fos = null; + InputStream in = null; try { // if not, download it... URL urlDownload = new URL(urldisplay); HttpURLConnection connection = (HttpURLConnection) urlDownload.openConnection(); connection.setDoInput(true); connection.connect(); - InputStream in = connection.getInputStream(); + in = connection.getInputStream(); if (in != null) { mIcon = BitmapFactory.decodeStream(in); } // ...and cache it if (mIcon != null) { - FileOutputStream fos = new FileOutputStream(image); + fos = new FileOutputStream(image); mIcon.compress(Bitmap.CompressFormat.PNG, 100, fos); fos.flush(); - fos.close(); Log.d(Constants.TAG, "Downloaded: " + urldisplay); } } catch (Exception e) { e.printStackTrace(); + } finally { + Utils.close(in); + Utils.close(fos); } } else { // if it exists, retrieve it from the cache mIcon = BitmapFactory.decodeFile(image.getPath()); } if (mIcon == null) { + InputStream in = null; + FileOutputStream fos = null; try { // if not, download it... URL urlDownload = new URL("https://www.google.com/s2/favicons?domain_url=" @@ -1698,21 +1809,23 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse HttpURLConnection connection = (HttpURLConnection) urlDownload.openConnection(); connection.setDoInput(true); connection.connect(); - InputStream in = connection.getInputStream(); + in = connection.getInputStream(); if (in != null) { mIcon = BitmapFactory.decodeStream(in); } // ...and cache it if (mIcon != null) { - FileOutputStream fos = new FileOutputStream(image); + fos = new FileOutputStream(image); mIcon.compress(Bitmap.CompressFormat.PNG, 100, fos); fos.flush(); - fos.close(); } } catch (Exception e) { e.printStackTrace(); + } finally { + Utils.close(in); + Utils.close(fos); } } if (mIcon == null) { @@ -1793,7 +1906,7 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse } try { if (mHistoryDatabase == null) { - mHistoryDatabase = HistoryDatabase.getInstance(mActivity); + mHistoryDatabase = HistoryDatabase.getInstance(mActivity.getApplicationContext()); } mHistoryDatabase.visitHistoryItem(url, title); } catch (IllegalStateException e) { @@ -1916,9 +2029,20 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse } @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuItem back = menu.findItem(R.id.action_back); + MenuItem forward = menu.findItem(R.id.action_forward); + if (back != null && back.getIcon() != null) + back.getIcon().setColorFilter(mIconColor, PorterDuff.Mode.SRC_IN); + if (forward != null && forward.getIcon() != null) + forward.getIcon().setColorFilter(mIconColor, PorterDuff.Mode.SRC_IN); + return super.onCreateOptionsMenu(menu); + } + /** * open the HTML bookmarks page, parameter view is the WebView that should show the page */ + @Override public void openBookmarkPage(WebView view) { StringBuilder bookmarkBuilder = new StringBuilder(); bookmarkBuilder.append(BookmarkPage.HEADING); @@ -1936,12 +2060,14 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse } bookmarkBuilder.append(BookmarkPage.END); File bookmarkWebPage = new File(mActivity.getFilesDir(), BookmarkPage.FILENAME); + FileWriter bookWriter = null; try { - FileWriter bookWriter = new FileWriter(bookmarkWebPage, false); + bookWriter = new FileWriter(bookmarkWebPage, false); bookWriter.write(bookmarkBuilder.toString()); - bookWriter.close(); } catch (IOException e) { e.printStackTrace(); + } finally { + Utils.close(bookWriter); } view.loadUrl(Constants.FILE + bookmarkWebPage); @@ -2187,7 +2313,6 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse setBackgroundColor(ctx.getResources().getColor(android.R.color.black)); } - @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouchEvent(@NonNull MotionEvent evt) { return true; @@ -2208,7 +2333,6 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse return mDefaultVideoPoster; } - @SuppressLint("InflateParams") @Override /** * dumb method that returns the loading progress for a video @@ -2558,6 +2682,17 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse } } + @Override + public void updateBookmarkIndicator(String url) { + if (url == null || !mBookmarkManager.isBookmark(url)) { + mBookmarkImage.setImageResource(R.drawable.ic_action_star); + mBookmarkImage.setColorFilter(mIconColor, PorterDuff.Mode.SRC_IN); + } else { + mBookmarkImage.setImageResource(R.drawable.ic_bookmark); + mBookmarkImage.setColorFilter(ThemeUtils.getAccentColor(this), PorterDuff.Mode.SRC_IN); + } + } + private class SortIgnoreCase implements Comparator { public int compare(HistoryItem o1, HistoryItem o2) { @@ -2606,6 +2741,58 @@ public abstract class BrowserActivity extends ThemableActivity implements Browse mWebView.clearMatches(); mSearchBar.setVisibility(View.GONE); break; + case R.id.action_reading: + Intent read = new Intent(this, ReadingActivity.class); + read.putExtra(Constants.LOAD_READING_URL, mCurrentView.getUrl()); + startActivity(read); + break; + case R.id.action_toggle_desktop: + mCurrentView.toggleDesktopUA(this); + mCurrentView.reload(); + closeDrawers(); + break; + case R.id.action_add_bookmark: + if (mCurrentView != null && !mCurrentView.getUrl().startsWith(Constants.FILE)) { + addBookmark(mCurrentView.getTitle(), mCurrentView.getUrl()); + } + break; } } + + @Override + public boolean onLongClick(View view) { + switch (view.getId()) { + case R.id.new_tab_button: + String url = mPreferences.getSavedUrl(); + if (url != null) { + newTab(url, true); + Utils.showSnackbar(mActivity, R.string.deleted_tab); + } + mPreferences.setSavedUrl(null); + break; + } + return true; + } + + private void setupFrameLayoutButton(@IdRes int buttonId, @IdRes int imageId) { + FrameLayout frameButton = (FrameLayout) findViewById(buttonId); + frameButton.setOnClickListener(this); + frameButton.setOnLongClickListener(this); + ImageView buttonImage = (ImageView) findViewById(imageId); + buttonImage.setColorFilter(mIconColor, PorterDuff.Mode.SRC_IN); + } + + private NetworkReceiver mNetworkReceiver = new NetworkReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + super.onReceive(context, intent); + boolean isConnected = isConnected(context); + Log.d("Lightning", "Network Connected: " + String.valueOf(isConnected)); + for (int n = 0; n < mWebViewList.size(); n++) { + WebView view = mWebViewList.get(n).getWebView(); + if (view != null) + view.setNetworkAvailable(isConnected); + } + } + }; } diff --git a/app/src/main/java/acr/browser/lightning/activity/IncognitoActivity.java b/app/src/main/java/acr/browser/lightning/activity/IncognitoActivity.java index 9b59c76..46a4f15 100644 --- a/app/src/main/java/acr/browser/lightning/activity/IncognitoActivity.java +++ b/app/src/main/java/acr/browser/lightning/activity/IncognitoActivity.java @@ -2,13 +2,12 @@ package acr.browser.lightning.activity; import android.content.Intent; import android.os.Build; -import android.os.Bundle; import android.view.Menu; import android.webkit.CookieManager; import android.webkit.CookieSyncManager; -import acr.browser.lightning.preference.PreferenceManager; import acr.browser.lightning.R; +import acr.browser.lightning.preference.PreferenceManager; @SuppressWarnings("deprecation") public class IncognitoActivity extends BrowserActivity { diff --git a/app/src/main/java/acr/browser/lightning/activity/MainActivity.java b/app/src/main/java/acr/browser/lightning/activity/MainActivity.java index 2c08b49..59d1f42 100644 --- a/app/src/main/java/acr/browser/lightning/activity/MainActivity.java +++ b/app/src/main/java/acr/browser/lightning/activity/MainActivity.java @@ -2,13 +2,12 @@ package acr.browser.lightning.activity; import android.content.Intent; import android.os.Build; -import android.os.Bundle; import android.view.Menu; import android.webkit.CookieManager; import android.webkit.CookieSyncManager; -import acr.browser.lightning.preference.PreferenceManager; import acr.browser.lightning.R; +import acr.browser.lightning.preference.PreferenceManager; @SuppressWarnings("deprecation") public class MainActivity extends BrowserActivity { diff --git a/app/src/main/java/acr/browser/lightning/activity/ReadingActivity.java b/app/src/main/java/acr/browser/lightning/activity/ReadingActivity.java index a96d321..b689269 100644 --- a/app/src/main/java/acr/browser/lightning/activity/ReadingActivity.java +++ b/app/src/main/java/acr/browser/lightning/activity/ReadingActivity.java @@ -1,11 +1,13 @@ package acr.browser.lightning.activity; import android.animation.ObjectAnimator; +import android.app.Activity; import android.app.ProgressDialog; -import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; +import android.graphics.PorterDuff; +import android.graphics.drawable.ColorDrawable; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AlertDialog; @@ -27,6 +29,7 @@ import acr.browser.lightning.constant.Constants; import acr.browser.lightning.preference.PreferenceManager; import acr.browser.lightning.reading.HtmlFetcher; import acr.browser.lightning.reading.JResult; +import acr.browser.lightning.utils.ThemeUtils; import acr.browser.lightning.utils.Utils; public class ReadingActivity extends AppCompatActivity { @@ -37,6 +40,8 @@ public class ReadingActivity extends AppCompatActivity { private String mUrl = null; private PreferenceManager mPreferences; private int mTextSize; + private ProgressDialog mProgressDialog; + private static final float XXLARGE = 30.0f; private static final float XLARGE = 26.0f; private static final float LARGE = 22.0f; @@ -48,11 +53,19 @@ public class ReadingActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { mPreferences = PreferenceManager.getInstance(); mInvert = mPreferences.getInvertColors(); + final int color; if (mInvert) { - this.setTheme(R.style.Theme_SettingsTheme_Dark); + setTheme(R.style.Theme_SettingsTheme_Dark); + color = ThemeUtils.getPrimaryColorDark(this); + getWindow().setBackgroundDrawable(new ColorDrawable(color)); + } else { + setTheme(R.style.Theme_SettingsTheme); + color = ThemeUtils.getPrimaryColor(this); + getWindow().setBackgroundDrawable(new ColorDrawable(color)); } super.onCreate(savedInstanceState); setContentView(R.layout.reading_view); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); @@ -98,6 +111,13 @@ public class ReadingActivity extends AppCompatActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.reading, menu); + MenuItem invert = menu.findItem(R.id.invert_item); + MenuItem textSize = menu.findItem(R.id.text_size_item); + int iconColor = mInvert ? ThemeUtils.getIconDarkThemeColor(this) : ThemeUtils.getIconLightThemeColor(this); + if (invert != null && invert.getIcon() != null) + invert.getIcon().setColorFilter(iconColor, PorterDuff.Mode.SRC_IN); + if (textSize != null && textSize.getIcon() != null) + textSize.getIcon().setColorFilter(iconColor, PorterDuff.Mode.SRC_IN); return super.onCreateOptionsMenu(menu); } @@ -117,23 +137,22 @@ public class ReadingActivity extends AppCompatActivity { private class PageLoader extends AsyncTask { - private final Context mContext; - private ProgressDialog mProgressDialog; + private final Activity mActivity; private String mTitleText; private List mBodyText; - public PageLoader(Context context) { - mContext = context; + public PageLoader(Activity activity) { + mActivity = activity; } @Override protected void onPreExecute() { super.onPreExecute(); - mProgressDialog = new ProgressDialog(mContext); + mProgressDialog = new ProgressDialog(mActivity); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); mProgressDialog.setCancelable(false); mProgressDialog.setIndeterminate(true); - mProgressDialog.setMessage(mContext.getString(R.string.loading)); + mProgressDialog.setMessage(mActivity.getString(R.string.loading)); mProgressDialog.show(); } @@ -160,7 +179,10 @@ public class ReadingActivity extends AppCompatActivity { @Override protected void onPostExecute(Void result) { - mProgressDialog.dismiss(); + if (mProgressDialog != null && mProgressDialog.isShowing()) { + mProgressDialog.dismiss(); + mProgressDialog = null; + } if (mTitleText.isEmpty() || mBodyText.isEmpty()) { setText(getString(R.string.untitled), getString(R.string.loading_failed)); } else { @@ -176,6 +198,8 @@ public class ReadingActivity extends AppCompatActivity { } private void setText(String title, String body) { + if (mTitle == null || mBody == null) + return; if (mTitle.getVisibility() == View.INVISIBLE) { mTitle.setAlpha(0.0f); mTitle.setVisibility(View.VISIBLE); @@ -199,6 +223,15 @@ public class ReadingActivity extends AppCompatActivity { } } + @Override + protected void onDestroy() { + if (mProgressDialog != null && mProgressDialog.isShowing()) { + mProgressDialog.dismiss(); + mProgressDialog = null; + } + super.onDestroy(); + } + @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { diff --git a/app/src/main/java/acr/browser/lightning/activity/ThemableActivity.java b/app/src/main/java/acr/browser/lightning/activity/ThemableActivity.java index 18130a8..443baab 100644 --- a/app/src/main/java/acr/browser/lightning/activity/ThemableActivity.java +++ b/app/src/main/java/acr/browser/lightning/activity/ThemableActivity.java @@ -33,9 +33,6 @@ public abstract class ThemableActivity extends AppCompatActivity { } private void restart() { - Intent intent = getIntent(); - finish(); - overridePendingTransition(0, 0); - startActivity(intent); + recreate(); } } diff --git a/app/src/main/java/acr/browser/lightning/activity/ThemableSettingsActivity.java b/app/src/main/java/acr/browser/lightning/activity/ThemableSettingsActivity.java index 12009c0..ebcb0fe 100644 --- a/app/src/main/java/acr/browser/lightning/activity/ThemableSettingsActivity.java +++ b/app/src/main/java/acr/browser/lightning/activity/ThemableSettingsActivity.java @@ -39,11 +39,6 @@ public abstract class ThemableSettingsActivity extends AppCompatPreferenceActivi } private void restart() { - final Bundle outState = new Bundle(); - onSaveInstanceState(outState); - final Intent intent = new Intent(this, getClass()); - finish(); - overridePendingTransition(0, 0); - startActivity(intent); + recreate(); } } diff --git a/app/src/main/java/acr/browser/lightning/constant/HistoryPage.java b/app/src/main/java/acr/browser/lightning/constant/HistoryPage.java index 45f07a7..b3b5f50 100644 --- a/app/src/main/java/acr/browser/lightning/constant/HistoryPage.java +++ b/app/src/main/java/acr/browser/lightning/constant/HistoryPage.java @@ -15,6 +15,7 @@ import acr.browser.lightning.activity.BrowserApp; import acr.browser.lightning.database.HistoryItem; import acr.browser.lightning.R; import acr.browser.lightning.database.HistoryDatabase; +import acr.browser.lightning.utils.Utils; public class HistoryPage { @@ -53,12 +54,14 @@ public class HistoryPage { historyBuilder.append(HistoryPage.END); File historyWebPage = new File(context.getFilesDir(), FILENAME); + FileWriter historyWriter = null; try { - FileWriter historyWriter = new FileWriter(historyWebPage, false); + historyWriter = new FileWriter(historyWebPage, false); historyWriter.write(historyBuilder.toString()); - historyWriter.close(); } catch (IOException e) { e.printStackTrace(); + } finally { + Utils.close(historyWriter); } return Constants.FILE + historyWebPage; } diff --git a/app/src/main/java/acr/browser/lightning/controller/BrowserController.java b/app/src/main/java/acr/browser/lightning/controller/BrowserController.java index 072648c..b76a7b1 100644 --- a/app/src/main/java/acr/browser/lightning/controller/BrowserController.java +++ b/app/src/main/java/acr/browser/lightning/controller/BrowserController.java @@ -54,4 +54,6 @@ public interface BrowserController { boolean proxyIsNotReady(); + void updateBookmarkIndicator(String url); + } diff --git a/app/src/main/java/acr/browser/lightning/database/BookmarkManager.java b/app/src/main/java/acr/browser/lightning/database/BookmarkManager.java index 57e541a..89052da 100644 --- a/app/src/main/java/acr/browser/lightning/database/BookmarkManager.java +++ b/app/src/main/java/acr/browser/lightning/database/BookmarkManager.java @@ -18,13 +18,12 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.HashSet; import java.util.List; import java.util.Locale; -import java.util.SortedMap; -import java.util.TreeMap; +import java.util.Set; import acr.browser.lightning.R; -import acr.browser.lightning.constant.Constants; import acr.browser.lightning.preference.PreferenceManager; import acr.browser.lightning.utils.Utils; @@ -36,8 +35,9 @@ public class BookmarkManager { private static final String FOLDER = "folder"; private static final String ORDER = "order"; private static final String FILE_BOOKMARKS = "bookmarks.dat"; - private static SortedMap mBookmarkMap = new TreeMap<>( - String.CASE_INSENSITIVE_ORDER); + private static Set mBookmarkSearchSet = new HashSet<>(); + private static final List mBookmarkList = new ArrayList<>(); + private static String mCurrentFolder = ""; private static BookmarkManager mInstance; public static BookmarkManager getInstance(Context context) { @@ -49,19 +49,27 @@ public class BookmarkManager { private BookmarkManager(Context context) { mContext = context; - mBookmarkMap = getBookmarkUrls(); + mBookmarkList.clear(); + mBookmarkList.addAll(getAllBookmarks(true)); + mBookmarkSearchSet = getBookmarkUrls(mBookmarkList); + } + + public boolean isBookmark(String url) { + return mBookmarkSearchSet.contains(url); } /** - * This method adds the the HistoryItem item to permanent bookmark storage + * This method adds the the HistoryItem item to permanent bookmark storage. + * It returns true if the operation was successful. * * @param item the item to add */ public synchronized boolean addBookmark(HistoryItem item) { File bookmarksFile = new File(mContext.getFilesDir(), FILE_BOOKMARKS); - if (item.getUrl() == null || mBookmarkMap.containsKey(item.getUrl())) { + if (item.getUrl() == null || mBookmarkSearchSet.contains(item.getUrl())) { return false; } + mBookmarkList.add(item); BufferedWriter bookmarkWriter = null; try { bookmarkWriter = new BufferedWriter(new FileWriter(bookmarksFile, true)); @@ -72,8 +80,7 @@ public class BookmarkManager { object.put(ORDER, item.getOrder()); bookmarkWriter.write(object.toString()); bookmarkWriter.newLine(); - bookmarkWriter.close(); - mBookmarkMap.put(item.getUrl(), 1); + mBookmarkSearchSet.add(item.getUrl()); } catch (IOException | JSONException e) { e.printStackTrace(); } finally { @@ -94,14 +101,15 @@ public class BookmarkManager { bookmarkWriter = new BufferedWriter(new FileWriter(bookmarksFile, true)); JSONObject object = new JSONObject(); for (HistoryItem item : list) { - if (item.getUrl() != null && !mBookmarkMap.containsKey(item.getUrl())) { + if (item.getUrl() != null && !mBookmarkSearchSet.contains(item.getUrl())) { object.put(TITLE, item.getTitle()); object.put(URL, item.getUrl()); object.put(FOLDER, item.getFolder()); object.put(ORDER, item.getOrder()); bookmarkWriter.write(object.toString()); bookmarkWriter.newLine(); - mBookmarkMap.put(item.getUrl(), 1); + mBookmarkSearchSet.add(item.getUrl()); + mBookmarkList.add(item); } } } catch (IOException | JSONException e) { @@ -112,20 +120,23 @@ public class BookmarkManager { } /** - * This method deletes the bookmark with the given url + * This method deletes the bookmark with the given url. It returns + * true if the deletion was successful. * - * @param url the url of the bookmark to delete + * @param deleteItem the bookmark item to delete */ - public synchronized boolean deleteBookmark(String url) { + public synchronized boolean deleteBookmark(HistoryItem deleteItem) { List list; - if (url == null) { + if (deleteItem == null || deleteItem.getIsFolder()) { return false; } - mBookmarkMap.remove(url); - list = getBookmarks(false); + mBookmarkSearchSet.remove(deleteItem.getUrl()); + mBookmarkList.remove(deleteItem); + list = getAllBookmarks(false); File bookmarksFile = new File(mContext.getFilesDir(), FILE_BOOKMARKS); boolean bookmarkDeleted = false; BufferedWriter fileWriter = null; + String url = deleteItem.getUrl(); try { fileWriter = new BufferedWriter(new FileWriter(bookmarksFile, false)); JSONObject object = new JSONObject(); @@ -149,12 +160,66 @@ public class BookmarkManager { return bookmarkDeleted; } + /** + * This method edits a particular bookmark in the bookmark database + * + * @param oldItem This is the old item that you wish to edit + * @param newItem This is the new item that will overwrite the old item + */ + public synchronized void editBookmark(HistoryItem oldItem, HistoryItem newItem) { + List list; + if (oldItem == null || newItem == null || oldItem.getIsFolder()) { + return; + } + mBookmarkList.remove(oldItem); + mBookmarkList.add(newItem); + if (!oldItem.getUrl().equals(newItem.getUrl())) { + // Update the BookmarkMap if the URL has been changed + mBookmarkSearchSet.remove(oldItem.getUrl()); + mBookmarkSearchSet.add(newItem.getUrl()); + } + if (newItem.getUrl().length() == 0) { + deleteBookmark(oldItem); + return; + } + if (newItem.getTitle().length() == 0) { + newItem.setTitle(mContext.getString(R.string.untitled)); + } + list = getAllBookmarks(false); + File bookmarksFile = new File(mContext.getFilesDir(), FILE_BOOKMARKS); + BufferedWriter fileWriter = null; + try { + fileWriter = new BufferedWriter(new FileWriter(bookmarksFile, false)); + JSONObject object = new JSONObject(); + final String url = oldItem.getUrl(); + for (HistoryItem item : list) { + if (!item.getUrl().equalsIgnoreCase(url)) { + object.put(TITLE, item.getTitle()); + object.put(URL, item.getUrl()); + object.put(FOLDER, item.getFolder()); + object.put(ORDER, item.getOrder()); + } else { + object.put(TITLE, newItem.getTitle()); + object.put(URL, newItem.getUrl()); + object.put(FOLDER, newItem.getFolder()); + object.put(ORDER, newItem.getOrder()); + } + fileWriter.write(object.toString()); + fileWriter.newLine(); + } + } catch (IOException | JSONException e) { + e.printStackTrace(); + } finally { + Utils.close(fileWriter); + } + } + /** * This method exports the stored bookmarks to a text file in the device's * external download directory */ public synchronized void exportBookmarks(Activity activity) { - List bookmarkList = getBookmarks(true); + List bookmarkList = getAllBookmarks(true); File bookmarksExport = new File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "BookmarksExport.txt"); @@ -189,11 +254,13 @@ public class BookmarkManager { } /** - * This method returns a list of all stored bookmarks + * This method returns a list of ALL stored bookmarks. + * This is a disk-bound operation and should not be + * done very frequently. * * @return returns a list of bookmarks that can be sorted */ - public synchronized List getBookmarks(boolean sort) { + public synchronized List getAllBookmarks(boolean sort) { List bookmarks = new ArrayList<>(); File bookmarksFile = new File(mContext.getFilesDir(), FILE_BOOKMARKS); BufferedReader bookmarksReader = null; @@ -222,73 +289,86 @@ public class BookmarkManager { } /** - * This method returns a list of bookmarks located in the specified folder + * This method returns a list of bookmarks and folders located in the specified folder. + * This method should generally be used by the UI when it needs a list to display to the + * user as it returns a subset of all bookmarks and includes folders as well which are + * really 'fake' bookmarks. * * @param folder the name of the folder to retrieve bookmarks from * @return a list of bookmarks found in that folder */ - public synchronized List getBookmarksFromFolder(String folder) { + public synchronized List getBookmarksFromFolder(String folder, boolean sort) { List bookmarks = new ArrayList<>(); - File bookmarksFile = new File(mContext.getFilesDir(), FILE_BOOKMARKS); - BufferedReader bookmarksReader = null; - try { - bookmarksReader = new BufferedReader(new FileReader(bookmarksFile)); - String line; - while ((line = bookmarksReader.readLine()) != null) { - JSONObject object = new JSONObject(line); - if (object.getString(FOLDER).equals(folder)) { - HistoryItem item = new HistoryItem(); - item.setTitle(object.getString(TITLE)); - item.setUrl(object.getString(URL)); - item.setFolder(object.getString(FOLDER)); - item.setOrder(object.getInt(ORDER)); - item.setImageId(R.drawable.ic_bookmark); - bookmarks.add(item); - } - } - bookmarksReader.close(); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } finally { - Utils.close(bookmarksReader); +// File bookmarksFile = new File(mContext.getFilesDir(), FILE_BOOKMARKS); +// BufferedReader bookmarksReader = null; + if (folder == null || folder.length() == 0) { + bookmarks.addAll(getFolders(sort)); + folder = ""; + } + mCurrentFolder = folder; + for (int n = 0; n < mBookmarkList.size(); n++) { + if (mBookmarkList.get(n).getFolder().equals(folder)) + bookmarks.add(mBookmarkList.get(n)); + } +// try { +// bookmarksReader = new BufferedReader(new FileReader(bookmarksFile)); +// String line; +// while ((line = bookmarksReader.readLine()) != null) { +// JSONObject object = new JSONObject(line); +// if (object.getString(FOLDER).equals(folder)) { +// HistoryItem item = new HistoryItem(); +// item.setTitle(object.getString(TITLE)); +// item.setUrl(object.getString(URL)); +// item.setFolder(object.getString(FOLDER)); +// item.setOrder(object.getInt(ORDER)); +// item.setImageId(R.drawable.ic_bookmark); +// bookmarks.add(item); +// } +// } +// } catch (IOException | JSONException e) { +// e.printStackTrace(); +// } finally { +// Utils.close(bookmarksReader); +// } + if (sort) { + Collections.sort(bookmarks, new SortIgnoreCase()); } return bookmarks; } + /** + * Tells you if you are at the root folder or in a subfolder + * + * @return returns true if you are in the root folder + */ + public boolean isRootFolder() { + return mCurrentFolder.length() == 0; + } + /** * Method is used internally for searching the bookmarks * * @return a sorted map of all bookmarks, useful for seeing if a bookmark exists */ - private synchronized SortedMap getBookmarkUrls() { - SortedMap map = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - File bookmarksFile = new File(mContext.getFilesDir(), FILE_BOOKMARKS); - BufferedReader bookmarksReader = null; - try { - bookmarksReader = new BufferedReader(new FileReader(bookmarksFile)); - String line; - while ((line = bookmarksReader.readLine()) != null) { - JSONObject object = new JSONObject(line); - map.put(object.getString(URL), 1); - } - bookmarksReader.close(); - } catch (JSONException | IOException e) { - e.printStackTrace(); - } finally { - Utils.close(bookmarksReader); + private static Set getBookmarkUrls(List list) { + Set set = new HashSet<>(); + for (int n = 0; n < list.size(); n++) { + if (!mBookmarkList.get(n).getIsFolder()) + set.add(mBookmarkList.get(n).getUrl()); } - return map; + return set; } /** - * This method returns a list of all folders + * This method returns a list of all folders. + * Folders cannot be empty as they are generated from + * the list of bookmarks that have non-empty folder fields. * * @return a list of all folders */ - public synchronized List getFolders() { + public synchronized List getFolders(boolean sort) { List folders = new ArrayList<>(); - SortedMap folderMap = new TreeMap<>( - String.CASE_INSENSITIVE_ORDER); + Set folderMap = new HashSet<>(); File bookmarksFile = new File(mContext.getFilesDir(), FILE_BOOKMARKS); BufferedReader bookmarksReader = null; try { @@ -297,11 +377,12 @@ public class BookmarkManager { while ((line = bookmarksReader.readLine()) != null) { JSONObject object = new JSONObject(line); String folderName = object.getString(FOLDER); - if (!folderName.isEmpty() && !folderMap.containsKey(folderName)) { + if (!folderName.isEmpty() && !folderMap.contains(folderName)) { HistoryItem item = new HistoryItem(); item.setTitle(folderName); - item.setUrl(Constants.FOLDER + folderName); - folderMap.put(folderName, 1); + item.setUrl(folderName); + item.setIsFolder(true); + folderMap.add(folderName); folders.add(item); } } @@ -310,6 +391,9 @@ public class BookmarkManager { } finally { Utils.close(bookmarksReader); } + if (sort) { + Collections.sort(folders, new SortIgnoreCase()); + } return folders; } @@ -406,12 +490,14 @@ public class BookmarkManager { bookmarkWriter = new BufferedWriter(new FileWriter(bookmarksFile, false)); JSONObject object = new JSONObject(); for (HistoryItem item : list) { - object.put(TITLE, item.getTitle()); - object.put(URL, item.getUrl()); - object.put(FOLDER, item.getFolder()); - object.put(ORDER, item.getOrder()); - bookmarkWriter.write(object.toString()); - bookmarkWriter.newLine(); + if (!item.getIsFolder()) { + object.put(TITLE, item.getTitle()); + object.put(URL, item.getUrl()); + object.put(FOLDER, item.getFolder()); + object.put(ORDER, item.getOrder()); + bookmarkWriter.write(object.toString()); + bookmarkWriter.newLine(); + } } } catch (IOException | JSONException e) { e.printStackTrace(); diff --git a/app/src/main/java/acr/browser/lightning/database/HistoryItem.java b/app/src/main/java/acr/browser/lightning/database/HistoryItem.java index 2078b9d..6bb3c00 100644 --- a/app/src/main/java/acr/browser/lightning/database/HistoryItem.java +++ b/app/src/main/java/acr/browser/lightning/database/HistoryItem.java @@ -16,12 +16,21 @@ public class HistoryItem implements Comparable { private Bitmap mBitmap = null; private int mImageId = 0; private int mOrder = 0; + private boolean mIsFolder = false; // Empty constructor public HistoryItem() { } + public HistoryItem(HistoryItem item) { + this.mUrl = item.mUrl; + this.mTitle = item.mTitle; + this.mFolder = item.mFolder; + this.mOrder = item.mOrder; + this.mIsFolder = item.mIsFolder; + } + // constructor public HistoryItem(int id, String url, String title) { this.mId = id; @@ -107,6 +116,14 @@ public class HistoryItem implements Comparable { this.mTitle = (title == null) ? "" : title; } + public void setIsFolder(boolean isFolder) { + mIsFolder = isFolder; + } + + public boolean getIsFolder() { + return mIsFolder; + } + @Override public String toString() { return mTitle; 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 bc06e04..7285cc8 100644 --- a/app/src/main/java/acr/browser/lightning/fragment/DisplaySettingsFragment.java +++ b/app/src/main/java/acr/browser/lightning/fragment/DisplaySettingsFragment.java @@ -10,6 +10,14 @@ import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.PreferenceFragment; import android.support.v7.app.AlertDialog; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +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.preference.PreferenceManager; @@ -23,6 +31,12 @@ public class DisplaySettingsFragment extends PreferenceFragment implements Prefe 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 PreferenceManager mPreferences; @@ -117,28 +131,64 @@ public class DisplaySettingsFragment extends PreferenceFragment implements Prefe } private void textSizePicker() { - AlertDialog.Builder picker = new AlertDialog.Builder(mActivity); - picker.setTitle(getResources().getString(R.string.title_text_size)); + 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 SeekBar.OnSeekBarChangeListener() { - int n = mPreferences.getTextSize(); + @Override + public void onProgressChanged(SeekBar view, int size, boolean user) { + sample.setTextSize(getTextSize(size)); + } - picker.setSingleChoiceItems(R.array.text_size, n - 1, - new DialogInterface.OnClickListener() { + @Override + public void onStartTrackingTouch(SeekBar arg0) { + } - @Override - public void onClick(DialogInterface dialog, int which) { - mPreferences.setTextSize(which + 1); - } - }); - picker.setNeutralButton(getResources().getString(R.string.action_ok), - new DialogInterface.OnClickListener() { + @Override + public void onStopTrackingTouch(SeekBar arg0) { + } - @Override - public void onClick(DialogInterface dialog, int which) { + }); + final int MAX = 5; + bar.setMax(MAX); + bar.setProgress(MAX - mPreferences.getTextSize()); + builder.setView(view); + builder.setTitle(R.string.title_text_size); + builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - } - }); - picker.show(); + @Override + public void onClick(DialogInterface arg0, int arg1) { + mPreferences.setTextSize(MAX - bar.getProgress()); + } + + }); + builder.show(); + } + + private 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() { diff --git a/app/src/main/java/acr/browser/lightning/object/SearchAdapter.java b/app/src/main/java/acr/browser/lightning/object/SearchAdapter.java index 7fd3865..750ae67 100644 --- a/app/src/main/java/acr/browser/lightning/object/SearchAdapter.java +++ b/app/src/main/java/acr/browser/lightning/object/SearchAdapter.java @@ -1,10 +1,10 @@ package acr.browser.lightning.object; -import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; -import android.content.res.Resources.Theme; import android.graphics.Color; +import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.AsyncTask; @@ -40,6 +40,7 @@ import acr.browser.lightning.database.BookmarkManager; import acr.browser.lightning.database.HistoryDatabase; import acr.browser.lightning.database.HistoryItem; import acr.browser.lightning.preference.PreferenceManager; +import acr.browser.lightning.utils.ThemeUtils; import acr.browser.lightning.utils.Utils; public class SearchAdapter extends BaseAdapter implements Filterable { @@ -59,15 +60,15 @@ public class SearchAdapter extends BaseAdapter implements Filterable { private static final String ENCODING = "ISO-8859-1"; private static final long INTERVAL_DAY = 86400000; private final String mSearchSubtitle; - private static final int API = Build.VERSION.SDK_INT; - private final Theme mTheme; private SearchFilter mFilter; + private final Drawable mSearchDrawable; + private final Drawable mHistoryDrawable; + private final Drawable mBookmarkDrawable; public SearchAdapter(Context context, boolean dark, boolean incognito) { mDatabaseHandler = HistoryDatabase.getInstance(context.getApplicationContext()); - mTheme = context.getTheme(); mBookmarkManager = BookmarkManager.getInstance(context.getApplicationContext()); - mAllBookmarks.addAll(mBookmarkManager.getBookmarks(true)); + mAllBookmarks.addAll(mBookmarkManager.getAllBookmarks(true)); mUseGoogle = PreferenceManager.getInstance().getGoogleSearchSuggestionsEnabled(); mContext = context; mSearchSubtitle = mContext.getString(R.string.suggestion); @@ -81,6 +82,21 @@ public class SearchAdapter extends BaseAdapter implements Filterable { } }); + int color = mDarkTheme ? ThemeUtils.getIconDarkThemeColor(context) : ThemeUtils.getIconLightThemeColor(context); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + mSearchDrawable = context.getDrawable(R.drawable.ic_search); + mBookmarkDrawable = context.getDrawable(R.drawable.ic_bookmark); + mHistoryDrawable = context.getDrawable(R.drawable.ic_history); + } else { + mSearchDrawable = context.getResources().getDrawable(R.drawable.ic_search); + mBookmarkDrawable = context.getResources().getDrawable(R.drawable.ic_bookmark); + mHistoryDrawable = context.getResources().getDrawable(R.drawable.ic_history); + } + if (mSearchDrawable != null && mBookmarkDrawable != null && mHistoryDrawable != null) { + mSearchDrawable.setColorFilter(color, PorterDuff.Mode.SRC_IN); + mBookmarkDrawable.setColorFilter(color, PorterDuff.Mode.SRC_IN); + mHistoryDrawable.setColorFilter(color, PorterDuff.Mode.SRC_IN); + } delete.start(); } @@ -117,7 +133,7 @@ public class SearchAdapter extends BaseAdapter implements Filterable { public void refreshBookmarks() { mAllBookmarks.clear(); - mAllBookmarks.addAll(mBookmarkManager.getBookmarks(true)); + mAllBookmarks.addAll(mBookmarkManager.getAllBookmarks(true)); } @Override @@ -135,8 +151,6 @@ public class SearchAdapter extends BaseAdapter implements Filterable { return 0; } - @SuppressWarnings("deprecation") - @SuppressLint("NewApi") @Override public View getView(int position, View convertView, ViewGroup parent) { SuggestionHolder holder; @@ -158,42 +172,34 @@ public class SearchAdapter extends BaseAdapter implements Filterable { holder.mTitle.setText(web.getTitle()); holder.mUrl.setText(web.getUrl()); - int imageId = R.drawable.ic_bookmark; + Drawable image; switch (web.getImageId()) { case R.drawable.ic_bookmark: { - if (!mDarkTheme) { - imageId = R.drawable.ic_bookmark; - } else { + if (mDarkTheme) holder.mTitle.setTextColor(Color.WHITE); - imageId = R.drawable.ic_bookmark_dark; - } + image = mBookmarkDrawable; break; } case R.drawable.ic_search: { - if (!mDarkTheme) { - imageId = R.drawable.ic_search; - } else { + if (mDarkTheme) holder.mTitle.setTextColor(Color.WHITE); - imageId = R.drawable.ic_search_dark; - } + image = mSearchDrawable; break; } case R.drawable.ic_history: { - if (!mDarkTheme) { - imageId = R.drawable.ic_history; - } else { + if (mDarkTheme) holder.mTitle.setTextColor(Color.WHITE); - imageId = R.drawable.ic_history_dark; - } + image = mHistoryDrawable; break; } + default: + if (mDarkTheme) + holder.mTitle.setTextColor(Color.WHITE); + image = mSearchDrawable; + break; } - if (API < Build.VERSION_CODES.LOLLIPOP) { - holder.mImage.setImageDrawable(mContext.getResources().getDrawable(imageId)); - } else { - holder.mImage.setImageDrawable(mContext.getResources().getDrawable(imageId, mTheme)); - } + holder.mImage.setImageDrawable(image); return convertView; } @@ -339,26 +345,30 @@ public class SearchAdapter extends BaseAdapter implements Filterable { if (!isNetworkConnected(mContext)) { return cacheFile; } + InputStream in = null; + FileOutputStream fos = null; try { URL url = new URL("http://google.com/complete/search?q=" + query + "&output=toolbar&hl=en"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); - InputStream in = connection.getInputStream(); + in = connection.getInputStream(); if (in != null) { - FileOutputStream fos = new FileOutputStream(cacheFile); + fos = new FileOutputStream(cacheFile); int buffer; while ((buffer = in.read()) != -1) { fos.write(buffer); } fos.flush(); - fos.close(); } cacheFile.setLastModified(System.currentTimeMillis()); } catch (Exception e) { e.printStackTrace(); + } finally { + Utils.close(in); + Utils.close(fos); } return cacheFile; } diff --git a/app/src/main/java/acr/browser/lightning/reading/ArticleTextExtractor.java b/app/src/main/java/acr/browser/lightning/reading/ArticleTextExtractor.java index 0bc9a4e..ae22cd3 100644 --- a/app/src/main/java/acr/browser/lightning/reading/ArticleTextExtractor.java +++ b/app/src/main/java/acr/browser/lightning/reading/ArticleTextExtractor.java @@ -19,7 +19,7 @@ import org.jsoup.select.Elements; /** * This class is thread safe. - * + * * @author Alex P (ifesdjeen from jreadability) * @author Peter Karich */ @@ -246,7 +246,7 @@ public class ArticleTextExtractor { /** * Tries to extract an image url from metadata if determineImageSource * failed - * + * * @return image url or empty str */ protected String extractImageUrl(Document doc) { @@ -291,7 +291,7 @@ public class ArticleTextExtractor { * weighting child nodes. Since it's impossible to predict which exactly * names, ids or class names will be used in HTML, major role is played by * child nodes - * + * * @param e * Element to weight, along with child nodes */ @@ -311,7 +311,7 @@ public class ArticleTextExtractor { * 3 points for every element that's nested 2 levels deep. This way we give * more chances to extract the element that has less nested levels, * increasing probability of the correct extraction. - * + * * @param rootEl * Element, who's child nodes will be weighted */ @@ -493,7 +493,7 @@ public class ArticleTextExtractor { * Prepares document. Currently only stipping unlikely candidates, since * from time to time they're getting more score than good ones especially in * cases when major text is short. - * + * * @param doc * document to prepare. Passed as reference, and changed inside * of function @@ -506,7 +506,7 @@ public class ArticleTextExtractor { /** * Removes unlikely candidates from HTML. Currently takes id and class name * and matches them against list of patterns - * + * * @param doc * document to strip unlikely candidates from */ @@ -601,9 +601,9 @@ public class ArticleTextExtractor { /** * Comparator for Image by weight - * + * * @author Chris Alexander, chris@chris-alexander.co.uk - * + * */ public class ImageComparator implements Comparator { diff --git a/app/src/main/java/acr/browser/lightning/receiver/NetworkReceiver.java b/app/src/main/java/acr/browser/lightning/receiver/NetworkReceiver.java new file mode 100644 index 0000000..3c39475 --- /dev/null +++ b/app/src/main/java/acr/browser/lightning/receiver/NetworkReceiver.java @@ -0,0 +1,22 @@ +package acr.browser.lightning.receiver; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; + +public class NetworkReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + } + + public static boolean isConnected(Context context) { + ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + if (cm == null) + return false; + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); + return activeNetwork != null && activeNetwork.isConnected(); + } +} \ No newline at end of file diff --git a/app/src/main/java/acr/browser/lightning/utils/ThemeUtils.java b/app/src/main/java/acr/browser/lightning/utils/ThemeUtils.java index 36ca4fb..ad1084c 100644 --- a/app/src/main/java/acr/browser/lightning/utils/ThemeUtils.java +++ b/app/src/main/java/acr/browser/lightning/utils/ThemeUtils.java @@ -1,10 +1,24 @@ package acr.browser.lightning.utils; import android.content.Context; +import android.content.res.Resources; import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.os.Build; import android.support.annotation.AttrRes; +import android.support.annotation.DrawableRes; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.util.TypedValue; +import android.widget.ImageView; import acr.browser.lightning.R; @@ -31,4 +45,44 @@ public class ThemeUtils { return color; } + public static int getIconLightThemeColor(@NonNull Context context) { + return context.getResources().getColor(R.color.icon_light_theme); + } + + public static int getIconDarkThemeColor(@NonNull Context context) { + return context.getResources().getColor(R.color.icon_dark_theme); + } + + public static void themeImageView(ImageView icon, Context context, boolean dark) { + int color = dark ? getIconDarkThemeColor(context) : getIconLightThemeColor(context); + icon.setColorFilter(color, PorterDuff.Mode.SRC_IN); + } + + public static Bitmap getThemedBitmap(Context context, @DrawableRes int res, boolean dark) { + int color = dark ? getIconDarkThemeColor(context) : getIconLightThemeColor(context); + Bitmap sourceBitmap = BitmapFactory.decodeResource(context.getResources(), res); + Bitmap resultBitmap = Bitmap.createBitmap(sourceBitmap.getWidth(), sourceBitmap.getHeight(), Bitmap.Config.ARGB_8888); + Paint p = new Paint(); + ColorFilter filter = new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN); + p.setColorFilter(filter); + Canvas canvas = new Canvas(resultBitmap); + canvas.drawBitmap(sourceBitmap, 0, 0, p); + sourceBitmap.recycle(); + return resultBitmap; + } + + @Nullable + public static Drawable getLightThemedDrawable(@NonNull Context context, @DrawableRes int res){ + final Drawable drawable; + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + drawable = context.getResources().getDrawable(res); + } else { + drawable = context.getDrawable(res); + } + if (drawable == null) + return null; + drawable.mutate(); + drawable.setColorFilter(getIconLightThemeColor(context), PorterDuff.Mode.SRC_IN); + return drawable; + } } diff --git a/app/src/main/java/acr/browser/lightning/utils/Utils.java b/app/src/main/java/acr/browser/lightning/utils/Utils.java index 5b208e3..6ef4f22 100644 --- a/app/src/main/java/acr/browser/lightning/utils/Utils.java +++ b/app/src/main/java/acr/browser/lightning/utils/Utils.java @@ -15,7 +15,12 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; +import android.graphics.drawable.Drawable; +import android.os.Build; import android.os.Environment; +import android.support.annotation.DrawableRes; +import android.support.annotation.IntegerRes; +import android.support.annotation.NonNull; import android.support.annotation.StringRes; import android.support.design.widget.Snackbar; import android.support.v7.app.AlertDialog; @@ -38,9 +43,6 @@ import acr.browser.lightning.download.DownloadHandler; public final class Utils { - private Utils() { - } - public static void downloadFile(final Activity activity, final String url, final String userAgent, final String contentDisposition) { String fileName = URLUtil.guessFileName(url, null, null); @@ -75,15 +77,13 @@ public final class Utils { alert.show(); } - public static void showSnackbar(Activity activity, @StringRes int resource) { - if (activity == null) return; + public static void showSnackbar(@NonNull Activity activity, @StringRes int resource) { View view = activity.findViewById(android.R.id.content); if (view == null) return; Snackbar.make(view, resource, Snackbar.LENGTH_SHORT).show(); } - public static void showSnackbar(Activity activity, String message) { - if (activity == null) return; + public static void showSnackbar(@NonNull Activity activity, String message) { View view = activity.findViewById(android.R.id.content); if (view == null) return; Snackbar.make(view, message, Snackbar.LENGTH_SHORT).show(); @@ -232,23 +232,6 @@ public final class Utils { return false; } - public static Bitmap getWebpageBitmap(Resources resources, boolean dark) { - if (dark) { - if (mWebIconDark == null) { - mWebIconDark = BitmapFactory.decodeResource(resources, R.drawable.ic_webpage_dark); - } - return mWebIconDark; - } else { - if (mWebIconLight == null) { - mWebIconLight = BitmapFactory.decodeResource(resources, R.drawable.ic_webpage); - } - return mWebIconLight; - } - } - - private static Bitmap mWebIconLight; - private static Bitmap mWebIconDark; - public static void close(Closeable closeable) { if (closeable == null) return; @@ -258,4 +241,13 @@ public final class Utils { e.printStackTrace(); } } + + public static Drawable getDrawable(Context context, @DrawableRes int res) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + return context.getDrawable(res); + } else { + return context.getResources().getDrawable(res); + } + } + } diff --git a/app/src/main/java/acr/browser/lightning/view/LightningView.java b/app/src/main/java/acr/browser/lightning/view/LightningView.java index 953837f..a82a7a6 100644 --- a/app/src/main/java/acr/browser/lightning/view/LightningView.java +++ b/app/src/main/java/acr/browser/lightning/view/LightningView.java @@ -62,6 +62,7 @@ import acr.browser.lightning.download.LightningDownloadListener; import acr.browser.lightning.preference.PreferenceManager; import acr.browser.lightning.utils.AdBlock; import acr.browser.lightning.utils.IntentUtils; +import acr.browser.lightning.utils.ThemeUtils; import acr.browser.lightning.utils.Utils; public class LightningView { @@ -82,6 +83,7 @@ public class LightningView { private boolean isForegroundTab; private boolean mTextReflow = false; private boolean mInvertPage = false; + private boolean mToggleDesktop = false; private static float mMaxFling; private static final int API = android.os.Build.VERSION.SDK_INT; private static final int SCROLL_UP_THRESHOLD = Utils.convertDpToPixels(10); @@ -91,8 +93,6 @@ public class LightningView { 0, 0, 0, 1.0f, 0 // alpha }; - @SuppressWarnings("deprecation") - @SuppressLint("NewApi") public LightningView(Activity activity, String url, boolean darkTheme) { mActivity = activity; @@ -100,7 +100,7 @@ public class LightningView { mTitle = new Title(activity, darkTheme); mAdBlock = AdBlock.getInstance(activity.getApplicationContext()); - mWebpageBitmap = Utils.getWebpageBitmap(activity.getResources(), darkTheme); + mWebpageBitmap = mTitle.mDefaultIcon; mMaxFling = ViewConfiguration.get(activity).getScaledMaximumFlingVelocity(); @@ -119,7 +119,7 @@ public class LightningView { mWebView.setAlwaysDrawnWithCacheEnabled(false); mWebView.setBackgroundColor(0); - if (API > 15) { + if (API >= Build.VERSION_CODES.JELLY_BEAN) { mWebView.setBackground(null); mWebView.getRootView().setBackground(null); } else if (mWebView.getRootView() != null) { @@ -127,6 +127,7 @@ public class LightningView { } mWebView.setScrollbarFadingEnabled(true); mWebView.setSaveEnabled(true); + mWebView.setNetworkAvailable(true); mWebView.setWebChromeClient(new LightningChromeClient(activity)); mWebView.setWebViewClient(new LightningWebClient(activity)); mWebView.setDownloadListener(new LightningDownloadListener(activity)); @@ -238,12 +239,14 @@ public class LightningView { homepageBuilder.append(StartPage.END); File homepage = new File(mActivity.getFilesDir(), "homepage.html"); + FileWriter hWriter = null; try { - FileWriter hWriter = new FileWriter(homepage, false); + hWriter = new FileWriter(homepage, false); hWriter.write(homepageBuilder.toString()); - hWriter.close(); } catch (IOException e) { e.printStackTrace(); + } finally { + Utils.close(hWriter); } return Constants.FILE + homepage; @@ -284,24 +287,7 @@ public class LightningView { } } - switch (mPreferences.getUserAgentChoice()) { - case 1: - if (API > 16) { - mSettings.setUserAgentString(WebSettings.getDefaultUserAgent(context)); - } else { - mSettings.setUserAgentString(mDefaultUserAgent); - } - break; - case 2: - mSettings.setUserAgentString(Constants.DESKTOP_USER_AGENT); - break; - case 3: - mSettings.setUserAgentString(Constants.MOBILE_USER_AGENT); - break; - case 4: - mSettings.setUserAgentString(mPreferences.getUserAgentString(mDefaultUserAgent)); - break; - } + setUserAgent(context, mPreferences.getUserAgentChoice()); if (mPreferences.getSavePasswordsEnabled() && !mBrowserController.isIncognito()) { if (API < 18) { @@ -342,12 +328,15 @@ public class LightningView { mSettings.setUseWideViewPort(mPreferences.getUseWideViewportEnabled()); mSettings.setLoadWithOverviewMode(mPreferences.getOverviewModeEnabled()); switch (mPreferences.getTextSize()) { - case 1: + case 0: mSettings.setTextZoom(200); break; - case 2: + case 1: mSettings.setTextZoom(150); break; + case 2: + mSettings.setTextZoom(125); + break; case 3: mSettings.setTextZoom(100); break; @@ -404,6 +393,37 @@ public class LightningView { } } + public void toggleDesktopUA(@NonNull Context context) { + if (mWebView == null) + return; + if (!mToggleDesktop) + mWebView.getSettings().setUserAgentString(Constants.DESKTOP_USER_AGENT); + else + setUserAgent(context, mPreferences.getUserAgentChoice()); + mToggleDesktop = !mToggleDesktop; + } + + public void setUserAgent(Context context, int choice) { + switch (choice) { + case 1: + if (API > 16) { + mSettings.setUserAgentString(WebSettings.getDefaultUserAgent(context)); + } else { + mSettings.setUserAgentString(mDefaultUserAgent); + } + break; + case 2: + mSettings.setUserAgentString(Constants.DESKTOP_USER_AGENT); + break; + case 3: + mSettings.setUserAgentString(Constants.MOBILE_USER_AGENT); + break; + case 4: + mSettings.setUserAgentString(mPreferences.getUserAgentString(mDefaultUserAgent)); + break; + } + } + public boolean isShown() { return mWebView != null && mWebView.isShown(); } @@ -685,6 +705,7 @@ public class LightningView { public void onPageFinished(WebView view, String url) { if (view.isShown()) { mBrowserController.updateUrl(url, true); + mBrowserController.updateBookmarkIndicator(url); view.postInvalidate(); } if (view.getTitle() == null || view.getTitle().isEmpty()) { @@ -702,6 +723,7 @@ public class LightningView { public void onPageStarted(WebView view, String url, Bitmap favicon) { if (isShown()) { mBrowserController.updateUrl(url, false); + mBrowserController.updateBookmarkIndicator(url); mBrowserController.showActionBar(); } mTitle.setFavicon(mWebpageBitmap); @@ -1042,7 +1064,7 @@ public class LightningView { private final Bitmap mDefaultIcon; public Title(Context context, boolean darkTheme) { - mDefaultIcon = Utils.getWebpageBitmap(context.getResources(), darkTheme); + mDefaultIcon = ThemeUtils.getThemedBitmap(context, R.drawable.ic_webpage, darkTheme); mFavicon = mDefaultIcon; mTitle = mActivity.getString(R.string.action_new_tab); } diff --git a/app/src/main/res/drawable-hdpi/ic_action_back.png b/app/src/main/res/drawable-hdpi/ic_action_back.png index 59af5caa8095576dce25c1ffd99d42522d2a652a..11b4ddfd257270cb3d87f1cb3305f5bb39cae023 100644 GIT binary patch delta 184 zcmV;p07w6+0@MMJB!8PpL_t(|+U=Oz3P3;@21O}{*W}iNAaA9_L;1H>xp25}$fuc_ za`~@@wSoWu0001KX0_URulRa4cgq5PpOE}ReD)g6RX>|0H?pIgQZaJ+NKUDGPR$>3k~vcD m9qJ3UL%sZO6#xJL00m~zG#!a28&gcM(vrLxu@BjYoacoDr3(Y5f>u#Rgm zJO3j7Mq|uYUQc>o^G(S-iI=sVaE2iMloB68m{NT1v`N%_)qnf4Nu&*q_?EP(P#TtL zL-C_e8(BZdS6L~gmbvJ?Ut~#}t|*(d|9jfdKvxF7DIsa%b58zj0KSPo#VEw-JBWj9 zh$gVh>0LTS6I$yz>iFdTe*|NK=|mGurvZ%?+lISv6Kd%3`eRSPUT_cuL5u@eC{mZA U=*5@I00000Ne4wvM6N<$g8rI;6951J diff --git a/app/src/main/res/drawable-hdpi/ic_action_back_dark.png b/app/src/main/res/drawable-hdpi/ic_action_back_dark.png deleted file mode 100644 index a44b17f28762eaa37751a019b3c3b2a256ad89ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmV+h0r~!kP)^Z)<= diff --git a/app/src/main/res/drawable-hdpi/ic_action_collapse.png b/app/src/main/res/drawable-hdpi/ic_action_collapse.png index 68f40d3c929af731ab73882dd19208a835b6217c..e99b9798584da8272bbe6910b5aad9b63e7f21f1 100644 GIT binary patch delta 192 zcmV;x06+iz1KRhY!000005Yh>{ST(cGGEBVy0000f?-t+z3d#-0I6jUmeN~Kb%RH{X)R;ve$ zorEuyN{97&{e{8noq~59=eW^myt=OY%iuNd?F4+Q)jGkhzkh}BVelTG<^9Z`Vz)bS z_(&x>9Ft3Uz?~tw5`1J4U5?G$&YuIWw+ucKJfA8f#Tf%Foa6{H6FeMm z7t!W3Va|v-H-7>T!wSqk65t;&%q*B{Fy>KOgw0vW`pi237z^-Ucz!Ry&lkZl94q7) z(<7^Hs|1i+CQ5~p~%KIhe^CErS^V6 z@?uyC+l4AwwCAwH*_|(@YT$X^C6Wh7T+Z-|woDItWn$p_{(jak%1wBvR4SE9rBbO> a>F5vkbtXlw*e(A60000LcOScs{@2CTvg!WNYg z0ujlAhnX*n@4>(B?pxh~nUnwkK*ZJZwDeAqa=-GN^Wo(J@72at{z8Y{90EH8 zysA@Yxmzwufr#q#ijXJ?L{z8z{Sp!Z&+0U;*6LIOo{ziVTv7%C2q1s}0tg_000Id7 z7XR0bS0kY4l@UMyfdd4pY3fTvja6EeKoc<78lt9iC6>|RBl(OLTlL`q08Y*aQZg*O TtnAU`00000NkvXXu0mjf)`nur delta 327 zcmeyu_>gIWay_Glr;B4q#jUq9_j5M|2ps?IDX_)NjPsh(j}We=g52!FRrN|zQBq4x zx$k`1|CUc^jq8c;esMMX3!44+>^}cF&C_M*_usnV^)6v1DRbU?Gs5Z_CaJuP{`%}^HN*Yy z&QhJibG>J?J+%zp$Gh}x7em0or9rPUA28ncVvON2i4V9pdt2aI#uKMXcL{4-&HFD^ z@^?{G`)ei^|IK*i<899~MePb4mzIey WI+~mmR&AOHGRV`_&t;ucLK6U;j*f2t diff --git a/app/src/main/res/drawable-hdpi/ic_action_delete.png b/app/src/main/res/drawable-hdpi/ic_action_delete.png index ede3869477ca25dec7d1073edd27e226f8569291..206c53d83307ee0379581668076243e904c75815 100644 GIT binary patch delta 255 zcmV1;tu$*J=G5Ht8LE$M(L5^$8$~l(SML2%(Nf9Wv z%p$I5cOH9kF4wXE%c~cnB37YJpT_!16^k&u@@Wx9piQXwdU#(iBAw8FGoe(QP_ciS z>!d~->86ZzQm0L>PAav@(Mhc~Qk_(5^SAIY#{`$Ef5dRnt3l(MH-z zbk(V(x5??9x@+@`RvZ_a_)58qe5D-zQV#$C0000K@CJ=Rcz1O=)RF)I002ovPDHLk FV1ivAb>;v7 delta 345 zcmV-f0jB<%0`mfpBYy!pNklf6>TF_e-x zgC$uF`e3pNk|jM)sw$OArBbOjs;=v6_!vSLX7YirVHj>**FBr2c{t}T*!IC@-}g57 z7{M3%>3Qkon25k3oP#B!8R?Wd3XNp8-CxaGG@h zBNwNL&97bL1kIM%=i)?RlQUanRV8=Kh7CpO~BG+)Si#Mh^?4Kymm+>0<$8{fTe>h z?l!4^O5(RpQ6#;N8ZEz$xc$BLOFqd$%cu6W5cH1Sg7@6emta+A3%`6>Myc rXnoSZZY`doxqFKCx=N)|sZOak^|%2rb?!GG00000NkvXXu0mjfD@dX1 diff --git a/app/src/main/res/drawable-hdpi/ic_action_delete_dark.png b/app/src/main/res/drawable-hdpi/ic_action_delete_dark.png deleted file mode 100644 index c6f7100c7595da4040b20325f54ad9899f469b55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 355 zcmV-p0i6DcP)Bd=q%ja>b}P6Z;N} zhWAW_K;Ia$;WH+pr6twG7})jWX$&nKw^Ihh@BWn%GA+S}USfGB5}(llODgmk1~E+zU0~=Wl*e98D2*CpG?9a^*}=G$Vr~tGr`eGC7L3jhUXls zK&i1xk3**tgDuwST$`iC5(8NF;jT)hQmItZ^Z{JQ>}umqY1jY&002ovPDHLkV1m3M Bpzr_y diff --git a/app/src/main/res/drawable-hdpi/ic_action_desktop.png b/app/src/main/res/drawable-hdpi/ic_action_desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..5236883a02f7b06285b5667974002aa280f0666a GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtot`d^Ar-gY&N#@~Vj$ppRO{O& zvxT>t*sTk=HwZ;XYJX7L&8s2yR3^>QrbEipt&;y=uE#S+p%X5G3=9X(R(eXERFJey zypI&QE;P>3EbRnzPGs$!B!-^|W*?mrz@&#UOy(V+F k&-+%S$c^8ZfbKrP;(sjW*~-+)=|B#Hr>mdKI;Vst06Dc@oB#j- literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_action_expand.png b/app/src/main/res/drawable-hdpi/ic_action_expand.png index 2794d3e69ad09c76beae032fd5962dde8fc4ecd5..82e354d8136879e2022be591d245bed9e9bdf9e5 100644 GIT binary patch delta 200 zcmV;(05|`l1mgjaBYyy@NklSVe$xpgvIo18j@mcIPIC7QfE00000;K>0W;5ErPbZ^N30000 delta 522 zcmV+l0`>jl0ipzuBYy$uNkl!Pme$#5C{YUf#8222!g)M`tW^! zvQQ{gU~`=k4RU`Fy@k;?U^G zbzKXujRag6;Iu>Wq0witSe$K(*|MzRF!P@c?f15AJ8cGGAQ3LPG(I>IL+uXj3dkO# z93V>%F#m@^7)Zd9j$5@aCsIZfNwGRd4Dy>n7~ortOAI)@L?;=`C1$9f@C?2fgn|BR z>YFI8rYgf$;sKudk;Bp6NcNzgN82(L75Ulwv_R*A0 zy%Wo`ZccE+xs3^8yId~!hW+^)Z96*gTy40C{pzuTYcw2JHQ9WH?NYcBzsEL>_$rp` znXa6TxLZQljV=hh-^cSnC!XJ;=BK)Pz*A?W>zI+yWqJ)qO zA@j#<%hdJL^SnWbKY|^ara6$wJ2dLOpC0_IcD00000 MNkvXXt^-0~f(V%PVE_OC diff --git a/app/src/main/res/drawable-hdpi/ic_action_forward.png b/app/src/main/res/drawable-hdpi/ic_action_forward.png index b7cf8524c865e44a5dac61f2edb59e684cd33812..f8dc4377a81e659db438482dfbdd7a2cdc172cea 100644 GIT binary patch delta 176 zcmV;h08js<0?YxBB!81hL_t(|+U=M@3V<*S1VzDv_)f2WM8$qe5c?=oh#=xoi;FWb z_bgdj+M)me004kDsLal-)P^s8@YR(IQJa$)-6Mn)jX9h`M8!>{5VN^mHX#+F^$^sF zI#H*O)Tw*G-dt`rktIZY$!v9!4gB&x e000006xab4KzD~7PZhEN0000N8i>j zMMWgKl(fBi2OpFU;V#Ktza~{h5ClOC72f-GDoFCqIc2TAq)N|F6FiO8)4 z(}~7rIu%T(5W+$!wJcRK+bbb_Dwa+%$T2f`SJgh9dKS<=ohYF1E!2^T&yXz!bdv}D zA%i9l-ONF^)4#|wZD`mLr_BNN*Krg_i_nL=4WN(LpMbvLAP9o^58MHv{+KQfsRQHy P0000V2Pa2g!}5TxVx0A9B+kB5Jrafv#X(Z!)4SwLn3}slkDpRimStJiQWax7 z^ia(Q(G3Ke`9|EubD+O&DCSq3iITAVT=9<&fGJw!cnCpyxe z*o=fgwbQ#0ZYQ^s+o?o5X`!vy6=W~2#o9@WTr!K##q@Uia)9aWx`bEI7&}-~w zHw%!4=PZ1E5EP^#4~)l^@F|2}8QVw#3>zU!?Evs4fR5agC-Pk# zKsN3~zN!UC#$S#G7(W4sbL3ybAHC1N3$QGwS+q_t6}A{4&Nqn_yOQub0D6&%T^fD| zK(|q`EdT_TkP|)h3H`*js-38+Z8UkfS6j$_zGIg>^#J-4J)NWsN4OzFJHmthzT3K@bE%l6nHY-sfT-M{P|20000TUZTM34{_lP2cX8F(OK!c2IXG08Fj00000 z?5L{h!X=h`UDr=8aUw?YP1Ah1M2S#JU8m%e6j2n#nTWP#5y88S{8R*0XB*3N#$4rg zj-+exoDdK~0Pl&iEN}GOQ~SKc2{6W;XrByX1&pBgk6i_@+xQ63a}0(bBY<8U7KG?d6f4=g*B9gMv z5ga;VgX}MUB@Xp7$5yGo@25SF1I?iY%pL04Nkkm#U2;Oy-H`2KD|o`=wa;@Zxm<0000T;f?PF*5gVqGfpnAdOq(B-1T z%D~`vWZ#=^N#;K3{8~+i1_nl^XN9rhO1)_g6QAI0_Kvi1`ZAq9}^>Hk-l c89r>{{cs@Gc6!337zQBlboFyt=akR{09p1iCIA2c delta 153 zcmbQqxRr5&N_~x|i(^Q|t+zM#ayA$UGz5wlcK&%F_08|uwyL=|RtoU$<6q~gSlL?f zz`$eDzOc2WXDrVj@7$cn@Vj++(5b397R(G#kg-41FI;`;mN|@tWzQq~x7~^M`gfUa#z&#Pk{LU9SAxv&boFyt=akR{00*W&GXMYp diff --git a/app/src/main/res/drawable-hdpi/ic_action_plus_dark.png b/app/src/main/res/drawable-hdpi/ic_action_plus_dark.png deleted file mode 100644 index 6b859ad50af083231fbf3f90d261f0828466b023..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtTu&FrkcwMxZy0hlC@{1I#>VXF z_-^lBZqz>Qh^vNYmHeOVFKs8d94D#VUA^_#woAJ2SUhswx3d7X0>KCG1Et$Mg-&C}0L1j%^1`njxg HN@xNA^~E{q diff --git a/app/src/main/res/drawable-hdpi/ic_action_reading.png b/app/src/main/res/drawable-hdpi/ic_action_reading.png new file mode 100644 index 0000000000000000000000000000000000000000..9db0d620cf03f42fc6c07f91e643379d649e0887 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCS5FtmkcwMxuQYNpC~&wsF3-Ky zmepw&aj%h?aARcoD9F|BDe1B9%0{h@iBXE^h;L`i-{wpr4*rhKf2L=J z(JpL9DGT}<<#hbpI*m={eS@vCZs>MOLlaQ*;-oY*K}&v1c^lzS zqpsW3cdGahj1yTUOZ2Gd3&}DAs$xAFW64`6kw_#GiA18w^#esRu72!uwk=r_WS0|%)XgS#)}s( zUc5XNX*3#dDwWC#WCPbW^qbOltybHpR;vM@NntWuE|=dq1%I8-=bz&xs{nlnfOpV` zA$kWwT|EDRYm>l}G@jja0=(DjJtGJJx)=epQ33888q$^tJnY}&|Bg6#7<~o(!554R zexL)8VHnQq;1x+(0znWg!|0y`uioOi4{a$RAF<{$@2UUdi2TO$i&6061Qht27~ls? zQe1NhJC}ovDu1rW3FP&A9kH-6#XIg_*6a26-1;>6gSB<6y&54;I#LPy-C(?n3iR5- zDQ{ut#5n<03O!*79y)7jItyE$oDyKIX1UYD#>VreYU7Lmy{{WpF>fWKfR`e0pjVqT z2^;766d$|s2{26HrM_k~a2+;c1Q;rMoldIr(%`KLz<FK|hyHb>ryPW9#qbrj-)+V`^vuC=`q4ZI z1paD0@_(sVzQN-){S3o7kU&F|DV0hu^&VMGDpo|}lZPt9B;n9zCzR)p42QT~!>q`@ zBE>cJDkst;c2-R=E)Dk13WdU)tE0sdPl$126>j^mu?n97;ckqLD>!Pw_4#NiX`C1x zY;nlT!4`iH8*H)f=3r}*AGnU-XmKwxTAYkThEr4LHp5+3IPru{BgJBIhErM%OL>o@;7sVJ+|Zr(2Ex@Uc6Y#Kb#*&X3(bPLI3~& M07*qoM6N<$f@>pQYXATM diff --git a/app/src/main/res/drawable-hdpi/ic_action_star.png b/app/src/main/res/drawable-hdpi/ic_action_star.png index 2946438970bb1146f5d634f49022e6d6b3bd3610..63d0562ad5aa824aa70786910154714690888df7 100644 GIT binary patch delta 624 zcmV-$0+0Q)28jibB!5szL_t(|+U=OjOB+!X#?zn`)Rx8c^ZsD2l|fy2e(sAFa>+z)=6Gxu@M z$-QSzCK9o-va+(Wvih%@h>?ndB@#6;fH=4$aT5a=0}lCQnt$`9;7|l`NSiV00XY#s zjy7YoOUM5Zhc+XWV8-)ch~#NYm=HjU8NUEk-9&@ip z(M#}C1h5L8KVZFQ48jdSt^Mk;??Z)l9Cn!9yQ-4em&dN6P?x#{%xOP+{T=4N)>@4e z*DR>i#T*ya<&5Y5HnoCNQLV(L)#waY=3g>HTV#Q{|f37pU|lZ5922| z_T+&D!1vzAVVTr_Aw9#LqC*WuZ!|!MGFml?fmssM-Uk`Z83;oFD|AM+1y9MKXyDw& zt{)VWZ?vxj?Ywg4K$OB}@KqeCtf*4T_Jv<5+!B1iH3CzuI1ax>HFB8c7P2qwYRoTj z>}rDyplSDpM(mu&MQ`T%`Ai?*8)N`U;fOja3%7hiiE~U=%$o@^fFGg>Yw`F}igK*m z6n+oN`Es@dAMbe)i}`<9tx*<405PAwxT!T>M69f=tgNi84Aei#pQff+U9Nio0000< KMNUMnLSTa95GtMk delta 797 zcmV+&1LFLN1+)f`B!Bx!L_t(|+U;2DYZE~bPkcbFPZR_nZN(2J8qE8t2#JVKL@XRs zE9w^!1nY-BM0^ksrKK9F)<*wZe?Qrg;kd>em)!PX2Zp`e?#|B4&irOBsgxr}jvP61 zG$yK4D%0d78}NjjNaY)i#vv&Goy_ON8Bi*fZdI$*-()@~Eq`?Ofb~!77B$^+{-f~D~s0@>wX{Q=Wg%GscQY3>RGaOLgc^C~+lZtfm<@ z*uSadEHJEMfmKtS9!e5&1kVnW2V6t=CCaG1^OPBPc}PQv>!OJ1ea;S(OUmnn=NltI znh0_HMt_h4UYr=>_9hhKytS%4m66^D<4TB@W7!z6$(*ug01)Gxg1=e+JnIBGz<~QI zjI!1YV8f;i$g8lL1baj%!=6SMJYQ4>+_4$|3j(F4O-{p*rmx`rD^OV1;2N&w9<%qA z%@6mlMu`vRPpm~>KeKLnB>nDhuf(Ed4C`6>;D4tQ%DX-BsN4v~2f1AC0GZGJc`@Gn zp0;rVoozbF6;#=ofKSaC&TZ3qc5K|hGk>_CGrcsZ8gmY7FZ;uavTRi0Rq5L?&V}h? z0ImDYo-HF|HP(U#1&*@~;9n+D;@2cTW%MaC&c9AB5H7=f#0&~6cBYVbKIO=fBS(%L bg%+eg<5`Mu7#O1S00000NkvXXu0mjfJ?D75 diff --git a/app/src/main/res/drawable-hdpi/ic_action_star_dark.png b/app/src/main/res/drawable-hdpi/ic_action_star_dark.png deleted file mode 100644 index a04d62ffe153848d23ed4fedbe728553d0dbe843..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 652 zcmV;70(1R|P)8xo6Y76HYd;_ z*qp$+V5|5Ba6uYuOkfsd$gFMRE5UD-fIL^)l)w;$UlMs9vPFC$IHc$el3`n+4GDCr zrPE8i_f8uUNK$MH6p<9$l3}d0<)8*Mfj%CaB6dWL`@lBo>j%xC7F2+OhZb1?-he6a z2`quH-~jvtXKJH*oPwB&5o4PkBR*+x!u_!czJNK-_4eM9L!dVB%_ks;3yO+gQ5Vty z$p#^FwcYoZr~|udk~Dv**We|W#WOCc{417QlyO>lPa0s1w2CWp)IHR45&>&!vK{dB z4)LnNwu&dQqmOaU$JJ6e1}(RUBb)w6?T7fI)d@@#0mI;2ZQAY|_`d?b=zGps5fjH~ z5BQ^mywAaB5d5Q$`1YEv1ube5e$HY1ygCG0!%)nsRPlP3;}`JOeJl(Kbg5IM(brcj z1pLwQ#`lCFfoY2Q;fduYm)fuo_V^rOpWKbU(`P0O32af!sw#MkYFT*|dI3D=m}Rza zn->2>ZQuzorcNdAMw(LZ(l-jm)kZEinZOGr?yv885|oiiU%yVW-DCn|0T;0qP#-Y1 zo_+rD<0cbGC?N;Dphd2!;2j+6`6Wz=FX3JOlBYh=CiKz;_aF?sEI!<0I!h}60000QT-#$(5!((x$)({UE;$UF- bag@Pi=NiRO&h?LgCNp@t`njxgN@xNAz#=XA literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_action_tabs_dark.png b/app/src/main/res/drawable-hdpi/ic_action_tabs_dark.png deleted file mode 100644 index a894d9ccc8f7b8005ae1dd04e1ac10c34e3d369f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUt98VX=kcwMxZye-pP!Mo+e6@(f zdlAdID+z*O3H~Q8PFCN1a?;Ev;vbS6k~J9^YGxI0+iG0#_I$&}GWL890fh(q8}^m4 zuHXGX-haV5*@LUkH83zTed9b)+xzZ=(&@jN4+XddCfF-{&lhEA@U`U$n7BpmZ^>Ms Oy$qhNelF{r5}E)2$UVjY diff --git a/app/src/main/res/drawable-hdpi/ic_action_tabs_light.png b/app/src/main/res/drawable-hdpi/ic_action_tabs_light.png deleted file mode 100644 index 1a3ebfde24b4c81f7757c648f7451accd8fcfc4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtN>3NZkcwMxZz%FL81Oh;yvu%Z z+1y7)6)NHn*ede4MI)|UT5`JHv-I;(F}G}>`X5i<&7L`Trm(d;o6O$t*2PKcj4T2M zdI|OUZQ4N2_y6uLVxh6d>SaZ2910B$o=m6W7aQATWYv2WbZ{yxsB?IGUkhl=bP0l+XkKxpzIH diff --git a/app/src/main/res/drawable-hdpi/ic_action_text_size.png b/app/src/main/res/drawable-hdpi/ic_action_text_size.png new file mode 100644 index 0000000000000000000000000000000000000000..d4029181c3a5e84fb239f41d09ee3b2367b235a4 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtEKe85kcwMxuWjT!pdjE7SYEXJ zwx)IJiX|R`EeT!B#Sd+FoIAv?wT+FzVVXs{zYHVOD%LOBk1~((=1u-O-Yb+REVR L>gTe~DWM4f&tf)A literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_action_text_size_dark.png b/app/src/main/res/drawable-hdpi/ic_action_text_size_dark.png deleted file mode 100644 index a77414df4b48b271bfaf8790fe390477a6eb6f99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtnVv3=Ar-gYUSG)B<{;Bn_*}q; z?I33k+vKBZMa;XsIn2}ztQt>p-g)_ly;(+1OMK7d=j{2`KWYyAKA-^9&QRy9dG&Ny zcW69&&!)3Uri{}V=jQCXvB>sCjz##6D)T5^g|Bamb_*)l%gDX|xp=39!2X?6SOf~> zuVnB~tNg0(!obKP;LwokpeOC;&GX#rZOoDH+CXDJtdxzo5>e~FfIrf%Q~lo FCIEcfN)-SA diff --git a/app/src/main/res/drawable-hdpi/ic_action_text_size_light.png b/app/src/main/res/drawable-hdpi/ic_action_text_size_light.png deleted file mode 100644 index 3069b3c2e732fef935427c11afffdff75401e65a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUtEuJopAr-gYUf<1i$Uvmw;lAbv z3LNM749l7I_};DC*ZAPkn`dtxyu1C)f@7gZoRP`Y|IM4H@cdk;nRywgo1y-2)b8m! z|5@Gp9lD0kHQSHnY>Q0l?fHT>a*EjVpdhR&F@%PrP-Eiw`~-bnn+)HxK2&s zn8mLB&*%GW?Bi<&v8{%o0w5Q7y85}Sb4q9e06o)ST>t<8 diff --git a/app/src/main/res/drawable-hdpi/ic_bookmark.png b/app/src/main/res/drawable-hdpi/ic_bookmark.png index 388f2900800e597f5b9b59e93665c19056996064..00fdd74adcb7923505040ed3df3e3f25f383a5e9 100644 GIT binary patch delta 455 zcmV;&0XY8Y1mFXZBYy#>Nkle*^4{~Nckf+dSt5~0 zBoc`{wM>ju7Mz1KwvAIB{D5z^jngjZk{#2`kAP=K0!{vAjDJ=^$B}?)ub7m;ox{A% zttsXUuBY$(7YZgMaMHuP&2d^yXShh!6aMl^KwVp4-%OGQ=RpaqfhyPsHE;#$tT-R6 z``rLkpLgCngNX%%{MqkteOTl zF_^z*>_jxol7ASL`6I?mR5`E*+5;GGGe%D5nSTTPg)pz~Sx>{e!UT8?S#8GCeD(>V z!(CasHV0S(l{6%9IY0szy3G&qZOgC9_*JQ<&I+V72Yx-w-Gd@|@aUuNozL~> delta 593 zcmV-X0t1UJl#?hncx^@44T1?>Xl_Vlg2?ga{EL#3#vS zvpdu%6L_LV5`3XhSOfTPD&HeVK$hjAs;Yfci&1l(dFaQ00Ds?E78wGHqGX3ge?UTs z41ruOSFsXcS!7ZtX5iOKfMp=D9fjb1w1OWf|4lXcR4TQKk?zhtJ#Z1Uf+`~igZ48{`X&h*p zwu`B42H-wT_T@`3=kxguj84tRk+12xzV2&ALI;cR&9V>R%d{OxS~Uz~4jtZmk(o>z zceEMw@(>4!3#L04qt3SHo@5#qo42Y90@YBr4w&|ZaesRs2kz6MjnD`nEA6|D0ZEef zLL&eG*KP^$>>Q^5zj;8Q9Ol9OYeJBIQYX}Dg>vBM@o)^NALjOSI=w>WyIIzsnxiK7 z@HPbA;TFjeN6jSv*|agjn1L6oyC9<+)$8>cyEgoXy2n49uU{8m=gP0H@ fLWBqr@=y5#eSs;dLeq9H00000NkvXXu0mjfx8fN? diff --git a/app/src/main/res/drawable-hdpi/ic_bookmark_dark.png b/app/src/main/res/drawable-hdpi/ic_bookmark_dark.png deleted file mode 100644 index 6890a4201a26f28767ffb34029ae78d0f0a31f8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmV+f0{i`mP)v~_BoLyrJ-ZC#hvIr5=C?dGXC6B*VL&YlGb?w`)Kz4%hSsvq@GoGcc#+YoC zw*l=aZ=d-UOowZ&$PBOxjzCgCtt2=GJC>1=k&%(ng!%=EDIWvLIqtmx0000|BU}XZdbVJ pdMMkfn?ru@&x7lVfJSdfX1w`JK=JIVrLjOBgQu&X%Q~loCIILLOTqvE literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/ic_history.png b/app/src/main/res/drawable-hdpi/ic_history.png index 1426207672619759772c448c0c8ac87a132dd306..0d514427da786356f8e3fcf98edd8e3601e6338a 100644 GIT binary patch delta 608 zcmV-m0-yc#1^EP!B!56jL_t(|+U=M-PXa*@$9WXu15L0t)+WYq9g;vIYU5`B1j^%4 z=#i+6iKT^t6@;Vkun;Y@0Qq{(njx7?K<p*S7 z$hLq25XaFCBjQ;Dir9wFR0W9m>HHmWLi~1s6#i$Ye;P2Eja$EhsId{e#trOd(;I9C zD}JnbI`w%VG>5$q+MqTwGP6yOjMmi*=Z}CaaBd?AgUqTWD?8DV>eyH|S#0}gb2*vB ze$H#>qnPK%qko^W(Z@*u0o>T*Sr9Y58 z5Gs-P=w1fUB!=S>1JKBO8eRs_Cx&AZ1Bj9Lyn7kIkQfe23?NM2Ggy`YUV#H3xX1w9 zEFqCgGenwTZ`(Pqg#RQZoOLCA>aL(1Toh4qN-cJ@5pq`E``whdI+_4M4R)o_ByQv7eQ7 zoVLg;7<1MFG6n+AwK7WCKLcyyvjIkHE&TxH9 z89ULuUavo(;#lF|X%$Z}WR2@b$|_X(cDr52%g?tc^#gnY!-n92@R0xU*_Js=jEM?? z43s~XmD5UGf+u*kKN^j0ZJW$z90S-*WX`qSfDtdfLW;_pkim=3;FNngoPLjUwJgdO zBfP<8trY)->whcD6{}K)$kICz`Eb~CtvtBvN4v<{oYfWMAyM5mc`d0=GN zNd{bJHb8cKqBFKt*}>Yz!2Z5(1NaUjOvg6(AL|TzQ-6|jWkA2*zinjfu}yfJD+5k4 z&dp_j%so}_o!dC@LS@NeP6NK>fbLN3z{17{R?2`ufd&lJdsjO(fHHc$-qW2JU;`n{ z`JhV=%zt02)$SGwAsZ)VG(i+Q(7VVQ2VwHyU(w8^6Xy=28|rqu_m}{UGsIW?e&#)l z+9a~11b+p^zUbN?zo#_NTOyNE;$kC=Y2KzZ;SNGhUzO&UxPNHCXX>n!uqo!!zzY1< zYcXe2PUmdVTq~ymr$=56G;)-5O5P4M1s*B&d3y=I?{tMaoz8O~hkCBOA$RSqM+A%> znQax~Hg8)+V_t>UL*Kp7qol?bLo8!B6VXlCSyl4EG^w#A%KPt?3Y@aG7EjC2TJ+J} zojG^dtnGCsJDsu9w$~-jS1V`e#1NZOB_JJc%pg@8CbNU1Pss^)(^mwcQ O0000NOHYs-CYmS?loxPdeZ{`vSCr+F=ancRaY&HjgG;jpm1680wsM50numbdV z%c6ULX`l>z06zht-Yo%>%0{OaKLT6=-ys$*p>!{RVcUye0^WQURRgYo9FQgC=vmE2 z=M`A6l`=amcKs7L1!jO`8~r4`QzRX3!vnTsO(~zn-vXl%Y>knwOsVZS)5c@YzJQF* zj?ov*kS+ct7UC$_H?jCtgZ9@%5U<7xn|A3^eCpi*ddt8*upZFQp72pJQV%dPCG!3@ zh+({QL+?L@*rF9`GCXG=y&G07$PWZtQ-Y0Ma5a zXDkFTD}1i#1aKs7*rbI3`hYs~ThIyMo*B9dsT(N((!FMW?{osFGDEqD0X#L6A!r$eVB_~~syrzcD`G-Z*OnHU0yr=e-nQmz?pDLv6r4w>Ge#Tc6UUfOw2 zH1+c~$10U5g-r!pX)#vWvN725S`4;|bcXl+b34zr8EkD?nUzvH`HdFqG)By`(PEzH zLA}jraXw*FsIbchhPx%>1sgJ@rs%Q@J6=Cm=X}S;>prw2O$1Q>;CNQ75;&xRS9kp2 eaN@*?6DPj_2^SLpF85gg0000QGE~2gTv)%&o^}5h4aC0iFe@p?mh3kld+gerBbO> zD!Y{gIZy#D&<1r-0GX(pzXB8R1$G8M;0<&@HfqMxVBlkVAAj$l6eaUdhQTG6f*$CC zA$SE__RJcTL0me(z-W^ZIQMzZ0adVI&wqjo>7M82Z@|ePHSP;OXLU1r@kOT1gc%tH zFz+c3R#f*5E+qow*tA*hX`6kD8?D!u2vA`LrXlK!tbQ&Lpv4UILQXF}k^Wt6W}q9Q zKEdj@5&`PWz<)4A{TZuYNCYU*=-kmq$~m&W#sWM`1jx{C&qLhN0I=#N#y%mex(UbUCLV1Ik*1U9A)2=RFy^pd pIjp+@9-?Whd6i0~QmItd>K6z2nAH2gc^d!#002ovPDHLkV1nqg^QZs- delta 725 zcmV;`0xJEC1ndQnBYy(3Nkla)YLN%_ltPqPC|?F0D#6TI`@DhO^;e0jii@)s2T zpq?j4aM3CVZcC5_SCQV`hh$!Kv6otlEi27`udGEfK{8Z2mWDCh@KX=?sY z_Pua|%i)^&p7*^T+ykFM9{1eyJ@?l+1_H*688c?gE9-WG0mHC1qpeF726_H&K z22rp`EA^ll^9W|$7LZj0QUdWlht3>6&xZ<`+(4JRyZ+l)e zH6oKwJvyxydSTD$p06o-0GV5G1~%LlF-y&eop$mA>{IaadD?MXL`XCvRL}n<@HX|* zaTk@&Mnr z6=%d-5jI5k60zlX5lth)0})$24z}+_h~Fu{iD?fQoRc{imObus?kx5XKLX3%Waf5eXZJKsNl8gb zNlEEXd7uh(fB`TCX2=xB44jkyPmXT@Entk!&OMmn+$KJos(%iFPajUZVLw|-!|`RH z7t-l(z!Ju~KrTt=A0$rrU(jdQmNQm{{ejvV8g&r0lOFffZ0Hp}kR3i!750JaNQ6V9^@jwUr`3_!!ec2;2= zceAVdY*LhZh=1K}NSa+G&Hy?Aoqq?mL;O#h*f8P@U_cB%0;a_2I8-9``f&y@C5AUK zzfFb!ip1U|&H!lsFW}avGX$_m?3r8vERk{DC7s;(@Td*80B8yog(egfJ86#P7qy* z6R*HIuuLoT4lg=MIxp5lln+~@v_5Q!yHhj7r^N>6ZWFfIRWNn>co;L0362@qVgJ>~ hT_q(YB_*ZQ^b21^dvXJubR$B!BElL_t(|+U;3cixWW*-ceET!UsV`iJ*}@L~=|n@hPm}@un+* z2;z|lva7Djg3o!0cw`raX!PIueb9lX=t*|ED+f3Q&2&0FRrPh()jb;<8D*4FMj5RG zl}e>kaU9pG)oQm^tL@e6^&x&Au(5B(x}3wg>!NoAg|9-fK7SPaiRa(LG&7g)OV?33rROy&**PC^vM%D={QEI>@i zd!Z&p0U;)16#Y#nZnat$(BG9NWk4*%>Vx;NV5r3nNkDa4EV#E6nG1e{=3TKjpa3=(hzKTCE&imNChZ#h+Pf(`G6Jf-a z@G%!3JEmic=+p}?57K1VPyi&zdv0g!pt6H?i)W~uK=2h$0M`YtIK=+DBJC$B{RZtB z8|FR5v+66e-EJR)(qAmzU2g!Uf}F0zJKCfRK%>#Prhgf>A#2-`yBFfXLu&`NxH>Kn z+5o`wvBiHF;sXcPO5EjGr_(tq^MW=2J10;F6#(eppNHsf1CP$e3hY z^9+cd27dt6L?%lK0D3W_jybCVfHKrd2}dzEX2Io}N2OAj(M^V4D0tqENEo}QTFjX( z&DmuHe!q8x!F)b{0{{K+h)TO=M|e8>VAoSB}q1{60C5P|q z_}tW?ZLZ>CYYf3JvF$ge$u2Dbv+|ouxhpm1G)hq9JDzXx{G3Ah(ZbATmSZzIh1}Gc zom~FquDA-xG30q%ulH7Zy`E5Z#4NsMec<4nb^5@OQAQbM^qTWdHyG diff --git a/app/src/main/res/drawable-hdpi/ic_webpage_dark.png b/app/src/main/res/drawable-hdpi/ic_webpage_dark.png deleted file mode 100644 index e2c2dd925baed68d6c7c4a41c8ce07e1a1e11083..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmV-@0)qXCP)!U#VxgE2O?(6!TcgBS8Zc^M{2?}w*janna-#PD*eWenKn~vtXObb= zZ1zs}Zuf*_C;1BYhMoC#XJ%(NlQCk%h!G=36w72XSppOQ4#CE;d3SmZPy={?J|F;$ z2?34aw<_w+ljGZf7CHGdBT&}`l>XCk3vdq@NjT19L~~eaJC8B#$8@?+Va1N&Ty~ny zeX3uq_U#4hO|(2`v3bIF5`%?Ve>Ar}-r;{7a!9gq2cRV4xM z4`*@Z1`MzyuEwx)%*@$V*_id2iJwJ>lOkIVci=6ln6$ve|2JR-(9}f0A{)~@uvM+f zG`T(jS=yDR1_C(m7Za9_Y689Kwvw@iWMbq0HzRCibr7(*5VE)xlO=JJb_nrF>jv@S#fuj&Uc7km;{Orf>!RZg;1Tc=^d&HY5sYAj zPmVAe!3eb*!3ajUZ>liQ5ta%S{d*h$004N$38+NWPux|j6bt|W002ovPDHLkV1iuI BKo9@` delta 365 zcmV-z0h0c%0fz&SBYy!-Nkl%UXjDvfRZ`OgCGdj zQ52n(dad_Nh?f-~is-xe64&|+e&wHtzfuaYl-IhjJzxIpAAj(ers))R+Uu}$tbF17 z{sdY4)*=2B$MMLj_ySh^&F5V`5Bu3yeZES0c7Ppt4xhh^Pm*M2(&wSY)92~)^m+O` zeV#sV+~;pYPq=TJA8)?~KL1ygA}oI9^DF>*0nE3+8$)o{HoulZn%JPEzd8K&c3lvH z%>qrMu(kqh8fJXuXGl0^5sVbUxgi4I4s|&}X9E0SY_cf|Z;{Li%n8g1v`7|#Ie|Ih zt(*XTNUAO;$o&=kF*!$0uyatdniEVOl`Xr2*~8KVK@bE%5N+cEibb%_bP#X&00000 LNkvXXu0mjfD-o~~ diff --git a/app/src/main/res/drawable-xhdpi/ic_action_back_dark.png b/app/src/main/res/drawable-xhdpi/ic_action_back_dark.png deleted file mode 100644 index 2e590b6b9cf076c7505e706c9e6076ef95693967..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 339 zcmV-Z0j&OsP)$_KR*~5n+LOHjg$Nl_NaekA;6n6wU(LH$nIr)K004mL zsq1pVdn$NtCn16_Nnzwxs zG5-|hn$2H&%x^HSIOk($UhUuB^(?$n^TNw|qV6u*Tg~}Wvw3o!oG0hWd2*hdH=grB zmFTtr<^MSIzQ_EMbeuBh8Gz~mm_Gs|mf&>(%IAu~&;bq>UT=GokG%t`aHX~i4}2Kf zG6W+-u=zq{Ku@SFEJjB}(i7+j^aLW3ATNY_7abK)jI$H002ovPDHLkV1lZim?QuI diff --git a/app/src/main/res/drawable-xhdpi/ic_action_collapse.png b/app/src/main/res/drawable-xhdpi/ic_action_collapse.png index ea61cec4c1cc29620ba5a26e12ae476f15615726..1c74a326ae13c9098362f10c4932abca899b6625 100644 GIT binary patch delta 172 zcmbQtdYo~Bay>(zr;B4q#jUs39l4qfL|g;Kmt?OJ-h9sL{UWQ*2MTRj3nt7jexUy# zw&{ThBLfKhaX)4L=7;}2lTSY$Dor`YFTBvquBPSEkMeyV1lJuq|I^8RMX!BJ?}yVr z4h!iXn)~sgl8t12--hop3sY-4I93+c=sK0JfAI20P|Mow?^O@nviK+S@ab_$u-OYP Yitj%WUnOXCyd1>$boFyt=akR{090)+j?0h0xgBYy%~Nkl>hA5Co>WQ@1VIo4K@bE%5ClOGVneA^DpUR? z`AVg-R4$kADSZAn#5VFS?@_peuj&aV!vaeRF zYr)753dcBSA|nri9-{p88TmjaaE>=Inc%+pEerVpCv1&|mGPN@TFmgu&p)VUi;4)!xl(#ipn>Hl2MHU1>5ClOG1VIo4K@f!G;SGU) VA(0;c+ui^G002ovPDHLkV1l>XD?$JO diff --git a/app/src/main/res/drawable-xhdpi/ic_action_copy.png b/app/src/main/res/drawable-xhdpi/ic_action_copy.png index a59809a9fcbe29c3fd4c4ef2b304d8d0f6072c58..3abcd4f63fa5244dcfee6b7de59acc69749c592d 100644 GIT binary patch delta 217 zcmZ3;{DpCXay`RtPZ!6Kid%1QIdU}{2sm84v!p8itJl=D+s>wos$U*Dxn&>!=4&=C zOrDyPR6H-4_vTJB+j{o*BhQ^bOcNevGEO^ibUDk4a(0jZO$-bSFZcvD`mZ={+?K;| z@pntQ$stLHFLsHuErlK4GJH72BJg$cn{UQ!K!q?61YVhv7k| z4FR6%kNE|*2&w+c|0~vWB5dP~k6z~*`vufe-r0JWu@_BdVE}?U_sb^MsgZqCW-rpn zb3R&KpRle{v}~2n)j#enJ!?$&&wc*0ddV|iE(!OXd-E7#|JI*8&-Ar!#r3}pH;r@` ztkT*ZP+rfXkYLA{dt2{i+sy300rRc7rrb60oqm?H;9TyipT{NqIp2O>Gt0=BDda-e zCy~#AEC0s5+7-81>4C*3%fxBM+DymxuKv6rhW$is{(Ng;rY&_hqwjMEx^K^a?_lQ0 zz$DPXz@osw$l(BH0xg5G1zZlanSI%8@jOi2>wruXT-kx`4XXtX2ge_d{Kit^Jf;5Q z_Z{Ew9kYm?mik)jh3Th;BU_{&_^i2b_WP;@+au1twy2vF;k^HEBbN=osn6Zo^+k!V hPB8-m=8w7^zoo8n*bQ$t{DIT diff --git a/app/src/main/res/drawable-xhdpi/ic_action_delete.png b/app/src/main/res/drawable-xhdpi/ic_action_delete.png index 8568f445cf496d1628939494770e7e93f0c03903..332082204d18757b799e35f9d8b7795ddebd7aeb 100644 GIT binary patch delta 264 zcmbQpvWRJday`RKPZ!6Kid%1Idh<0Ih%iX+mA<#y<(=E%g=;)LV-z}aPyRlmlK+@# zrf1jM76upyIBa`=Z}zr{d+RYI;ppKc@*^IkmlGLEJvICdr?+3+qGd%=PQlnj(M3E6td0-}S($ zPQOX|=VA`MCwJKk_Ok4=eS7yG)0#!LeiO5vRLd>BdSZ6(hx2^reOhL{UHgke_uIF0 zzlqPDTy=X41_lloB$309HD>eW6!Y!?o+`5;I_n4 zBSn?kq_nn^c1Ei9Wwo|b&!@zj+YN#s2!bF8f}pMHy6(w+7{wIKl!Hp~uXSC2w{2^O zVR(>^PcfUO`EWUW^?m;$8r&8AR#nyL68LqWKkj*Vi9AZhr+-)!lVVRfjFgkuoA<^0 z$1j3JCs2&A_#lUoy%XHZKU3R>fx|^0J1{fBP}|Ro_YdX9%>?6u+oc5P;bMaK{8C(@ z7qHxdb2}W#1o|y1E*4V^#&Za9CPcrHQoJOD!%ncwExGD>PRpq?Asf$YFd@bB?mKtQ zH_yg|6wg!f;(wkOVnWpOqO_M}!sPkSwFRW&)jiL_gyKAZBom7D{83DxwlCT9yO~hD z=l3$<6rSJ9gj0BaFB8t<`G4>2g9WgsTY#+=P&wY_2EnsfA-cDZEQ0=Vmve?Ub%u>> zgvw*Wmc6~kjFJ7#Z{6EV&KT7_zf?%d*&%Btq-EdA=kju+8wY zXM)fSFHa^&&hWBhg2oIlCnlKK43G2gadjr-a6w{?33OkG{n8X&L%Hk~8LvxUk_tOP u`3r8;%4I47L+M(?ZkI3_g8ikJn?@nlAGYfA6%{>udU%b zs|hCArzbwS2{YoyCY*B5ziy(CBql_}4>?tdCNx)2yOs$=@w!wa)F}(wwD?hxNeU#0 zZ;OjhIZ7~)ooUF|Y{27M+d6N- z7d^`uwg*l;A!ko5A7#ycV!uo=KpAfklCVk;8!jg?V8I!)r&NP=Wqg zeYdQr-mg+jRzLORvLpKJw(i?HyJg{)8ArFhH|^fvT(D?@f?wqmA9WU=r;+7H>~C3C zY1_rjczGe}^={c#jqCT{=(!!dqp!;ZcG-f;uy-$WtTcbumV)@6u6{1-oD!M<%p_yD literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_action_expand.png b/app/src/main/res/drawable-xhdpi/ic_action_expand.png index d3a3a723fac689103555a5cb8dcfb02bec63366f..595d639b2397f18acd1cfd60b81c7a9c4b5cfdeb 100644 GIT binary patch delta 182 zcmdnYdXaI0ay`QgPZ!6Kid%0lIdU}{2($(2hrGX{_r~(>^8nw2ts)z-GQ@4d}`PxAHM#l7{{w7)((#_{;mvEOSoPyNXJ`QVa7qU}DHt`CwAyjs?N zT=>7qSnyDPe&>X=KT|ng9-H4eq3q8@j+e*lyDuF5v6tg+kG{Q-;$JZ9e%FP&KT2Ej ejx&R;`Tv!vJv4ri9U=3?!7a2?o2Kx2!bF8f*=TjAP9mW2qx5O zwGG(ja5#LBl?HNC1GQw~{5RN5rBZ3(RXzj%^YwZ?pawh-Qhy5qiK^A=5lH{i@b?%& z*hzCHkgL&X?2d?8D z=^s%G&f~NnF+4ZGJlVmne$VE`TDJ zDR`;2zm{UfX>Q5dtZt3(Vj8V*AipeAT)hPW0zXBys1bd_3BD_YGGD;EQ^T6)*xi+L zerh>%EJ46GXRf&_a9g!F5Bsn((>{r=jh!Xz%GzD7Z04iR>ewCLS{fKjL&Y;dMt2TN zpWNDUhkqBt;c7q2Tc@Q@aG1WYXB}T-?3U+#A1BMygWxVOMvG)VtqYd4@9#!N=eO_N znm1mm1oM^ymdh_V-&*I}bnXrIgtJCkTQd2!bF8f*=TjAP7QQ_!S2w=^yc?lc~!90000N diff --git a/app/src/main/res/drawable-xhdpi/ic_action_forward.png b/app/src/main/res/drawable-xhdpi/ic_action_forward.png index a7e916e4354b1a03c9a8849e2d45bd708ef93309..3bf25d5637d5bc33da8ffa95340b0b1dc010237c 100644 GIT binary patch delta 153 zcmaFMw1shkay>(}r;B4q#jUqD4stdah`1aySz`Or@%5K^i_R#rOJ7)F&Ah*%R)EEu zk%57s;@UO+OZV1&>+aqVcg)>w#w}T;4uvKTDDmMfN9l#!myB`3jtyVb3zl2{^iJ6G y@tAZznD`^F`_kUZOJ2tMpOj*m4bU`$W1J2ZLRVT2vBhx#xeT7JelF{r5}E+=&OWdJ delta 339 zcmV-Z0j&PC0qp{iBYy!jNklYn;_35-KYejXN_)8qwR%kMj?S{#gOX27 lAC-M#`mi(r006+Rxd9btu=?i;ulfK0002ovPDHLkV1k@loFV`K diff --git a/app/src/main/res/drawable-xhdpi/ic_action_forward_dark.png b/app/src/main/res/drawable-xhdpi/ic_action_forward_dark.png deleted file mode 100644 index 876b2e0aa8bf15e671cbdca27dac4ce149d0c93e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332 zcmV-S0ki&zP)f%?%(}4KUgd%kl_Qu^<86`2XG!c1_3@fsP7$*031VuD0Z_{0Qy0zHAAKu@42&=cqh zGxh|38eSH_u}k55J;4rojQsGDIDJp}GXtjY2^hd7AU*`SU8V?8g}E6*JP$;8BsN#n zb>zHg&UfUzV9uAuhicT7$~nJ_{PW~|s^VFa@@sOnOighF;vGB81RRW>j|cUc+$ e0002s*LVR!)Ams6k`yig0000m3w2wDTimw4}i2mbhR55(j>qZA>8 z5JCtMLEC~2-`dis;X7OXbB-DwO2Sll2nqkf?^?pr@KH+Wgo^?wfCAzca5R;fI-9zi zdZP&#lbE`iYET6XoJ>{70(uUnp2z|Q300^9^hRItemQ(5-q(`hTeaObcAGgi>sZ6P z2uNmjhE02iHN(5E;fHhswRU({0T;~5#RyT* Sp005K0000<>Y zq9BA2LI@#*kjQjhSKfu1d@cG?)u_q;sBlcs$KFofHlakg^XH!A=l>)~V$~mazR!dz z#{_qx#-Y|D`CqjIv34mM(2Pj%Sv53ZMh0v|d(k(f0oL^k(VJ*1y22Uo5Njnm!Wy9Q zmZA?>11uAc$s3?eP8-?)s~oO9eL|H=^0jA&_b&r#QAZbD8Cx zA8EkC(I>>89YQ7VYk;nKaKtguOmNKeuQp&a5X(d<2Y3VEOCZ6QpqZ>E2vH8%eg+e0 zgiK1^VC+`-lH3mR3x}Z-@;Lm7ydiQz+!9;EZHZ}zcYxg#<+k{Y3;(5o?J84892lhyem5B)|j3%Z0@;T>*~Y@B99$ zEX#Wm;*nynPJl5az#YY#S^=0m&#&qIjamVYB3LRxmH=#Aru2DV0Y=kdf9ey&n58ot zo1g+PUDrK{w9RJZw}0vBKKJ47V6)A1|J5Q#eu@CxA}P^NF?)wl$@>am)`C~tHR`&4 zpG|}bySktP7{_>Ui7?A_P%nV`DIjeTjFNoF>9E)~7~2R%9r@T+m|`dH+)(vq=)bnZ zROTBTh-fmdDpe5J3MDg!`C*8a(EGJbNc@g zuvNmW`*{f>aKb9e{!%5VOnzi}S8B>000000001D0Z%{#*=N_qUy8r+H07*qoM6N<$ Eg7)pr*Z=?k diff --git a/app/src/main/res/drawable-xhdpi/ic_action_plus.png b/app/src/main/res/drawable-xhdpi/ic_action_plus.png index 348982c0279d7b64e58e3716aab4838906196b74..0723c99b89a599e84350f22d4eb94b2c207b74f4 100644 GIT binary patch delta 108 zcmX@d*vU9SB{jg)#WAGf*4rx^c^Md3TpfR(Pt(}z<*ZnKQvQIp3j+`wn3^N(z`)2N r03+&Tw%7u>2ZTjnB49a?+Jr?6=8KmeG+OSU2;zFW`njxgN@xNAy#X9B delta 178 zcmeBVJjXaerGBcXi(^Q|t+%%fxf&Ei8WLr#oXazWS))&-UIq+sK;`L;I~|%!bIKVun!U2jeDXEw&h@*w zRo5)vOE7{|HzZ$Z7l3NhM$+C8{`>p+OF(-zmoOLwo^4sbu=E-TGqn;YX?scfRwU2I@ry2mXHlxo3kB zqel1np1BOApO}`1Gcqtd5cnd=f~*Y4UdLMTTU`@qo~PAa{xxx8%h@cnG(c)RUHx3v IIVCg!008JYaR2}S diff --git a/app/src/main/res/drawable-xhdpi/ic_action_reading.png b/app/src/main/res/drawable-xhdpi/ic_action_reading.png new file mode 100644 index 0000000000000000000000000000000000000000..8a8ec6cf9b9bf4ebb66bc66b214764bd7e96e2dc GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=&YmugAr-gYUOC9gz`()0@tyr_ zXUk@OLB&SBf_^oi0tSQ7O&=WQ;fdfM!ZCYHNu~>%sP~+ zWAa)UaKJhgtz+_97?5Kf>h#(&m#^}gykjvC11G>Csz@9@7LD#a#3`l#;fH8*) zp`Vt?*X&xOIvCIjdUUuHRx!!0@jy#(E#TE))`7)PIe%@6(O=N%Ho*P5BJ1Fm1IuB9 zV(hTkSbKEq_AE#%%G8Wa6R_>PBCeL-190p5RMFY3DsKmDv#p4Cq;s(qR;&$Bm!NTr zZwEXlPHlJ`+$inQ{k1q`V#3$MaoYIY0`H<((@4i7^k3GbEmoX^ZmA9WOm2s2g|T|w zRv_U!8dE=Xlx!qkqz#sUn=3{9Sh5OwsvvPZcg6Vr9QH2=QiX^`(>~~qMz}=Bhx8ww o6EXxr5ClOG1VIo4K@e)h2j8JKPeWS>CjbBd07*qoM6N<$f;Tr46aWAK delta 1061 zcmV+=1ls%Z1i1*1BYy+{Nklcp*MH7b0LDc2mdoWrcX#)F z{LX<_(Ef$zYiR!^v(0DxPu{tQXIJ@c9Pkk65Cxkg?rabQCj|5&L8ASy5f}|vqTn4{Fdl=l0b{W4x zsZ_cqAYO}-jMCREEXRJlKco`869EYLPg_iu8h@NxnOilY3Cn>e!N0c>Xvlv#>)SqT z<;BcRh~mn|u_V|P$GBtS94)H?pu)qXUW5$3K-(V^xPNL#R2o&TRt12Sxv5(f?h2Yh z3l7z3@W;djfQ~!B-*n)q7i^5noq#bOBrSj}9TMHPx3TgY;Hm95n>yzLpi8Rq@I>Ji zY`N7cJD-#QY8vNc!i2)p=$oNbSOH#Dxy@B}KFmjNcIBIJo6QQKSS;o>9@n_()!*># zn{lm;3x5Eej;aQN8+*|P_(spXbpfEmX_YG)#l3Y6-nanr`TQ=G?WdcXM)1Z3AkL2} zz%gvny$*ul3>4})6KpEJxK5lH1n@^8fc}<<LAC_9^3o!3t7)CEPkEnO%+jQ3R&nj5n&{c5#(NH+nSVevYL z?0>y(0igU2IN5?sQHLc)Z0rPyNWasi;b8u%8J9|kiZ3iRhSe&XP>d2NDY054BxU}@ zxkJYMJX6$R$x#YPlv1qZD8H3H)6@N7gjQ3^|2VdtOuvTEwWr+-|(VkRYmRPt1 zO?*RjZ8lvbmFgQPZ8bBL$g}8;1l8YRTS}2*;Xi^(M zToE9%RB{0KlVSGyQdvF|B{@UEF&CM-b8dooRpq6Mxdz_b$$fo&XZeg*?u;i-o*q1T f^5n^rCpYvTwTu~XFIha!00000NkvXXu0mjf0{Z(| diff --git a/app/src/main/res/drawable-xhdpi/ic_action_star.png b/app/src/main/res/drawable-xhdpi/ic_action_star.png index dbb747d27a2ab4598aa8a2b2eef25272b6c9e529..06c202f8a3f2765c45f22c2f2810907351265b91 100644 GIT binary patch delta 785 zcmV+s1Md9U2&V>+BYy(!NklP)UC0MZvKpjF3oNFz^pEP>um%>3ea?8C+u3v02S1oO z=j^rDTIcM`+Oe2QrBbO>DwRs5QWam#L}Yb`h@=wW50Qvs0)M)|9MKiE;N##6OMv-Z z5v2sQvEVbbMJWM8mINfD5`2>-_zX=^NI)M8_!Icd{`Zx8@XJ7&1$+veX8+UlOxdc_ z60A&0XSoKy7^GOBz3g5uyPl$F%TBFg!fW)I7+YO@yUW3Pu$9*I31Puw7{xZd24}sMH{qI>Sp)ljDT@Lf9OqzCx*5@K!kd5v*H)tux0cKfLX92;MkvK?YFpC{O~$|bOG(( zyIvwcnt#VhPqoidd6Tsta4mSVahYTR9QGLJDLN9{ZMlDtwVy2YZZD|n#U!>?EN_FB z{k(b0tHpEte!WWxIKmwN#tNu&;I~gjX9}sa^lVI2haD~@pkHi>chQDO20TK@>tkRC zxX-TjyOe-2=J2D1VXV;KH0H)mhrr(LKMmH7+DzpNI2i zUEem3_AQngAj4i45^z;GZ9eTY9>-u_ic=doEUvhafH%zH2Vi9mwpP(3nz8pP?7=Ug zlbR1Si|0!_X%d{y(;-X2)J*GmAr2_3$o8g~N~Kb%R4SE9rBbO>Iq5$=O(=Kh8;ke= P015yANkvXXu0mjf(Pn^> delta 1093 zcmV-L1iJgD2H6OZBYy-SNkloMpk@Fx*AGD{IiGQ32js8$FnVfJKz&Y0f zLw!d_$Eidj@!Mel=UfX613>VQL%d+ZP#}oU<#PL>^4~NAxW;EekbbWwUT8sYLlYm3 zMz?^-IU)70M8SYLzSFP_0I^x={D1=n|2jjy(~!g$3WW_S^erL&A0cusLn7a8MCpf> z^q-j6AL3kTL4Ua67y#lPDyMhOdDhm}7F7{pxS@#8WHJXJ+3$kLf>d+Pxh9_f;BS1J z#^&?+jgZpj?(XhwjNP!~lawfk?7(;h<1IYDk8uR!E9v=-gnL{}q({9ok8u*?Qzl6m z^BAwSx3{0i7-Qy0CgJ?;ybJH-SvrjaT0rEWA!q_P1%Lbu{8=of7eoB!ODq=Kq0itN z_bg+-U)&QoO=i=d@UFabRi&Ozr!P@8*Lp#hWT$@>M&~QtpLgV4J<$fLIdGu_BI)fH zs41Ag!1xH`J*?eW&9;rNxGA)a5}m=gSR(NY(z$w7$1`qEyQtzA?Xs(@Yae{WCNCN& zIO8Csdw&||J##sK8qwrvO}ro+(OybcOC9*Y%kB=H9W_bi6U3Li(|WYDbZlRSgvPyS zbQ&i)>LU5!b!(|H^w6&9iPfd1Xe!k@C!5V4#-4Ar_lMN`O!!;hyZ{&K)Dgmj$+Oi+ zp|Rg5?df3#7kt%5g9ksO<2Z|)N-oO8N@b8Md4B}Ph+hky7M0Sjs46qKGNR38ooH3t zv^)ViK!!x6vIA?~2hOx#5kFoxUy+PYkRdWz#vXAMT`ty5^~X$3`hjvPJ0?`JQNkRf zUg+mXk13g?g3E@8@s$Tk{Fsc{b^5KS2AJpS>`DOcOBeEnUPc z(LWema(O<__7{5zVr>z)$F~g7-Cd@!T7TV*s=qd^?~pN#FxQH_`%g23XZSe*>ibXs zZl1M)TLs58K6BF+iL3zq90A6P*){NPDXA>q;k#~T;dGvSNj%$NZoNBpj>`G-1AoI# zj|&49y=b{rL;7Kr0L`+TtxP+*}-nU36K-8}|webLC@<;ceRP5j7{TtYUx{ug*n zCCcY8r{GF1hoi(fV_P1+a9do`2#M?so%CTc(7dYQzo#=qUeZ?`+&1TflrkbDOgHr@%#lF4RBv5 zFj2+x_r&v4wkf}s_*Eznce#hF!^^}=a%U*6j~E5dI-3m8B_cTgZZ{(QAc`efI31G9 z#E_AfGHftF-01d(gi_Nbc9MDY2fIXFA-!nSCId`}i9bLcKjyN_%ewRmGUzRAG+JmW zTa<4meh?FXhApo7#`&Y@E^x->I%ke2;y7)^r*!1-#U=Lcv)C?&j52zp#0L}EA!@h5 z07E4d;PUtu_xYB1wgt8RdJSEXQr=0>3rZajcqF6=cOA z!;$yK(_fBga$B%{&7gf1sew%HHC%;Emc7}_1{gqNq_YmPw?THlmkki9r;B1)L;?zh kLZMJ76bgkxq4+=i16DtI9|vUW+yDRo07*qoM6N<$fGTv L>gTe~DWM4f?1>** literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_action_tabs_dark.png b/app/src/main/res/drawable-xhdpi/ic_action_tabs_dark.png deleted file mode 100644 index 20ce803330ccbfb4bc5bd33f6e6cf049f74102c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=6`n4RAr-gY-rC69pdio|=(eC# zLo9)>T;bg_zvolS!X|0o^Zv)WPojx)EhA8Qyi(G$b&FmdKI;Vst0Q-_XZU6uP diff --git a/app/src/main/res/drawable-xhdpi/ic_action_text_size.png b/app/src/main/res/drawable-xhdpi/ic_action_text_size.png new file mode 100644 index 0000000000000000000000000000000000000000..ae530e384017be4acb8955eb166626eb4b925a6a GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=F`h1tAr-gY-Z;p~pdi3}@Jsw` z*T|MR{dagG8h#rjFaebqJg>20;!tQ{U@}>E^w&-ihlWe;z6^{k0uBw!By08p#lezr hBJzhO$jSptxSe}C6f!Qe&Ia-rJYD@<);T3K0RY)`DmVZD literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_action_text_size_dark.png b/app/src/main/res/drawable-xhdpi/ic_action_text_size_dark.png deleted file mode 100644 index de5ed932457e2d33d8516bbb46d4a71be3554b89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=D?MEtLn>~)y}FT;$&jJ#qDYf- zgk@vGQlb3D3xh1z`@eErWaVF+dOm~OMbt{{H>REFvC z{~s}NC^*bs@38BK?q|c#dGj0@Sp*yyAcPg)2H)HJbIl6VPRxk}IhLWpX`XM|R?~%? Q9lt~)y|$L?P=G|k!^R4B zvCR=azk92MH$BkJ*l?S-X@<_dwebcgCNvry-uApvzt{NOy@GR-Sb&-t{w>q!a-Fs8 zw4VAs%h$dQn{?hA_UoxLU18!-aL8wpNjiLd+D}Rt&jQl}vV6ghcV$HKFxk@A25ybU$^>bP0l+XkKRi$9H diff --git a/app/src/main/res/drawable-xhdpi/ic_bookmark.png b/app/src/main/res/drawable-xhdpi/ic_bookmark.png index f9a207d05db6cb07210cf07be3c1fe79c17c4628..ca87cdfc935d92bb7ecde40f6fb633c0f039ddaa 100644 GIT binary patch delta 568 zcmV-80>}NN2GInNB!3u5L_t(|+U=UTO9Md^#-oYxD2zm-m52uxicRopR8ZS!5z=@S z5!6bs(0~LBK~NFx0!9$jCU}7w1Y_Yr@Ie14-{4yaA<6FQ9y2@dgC7KTuJ6n4&XKrW zBoc{4B9TZW5{YEJx)Eu$iAX6w@P_zh3}7DkMxwHr_W<`f0e`U1ZkYlY&oQqsCQ|@M z1p-LQV!pG0d4&!c0*IFgVBP8FYk_Qu0J2!dv6?MmUSZm)=F5Rw4FTL>S;uKugL#D^ z5x-p@&?{syBJk27kk999lVpcySxci+MJd3acN5GGK`V^NTnZ+cW`u*kGLX8RBIY=m(xH zH2(zj@irB<>zwNT${ow2I8I5W}wDNxV*qNoNqFv0vjP%YBRaLqvTt0L|XdJGJp zOT^93jDZ16i5S41fdTA_W}dCg9t{j2BU%70Cd>lOB7X%iX+i)YkpkGzXexzhDH|6l zfNK>qFZgD6BkUmbRi)0QDCYetM%c+spg_FXQ1f&L#B!BBkL_t(|+U;6fYZFlrZoNOKczLlRC^i~oOYWDAiMTH+qC^l= z@TH~Z%{~Yg6ZL6{2o?*{+G_l_ejjXLDd}ddIlHsFGcfG3Ip@rL-<<25EG(#~sHmu@ zsHmu@L@xP!{sJ|#1eD9=r_@Y>&*gGwYqi=}D&MmhePFNsp?~r{Yxozd)#`9UK&4U{ z@LOik+qQiRpvOJ}#{8BU0swep0^Uc$Mkc_wTCFSS{=0_>;I~evb2$sqe|{LekA!Eb z25(u`84$1?K)^TX>C_Sca83W@H)S3evrH<%yRLh}zw`x=Fksm-A1@wssun9M^U1I)#CA6rU|OAj3AqWk@hq07@|*IWML-50=-cEl?L zZMCKC_U>{$jv(?o81Hwa9(b1Eq-&4>mo`N2`+3s?C$|hl{=H>c=aX{sYtNeibo={> zIsI`jZhxTruO;cyV`N|mj1qBq(rh*_hROUKW4AYE+et`$RSd2I z@efBo8{7na5GQWjPo8ObX z0eUebg5Lq)!L$<`zwtMgnL$EV@(QpOaC&33Epv>Q*dr?TDImm ze|}&c)E`VCV2`%MUw!eWmpT0ZoV6F(2HO&Ubq2?t_`3V6d7j+Z7D(t#h6SFFB@)0( zlXrze;f5(2Y@0TqZ$*LUbv7cCkK$T8N?R%_Dk>@}Dk>@}DVD!CoxoUr&)wVr0000< LMFvhpu0mjfmS}tR diff --git a/app/src/main/res/drawable-xhdpi/ic_bookmark_dark.png b/app/src/main/res/drawable-xhdpi/ic_bookmark_dark.png deleted file mode 100644 index 43363881bb6f29b94c3616f3004b5e760c105a68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 703 zcmV;w0zmzVP)&AtOkH)1%!G#J6 z3eosz{h#7@;0z2QiIbQ+o|!ox{9s6K?!DjVo%@(E6jG^FDwRs5QmI^5Hk07k(7A_35M!+td%$yxdeL1iL-3?PxS^c8~2B>Wh_ zngjC|t9~=z3hqh>fXcQ=-o{30wgxd?*W;icjDjgJ4_3ei_yaCVFmG|ezun-v=DF@s zZmWyij&Wb2#eF%oF# z-3T^+O?@;y2XydolV+a!)Zx}d*bH_BnWw%qxxE_Hm$MpEi7@eBBC(EJg#A${LZZ+o^4nBM{)ymI&%HxR&B z$SdN#c%=ha_R>oa6FbFYPrN)qCmUaR?pH4Kq^Q9Q0Sp>k1qQqjz>>iL7QJx)9~unc zQ1m>&_kY@+c8Z+demWVxREEnII$dr{HD3*G3p}lfmr)=66UAPh`lyX+i2-!y+{0)5 zGPLRqbyjg5XE}37LSg{Zw&A`|$&(w^1%B9Wi)o1g&~)y?K$h$v~p@VqQ}0 zxm1_1LkDJ;X=F9M*SZi;?N`M9Li|y4JqJ)Z!+guB`^QEO^J=hxkn(^2*W)(&j0S5-gvTq_ll0{&_ zLk3R}4dP^&9T1WFAH2oBpkbX$gTys?_wQCcbG%~P9~HGo@PE2lt}4$DwE9Xe+r5XY Uo(J^UUjezq)78&qol`;+0PT%cQvd(} literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_history.png b/app/src/main/res/drawable-xhdpi/ic_history.png index f16bd44f306cf0df69ae624691bff73b9d8c04bd..2a7b04487e135c6b9585b8a85a2c4a336588ab07 100644 GIT binary patch delta 828 zcmV-C1H=5K2-60TB!3!7L_t(|+U;7+YZE~fACj8%U=xjC^`bqrfkwTG$5N%~Noegs zi(dS=wKaN3doiL^{RdPqrqN3yXj_bJ(tpo4_yWu0ZD412XLjWM;0GbQ``*mkc^~s; zl@bU90)apv5C{Z<^pFEy2d)EO1HS?ffkWg0unlbCJvDsBdw*O4J_G&$of4dB3F;*=-AE#Ns{CVvN)^l8HU30%zb#LoaD4zD#a zK7`59t6?H*lb-~B2pO;rcuT-S1bGE~rV}Fb9k7_CH_uJ}H*f`*k0Dz>y9(@w7$FlY zfm`LSnkjNtBFZo|fWp8?izTZS<5MQp2SizkqimtSTA=zxb2}N5#xT;2$FMGw?=M(_m7CP!N}aZC-y+62=XvbG%_HAGIx09I4dRbl>HBf5{3gCn%(WDtF9SEY>^rX{wa9N;|W?chN6 zRJu*kvf`VfW#tHq%3fPsPx2F^Z$UXmgBeseVSjg+VcxuxZZHQOk>4|e>tkTd$CSOM z_@lAi6f%!7CPR!ciVIN>M~j%}yCE`nRfY~ngKz7F3P0A?72`J6?^TQwqvP=s{%Hn^}7E9Bwn&A*l}}7L+H@DRPS`mP~kzdA_VX#59)8J%fqwV|nZ4M^fAds)k$X z7Bx0i4zPtaK$p?Yj90j&omc|H> delta 1040 zcmV+r1n>LP2Bip)B!BElL_t(|+U;81YZE~bPsFO=w?=Gz4nzzlmu~`jNVOo8su*bK zlO+18_$cB_EQ$)TB|;nhZ=D}(Aq>0c-DP&ODLb%ad%c^TnVs+5TrNO>009C72oNBE zU6@QJ7izWIy=JpnYqeTC^?H3ke;;6Aj%PHYMx#-{yXS)GVt=uC8B7t=Z-~jC^!qo- zAR+vq_s8vay9yj@$9Sn!x=sx2DMtPzWtxqsn8^>=uvgKDPP`AVg7mA-j= zHYmxtltB}wJVYW-aFO91X&hc9B?Au`jzU^mluwxRWXWpAh#0L&PDW`Ro`e9DV;pPz z!LGH!2Dv?VK3PJYkN|SsZubs%#;6^v6i}$@G`7E=(UFP>KxyTW`vO#vHq?L2ZC_=0 zD-{4};D5dVw2C(~cs-A>lQr3q6aZ)gExex~+Ef978t1pS1U@kVDD!--$qNdi_RkkU z<>re3s?}bG_c z+LIOl93IaHK=axNAZ;q`TmTMC;DiW%O}{t2G=BkUCrHW54Z`z|XO<|mvUGl}J3;9% zxS+N*8s9Vp&1V{=q-JJ43`!?LTzv`O3tHnh&*|y+EirO;<%y6f6_!jl(d5vXg=&F6 zGgWv_Qeo+0D6YmwgOlK^#w;fA9h%+W)D%M_@oEq@#dimNdmFt6m_-ytFBi>%<{xxE z!GBpfEZGoA+53ABL7)@8(uRm+ODwHf7#gl_TVj$;Q7MzuG)1TAI9pxV)E0MnVry!P zJ2@tcIT$%y^}z@^&x=lWAns_)rY4w<#$c89xkZWu^3v~h+qv%CR>lvO6KvANq$Z>|N zvLl4kwY(}D)3_+0y{5S={R+`U#rpGeSvo*~009C72oS($_y^sLtATa*C)WS~00{s| KMNUMnLSTaSF5T<^ diff --git a/app/src/main/res/drawable-xhdpi/ic_history_dark.png b/app/src/main/res/drawable-xhdpi/ic_history_dark.png deleted file mode 100644 index 2f19dc33bdd89720c0e69c09286d717fc1dfe1aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 998 zcmV;ini)oE1x7NCxbT*OeE2YdGrunD*^ z4T{g>_8v^2v&?An>4b{ru1pFWZ-cn3H_cht60A=Dnva6z)am)$n#JS!oG(ZNAK)#+ZE7Jf)BG}X? z;3v%hA;GyQ+y8k16@v`$fLPzM?8^_I&le3c0IM|)Ii59{254~1Spg$!kO8u|rXbIT zOanBDY8PPs`v!2^R2PsP1X z>k@qpivObf&}73L-INE&|@6 zAr@0Dh@ikN86~j1d4H0UV^(7zqR?QESXo{N)b>tua@(53XTjl4_3nikhQ+L34D)NrOP}(~$N! zYg*(b$jD=~7q!RNowO)0AaNElAhDBhK*Gg$!v-YQQyq}t++o~^OgAthQzAxWN|@Ev z@!4@BGOLbBgn@BC;*ivk7?K*s7?N@w6A6#V8gW^Yfj-UznK>p$+!(hocaSkC`9k>( zPmv+Am_@dUdO{eEFvpnAQQ459N)gLzHEvk?HU7tpRk$?6(v~b)vSi7UB}*pLePx#07*qoM6N<$f+QuyZ2$lO diff --git a/app/src/main/res/drawable-xhdpi/ic_search.png b/app/src/main/res/drawable-xhdpi/ic_search.png index 07e472c70d27644b68ce48c6faa8b18ec7805c5e..82553c6725c57e6c6ad14151b2072a20201b18b7 100644 GIT binary patch delta 510 zcmV&t@+x3+w2|Zq&ev`qGqJlJ|uoXx{Z;z)QD8jn*1T@HGe_!TfLCV8t=R*`47^V z)FxF(IaY+}ni>q48}58@ zhd4o>rHD1vu+Gb8zMdf7sbNm2W!ZqC80?J_)MnOv@YL$Y8>fOFBx~uMGXKHJt|( z_$0@4Aac($dzIJtJb&&OCcLdSq$6#oLgf$>;%Xzl_jk2b!f40DgKD`U9UFe@YpaGP zA7(^Nekx9XOl>Y5h1B?c-sNqx&wG2%`TdWPeuxP@$0A??m%Yh^E=;h@gkFdV7cjvx z6S^?rJ6Wp@kS17{{7)0CO&$OM00000002nH7w3Qvz*i6s6951J07*qoM6N<$g5bUD AeESjVfQ!vc2dd|dO|q8 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 XL8qdovI(cC00000NkvXXu0mjfM%qiZ delta 1058 zcmV+-1l{}m1-1x~BYy+^Nkl;KKgS6i0 zgGL0QwJ$||D1uFW3iiQ>t!*X7_-~z0CU9KlT$1eWIVn4^oHpmOGqZE~W_D94M~)mh za^%R7BS&Vb-|wHPR;x?(dc8zrrBbP^m&@fY2L8rxxQA!(?0=~cI-AX&Ycv`~5^#gY zw_2_CC(6LHcn9y|8w)3RE|&L-^k&R++y05pz%`xJv(TO0I>uSqbr&y@{2d3<{<%yq3lo;Xtwk z>+XPnXVT|MsGm}x<3PJF#RO}C5orj~-k|WuWY$%``P=RGWsVQ(dp#>DlJop{&U6Nx z@ZLL!`E9yBD-;UXBc|K~HANyO*+6(YK+ev*yfDNbtAAk0C}IS>)nw{BI#MvQgWw8l z#tIwY@&qa1Uy4+50(dl1KuIPSw*uHIU#hVHyqYlo4UL%ooyMSiQw3w-ReLjIntDDY z&HbWlS#zVMr@DdGrV6?=Qe_q*C{W_6chEbJ==VDYtn-O5|B}w!UlO3|N=Q%~+Crwq zVll7IuYWZTKv>m`33OazKr)D10pNvQ>%RrkX=3Y&0!})e&Uto^jE@qmDFD2HC&fkA zb!xb)79ZX^+{Y5EDF6XaEzZERQ3a?`w%Kgn&;gVX z9+MLg;}k|?KF7vi9#R6tFR%1#4_&~4olT_wnQct^fc407*qoM6N<$f-GbG2><{9 diff --git a/app/src/main/res/drawable-xhdpi/ic_webpage_dark.png b/app/src/main/res/drawable-xhdpi/ic_webpage_dark.png deleted file mode 100644 index 7524ab591cb13eacecc806bdf3ee6d27d8fa26a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 921 zcmV;K17`e*P)tJltfBPTwm^EB$VI;`^^^oD%WI=>9)S{`w9 z`8`eiI0GytY2p0ZKua0fqkn^HhxZAYg`U z80kaXX5&;?Vu9zBYJw>Z32_sUr8Plt$y|z4VVQOCc;s>#65=KR1L1cTbIL9WK;@ah zdnBP@m?3@vUf&}o9lIoePXTnlENf$fgx`S25vRZ@n*v3bK@fk>DB4Y1AR(8;AgD@% ztD3f^Bt#*=Z5q@RLOUUCO-P7BfZIZdl-8Nj!(bq^NJ4ImQh3V+0R^@g!oafOwN~3jUaT~qi?a-8hTSsBkXTWpKf3Q?uu+({f2P5og>`b-oMZqegsSQj!k2)8V zaz41EAz?rV8CbGTStKAihoj6BIw5EK`0fqh72t)T+b^b)C=?T#5su8R#=J7q@IL1w zW`|L<; vAY_(Zlq}M-hu2{d5fKp)5fKp)kz~q$%FG2n?tBQU00000NkvXXu0mjff7hJ$ diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_back.png b/app/src/main/res/drawable-xxhdpi/ic_action_back.png index 149909437b15c8e0ded28c7ad60a4dc54a830fdd..ae8a0a690266c20b53fff824026a8ff25553c353 100644 GIT binary patch delta 289 zcmZ3(vWIDcN9*xj9ib#l38T>`lkA6m}?Q z?)nqwWt{an^LB{Ts5(|mxp delta 531 zcmV+u0_^>~0;~j(B!BZsL_t(|+U?y-N&`U<#&L1!N_>Kc2ziH~7tv$*HoC~tBj|1I zf&@fFCOTtflHVVS44K}{SCj6luQSQc4gdfE00000V9n`vyZaH8NMJgh9t;M9hln_) z$Ujm58leytNDDsOSzgB-0$Z6AH;v~38=Bu{9Nr+n0}sALp3&8aW_{L zzr^!+JU*mcP2!h3e^yoe7^@>D{`QF<(+=@#_I6gNcAm`n4S73NN=?;H!`_ZMe~s*g zrT8W8iJvI`WPdU_rCg4;W7^^E@OHr4VK0FAydCg%cstV@H?qkDhQ$+>lws%!W(@&Dttkk|kj;wtpm(lVD$15;ivptE>qz9a$6d zy`!1xDA_xT5>=m&=pE^p*%p!@3A`iT5$}k1q+{kCu`MJ)5_m_vBi<43h^1GCfn VV|XwP$_xMi002ovPDHLkV1gSN0owoo diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_back_dark.png b/app/src/main/res/drawable-xxhdpi/ic_action_back_dark.png deleted file mode 100644 index 11319e4009a4070be03fd26a0b517a08acb3e486..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 508 zcmVj3}&0000009wv=yS*u+iJ0;SDa9@WjWk>SFlCmq*`@q>sF`NUAEitW%HOB_-AF_A zmOuWX{KFxPHC12vlV8f;XJQD=t({|8r@WvKD&95tPGf-YHe z=ltf}&av|EHP@`$QGQF-j`F!3ZU@{Bw*zj6+X1)3?SR|ic5tTKDf5-`l=9etTwl`K z>0(|k#qAhCu-h?!K(}K624DplfEVG84d9Q*&~-=h>>~D`FJe^0Wy`q25aM<8!aE#e zAINMxkg4yoR^^f8r{}@>htNOcxv(J^LO0h@QE?r4O$c^JOQ)lFceHR%a9Qi*5YBmn z#)Ia#BkRZzxFha}JK~OL3);dExFha}JK~PGqxN0aUVUt3oI85AhT`1OMEP;+XzHDo yaqh^+*9W?zxi4^ty{!3Y0{{R300000Xg%NUKG8xgu$CME0000Tv}?<9q3Q)?tJ_zI7sP%D*!O^C z;SZ&2DNR3W4Q8h(p7E|Tp2>g=9QIYtJU?S+Y0u_A$vw^<*Yy62T$W?<^#8Zg=w8c` zH&^%^`h+$YzZdX0)hE+CN7hox(AwUxXv&Tl099 zjB0ASWOu&r<6Dk>MVo>*Pg*?Z%@vdHc26|atz+9aOj^9>P07;?efPuZ&*S>O6`9nO zJy~&_xkAnQ|H+HDuVE16vY#@Dk_5Dt7;J>evo3CC-G6VQj0X$ zk0~vPDEdLIm0Gn_r4SI>+LmgyqW-s@qZ3$Z(j<4Y+1>Q~V91i}%-lJ1@64TDl1K<4 zgb+dqA%qY@2qAc5cTy%`s@3YgT#k;PU#^MonS^Ej#(ShxKtSLtUeB*H2`juuN(JEg*=)7| zfma)e@0o;E-m6IHAQ1IxE8=@6fpw&uPb!tlex#YjcEtBi0_(C3DQN^kW-a1-CxLB9 z$u=1o894y)N`Kf;KU>AG6}G{)*rt?i{e)ZWg!tY`V4G65MbAfB@09qS#UExxC$u@5O-$MY!+Jai*K@oSN=!M+p;|7SZlgIIQUTaMVL4p{koA5N{;;gOq$ zjrAAme`4Xaq5dZOrVV>J+qrG^eAHWlh$$9cTO)xs?0-qm&tx(;@cGr^`S`4+)9DL| zfA0X2yykb7NT3bQmOT>*e3^2`vf(;`Kh}E-#_#x>aS}FYQ=->j>d?#FhP!24^OroH zzhh$gn_HSJld$D%>&-}TkCaD!Y`E`H|6;R#cn|OOu`!SK+@oxl?cB0@KFWt(Jil%v zu#PnnoPVvo5eYo-U|?e?UyPo=i1mHIkYNq5u4NLOtz)r2tkH|yhHG8(7l($1&Koz! z+McjzjRa?VUu?z4!0%a8O_T*J1?T+Q!8X{IHAQt}=!>2BSOV@^Js+P7K0JR%B(N>E zX^jLomUv9U;Najv7(VV}!+lpOmCkh9F1E?GeSf5=;~ZODmK~G$@U*vX*$Lu6^fwaN zhjkJny&R=dsY5Wd3-a3=a>V=(gSLlYJY{3ELbq#~!-p!;lFd8}1zH_J{NkEa_6z zIe#B}!bGT%00Yt}-;JI>kIdwF*bz({tdYR6Q-d&5&SNnCDay|_#ed~IKPuT&}furaq#?l&IH?^J7?lpDxv57hK>0}Hy$qp1V07|yaSW-r_4dxi%)tqqU}0!rV7PFbVeLIx z-BR1+nG4q$%Q{Tiy?Eui&F9$!p1#Xi%i(O+pi%C=UUD(A6Y?*(?kP)EF5ycrq~L2sLcIslt%W%y8h=znvNWqBffuU8>hSp2wTO!}eh& zZ$dRgW;KWAp=RIsRKJ@HasJbMdzo|E>t8nQk^atiD4@Pi?(Y5BHf#Spy!ZP2InCD( ey`f>icUgaa^rn}rOizD-+~(=(=d#Wzp$Py;>WJ(B literal 621 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U^4M^aSW-r^>(hcH?yNa!};&g zEV*0wTsTy!r%&HF;Wf*Ag(X6)t^qnZE-a3|nM*age&x?)`# z^)LN%n;RHCi(L18PN=y1LFu?`)dpUOW_%`@B_y4+ax3wWpKkvzJb;Xvuacx_2 z*WcdjP+Y3G;P&a+UQ2^EeW=(QZO7rjz$5^4m;wVMsZ1Mg4H2&7OFMe+FS?t@uXsQK zy8&!0EdpV@Q?|#vVP`boDEj)sqb*Ug_qrRJIZj`_vukCedZ$kI*NG=iUCmLAyKu;T z(uF{mx%K&*!Yt<8 diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_delete.png b/app/src/main/res/drawable-xxhdpi/ic_action_delete.png index dfdc369c466ea8b47ad9afbff51dfddbbf158265..fac932ff7b7f61d563aa5c53dae8ee85bc774911 100644 GIT binary patch delta 465 zcmV;?0WSX42I>QlBYy$0Nkl* zk|QBRAT8KVllLT_W9;NZYo)3H00000000000RFwVFg9Uq!&nrY$1=`g9p^L)?_sRM z_zvS3#y*U?z&zS(HesCNTvl;zlfU!Z4|)jW97nqVUzsM1O$ zj*FagA(jvB{1V?o#W!J}DMv%Hv!B!A=gg7p6kH(LDVQVKNsy!6zy*_?ggI&+ES&5l z{>9R5LM=OKbAQzQGDosgFh{aeI7hOR(2%=Zb_(Z6c1DmR*%?8OWXA?bkOcV>_A^wD zGG(VrO|FwQ+3C5vOCI#kHaph~TH>I8*4gR%ceEU3%1$3S%9x#$8!0N$;bY!RxAHeNA;1i+}kfcu^Yw0000000000;I)1LqX**6IlVh800000NkvXX Hu0mjf5&hXq delta 831 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 delta 511 zcmVFGnE(I)000000D8`BHoJ&Li41Huo2#-cx3S`5 zigZX2{bsRPyoUOYRTRZbe2y|5FrUwFm&@gIEq-0`x%e7|5`QwCPVd5*{`6b?y5ei` zJ(S8IJ`)mhI2_KxI{z5z>n{Up6D&t*z5#Dd45)j8#+;x52XXgJO^CZATht@7TCJ|b znf=k!gg7S{))Gv>LEQHi--JCAm~fgVv{{arkftM7yK7MQu7K$d1y@3EQS7 z$c_@QUa#-ln13L)U;-0lN3tW?k?crzB(^XyGeLI51lf`7NOmMUGBFP#wg?Av9?pn| zp;!1EMX1jfJ)s{agafIX9`vbIFS4UC8_y%R_KL1tW3RdwknN#YZq_#LnLF3iff+jwzlV%~lJ&c(R{nQ#qR;sxTP zL-A!hvYpe}=f}ZGwqwF2KJke!+mY=gju+ZAT-na?_xZA&9Jp;|PnI7yZtb}V#P29} zaP#iW#O4}zII^9L_ydO?;4e%700000003Yp`~ZMR{x#a+vIzhH002ovPDHLkV1j8G B>>mIC diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_forward_dark.png b/app/src/main/res/drawable-xxhdpi/ic_action_forward_dark.png deleted file mode 100644 index f603f13463138e92b1b40103bf546aec0028fe53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmV+b0{{JqP)Y>^UhkVm^$cAx`J+}OR?C-pXw62iFQxv4JbG%^d!cH8S|$}Z%5`IRDU+* zP`l5g~-bVs@)-H~CyIi|(7^m!p9P5Z@gMAhU`qCMaSW-r^>&V-pOd3No4Ch< zi!6GM?5b)}*@-zz9&p4Q?3i~rqLO*zWfvhXuZIEWyxUr4DD>|sO@IEg_T>G5fHUWR zmzSqiDgup!f+-7DGA(}OA2MUY4B?9*TY`MQ8hd;>tmz||8=YlR1+0%;lruZm$|%tQLlc%W<_3me z5s&SD=c2#J|DrhCjXzG@&U&uK7p>WDxVSjq7GS;@+`62RSxIDt@-ES{h6nN{>O=`D zU({y1@h<3GzX>DrzXcA9l^>m`4L5dYp0!JDO5}{$^SbR%{#bD3;@yi2-xjLMSU1?{?JU1a;h zU)Fl#_RjAIKQ6ehRF))NAUucf*V-iYZH#{(e7H9;_018p1>$q=T5sx`dxLFD^X6)I zi3ta*99U8}C?^S?d*E}xY)W%PYT7*hq#x=Cq7xnX(@Fok%amN0GoGToj(#@A%$9BVtJG6MytMyXxrCagw&9YZH>9|2(hwNbsr81t! r9XAYnpaPG90zJM9e!vm~L&1#vjND6;8sB|=2NLsi^>bP0l+XkKXZ;{N literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_invert_dark.png b/app/src/main/res/drawable-xxhdpi/ic_action_invert_dark.png deleted file mode 100644 index c82ea79007cf182f89466e3a73c62a92b0e2ebff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>VDj>GaSW-r^>&WG-ysK)c4?tR z&eW4ruLyIz5#3hA9QlG*A@gQt3A6P1ge%q$l_e)}cBU-zdG7za_T=qbzkX*dugzCD z4Kxh_6oS6}{`(+6MNsWe%&L&7lRaj9s1FtO;1IVHQsR*3oF{hY?931Sp_>e@e?Do> z`9DH>9ZUH`e%-^@*S9Eg#>v%1D%RBcIy8yBaLURJ+|7N+{@S@uGrHBdBdj^Lyo*v~ zVB~OMV45UoFmc!Ps!3H-e>pX{Gpg7B_sUW!RsY(@aGuGp@9NZD(|)-)FfgjyE=gZ0 z&%z?Gpzrp?S)R4Z3JnZze;7AwGcuZTy;yNO@HfkfW4H8{Fy#7LY&Xc4zJ8$i!qpNr zhq>o{vv;i!ZPT=4DdD{*eCd8}qM_RtEr+?ccU*kz+ss&%!Ki$Ao9o0mEb$NHH6C2p zR%2rn6t2EN3Le^wxumMXG~pvn@@VPO}_7&mCI$fsr?dKkb6#6 z+UB|Pfk5BT@ZyzK);a#)bsF?D6hNWpAjQNNeYMp5#5*}zao9Eqbcdku;CL$h!-|O|( z+K}Ke_(&*0@R8tXz?A?mwgo>afq}W0D?c^(2?-1C1W&=IJIayaaCot+&qu0vrqYcdU~*j<03=g#Zr%k~t(1@ha^X0UiVxj^x;nHWCm} zjDXGYQzamvKmq1XnATE&Cf0Jw?PL+K856#@?N2`Y3@(9}R>^WHK#8L0rZ!pBL-YAX z3eYKP+H*n>5^T$et_7IX_29Dk;HL@UsZew1u4GGPuf`%iw1b zVD5rRP~}b6!Otq7)9F0yTVpP5cVq_Kx$FFW#yenqNTI*oZl59m0dzq~a5xCZar{=9 z>1c@4P@V;N5DP06VKV@idcZBqoj@|Kg6U|P{oJMvxIxwg%21He^Qc`xCUNUilB}}; zxw@Yy%6nRtViSA>6d=G%0H!R=YPesTsI#4211~l={n{Z#$cAZ5HGOJk?34BjP{t^}h z-y^o`j)Ev7R#gJumgR9wsMNZh&?Io>d+d$~zGn#xxBvhE0000000000003p?4~-K7 UbNg=o1poj507*qoM6N<$g0RsiZvX%Q diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_plus.png b/app/src/main/res/drawable-xxhdpi/ic_action_plus.png index 75402a9f445f6b4f461276bc32bf355f8ce7a5bc..6fdc5495012ab07d8b7c0ddb54c2f0ef75259168 100644 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGo6`n4RAr-gYUfamYz`((L@QwX! zXU=cmn#w1z{yD}1Q~&`F_C~caFex-Ja40Y^aWo(^&H2l7nK*z_VB%f?ivR;7ivt6r kfCB>y5HlhXFw+mdKI;Vst0K1|jt^fc4 literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGompok@Ln>~)y?cC~b3?D?{J$~h*$M@~ICd`oC{=MqIQ^6ezD+G&hH zhd{vr4hFNNx#mfIN^@9|gkjQP8r@)X#y^K#Aa0vfcayKzXj_PdP}Me&T2EI$mvv4F FO#nZEMK1sV diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_plus_dark.png b/app/src/main/res/drawable-xxhdpi/ic_action_plus_dark.png deleted file mode 100644 index 7927662a27e94c0e2cc0791344bdced5df6e0776..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoTRdGHLn>~)y<^DLU?AXn&?I{4 z`MpK?@3**Z@ONO+GX79~Gdwd<6Q~jdVvLNB{YrTl^qc9*#^g<}f|xiO7?>0q7&sId zurTYb1Maxr+PY0(L2g}JMRCKvf(7f>a|4w#alnYUBQ;$gG@Te2Sp*zl1dsvbum}M8 kFlK{0;<@~&w^WU#xe_oJ)r>mdKI;Vst0HrQM9RL6T diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_reading.png b/app/src/main/res/drawable-xxhdpi/ic_action_reading.png new file mode 100644 index 0000000000000000000000000000000000000000..cf9c7c0cd8c64efd0ad6dcdf2701b949a6a535d9 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGonVv3=Ar-gY-f-k)VBldg{F6O< z#mj~*Cq?eG>o5Z4Az($(Q}qT0CJqG6s9Iw5a>$}-ONf$$xBD9H0=CQt<_nF4l;Y3GtTUzGv5!s7tfiq zXV%(#?X}nJtx^C00000000000000000000000000V3rKhdVkVR(iu`S={aeTG)0;f zP08Q*vwNg!xh7wJ!wos4rZ5}6gw#mtBn^|INs6!OAYCPGPtp-_<43}1{H>(Bq<5ql z7lxm!Y0_KLZPF%(_YgOJG%Q9>ClyMM|LK9zb>dJ}Pud`DTJ`+vbFK*m<)mlQTcbXU z+vp-4)EGY!CVvN{k&cpvNPi3%KdxDsv=1lT%MA{GbwH8SW2_#q$Kwgt3b)1&gagv0A~~(e^Ggl%{DrKVmppl-Cz{aH zDtW%2#($55-2po^`S+--aMOHhx5)$J2f_hWng{Dmvb>N?&u{XuaJS^qWk1b68b1OD z{HI&;%dI1DXdbR=@}o8VBUUG-mjvaX=PKV}>a>Ahmo$2udye8V8iXG-hZw zn1%uiZfP9Q0@Ik`gtC4G*@t<+3>@n}E9+w1aew7sG0q9x_G!&p=@n^9kmdpINxJ=)9ExfU_cq=na9-*6CtV9t?~hYxQQrhsX0h=rNuMXe3&-SEvU1E$%Wq&qcRSRq2S~wgHIxvioIkhk!xXi00000000000000000000 g000000Dw{c0?6vR0FX&fLjV8(07*qoM6N<$f^*Xh`~Uy| delta 1702 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_tabs_dark.png b/app/src/main/res/drawable-xxhdpi/ic_action_tabs_dark.png deleted file mode 100644 index 66cbcea7d141c9b11614dcd2f14271ed2a03df2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGon><|{Ln>~)y~D`cpdio|Xmz2H zr)2{h>lsgV8}Apn-|u}>|FJA*(@iO$S}=H0dT!>%-6ztHF=%h=&f!#OU|`}vCl1VK ztjZCI{Qg&Z)83|g?w_?bJrpS8;6_&l(i&jVuzq2K^}|Kwhxig1Sp*yyFo+*|4gXmg bVfMGM#|B7p2*l}{f~)y>ph6$xxu-;@SgT zTNwEpPx2p>+Y>eCuGfb4y9f5L2Osz#%f$HvqyY>P;srnEtgSUVbE|YW!`5r%@BhwD zyta;sL!p5IgD9A3`8>Dh;|YW8@bC9GObt3^s}v`h_V$%P83#8u^%G1RZU-EgU2xAl nv3&!kaUd;oj?_ECoWf9V|FS}K{Vg>WZIF(`OLn>~)y}6OM$$_CQFzK*F zlr@8LL{@6*OO`N|p2U}IWhFWf{hm*}!8K1Q{6pNQ?csN>%PiCY>V<*?HN_U^nAwHb zm$F+NwKaOD*TBHUp#UN#s5*#-tFMvVc_I2yWx70b=D|}F8Qiz4G%#=&yk5E{e*Mgo z>Ic#p%l=oXae*~Jhy&jncQtbF{vjajz`)2NfQ$HH>+t`0&i}OAM>dBsr+>Y@qY&mI d28M=}wv7Lhb1pr|=WPOsdb;|#taD0e0svg=R^|Wz diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_text_size_light.png b/app/src/main/res/drawable-xxhdpi/ic_action_text_size_light.png deleted file mode 100644 index d76000f08d27d463e81c224f332796e96c2a6b5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGozdc~)y}mH-kb}g5k8LUE z8H$QFmA_reJA?DepCdwXjP3D9&&V}yfBH&u@dmMj@2A(SI@$R?zA#(_s2vInChuBj zZg_0IyDvxL|0|3^Ubkf){#bERa38CH0|O%qhcm*9h4t5asZnx)aez{H^dCCs}F|MBVS=zqEF z>;p9vY%&J%z)!Jdm(J<0J2P*8D?Jk#dtJBf+$;5^TQ(KK+{?hw@V|^HlI3FU;sfE! OK%$t>* diff --git a/app/src/main/res/drawable-xxhdpi/ic_bookmark.png b/app/src/main/res/drawable-xxhdpi/ic_bookmark.png index 564f64b383e6c6b3f34771b5f7cee55c46bb2a6c..79a95b359ecd103cb09865389d29c32fef6feeda 100644 GIT binary patch delta 1029 zcmV+g1p52!37QCyBYy+oNkl8C^(AyQxHk8HGhf^$^|AEFZc+ z+U+U3nA%GhPkbvL37^j~s zu_Z$AEt~Nfk|s8ap(qIm;a>v1@6SMTNQhX96_?BJb3Wh879Kxh4 zRsu%FgA7;d>3@nN_?C|tuGF$-*2F88`q|YCTWXji-bf($mM!=$Ns_hVTN?>@gYS|g z+YV>MUp5jjB%We>A~}l0=Qe_G`BYrRFeY}s&qLtX;TJrVL;}L%No=bK+s+R1>7-CB z6?cf$;%Tu-Y!y4jXW~n-*G#Q+4JHwM%Ry|b7u(i-+<(J98!?7zj7i5<;MF9Ri?w1s zs+M*f>^t$BiQK`=RL3#qejGzPj;S8USe}Uq*emvUEYNlm(}QEp$n*Cm6M3=3FLvYC zpV9M+MdE!Ey=&<;hjEQs=#}fia?C`-J_x=ZLo<%aQ)tO|UYzi7@OA9xa4eqXsQA%i ziO{hQh<``?Q2*zO73j@)B>}I+{TRD%X1KbZ`@sXje~+>HvXfeZS?EXx242V1Ar||+ zB~gr7WhPw{#!PhXWqVfZ&g!%v>C_=G;8-g!swD;A?eOG?aBrFS!{Q>d#a24 z+Zgs~F1TjZpeN3}OWo z#wkJ9gPV-AD^z-YxQu;IU=9(ewPC&UYzURg9^=m1tnO1Ew7840lm#gPm6!mz{XCZS z+?rNP6^0N(2qA9)Jw*`4o8CM{*#J?A?!XU?26vvqX@ zK@bE%5ClOG1VIo4K@bE%5C)^Ov-4sqmAXJCLP92!nQ$Cuf`3eefP6lGBAd;wc6WEL z;5`|seeWL>@^{e05Vy%l4KXkf)Qih` zS0vxn-r|3xCtyg_b4d*FYqtUL8NyOB6mahscQd|6?=Ko*jH4h}-+xj=&z=7?hNJe!Q`q(6dxXD&cDbnXEzR$&fUd&~v6*1Be@%W`9UpVdyCa*r?V3_zi}nyLvWK z1+A^EM}*|lNFfVBEpRvT+ApLHiQ5>F_p{ZK?=r%yOy(o_ZQMie)uQ)41zD2Gw>f;X>0QLk5UP?pc?L}qhn2FSy0*F_9h{- z%HCHrn1AZlY=ogiIFThgEdtJ~0#IgC+7?yqj|4K8YK01R2IP$5)Y zh_1l3LHAL0U!kOk8?Ys0uM(jJnReHpt1wDTe zx*8cVNmzGAg!~xeo<9#AjgCbnR68odzK&rO^nVJvMPfmqTL;HuUQyV}9iLgKDT9K*m_-qLDYjxh|7(NSZtxM+wx5f&lU-h>%RkAwdR2IyTmh zF@HJdgn;!B$zMm5W_8I@j4&Kxv~$<`@}!V372*hZZgua+@?J>z5~2YXtUg_-HP)># zqaVm%tpOzN&Kt1m%~@*z>48rSSO+|^b^?YEHoyP{D<@)XJ4d?LfQ8tGmD|`w@r(&o zGnFB2qX8Zml!&`$75Q4I`CyO%-p8TvQhzpF4_m4>i8h7iLsD<0zrX*uP41_y8vl=z zFY+55$YAR3ybkyCgDTwh&}NMR9LE{1u-C8Z7W2kEjM^v*yP--)mNkhv_5U+oQwH+- ztems~uEDilQykdkY{fjF3AnEwT*IeSDwXs?4z9&_@ZEA<9b~fN854Tyy)1WwN`F-~ zq~N>wjdIvY)Ou=iTcevf6Ba*kd61hKXF%jqU`6h!>BTaCDdTchH4+Dp9 zh3_>v_l_Ec&P9B{2SE@7K@bE%5ClOG1VIo4K@h&-H{onkn{O3y`2YX_07*qoM6N<$ Eg2n$xu>b%7 diff --git a/app/src/main/res/drawable-xxhdpi/ic_bookmark_dark.png b/app/src/main/res/drawable-xxhdpi/ic_bookmark_dark.png deleted file mode 100644 index a039b7b2cb325eefb55904d5ff1c012612089607..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1129 zcmV-v1eW`WP)HK9ofI7OA)uWRF=vnT8LWB=r!eLA?~UMUY_+ z6{coAxVE<1|77RD8CbSmotd54duQ(V!3Tr8&fN2TJ9o}K_ui?f000000000000000 z00000007V!o12@5iHD$sIs?XtqfkPP_zlEG;sPH-k@6cbNc<}tgd*h?zlQiR#{fRA zfimSYpp&?fV*np_LYeZ2A0fWX5#Qnq{tOEFZ$L9~t$+diw`M5h|F8c+0r4%4;4bjj zfIX6W7Bc`Tsm})VDSyPTCeCglzD52{H5BvSfDRktTkL>h-amYwJ1}4d z4`Xi)I6}-gFo3_?0_D6j;JyR#E#8B2-ld)kE)4jNl++so`dx@`5h-bj;>T^Ko?E4) zaVY8DfX))cM@s5J>N(?q0n1D)vfSDg%9|P~)S-UBo70tCS9Uhza5_F)3ZjJK`Mi8*!PqN?i9) zY`a{SJ8W6nGAC`Dk+u#?+j}IIR*8*cjOrkG7jcT1k^nfEKg6sAx1m5(zqlbWWhKV6 z#GDchx>OiYDI?Tuh=g{^tY}cF>Mn@M@{o*y;%6lGm@eJXFN4JYsifQ4CbKy~{9=Ik z9OH2R&wLO?SlZu5C9M!g+YDM9xqEaviW$3QE_}s<=VXcJLOMPBf z@wsjFVJ}B>4QW)f8d6r;w9}M1ftX}S8BJ=gWd#YH>5c9Y2lT+|>7>NeScaSaT3XsY-T z>4Q}p@X5%PbF%DwRRaUkMlNHgpwDSCYsPIjYoY_Q-6k1us>J@EcfOpFs%lJ*XG?qzoHWURA(uie$`bQZ!ncqvE*Ae+&#)0 z#HB<1E^66vXl;0V%iWD8gThqK#==WsHeg(CeSY^_tw!ytl{WE~)v+-5{{uSL-er!W vA20X-00000000000000000000z)SoC{k#ci{n}?700000NkvXXu0mjf$|4J( diff --git a/app/src/main/res/drawable-xxhdpi/ic_folder.png b/app/src/main/res/drawable-xxhdpi/ic_folder.png new file mode 100644 index 0000000000000000000000000000000000000000..eba682df189f84d64f914606cf0ed292ace765a5 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U^Mb{aSW-r_4baVU$cWmTcSn7 z?IJeY$&b$6zM*_$nRw2KxA-1mDE_}j`Ovxc`gqoVVLv|Yp7ptO%lf+gOLw)hztfAio_(U7ALiR5 ZADH8r92Ut`u3H2W@^tlcS?83{1OT6*ga`lt literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_history.png b/app/src/main/res/drawable-xxhdpi/ic_history.png index e1297df27c2b67496ec4f09b1794b0f4336584ac..7ae7af1bcfae1626b1f79a48130337cf659516a3 100644 GIT binary patch delta 1585 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 JPDHLkV1h1IS_J?A diff --git a/app/src/main/res/drawable-xxhdpi/ic_history_dark.png b/app/src/main/res/drawable-xxhdpi/ic_history_dark.png deleted file mode 100644 index 53fb74843326e7650cafbcbcf81583c19903c738..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1649 zcmV-%29EiOP)k@Z(n ze6naF7*i}QQ9=~hf-Qyhe_GGPucq1ToteGed*|G{=S#kXEZsXZ=gd8G=FFM1o+l6p z1OkCTAP@)y0)apv5C{YU$0(P}PZ6Ib?jxQdP7=Q&UM1cjE`js-tbo5cMa&Z0)H6hq zwF&(h2ycS;6Y&x8pO9Q7&Jo9ndx_gb!oh;?BAz4uLVUalp$Abt^BQrK_@YSsKcP1f zdx>8VA4DMZATAT9iQTFXjVk<|#7~GTF$%tte-l3@Zf~@Ob%^+fL%~<_7V$*t-v%1s z4tOz7LJH~$Ox0cD9pY{94nBLZ$!A|8zK~Yo=ZH5$2xXBtLmVa^B<>=15Sy`vG~wUs zvmX4-Fut=GLLth%?Ms{R2eI(k3gJF+3QB7y`XSo%@!cF2-1{}Q|9V>N{oC-zO@l5G z7chHUBIrvCaRhH+$#M_zR-)I18iaq3c$S!np-&m?1@74@A<1TE)neAq!gl*H_RU9| zvlef|YU0ch?C!FK53XkY(+>N&1#iQO#hTEU6ya}&E!Pc5xr|3R*jIQ_0~RLf274D3 zi*CU%kiQV!^cnSAnWTP93|-%6STD-dxi<}dw;JF+#{KU%ya{S-CpgD;emB_sBb;V_ zz?(2&SQBosiygs^UNCq&XY29$(ld?`ixs?B=dp|#yrW50rU)*bZr04!%iE#n9Ix{H zLImE?6~o)y%}D{D8#Y-zb!;ng1)!Z?!+J2yMfhEs!<2Q?<0nu7zQGhNvp89!PUJPS zWTD>Sg}4-ewmJ||4I1B=YvHQ{^y``qjzrLAYzjboBbxDDb9&H^?1jgg?R!fK6wnG! zE9jtquS*3?XlBP$L~X{Z0JJ%+8Rxjmu)~j<9b+y<3fQk%jOUyrecxn;MbjFmf7KoiDRZOluJu7K~N&aU9708S=IZ3r(CUuq;1#Ay*;=by;) z*%m>&>=t328`=|LyRT~AzW-+=@ipSsG`pcrHewrQ+x zqNwh8eQUVXr_LqbQ`cS77K(5ZjH}WQ6&8Pk_^ZJz-9%o}){x3(7mRZfj@I-?g^bS| zZdlNZlroN5>^F3YS)&{V)}`4Hl@J=>bQvRqP27ymCB=fC z*DSt8Hbpktv7PTP;7+usJw796P_7Be|#f#|IY~MGo31cq3BX~P`%TfhdFG)b` z-KJQ_6&&})U94j_Tuqx|9f!Rn0tvjfZZS{fOO!DOuKp?;b!rzgVuVWZ7XaO@N!XP_C_j zUI`nYOL#L5VZ8_{+SiM}8NnIulI3i#^mejd8i86u1;%A7XA~#T(nXmW>6Ln+#GVw!Hyv<_s vB|l*z5C{YUfj}S-2m}IwKp+qZ1kUjAvTBXG$RB&gABC?uDNJ5B^B-dPZjMnRCvZ zi7@~G000000000000000000000Qj#NBqd1mqzzJrbWJLdN`LZ`Kd0sQNqK${uIr44 z;`D9O4^o-*H-O6W{FVe`2(E0Mm!t#IO+csH^oz7ldI6U%AHXACZ{rJYG}isrcA^2{b_ffOh8lX~SR ze_oW|=j3^9Jb!-X3DS`fHfuOmt+e%B5!&t z@bjaj&q{EMvM_tS)vPGn$5*5W9opz4t;l$`-O+Pj4_ODwo8JxR-w#4cnF)J79@gfS zL)LZ|oqswAlaPO8_z!2P}kSf5~G1#FqeETO1G% zaSdu@|H_vD6f6$t56S+3Qg8BtlEneNA=&R$>O+_T5zc@=SOcP61Ah7vfV9N{iy_%x zw%E`3et!x!b#MEZf~+&)`H%k7Ia&6+_IzrzD68%WS7Uy z8dO8?(va_+U1@wAVW+Xb~d;ZzrbP<8%| z66{&yG2E3Mev{Uyu$GsM#aO%`9Ka6NzB1pAic zY=9t~A_#7oF!sx#s?L#)+y~(zKoG{^DtF8T2*L@1;C?2YHVFckHm2dKXwy*^Gr@g2 zI&Tt$V-sErjh7@O=W9XW3hfkJ<&NM!!=)Itpnf93ueH2O*0T6fIMA zL15=Ugm00000 LNkvXXu0mjf0s_`6 delta 1533 zcmVHU~@oA&cm?e28 zPET~Z-AAg`>MIap8^Ze?oHzEY{YNR@(ddlaD$8YB|W z{S9jCLtLj!+<$#&wOWrsFlQl{-LwTiXh%>z;d+v!PrUF&&wuNy-&5QXe_@=To11%l zl7;^g1pjN6fnWbBh2?F+N>yaKND-3!A)7`t2+{ef8;XE`0O6;sYKy+ zGOMYq{!3ZUi{2H+wqg%9gC~Hx)D;xb&(A9r0DDly91a|F`;)<5(CUYWDatBa&v9`a zg=@U+GRF9PAz10lG2)IZy}$@J=bY48*A8WBBY$M|Gpz((9nbW_I0<-J(j5<5Bs;;z z1Ux`jyq}9jh*7Z0e|F6A4~%1>?tpWO_tPxMLb>c9;0`{2BS->hU|j?-rCgACUU1Bl zUQ#(o0$8`>BA_TP9_IO;a)x{=R2AgR|1d}^!aRA9qns1eLRCQMOCGRn-gIEqEQm`m5O zOZUp<@-smaz$#@alzrHbyODR!eR+BLP1hW;NIIoZE9hi(brcWdM9%8x6D3)=Q3@F> z5m(gEmAvLg)uO1Mdl;vKCV=(%%E?oY2Y>c?xu42e#a{4bi;|MQrnsY9S?gKJ)M^zH zpO<0)n zePz|{vTkS0!e7JqM_c{D249YCKjm^s`$=H-G3`?*svWL;P54o`o(>_LWN7apfPa0d z+nGw~d#9=MeF}70AQp31v9aDCxJR$Ub1mF zV*r?mIBmgW zrEdWE+Z-22wTpF-< zq*jya;6Spd4}_otF_?QiMwFL0o%W5UDbyq+NUhLhz3f9&)G^j-vQ&gQBML%xOPL8Y zIY1vuFnpFzE9*p)kim|tCLw|Mo7B=zo!5+noRfwWs;^DpeMW+jU?i{^-AEV{3BEQ# zUWHaMvE@uc@C98(1Xp&FV0KM*g2f4Gli>Sa(>`@%B%~dz83}>ygy;|Zi)<5c&yS(M z^rNuQUjD?=8rCJ5q{axkoP&0P2|vR);V=m%{G3P-!`w09=R^X%9W%HFgTY`h7z_r3 j!C){L3Ra}p diff --git a/app/src/main/res/drawable-xxhdpi/ic_search_dark.png b/app/src/main/res/drawable-xxhdpi/ic_search_dark.png deleted file mode 100644 index 25fdb5e9cdc095980781522945a1ef993094c280..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1399 zcmV--1&I2IP)pfIhsyEAY>q7MUVwSLZA@{<%2{aR76k@J#-_w7*43}*nO6GfLKqgL46)spwDYY(fI$m(l@aeL?7HTI z013sRXwp`7lHYLR&j8y#@nO&P@H47-%LXjkx0-lYu^At9S%4DUWCfKMYAoB>tJn)h zTo#~OaqxPeQ(g$!#?1(W>1-T#wmg9g^q}x_HX>p2Nq~(XiRG>ea6}=%fr!`{v`>8@ zZg*9H0fhkd5wY`BfQ_6b?Q&HB)d8$BB6jvDx++>-6+l)0*%%Q!4=HL?9j*#6q!6Gc zB6jvE&H`<&3UFE>K(hmT)eo2VfNq5V-4U_#s-k_R-cC^e`1a@@U8WZA|B;@1EhAG&-JE=IW_D8p#BY~vZlDjkZs477*`eZk8XZCkGh zKYS?@cU^!TILri9L~AXkpD9KBFLhmj67=T>t%6&*j99=|8?l-%eo&VdsQ~^W9H91Dvp1vp+M5zMZlxJ+}%me^%q!6W&f$;`*;&vt>Mm zz8!8IS-p%rzfZFtl=+$16!RH81c9+2-FESxXdUUr1$v>z>AL|Z+?NK=`Hc%C{|EQ@ zaD%a+Im1z+NnD_h;u^6BmnnTHDPM)tzh*eDG>y;d0$Y3*VJ*gj<{~gB7PJ@b_dOhq zSadLVJPa!mgQQoj>S;FS!-}$X7<_>_GJgJ1jg`>p`@T?z$&^&cj{kyEIoz z!uADHF3JQ63`fj_;P~r2pS;9#yA0CQPVX}%o=idhe+@0-nXZZ%l$3{q3Tp^O(*_%J z=X}2W&IE?B4`Q<(N3Z4=oDXJ^MWxWakc7h@q9rD-ThGVJGZCR9?|$q98)iB8YI3Ux zcdWq?ZTOp~=Qm{P7<^XJP=tb*Agdy`Bi8GRuur^}eGyDn!e=jr`64C&PxbFJ3`epO zLfCIiM3@#4?29lZB7_r;+6`BN>V3Hlh#dFygqRlirl5;{h=Y%PPmCz<4*cD+K zBFJx)S{9*MycW)$pi{uR@AQv;L|lYc#m3C7HC5uNa7Box5rLgwEgs6vIU&9%9EtNS zi7aNkl~(==-ftEbKe*p8^=?~*(BmlX4hOw<=xBX#Zk zjhJYwa5>Vc#}Nr7xg?pOH`LAT>_F#N;aZm3+VVK-H0$?-5itv+)xsSO!|hZx+0J#e zr=K;-`YvH4T)>n=o89+M!SSq^jne<0su!xIBswRSQjnsG=S$p{nT$2~nqFT+spFJ6{r=OC|Vv*Y}`h z%rZ}Sy?>~)FGafVy8#Ggi>Og7D{Qa$TymJCVpp=NGQbE5cu~pO1bMo~EDPu}C3OD1 z67EIjf{&F^a1n(?@7P&_`;m$8lalV|E!H0qZMco%qIZlrPQ31+^EZ`rKbu)MBHHl~ z;i`8ul#Y}AI*T6p_bhy_wDCh94RBs*Yy(;h(0>5Ol{S9mqXDidjeQNZmPUXEc%9O% zF?hjUrLn^uZfY?g1H7oT@s5uM(28$QbW|OajNlW4l)TL84O;zYUBpc_0x`h)m~c24 z1FVmUnzBSkS@kFDQ-qUw=?%#MnhP3=8Q!jqumU6G<*ATdkTwZ#P4KY|^0#!cHKa-S zs(;ehG+CqTkx+CPIvY|V_HN2(!=(|5PQ<p=j*)!_pf=t|!q?|(8p5vNT8DIz69DlVW`5t+E>{X6}E-0hmL_h|ZBz;kSFL{h? z+0fR77di@az8c_3(l=*`iya`(iQAYpm2oa`vAt2Qc^yxA=l;_#|XeM~;F{AY!@= zU!BLl-$D{7%ZPg^fW;J_kkW)Ke#`po8`L@$BqvkmkhCqqovh&JJ8)yNX-f9(jN-E! y$zEM-7=~dOhG7_nVHk#C7#)UT7=~dO74a{?OYQF~05z)s0000 delta 1730 zcmV;z20i(;3(*abBYy^%NklkmpaKIth9M;4> zuw1Gn1rx9_no<%IAr@-d1Zb!>jULpa)c@A`#W6WAx4Ylocegv=F_UbLaNlEhW_KRH znceH^Qc_Y{}2{kxflds$dz zJQL4W4jYJO>l-w4=ZIPNs2w%Sbc-;K@NB#T?^2HcOS$3U;kSq}E7T5J&2)<}4)9J= zYiH1hW6619z<+6)jo%VOs-YNP-{}2+Q9qW*UYt5shIM>={5%c(_gIW?up)jVVSLu{ z27791>NOhdEgI}oDa@}~4Ns|WtLS5=s+^Cg-IvDr2CHG0J_kCA`J{5jX<+-28T-WJ z+I=$6g^tko2#V79@-0*`{lwHu2;7pWK#n11Gi?_HF@GQWy$^kwoSb}x7UWk6S7a4J z$gfSrlzYW)Fz!);8j@aPt3o@=hmrAAX2CzpreK+rlMR+XPFwE>~ z-WTN60M?kWMdP#zigZoId|_doC9G+2dzu_0m>i|xdQ7uef*#L@OpBfalh39OE)HrPTUc9dga zEd-Nqkezwa)G*^ys)-!E=c;2RFN#7@0VxMWHJ1YmhO)(|pOt{BW;w)| z5GUB|0SRDP1oM$y3Ykm^B>+~db0$@UF^kBop?{Nsjcu@*2iSrW|0Y#57nS))awE^$ zsR97e`z~2LqI*#j{an3p)X4%sX^RO~!PtSa#x%a=2mw|(w2N(XG9vWnf3U-yz|2RY z1E4yfhC(0crsFhzVmcCfmTkz{~Xh2bRQ5Pw-Bm^v{7n`ZD@D`QGn0 zYJbII@jWmhW~2`w&eV7CA_nkw!6JYKVDLTyAVz;7JiB+%GT!i6GcJ@hsf$loMQwD7 z05B%Y%Dx^$0BZ&TJO(zzo$gI41nB~x3H3I{W*GCW7&Btalz&A8S!=+OsG|(5fL@Hv z@VL@FmwukS+kg+*J!f zAd-HRwxk4o7G;EOZYZ)z389Sj(4~nTVHQp@>CLJDXoa6N8DD z$4o2xs3N-Wa>(sYKsuq4*zLTQsSO$oO`O8^9owEQGHRbD?Kq-KV#2S1w>bSspVPL2 zGZ3V6Af>q}S?JbOBV04h-+=ajB# z!BsuYI`uY}oaclJpc<0?6)hH8n;#kq|gmfE#-im2{>R z5l{ft%pcfPr;heL4BlfB$PYMf0IQ;w34sJq$*kIO80KAHtOnI+bbsGZe5&qfyZ5D` zkC`*LNeONo;)G^>c~(x>;O*-+FFM;9Zo zJ61;**Q2O_vT^W5=)=2#=QE_7>rx7KeEnUd5yfP(BvRcEIBd4y2OKt0I)ds2{Q-yO z0=XWzg$RmJ1d9?u7CTJ+Pnc|S`5>;D<$HScCrp%-l$4Z|l$4Z|l$4Z|l$4Z|l$0dU YKVVZbl!TZt-v9sr07*qoM6N<$f>$6zrT_o{ diff --git a/app/src/main/res/drawable-xxhdpi/ic_webpage_dark.png b/app/src/main/res/drawable-xxhdpi/ic_webpage_dark.png deleted file mode 100644 index 9f6504e106195e3e2da35256306cf192d9e4d450..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1457 zcmV;i1y1^jP)q`|u6ko6AqZe@vf>KGM8$s9yB~Z%xk_Kh(&@_m?^&cdqK~IaI=wZ;qo@kU2VP#E4POX64*VLU;e#9jwqalL&G;Ct+)vQ(LG}VG@@10U2K;1^ z@#pywSeMh2Gz@M}M3Idy9{{HnuKNXS&Q;?d1x_XObgu?h1A7$ufd4;|Yi?&xg2u^hlOJH%JPfLMkvbZI5M|HUn?Ibzj&H`HneM?cQVl2zV zT;Zzm3oQsW9|23UxX11Ew2Ruf=j1v8I^CY|lYbMKR_yDJEN?=ai|K{0295hxz<%Im zN>LYU1_~{bIbp=9v<2l^Og-IGhWebMiCJ{tZkMu}6Rrv1i;e~)3A~K$#xF4Z^cxkx z7dDI5EZtVG4QRt-+;IWW6o_ z?-)0eK-UC=u~~pLjUm|2Nvm>0RF@eRH@^Xv`QDOCjtQ`ol6=8_;#g~J>S%)?WP9q* zrK1>>t(;EmQ!fl5wKM)i7{{Mmr^nX$zwQP&#^8(B3{91rTk>%;?6< zifIee0_>7($W+=WKoM=%g&E+MZZ!d1za}XGXaROh(AHyXKYNvI%45Y@wPsu82@0@5 zQYF{!*$Oh6XkWNTr^q!a0jQ|>x~pX=vcfDZcG{-72%3&afKRkDhkOUT4cr^HO2-s~ zvxQkS09k3`D~v8QqL3lOD`YIAS?jy!a^P!cOA~zqk(DQQswBtgZR(7n(gF>>l2Xs- zB-eF$u7GkwBa#XEpvtQZ*Q|@_L+;bKVi$y+^X2JoeJMj$whka+?)C)P6<&zR&^zu&+%yb#4TH{;wdyZ(44Iwfl#Mqqqaz#G2 zQZh-W>5$dF2oG+3OoxZ0`QTP{G3JjhZlN@BKNUpzk1n1i`j0LirEBpw`^d%d(Zvyo z;y=8*-gkI+J^ii1x{5UhgTY`h7z_r3!C){L3 + android:orientation="vertical"> - + android:orientation="horizontal"> - - + + + + - - - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/reading_view.xml b/app/src/main/res/layout/reading_view.xml index c086420..759daf1 100644 --- a/app/src/main/res/layout/reading_view.xml +++ b/app/src/main/res/layout/reading_view.xml @@ -1,20 +1,29 @@ + android:orientation="vertical"> - + + android:layout_height="match_parent"> + android:layout_height="wrap_content" + android:orientation="vertical" + android:padding="20dp"> + android:orientation="vertical"> - + android:orientation="horizontal"> - - + + + + - - - + - - + android:weightSum="3"> - + android:background="?attr/actionBarItemBackground" + android:clickable="true"> - + android:src="@drawable/ic_action_back" /> + - + android:background="?attr/actionBarItemBackground" + android:clickable="true"> - - + android:src="@drawable/ic_action_plus" /> + - + android:background="?attr/actionBarItemBackground" + android:clickable="true"> - + android:src="@drawable/ic_action_forward" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/tab_list_item.xml b/app/src/main/res/layout/tab_list_item.xml index 5a43f1f..aff83ca 100644 --- a/app/src/main/res/layout/tab_list_item.xml +++ b/app/src/main/res/layout/tab_list_item.xml @@ -1,32 +1,28 @@ - + android:orientation="horizontal" + android:weightSum="1"> - + android:gravity="center_vertical" /> - - + android:gravity="center"> - \ No newline at end of file + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/toolbar.xml b/app/src/main/res/layout/toolbar.xml index d54e396..86ddd1f 100644 --- a/app/src/main/res/layout/toolbar.xml +++ b/app/src/main/res/layout/toolbar.xml @@ -6,7 +6,7 @@ android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:elevation="2dp" - android:orientation="vertical" > + android:orientation="vertical"> + android:background="?attr/progressBackgroundColor"> - - + diff --git a/app/src/main/res/layout/toolbar_settings.xml b/app/src/main/res/layout/toolbar_settings.xml index ba0f63a..408db8e 100644 --- a/app/src/main/res/layout/toolbar_settings.xml +++ b/app/src/main/res/layout/toolbar_settings.xml @@ -1,9 +1,9 @@ + android:layout_height="wrap_content" + android:orientation="vertical"> @@ -14,7 +14,7 @@ android:id="@+id/action_forward" android:checkable="false" android:enabled="true" - android:icon="?arrowForwardDrawable" + android:icon="@drawable/ic_action_forward" android:title="@string/action_forward" android:visible="true" app:showAsAction="ifRoom"/> diff --git a/app/src/main/res/menu-large/main.xml b/app/src/main/res/menu-large/main.xml index 7439e7b..a66f887 100644 --- a/app/src/main/res/menu-large/main.xml +++ b/app/src/main/res/menu-large/main.xml @@ -11,7 +11,9 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. + limitations under the License. + + --> @@ -29,7 +31,7 @@ android:id="@+id/action_forward" android:checkable="false" android:enabled="true" - android:icon="?arrowForwardDrawable" + android:icon="@drawable/ic_action_forward" android:title="@string/action_forward" android:visible="true" app:showAsAction="ifRoom"/> diff --git a/app/src/main/res/menu-xlarge/incognito.xml b/app/src/main/res/menu-xlarge/incognito.xml index 80bd08e..19afb5f 100644 --- a/app/src/main/res/menu-xlarge/incognito.xml +++ b/app/src/main/res/menu-xlarge/incognito.xml @@ -6,7 +6,7 @@ android:id="@+id/action_back" android:checkable="false" android:enabled="true" - android:icon="?arrowBackDrawable" + android:icon="@drawable/ic_action_back" android:title="@string/action_back" android:visible="true" app:showAsAction="ifRoom"/> @@ -14,7 +14,7 @@ android:id="@+id/action_forward" android:checkable="false" android:enabled="true" - android:icon="?arrowForwardDrawable" + android:icon="@drawable/ic_action_forward" android:title="@string/action_forward" android:visible="true" app:showAsAction="ifRoom"/> diff --git a/app/src/main/res/menu-xlarge/main.xml b/app/src/main/res/menu-xlarge/main.xml index 7439e7b..a66f887 100644 --- a/app/src/main/res/menu-xlarge/main.xml +++ b/app/src/main/res/menu-xlarge/main.xml @@ -11,7 +11,9 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. + limitations under the License. + + --> @@ -29,7 +31,7 @@ android:id="@+id/action_forward" android:checkable="false" android:enabled="true" - android:icon="?arrowForwardDrawable" + android:icon="@drawable/ic_action_forward" android:title="@string/action_forward" android:visible="true" app:showAsAction="ifRoom"/> diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml index 1f7be7a..1aad856 100644 --- a/app/src/main/res/menu/main.xml +++ b/app/src/main/res/menu/main.xml @@ -11,7 +11,8 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. + limitations under the License. + --> diff --git a/app/src/main/res/menu/reading.xml b/app/src/main/res/menu/reading.xml index 57c9dd1..70ff4d0 100644 --- a/app/src/main/res/menu/reading.xml +++ b/app/src/main/res/menu/reading.xml @@ -4,13 +4,13 @@ diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index e1e2287..4812dd3 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -1,5 +1,4 @@ - - - @color/transparent + @null @color/primary_color ?attr/listChoiceBackgroundIndicator @color/primary_color @@ -13,15 +13,13 @@ true false @null - @drawable/ic_action_invert_light - @drawable/ic_action_text_size_light @color/divider_light @@ -68,15 +62,9 @@ @color/gray_dark @color/black @color/gray_medium - @drawable/ic_action_back - @drawable/ic_action_forward @style/overFlowButtonStyle @color/drawer_background - @drawable/ic_action_plus - @drawable/ic_action_delete - @drawable/ic_action_star @color/divider_light - @drawable/ic_action_tabs_light @drawable/list_bg_light true @color/secondary_color @@ -105,15 +93,9 @@ @color/gray_dark @color/black @color/gray_medium - @drawable/ic_action_back_dark - @drawable/ic_action_forward_dark @style/overFlowButtonStyle @color/drawer_background_dark - @drawable/ic_action_plus_dark - @drawable/ic_action_delete_dark - @drawable/ic_action_star_dark @color/divider_dark - @drawable/ic_action_tabs_dark @drawable/list_bg_dark true @color/secondary_color @@ -136,14 +118,8 @@ @color/gray_dark @color/black @color/gray_medium - @drawable/ic_action_back_dark - @drawable/ic_action_forward_dark @style/overFlowButtonStyle @color/black - @drawable/ic_action_plus_dark - @drawable/ic_action_delete_dark - @drawable/ic_action_star_dark - @drawable/ic_action_tabs_dark @color/black @drawable/list_bg_dark true diff --git a/app/src/main/res/values/attr.xml b/app/src/main/res/values/attr.xml index 69fd678..a359d3b 100644 --- a/app/src/main/res/values/attr.xml +++ b/app/src/main/res/values/attr.xml @@ -1,8 +1,6 @@ - - @@ -10,13 +8,7 @@ - - - - - - diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index e3d4ab7..072e30f 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -30,4 +30,7 @@ #00000000 + #8A000000 + #FFFFFFFF + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index ccd739c..d9fcece 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -2,8 +2,7 @@ 260dp - 48dp - - 48dp + 48dp + 48dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 768a4ae..5dd5512 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -203,4 +203,5 @@ App Theme Light Theme Black Theme (AMOLED) + Folder Name diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index a721565..e4deb6e 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -4,7 +4,7 @@ @@ -68,14 +62,8 @@ @color/gray_dark @color/black @color/gray_medium - @drawable/ic_action_back - @drawable/ic_action_forward @style/overFlowButtonStyle @color/drawer_background - @drawable/ic_action_plus - @drawable/ic_action_delete - @drawable/ic_action_star - @drawable/ic_action_tabs_light @color/divider_light @drawable/list_bg_light @@ -96,14 +84,8 @@ @color/gray_dark @color/black @color/gray_medium - @drawable/ic_action_back_dark - @drawable/ic_action_forward_dark @style/overFlowButtonStyle @color/drawer_background_dark - @drawable/ic_action_plus_dark - @drawable/ic_action_delete_dark - @drawable/ic_action_star_dark - @drawable/ic_action_tabs_dark @color/divider_dark @drawable/list_bg_dark @@ -124,14 +106,8 @@ @color/gray_dark @color/black @color/gray_medium - @drawable/ic_action_back_dark - @drawable/ic_action_forward_dark @style/overFlowButtonStyle @color/black - @drawable/ic_action_plus_dark - @drawable/ic_action_delete_dark - @drawable/ic_action_star_dark - @drawable/ic_action_tabs_dark @color/black @drawable/list_bg_dark