From 1ac8cc918270b801d11944b870c83a53c1f66524 Mon Sep 17 00:00:00 2001 From: Manuel Martin Date: Thu, 16 Jan 2020 18:16:36 +0100 Subject: [PATCH 1/2] Improve the way we show/hide the context menu --- .../vrbrowser/ui/views/BookmarksView.java | 23 ++++++++++++------ .../vrbrowser/ui/views/HistoryView.java | 24 +++++++++++++------ .../vrbrowser/ui/widgets/WindowWidget.java | 2 +- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/views/BookmarksView.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/views/BookmarksView.java index 4b00f6a4a..cdf4b2606 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/views/BookmarksView.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/views/BookmarksView.java @@ -94,11 +94,7 @@ private void initialize(Context aContext) { mBinding.setCallback(mBookmarksCallback); mBookmarkAdapter = new BookmarkAdapter(mBookmarkItemCallback, aContext); mBinding.bookmarksList.setAdapter(mBookmarkAdapter); - mBinding.bookmarksList.setOnTouchListener((v, event) -> { - v.requestFocusFromTouch(); - return false; - }); - mBinding.bookmarksList.setOnScrollChangeListener((v, scrollX, scrollY, oldScrollX, oldScrollY) -> mBookmarksViewListeners.forEach((listener) -> listener.onHideContextMenu(v))); + mBinding.bookmarksList.addOnScrollListener(mScrollListener); mBinding.bookmarksList.setHasFixedSize(true); mBinding.bookmarksList.setItemViewCacheSize(20); mBinding.bookmarksList.setDrawingCacheEnabled(true); @@ -143,12 +139,23 @@ public void onShow() { public void onDestroy() { SessionStore.get().getBookmarkStore().removeListener(this); + mBinding.bookmarksList.removeOnScrollListener(mScrollListener); + if (ACCOUNTS_UI_ENABLED) { mAccounts.removeAccountListener(mAccountListener); mAccounts.removeSyncListener(mSyncListener); } } + private RecyclerView.OnScrollListener mScrollListener = new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + super.onScrolled(recyclerView, dx, dy); + + recyclerView.requestFocus(); + } + }; + private final BookmarkItemCallback mBookmarkItemCallback = new BookmarkItemCallback() { @Override public void onClick(@NonNull View view, @NonNull Bookmark item) { @@ -183,8 +190,10 @@ public void onMore(@NonNull View view, @NonNull Bookmark item) { boolean isLastVisibleItem = false; if (mBinding.bookmarksList.getLayoutManager() instanceof LinearLayoutManager) { LinearLayoutManager layoutManager = (LinearLayoutManager) mBinding.bookmarksList.getLayoutManager(); - int lastVisibleItem = layoutManager.findLastCompletelyVisibleItemPosition(); - if (rowPosition == layoutManager.findLastVisibleItemPosition() && rowPosition != lastVisibleItem) { + int lastItem = mBookmarkAdapter.getItemCount(); + if ((rowPosition == layoutManager.findLastVisibleItemPosition() || rowPosition == layoutManager.findLastCompletelyVisibleItemPosition() || + rowPosition == layoutManager.findLastVisibleItemPosition()-1 || rowPosition == layoutManager.findLastCompletelyVisibleItemPosition()-1) + && rowPosition != lastItem) { isLastVisibleItem = true; } } diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/views/HistoryView.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/views/HistoryView.java index 7113cc5a3..4ed51202c 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/views/HistoryView.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/views/HistoryView.java @@ -18,6 +18,7 @@ import androidx.databinding.DataBindingUtil; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView.OnScrollListener; import org.mozilla.geckoview.GeckoSessionSettings; import org.mozilla.vrbrowser.R; @@ -99,11 +100,7 @@ private void initialize(Context aContext) { mBinding.setCallback(mHistoryCallback); mHistoryAdapter = new HistoryAdapter(mHistoryItemCallback, aContext); mBinding.historyList.setAdapter(mHistoryAdapter); - mBinding.historyList.setOnTouchListener((v, event) -> { - v.requestFocusFromTouch(); - return false; - }); - mBinding.historyList.setOnScrollChangeListener((v, scrollX, scrollY, oldScrollX, oldScrollY) -> mHistoryViewListeners.forEach((listener) -> listener.onHideContextMenu(v))); + mBinding.historyList.addOnScrollListener(mScrollListener); mBinding.historyList.setHasFixedSize(true); mBinding.historyList.setItemViewCacheSize(20); mBinding.historyList.setDrawingCacheEnabled(true); @@ -142,6 +139,8 @@ private void initialize(Context aContext) { public void onDestroy() { SessionStore.get().getHistoryStore().removeListener(this); + mBinding.historyList.removeOnScrollListener(mScrollListener); + if (ACCOUNTS_UI_ENABLED) { mAccounts.removeAccountListener(mAccountListener); mAccounts.removeSyncListener(mSyncListener); @@ -152,6 +151,15 @@ public void onShow() { updateLayout(); } + private OnScrollListener mScrollListener = new OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + super.onScrolled(recyclerView, dx, dy); + + recyclerView.requestFocus(); + } + }; + private final HistoryItemCallback mHistoryItemCallback = new HistoryItemCallback() { @Override public void onClick(View view, VisitInfo item) { @@ -186,8 +194,10 @@ public void onMore(View view, VisitInfo item) { boolean isLastVisibleItem = false; if (mBinding.historyList.getLayoutManager() instanceof LinearLayoutManager) { LinearLayoutManager layoutManager = (LinearLayoutManager) mBinding.historyList.getLayoutManager(); - int lastVisibleItem = layoutManager.findLastCompletelyVisibleItemPosition(); - if (rowPosition == layoutManager.findLastVisibleItemPosition() && rowPosition != lastVisibleItem) { + int lastItem = mHistoryAdapter.getItemCount(); + if ((rowPosition == layoutManager.findLastVisibleItemPosition() || rowPosition == layoutManager.findLastCompletelyVisibleItemPosition() || + rowPosition == layoutManager.findLastVisibleItemPosition()-1 || rowPosition == layoutManager.findLastCompletelyVisibleItemPosition()-1) + && rowPosition != lastItem) { isLastVisibleItem = true; } } diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WindowWidget.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WindowWidget.java index 0c6cd4935..b7b176f9a 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WindowWidget.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WindowWidget.java @@ -1121,7 +1121,7 @@ public void onUnstackSession(Session aSession, Session aParent) { public InputConnection onCreateInputConnection(final EditorInfo outAttrs) { Log.d(LOGTAG, "BrowserWidget onCreateInputConnection"); GeckoSession session = mSession.getGeckoSession(); - if (session == null) { + if (session == null || mView != null) { return null; } return session.getTextInput().onCreateInputConnection(outAttrs); From dafd8ebd0c9867988a798807841a0b48c28b74ec Mon Sep 17 00:00:00 2001 From: Manuel Martin Date: Fri, 17 Jan 2020 12:56:15 +0100 Subject: [PATCH 2/2] Avoid hiding the context menu for the last row --- .../shared/org/mozilla/vrbrowser/ui/views/BookmarksView.java | 4 +++- .../shared/org/mozilla/vrbrowser/ui/views/HistoryView.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/views/BookmarksView.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/views/BookmarksView.java index cdf4b2606..1f40ab72d 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/views/BookmarksView.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/views/BookmarksView.java @@ -152,7 +152,9 @@ public void onDestroy() { public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); - recyclerView.requestFocus(); + if (recyclerView.getScrollState() != RecyclerView.SCROLL_STATE_SETTLING) { + recyclerView.requestFocus(); + } } }; diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/views/HistoryView.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/views/HistoryView.java index 4ed51202c..020f3ad31 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/views/HistoryView.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/views/HistoryView.java @@ -156,7 +156,9 @@ public void onShow() { public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); - recyclerView.requestFocus(); + if (recyclerView.getScrollState() != RecyclerView.SCROLL_STATE_SETTLING) { + recyclerView.requestFocus(); + } } };