diff --git a/README.md b/README.md index ebaff3237..e38011f90 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ https://github.com/CatVodTVOfficial/CatVodTVJarLoader
searchable:搜索    (0:關閉、1:啟用)  
 filterable:篩選    (0:關閉、1:啟用)  
-switchable:換源    (0:關閉、1:啟用)
+changeable:換源    (0:關閉、1:啟用)
 playerType:播放器  (1:IJK、2:EXO)
### 直播欄位 diff --git a/app/build.gradle b/app/build.gradle index c03cc6b76..38f672b63 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.fongmi.android.tv" minSdk 21 targetSdk 29 - versionCode 62 - versionName "1.6.2" + versionCode 63 + versionName "1.6.3" ndk { abiFilters "armeabi-v7a" } } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 23ba86470..f4015ba27 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -288,7 +288,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mViewModel.player.observe(this, result -> { boolean useParse = (result.getPlayUrl().isEmpty() && ApiConfig.get().getFlags().contains(result.getFlag())) || result.getJx() == 1; mBinding.control.parseLayout.setVisibility(mParseAdapter.size() > 0 && useParse ? View.VISIBLE : View.GONE); - int timeout = getSite().isSwitchable() ? Constant.TIMEOUT_PLAY : -1; + int timeout = getSite().isChangeable() ? Constant.TIMEOUT_PLAY : -1; mPlayers.start(result, useParse, timeout); resetFocus(); }); @@ -806,7 +806,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis } private void startFlow() { - if (!getSite().isSwitchable()) return; + if (!getSite().isChangeable()) return; if (isVisible(mBinding.control.parseLayout)) checkParse(); else checkFlag(); } @@ -848,7 +848,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mExecutor = Executors.newFixedThreadPool(Constant.THREAD_POOL); for (Site site : ApiConfig.get().getSites()) { if (site.getKey().equals(getKey())) continue; - if (isAutoMode() && !site.isSwitchable()) continue; + if (isAutoMode() && !site.isChangeable()) continue; if (site.isSearchable()) mExecutor.execute(() -> search(site, keyword)); } } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SiteDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SiteDialog.java index abc6ef36f..eba419e2a 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SiteDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SiteDialog.java @@ -23,6 +23,7 @@ public class SiteDialog implements SitePresenter.OnClickListener { private final SitePresenter presenter; private final SiteCallback callback; private final AlertDialog dialog; + private float width; public static SiteDialog create(Activity activity) { return new SiteDialog(activity); @@ -37,17 +38,21 @@ public class SiteDialog implements SitePresenter.OnClickListener { public SiteDialog search(boolean search) { this.presenter.search(search); + this.width = 0.4f; return this; } public SiteDialog filter(boolean filter) { this.presenter.filter(filter); + this.width = 0.4f; return this; } public SiteDialog all() { this.presenter.search(true); this.presenter.filter(true); + this.presenter.change(true); + this.width = 0.5f; return this; } @@ -66,7 +71,7 @@ public class SiteDialog implements SitePresenter.OnClickListener { private void setDialog() { if (adapter.size() == 0) return; WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); - params.width = (int) (ResUtil.getScreenWidthPx() * 0.4f); + params.width = (int) (ResUtil.getScreenWidthPx() * width); params.height = (int) (ResUtil.getScreenHeightPx() * 0.745f); dialog.getWindow().setAttributes(params); dialog.getWindow().setDimAmount(0); @@ -92,6 +97,12 @@ public class SiteDialog implements SitePresenter.OnClickListener { adapter.notifyArrayItemRangeChanged(0, adapter.size()); } + @Override + public void onChangeClick(Site item) { + item.setChangeable(!item.isChangeable()).save(); + adapter.notifyArrayItemRangeChanged(0, adapter.size()); + } + @Override public boolean onSearchLongClick(Site item) { boolean result = !item.isSearchable(); @@ -107,4 +118,12 @@ public class SiteDialog implements SitePresenter.OnClickListener { adapter.notifyArrayItemRangeChanged(0, adapter.size()); return true; } + + @Override + public boolean onChangeLongClick(Site item) { + boolean result = !item.isChangeable(); + for (Site site : ApiConfig.get().getSites()) site.setChangeable(result).save(); + adapter.notifyArrayItemRangeChanged(0, adapter.size()); + return true; + } } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/SitePresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/SitePresenter.java index 1d1e8c3aa..215df6278 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/SitePresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/SitePresenter.java @@ -15,6 +15,7 @@ public class SitePresenter extends Presenter { private final OnClickListener mListener; private boolean search; private boolean filter; + private boolean change; public SitePresenter(OnClickListener listener) { this.mListener = listener; @@ -30,6 +31,11 @@ public class SitePresenter extends Presenter { return this; } + public SitePresenter change(boolean change) { + this.change = change; + return this; + } + public interface OnClickListener { void onTextClick(Site item); @@ -38,9 +44,13 @@ public class SitePresenter extends Presenter { void onFilterClick(Site item); + void onChangeClick(Site item); + boolean onSearchLongClick(Site item); boolean onFilterLongClick(Site item); + + boolean onChangeLongClick(Site item); } @Override @@ -55,17 +65,19 @@ public class SitePresenter extends Presenter { holder.binding.text.setText(item.getName()); holder.binding.text.setFocusable(!search || filter); holder.binding.text.setActivated(item.isActivated()); - holder.binding.filter.setActivated(item.isActivated()); - holder.binding.search.setActivated(item.isActivated()); holder.binding.filter.setImageResource(item.getFilterIcon()); holder.binding.search.setImageResource(item.getSearchIcon()); + holder.binding.change.setImageResource(item.getChangeIcon()); holder.binding.search.setVisibility(search ? View.VISIBLE : View.GONE); holder.binding.filter.setVisibility(filter ? View.VISIBLE : View.GONE); + holder.binding.change.setVisibility(change ? View.VISIBLE : View.GONE); holder.binding.text.setOnClickListener(v -> mListener.onTextClick(item)); holder.binding.search.setOnClickListener(v -> mListener.onSearchClick(item)); holder.binding.filter.setOnClickListener(v -> mListener.onFilterClick(item)); + holder.binding.change.setOnClickListener(v -> mListener.onChangeClick(item)); holder.binding.search.setOnLongClickListener(v -> mListener.onSearchLongClick(item)); holder.binding.filter.setOnLongClickListener(v -> mListener.onFilterLongClick(item)); + holder.binding.change.setOnLongClickListener(v -> mListener.onChangeLongClick(item)); } @Override diff --git a/app/src/leanback/res/layout/adapter_site.xml b/app/src/leanback/res/layout/adapter_site.xml index 99364f402..1142f14c0 100644 --- a/app/src/leanback/res/layout/adapter_site.xml +++ b/app/src/leanback/res/layout/adapter_site.xml @@ -47,4 +47,17 @@ android:src="@drawable/ic_filter_on" app:tint="@color/text" /> + + \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Site.java b/app/src/main/java/com/fongmi/android/tv/bean/Site.java index 6f62274e5..9e7db3448 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Site.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Site.java @@ -15,7 +15,7 @@ import com.google.gson.annotations.SerializedName; import java.util.Collections; import java.util.List; -@Entity(ignoredColumns = {"type", "api", "playUrl", "playerType", "switchable", "ext", "jar", "categories"}) +@Entity(ignoredColumns = {"type", "api", "playUrl", "playerType", "ext", "jar", "categories"}) public class Site { @NonNull @@ -36,8 +36,8 @@ public class Site { private Integer searchable; @SerializedName("filterable") private Integer filterable; - @SerializedName("switchable") - private Integer switchable; + @SerializedName("changeable") + private Integer changeable; @SerializedName("ext") private String ext; @SerializedName("jar") @@ -124,8 +124,12 @@ public class Site { this.filterable = filterable; } - public Integer getSwitchable() { - return switchable == null ? 1 : switchable; + public Integer getChangeable() { + return changeable == null ? 1 : changeable; + } + + public void setChangeable(Integer changeable) { + this.changeable = changeable; } public String getExt() { @@ -156,10 +160,6 @@ public class Site { this.activated = item.equals(this); } - public boolean isSwitchable() { - return getSwitchable() == 1; - } - public boolean isSearchable() { return getSearchable() == 1; } @@ -178,6 +178,15 @@ public class Site { return this; } + public boolean isChangeable() { + return getChangeable() == 1; + } + + public Site setChangeable(boolean changeable) { + setChangeable(changeable ? 1 : 0); + return this; + } + public int getSearchIcon() { return isSearchable() ? R.drawable.ic_search_on : R.drawable.ic_search_off; } @@ -186,6 +195,10 @@ public class Site { return isFilterable() ? R.drawable.ic_filter_on : R.drawable.ic_filter_off; } + public int getChangeIcon() { + return isChangeable() ? R.drawable.ic_change_on : R.drawable.ic_change_off; + } + public static Site find(String key) { return AppDatabase.get().getSiteDao().find(key); } @@ -198,6 +211,7 @@ public class Site { Site item = find(getKey()); if (item == null) return this; setFilterable(item.getFilterable()); + setChangeable(item.getChangeable()); if (getSearchable() != 0) setSearchable(item.getSearchable()); return this; } diff --git a/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java b/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java index 8443b68af..113fc2c37 100644 --- a/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java +++ b/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java @@ -24,7 +24,7 @@ import com.fongmi.android.tv.db.dao.TrackDao; @Database(entities = {Keep.class, Site.class, Track.class, Config.class, History.class}, version = AppDatabase.VERSION) public abstract class AppDatabase extends RoomDatabase { - public static final int VERSION = 18; + public static final int VERSION = 19; public static final String SYMBOL = "@@@"; private static volatile AppDatabase instance; @@ -43,6 +43,7 @@ public abstract class AppDatabase extends RoomDatabase { .addMigrations(MIGRATION_15_16) .addMigrations(MIGRATION_16_17) .addMigrations(MIGRATION_17_18) + .addMigrations(MIGRATION_18_19) .allowMainThreadQueries() .fallbackToDestructiveMigration() .build(); @@ -110,4 +111,11 @@ public abstract class AppDatabase extends RoomDatabase { database.execSQL("ALTER TABLE Config ADD COLUMN parse TEXT DEFAULT NULL"); } }; + + static final Migration MIGRATION_18_19 = new Migration(18, 19) { + @Override + public void migrate(@NonNull SupportSQLiteDatabase database) { + database.execSQL("ALTER TABLE Site ADD COLUMN changeable INTEGER DEFAULT 1"); + } + }; } diff --git a/app/src/main/java/com/fongmi/android/tv/ui/activity/BaseActivity.java b/app/src/main/java/com/fongmi/android/tv/ui/activity/BaseActivity.java index 4de82503d..95c70b487 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/activity/BaseActivity.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/activity/BaseActivity.java @@ -95,7 +95,7 @@ public abstract class BaseActivity extends AppCompatActivity { @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { - setAutoSizeConfig(newConfig); + //setAutoSizeConfig(newConfig); super.onConfigurationChanged(newConfig); Utils.hideSystemUI(this); } diff --git a/app/src/main/res/drawable/ic_change_off.xml b/app/src/main/res/drawable/ic_change_off.xml new file mode 100644 index 000000000..03048044a --- /dev/null +++ b/app/src/main/res/drawable/ic_change_off.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_change_on.xml b/app/src/main/res/drawable/ic_change_on.xml new file mode 100644 index 000000000..639532079 --- /dev/null +++ b/app/src/main/res/drawable/ic_change_on.xml @@ -0,0 +1,10 @@ + + + diff --git a/other/sample/vod/offline.json b/other/sample/vod/offline.json index 7d8dd2b1d..d72d8f471 100644 --- a/other/sample/vod/offline.json +++ b/other/sample/vod/offline.json @@ -8,7 +8,7 @@ "api": "csp_Csp", "searchable": 1, "filterable": 1, - "switchable": 1, + "changeable": 1, "ext": "file://Download/one.json" }, { @@ -18,7 +18,7 @@ "api": "csp_Csp", "searchable": 1, "filterable": 1, - "switchable": 1, + "changeable": 1, "ext": "file://Download/two.json" }, { @@ -28,7 +28,7 @@ "api": "csp_Csp", "searchable": 1, "filterable": 1, - "switchable": 1, + "changeable": 1, "ext": "file://Download/extend.json", "jar": "file://Download/extend.jar" } diff --git a/other/sample/vod/online.json b/other/sample/vod/online.json index c68f01ed7..845874731 100644 --- a/other/sample/vod/online.json +++ b/other/sample/vod/online.json @@ -8,7 +8,7 @@ "api": "csp_Csp", "searchable": 1, "filterable": 1, - "switchable": 1, + "changeable": 1, "ext": "https://github.com/one.json" }, { @@ -18,7 +18,7 @@ "api": "csp_Csp", "searchable": 1, "filterable": 1, - "switchable": 1, + "changeable": 1, "ext": "https://github.com/two.json" }, { @@ -28,7 +28,7 @@ "api": "csp_Csp", "searchable": 1, "filterable": 1, - "switchable": 1, + "changeable": 1, "ext": "https://github.com/extend.json", "jar": "https://github.com/extend.jar" }