diff --git a/app/src/main/res/drawable/ic_setting_vod_history.xml b/app/src/main/res/drawable/ic_setting_vod_history.xml new file mode 100644 index 000000000..7fe991d5f --- /dev/null +++ b/app/src/main/res/drawable/ic_setting_vod_history.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java index 25585edbc..fe3b77b42 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java @@ -1,5 +1,6 @@ package com.fongmi.android.tv.ui.fragment; +import android.Manifest; import android.app.Activity; import android.content.Intent; import android.view.LayoutInflater; @@ -19,6 +20,7 @@ import com.fongmi.android.tv.App; import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.api.config.VodConfig; import com.fongmi.android.tv.bean.Class; +import com.fongmi.android.tv.bean.Config; import com.fongmi.android.tv.bean.Hot; import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.bean.Site; @@ -27,6 +29,7 @@ import com.fongmi.android.tv.databinding.FragmentVodBinding; import com.fongmi.android.tv.event.CastEvent; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.impl.Callback; +import com.fongmi.android.tv.impl.ConfigCallback; import com.fongmi.android.tv.impl.FilterCallback; import com.fongmi.android.tv.impl.SiteCallback; import com.fongmi.android.tv.model.SiteViewModel; @@ -38,14 +41,17 @@ import com.fongmi.android.tv.ui.activity.VideoActivity; import com.fongmi.android.tv.ui.adapter.TypeAdapter; import com.fongmi.android.tv.ui.base.BaseFragment; import com.fongmi.android.tv.ui.dialog.FilterDialog; +import com.fongmi.android.tv.ui.dialog.HistoryDialog; import com.fongmi.android.tv.ui.dialog.LinkDialog; import com.fongmi.android.tv.ui.dialog.ReceiveDialog; import com.fongmi.android.tv.ui.dialog.SiteDialog; import com.fongmi.android.tv.utils.FileChooser; import com.fongmi.android.tv.utils.FileUtil; +import com.fongmi.android.tv.utils.Notify; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Trans; import com.google.common.net.HttpHeaders; +import com.permissionx.guolindev.PermissionX; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -60,7 +66,7 @@ import okhttp3.Call; import okhttp3.Headers; import okhttp3.Response; -public class VodFragment extends BaseFragment implements SiteCallback, FilterCallback, TypeAdapter.OnClickListener { +public class VodFragment extends BaseFragment implements SiteCallback, FilterCallback, TypeAdapter.OnClickListener, ConfigCallback { private FragmentVodBinding mBinding; private SiteViewModel mViewModel; @@ -103,6 +109,7 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal mBinding.link.setOnClickListener(this::onLink); mBinding.logo.setOnClickListener(this::onLogo); mBinding.logo.setOnLongClickListener(this::onRefresh); + mBinding.settingVodHistory.setOnClickListener(this::onSettingVodHistory); mBinding.keep.setOnClickListener(this::onKeep); mBinding.retry.setOnClickListener(this::onRetry); mBinding.filter.setOnClickListener(this::onFilter); @@ -207,6 +214,10 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal return true; } + private void onSettingVodHistory(View view) { + HistoryDialog.create(this).type(0).show(); + } + private void onKeep(View view) { KeepActivity.start(getActivity()); } @@ -252,6 +263,45 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal return mResult == null ? new Result() : mResult; } + private void setConfig() { + Notify.dismiss(); + RefreshEvent.video(); + RefreshEvent.config(); + } + + @Override + public void setConfig(Config config) { + if (config.getUrl().startsWith("file") && !PermissionX.isGranted(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + PermissionX.init(this).permissions(Manifest.permission.WRITE_EXTERNAL_STORAGE).request((allGranted, grantedList, deniedList) -> load(config)); + } else { + load(config); + } + } + + private void load(Config config) { + switch (config.getType()) { + case 0: + Notify.progress(getActivity()); + VodConfig.load(config, getCallback()); + break; + } + } + + private Callback getCallback() { + return new Callback() { + @Override + public void success() { + setConfig(); + } + + @Override + public void error(String msg) { + Notify.show(msg); + setConfig(); + } + }; + } + @Subscribe(threadMode = ThreadMode.MAIN) public void onRefreshEvent(RefreshEvent event) { switch (event.getType()) { diff --git a/app/src/mobile/res/layout/fragment_vod.xml b/app/src/mobile/res/layout/fragment_vod.xml index 2ce09d4c8..ca597ca8e 100644 --- a/app/src/mobile/res/layout/fragment_vod.xml +++ b/app/src/mobile/res/layout/fragment_vod.xml @@ -28,9 +28,17 @@ android:id="@+id/logo" android:layout_width="24dp" android:layout_height="24dp" + android:layout_marginEnd="12dp" android:background="?attr/selectableItemBackgroundBorderless" android:src="@drawable/ic_logo" /> + +