[mobile] support manual play and preview

pull/137/head
FongMi 3 years ago
parent 8f02a18959
commit 138aae1f0e
  1. 52
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 9
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java
  3. 29
      app/src/mobile/res/layout/fragment_setting_player.xml
  4. 8
      app/src/mobile/res/layout/view_widget_vod.xml

@ -7,6 +7,7 @@ import android.app.Dialog;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.text.Html;
@ -19,6 +20,7 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ShareCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
@ -30,6 +32,7 @@ import androidx.media3.ui.PlayerView;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewbinding.ViewBinding;
import com.bumptech.glide.request.transition.Transition;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.Constant;
import com.fongmi.android.tv.R;
@ -48,6 +51,7 @@ import com.fongmi.android.tv.db.AppDatabase;
import com.fongmi.android.tv.event.ErrorEvent;
import com.fongmi.android.tv.event.PlayerEvent;
import com.fongmi.android.tv.event.RefreshEvent;
import com.fongmi.android.tv.impl.CustomTarget;
import com.fongmi.android.tv.model.SiteViewModel;
import com.fongmi.android.tv.player.ExoUtil;
import com.fongmi.android.tv.player.Players;
@ -69,6 +73,7 @@ import com.fongmi.android.tv.ui.custom.dialog.EpisodeListDialog;
import com.fongmi.android.tv.ui.custom.dialog.TrackDialog;
import com.fongmi.android.tv.utils.Clock;
import com.fongmi.android.tv.utils.FileChooser;
import com.fongmi.android.tv.utils.ImgUtil;
import com.fongmi.android.tv.utils.Notify;
import com.fongmi.android.tv.utils.PiP;
import com.fongmi.android.tv.utils.ResUtil;
@ -416,6 +421,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
mBinding.contentLayout.setVisibility(mBinding.content.getVisibility());
mFlagAdapter.addAll(item.getVodFlags());
setOther(mBinding.other, item);
setArtwork(item.getVodPic());
checkHistory(item);
checkFlag(item);
checkKeepImg();
@ -441,6 +447,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
mViewModel.playerContent(getKey(), flag.getFlag(), episode.getUrl());
updateHistory(episode, replay);
showProgress();
hidePreview();
setUrl(null);
}
@ -494,11 +501,14 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
}
private void seamless(Vod.Flag flag, boolean force) {
if (!force && !getSite().isChangeable()) return;
Vod.Flag.Episode episode = flag.find(mHistory.getVodRemarks(), getMark() == null);
if (episode == null || episode.isActivated()) return;
mHistory.setVodRemarks(episode.getName());
onItemClick(episode);
if (Setting.getFlag() == 1 && mHistory.isNew()) {
hideProgress();
} else if (Setting.getFlag() == 0 || force) {
Vod.Flag.Episode episode = flag.find(mHistory.getVodRemarks(), getMark() == null);
if (episode == null || episode.isActivated()) return;
mHistory.setVodRemarks(episode.getName());
onItemClick(episode);
}
}
private void reverseEpisode(boolean scroll) {
@ -531,8 +541,8 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
}
private boolean onChange() {
if (getSite().isChangeable()) checkSearch(true);
else checkFlag();
if (isFullscreen()) checkFlag();
else checkSearch(true);
return true;
}
@ -816,6 +826,17 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
mDialogs.clear();
}
private void showPreview(Drawable resource) {
if (Setting.getFlag() == 0 || isVisible(mBinding.widget.progress)) return;
mBinding.widget.preview.setVisibility(View.VISIBLE);
mBinding.widget.preview.setImageDrawable(resource);
}
private void hidePreview() {
mBinding.widget.preview.setVisibility(View.VISIBLE);
mBinding.widget.preview.setImageDrawable(null);
}
private void setTraffic() {
Traffic.setSpeed(mBinding.widget.traffic);
App.post(mR2, Constant.INTERVAL_TRAFFIC);
@ -829,6 +850,23 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
App.post(mR1, Constant.INTERVAL_HIDE);
}
private void setArtwork(String url) {
ImgUtil.load(url, R.drawable.radio, new CustomTarget() {
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
getExo().setDefaultArtwork(resource);
getIjk().setDefaultArtwork(resource);
showPreview(resource);
}
@Override
public void onLoadFailed(@Nullable Drawable error) {
getExo().setDefaultArtwork(error);
getIjk().setDefaultArtwork(error);
}
});
}
private void checkFlag(Vod item) {
boolean empty = item.getVodFlags().isEmpty();
mBinding.flag.setVisibility(empty ? View.GONE : View.VISIBLE);

@ -22,6 +22,7 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback {
private FragmentSettingPlayerBinding mBinding;
private String[] http;
private String[] flag;
public static SettingPlayerFragment newInstance() {
return new SettingPlayerFragment();
@ -40,6 +41,7 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback {
protected void initView() {
mBinding.uaText.setText(Setting.getUa());
mBinding.tunnelText.setText(getSwitch(Setting.isTunnel()));
mBinding.flagText.setText((flag = ResUtil.getStringArray(R.array.select_flag))[Setting.getFlag()]);
mBinding.httpText.setText((http = ResUtil.getStringArray(R.array.select_exo_http))[Setting.getHttp()]);
setVisible();
}
@ -48,6 +50,7 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback {
protected void initEvent() {
mBinding.ua.setOnClickListener(this::onUa);
mBinding.http.setOnClickListener(this::setHttp);
mBinding.flag.setOnClickListener(this::setFlag);
mBinding.tunnel.setOnClickListener(this::setTunnel);
}
@ -67,6 +70,12 @@ public class SettingPlayerFragment extends BaseFragment implements UaCallback {
ExoUtil.reset();
}
private void setFlag(View view) {
int index = Setting.getFlag();
Setting.putFlag(index = index == flag.length - 1 ? 0 : ++index);
mBinding.flagText.setText(flag[index]);
}
private void setTunnel(View view) {
Setting.putTunnel(!Setting.isTunnel());
mBinding.tunnelText.setText(getSwitch(Setting.isTunnel()));

@ -68,6 +68,35 @@
</LinearLayout>
<LinearLayout
android:id="@+id/flag"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/shape_item"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_player_flag"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/flagText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="middle"
android:gravity="end"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="自動" />
</LinearLayout>
<LinearLayout
android:id="@+id/http"
android:layout_width="match_parent"

@ -149,4 +149,12 @@
app:trackColor="@color/grey_500" />
</LinearLayout>
<ImageView
android:id="@+id/preview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitCenter"
android:visibility="gone" />
</FrameLayout>
Loading…
Cancel
Save