diff --git a/app/src/main/java/com/fongmi/bear/impl/KeyDownImpl.java b/app/src/main/java/com/fongmi/bear/impl/KeyDownImpl.java
new file mode 100644
index 000000000..7d4b2946f
--- /dev/null
+++ b/app/src/main/java/com/fongmi/bear/impl/KeyDownImpl.java
@@ -0,0 +1,20 @@
+package com.fongmi.bear.impl;
+
+public interface KeyDownImpl {
+
+ void onSeek(boolean forward);
+
+ void onKeyVertical(boolean up);
+
+ void onKeyLeft();
+
+ void onKeyRight();
+
+ void onKeyCenter();
+
+ void onKeyMenu();
+
+ void onKeyBack();
+
+ void onLongPress();
+}
diff --git a/app/src/main/java/com/fongmi/bear/player/Player.java b/app/src/main/java/com/fongmi/bear/player/Player.java
index ec24b5e9a..ba0a2177e 100644
--- a/app/src/main/java/com/fongmi/bear/player/Player.java
+++ b/app/src/main/java/com/fongmi/bear/player/Player.java
@@ -98,11 +98,24 @@ public class Player implements com.google.android.exoplayer2.Player.Listener {
@Override
public void onPlaybackStateChanged(int state) {
- if (state != com.google.android.exoplayer2.Player.STATE_READY) return;
- callback.onPrepared();
+ switch (state) {
+ case com.google.android.exoplayer2.Player.STATE_BUFFERING:
+ callback.onBuffering();
+ break;
+ case com.google.android.exoplayer2.Player.STATE_READY:
+ callback.onReady();
+ break;
+ case com.google.android.exoplayer2.Player.STATE_ENDED:
+ break;
+ case com.google.android.exoplayer2.Player.STATE_IDLE:
+ break;
+ }
}
public interface Callback {
- void onPrepared();
+
+ void onBuffering();
+
+ void onReady();
}
}
diff --git a/app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java b/app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java
index 6719cefb6..192d8371e 100644
--- a/app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java
+++ b/app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java
@@ -168,7 +168,12 @@ public class DetailActivity extends BaseActivity implements Player.Callback {
}
@Override
- public void onPrepared() {
+ public void onBuffering() {
+ mBinding.progress.getRoot().setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void onReady() {
mBinding.progress.getRoot().setVisibility(View.GONE);
}
diff --git a/app/src/main/java/com/fongmi/bear/ui/activity/PlayActivity.java b/app/src/main/java/com/fongmi/bear/ui/activity/PlayActivity.java
index fb7ed3112..9ea5e4ec5 100644
--- a/app/src/main/java/com/fongmi/bear/ui/activity/PlayActivity.java
+++ b/app/src/main/java/com/fongmi/bear/ui/activity/PlayActivity.java
@@ -2,15 +2,21 @@ package com.fongmi.bear.ui.activity;
import android.app.Activity;
import android.content.Intent;
+import android.view.KeyEvent;
+import android.view.View;
import androidx.viewbinding.ViewBinding;
import com.fongmi.bear.databinding.ActivityPlayBinding;
+import com.fongmi.bear.impl.KeyDownImpl;
import com.fongmi.bear.player.Player;
+import com.fongmi.bear.utils.KeyDown;
+import com.fongmi.bear.utils.Utils;
-public class PlayActivity extends BaseActivity {
+public class PlayActivity extends BaseActivity implements Player.Callback, KeyDownImpl {
private ActivityPlayBinding mBinding;
+ private KeyDown mKeyDown;
public static void newInstance(Activity activity) {
activity.startActivityForResult(new Intent(activity, PlayActivity.class), 1000);
@@ -23,10 +29,77 @@ public class PlayActivity extends BaseActivity {
@Override
protected void initView() {
- mBinding.video.setPlayer(Player.get().exo());
+ mKeyDown = KeyDown.create(this);
+ mBinding.video.setPlayer(Player.get().callback(this).exo());
}
@Override
protected void initEvent() {
+
+ }
+
+ @Override
+ public void onBuffering() {
+ mBinding.progress.getRoot().setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void onReady() {
+ mBinding.progress.getRoot().setVisibility(View.GONE);
+ }
+
+ @Override
+ public boolean dispatchKeyEvent(KeyEvent event) {
+ if (!mBinding.video.isControllerVisible() && Utils.hasEvent(event)) return mKeyDown.onKeyDown(event);
+ else return super.dispatchKeyEvent(event);
+ }
+
+ @Override
+ public void onSeek(boolean forward) {
+
+ }
+
+ @Override
+ public void onKeyVertical(boolean up) {
+
+ }
+
+ @Override
+ public void onKeyLeft() {
+
+ }
+
+ @Override
+ public void onKeyRight() {
+
+ }
+
+ @Override
+ public void onKeyCenter() {
+ mBinding.video.showController();
+ }
+
+ @Override
+ public void onKeyMenu() {
+
+ }
+
+ @Override
+ public void onKeyBack() {
+ onBackPressed();
+ }
+
+ @Override
+ public void onLongPress() {
+
+ }
+
+ @Override
+ public void onBackPressed() {
+ if (mBinding.video.isControllerVisible()) {
+ mBinding.video.hideController();
+ } else {
+ super.onBackPressed();
+ }
}
}
diff --git a/app/src/main/java/com/fongmi/bear/utils/KeyDown.java b/app/src/main/java/com/fongmi/bear/utils/KeyDown.java
new file mode 100644
index 000000000..a8be317e3
--- /dev/null
+++ b/app/src/main/java/com/fongmi/bear/utils/KeyDown.java
@@ -0,0 +1,52 @@
+package com.fongmi.bear.utils;
+
+import android.view.KeyEvent;
+
+import com.fongmi.bear.impl.KeyDownImpl;
+
+public class KeyDown {
+
+ private final KeyDownImpl mKeyDown;
+ private boolean mPress;
+
+ public static KeyDown create(KeyDownImpl keyDown) {
+ return new KeyDown(keyDown);
+ }
+
+ private KeyDown(KeyDownImpl keyDown) {
+ this.mKeyDown = keyDown;
+ }
+
+ public boolean onKeyDown(KeyEvent event) {
+ if (event.getAction() == KeyEvent.ACTION_DOWN && Utils.isUpKey(event)) {
+ mKeyDown.onKeyVertical(true);
+ } else if (event.getAction() == KeyEvent.ACTION_DOWN && Utils.isDownKey(event)) {
+ mKeyDown.onKeyVertical(false);
+ } else if (event.getAction() == KeyEvent.ACTION_DOWN && Utils.isLeftKey(event)) {
+ mKeyDown.onSeek(false);
+ } else if (event.getAction() == KeyEvent.ACTION_DOWN && Utils.isRightKey(event)) {
+ mKeyDown.onSeek(true);
+ } else if (event.getAction() == KeyEvent.ACTION_UP && Utils.isLeftKey(event)) {
+ mKeyDown.onKeyLeft();
+ } else if (event.getAction() == KeyEvent.ACTION_UP && Utils.isRightKey(event)) {
+ mKeyDown.onKeyRight();
+ } else if (event.getAction() == KeyEvent.ACTION_UP && Utils.isBackKey(event)) {
+ mKeyDown.onKeyBack();
+ } else if (event.getAction() == KeyEvent.ACTION_UP && Utils.isMenuKey(event)) {
+ mKeyDown.onKeyMenu();
+ } else if (Utils.isEnterKey(event)) {
+ checkPress(event);
+ }
+ return true;
+ }
+
+ private void checkPress(KeyEvent event) {
+ if (event.isLongPress()) {
+ mPress = true;
+ mKeyDown.onLongPress();
+ } else if (event.getAction() == KeyEvent.ACTION_UP) {
+ if (mPress) mPress = false;
+ else mKeyDown.onKeyCenter();
+ }
+ }
+}
diff --git a/app/src/main/res/drawable/selector_site.xml b/app/src/main/res/drawable/selector_site.xml
deleted file mode 100644
index 5e208f9fc..000000000
--- a/app/src/main/res/drawable/selector_site.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_text.xml b/app/src/main/res/drawable/selector_text.xml
new file mode 100644
index 000000000..c6934619f
--- /dev/null
+++ b/app/src/main/res/drawable/selector_text.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_controller.xml b/app/src/main/res/drawable/shape_controller.xml
new file mode 100644
index 000000000..bec4cc94b
--- /dev/null
+++ b/app/src/main/res/drawable/shape_controller.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_site_activated.xml b/app/src/main/res/drawable/shape_text_activated.xml
similarity index 100%
rename from app/src/main/res/drawable/shape_site_activated.xml
rename to app/src/main/res/drawable/shape_text_activated.xml
diff --git a/app/src/main/res/drawable/shape_site_focused.xml b/app/src/main/res/drawable/shape_text_focused.xml
similarity index 100%
rename from app/src/main/res/drawable/shape_site_focused.xml
rename to app/src/main/res/drawable/shape_text_focused.xml
diff --git a/app/src/main/res/drawable/shape_site_normal.xml b/app/src/main/res/drawable/shape_text_normal.xml
similarity index 100%
rename from app/src/main/res/drawable/shape_site_normal.xml
rename to app/src/main/res/drawable/shape_text_normal.xml
diff --git a/app/src/main/res/layout/activity_play.xml b/app/src/main/res/layout/activity_play.xml
index 98eaa71e0..2620e36d7 100644
--- a/app/src/main/res/layout/activity_play.xml
+++ b/app/src/main/res/layout/activity_play.xml
@@ -10,7 +10,12 @@
android:id="@+id/video"
android:layout_width="match_parent"
android:layout_height="match_parent"
- app:resize_mode="fill"
- app:use_controller="false" />
+ app:controller_layout_id="@layout/view_controller"
+ app:resize_mode="fill" />
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/adapter_site.xml b/app/src/main/res/layout/adapter_site.xml
index 818a51a44..66fa920a7 100644
--- a/app/src/main/res/layout/adapter_site.xml
+++ b/app/src/main/res/layout/adapter_site.xml
@@ -4,7 +4,7 @@
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@drawable/selector_site"
+ android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
diff --git a/app/src/main/res/layout/view_controller.xml b/app/src/main/res/layout/view_controller.xml
new file mode 100644
index 000000000..09f2dce8f
--- /dev/null
+++ b/app/src/main/res/layout/view_controller.xml
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index ff19659ff..7474ccd1a 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -7,6 +7,8 @@
#FFFFFF
#2196F3
+ #E0E0E0
+ #9E9E9E
#616161
#212121
#66BB6A
@@ -19,5 +21,14 @@
#99000000
#B3000000
#CC000000
+ #1AFFFFFF
+ #33FFFFFF
+ #4DFFFFFF
+ #66FFFFFF
+ #80FFFFFF
+ #99FFFFFF
+ #B3FFFFFF
+ #CCFFFFFF
+ #E6FFFFFF
\ No newline at end of file