Support changeable setting

pull/123/head
FongMi 3 years ago
parent f9fb6d6d0e
commit 8c22759da5
  1. 2
      README.md
  2. 4
      app/build.gradle
  3. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  4. 21
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SiteDialog.java
  5. 16
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/SitePresenter.java
  6. 13
      app/src/leanback/res/layout/adapter_site.xml
  7. 32
      app/src/main/java/com/fongmi/android/tv/bean/Site.java
  8. 10
      app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java
  9. 2
      app/src/main/java/com/fongmi/android/tv/ui/activity/BaseActivity.java
  10. 10
      app/src/main/res/drawable/ic_change_off.xml
  11. 10
      app/src/main/res/drawable/ic_change_on.xml
  12. 6
      other/sample/vod/offline.json
  13. 6
      other/sample/vod/online.json

@ -13,7 +13,7 @@ https://github.com/CatVodTVOfficial/CatVodTVJarLoader
<pre><code>searchable:搜索 (0:關閉、1:啟用)
filterable:篩選 (0:關閉、1:啟用)
switchable:換源 (0:關閉、1:啟用)
changeable:換源 (0:關閉、1:啟用)
playerType:播放器 (1:IJK、2:EXO)</code></pre>
### 直播欄位

@ -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" }
}

@ -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));
}
}

@ -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;
}
}

@ -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

@ -47,4 +47,17 @@
android:src="@drawable/ic_filter_on"
app:tint="@color/text" />
<ImageView
android:id="@+id/change"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginStart="12dp"
android:background="@drawable/selector_text"
android:focusable="true"
android:focusableInTouchMode="true"
android:padding="8dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_change_on"
app:tint="@color/text" />
</LinearLayout>

@ -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;
}

@ -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");
}
};
}

@ -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);
}

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="#FFFFFF"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:fillColor="#FFFFFF"
android:pathData="M40.45,45.2 L32.65,37.4Q31.65,38.05 30.7,38.475Q29.75,38.9 28.7,39.25V36.1Q29.15,35.95 29.6,35.725Q30.05,35.5 30.5,35.25L12.8,17.55Q11.85,19.1 11.425,20.825Q11,22.55 11,24.15Q11,27.05 12.075,29.425Q13.15,31.8 15.35,33.65L16.85,34.7V28.5H19.85V40H8.35V37H14.85L14.1,36.4Q10.7,33.7 9.325,30.65Q7.95,27.6 8,24.15Q8.05,21.45 8.75,19.3Q9.45,17.15 10.65,15.4L2.85,7.6L4.9,5.55L42.5,43.15ZM36.85,33.4 L34.75,31.3Q35.8,29.65 36.4,27.8Q37,25.95 37,23.85Q37,21.55 35.875,19.075Q34.75,16.6 32.75,14.6L31.3,13.3V19.5H28.3V8H39.8V11H33.25L34,11.7Q37.2,14.7 38.6,17.9Q40,21.1 40,23.85Q40,26.55 39.225,28.9Q38.45,31.25 36.85,33.4ZM16.7,13.25 L14.65,11.2Q15.75,10.35 16.925,9.775Q18.1,9.2 19.35,8.8V11.9Q18.7,12.15 18.025,12.5Q17.35,12.85 16.7,13.25Z" />
</vector>

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="#FFFFFF"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:fillColor="#FFFFFF"
android:pathData="M8.35,40V37H14.85L14.1,36.4Q10.9,33.85 9.45,30.85Q8,27.85 8,24.15Q8,18.85 11.125,14.625Q14.25,10.4 19.35,8.8V11.9Q15.6,13.35 13.3,16.725Q11,20.1 11,24.15Q11,27.3 12.175,29.625Q13.35,31.95 15.35,33.65L16.85,34.7V28.5H19.85V40ZM28.7,39.25V36.1Q32.5,34.65 34.75,31.275Q37,27.9 37,23.85Q37,21.45 35.825,18.975Q34.65,16.5 32.75,14.6L31.3,13.3V19.5H28.3V8H39.8V11H33.25L34,11.7Q37,14.5 38.5,17.7Q40,20.9 40,23.85Q40,29.15 36.9,33.4Q33.8,37.65 28.7,39.25Z" />
</vector>

@ -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"
}

@ -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"
}

Loading…
Cancel
Save