Add an option to make the volume keys scroll the content

multisite
Floens 10 years ago
parent 5731a3ad8f
commit 769f926f16
  1. 5
      Clover/app/src/main/java/org/floens/chan/controller/Controller.java
  2. 7
      Clover/app/src/main/java/org/floens/chan/controller/NavigationController.java
  3. 2
      Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java
  4. 7
      Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java
  5. 1
      Clover/app/src/main/java/org/floens/chan/ui/controller/AdvancedSettingsController.java
  6. 6
      Clover/app/src/main/java/org/floens/chan/ui/controller/DrawerController.java
  7. 8
      Clover/app/src/main/java/org/floens/chan/ui/controller/SplitNavigationController.java
  8. 6
      Clover/app/src/main/java/org/floens/chan/ui/controller/ThreadController.java
  9. 5
      Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java
  10. 20
      Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadListLayout.java
  11. 1
      Clover/app/src/main/res/values/strings.xml

@ -19,6 +19,7 @@ package org.floens.chan.controller;
import android.content.Context;
import android.content.res.Configuration;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.ViewGroup;
@ -85,6 +86,10 @@ public abstract class Controller {
public void onConfigurationChanged(Configuration newConfig) {
}
public boolean dispatchKeyEvent(KeyEvent event) {
return false;
}
public boolean onBack() {
return false;
}

@ -19,6 +19,7 @@ package org.floens.chan.controller;
import android.content.Context;
import android.content.res.Configuration;
import android.view.KeyEvent;
import android.view.ViewGroup;
import java.util.ArrayList;
@ -173,6 +174,12 @@ public abstract class NavigationController extends Controller implements Control
}
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
Controller top = getTop();
return (top != null && top.dispatchKeyEvent(event)) || super.dispatchKeyEvent(event);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
for (Controller controller : controllerList) {

@ -86,6 +86,7 @@ public class ChanSettings {
public static final BooleanSetting repliesButtonsBottom;
public static final BooleanSetting confirmExit;
public static final BooleanSetting tapNoReply;
public static final BooleanSetting volumeKeysScrolling;
public static final BooleanSetting watchEnabled;
public static final BooleanSetting watchCountdown;
@ -146,6 +147,7 @@ public class ChanSettings {
repliesButtonsBottom = new BooleanSetting(p, "preference_buttons_bottom", false);
confirmExit = new BooleanSetting(p, "preference_confirm_exit", false);
tapNoReply = new BooleanSetting(p, "preference_tap_no_reply", false);
volumeKeysScrolling = new BooleanSetting(p, "preference_volume_key_scrolling", false);
watchEnabled = new BooleanSetting(p, "preference_watch_enabled", false, new Setting.SettingCallback<Boolean>() {
@Override

@ -26,7 +26,9 @@ import android.nfc.NdefMessage;
import android.nfc.NfcAdapter;
import android.nfc.NfcEvent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.ViewGroup;
@ -194,6 +196,11 @@ public class StartActivity extends AppCompatActivity implements NfcAdapter.Creat
}
}
@Override
public boolean dispatchKeyEvent(@NonNull KeyEvent event) {
return stackTop().dispatchKeyEvent(event) || super.dispatchKeyEvent(event);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);

@ -114,6 +114,7 @@ public class AdvancedSettingsController extends SettingsController {
settings.add(new BooleanSettingView(this, ChanSettings.repliesButtonsBottom, string(R.string.setting_buttons_bottom), null));
settings.add(new BooleanSettingView(this, ChanSettings.confirmExit, string(R.string.setting_confirm_exit), null));
settings.add(new BooleanSettingView(this, ChanSettings.tapNoReply, string(R.string.setting_tap_no_rely), null));
settings.add(new BooleanSettingView(this, ChanSettings.volumeKeysScrolling, string(R.string.setting_volume_key_scrolling), null));
groups.add(settings);

@ -26,6 +26,7 @@ import android.support.v4.widget.DrawerLayout;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.FrameLayout;
@ -158,6 +159,11 @@ public class DrawerController extends Controller implements PinAdapter.Callback,
}
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
return (childController != null && childController.dispatchKeyEvent(event)) || super.dispatchKeyEvent(event);
}
@Override
public void onPinClicked(Pin pin) {
drawerLayout.closeDrawer(Gravity.LEFT);

@ -19,6 +19,7 @@ package org.floens.chan.ui.controller;
import android.content.Context;
import android.content.res.Configuration;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
@ -158,6 +159,13 @@ public class SplitNavigationController extends NavigationController implements A
return super.onBack();
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
return (rightController != null && rightController.dispatchKeyEvent(event)) ||
(leftController != null && leftController.dispatchKeyEvent(event)) ||
super.dispatchKeyEvent(event);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);

@ -23,6 +23,7 @@ import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.NfcEvent;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import org.floens.chan.Chan;
@ -108,6 +109,11 @@ public abstract class ThreadController extends Controller implements ThreadLayou
return threadLayout.onBack();
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
return threadLayout.sendKeyEvent(event) || super.dispatchKeyEvent(event);
}
public void onEvent(Chan.ForegroundChangedMessage message) {
threadLayout.getPresenter().onForegroundChanged(message.inForeground);
}

@ -29,6 +29,7 @@ import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.DecelerateInterpolator;
@ -161,6 +162,10 @@ public class ThreadLayout extends CoordinatorLayout implements ThreadPresenter.T
return threadListLayout.onBack();
}
public boolean sendKeyEvent(KeyEvent event) {
return threadListLayout.sendKeyEvent(event);
}
public ThreadPresenter getPresenter() {
return presenter;
}

@ -18,10 +18,12 @@
package org.floens.chan.ui.layout;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
@ -32,6 +34,7 @@ import org.floens.chan.core.model.Loadable;
import org.floens.chan.core.model.Post;
import org.floens.chan.core.model.PostImage;
import org.floens.chan.core.presenter.ReplyPresenter;
import org.floens.chan.core.settings.ChanSettings;
import org.floens.chan.ui.adapter.PostAdapter;
import org.floens.chan.ui.adapter.PostsFilter;
import org.floens.chan.ui.cell.PostCell;
@ -41,6 +44,7 @@ import org.floens.chan.ui.toolbar.Toolbar;
import org.floens.chan.ui.view.ThumbnailView;
import org.floens.chan.utils.AndroidUtils;
import org.floens.chan.utils.AnimationUtils;
import org.floens.chan.utils.Logger;
import java.util.List;
@ -224,6 +228,22 @@ public class ThreadListLayout extends LinearLayout implements ReplyLayout.ReplyL
}
}
public boolean sendKeyEvent(KeyEvent event) {
if (ChanSettings.volumeKeysScrolling.get()) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_DOWN:
if (event.getAction() == KeyEvent.ACTION_DOWN) {
boolean down = event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN;
int scroll = (int) (getHeight() * 0.75);
recyclerView.smoothScrollBy(0, down ? scroll : -scroll);
}
return true;
}
}
return false;
}
public void openReply(boolean open) {
if (showingThread != null && replyOpen != open) {
this.replyOpen = open;

@ -328,6 +328,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
<string name="setting_confirm_exit">Confirm before exit</string>
<string name="setting_confirm_exit_title">Confirm exit</string>
<string name="setting_tap_no_rely">Tap the post number to reply</string>
<string name="setting_volume_key_scrolling">Volume keys scroll content</string>
<string name="settings_group_proxy">HTTP Proxy</string>
<string name="setting_proxy_enabled">Enable proxy</string>

Loading…
Cancel
Save