Add keyboard shortcuts for going to the top and bottom of podcast list (#5588)

This commit is contained in:
silansuslu 2021-12-14 14:02:49 -08:00 committed by GitHub
parent 20e8b3ed6c
commit 12be830f21
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 74 additions and 1 deletions

View File

@ -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:

View File

@ -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;
}

View File

@ -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);

View File

@ -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();

View File

@ -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();