Fix player bug

pull/3/head
FongMi 4 years ago
parent ccf6d607ae
commit c0d4b32f0c
  1. 34
      app/src/main/java/com/fongmi/bear/player/Player.java
  2. 21
      app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java
  3. 29
      app/src/main/res/layout/activity_detail.xml

@ -7,9 +7,10 @@ import com.google.gson.JsonParser;
import java.util.HashMap;
public class Player {
public class Player implements com.google.android.exoplayer2.Player.Listener {
private ExoPlayer mPlayer;
private ExoPlayer player;
private Callback callback;
private static class Loader {
static volatile Player INSTANCE = new Player();
@ -19,8 +20,11 @@ public class Player {
return Loader.INSTANCE;
}
public static ExoPlayer exo() {
return get().mPlayer = get().mPlayer == null ? new ExoPlayer.Builder(App.get()).build() : get().mPlayer;
public ExoPlayer exo(Callback callback) {
if (player == null) player = new ExoPlayer.Builder(App.get()).build();
player.addListener(this);
this.callback = callback;
return player;
}
public void setMediaSource(JsonObject object) {
@ -30,8 +34,24 @@ public class Player {
JsonObject header = JsonParser.parseString(object.get("header").getAsString()).getAsJsonObject();
for (String key : header.keySet()) headers.put(key, header.get(key).getAsString());
}
mPlayer.setMediaSource(ExoUtil.getSource(headers, url));
mPlayer.prepare();
mPlayer.play();
player.setMediaSource(ExoUtil.getSource(headers, url));
player.prepare();
player.play();
}
public void stop() {
if (player != null && player.isPlaying()) {
player.stop();
}
}
@Override
public void onPlaybackStateChanged(int state) {
if (state != com.google.android.exoplayer2.Player.STATE_READY) return;
callback.onPrepared();
}
public interface Callback {
void onPrepared();
}
}

@ -29,7 +29,7 @@ import com.fongmi.bear.utils.ResUtil;
import java.util.ArrayList;
import java.util.List;
public class DetailActivity extends BaseActivity {
public class DetailActivity extends BaseActivity implements Player.Callback {
private ActivityDetailBinding mBinding;
private ArrayObjectAdapter mFlagAdapter;
@ -56,8 +56,8 @@ public class DetailActivity extends BaseActivity {
@Override
protected void initView() {
mBinding.progress.showProgress();
mBinding.video.setPlayer(Player.exo());
mBinding.progressLayout.showProgress();
mBinding.video.setPlayer(Player.get().exo(this));
setRecyclerView();
setViewModel();
getDetail();
@ -114,13 +114,13 @@ public class DetailActivity extends BaseActivity {
mSiteViewModel = new ViewModelProvider(this).get(SiteViewModel.class);
mSiteViewModel.player.observe(this, object -> Player.get().setMediaSource(object));
mSiteViewModel.result.observe(this, result -> {
if (result.getList().isEmpty()) mBinding.progress.showErrorText();
if (result.getList().isEmpty()) mBinding.progressLayout.showErrorText();
else setDetail(result.getList().get(0));
});
}
private void setDetail(Vod item) {
mBinding.progress.showContent();
mBinding.progressLayout.showContent();
mBinding.name.setText(item.getVodName());
setText(mBinding.year, R.string.detail_year, item.getVodYear());
setText(mBinding.area, R.string.detail_area, item.getVodArea());
@ -151,4 +151,15 @@ public class DetailActivity extends BaseActivity {
mBinding.group.setVisibility(View.VISIBLE);
mGroupAdapter.addAll(0, items);
}
@Override
public void onPrepared() {
}
@Override
protected void onDestroy() {
super.onDestroy();
Player.get().stop();
}
}

@ -2,12 +2,12 @@
<com.fongmi.bear.ui.custom.ProgressLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/progress"
android:id="@+id/progressLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/video"
<FrameLayout
android:id="@+id/frame"
android:layout_width="360dp"
android:layout_height="200dp"
android:layout_marginStart="24dp"
@ -15,8 +15,15 @@
android:layout_marginEnd="24dp"
android:layout_marginBottom="12dp"
android:focusable="true"
android:focusableInTouchMode="true"
app:use_controller="false" />
android:focusableInTouchMode="true">
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/video"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:use_controller="false" />
</FrameLayout>
<TextView
android:id="@+id/name"
@ -24,7 +31,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:layout_marginEnd="24dp"
android:layout_toEndOf="@+id/video"
android:layout_toEndOf="@+id/frame"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="24sp"
@ -38,7 +45,7 @@
android:layout_below="@+id/name"
android:layout_alignStart="@+id/name"
android:layout_marginEnd="24dp"
android:layout_toEndOf="@+id/video"
android:layout_toEndOf="@+id/frame"
android:orientation="horizontal">
<TextView
@ -94,7 +101,7 @@
android:layout_alignStart="@+id/name"
android:layout_marginTop="8dp"
android:layout_marginEnd="24dp"
android:layout_toEndOf="@+id/video"
android:layout_toEndOf="@+id/frame"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="16sp"
@ -108,7 +115,7 @@
android:layout_alignStart="@+id/name"
android:layout_marginTop="8dp"
android:layout_marginEnd="24dp"
android:layout_toEndOf="@+id/video"
android:layout_toEndOf="@+id/frame"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="16sp"
@ -122,7 +129,7 @@
android:layout_alignStart="@+id/name"
android:layout_marginTop="8dp"
android:layout_marginEnd="24dp"
android:layout_toEndOf="@+id/video"
android:layout_toEndOf="@+id/frame"
android:ellipsize="end"
android:lineSpacingExtra="4dp"
android:maxLines="3"
@ -134,7 +141,7 @@
android:id="@+id/flag"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/video"
android:layout_below="@+id/frame"
android:clipChildren="false"
android:clipToPadding="false"
android:paddingStart="24dp"

Loading…
Cancel
Save