diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 68d1058ac..671929c35 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -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 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); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java index 3a3802767..edc2d84ea 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingPlayerFragment.java @@ -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())); diff --git a/app/src/mobile/res/layout/fragment_setting_player.xml b/app/src/mobile/res/layout/fragment_setting_player.xml index b4bdda15c..d724e65f0 100644 --- a/app/src/mobile/res/layout/fragment_setting_player.xml +++ b/app/src/mobile/res/layout/fragment_setting_player.xml @@ -68,6 +68,35 @@ + + + + + + + + + + + \ No newline at end of file