From 9878bdf5dac85029ab30b3bf64667fcf53e3d33d Mon Sep 17 00:00:00 2001 From: FongMi Date: Mon, 10 Apr 2023 11:55:32 +0800 Subject: [PATCH] [mobile] support receive cast --- .../{21.json => 22.json} | 14 +++-- .../java/com/fongmi/android/tv/Product.java | 4 ++ .../com/fongmi/android/tv/bean/Device.java | 27 +++++++- .../com/fongmi/android/tv/db/AppDatabase.java | 10 ++- .../java/com/fongmi/android/tv/Product.java | 4 ++ .../tv/ui/activity/DetailActivity.java | 7 ++- .../android/tv/ui/fragment/VodFragment.java | 20 ++++-- app/src/mobile/res/layout/dialog_receive.xml | 63 +++++++++++++++++++ app/src/mobile/res/values-zh-rCN/strings.xml | 1 - app/src/mobile/res/values-zh-rTW/strings.xml | 1 - app/src/mobile/res/values/strings.xml | 1 - 11 files changed, 136 insertions(+), 16 deletions(-) rename app/schemas/com.fongmi.android.tv.db.AppDatabase/{21.json => 22.json} (97%) create mode 100644 app/src/mobile/res/layout/dialog_receive.xml diff --git a/app/schemas/com.fongmi.android.tv.db.AppDatabase/21.json b/app/schemas/com.fongmi.android.tv.db.AppDatabase/22.json similarity index 97% rename from app/schemas/com.fongmi.android.tv.db.AppDatabase/21.json rename to app/schemas/com.fongmi.android.tv.db.AppDatabase/22.json index deca6c0fd..3dcc90640 100644 --- a/app/schemas/com.fongmi.android.tv.db.AppDatabase/21.json +++ b/app/schemas/com.fongmi.android.tv.db.AppDatabase/22.json @@ -1,8 +1,8 @@ { "formatVersion": 1, "database": { - "version": 21, - "identityHash": "f36d8a4b7379ebede24a22f085c33856", + "version": 22, + "identityHash": "0d186de42a589253f12a86254e20636e", "entities": [ { "tableName": "Keep", @@ -259,7 +259,7 @@ }, { "tableName": "Device", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `uuid` TEXT, `name` TEXT, `ip` TEXT)", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `uuid` TEXT, `name` TEXT, `ip` TEXT, `type` INTEGER NOT NULL)", "fields": [ { "fieldPath": "id", @@ -284,6 +284,12 @@ "columnName": "ip", "affinity": "TEXT", "notNull": false + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "INTEGER", + "notNull": true } ], "primaryKey": { @@ -426,7 +432,7 @@ "views": [], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'f36d8a4b7379ebede24a22f085c33856')" + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '0d186de42a589253f12a86254e20636e')" ] } } \ No newline at end of file diff --git a/app/src/leanback/java/com/fongmi/android/tv/Product.java b/app/src/leanback/java/com/fongmi/android/tv/Product.java index 64a956c39..335f115eb 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/Product.java +++ b/app/src/leanback/java/com/fongmi/android/tv/Product.java @@ -12,6 +12,10 @@ import java.io.ByteArrayOutputStream; public class Product { + public static int getDeviceType() { + return 0; + } + public static int getColumn() { return Math.abs(Prefers.getSize() - 7); } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Device.java b/app/src/main/java/com/fongmi/android/tv/bean/Device.java index 173df886f..0ad6f85a7 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Device.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Device.java @@ -8,6 +8,7 @@ import androidx.room.Entity; import androidx.room.Index; import androidx.room.PrimaryKey; +import com.fongmi.android.tv.Product; import com.fongmi.android.tv.db.AppDatabase; import com.fongmi.android.tv.server.Server; import com.fongmi.android.tv.utils.Utils; @@ -28,12 +29,15 @@ public class Device { private String name; @SerializedName("ip") private String ip; + @SerializedName("type") + private int type; public static Device get() { Device device = new Device(); device.setUuid(Utils.getDeviceId()); device.setName(Utils.getDeviceName()); device.setIp(Server.get().getAddress()); + device.setType(Product.getDeviceType()); return device; } @@ -76,8 +80,24 @@ public class Device { this.ip = ip; } + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public boolean isLeanback() { + return getType() == 0; + } + + public boolean isMobile() { + return getType() == 1; + } + public boolean isCast() { - return getIp().isEmpty(); + return getType() == 2; } public String getHost() { @@ -89,6 +109,11 @@ public class Device { return this; } + public Device delete() { + if (getId() != null) AppDatabase.get().getDeviceDao().delete(getId()); + return this; + } + public static List getAll() { return AppDatabase.get().getDeviceDao().findAll(); } 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 8848d4339..c3b5dd43f 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 @@ -26,7 +26,7 @@ import com.fongmi.android.tv.db.dao.TrackDao; @Database(entities = {Keep.class, Site.class, Track.class, Config.class, Device.class, History.class}, version = AppDatabase.VERSION) public abstract class AppDatabase extends RoomDatabase { - public static final int VERSION = 21; + public static final int VERSION = 22; public static final String SYMBOL = "@@@"; private static volatile AppDatabase instance; @@ -48,6 +48,7 @@ public abstract class AppDatabase extends RoomDatabase { .addMigrations(MIGRATION_18_19) .addMigrations(MIGRATION_19_20) .addMigrations(MIGRATION_20_21) + .addMigrations(MIGRATION_21_22) .allowMainThreadQueries() .fallbackToDestructiveMigration() .build(); @@ -139,4 +140,11 @@ public abstract class AppDatabase extends RoomDatabase { database.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_Device_uuid_name` ON `Device` (`uuid`, `name`)"); } }; + + static final Migration MIGRATION_21_22 = new Migration(21, 22) { + @Override + public void migrate(@NonNull SupportSQLiteDatabase database) { + database.execSQL("ALTER TABLE Device ADD COLUMN type INTEGER DEFAULT 0 NOT NULL"); + } + }; } diff --git a/app/src/mobile/java/com/fongmi/android/tv/Product.java b/app/src/mobile/java/com/fongmi/android/tv/Product.java index 086171997..b71eb270c 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/Product.java +++ b/app/src/mobile/java/com/fongmi/android/tv/Product.java @@ -12,6 +12,10 @@ import java.io.ByteArrayOutputStream; public class Product { + public static int getDeviceType() { + return 1; + } + public static int getColumn() { return Math.abs(Prefers.getSize() - 5); } 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 951b29036..6c1372cef 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 @@ -115,6 +115,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis else PermissionX.init(activity).permissions(Manifest.permission.WRITE_EXTERNAL_STORAGE).request((allGranted, grantedList, deniedList) -> start(activity, "push_agent", "file://" + url, name)); } + public static void cast(Activity activity, History history) { + start(activity, history.getSiteKey(), history.getVodId(), history.getVodName()); + } + public static void push(Activity activity, String url) { start(activity, "push_agent", url, url); } @@ -1041,7 +1045,8 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis } @Override - public void onCastSuccess() { + public void onCastTo(boolean mobile) { + if (mobile) return; checkPlayImg(false); mPlayers.pause(); } 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 3c9afe012..6f1400306 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 @@ -22,6 +22,7 @@ import com.fongmi.android.tv.bean.Hot; import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.bean.Site; 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.FilterCallback; import com.fongmi.android.tv.impl.SiteCallback; @@ -36,6 +37,7 @@ import com.fongmi.android.tv.ui.adapter.TypeAdapter; import com.fongmi.android.tv.ui.base.BaseFragment; import com.fongmi.android.tv.ui.custom.dialog.FilterDialog; import com.fongmi.android.tv.ui.custom.dialog.LinkDialog; +import com.fongmi.android.tv.ui.custom.dialog.ReceiveDialog; import com.fongmi.android.tv.ui.custom.dialog.SiteDialog; import com.fongmi.android.tv.utils.FileChooser; import com.fongmi.android.tv.utils.Prefers; @@ -206,6 +208,14 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal mBinding.progress.getRoot().setVisibility(View.GONE); } + private void homeContent() { + showProgress(); + setFabVisible(0); + mAdapter.clear(); + mViewModel.homeContent(); + mBinding.pager.setAdapter(new PageAdapter(getChildFragmentManager())); + } + @Subscribe(threadMode = ThreadMode.MAIN) public void onRefreshEvent(RefreshEvent event) { switch (event.getType()) { @@ -219,12 +229,10 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal } } - private void homeContent() { - showProgress(); - setFabVisible(0); - mAdapter.clear(); - mViewModel.homeContent(); - mBinding.pager.setAdapter(new PageAdapter(getChildFragmentManager())); + @Subscribe(threadMode = ThreadMode.MAIN) + public void onCastEvent(CastEvent event) { + for (Fragment fragment : getChildFragmentManager().getFragments()) if (fragment instanceof BottomSheetDialogFragment) return; + ReceiveDialog.create().event(event).show(getChildFragmentManager(), null); } @Override diff --git a/app/src/mobile/res/layout/dialog_receive.xml b/app/src/mobile/res/layout/dialog_receive.xml new file mode 100644 index 000000000..d25a3889e --- /dev/null +++ b/app/src/mobile/res/layout/dialog_receive.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/mobile/res/values-zh-rCN/strings.xml b/app/src/mobile/res/values-zh-rCN/strings.xml index 5adc88e8d..c181d8808 100644 --- a/app/src/mobile/res/values-zh-rCN/strings.xml +++ b/app/src/mobile/res/values-zh-rCN/strings.xml @@ -25,7 +25,6 @@ 找不到装置 装置已离线 请扫描影视 QRCode 进行绑定 - 已投放至“%s 倍速 diff --git a/app/src/mobile/res/values-zh-rTW/strings.xml b/app/src/mobile/res/values-zh-rTW/strings.xml index 78f2c5297..2e83d417c 100644 --- a/app/src/mobile/res/values-zh-rTW/strings.xml +++ b/app/src/mobile/res/values-zh-rTW/strings.xml @@ -25,7 +25,6 @@ 找不到裝置 裝置已離線 請掃描影視 QRCode 進行綁定 - 已投放至「%s 倍速 diff --git a/app/src/mobile/res/values/strings.xml b/app/src/mobile/res/values/strings.xml index 1569cb550..45821fdeb 100644 --- a/app/src/mobile/res/values/strings.xml +++ b/app/src/mobile/res/values/strings.xml @@ -25,7 +25,6 @@ Could\'t find a device to cast Device is offline Please scan QR Code to bind - Cast to %s Speed