added jump to top keyboard shortcut
This commit is contained in:
parent
54eed64fcf
commit
104691d8d0
|
@ -71,7 +71,7 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentRecyclerView
|
|||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutSingle(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
return false;
|
||||
return mNavigationHelper.handleKeyboardShortcutSingle(handler, keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -96,7 +96,8 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentRecyclerView
|
|||
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
final AbsActivitiesAdapter<Data> adapter = getAdapter();
|
||||
mNavigationHelper = new RecyclerViewNavigationHelper(getRecyclerView(), getLayoutManager(), adapter);
|
||||
mNavigationHelper = new RecyclerViewNavigationHelper(getRecyclerView(), getLayoutManager(),
|
||||
adapter, this);
|
||||
final View view = getView();
|
||||
if (view == null) throw new AssertionError();
|
||||
adapter.setListener(this);
|
||||
|
@ -108,12 +109,14 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentRecyclerView
|
|||
public void onStart() {
|
||||
super.onStart();
|
||||
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus();
|
||||
assert bus != null;
|
||||
bus.register(mStatusesBusCallback);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
final Bus bus = TwidereApplication.getInstance(getActivity()).getMessageBus();
|
||||
assert bus != null;
|
||||
bus.unregister(mStatusesBusCallback);
|
||||
super.onStop();
|
||||
}
|
||||
|
|
|
@ -144,7 +144,7 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentRecyclerViewFr
|
|||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return mNavigationHelper.handleKeyboardShortcutSingle(handler, keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -367,7 +367,8 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentRecyclerViewFr
|
|||
final AbsStatusesAdapter<Data> adapter = getAdapter();
|
||||
final RecyclerView recyclerView = getRecyclerView();
|
||||
final LinearLayoutManager layoutManager = getLayoutManager();
|
||||
mNavigationHelper = new RecyclerViewNavigationHelper(recyclerView, layoutManager, adapter);
|
||||
mNavigationHelper = new RecyclerViewNavigationHelper(recyclerView, layoutManager,
|
||||
adapter, this);
|
||||
|
||||
adapter.setListener(this);
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ import org.mariotaku.twidere.view.holder.UserListViewHolder;
|
|||
abstract class AbsUserListsFragment<Data> extends AbsContentRecyclerViewFragment<AbsUserListsAdapter<Data>>
|
||||
implements LoaderCallbacks<Data>, AbsUserListsAdapter.UserListAdapterListener, KeyboardShortcutCallback {
|
||||
|
||||
private RecyclerViewNavigationHelper mRecyclerViewNavigationHelper;
|
||||
private RecyclerViewNavigationHelper mNavigationHelper;
|
||||
|
||||
private long mNextCursor;
|
||||
private long mPrevCursor;
|
||||
|
@ -54,12 +54,12 @@ abstract class AbsUserListsFragment<Data> extends AbsContentRecyclerViewFragment
|
|||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutSingle(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
return false;
|
||||
return mNavigationHelper.handleKeyboardShortcutSingle(handler, keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutRepeat(@NonNull KeyboardShortcutsHandler handler, int keyCode, int repeatCount, @NonNull KeyEvent event) {
|
||||
return mRecyclerViewNavigationHelper.handleKeyboardShortcutRepeat(handler, keyCode, repeatCount, event);
|
||||
return mNavigationHelper.handleKeyboardShortcutRepeat(handler, keyCode, repeatCount, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -72,7 +72,8 @@ abstract class AbsUserListsFragment<Data> extends AbsContentRecyclerViewFragment
|
|||
final LinearLayoutManager layoutManager = getLayoutManager();
|
||||
adapter.setListener(this);
|
||||
|
||||
mRecyclerViewNavigationHelper = new RecyclerViewNavigationHelper(recyclerView, layoutManager, adapter);
|
||||
mNavigationHelper = new RecyclerViewNavigationHelper(recyclerView, layoutManager, adapter,
|
||||
this);
|
||||
final Bundle loaderArgs = new Bundle(getArguments());
|
||||
loaderArgs.putBoolean(EXTRA_FROM_USER, true);
|
||||
getLoaderManager().initLoader(0, loaderArgs, this);
|
||||
|
|
|
@ -45,7 +45,7 @@ import org.mariotaku.twidere.view.holder.UserViewHolder;
|
|||
abstract class AbsUsersFragment<Data> extends AbsContentRecyclerViewFragment<AbsUsersAdapter<Data>>
|
||||
implements LoaderCallbacks<Data>, UserAdapterListener, KeyboardShortcutCallback {
|
||||
|
||||
private RecyclerViewNavigationHelper mRecyclerViewNavigationHelper;
|
||||
private RecyclerViewNavigationHelper mNavigationHelper;
|
||||
|
||||
public final Data getData() {
|
||||
return getAdapter().getData();
|
||||
|
@ -53,12 +53,12 @@ abstract class AbsUsersFragment<Data> extends AbsContentRecyclerViewFragment<Abs
|
|||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutSingle(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
return false;
|
||||
return mNavigationHelper.handleKeyboardShortcutSingle(handler, keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutRepeat(@NonNull KeyboardShortcutsHandler handler, int keyCode, int repeatCount, @NonNull KeyEvent event) {
|
||||
return mRecyclerViewNavigationHelper.handleKeyboardShortcutRepeat(handler, keyCode, repeatCount, event);
|
||||
return mNavigationHelper.handleKeyboardShortcutRepeat(handler, keyCode, repeatCount, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -71,7 +71,8 @@ abstract class AbsUsersFragment<Data> extends AbsContentRecyclerViewFragment<Abs
|
|||
final LinearLayoutManager layoutManager = getLayoutManager();
|
||||
adapter.setListener(this);
|
||||
|
||||
mRecyclerViewNavigationHelper = new RecyclerViewNavigationHelper(recyclerView, layoutManager, adapter);
|
||||
mNavigationHelper = new RecyclerViewNavigationHelper(recyclerView, layoutManager, adapter,
|
||||
this);
|
||||
final Bundle loaderArgs = new Bundle(getArguments());
|
||||
loaderArgs.putBoolean(EXTRA_FROM_USER, true);
|
||||
getLoaderManager().initLoader(0, loaderArgs, this);
|
||||
|
|
|
@ -246,7 +246,8 @@ public class DirectMessagesFragment extends AbsContentRecyclerViewFragment<Messa
|
|||
final MessageEntriesAdapter adapter = getAdapter();
|
||||
final RecyclerView recyclerView = getRecyclerView();
|
||||
final LinearLayoutManager layoutManager = getLayoutManager();
|
||||
mNavigationHelper = new RecyclerViewNavigationHelper(recyclerView, layoutManager, adapter);
|
||||
mNavigationHelper = new RecyclerViewNavigationHelper(recyclerView, layoutManager, adapter,
|
||||
this);
|
||||
|
||||
adapter.setListener(this);
|
||||
|
||||
|
|
|
@ -266,7 +266,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
mRecyclerView.setAdapter(mStatusAdapter);
|
||||
|
||||
mRecyclerViewNavigationHelper = new RecyclerViewNavigationHelper(mRecyclerView, mLayoutManager,
|
||||
mStatusAdapter);
|
||||
mStatusAdapter, null);
|
||||
|
||||
setState(STATE_LOADING);
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
package org.mariotaku.twidere.util;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.support.v7.widget.RecyclerView.Adapter;
|
||||
|
@ -41,13 +42,17 @@ public class RecyclerViewNavigationHelper implements KeyboardShortcutCallback {
|
|||
private final LinearLayoutManager manager;
|
||||
@NonNull
|
||||
private final Adapter<ViewHolder> adapter;
|
||||
@Nullable
|
||||
private final ContentListScrollListener.ContentListSupport support;
|
||||
|
||||
public RecyclerViewNavigationHelper(@NonNull final RecyclerView view,
|
||||
@NonNull final LinearLayoutManager manager,
|
||||
@NonNull final Adapter<ViewHolder> adapter) {
|
||||
@NonNull final Adapter<ViewHolder> adapter,
|
||||
@Nullable final ContentListScrollListener.ContentListSupport support) {
|
||||
this.view = view;
|
||||
this.manager = manager;
|
||||
this.adapter = adapter;
|
||||
this.support = support;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -103,6 +108,9 @@ public class RecyclerViewNavigationHelper implements KeyboardShortcutCallback {
|
|||
case ACTION_NAVIGATION_TOP: {
|
||||
view.stopScroll();
|
||||
manager.scrollToPositionWithOffset(0, 0);
|
||||
if (support != null) {
|
||||
support.setControlVisible(true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue