diff --git a/app/src/main/java/org/kiwix/kiwixmobile/KiwixMobileActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/KiwixMobileActivity.java index 29ce1d646..65466aa4e 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/KiwixMobileActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/KiwixMobileActivity.java @@ -58,6 +58,7 @@ import android.util.AttributeSet; import android.util.Log; import android.view.ActionMode; import android.view.KeyEvent; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -203,6 +204,8 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback public Menu menu; + private MenuItem menuBookmarks; + private ArrayList bookmarks; private List mWebViews = new ArrayList<>(); @@ -354,6 +357,16 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback public void onRandomArticleTabSelected() { openRandomArticle(); } + + @Override + public void onBookmarkTabSelected() { + toggleBookmark(); + } + + @Override + public void onBookmarkTabLongClicked() { + goToBookmarks(); + } }; @Override @@ -485,6 +498,24 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback pageBottomTabLayout.addOnTabSelectedListener(pageBottomTabListener); + View bookmarkTabView = LayoutInflater.from(KiwixMobileActivity.this) + .inflate(R.layout.bookmark_tab, null); + bookmarkTabView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + PageBottomTab.of(4).select(pageActionTabsCallback); + } + }); + bookmarkTabView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View view) { + PageBottomTab.of(4).longClick(pageActionTabsCallback); + return true; + } + }); + + pageBottomTabLayout.getTabAt(4).setCustomView(bookmarkTabView); + wasHideToolbar = isHideToolbar; if (nightMode) { @@ -882,9 +913,9 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback } private void openFullScreen() { - toolbarContainer.setVisibility(View.GONE); pageBottomTabLayout.setVisibility(View.GONE); + menuBookmarks.setVisible(true); exitFullscreenButton.setVisibility(View.VISIBLE); int fullScreenFlag = WindowManager.LayoutParams.FLAG_FULLSCREEN; int classicScreenFlag = WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN; @@ -907,8 +938,10 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback toolbarContainer.setVisibility(View.VISIBLE); if (settings.getBoolean(KiwixSettingsActivity.PREF_BOTTOM_TOOLBAR, false)) { pageBottomTabLayout.setVisibility(View.VISIBLE); + menuBookmarks.setVisible(false); } exitFullscreenButton.setVisibility(View.INVISIBLE); + int fullScreenFlag = WindowManager.LayoutParams.FLAG_FULLSCREEN; int classicScreenFlag = WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN; getWindow().clearFlags(fullScreenFlag); @@ -1139,14 +1172,13 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback new Handler().post(new Runnable() { @Override public void run() { - ActionMenuItemView m = (ActionMenuItemView) findViewById(R.id.menu_bookmarks); - if (m == null) { - return; + ActionMenuItemView m = findViewById(R.id.menu_bookmarks); + if (m != null) { + findViewById(R.id.menu_bookmarks).setOnLongClickListener(view -> { + goToBookmarks(); + return false; + }); } - findViewById(R.id.menu_bookmarks).setOnLongClickListener(view -> { - goToBookmarks(); - return false; - }); } }); @@ -1257,8 +1289,14 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback if (settings.getBoolean(KiwixSettingsActivity.PREF_BOTTOM_TOOLBAR, false)) { pageBottomTabLayout.setVisibility(View.VISIBLE); + if (menuBookmarks != null) { + menuBookmarks.setVisible(false); + } } else { pageBottomTabLayout.setVisibility(View.GONE); + if (menuBookmarks != null) { + menuBookmarks.setVisible(true); + } } Log.d(TAG_KIWIX, "action" + getIntent().getAction()); @@ -1551,6 +1589,7 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_main, menu); this.menu = menu; + this.menuBookmarks = menu.findItem(R.id.menu_bookmarks); StyleMenuButtons(menu); if (BuildConfig.IS_CUSTOM_APP) { menu.findItem(R.id.menu_help).setVisible(false); @@ -1562,6 +1601,13 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback if (isFullscreenOpened) { openFullScreen(); } + + if (PreferenceManager + .getDefaultSharedPreferences(getApplicationContext()) + .getBoolean(KiwixSettingsActivity.PREF_BOTTOM_TOOLBAR, false)) { + menu.findItem(R.id.menu_bookmarks).setVisible(false); + } + return true; } @@ -1600,19 +1646,28 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback bookmarksDao = new BookmarksDao(KiwixDatabase.getInstance(this)); bookmarks = bookmarksDao.getBookmarks(ZimContentProvider.getId(), ZimContentProvider.getName()); } + + TabLayout.Tab bookmarkTab = pageBottomTabLayout.getTabAt(4); + if (menu.findItem(R.id.menu_bookmarks) != null && getCurrentWebView().getUrl() != null && ZimContentProvider.getId() != null && !getCurrentWebView().getUrl().equals("file:///android_asset/help.html")) { + int icon = bookmarks.contains(getCurrentWebView().getUrl()) ? R.drawable.action_bookmark_active : R.drawable.action_bookmark; + menu.findItem(R.id.menu_bookmarks) .setEnabled(true) - .setIcon(bookmarks.contains(getCurrentWebView().getUrl()) ? R.drawable.action_bookmark_active : R.drawable.action_bookmark) + .setIcon(icon) .getIcon().setAlpha(255); + + bookmarkTab.getCustomView().findViewById(R.id.bookmark_tab_icon).setBackgroundResource(icon); } else { menu.findItem(R.id.menu_bookmarks) .setEnabled(false) .setIcon(R.drawable.action_bookmark) .getIcon().setAlpha(130); + + bookmarkTab.getCustomView().findViewById(R.id.bookmark_tab_icon).setBackgroundResource(R.drawable.action_bookmark); } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/PageBottomTab.java b/app/src/main/java/org/kiwix/kiwixmobile/PageBottomTab.java index 23dca3ab4..a26986ce8 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/PageBottomTab.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/PageBottomTab.java @@ -26,6 +26,18 @@ public enum PageBottomTab { public void select(@NonNull Callback cb) { cb.onRandomArticleTabSelected(); } + }, + + BOOKMARK() { + @Override + public void select(@NonNull Callback cb) { + cb.onBookmarkTabSelected(); + } + + @Override + public void longClick(@NonNull Callback cb) { + cb.onBookmarkTabLongClicked(); + } }; @@ -40,6 +52,8 @@ public enum PageBottomTab { return FULL_SCREEN; case 3: return RANDOM_ARTICLE; + case 4: + return BOOKMARK; default: throw new IllegalArgumentException("Tab position is: " + code); } @@ -47,10 +61,16 @@ public enum PageBottomTab { public abstract void select(@NonNull Callback cb); + public void longClick(@NonNull Callback cb) { + // Override me + } + public interface Callback { void onHomeTabSelected(); void onFindInPageTabSelected(); void onFullscreenTabSelected(); void onRandomArticleTabSelected(); + void onBookmarkTabSelected(); + void onBookmarkTabLongClicked(); } } diff --git a/app/src/main/res/layout/bookmark_tab.xml b/app/src/main/res/layout/bookmark_tab.xml new file mode 100644 index 000000000..7e34a6876 --- /dev/null +++ b/app/src/main/res/layout/bookmark_tab.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/page_bottom_tab_layout.xml b/app/src/main/res/layout/page_bottom_tab_layout.xml index 28aec6589..7446cf1eb 100644 --- a/app/src/main/res/layout/page_bottom_tab_layout.xml +++ b/app/src/main/res/layout/page_bottom_tab_layout.xml @@ -24,4 +24,10 @@ android:layout_height="wrap_content" android:contentDescription="@string/menu_randomarticle" android:icon="@drawable/action_randomarticle" /> + + \ No newline at end of file