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 d5eea7517..8f27a0498 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 @@ -109,11 +109,7 @@ public void updateUI() { mBinding.setCallback(mBookmarksCallback); mBookmarkAdapter = new BookmarkAdapter(mBookmarkItemCallback, getContext()); 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); @@ -151,12 +147,25 @@ 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); + + if (recyclerView.getScrollState() != RecyclerView.SCROLL_STATE_SETTLING) { + recyclerView.requestFocus(); + } + } + }; + private final BookmarkItemCallback mBookmarkItemCallback = new BookmarkItemCallback() { @Override public void onClick(@NonNull View view, @NonNull Bookmark item) { @@ -184,8 +193,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 938f8507e..f537cc3be 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; @@ -113,11 +114,7 @@ public void updateUI() { mBinding.setCallback(mHistoryCallback); mHistoryAdapter = new HistoryAdapter(mHistoryItemCallback, getContext()); 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); @@ -149,6 +146,8 @@ public void updateUI() { public void onDestroy() { SessionStore.get().getHistoryStore().removeListener(this); + mBinding.historyList.removeOnScrollListener(mScrollListener); + if (ACCOUNTS_UI_ENABLED) { mAccounts.removeAccountListener(mAccountListener); mAccounts.removeSyncListener(mSyncListener); @@ -159,6 +158,17 @@ 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); + + if (recyclerView.getScrollState() != RecyclerView.SCROLL_STATE_SETTLING) { + recyclerView.requestFocus(); + } + } + }; + private final HistoryItemCallback mHistoryItemCallback = new HistoryItemCallback() { @Override public void onClick(View view, VisitInfo item) { @@ -186,8 +196,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 6f904a08f..569358650 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 @@ -1081,7 +1081,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);