[mobile] support receive cast

pull/123/head
FongMi 3 years ago
parent 74f4e59099
commit 9878bdf5da
  1. 14
      app/schemas/com.fongmi.android.tv.db.AppDatabase/22.json
  2. 4
      app/src/leanback/java/com/fongmi/android/tv/Product.java
  3. 27
      app/src/main/java/com/fongmi/android/tv/bean/Device.java
  4. 10
      app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java
  5. 4
      app/src/mobile/java/com/fongmi/android/tv/Product.java
  6. 7
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  7. 20
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/VodFragment.java
  8. 63
      app/src/mobile/res/layout/dialog_receive.xml
  9. 1
      app/src/mobile/res/values-zh-rCN/strings.xml
  10. 1
      app/src/mobile/res/values-zh-rTW/strings.xml
  11. 1
      app/src/mobile/res/values/strings.xml

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

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

@ -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<Device> getAll() {
return AppDatabase.get().getDeviceDao().findAll();
}

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

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

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

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

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<FrameLayout
android:id="@+id/frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:foreground="@drawable/shape_vod">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/image"
android:layout_width="90dp"
android:layout_height="120dp"
android:background="@color/black_10"
android:scaleType="center"
app:shapeAppearanceOverlay="@style/Vod.Grid"
tools:src="@drawable/ic_img_loading" />
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/shape_control">
<ImageView
android:layout_width="36dp"
android:layout_height="36dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:src="@drawable/exo_icon_play" />
</FrameLayout>
</FrameLayout>
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_toEndOf="@+id/frame"
android:ellipsize="end"
android:maxLines="3"
android:textColor="?android:attr/textColorPrimary"
android:textSize="14sp"
tools:text="狂飆" />
<TextView
android:id="@+id/from"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/name"
android:layout_alignStart="@+id/name"
android:layout_marginTop="4dp"
android:singleLine="true"
android:textColor="?android:attr/textColorPrimary"
android:textSize="14sp"
tools:text="Xiaomi 13" />
</RelativeLayout>

@ -25,7 +25,6 @@
<string name="cast_device_empty">找不到装置</string>
<string name="cast_device_offline">装置已离线</string>
<string name="cast_scan">请扫描影视 QRCode 进行绑定</string>
<string name="cast_to">已投放至“<xliff:g name="name">%s</xliff:g></string>
<!-- Control -->
<string name="control_speed">倍速</string>

@ -25,7 +25,6 @@
<string name="cast_device_empty">找不到裝置</string>
<string name="cast_device_offline">裝置已離線</string>
<string name="cast_scan">請掃描影視 QRCode 進行綁定</string>
<string name="cast_to">已投放至「<xliff:g name="name">%s</xliff:g></string>
<!-- Control -->
<string name="control_speed">倍速</string>

@ -25,7 +25,6 @@
<string name="cast_device_empty">Could\'t find a device to cast</string>
<string name="cast_device_offline">Device is offline</string>
<string name="cast_scan">Please scan QR Code to bind</string>
<string name="cast_to">Cast to <xliff:g name="name">%s</xliff:g></string>
<!-- Control -->
<string name="control_speed">Speed</string>

Loading…
Cancel
Save