diff --git a/app/src/leanback/AndroidManifest.xml b/app/src/leanback/AndroidManifest.xml
index 3d3790a88..2cade798b 100644
--- a/app/src/leanback/AndroidManifest.xml
+++ b/app/src/leanback/AndroidManifest.xml
@@ -30,6 +30,7 @@
android:name=".ui.activity.HomeActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
android:exported="true"
+ android:launchMode="singleTask"
android:screenOrientation="sensorLandscape">
@@ -52,6 +53,7 @@
+
diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
index 7923c9071..c57e0a343 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
@@ -22,6 +22,7 @@ import com.fongmi.android.tv.Updater;
import com.fongmi.android.tv.api.ApiConfig;
import com.fongmi.android.tv.api.LiveConfig;
import com.fongmi.android.tv.api.WallConfig;
+import com.fongmi.android.tv.bean.Config;
import com.fongmi.android.tv.bean.Func;
import com.fongmi.android.tv.bean.History;
import com.fongmi.android.tv.bean.Result;
@@ -46,6 +47,7 @@ import com.fongmi.android.tv.ui.presenter.HistoryPresenter;
import com.fongmi.android.tv.ui.presenter.ProgressPresenter;
import com.fongmi.android.tv.ui.presenter.VodPresenter;
import com.fongmi.android.tv.utils.Clock;
+import com.fongmi.android.tv.utils.FileChooser;
import com.fongmi.android.tv.utils.Notify;
import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.Utils;
@@ -104,7 +106,11 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
if (Intent.ACTION_SEND.equals(intent.getAction())) {
DetailActivity.push(this, Uri.parse(intent.getStringExtra(Intent.EXTRA_TEXT)));
} else if (Intent.ACTION_VIEW.equals(intent.getAction()) && intent.getData() != null) {
- DetailActivity.push(this, intent.getData());
+ if ("text/plain".equals(intent.getType()) || intent.getData().getPath().endsWith(".m3u")) {
+ loadLive("file:/" + FileChooser.getPathFromUri(this, intent.getData()));
+ } else {
+ DetailActivity.push(this, intent.getData());
+ }
}
}
@@ -161,6 +167,15 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
};
}
+ private void loadLive(String url) {
+ LiveConfig.load(Config.find(url, 1), new Callback() {
+ @Override
+ public void success() {
+ LiveActivity.start(getActivity());
+ }
+ });
+ }
+
private void setFocus() {
mBinding.recycler.requestFocus();
App.post(() -> mBinding.title.setFocusable(true), 500);
diff --git a/app/src/main/java/com/fongmi/android/tv/api/JarLoader.java b/app/src/main/java/com/fongmi/android/tv/api/JarLoader.java
index 7e1a82c76..c7bdfe2af 100644
--- a/app/src/main/java/com/fongmi/android/tv/api/JarLoader.java
+++ b/app/src/main/java/com/fongmi/android/tv/api/JarLoader.java
@@ -3,6 +3,7 @@ package com.fongmi.android.tv.api;
import android.content.Context;
import com.fongmi.android.tv.App;
+import com.fongmi.android.tv.utils.Utils;
import com.github.catvod.crawler.Spider;
import com.github.catvod.crawler.SpiderNull;
import com.github.catvod.net.OkHttp;
@@ -91,7 +92,7 @@ public class JarLoader {
} else if (jar.startsWith("file")) {
load(key, Path.local(jar));
} else if (!jar.isEmpty()) {
- parseJar(key, com.fongmi.android.tv.utils.Utils.convert(ApiConfig.getUrl(), jar));
+ parseJar(key, Utils.convert(ApiConfig.getUrl(), jar));
}
}
diff --git a/app/src/mobile/AndroidManifest.xml b/app/src/mobile/AndroidManifest.xml
index e22b0b211..7d047aed0 100644
--- a/app/src/mobile/AndroidManifest.xml
+++ b/app/src/mobile/AndroidManifest.xml
@@ -16,6 +16,7 @@
android:name=".ui.activity.MainActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
android:exported="true"
+ android:launchMode="singleTask"
android:screenOrientation="fullUser"
android:windowSoftInputMode="adjustPan">
@@ -37,6 +38,7 @@
+
diff --git a/app/src/mobile/java/com/fongmi/android/tv/cast/CastVideo.java b/app/src/mobile/java/com/fongmi/android/tv/cast/CastVideo.java
index 9456b6480..390ebe49e 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/cast/CastVideo.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/cast/CastVideo.java
@@ -4,7 +4,6 @@ import androidx.annotation.NonNull;
import com.android.cast.dlna.core.ICast;
import com.fongmi.android.tv.server.Server;
-import com.github.catvod.utils.Path;
import java.util.UUID;
@@ -18,7 +17,7 @@ public class CastVideo implements ICast {
}
private CastVideo(String name, String url) {
- if (url.startsWith("file")) url = Server.get().getAddress() + "/" + url.replace(Path.rootPath(), "");
+ if (url.startsWith("file")) url = Server.get().getAddress() + "/" + url;
if (url.contains("127.0.0.1")) url = url.replace("127.0.0.1", Server.get().getIP());
this.name = name;
this.url = url;
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java
index 9af32bd9c..f358ae29e 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/MainActivity.java
@@ -16,6 +16,7 @@ import com.fongmi.android.tv.Updater;
import com.fongmi.android.tv.api.ApiConfig;
import com.fongmi.android.tv.api.LiveConfig;
import com.fongmi.android.tv.api.WallConfig;
+import com.fongmi.android.tv.bean.Config;
import com.fongmi.android.tv.databinding.ActivityMainBinding;
import com.fongmi.android.tv.event.RefreshEvent;
import com.fongmi.android.tv.event.ServerEvent;
@@ -27,6 +28,7 @@ import com.fongmi.android.tv.ui.custom.FragmentStateManager;
import com.fongmi.android.tv.ui.fragment.SettingFragment;
import com.fongmi.android.tv.ui.fragment.SettingPlayerFragment;
import com.fongmi.android.tv.ui.fragment.VodFragment;
+import com.fongmi.android.tv.utils.FileChooser;
import com.fongmi.android.tv.utils.Notify;
import com.google.android.material.navigation.NavigationBarView;
@@ -67,7 +69,11 @@ public class MainActivity extends BaseActivity implements NavigationBarView.OnIt
if (Intent.ACTION_SEND.equals(intent.getAction())) {
DetailActivity.push(this, Uri.parse(intent.getStringExtra(Intent.EXTRA_TEXT)));
} else if (Intent.ACTION_VIEW.equals(intent.getAction()) && intent.getData() != null) {
- DetailActivity.push(this, intent.getData());
+ if ("text/plain".equals(intent.getType()) || intent.getData().getPath().endsWith(".m3u")) {
+ loadLive("file:/" + FileChooser.getPathFromUri(this, intent.getData()));
+ } else {
+ DetailActivity.push(this, intent.getData());
+ }
}
}
@@ -108,6 +114,15 @@ public class MainActivity extends BaseActivity implements NavigationBarView.OnIt
};
}
+ private void loadLive(String url) {
+ LiveConfig.load(Config.find(url, 1), new Callback() {
+ @Override
+ public void success() {
+ openLive();
+ }
+ });
+ }
+
private void setNavigation() {
mBinding.navigation.getMenu().findItem(R.id.vod).setVisible(true);
mBinding.navigation.getMenu().findItem(R.id.setting).setVisible(true);
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/CastDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/CastDialog.java
index 53ca90693..91b80ffbe 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/CastDialog.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/dialog/CastDialog.java
@@ -30,7 +30,6 @@ import com.fongmi.android.tv.ui.activity.ScanActivity;
import com.fongmi.android.tv.ui.adapter.DeviceAdapter;
import com.fongmi.android.tv.utils.Notify;
import com.github.catvod.net.OkHttp;
-import com.github.catvod.utils.Path;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import org.greenrobot.eventbus.EventBus;
@@ -68,7 +67,7 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe
public CastDialog history(History history) {
String id = history.getVodId();
- String fd = id.startsWith("file") ? Server.get().getAddress() + "/" + id.replace(Path.rootPath(), "") : id;
+ String fd = id.startsWith("file") ? Server.get().getAddress() + "/" + id : id;
if (fd.contains("127.0.0.1")) fd = fd.replace("127.0.0.1", Server.get().getIP());
body.add("history", history.toString().replace(id, fd));
return this;
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java
index be41cbe07..418e0f547 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/SettingFragment.java
@@ -40,7 +40,6 @@ import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.Utils;
import com.github.catvod.bean.Doh;
import com.github.catvod.net.OkHttp;
-import com.github.catvod.utils.Path;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.permissionx.guolindev.PermissionX;
@@ -343,6 +342,6 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != Activity.RESULT_OK || requestCode != FileChooser.REQUEST_PICK_FILE) return;
- setConfig(Config.find("file:/" + FileChooser.getPathFromUri(getContext(), data.getData()).replace(Path.rootPath(), ""), type));
+ setConfig(Config.find("file:/" + FileChooser.getPathFromUri(getContext(), data.getData()), type));
}
}
diff --git a/catvod/src/main/java/com/github/catvod/utils/Path.java b/catvod/src/main/java/com/github/catvod/utils/Path.java
index 715e59b82..1e953897d 100644
--- a/catvod/src/main/java/com/github/catvod/utils/Path.java
+++ b/catvod/src/main/java/com/github/catvod/utils/Path.java
@@ -111,8 +111,8 @@ public class Path {
}
public static File local(String path) {
- if (path.contains(rootPath())) return new File(path);
- return new File(path.replace("file:/", rootPath()));
+ File file = new File(path.replace("file:/", root().getAbsolutePath()));
+ return file.exists() ? file : new File(path.replace("file:/", ""));
}
public static String asset(String fileName) {