added jump to top keyboard shortcut

This commit is contained in:
Mariotaku Lee 2015-05-20 16:42:57 +08:00
parent 54eed64fcf
commit 104691d8d0
7 changed files with 30 additions and 15 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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