fongmi
FongMi 2 weeks ago
parent 9086fe4fd6
commit b55ce2734b
  1. 37
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SearchActivity.java
  2. 4
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomEditText.java
  3. 11
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomVerticalGridView.java
  4. 4
      app/src/main/java/com/fongmi/android/tv/ui/custom/CustomMovement.java
  5. 12
      app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java
  6. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ControlDialog.java
  7. 3
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/TimerDialog.java

@ -192,15 +192,14 @@ public class SearchActivity extends BaseActivity implements WordAdapter.OnClickL
}
private boolean findFocus(KeyEvent event) {
int keyCode = event.getKeyCode();
View current = getCurrentFocus();
if (current == mBinding.keyword) return handleKeywordKey(keyCode);
if (current == mBinding.keyword) return handleKeywordKey(event);
View inKeyboard = mBinding.keyboard.findContainingItemView(current);
View inWord = mBinding.wordRecycler.findContainingItemView(current);
View inRecord = mBinding.recordRecycler.findContainingItemView(current);
if (inKeyboard != null) return handleKeyboardKey(keyCode, inKeyboard);
if (inWord != null) return handleWordKey(keyCode, inWord);
if (inRecord != null) return handleRecordKey(keyCode, inRecord);
if (inKeyboard != null) return handleKeyboardKey(event, inKeyboard);
if (inRecord != null) return handleRecordKey(event, inRecord);
if (inWord != null) return handleWordKey(event, inWord);
return false;
}
@ -252,26 +251,26 @@ public class SearchActivity extends BaseActivity implements WordAdapter.OnClickL
return true;
}
private boolean handleKeywordKey(int keyCode) {
if (keyCode != KeyEvent.KEYCODE_DPAD_RIGHT) return false;
private boolean handleKeywordKey(KeyEvent event) {
if (!KeyUtil.isRightKey(event)) return false;
if (mBinding.keyword.getSelectionEnd() < mBinding.keyword.getText().length()) return false;
boolean hasRecord = mBinding.recordLayout.getVisibility() == View.VISIBLE;
return focusFirst(hasRecord ? mBinding.recordRecycler : mBinding.wordRecycler);
}
private boolean handleKeyboardKey(int keyCode, View item) {
if (keyCode == KeyEvent.KEYCODE_DPAD_UP && isFirstRow(mBinding.keyboard, item)) {
private boolean handleKeyboardKey(KeyEvent event, View item) {
if (KeyUtil.isUpKey(event) && isFirstRow(mBinding.keyboard, item)) {
mBinding.keyword.requestFocus();
return true;
}
if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT && isFirstInRow(mBinding.keyboard, item)) return true;
return keyCode == KeyEvent.KEYCODE_DPAD_DOWN && isLastRow(mBinding.keyboard, item);
if (KeyUtil.isLeftKey(event) && isFirstInRow(mBinding.keyboard, item)) return true;
return KeyUtil.isDownKey(event) && isLastRow(mBinding.keyboard, item);
}
private boolean handleWordKey(int keyCode, View item) {
if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) return isLastInRow(mBinding.wordRecycler, item);
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) return isLastRow(mBinding.wordRecycler, item);
if (keyCode == KeyEvent.KEYCODE_DPAD_UP && isFirstRow(mBinding.wordRecycler, item)) {
private boolean handleWordKey(KeyEvent event, View item) {
if (KeyUtil.isRightKey(event)) return isLastInRow(mBinding.wordRecycler, item);
if (KeyUtil.isDownKey(event)) return isLastRow(mBinding.wordRecycler, item);
if (KeyUtil.isUpKey(event) && isFirstRow(mBinding.wordRecycler, item)) {
if (mBinding.recordLayout.getVisibility() == View.VISIBLE) {
View child = findNearestInLastRow(mBinding.recordRecycler, item.getLeft());
if (child != null) {
@ -285,10 +284,10 @@ public class SearchActivity extends BaseActivity implements WordAdapter.OnClickL
return false;
}
private boolean handleRecordKey(int keyCode, View item) {
if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) return isLastInRow(mBinding.recordRecycler, item);
if (keyCode == KeyEvent.KEYCODE_DPAD_UP) return isFirstRow(mBinding.recordRecycler, item);
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN && isLastRow(mBinding.recordRecycler, item)) return focusFirst(mBinding.wordRecycler);
private boolean handleRecordKey(KeyEvent event, View item) {
if (KeyUtil.isRightKey(event)) return isLastInRow(mBinding.recordRecycler, item);
if (KeyUtil.isUpKey(event)) return isFirstRow(mBinding.recordRecycler, item);
if (KeyUtil.isDownKey(event) && isLastRow(mBinding.recordRecycler, item)) return focusFirst(mBinding.wordRecycler);
return false;
}

@ -7,11 +7,11 @@ import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatEditText;
import com.fongmi.android.tv.utils.KeyUtil;
import com.google.android.material.textfield.TextInputEditText;
public class CustomEditText extends AppCompatEditText {
public class CustomEditText extends TextInputEditText {
public CustomEditText(@NonNull Context context) {
super(context);

@ -13,6 +13,7 @@ import androidx.leanback.widget.VerticalGridView;
import androidx.recyclerview.widget.RecyclerView;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.utils.KeyUtil;
import java.util.Arrays;
import java.util.List;
@ -72,11 +73,11 @@ public class CustomVerticalGridView extends VerticalGridView {
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() != KeyEvent.ACTION_DOWN) return super.dispatchKeyEvent(event);
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) return moveTop && moveToTop();
pressUp = event.getKeyCode() == KeyEvent.KEYCODE_DPAD_UP;
pressDown = event.getKeyCode() == KeyEvent.KEYCODE_DPAD_DOWN;
public boolean dispatchKeyEvent(@NonNull KeyEvent event) {
if (!KeyUtil.isActionDown(event)) return super.dispatchKeyEvent(event);
if (KeyUtil.isBackKey(event)) return moveTop && moveToTop();
pressUp = KeyUtil.isUpKey(event);
pressDown = KeyUtil.isDownKey(event);
return super.dispatchKeyEvent(event);
}

@ -12,6 +12,8 @@ import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import com.fongmi.android.tv.utils.KeyUtil;
public class CustomMovement extends ScrollingMovementMethod {
private static final int CLICK = 1;
@ -42,7 +44,7 @@ public class CustomMovement extends ScrollingMovementMethod {
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
if (KeyEvent.metaStateHasNoModifiers(movementMetaState)) {
if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0 && action(CLICK, widget, buffer)) {
if (KeyUtil.isActionDown(event) && event.getRepeatCount() == 0 && action(CLICK, widget, buffer)) {
return true;
}
}

@ -91,20 +91,20 @@ public final class TrackDialog extends BaseDialog implements TrackAdapter.OnClic
@Override
protected void initEvent() {
binding.choose.setOnClickListener(this::showChooser);
binding.choose.setOnClickListener(this::onChoose);
binding.subtitle.setOnClickListener(this::onSubtitle);
}
private void onChoose(View view) {
FileChooser.from(launcher).show(new String[]{MimeTypes.APPLICATION_SUBRIP, MimeTypes.TEXT_SSA, MimeTypes.TEXT_VTT, MimeTypes.APPLICATION_TTML, "audio/*", "text/*", "application/octet-stream"});
player.pause();
}
private void onSubtitle(View view) {
App.post(() -> listener.onSubtitleClick(), 100);
dismiss();
}
private void showChooser(View view) {
FileChooser.from(launcher).show(new String[]{MimeTypes.APPLICATION_SUBRIP, MimeTypes.TEXT_SSA, MimeTypes.TEXT_VTT, MimeTypes.APPLICATION_TTML, "audio/*", "text/*", "application/octet-stream"});
player.pause();
}
private List<Track> getTrack() {
List<Track> items = new ArrayList<>();
addTrack(items);

@ -33,7 +33,6 @@ public class ControlDialog extends BaseDialog implements ParseAdapter.OnClickLis
private DialogControlBinding binding;
private ActivityVideoBinding parent;
private FragmentActivity activity;
private List<TextView> scales;
private PlayerManager player;
private final String[] scale;
@ -73,7 +72,6 @@ public class ControlDialog extends BaseDialog implements ParseAdapter.OnClickLis
for (Fragment f : activity.getSupportFragmentManager().getFragments()) if (f instanceof BottomSheetDialogFragment) return this;
show(activity.getSupportFragmentManager(), null);
this.listener = (Listener) activity;
this.activity = activity;
return this;
}
@ -119,7 +117,7 @@ public class ControlDialog extends BaseDialog implements ParseAdapter.OnClickLis
}
private void onTimer(View view) {
App.post(() -> TimerDialog.create().show(activity), 200);
TimerDialog.create().show(getActivity());
dismiss();
}

@ -13,7 +13,6 @@ import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.databinding.DialogTimerBinding;
import com.fongmi.android.tv.utils.Timer;
import com.fongmi.android.tv.utils.Util;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import java.util.Formatter;
import java.util.Locale;
@ -35,7 +34,7 @@ public class TimerDialog extends BaseDialog implements Timer.Callback {
}
public void show(FragmentActivity activity) {
for (Fragment f : activity.getSupportFragmentManager().getFragments()) if (f instanceof BottomSheetDialogFragment) return;
for (Fragment f : activity.getSupportFragmentManager().getFragments()) if (f instanceof TimerDialog) return;
show(activity.getSupportFragmentManager(), null);
}

Loading…
Cancel
Save