diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/base/BaseActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/base/BaseActivity.java index 35ff5f107..f17c584ed 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/base/BaseActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/base/BaseActivity.java @@ -100,7 +100,7 @@ public abstract class BaseActivity extends AppCompatActivity { try { if (!customWall()) return; File file = FileUtil.getWall(Setting.getWall()); - if (file.exists() && file.length() > 0) getWindow().setBackgroundDrawable(WallConfig.drawable(file)); + if (file.exists() && file.length() > 0) getWindow().setBackgroundDrawable(Drawable.createFromPath(file.getAbsolutePath())); else getWindow().setBackgroundDrawableResource(ResUtil.getDrawable(file.getName())); } catch (Exception e) { getWindow().setBackgroundDrawableResource(R.drawable.wallpaper_1); @@ -118,9 +118,7 @@ public abstract class BaseActivity extends AppCompatActivity { @Subscribe(threadMode = ThreadMode.MAIN) public void onRefreshEvent(RefreshEvent event) { - if (event.getType() != RefreshEvent.Type.WALL) return; - WallConfig.get().setDrawable(null); - refreshWall(); + if (event.getType() == RefreshEvent.Type.WALL) refreshWall(); } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/api/Decoder.java b/app/src/main/java/com/fongmi/android/tv/api/Decoder.java index b11386ce6..ef5360773 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/Decoder.java +++ b/app/src/main/java/com/fongmi/android/tv/api/Decoder.java @@ -2,6 +2,7 @@ package com.fongmi.android.tv.api; import android.util.Base64; +import androidx.media3.common.util.UriUtil; import com.fongmi.android.tv.utils.UrlUtil; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Asset; @@ -34,8 +35,8 @@ public class Decoder { private static String fix(String url, String data) { if (url.startsWith("file") || url.startsWith("clan") || url.startsWith("assets")) url = UrlUtil.convert(url); - if (data.contains("../")) data = data.replace("../", url.substring(0, url.substring(0, url.split("\\?")[0].lastIndexOf("/")).lastIndexOf("/") + 1)); - if (data.contains("./")) data = data.replace("./", url.substring(0, url.split("\\?")[0].lastIndexOf("/") + 1)); + if (data.contains("../")) data = data.replace("../", UriUtil.resolve(url, "../")); + if (data.contains("./")) data = data.replace("./", UriUtil.resolve(url, "./")); return data; } diff --git a/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java b/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java index 6512899f3..fc3af724c 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java +++ b/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java @@ -240,7 +240,7 @@ public class LiveParser { try { if (line.startsWith("format=")) format = line.split("format=")[1].trim(); if (line.contains("manifest_type=")) format = line.split("manifest_type=")[1].trim(); - if ("mpd".equals(format)) format = MimeTypes.APPLICATION_MPD; + if ("mpd".equals(format) || "dash".equals(format)) format = MimeTypes.APPLICATION_MPD; if ("hls".equals(format)) format = MimeTypes.APPLICATION_M3U8; } catch (Exception e) { format = null; diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java index 9f1c187a3..ef7345b14 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java @@ -24,7 +24,6 @@ import java.io.FileOutputStream; public class WallConfig { - private Drawable drawable; private Config config; private boolean sync; @@ -44,12 +43,6 @@ public class WallConfig { return get().getConfig().getDesc(); } - public static Drawable drawable(File file) { - if (get().drawable != null) return get().drawable; - get().setDrawable(Drawable.createFromPath(file.getAbsolutePath())); - return get().drawable; - } - public static void load(Config config, Callback callback) { get().clear().config(config).load(callback); } @@ -74,10 +67,6 @@ public class WallConfig { return config == null ? Config.wall() : config; } - public void setDrawable(Drawable drawable) { - this.drawable = drawable; - } - public void load(Callback callback) { App.execute(() -> loadConfig(callback)); } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/CastVideo.java b/app/src/main/java/com/fongmi/android/tv/bean/CastVideo.java index 10c66eb15..3f5abca7d 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/CastVideo.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/CastVideo.java @@ -16,7 +16,7 @@ public class CastVideo { } 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.replace(Path.rootPath(), "").replace("://", ""); if (url.startsWith("http://127.0.0.1:7777")) url = Uri.parse(url).getQueryParameter("url"); if (url.contains("127.0.0.1")) url = url.replace("127.0.0.1", Util.getIp()); this.name = name; diff --git a/app/src/main/java/com/fongmi/android/tv/server/Nano.java b/app/src/main/java/com/fongmi/android/tv/server/Nano.java index 7f6bbbadf..ecdf5a13c 100644 --- a/app/src/main/java/com/fongmi/android/tv/server/Nano.java +++ b/app/src/main/java/com/fongmi/android/tv/server/Nano.java @@ -1,7 +1,5 @@ package com.fongmi.android.tv.server; -import android.util.Base64; - import com.fongmi.android.tv.api.config.LiveConfig; import com.fongmi.android.tv.api.config.VodConfig; import com.fongmi.android.tv.bean.Device; diff --git a/app/src/main/java/com/fongmi/android/tv/utils/IDMUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/IDMUtil.java index 68b16ebd9..cd45049ca 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/IDMUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/IDMUtil.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.text.TextUtils; @@ -67,48 +68,54 @@ public class IDMUtil { } private static boolean downloadFilesInternal(@NonNull Activity activity, @Nullable Map urlAndFileNames, @Nullable String url, @Nullable String referer, @Nullable String fileName, @Nullable String userAgent, @Nullable String cookies, @Nullable Map headers, boolean secureUri, boolean askUserToInstall1DMIfNotInstalled){ - int requiredVersionCode = secureUri ? SECURE_URI_1DM_SUPPORT_MIN_VERSION_CODE : !isEmpty(urlAndFileNames) || !isEmpty(headers) ? HEADERS_AND_MULTIPLE_LINKS_1DM_SUPPORT_MIN_VERSION_CODE : 0; - String packageName = ""; try { - packageName = get1DMInstalledPackageName(requiredVersionCode, askUserToInstall1DMIfNotInstalled); - } catch (Exception e) { - return false; - } - if (TextUtils.isEmpty(packageName)) return false; - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setComponent(new ComponentName(packageName, DOWNLOADER_ACTIVITY_NAME_1DM)); - intent.putExtra(EXTRA_SECURE_URI, secureUri); - if (isEmpty(urlAndFileNames)) { - intent.setData(Uri.parse(url)); - if (!TextUtils.isEmpty(referer)) intent.putExtra(EXTRA_REFERER, referer); - if (!TextUtils.isEmpty(userAgent)) intent.putExtra(EXTRA_USERAGENT, userAgent); - if (!TextUtils.isEmpty(cookies)) intent.putExtra(EXTRA_COOKIES, cookies); - if (!TextUtils.isEmpty(fileName)) intent.putExtra(EXTRA_FILENAME, fileName); - } else { - ArrayList urls = new ArrayList<>(urlAndFileNames.size()); - ArrayList names = new ArrayList<>(urlAndFileNames.size()); - for (Map.Entry entry : urlAndFileNames.entrySet()) { - if (TextUtils.isEmpty(entry.getKey())) continue; - urls.add(entry.getKey()); - names.add(entry.getValue()); + int requiredVersionCode = secureUri ? SECURE_URI_1DM_SUPPORT_MIN_VERSION_CODE : !isEmpty(urlAndFileNames) || !isEmpty(headers) ? HEADERS_AND_MULTIPLE_LINKS_1DM_SUPPORT_MIN_VERSION_CODE : 0; + String packageName = ""; + try { + packageName = get1DMInstalledPackageName(requiredVersionCode, askUserToInstall1DMIfNotInstalled); + } catch (Exception e) { + return false; + } + if (TextUtils.isEmpty(packageName)) return false; + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setComponent(new ComponentName(packageName, DOWNLOADER_ACTIVITY_NAME_1DM)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) intent.addCategory(Intent.CATEGORY_BROWSABLE); + intent.putExtra(EXTRA_SECURE_URI, secureUri); + if (isEmpty(urlAndFileNames)) { + intent.setData(Uri.parse(url)); + if (!TextUtils.isEmpty(referer)) intent.putExtra(EXTRA_REFERER, referer); + if (!TextUtils.isEmpty(userAgent)) intent.putExtra(EXTRA_USERAGENT, userAgent); + if (!TextUtils.isEmpty(cookies)) intent.putExtra(EXTRA_COOKIES, cookies); + if (!TextUtils.isEmpty(fileName)) intent.putExtra(EXTRA_FILENAME, fileName); + } else { + ArrayList urls = new ArrayList<>(urlAndFileNames.size()); + ArrayList names = new ArrayList<>(urlAndFileNames.size()); + for (Map.Entry entry : urlAndFileNames.entrySet()) { + if (TextUtils.isEmpty(entry.getKey())) continue; + urls.add(entry.getKey()); + names.add(entry.getValue()); + } + if (urls.size() > 0) { + intent.putExtra(EXTRA_URL_LIST, urls); + intent.putExtra(EXTRA_URL_FILENAME_LIST, names); + intent.setData(Uri.parse(urls.get(0))); + } } - if (urls.size() > 0) { - intent.putExtra(EXTRA_URL_LIST, urls); - intent.putExtra(EXTRA_URL_FILENAME_LIST, names); - intent.setData(Uri.parse(urls.get(0))); + if (!isEmpty(headers)) { + Bundle extra = new Bundle(); + for (Map.Entry entry : headers.entrySet()) extra.putString(entry.getKey(), entry.getValue()); + intent.putExtra(EXTRA_HEADERS, extra); } + activity.startActivity(intent); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; } - if (!isEmpty(headers)) { - Bundle extra = new Bundle(); - for (Map.Entry entry : headers.entrySet()) extra.putString(entry.getKey(), entry.getValue()); - intent.putExtra(EXTRA_HEADERS, extra); - } - activity.startActivity(intent); - return true; } public static void install1DM(String packageName, boolean update) { - + } private static boolean isEmpty(Map map) { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index f8f308de0..5773e1096 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -479,6 +479,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo hideSheet(); }); mViewModel.ep.observe(this, episode -> { + Notify.progress(this); Download.get().title(mBinding.name.getText() + "-" + episode.getName()); mViewModel.download(getKey(), getFlag().getFlag(), episode.getUrl()); }); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseActivity.java index b95267b5d..c4141186a 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/base/BaseActivity.java @@ -2,6 +2,7 @@ package com.fongmi.android.tv.ui.base; import android.app.Activity; import android.graphics.Color; +import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; import android.view.DisplayCutout; @@ -15,7 +16,6 @@ import androidx.viewbinding.ViewBinding; import com.fongmi.android.tv.R; import com.fongmi.android.tv.Setting; -import com.fongmi.android.tv.api.config.WallConfig; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.utils.FileUtil; import com.fongmi.android.tv.utils.ResUtil; @@ -120,7 +120,7 @@ public abstract class BaseActivity extends AppCompatActivity { try { if (!customWall()) return; File file = FileUtil.getWall(Setting.getWall()); - if (file.exists() && file.length() > 0) getWindow().setBackgroundDrawable(WallConfig.drawable(file)); + if (file.exists() && file.length() > 0) getWindow().setBackgroundDrawable(Drawable.createFromPath(file.getAbsolutePath())); else getWindow().setBackgroundDrawableResource(ResUtil.getDrawable(file.getName())); } catch (Exception e) { getWindow().setBackgroundDrawableResource(R.drawable.wallpaper_1); @@ -129,9 +129,7 @@ public abstract class BaseActivity extends AppCompatActivity { @Subscribe(threadMode = ThreadMode.MAIN) public void onRefreshEvent(RefreshEvent event) { - if (event.getType() != RefreshEvent.Type.WALL) return; - WallConfig.get().setDrawable(null); - refreshWall(); + if (event.getType() == RefreshEvent.Type.WALL) refreshWall(); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java index 49269e5ec..cd7d07403 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/CastDialog.java @@ -78,7 +78,7 @@ public class CastDialog extends BaseDialog implements DeviceAdapter.OnClickListe String id = history.getVodId(); String fd = history.getVodId(); if (fd.startsWith("/")) fd = Server.get().getAddress() + "/file" + fd.replace(Path.rootPath(), ""); - if (fd.startsWith("file")) fd = Server.get().getAddress() + "/" + fd.replace(Path.rootPath(), ""); + if (fd.startsWith("file")) fd = Server.get().getAddress() + "/" + fd.replace(Path.rootPath(), "").replace("://", ""); if (fd.startsWith("http://127.0.0.1:7777")) fd = Uri.parse(fd).getQueryParameter("url"); if (fd.contains("127.0.0.1")) fd = fd.replace("127.0.0.1", Util.getIp()); body.add("history", history.toString().replace(id, fd)); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/EpisodeFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/EpisodeFragment.java index 57c1c104c..35b2ed7e6 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/EpisodeFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/EpisodeFragment.java @@ -77,8 +77,7 @@ public class EpisodeFragment extends BaseFragment implements EpisodeAdapter.OnCl @Override public void onItemClick(Episode item) { - boolean download = getDownload(); - if (download) mViewModel.setDownload(item); + if (getDownload()) mViewModel.setDownload(item); else mViewModel.setEpisode(item); } }