Move bookmark icon to bottom bar when visible

Resolves #337.
This commit is contained in:
Albert221 2018-01-13 00:34:20 +01:00 committed by Isaac Hutt
parent 915bafc549
commit 8ca00227fd
4 changed files with 102 additions and 9 deletions

View File

@ -58,6 +58,7 @@ import android.util.AttributeSet;
import android.util.Log; import android.util.Log;
import android.view.ActionMode; import android.view.ActionMode;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
@ -203,6 +204,8 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback
public Menu menu; public Menu menu;
private MenuItem menuBookmarks;
private ArrayList<String> bookmarks; private ArrayList<String> bookmarks;
private List<KiwixWebView> mWebViews = new ArrayList<>(); private List<KiwixWebView> mWebViews = new ArrayList<>();
@ -354,6 +357,16 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback
public void onRandomArticleTabSelected() { public void onRandomArticleTabSelected() {
openRandomArticle(); openRandomArticle();
} }
@Override
public void onBookmarkTabSelected() {
toggleBookmark();
}
@Override
public void onBookmarkTabLongClicked() {
goToBookmarks();
}
}; };
@Override @Override
@ -485,6 +498,24 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback
pageBottomTabLayout.addOnTabSelectedListener(pageBottomTabListener); 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; wasHideToolbar = isHideToolbar;
if (nightMode) { if (nightMode) {
@ -882,9 +913,9 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback
} }
private void openFullScreen() { private void openFullScreen() {
toolbarContainer.setVisibility(View.GONE); toolbarContainer.setVisibility(View.GONE);
pageBottomTabLayout.setVisibility(View.GONE); pageBottomTabLayout.setVisibility(View.GONE);
menuBookmarks.setVisible(true);
exitFullscreenButton.setVisibility(View.VISIBLE); exitFullscreenButton.setVisibility(View.VISIBLE);
int fullScreenFlag = WindowManager.LayoutParams.FLAG_FULLSCREEN; int fullScreenFlag = WindowManager.LayoutParams.FLAG_FULLSCREEN;
int classicScreenFlag = WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN; int classicScreenFlag = WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN;
@ -907,8 +938,10 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback
toolbarContainer.setVisibility(View.VISIBLE); toolbarContainer.setVisibility(View.VISIBLE);
if (settings.getBoolean(KiwixSettingsActivity.PREF_BOTTOM_TOOLBAR, false)) { if (settings.getBoolean(KiwixSettingsActivity.PREF_BOTTOM_TOOLBAR, false)) {
pageBottomTabLayout.setVisibility(View.VISIBLE); pageBottomTabLayout.setVisibility(View.VISIBLE);
menuBookmarks.setVisible(false);
} }
exitFullscreenButton.setVisibility(View.INVISIBLE); exitFullscreenButton.setVisibility(View.INVISIBLE);
int fullScreenFlag = WindowManager.LayoutParams.FLAG_FULLSCREEN; int fullScreenFlag = WindowManager.LayoutParams.FLAG_FULLSCREEN;
int classicScreenFlag = WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN; int classicScreenFlag = WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN;
getWindow().clearFlags(fullScreenFlag); getWindow().clearFlags(fullScreenFlag);
@ -1139,15 +1172,14 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback
new Handler().post(new Runnable() { new Handler().post(new Runnable() {
@Override @Override
public void run() { public void run() {
ActionMenuItemView m = (ActionMenuItemView) findViewById(R.id.menu_bookmarks); ActionMenuItemView m = findViewById(R.id.menu_bookmarks);
if (m == null) { if (m != null) {
return;
}
findViewById(R.id.menu_bookmarks).setOnLongClickListener(view -> { findViewById(R.id.menu_bookmarks).setOnLongClickListener(view -> {
goToBookmarks(); goToBookmarks();
return false; return false;
}); });
} }
}
}); });
if (tts.isInitialized()) { if (tts.isInitialized()) {
@ -1257,8 +1289,14 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback
if (settings.getBoolean(KiwixSettingsActivity.PREF_BOTTOM_TOOLBAR, false)) { if (settings.getBoolean(KiwixSettingsActivity.PREF_BOTTOM_TOOLBAR, false)) {
pageBottomTabLayout.setVisibility(View.VISIBLE); pageBottomTabLayout.setVisibility(View.VISIBLE);
if (menuBookmarks != null) {
menuBookmarks.setVisible(false);
}
} else { } else {
pageBottomTabLayout.setVisibility(View.GONE); pageBottomTabLayout.setVisibility(View.GONE);
if (menuBookmarks != null) {
menuBookmarks.setVisible(true);
}
} }
Log.d(TAG_KIWIX, "action" + getIntent().getAction()); Log.d(TAG_KIWIX, "action" + getIntent().getAction());
@ -1551,6 +1589,7 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback
MenuInflater inflater = getMenuInflater(); MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu); inflater.inflate(R.menu.menu_main, menu);
this.menu = menu; this.menu = menu;
this.menuBookmarks = menu.findItem(R.id.menu_bookmarks);
StyleMenuButtons(menu); StyleMenuButtons(menu);
if (BuildConfig.IS_CUSTOM_APP) { if (BuildConfig.IS_CUSTOM_APP) {
menu.findItem(R.id.menu_help).setVisible(false); menu.findItem(R.id.menu_help).setVisible(false);
@ -1562,6 +1601,13 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback
if (isFullscreenOpened) { if (isFullscreenOpened) {
openFullScreen(); openFullScreen();
} }
if (PreferenceManager
.getDefaultSharedPreferences(getApplicationContext())
.getBoolean(KiwixSettingsActivity.PREF_BOTTOM_TOOLBAR, false)) {
menu.findItem(R.id.menu_bookmarks).setVisible(false);
}
return true; return true;
} }
@ -1600,19 +1646,28 @@ public class KiwixMobileActivity extends BaseActivity implements WebViewCallback
bookmarksDao = new BookmarksDao(KiwixDatabase.getInstance(this)); bookmarksDao = new BookmarksDao(KiwixDatabase.getInstance(this));
bookmarks = bookmarksDao.getBookmarks(ZimContentProvider.getId(), ZimContentProvider.getName()); bookmarks = bookmarksDao.getBookmarks(ZimContentProvider.getId(), ZimContentProvider.getName());
} }
TabLayout.Tab bookmarkTab = pageBottomTabLayout.getTabAt(4);
if (menu.findItem(R.id.menu_bookmarks) != null && if (menu.findItem(R.id.menu_bookmarks) != null &&
getCurrentWebView().getUrl() != null && getCurrentWebView().getUrl() != null &&
ZimContentProvider.getId() != null && ZimContentProvider.getId() != null &&
!getCurrentWebView().getUrl().equals("file:///android_asset/help.html")) { !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) menu.findItem(R.id.menu_bookmarks)
.setEnabled(true) .setEnabled(true)
.setIcon(bookmarks.contains(getCurrentWebView().getUrl()) ? R.drawable.action_bookmark_active : R.drawable.action_bookmark) .setIcon(icon)
.getIcon().setAlpha(255); .getIcon().setAlpha(255);
bookmarkTab.getCustomView().findViewById(R.id.bookmark_tab_icon).setBackgroundResource(icon);
} else { } else {
menu.findItem(R.id.menu_bookmarks) menu.findItem(R.id.menu_bookmarks)
.setEnabled(false) .setEnabled(false)
.setIcon(R.drawable.action_bookmark) .setIcon(R.drawable.action_bookmark)
.getIcon().setAlpha(130); .getIcon().setAlpha(130);
bookmarkTab.getCustomView().findViewById(R.id.bookmark_tab_icon).setBackgroundResource(R.drawable.action_bookmark);
} }
} }

View File

@ -26,6 +26,18 @@ public enum PageBottomTab {
public void select(@NonNull Callback cb) { public void select(@NonNull Callback cb) {
cb.onRandomArticleTabSelected(); 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; return FULL_SCREEN;
case 3: case 3:
return RANDOM_ARTICLE; return RANDOM_ARTICLE;
case 4:
return BOOKMARK;
default: default:
throw new IllegalArgumentException("Tab position is: " + code); throw new IllegalArgumentException("Tab position is: " + code);
} }
@ -47,10 +61,16 @@ public enum PageBottomTab {
public abstract void select(@NonNull Callback cb); public abstract void select(@NonNull Callback cb);
public void longClick(@NonNull Callback cb) {
// Override me
}
public interface Callback { public interface Callback {
void onHomeTabSelected(); void onHomeTabSelected();
void onFindInPageTabSelected(); void onFindInPageTabSelected();
void onFullscreenTabSelected(); void onFullscreenTabSelected();
void onRandomArticleTabSelected(); void onRandomArticleTabSelected();
void onBookmarkTabSelected();
void onBookmarkTabLongClicked();
} }
} }

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/bookmark_tab_icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_centerInParent="true"
android:background="@drawable/action_bookmark"
android:contentDescription="@string/menu_bookmarks" />
</RelativeLayout>

View File

@ -24,4 +24,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:contentDescription="@string/menu_randomarticle" android:contentDescription="@string/menu_randomarticle"
android:icon="@drawable/action_randomarticle" /> android:icon="@drawable/action_randomarticle" />
<android.support.design.widget.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/menu_bookmarks"
android:icon="@drawable/action_bookmark_active" />
</merge> </merge>