Add op and ed ui - part 1

pull/21/head
FongMi 4 years ago
parent 6ab2fe499b
commit f65e2f9cf3
  1. 87
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 2
      app/src/leanback/res/drawable/shape_controller.xml
  3. 78
      app/src/leanback/res/layout/view_controller_bottom.xml
  4. 18
      app/src/main/java/com/fongmi/android/tv/bean/History.java
  5. 2
      app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java
  6. 4
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  7. 8
      app/src/main/java/com/fongmi/android/tv/utils/Prefers.java
  8. 9
      app/src/main/res/values-zh-rCN/strings.xml
  9. 9
      app/src/main/res/values-zh-rTW/strings.xml
  10. 9
      app/src/main/res/values/strings.xml

@ -61,6 +61,7 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener {
private boolean mFullscreen;
private KeyDown mKeyDown;
private Handler mHandler;
private History mHistory;
private int mCurrent;
private String getKey() {
@ -127,7 +128,11 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener {
mControl.next.setOnClickListener(view -> onNext());
mControl.prev.setOnClickListener(view -> onPrev());
mControl.scale.setOnClickListener(view -> onScale());
mControl.reset.setOnClickListener(view -> getPlayer(true));
mControl.reset.setOnClickListener(view -> onReset());
mControl.ending.setOnClickListener(view -> onEnding());
mControl.opening.setOnClickListener(view -> onOpening());
mControl.interval.setOnClickListener(view -> onInterval());
mControl.replay.setOnClickListener(view -> getPlayer(true));
mControl.speed.setOnClickListener(view -> mControl.speed.setText(Players.get().addSpeed()));
mBinding.flag.addOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() {
@Override
@ -161,6 +166,7 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener {
private void setVideoView() {
mControl = ViewControllerBottomBinding.bind(mBinding.video.findViewById(com.google.android.exoplayer2.ui.R.id.exo_controller));
mControl.scale.setText(ResUtil.getStringArray(R.array.select_scale)[Prefers.getScale()]);
mControl.interval.setText(ResUtil.getString(R.string.second, Prefers.getInterval()));
mControl.speed.setText(Players.get().getSpeed());
mBinding.video.setResizeMode(Prefers.getScale());
mBinding.video.setPlayer(Players.get().exo());
@ -170,12 +176,12 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener {
mSiteViewModel.detailContent(getKey(), getId());
}
private void getPlayer(boolean reset) {
private void getPlayer(boolean replay) {
Vod.Flag.Episode item = (Vod.Flag.Episode) mEpisodeAdapter.get(getEpisodePosition());
if (mFullscreen) Notify.show(ResUtil.getString(R.string.play_ready, item.getName()));
mSiteViewModel.playerContent(getKey(), getVodFlag().getFlag(), item.getUrl());
mBinding.progress.getRoot().setVisibility(View.VISIBLE);
updateHistory(item, reset);
updateHistory(item, replay);
}
private void setViewModel() {
@ -277,45 +283,74 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener {
Prefers.putScale(scale);
}
private void onOpening() {
mHistory.setOpening(mHistory.getOpening() + Prefers.getInterval() * 1000L);
if (mHistory.getOpening() > 5 * 60 * 1000) mHistory.setOpening(0);
mControl.opening.setText(Players.get().getStringForTime(mHistory.getOpening()));
}
private void onEnding() {
mHistory.setEnding(mHistory.getEnding() + Prefers.getInterval() * 1000L);
if (mHistory.getEnding() > 5 * 60 * 1000) mHistory.setEnding(0);
mControl.ending.setText(Players.get().getStringForTime(mHistory.getEnding()));
}
private void onInterval() {
int interval = Prefers.getInterval() * 2;
if (interval > 60) interval = 15;
Prefers.putInterval(interval);
mControl.interval.setText(ResUtil.getString(R.string.second, Prefers.getInterval()));
}
private void onReset() {
mHistory.setEnding(0);
mHistory.setOpening(0);
mControl.ending.setText(Players.get().getStringForTime(mHistory.getEnding()));
mControl.opening.setText(Players.get().getStringForTime(mHistory.getOpening()));
AppDatabase.get().getHistoryDao().update(mHistory);
}
private void checkHistory() {
History history = AppDatabase.get().getHistoryDao().find(getHistoryKey());
if (history != null) {
setFlagActivated(history.getFlag());
setEpisodeActivated(history.getEpisode());
mHistory = AppDatabase.get().getHistoryDao().find(getHistoryKey());
if (mHistory != null) {
setFlagActivated(mHistory.getFlag());
setEpisodeActivated(mHistory.getEpisode());
mControl.opening.setText(Players.get().getStringForTime(mHistory.getOpening()));
mControl.ending.setText(Players.get().getStringForTime(mHistory.getEnding()));
} else {
createHistory();
mHistory = createHistory();
setFlagActivated((Vod.Flag) mFlagAdapter.get(0));
setEpisodeActivated((Vod.Flag.Episode) mEpisodeAdapter.get(0));
mControl.opening.setText(Players.get().getStringForTime(0));
mControl.ending.setText(Players.get().getStringForTime(0));
}
}
private void createHistory() {
private History createHistory() {
History history = new History();
history.setKey(getHistoryKey());
history.setVodPic(mBinding.video.getTag().toString());
history.setVodName(mBinding.name.getText().toString());
AppDatabase.get().getHistoryDao().insertOrUpdate(history);
}
private void updateHistory(Vod.Flag.Episode item, boolean reset) {
History history = AppDatabase.get().getHistoryDao().find(getHistoryKey());
reset = reset || !item.getUrl().equals(history.getEpisodeUrl());
long duration = reset ? 0 : history.getDuration();
history.setDuration(duration);
history.setEpisodeUrl(item.getUrl());
history.setVodRemarks(item.getName());
history.setVodFlag(getVodFlag().getFlag());
history.setCreateTime(System.currentTimeMillis());
AppDatabase.get().getHistoryDao().update(history);
return history;
}
private void updateHistory(Vod.Flag.Episode item, boolean replay) {
replay = replay || !item.getUrl().equals(mHistory.getEpisodeUrl());
long duration = replay ? 0 : mHistory.getDuration();
mHistory.setDuration(duration);
mHistory.setEpisodeUrl(item.getUrl());
mHistory.setVodRemarks(item.getName());
mHistory.setVodFlag(getVodFlag().getFlag());
mHistory.setCreateTime(System.currentTimeMillis());
AppDatabase.get().getHistoryDao().update(mHistory);
EventBus.getDefault().post(RefreshEvent.history());
}
private void updateHistory() {
History history = AppDatabase.get().getHistoryDao().find(getHistoryKey());
if (history != null) {
history.setDuration(Players.get().getCurrentPosition());
AppDatabase.get().getHistoryDao().update(history);
}
if (mHistory == null) return;
mHistory.setDuration(Players.get().getCurrentPosition());
AppDatabase.get().getHistoryDao().update(mHistory);
}
private final Runnable mHideCenter = new Runnable() {

@ -2,7 +2,7 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/white_80" />
<solid android:color="@color/white_90" />
<corners
android:topLeftRadius="8dp"

@ -23,7 +23,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginEnd="8dp"
android:text="@string/play"
android:textColor="@color/grey_700"
android:textSize="16sp" />
@ -54,57 +54,101 @@
android:textColor="@color/white" />
<TextView
android:id="@+id/reset"
android:id="@+id/replay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginEnd="8dp"
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:nextFocusDown="@id/exo_progress"
android:text="@string/play_reset"
android:text="@string/play_replay"
android:textColor="@color/white" />
<TextView
android:id="@+id/speed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/play_speed"
android:textColor="@color/grey_700"
android:textSize="16sp" />
android:layout_marginEnd="8dp"
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:nextFocusDown="@id/exo_progress"
android:textColor="@color/white"
tools:text="1.00" />
<TextView
android:id="@+id/speed"
android:id="@+id/scale"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginEnd="8dp"
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:nextFocusRight="@id/opening"
android:nextFocusDown="@id/exo_progress"
android:textColor="@color/white"
tools:text="1.00" />
tools:text="預設" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/play_scale"
android:layout_marginEnd="8dp"
android:text="@string/play_oped"
android:textColor="@color/grey_700"
android:textSize="16sp" />
<TextView
android:id="@+id/scale"
android:id="@+id/opening"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginEnd="8dp"
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:nextFocusRight="@id/scale"
android:nextFocusRight="@id/ending"
android:nextFocusDown="@id/exo_progress"
android:textColor="@color/white"
tools:text="預設" />
tools:text="00:00" />
<TextView
android:id="@+id/ending"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:nextFocusRight="@id/interval"
android:nextFocusDown="@id/exo_progress"
android:textColor="@color/white"
tools:text="00:00" />
<TextView
android:id="@+id/interval"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:nextFocusRight="@id/reset"
android:nextFocusDown="@id/exo_progress"
android:textColor="@color/white"
tools:text="15秒" />
<TextView
android:id="@+id/reset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:nextFocusRight="@id/reset"
android:nextFocusDown="@id/exo_progress"
android:text="@string/play_reset"
android:textColor="@color/white" />
</LinearLayout>

@ -16,6 +16,8 @@ public class History {
private String vodRemarks;
private String episodeUrl;
private long createTime;
private long opening;
private long ending;
private long duration;
public History() {
@ -78,6 +80,22 @@ public class History {
this.createTime = createTime;
}
public long getOpening() {
return opening;
}
public void setOpening(long opening) {
this.opening = opening;
}
public long getEnding() {
return ending;
}
public void setEnding(long ending) {
this.ending = ending;
}
public long getDuration() {
return duration;
}

@ -13,7 +13,7 @@ import com.fongmi.android.tv.db.dao.HistoryDao;
@Database(entities = {History.class}, version = AppDatabase.VERSION, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
public static final int VERSION = 2;
public static final int VERSION = 3;
private static volatile AppDatabase instance;

@ -82,6 +82,10 @@ public class Players implements Player.Listener {
time = getCurrentPosition() + time;
if (time > exoPlayer.getDuration()) time = exoPlayer.getDuration();
else if (time < 0) time = 0;
return getStringForTime(time);
}
public String getStringForTime(long time) {
return Util.getStringForTime(builder, formatter, time);
}

@ -74,4 +74,12 @@ public class Prefers {
public static void putThumbnail(int thumbnail) {
Prefers.put("thumbnail", thumbnail);
}
public static int getInterval() {
return Prefers.getInt("interval", 15);
}
public static void putInterval(int interval) {
Prefers.put("interval", interval);
}
}

@ -41,9 +41,9 @@
<string name="play_next">下一集</string>
<string name="play_prev">上一集</string>
<string name="play_ready">准备播放:<xliff:g name="name">%s</xliff:g></string>
<string name="play_reset">重播本集</string>
<string name="play_speed">倍速</string>
<string name="play_scale">缩放</string>
<string name="play_replay">重播本集</string>
<string name="play_reset">重置</string>
<string name="play_oped">片头片尾</string>
<!-- Setting -->
<string name="setting_site">首页</string>
@ -64,6 +64,9 @@
<string name="error_play_parse">无法解析网址</string>
<string name="error_play">不支援的影片格式</string>
<!-- UNIT -->
<string name="second"><xliff:g name="name">%s</xliff:g></string>
<string-array name="select_thumbnail">
<item>低质量</item>
<item>中质量</item>

@ -41,9 +41,9 @@
<string name="play_next">下一集</string>
<string name="play_prev">上一集</string>
<string name="play_ready">準備播放:<xliff:g name="name">%s</xliff:g></string>
<string name="play_reset">重播本集</string>
<string name="play_speed">倍速</string>
<string name="play_scale">縮放</string>
<string name="play_replay">重播本集</string>
<string name="play_reset">重置</string>
<string name="play_oped">片頭片尾</string>
<!-- Setting -->
<string name="setting_site">首頁</string>
@ -64,6 +64,9 @@
<string name="error_play_parse">無法解析網址</string>
<string name="error_play">不支援的影片格式</string>
<!-- UNIT -->
<string name="second"><xliff:g name="name">%s</xliff:g></string>
<string-array name="select_thumbnail">
<item>低品質</item>
<item>中品質</item>

@ -41,9 +41,9 @@
<string name="play_next">Next</string>
<string name="play_prev">Prev</string>
<string name="play_ready">Ready to play: <xliff:g name="name">%s</xliff:g></string>
<string name="play_reset">Replay</string>
<string name="play_speed">Speed</string>
<string name="play_scale">Scale</string>
<string name="play_replay">Replay</string>
<string name="play_reset">Reset</string>
<string name="play_oped">OP&amp;ED</string>
<!-- Setting -->
<string name="setting_site">Home site</string>
@ -64,6 +64,9 @@
<string name="error_play_parse">Unable to parse url</string>
<string name="error_play">Unsupported video format</string>
<!-- UNIT -->
<string name="second"><xliff:g name="name">%s</xliff:g> s</string>
<string-array name="select_thumbnail">
<item>Low</item>
<item>Medium</item>

Loading…
Cancel
Save