From 12be830f217fe9e179bf053665337af39f48aa9e Mon Sep 17 00:00:00 2001 From: silansuslu <72400543+silansuslu@users.noreply.github.com> Date: Tue, 14 Dec 2021 14:02:49 -0800 Subject: Add keyboard shortcuts for going to the top and bottom of podcast list (#5588) --- .../de/danoeh/antennapod/activity/MainActivity.java | 1 + .../antennapod/fragment/EpisodesListFragment.java | 18 ++++++++++++++++++ .../antennapod/fragment/FeedItemlistFragment.java | 20 +++++++++++++++++++- .../antennapod/fragment/PlaybackHistoryFragment.java | 18 ++++++++++++++++++ .../de/danoeh/antennapod/fragment/QueueFragment.java | 18 ++++++++++++++++++ 5 files changed, 74 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index 17411c7ce..3e4782f1f 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -624,6 +624,7 @@ public class MainActivity extends CastEnabledActivity { AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); Integer customKeyCode = null; + EventBus.getDefault().post(event); switch (keyCode) { case KeyEvent.KEYCODE_P: diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java index 37d77d31f..7eb0847eb 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java @@ -2,6 +2,7 @@ package de.danoeh.antennapod.fragment; import android.content.DialogInterface; import android.os.Bundle; +import android.view.KeyEvent; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.RecyclerView; @@ -321,6 +322,23 @@ public abstract class EpisodesListFragment extends Fragment { } } + @Subscribe(threadMode = ThreadMode.MAIN) + public void onKeyUp(KeyEvent event) { + if (!isAdded() || !isVisible() || !isMenuVisible()) { + return; + } + switch (event.getKeyCode()) { + case KeyEvent.KEYCODE_T: + recyclerView.smoothScrollToPosition(0); + break; + case KeyEvent.KEYCODE_B: + recyclerView.smoothScrollToPosition(listAdapter.getItemCount() - 1); + break; + default: + break; + } + } + protected boolean shouldUpdatedItemRemainInList(FeedItem item) { return true; } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java index aa50c346c..d74981b7f 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java @@ -24,7 +24,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.widget.Toolbar; -import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; @@ -88,6 +87,8 @@ import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; +import android.view.KeyEvent; +import androidx.fragment.app.Fragment; /** * Displays a list of FeedItems. @@ -644,6 +645,23 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem return feed; } + @Subscribe(threadMode = ThreadMode.MAIN) + public void onKeyUp(KeyEvent event) { + if (!isAdded() || !isVisible() || !isMenuVisible()) { + return; + } + switch (event.getKeyCode()) { + case KeyEvent.KEYCODE_T: + recyclerView.smoothScrollToPosition(0); + break; + case KeyEvent.KEYCODE_B: + recyclerView.smoothScrollToPosition(adapter.getItemCount() - 1); + break; + default: + break; + } + } + private static class FeedItemListAdapter extends EpisodeItemListAdapter { public FeedItemListAdapter(MainActivity mainActivity) { super(mainActivity); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java index e1fa5eeb6..54c98c0ce 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -2,6 +2,7 @@ package de.danoeh.antennapod.fragment; import android.os.Bundle; import android.util.Log; +import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; @@ -180,6 +181,23 @@ public class PlaybackHistoryFragment extends Fragment implements Toolbar.OnMenuI return FeedItemMenuHandler.onMenuItemClicked(this, item.getItemId(), selectedItem); } + @Subscribe(threadMode = ThreadMode.MAIN) + public void onKeyUp(KeyEvent event) { + if (!isAdded() || !isVisible() || !isMenuVisible()) { + return; + } + switch (event.getKeyCode()) { + case KeyEvent.KEYCODE_T: + recyclerView.smoothScrollToPosition(0); + break; + case KeyEvent.KEYCODE_B: + recyclerView.smoothScrollToPosition(adapter.getItemCount() - 1); + break; + default: + break; + } + } + @Subscribe(threadMode = ThreadMode.MAIN) public void onHistoryUpdated(PlaybackHistoryEvent event) { loadItems(); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index b308db0f6..c145642b9 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -7,6 +7,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.util.Log; +import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; @@ -234,6 +235,23 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi } } + @Subscribe(threadMode = ThreadMode.MAIN) + public void onKeyUp(KeyEvent event) { + if (!isAdded() || !isVisible() || !isMenuVisible()) { + return; + } + switch (event.getKeyCode()) { + case KeyEvent.KEYCODE_T: + recyclerView.smoothScrollToPosition(0); + break; + case KeyEvent.KEYCODE_B: + recyclerView.smoothScrollToPosition(recyclerAdapter.getItemCount() - 1); + break; + default: + break; + } + } + @Override public void onDestroyView() { super.onDestroyView(); -- cgit v1.2.3