volume key navigation should work
This commit is contained in:
parent
dd4104b503
commit
641a61cb65
|
@ -55,7 +55,8 @@ public class TwitterDateConverter extends StringBasedTypeConverter<Date> {
|
|||
}
|
||||
final long currentTime = System.currentTimeMillis();
|
||||
if (date.getTime() - currentTime > ONE_MINUTE) {
|
||||
AbsLogger.error("Tweet date from future: " + string + ", current time is " + currentTime);
|
||||
AbsLogger.error("Tweet date from future, raw string: " + string + ", date parsed: "
|
||||
+ date + ", current time is " + currentTime);
|
||||
}
|
||||
return date;
|
||||
}
|
||||
|
|
|
@ -245,6 +245,12 @@ public class SettingsActivity extends BasePreferenceActivity {
|
|||
return super.handleKeyboardShortcutSingle(handler, keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
final String action = handler.getKeyAction(CONTEXT_TAG_NAVIGATION, keyCode, event);
|
||||
return ACTION_NAVIGATION_BACK.equals(action);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutRepeat(@NonNull KeyboardShortcutsHandler handler, int keyCode, int repeatCount, @NonNull KeyEvent event) {
|
||||
return super.handleKeyboardShortcutRepeat(handler, keyCode, repeatCount, event);
|
||||
|
|
|
@ -98,14 +98,14 @@ public class BaseAppCompatActivity extends ThemedAppCompatActivity implements Co
|
|||
@Override
|
||||
public boolean onKeyUp(int keyCode, @NonNull KeyEvent event) {
|
||||
if (handleKeyboardShortcutSingle(mKeyboardShortcutsHandler, keyCode, event)) return true;
|
||||
return super.onKeyUp(keyCode, event);
|
||||
return isKeyboardShortcutHandled(mKeyboardShortcutsHandler, keyCode, event) || super.onKeyUp(keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
if (handleKeyboardShortcutRepeat(mKeyboardShortcutsHandler, keyCode, event.getRepeatCount(), event))
|
||||
return true;
|
||||
return super.onKeyDown(keyCode, event);
|
||||
return isKeyboardShortcutHandled(mKeyboardShortcutsHandler, keyCode, event) || super.onKeyDown(keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -129,6 +129,11 @@ public class BaseAppCompatActivity extends ThemedAppCompatActivity implements Co
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutRepeat(@NonNull KeyboardShortcutsHandler handler, int keyCode, int repeatCount, @NonNull KeyEvent event) {
|
||||
return false;
|
||||
|
|
|
@ -309,6 +309,12 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
|
|||
notifyControlBarOffsetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
if (isFragmentKeyboardShortcutHandled(handler, keyCode, event)) return true;
|
||||
return super.isKeyboardShortcutHandled(handler, keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutRepeat(@NonNull KeyboardShortcutsHandler handler, int keyCode, int repeatCount, @NonNull KeyEvent event) {
|
||||
if (handleFragmentKeyboardShortcutRepeat(handler, keyCode, repeatCount, event)) return true;
|
||||
|
@ -678,6 +684,15 @@ public class HomeActivity extends BaseAppCompatActivity implements OnClickListen
|
|||
return false;
|
||||
}
|
||||
|
||||
private boolean isFragmentKeyboardShortcutHandled(final KeyboardShortcutsHandler handler,
|
||||
final int keyCode, @NonNull final KeyEvent event) {
|
||||
final Fragment fragment = getKeyboardShortcutRecipient();
|
||||
if (fragment instanceof KeyboardShortcutCallback) {
|
||||
return ((KeyboardShortcutCallback) fragment).isKeyboardShortcutHandled(handler, keyCode, event);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private int handleIntent(final Intent intent, final boolean firstCreate) {
|
||||
// use packge's class loader to prevent BadParcelException
|
||||
intent.setExtrasClassLoader(getClassLoader());
|
||||
|
|
|
@ -75,6 +75,7 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
|
|||
private ControlBarShowHideHelper mControlBarShowHideHelper = new ControlBarShowHideHelper(this);
|
||||
private MultiSelectEventHandler mMultiSelectHandler;
|
||||
private TwidereActionModeForChildListener mTwidereActionModeForChildListener;
|
||||
private TintedStatusFrameLayout mMainContent;
|
||||
private final View.OnLayoutChangeListener mLayoutChangeListener = new View.OnLayoutChangeListener() {
|
||||
|
||||
private final Rect tempInsets = new Rect();
|
||||
|
@ -90,8 +91,6 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
|
|||
}
|
||||
}
|
||||
};
|
||||
|
||||
private TintedStatusFrameLayout mMainContent;
|
||||
private View mActionBarWithOverlay;
|
||||
private ActionBarContainer mActionBarContainer;
|
||||
|
||||
|
@ -193,6 +192,21 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
|
|||
return super.handleKeyboardShortcutRepeat(handler, keyCode, repeatCount, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
if (isFragmentKeyboardShortcutHandled(handler, keyCode, event)) return true;
|
||||
return super.isKeyboardShortcutHandled(handler, keyCode, event);
|
||||
}
|
||||
|
||||
private boolean isFragmentKeyboardShortcutHandled(final KeyboardShortcutsHandler handler,
|
||||
final int keyCode, @NonNull final KeyEvent event) {
|
||||
final Fragment fragment = getCurrentVisibleFragment();
|
||||
if (fragment instanceof KeyboardShortcutCallback) {
|
||||
return ((KeyboardShortcutCallback) fragment).isKeyboardShortcutHandled(handler, keyCode, event);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(final Bundle savedInstanceState) {
|
||||
mMultiSelectHandler = new MultiSelectEventHandler(this);
|
||||
|
@ -545,14 +559,14 @@ public class LinkHandlerActivity extends BaseAppCompatActivity implements System
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setControlBarOffset(float offset) {
|
||||
mActionBarContainer.setTranslationY(-Math.round((1 - offset) * getControlBarHeight()));
|
||||
notifyControlBarOffsetChanged();
|
||||
public float getControlBarOffset() {
|
||||
return 1 + mActionBarContainer.getTranslationY() / (float) getControlBarHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getControlBarOffset() {
|
||||
return 1 + mActionBarContainer.getTranslationY() / (float) getControlBarHeight();
|
||||
public void setControlBarOffset(float offset) {
|
||||
mActionBarContainer.setTranslationY(-Math.round((1 - offset) * getControlBarHeight()));
|
||||
notifyControlBarOffsetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -161,17 +161,22 @@ public abstract class ThemedFragmentActivity extends FragmentActivity implements
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyUp(int keyCode, @NonNull KeyEvent event) {
|
||||
if (handleKeyboardShortcutSingle(mKeyboardShortcutsHandler, keyCode, event)) return true;
|
||||
return super.onKeyUp(keyCode, event);
|
||||
handleKeyboardShortcutSingle(mKeyboardShortcutsHandler, keyCode, event);
|
||||
return isKeyboardShortcutHandled(mKeyboardShortcutsHandler, keyCode, event) || super.onKeyUp(keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
if (handleKeyboardShortcutRepeat(mKeyboardShortcutsHandler, keyCode, event.getRepeatCount(), event))
|
||||
return true;
|
||||
return super.onKeyDown(keyCode, event);
|
||||
return isKeyboardShortcutHandled(mKeyboardShortcutsHandler, keyCode, event) || super.onKeyDown(keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -80,6 +80,11 @@ public abstract class AbsActivitiesFragment<Data> extends AbsContentRecyclerView
|
|||
return mNavigationHelper.handleKeyboardShortcutRepeat(handler, keyCode, repeatCount, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, final int keyCode, @NonNull final KeyEvent event) {
|
||||
return mNavigationHelper.isKeyboardShortcutHandled(handler, keyCode, event);
|
||||
}
|
||||
|
||||
public SharedPreferences getSharedPreferences() {
|
||||
if (mPreferences != null) return mPreferences;
|
||||
return mPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
|
||||
|
|
|
@ -42,8 +42,8 @@ import org.mariotaku.twidere.util.message.StatusListChangedEvent;
|
|||
import org.mariotaku.twidere.view.holder.GapViewHolder;
|
||||
import org.mariotaku.twidere.view.holder.StatusViewHolder;
|
||||
|
||||
import edu.tsinghua.spice.Utilies.SpiceProfilingUtil;
|
||||
import edu.tsinghua.spice.Utilies.TypeMappingUtil;
|
||||
import edu.tsinghua.hotmobi.HotMobiLogger;
|
||||
import edu.tsinghua.hotmobi.model.MediaEvent;
|
||||
|
||||
import static org.mariotaku.twidere.util.Utils.setMenuForStatus;
|
||||
|
||||
|
@ -147,6 +147,25 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentRecyclerViewFr
|
|||
return mNavigationHelper.handleKeyboardShortcutSingle(handler, keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
String action = handler.getKeyAction(CONTEXT_TAG_NAVIGATION, keyCode, event);
|
||||
if (ACTION_NAVIGATION_REFRESH.equals(action)) {
|
||||
return true;
|
||||
}
|
||||
if (action == null) {
|
||||
action = handler.getKeyAction(CONTEXT_TAG_STATUS, keyCode, event);
|
||||
}
|
||||
if (action == null) return false;
|
||||
switch (action) {
|
||||
case ACTION_STATUS_REPLY:
|
||||
case ACTION_STATUS_RETWEET:
|
||||
case ACTION_STATUS_FAVORITE:
|
||||
return true;
|
||||
}
|
||||
return mNavigationHelper.isKeyboardShortcutHandled(handler, keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutRepeat(@NonNull KeyboardShortcutsHandler handler, final int keyCode, final int repeatCount,
|
||||
@NonNull final KeyEvent event) {
|
||||
|
@ -239,16 +258,10 @@ public abstract class AbsStatusesFragment<Data> extends AbsContentRecyclerViewFr
|
|||
if (status == null) return;
|
||||
final Bundle options = Utils.createMediaViewerActivityOption(view);
|
||||
Utils.openMedia(getActivity(), status, media, options);
|
||||
//spice
|
||||
SpiceProfilingUtil.log(
|
||||
status.id + ",Clicked," + status.account_id + "," + status.user_id + "," + status.text_plain.length()
|
||||
+ "," + media.media_url + "," + TypeMappingUtil.getMediaType(media.type)
|
||||
+ "," + adapter.isMediaPreviewEnabled() + "," + status.timestamp);
|
||||
SpiceProfilingUtil.profile(getActivity(), status.account_id,
|
||||
status.id + ",Clicked," + status.account_id + "," + status.user_id + "," + status.text_plain.length()
|
||||
+ "," + media.media_url + "," + TypeMappingUtil.getMediaType(media.type)
|
||||
+ "," + adapter.isMediaPreviewEnabled() + "," + status.timestamp);
|
||||
//end
|
||||
// BEGIN HotMobi
|
||||
final MediaEvent event = MediaEvent.create(getActivity(), status, media, 0, adapter.isMediaPreviewEnabled());
|
||||
HotMobiLogger.getInstance(getActivity()).log(event);
|
||||
// END HotMobi
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -62,6 +62,11 @@ abstract class AbsUserListsFragment<Data> extends AbsContentRecyclerViewFragment
|
|||
return mNavigationHelper.handleKeyboardShortcutRepeat(handler, keyCode, repeatCount, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
return mNavigationHelper.isKeyboardShortcutHandled(handler, keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
|
|
@ -61,6 +61,11 @@ abstract class AbsUsersFragment<Data> extends AbsContentRecyclerViewFragment<Abs
|
|||
return mNavigationHelper.handleKeyboardShortcutRepeat(handler, keyCode, repeatCount, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
return mNavigationHelper.isKeyboardShortcutHandled(handler, keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
|
|
|
@ -152,6 +152,12 @@ public class AccountsDashboardFragment extends BaseSupportFragment implements Lo
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
final String action = handler.getKeyAction(CONTEXT_TAG_NAVIGATION, keyCode, event);
|
||||
return ACTION_NAVIGATION_PREVIOUS.equals(action) || ACTION_NAVIGATION_NEXT.equals(action);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutRepeat(@NonNull final KeyboardShortcutsHandler handler,
|
||||
final int keyCode, final int repeatCount,
|
||||
|
|
|
@ -129,7 +129,7 @@ public class DirectMessagesFragment extends AbsContentRecyclerViewFragment<Messa
|
|||
@Override
|
||||
public boolean handleKeyboardShortcutSingle(@NonNull final KeyboardShortcutsHandler handler,
|
||||
final int keyCode, @NonNull final KeyEvent event) {
|
||||
String action = handler.getKeyAction(CONTEXT_TAG_NAVIGATION, keyCode, event);
|
||||
final String action = handler.getKeyAction(CONTEXT_TAG_NAVIGATION, keyCode, event);
|
||||
if (ACTION_NAVIGATION_REFRESH.equals(action)) {
|
||||
triggerRefresh();
|
||||
return true;
|
||||
|
@ -137,6 +137,12 @@ public class DirectMessagesFragment extends AbsContentRecyclerViewFragment<Messa
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
final String action = handler.getKeyAction(CONTEXT_TAG_NAVIGATION, keyCode, event);
|
||||
return ACTION_NAVIGATION_REFRESH.equals(action) || mNavigationHelper.isKeyboardShortcutHandled(handler, keyCode, event);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Loader<Cursor> onCreateLoader(final int id, final Bundle args) {
|
||||
|
|
|
@ -564,6 +564,12 @@ public class MessagesConversationFragment extends BaseSupportFragment implements
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
final String action = handler.getKeyAction(CONTEXT_TAG_NAVIGATION, keyCode, event);
|
||||
return ACTION_NAVIGATION_BACK.equals(action);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutRepeat(@NonNull KeyboardShortcutsHandler handler, int keyCode, int repeatCount, @NonNull KeyEvent event) {
|
||||
return false;
|
||||
|
|
|
@ -130,6 +130,13 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
|
|||
return handler.handleKey(getActivity(), null, keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
if (isFragmentKeyboardShortcutHandled(handler, keyCode, event)) return true;
|
||||
final String action = handler.getKeyAction(CONTEXT_TAG_NAVIGATION, keyCode, event);
|
||||
return ACTION_NAVIGATION_PREVIOUS_TAB.equals(action) || ACTION_NAVIGATION_NEXT_TAB.equals(action);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutRepeat(@NonNull KeyboardShortcutsHandler handler, int keyCode, int repeatCount, @NonNull KeyEvent event) {
|
||||
return handleFragmentKeyboardShortcutRepeat(handler, keyCode, repeatCount, event);
|
||||
|
@ -331,6 +338,14 @@ public class SearchFragment extends BaseSupportFragment implements RefreshScroll
|
|||
return false;
|
||||
}
|
||||
|
||||
private boolean isFragmentKeyboardShortcutHandled(KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
final Fragment fragment = getKeyboardShortcutRecipient();
|
||||
if (fragment instanceof KeyboardShortcutCallback) {
|
||||
return ((KeyboardShortcutCallback) fragment).isKeyboardShortcutHandled(handler, keyCode, event);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void updateTabOffset() {
|
||||
final int controlBarHeight = getControlBarHeight();
|
||||
final int translationY = controlBarHeight - mControlBarOffsetPixels;
|
||||
|
|
|
@ -152,7 +152,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
private LinearLayoutManager mLayoutManager;
|
||||
|
||||
private LoadConversationTask mLoadConversationTask;
|
||||
private RecyclerViewNavigationHelper mRecyclerViewNavigationHelper;
|
||||
private RecyclerViewNavigationHelper mNavigationHelper;
|
||||
|
||||
// Data fields
|
||||
private boolean mRepliesLoaderInitialized;
|
||||
|
@ -265,7 +265,7 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
mStatusAdapter.setEventListener(this);
|
||||
mRecyclerView.setAdapter(mStatusAdapter);
|
||||
|
||||
mRecyclerViewNavigationHelper = new RecyclerViewNavigationHelper(mRecyclerView, mLayoutManager,
|
||||
mNavigationHelper = new RecyclerViewNavigationHelper(mRecyclerView, mLayoutManager,
|
||||
mStatusAdapter, null);
|
||||
|
||||
setState(STATE_LOADING);
|
||||
|
@ -419,11 +419,24 @@ public class StatusFragment extends BaseSupportFragment implements LoaderCallbac
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
final String action = handler.getKeyAction(CONTEXT_TAG_STATUS, keyCode, event);
|
||||
if (action == null) return false;
|
||||
switch (action) {
|
||||
case ACTION_STATUS_REPLY:
|
||||
case ACTION_STATUS_RETWEET:
|
||||
case ACTION_STATUS_FAVORITE:
|
||||
return true;
|
||||
}
|
||||
return mNavigationHelper.isKeyboardShortcutHandled(handler, keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutRepeat(@NonNull final KeyboardShortcutsHandler handler,
|
||||
final int keyCode, final int repeatCount,
|
||||
@NonNull final KeyEvent event) {
|
||||
return mRecyclerViewNavigationHelper.handleKeyboardShortcutRepeat(handler, keyCode,
|
||||
return mNavigationHelper.handleKeyboardShortcutRepeat(handler, keyCode,
|
||||
repeatCount, event);
|
||||
}
|
||||
|
||||
|
|
|
@ -1148,6 +1148,20 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
return handler.handleKey(getActivity(), null, keyCode, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
if (isFragmentKeyboardShortcutHandled(handler, keyCode, event)) return true;
|
||||
final String action = handler.getKeyAction(CONTEXT_TAG_NAVIGATION, keyCode, event);
|
||||
if (action != null) {
|
||||
switch (action) {
|
||||
case ACTION_NAVIGATION_PREVIOUS_TAB:
|
||||
case ACTION_NAVIGATION_NEXT_TAB:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyboardShortcutRepeat(@NonNull final KeyboardShortcutsHandler handler,
|
||||
final int keyCode, final int repeatCount,
|
||||
|
@ -1171,6 +1185,14 @@ public class UserFragment extends BaseSupportFragment implements OnClickListener
|
|||
return false;
|
||||
}
|
||||
|
||||
private boolean isFragmentKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
final Fragment fragment = getKeyboardShortcutRecipient();
|
||||
if (fragment instanceof KeyboardShortcutCallback) {
|
||||
return ((KeyboardShortcutCallback) fragment).isKeyboardShortcutHandled(handler, keyCode, event);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private Fragment getKeyboardShortcutRecipient() {
|
||||
return getCurrentVisibleFragment();
|
||||
}
|
||||
|
|
|
@ -253,6 +253,8 @@ public class KeyboardShortcutsHandler implements Constants, KeyboardShortcutCons
|
|||
boolean handleKeyboardShortcutRepeat(@NonNull KeyboardShortcutsHandler handler, int keyCode, int repeatCount, @NonNull KeyEvent event);
|
||||
|
||||
boolean handleKeyboardShortcutSingle(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event);
|
||||
|
||||
boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event);
|
||||
}
|
||||
|
||||
public interface TakeAllKeyboardShortcut {
|
||||
|
|
|
@ -115,4 +115,17 @@ public class RecyclerViewNavigationHelper implements KeyboardShortcutCallback {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isKeyboardShortcutHandled(@NonNull KeyboardShortcutsHandler handler, int keyCode, @NonNull KeyEvent event) {
|
||||
final String action = handler.getKeyAction(CONTEXT_TAG_NAVIGATION, keyCode, event);
|
||||
if (action == null) return false;
|
||||
switch (action) {
|
||||
case ACTION_NAVIGATION_PREVIOUS:
|
||||
case ACTION_NAVIGATION_NEXT:
|
||||
case ACTION_NAVIGATION_TOP:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package org.mariotaku.twidere.util;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.View;
|
||||
|
@ -67,15 +68,22 @@ public class RecyclerViewUtils {
|
|||
focusFallback(layoutManager);
|
||||
return;
|
||||
}
|
||||
viewToFocus.requestFocus();
|
||||
focus(viewToFocus);
|
||||
}
|
||||
}
|
||||
|
||||
private static void focus(@NonNull View view) {
|
||||
if (view.isInTouchMode()) {
|
||||
view.requestFocusFromTouch();
|
||||
} else {
|
||||
view.requestFocus();
|
||||
}
|
||||
}
|
||||
|
||||
private static void focusFallback(LinearLayoutManager layoutManager) {
|
||||
final int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition();
|
||||
final View firstVisibleView = layoutManager.findViewByPosition(firstVisibleItemPosition);
|
||||
if (firstVisibleView != null) {
|
||||
firstVisibleView.requestFocus();
|
||||
}
|
||||
if (firstVisibleView == null) return;
|
||||
focus(firstVisibleView);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,9 +18,9 @@
|
|||
-->
|
||||
|
||||
<org.mariotaku.twidere.view.MainFrameLayout
|
||||
android:id="@+id/home_content"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/home_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
@ -28,10 +28,9 @@
|
|||
android:id="@+id/main_pager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="false"/>
|
||||
android:focusable="true" />
|
||||
|
||||
<include layout="@layout/layout_empty_tab_hint"/>
|
||||
<include layout="@layout/layout_empty_tab_hint" />
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/twidere_action_bar_with_overlay"
|
||||
|
@ -47,15 +46,15 @@
|
|||
android:layout_alignParentTop="true"
|
||||
android:layout="@layout/layout_actionbar_home"
|
||||
android:touchscreenBlocksFocus="true"
|
||||
tools:ignore="UnusedAttribute"/>
|
||||
tools:ignore="UnusedAttribute" />
|
||||
|
||||
<View
|
||||
android:id="@+id/window_overlay"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@+id/twidere_action_bar_container"
|
||||
android:background="?android:windowContentOverlay"/>
|
||||
android:background="?android:windowContentOverlay" />
|
||||
</RelativeLayout>
|
||||
|
||||
<include layout="@layout/layout_home_actions_button"/>
|
||||
<include layout="@layout/layout_home_actions_button" />
|
||||
</org.mariotaku.twidere.view.MainFrameLayout>
|
|
@ -27,7 +27,6 @@
|
|||
android:gravity="center"
|
||||
android:text="@string/load_more"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="false"
|
||||
android:textAppearance="?android:textAppearanceMedium"
|
||||
android:textColor="?android:textColorPrimary"
|
||||
android:textStyle="bold"/>
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:clickable="false"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="false"
|
||||
android:padding="@dimen/element_spacing_normal">
|
||||
|
||||
<include layout="@layout/layout_progress_wheel_medium" />
|
||||
|
|
|
@ -29,7 +29,6 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:background="?selectableItemBackground"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="false"
|
||||
android:paddingTop="@dimen/element_spacing_small"
|
||||
app:ignorePadding="true">
|
||||
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:background="?selectableItemBackground"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="false"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
android:paddingRight="@dimen/element_spacing_normal">
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:background="?selectableItemBackground"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="false"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:background="?selectableItemBackground"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="false"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="@dimen/element_spacing_small"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="false"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<fragment
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
android:layout_height="match_parent"
|
||||
android:clipToPadding="false"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="false"
|
||||
android:listSelector="?selectableItemBackground" />
|
||||
|
||||
</org.mariotaku.twidere.view.themed.AccentSwipeRefreshLayout>
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
android:layout_height="match_parent"
|
||||
android:clipToPadding="false"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="false"
|
||||
android:scrollbars="vertical" />
|
||||
|
||||
</org.mariotaku.twidere.view.themed.AccentSwipeRefreshLayout>
|
||||
|
|
|
@ -129,8 +129,7 @@
|
|||
android:id="@+id/account_dashboard_menu"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="false" />
|
||||
android:focusable="true" />
|
||||
</FrameLayout>
|
||||
|
||||
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:background="?selectableItemBackground"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="false"
|
||||
android:orientation="vertical"
|
||||
android:splitMotionEvents="false">
|
||||
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:background="?selectableItemBackground"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="false"
|
||||
android:minHeight="?android:listPreferredItemHeight"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="@dimen/element_spacing_normal"
|
||||
|
|
Loading…
Reference in New Issue