mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-08-03 18:56:44 -04:00
Add swipe to dismiss gesture to tab switcher
This commit is contained in:
parent
197bb71c1a
commit
9704a4204f
@ -54,6 +54,7 @@ import android.support.v7.widget.CardView;
|
|||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
|
import android.support.v7.widget.helper.ItemTouchHelper;
|
||||||
import android.text.SpannableString;
|
import android.text.SpannableString;
|
||||||
import android.text.style.ForegroundColorSpan;
|
import android.text.style.ForegroundColorSpan;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
@ -155,6 +156,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
private static Uri KIWIX_BROWSER_MARKET_URI;
|
private static Uri KIWIX_BROWSER_MARKET_URI;
|
||||||
private final ArrayList<String> bookmarks = new ArrayList<>();
|
private final ArrayList<String> bookmarks = new ArrayList<>();
|
||||||
private final List<LibraryNetworkEntity.Book> books = new ArrayList<>();
|
private final List<LibraryNetworkEntity.Book> books = new ArrayList<>();
|
||||||
|
private final List<KiwixWebView> webViewList = new ArrayList<>();
|
||||||
@BindView(R.id.activity_main_root)
|
@BindView(R.id.activity_main_root)
|
||||||
ConstraintLayout root;
|
ConstraintLayout root;
|
||||||
@BindView(R.id.activity_main_toolbar)
|
@BindView(R.id.activity_main_toolbar)
|
||||||
@ -213,7 +215,6 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
private boolean isExternalLinkPopup;
|
private boolean isExternalLinkPopup;
|
||||||
private String documentParserJs;
|
private String documentParserJs;
|
||||||
private DocumentParser documentParser;
|
private DocumentParser documentParser;
|
||||||
private List<KiwixWebView> mWebViews = new ArrayList<>();
|
|
||||||
private KiwixTextToSpeech tts;
|
private KiwixTextToSpeech tts;
|
||||||
private CompatFindActionModeCallback compatCallback;
|
private CompatFindActionModeCallback compatCallback;
|
||||||
private TabsAdapter tabsAdapter;
|
private TabsAdapter tabsAdapter;
|
||||||
@ -228,6 +229,22 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
private AppCompatButton downloadBookButton;
|
private AppCompatButton downloadBookButton;
|
||||||
private View tabSwitcherRoot;
|
private View tabSwitcherRoot;
|
||||||
private TextView tabSwitcherIcon;
|
private TextView tabSwitcherIcon;
|
||||||
|
private ItemTouchHelper.Callback tabCallback = new ItemTouchHelper.Callback() {
|
||||||
|
@Override
|
||||||
|
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
|
||||||
|
return makeMovementFlags(0, ItemTouchHelper.UP | ItemTouchHelper.DOWN);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
|
||||||
|
closeTab(viewHolder.getAdapterPosition());
|
||||||
|
}
|
||||||
|
};
|
||||||
private FileSearch fileSearch = new FileSearch(this, new FileSearch.ResultListener() {
|
private FileSearch fileSearch = new FileSearch(this, new FileSearch.ResultListener() {
|
||||||
final List<LibraryNetworkEntity.Book> newBooks = new ArrayList<>();
|
final List<LibraryNetworkEntity.Book> newBooks = new ArrayList<>();
|
||||||
|
|
||||||
@ -308,7 +325,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
FileReader fileReader = new FileReader();
|
FileReader fileReader = new FileReader();
|
||||||
documentParserJs = fileReader.readFile("js/documentParser.js", this);
|
documentParserJs = fileReader.readFile("js/documentParser.js", this);
|
||||||
documentSections = new ArrayList<>();
|
documentSections = new ArrayList<>();
|
||||||
tabsAdapter = new TabsAdapter(this, mWebViews);
|
tabsAdapter = new TabsAdapter(this, webViewList);
|
||||||
tableDrawerRight.setLayoutManager(new LinearLayoutManager(this));
|
tableDrawerRight.setLayoutManager(new LinearLayoutManager(this));
|
||||||
|
|
||||||
TableDrawerAdapter tableDrawerAdapter = new TableDrawerAdapter();
|
TableDrawerAdapter tableDrawerAdapter = new TableDrawerAdapter();
|
||||||
@ -379,7 +396,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
}
|
}
|
||||||
if (i.hasExtra(TAG_FILE_SEARCHED)) {
|
if (i.hasExtra(TAG_FILE_SEARCHED)) {
|
||||||
searchForTitle(i.getStringExtra(TAG_FILE_SEARCHED));
|
searchForTitle(i.getStringExtra(TAG_FILE_SEARCHED));
|
||||||
selectTab(mWebViews.size() - 1);
|
selectTab(webViewList.size() - 1);
|
||||||
}
|
}
|
||||||
if (i.hasExtra(EXTRA_CHOSE_X_URL)) {
|
if (i.hasExtra(EXTRA_CHOSE_X_URL)) {
|
||||||
newTab();
|
newTab();
|
||||||
@ -413,6 +430,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
newTab(HOME_URL);
|
newTab(HOME_URL);
|
||||||
});
|
});
|
||||||
tabRecyclerView.setAdapter(tabsAdapter);
|
tabRecyclerView.setAdapter(tabsAdapter);
|
||||||
|
new ItemTouchHelper(tabCallback).attachToRecyclerView(tabRecyclerView);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void hideTabSwitcher() {
|
private void hideTabSwitcher() {
|
||||||
@ -618,6 +636,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
downloadBookButton.setOnClickListener(null);
|
downloadBookButton.setOnClickListener(null);
|
||||||
}
|
}
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
|
tabCallback = null;
|
||||||
downloadBookButton = null;
|
downloadBookButton = null;
|
||||||
addTab.setOnClickListener(null);
|
addTab.setOnClickListener(null);
|
||||||
addTab = null;
|
addTab = null;
|
||||||
@ -654,8 +673,8 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
|
|
||||||
private KiwixWebView newTab(String url) {
|
private KiwixWebView newTab(String url) {
|
||||||
KiwixWebView webView = getWebView(url);
|
KiwixWebView webView = getWebView(url);
|
||||||
mWebViews.add(webView);
|
webViewList.add(webView);
|
||||||
selectTab(mWebViews.size() - 1);
|
selectTab(webViewList.size() - 1);
|
||||||
tabsAdapter.notifyDataSetChanged();
|
tabsAdapter.notifyDataSetChanged();
|
||||||
setUpWebView();
|
setUpWebView();
|
||||||
documentParser.initInterface(webView);
|
documentParser.initInterface(webView);
|
||||||
@ -664,20 +683,20 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
|
|
||||||
private void newTabInBackground(String url) {
|
private void newTabInBackground(String url) {
|
||||||
KiwixWebView webView = getWebView(url);
|
KiwixWebView webView = getWebView(url);
|
||||||
mWebViews.add(webView);
|
webViewList.add(webView);
|
||||||
tabsAdapter.notifyDataSetChanged();
|
tabsAdapter.notifyDataSetChanged();
|
||||||
setUpWebView();
|
setUpWebView();
|
||||||
documentParser.initInterface(webView);
|
documentParser.initInterface(webView);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void closeTab(int index) {
|
private void closeTab(int index) {
|
||||||
tempForUndo = mWebViews.get(index);
|
tempForUndo = webViewList.get(index);
|
||||||
mWebViews.remove(index);
|
webViewList.remove(index);
|
||||||
tabsAdapter.notifyItemRemoved(index);
|
tabsAdapter.notifyItemRemoved(index);
|
||||||
tabsAdapter.notifyItemRangeChanged(index, mWebViews.size());
|
tabsAdapter.notifyItemRangeChanged(index, webViewList.size());
|
||||||
Snackbar.make(drawerLayout, R.string.tab_closed, Snackbar.LENGTH_LONG)
|
Snackbar.make(drawerLayout, R.string.tab_closed, Snackbar.LENGTH_LONG)
|
||||||
.setAction(R.string.undo, v -> {
|
.setAction(R.string.undo, v -> {
|
||||||
mWebViews.add(index, tempForUndo);
|
webViewList.add(index, tempForUndo);
|
||||||
tabsAdapter.notifyItemInserted(index);
|
tabsAdapter.notifyItemInserted(index);
|
||||||
setUpWebView();
|
setUpWebView();
|
||||||
})
|
})
|
||||||
@ -689,7 +708,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
tabsAdapter.setSelected(position);
|
tabsAdapter.setSelected(position);
|
||||||
contentFrame.removeAllViews();
|
contentFrame.removeAllViews();
|
||||||
|
|
||||||
KiwixWebView webView = mWebViews.get(position);
|
KiwixWebView webView = webViewList.get(position);
|
||||||
if (webView.getParent() != null) {
|
if (webView.getParent() != null) {
|
||||||
((ViewGroup) webView.getParent()).removeView(webView);
|
((ViewGroup) webView.getParent()).removeView(webView);
|
||||||
}
|
}
|
||||||
@ -710,11 +729,11 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private KiwixWebView getCurrentWebView() {
|
private KiwixWebView getCurrentWebView() {
|
||||||
if (mWebViews.size() == 0) return newTab();
|
if (webViewList.size() == 0) return newTab();
|
||||||
if (currentWebViewIndex < mWebViews.size()) {
|
if (currentWebViewIndex < webViewList.size()) {
|
||||||
return mWebViews.get(currentWebViewIndex);
|
return webViewList.get(currentWebViewIndex);
|
||||||
} else {
|
} else {
|
||||||
return mWebViews.get(0);
|
return webViewList.get(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -766,7 +785,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
backToTopButton.show();
|
backToTopButton.show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
readAloud();
|
tts.readAloud(getCurrentWebView());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case R.id.menu_fullscreen:
|
case R.id.menu_fullscreen:
|
||||||
@ -1091,13 +1110,9 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
invalidateOptionsMenu();
|
invalidateOptionsMenu();
|
||||||
if (wasHideToolbar != isHideToolbar) {
|
if (wasHideToolbar != isHideToolbar) {
|
||||||
wasHideToolbar = isHideToolbar;
|
wasHideToolbar = isHideToolbar;
|
||||||
|
for (int i = 0; i < webViewList.size(); i++) {
|
||||||
List<KiwixWebView> newWebViews = new ArrayList<>();
|
webViewList.set(i, getWebView(webViewList.get(i).getUrl()));
|
||||||
for (int i = 0; i < mWebViews.size(); i++) {
|
|
||||||
KiwixWebView newView = getWebView(mWebViews.get(i).getUrl());
|
|
||||||
newWebViews.add(i, newView);
|
|
||||||
}
|
}
|
||||||
mWebViews = newWebViews;
|
|
||||||
selectTab(currentWebViewIndex);
|
selectTab(currentWebViewIndex);
|
||||||
}
|
}
|
||||||
if (refresh) {
|
if (refresh) {
|
||||||
@ -1115,10 +1130,10 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mWebViews.isEmpty() && mWebViews.get(currentWebViewIndex).getUrl() != null &&
|
if (!webViewList.isEmpty() && webViewList.get(currentWebViewIndex).getUrl() != null &&
|
||||||
mWebViews.get(currentWebViewIndex).getUrl().equals(HOME_URL) &&
|
webViewList.get(currentWebViewIndex).getUrl().equals(HOME_URL) &&
|
||||||
mWebViews.get(currentWebViewIndex).findViewById(R.id.get_content_card) != null) {
|
webViewList.get(currentWebViewIndex).findViewById(R.id.get_content_card) != null) {
|
||||||
mWebViews.get(currentWebViewIndex).findViewById(R.id.get_content_card).setEnabled(true);
|
webViewList.get(currentWebViewIndex).findViewById(R.id.get_content_card).setEnabled(true);
|
||||||
}
|
}
|
||||||
updateBottomToolbarVisibility();
|
updateBottomToolbarVisibility();
|
||||||
|
|
||||||
@ -1243,10 +1258,6 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
openArticle(articleUrl);
|
openArticle(articleUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void readAloud() {
|
|
||||||
tts.readAloud(getCurrentWebView());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setUpWebView() {
|
private void setUpWebView() {
|
||||||
getCurrentWebView().getSettings().setJavaScriptEnabled(true);
|
getCurrentWebView().getSettings().setJavaScriptEnabled(true);
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
|
||||||
@ -1335,7 +1346,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
startActivity(new Intent(MainActivity.this, MainActivity.class));
|
startActivity(new Intent(MainActivity.this, MainActivity.class));
|
||||||
}
|
}
|
||||||
if (resultCode == RESULT_HISTORY_CLEARED) {
|
if (resultCode == RESULT_HISTORY_CLEARED) {
|
||||||
mWebViews.clear();
|
webViewList.clear();
|
||||||
newTab();
|
newTab();
|
||||||
tabsAdapter.notifyDataSetChanged();
|
tabsAdapter.notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
@ -1443,8 +1454,8 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateTabSwitcherIcon() {
|
private void updateTabSwitcherIcon() {
|
||||||
if (mWebViews.size() < 100) {
|
if (webViewList.size() < 100) {
|
||||||
tabSwitcherIcon.setText(String.valueOf(mWebViews.size()));
|
tabSwitcherIcon.setText(String.valueOf(webViewList.size()));
|
||||||
} else {
|
} else {
|
||||||
tabSwitcherIcon.setText(getString(R.string.smiling_face));
|
tabSwitcherIcon.setText(getString(R.string.smiling_face));
|
||||||
}
|
}
|
||||||
@ -1522,7 +1533,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
|
|
||||||
JSONArray urls = new JSONArray();
|
JSONArray urls = new JSONArray();
|
||||||
JSONArray positions = new JSONArray();
|
JSONArray positions = new JSONArray();
|
||||||
for (KiwixWebView view : mWebViews) {
|
for (KiwixWebView view : webViewList) {
|
||||||
if (view.getUrl() == null) continue;
|
if (view.getUrl() == null) continue;
|
||||||
urls.put(view.getUrl());
|
urls.put(view.getUrl());
|
||||||
positions.put(view.getScrollY());
|
positions.put(view.getScrollY());
|
||||||
@ -1760,7 +1771,7 @@ public class MainActivity extends BaseActivity implements WebViewCallback,
|
|||||||
newTabInBackground(url);
|
newTabInBackground(url);
|
||||||
Snackbar.make(drawerLayout, R.string.new_tab_snackbar, Snackbar.LENGTH_LONG)
|
Snackbar.make(drawerLayout, R.string.new_tab_snackbar, Snackbar.LENGTH_LONG)
|
||||||
.setAction(getString(R.string.open), v -> {
|
.setAction(getString(R.string.open), v -> {
|
||||||
if (mWebViews.size() > 1) selectTab(mWebViews.size() - 1);
|
if (webViewList.size() > 1) selectTab(webViewList.size() - 1);
|
||||||
})
|
})
|
||||||
.setActionTextColor(getResources().getColor(R.color.white))
|
.setActionTextColor(getResources().getColor(R.color.white))
|
||||||
.show();
|
.show();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user