[mobile] update live

pull/137/head
FongMi 3 years ago
parent 3c49e7676b
commit 8214a9b68a
  1. 2
      app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java
  2. 14
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  3. 60
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  4. 10
      app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/CastDialog.java
  5. 62
      app/src/mobile/res/layout/view_control_live.xml
  6. 12
      app/src/mobile/res/layout/view_control_vod.xml

@ -47,7 +47,7 @@ public class LiveViewModel extends ViewModel {
while (iterator.hasNext()) if (iterator.next().isEmpty()) iterator.remove();
}
public void getUrl(Channel item) {
public void fetch(Channel item) {
execute(CHANNEL, () -> {
TVBus.get().stop();
String url = item.getCurrent().split("\\$")[0];

@ -241,8 +241,8 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
mBinding.actor.setOnClickListener(view -> onActor());
mBinding.content.setOnClickListener(view -> onContent());
mBinding.reverse.setOnClickListener(view -> onReverse());
mBinding.control.back.setOnClickListener(view -> onFull());
mBinding.control.cast.setOnClickListener(view -> onCast());
mBinding.control.back.setOnClickListener(view -> onFull());
mBinding.control.full.setOnClickListener(view -> onFull());
mBinding.control.keep.setOnClickListener(view -> onKeep());
mBinding.control.lock.setOnClickListener(view -> onLock());
@ -475,15 +475,15 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
reverseEpisode(false);
}
private void onCast() {
CastDialog.create().history(mHistory).video(CastVideo.get(getName(), getUrl())).fm(true).show(this);
}
private void onFull() {
setR1Callback();
toggleFullscreen();
}
private void onCast() {
CastDialog.create().history(mHistory).video(CastVideo.get(getName(), getUrl())).show(this);
}
private void onKeep() {
Keep keep = Keep.find(getHistoryKey());
Notify.show(keep != null ? R.string.keep_del : R.string.keep_add);
@ -728,13 +728,13 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
private void showControl() {
mBinding.control.setting.setVisibility(mHistory == null || isFullscreen() ? View.GONE : View.VISIBLE);
mBinding.control.share.setVisibility(getUrl() == null || isFullscreen() ? View.GONE : View.VISIBLE);
mBinding.control.cast.setVisibility(getUrl() == null || isFullscreen() ? View.GONE : View.VISIBLE);
mBinding.control.keep.setVisibility(mHistory == null || isFullscreen() ? View.GONE : View.VISIBLE);
mBinding.control.parse.setVisibility(isFullscreen() && isUseParse() ? View.VISIBLE : View.GONE);
mBinding.control.rotate.setVisibility(isFullscreen() && !isLock() ? View.VISIBLE : View.GONE);
mBinding.control.back.setVisibility(isFullscreen() && !isLock() ? View.VISIBLE : View.GONE);
mBinding.control.action.getRoot().setVisibility(isFullscreen() ? View.VISIBLE : View.GONE);
mBinding.control.share.setVisibility(getUrl() == null ? View.GONE : View.VISIBLE);
mBinding.control.cast.setVisibility(getUrl() == null ? View.GONE : View.VISIBLE);
mBinding.control.lock.setVisibility(isFullscreen() ? View.VISIBLE : View.GONE);
mBinding.control.center.setVisibility(isLock() ? View.GONE : View.VISIBLE);
mBinding.control.bottom.setVisibility(isLock() ? View.GONE : View.VISIBLE);

@ -10,6 +10,7 @@ import android.os.Bundle;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.core.app.ShareCompat;
import androidx.lifecycle.ViewModelProvider;
import androidx.media3.common.C;
import androidx.media3.common.Player;
@ -26,13 +27,14 @@ import com.fongmi.android.tv.bean.Group;
import com.fongmi.android.tv.bean.Keep;
import com.fongmi.android.tv.bean.Live;
import com.fongmi.android.tv.bean.Track;
import com.fongmi.android.tv.cast.CastVideo;
import com.fongmi.android.tv.databinding.ActivityLiveBinding;
import com.fongmi.android.tv.event.ErrorEvent;
import com.fongmi.android.tv.event.PlayerEvent;
import com.fongmi.android.tv.impl.Callback;
import com.fongmi.android.tv.impl.LiveCallback;
import com.fongmi.android.tv.impl.PassCallback;
import com.fongmi.android.tv.model.LiveViewModel;
import com.fongmi.android.tv.impl.Callback;
import com.fongmi.android.tv.player.Players;
import com.fongmi.android.tv.player.source.Force;
import com.fongmi.android.tv.player.source.TVBus;
@ -42,6 +44,7 @@ import com.fongmi.android.tv.ui.adapter.ChannelAdapter;
import com.fongmi.android.tv.ui.adapter.GroupAdapter;
import com.fongmi.android.tv.ui.base.BaseActivity;
import com.fongmi.android.tv.ui.custom.CustomKeyDownLive;
import com.fongmi.android.tv.ui.custom.dialog.CastDialog;
import com.fongmi.android.tv.ui.custom.dialog.LiveDialog;
import com.fongmi.android.tv.ui.custom.dialog.PassDialog;
import com.fongmi.android.tv.ui.custom.dialog.TrackDialog;
@ -69,7 +72,7 @@ import okhttp3.Call;
import okhttp3.Response;
import tv.danmaku.ijk.media.player.ui.IjkVideoView;
public class LiveActivity extends BaseActivity implements CustomKeyDownLive.Listener, PiPReceiver.Listener, TrackDialog.Listener, PassCallback, LiveCallback, GroupAdapter.OnClickListener, ChannelAdapter.OnClickListener {
public class LiveActivity extends BaseActivity implements CustomKeyDownLive.Listener, CastDialog.Listener, PiPReceiver.Listener, TrackDialog.Listener, PassCallback, LiveCallback, GroupAdapter.OnClickListener, ChannelAdapter.OnClickListener {
private ChannelAdapter mChannelAdapter;
private ActivityLiveBinding mBinding;
@ -89,6 +92,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
private boolean rotate;
private boolean stop;
private boolean lock;
private String url;
private int count;
private PiP mPiP;
@ -156,6 +160,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
mBinding.control.seek.setListener(mPlayers);
mBinding.control.back.setOnClickListener(view -> onBack());
mBinding.control.lock.setOnClickListener(view -> onLock());
mBinding.control.cast.setOnClickListener(view -> onCast());
mBinding.control.share.setOnClickListener(view -> onShare());
mBinding.control.rotate.setOnClickListener(view -> onRotate());
mBinding.control.action.text.setOnClickListener(this::onTrack);
mBinding.control.action.audio.setOnClickListener(this::onTrack);
@ -262,6 +268,17 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
showControl();
}
private void onCast() {
CastDialog.create().video(CastVideo.get(mBinding.control.title.getText().toString(), getUrl())).fm(false).show(this);
}
private void onShare() {
ShareCompat.IntentBuilder builder = new ShareCompat.IntentBuilder(this).setType("text/plain").setText(getUrl());
builder.getIntent().putExtra("title", mBinding.control.title.getText());
builder.getIntent().putExtra("name", mBinding.control.title.getText());
builder.startChooser();
}
private void onRotate() {
setR1Callback();
setRotate(!isRotate());
@ -312,7 +329,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
Prefers.putLivePlayer(mPlayers.getPlayer());
setPlayerView();
setR1Callback();
getUrl();
fetch();
}
private void onDecode() {
@ -320,7 +337,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
mPlayers.set(getExo(), getIjk());
setDecodeView();
setR1Callback();
getUrl();
fetch();
}
private void hideUI() {
@ -360,6 +377,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
}
private void showControl() {
mBinding.control.share.setVisibility(getUrl() == null ? View.GONE : View.VISIBLE);
mBinding.control.cast.setVisibility(getUrl() == null ? View.GONE : View.VISIBLE);
mBinding.control.rotate.setVisibility(isLock() ? View.GONE : View.VISIBLE);
mBinding.control.bottom.setVisibility(isLock() ? View.GONE : View.VISIBLE);
mBinding.control.back.setVisibility(isLock() ? View.GONE : View.VISIBLE);
@ -432,8 +451,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
mGroup.setPosition(mChannelAdapter.setSelected(item.group(mGroup)));
mChannel = item;
showInfo();
getUrl();
hideUI();
fetch();
}
@Override
@ -463,13 +482,14 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
private void setInfo() {
mChannel.loadLogo(mBinding.widget.logo);
mBinding.widget.name.setText(mChannel.getName());
mBinding.control.title.setText(mChannel.getName());
mBinding.widget.namePip.setText(mChannel.getName());
mBinding.widget.line.setText(mChannel.getLineText());
mBinding.widget.number.setText(mChannel.getNumber());
mBinding.widget.numberPip.setText(mChannel.getNumber());
mBinding.control.action.line.setText(mChannel.getLineText());
mBinding.widget.line.setVisibility(mChannel.getLineVisible());
mBinding.control.action.line.setVisibility(mChannel.getLineVisible());
mBinding.control.action.line.setText(mBinding.widget.line.getText());
mBinding.control.action.line.setVisibility(mBinding.widget.line.getVisibility());
showEpg();
checkEpg();
}
@ -491,11 +511,12 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
});
}
private void getUrl() {
private void fetch() {
if (mChannel == null) return;
LiveConfig.get().setKeep(mChannel);
mViewModel.getUrl(mChannel);
mViewModel.fetch(mChannel);
showProgress();
setUrl(null);
}
private void checkLockImg() {
@ -541,6 +562,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
public void onPlayerEvent(PlayerEvent event) {
switch (event.getState()) {
case 0:
setUrl(event.getUrl());
setTrackVisible(false);
break;
case Player.STATE_IDLE:
@ -555,6 +577,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
setSpeedVisible();
setTrackVisible(true);
mPiP.update(this, mPlayers.isPlaying());
mBinding.control.size.setText(mPlayers.getSizeText());
if (isVisible(mBinding.control.getRoot())) showControl();
break;
case Player.STATE_ENDED:
nextChannel();
@ -582,7 +606,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
@Subscribe(threadMode = ThreadMode.MAIN)
public void onErrorEvent(ErrorEvent event) {
if (!event.isRetry() || mPlayers.addRetry() > 3) onError(event);
else getUrl();
else fetch();
}
private void onError(ErrorEvent event) {
@ -646,14 +670,14 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
private void prevLine() {
mChannel.prevLine();
showInfo();
getUrl();
fetch();
}
private void nextLine(boolean show) {
mChannel.nextLine();
if (show) showInfo();
else setInfo();
getUrl();
fetch();
}
private void seekTo() {
@ -685,6 +709,18 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
this.lock = lock;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
@Override
public void onCastTo() {
}
@Override
public void onBright(int progress) {
mBinding.widget.bright.setVisibility(View.VISIBLE);

@ -1,6 +1,7 @@
package com.fongmi.android.tv.ui.custom.dialog;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
@ -52,6 +53,7 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe
private DeviceAdapter adapter;
private Listener listener;
private CastVideo video;
private boolean fm;
public static CastDialog create() {
return new CastDialog();
@ -76,6 +78,11 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe
return this;
}
public CastDialog fm(boolean fm) {
this.fm = fm;
return this;
}
public void show(FragmentActivity activity) {
for (Fragment f : activity.getSupportFragmentManager().getFragments()) if (f instanceof BottomSheetDialogFragment) return;
show(activity.getSupportFragmentManager(), null);
@ -89,6 +96,7 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe
@Override
protected void initView() {
binding.scan.setVisibility(fm ? View.VISIBLE : View.GONE);
EventBus.getDefault().register(this);
setRecyclerView();
getDevice();
@ -107,7 +115,7 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe
}
private void getDevice() {
adapter.addAll(Device.getAll());
if (fm) adapter.addAll(Device.getAll());
adapter.addAll(CastDevice.get().getAll());
if (CastDevice.get().isEmpty()) App.post(() -> onRefresh(false), 1000);
}

@ -1,16 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black_20">
<LinearLayout
android:id="@+id/top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:letterSpacing="0.02"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="14sp"
tools:text="CCTV-1" />
<TextView
android:id="@+id/size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="12sp"
tools:text="1920 x 1080" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/cast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="4dp"
android:src="@drawable/ic_control_cast" />
<ImageView
android:id="@+id/share"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="4dp"
android:src="@drawable/ic_control_share" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="24dp"
android:layout_marginEnd="16dp"
android:gravity="center"
android:orientation="vertical">

@ -49,8 +49,9 @@
android:id="@+id/cast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginEnd="8dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="4dp"
android:src="@drawable/ic_control_cast" />
<ImageView
@ -58,15 +59,17 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="4dp"
android:src="@drawable/ic_control_share" />
<ImageView
android:id="@+id/keep"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="4dp"
android:src="@drawable/ic_control_keep_off" />
<ImageView
@ -74,6 +77,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="4dp"
android:src="@drawable/ic_control_setting" />
</LinearLayout>
@ -144,7 +148,7 @@
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="24dp"
android:layout_marginEnd="16dp"
android:gravity="center"
android:orientation="vertical">

Loading…
Cancel
Save