diff --git a/app/build.gradle b/app/build.gradle index d10eea404..c87efb219 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.fongmi.android.tv" minSdk 21 targetSdk 28 - versionCode 231 - versionName "0329" + versionCode 232 + versionName "2.3.2" javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/MenuDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/MenuDialog.java index 038e307f0..a4d045392 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/MenuDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/MenuDialog.java @@ -50,6 +50,14 @@ public class MenuDialog implements MenuAdapter.OnClickListener { initView(); } + private int getCount() { + return 2; + } + + private float getWidth() { + return 0.4f + (getCount() - 1) * 0.2f; + } + private void initView() { setRecyclerView(); setDialog(); @@ -61,14 +69,14 @@ public class MenuDialog implements MenuAdapter.OnClickListener { binding.recycler.setHasFixedSize(true); binding.recycler.setItemAnimator(null); binding.recycler.addItemDecoration(new SpaceItemDecoration(1, 16)); - binding.recycler.setLayoutManager(new GridLayoutManager(dialog.getContext(), 1)); + binding.recycler.setLayoutManager(new GridLayoutManager(dialog.getContext(), getCount())); binding.recycler.post(() -> binding.recycler.scrollToPosition(0)); } private void setDialog() { WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); - params.width = (int) (ResUtil.getScreenWidth() * 0.4f); + params.width = (int) (ResUtil.getScreenWidth() * getWidth()); dialog.getWindow().setAttributes(params); dialog.getWindow().setDimAmount(0); dialog.show(); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/MenuKeyDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/MenuKeyDialog.java index dff4c9537..6dbbc3983 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/MenuKeyDialog.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/dialog/MenuKeyDialog.java @@ -45,6 +45,14 @@ public class MenuKeyDialog implements MenuAdapter.OnClickListener { initView(); } + private int getCount() { + return 3; + } + + private float getWidth() { + return 0.4f + (getCount() - 1) * 0.2f; + } + private void initView() { setRecyclerView(); setDialog(); @@ -55,14 +63,14 @@ public class MenuKeyDialog implements MenuAdapter.OnClickListener { binding.recycler.setHasFixedSize(true); binding.recycler.setItemAnimator(null); binding.recycler.addItemDecoration(new SpaceItemDecoration(1, 16)); - binding.recycler.setLayoutManager(new GridLayoutManager(dialog.getContext(), 1)); + binding.recycler.setLayoutManager(new GridLayoutManager(dialog.getContext(), getCount())); binding.recycler.post(() -> binding.recycler.scrollToPosition(Setting.getHomeMenuKey())); } private void setDialog() { WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); - params.width = (int) (ResUtil.getScreenWidth() * 0.4f); + params.width = (int) (ResUtil.getScreenWidth() * getWidth()); dialog.getWindow().setAttributes(params); dialog.getWindow().setDimAmount(0); dialog.show(); diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java index 4c2ffd7d9..f7d4e3d85 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java @@ -177,7 +177,7 @@ public class LiveConfig { private int[] getKeep(List items) { String[] splits = Setting.getKeep().split(AppDatabase.SYMBOL); - if (splits.length < 4 || !home.getName().equals(splits[0])) return new int[]{1, 0}; + if (splits.length < 4 || !getHome().getName().equals(splits[0])) return new int[]{1, 0}; for (int i = 0; i < items.size(); i++) { Group group = items.get(i); if (group.getName().equals(splits[1])) { diff --git a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java index 8d41fe079..99b939a9b 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomWebView.java @@ -77,6 +77,11 @@ public class CustomWebView extends WebView { setWebViewClient(webViewClient()); } + private void addView() { + ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(1, 1); + if (App.activity() != null) App.activity().addContentView(this, params); + } + public CustomWebView start(String key, String from, Map headers, String url, String click, ParseCallback callback, boolean detect) { App.post(timer, Constant.TIMEOUT_PARSE_WEB); this.callback = callback; @@ -84,6 +89,7 @@ public class CustomWebView extends WebView { this.click = click; this.from = from; this.key = key; + addView(); start(url, headers); return this; } @@ -142,7 +148,7 @@ public class CustomWebView extends WebView { private void showDialog() { if (dialog != null || App.activity() == null) return; - if (getParent() != null) ((ViewGroup) getParent()).removeView(this); + removeView(); dialog = new AlertDialog.Builder(App.activity()).setView(this).show(); } @@ -200,8 +206,13 @@ public class CustomWebView extends WebView { callback = null; } + private void removeView() { + if (getParent() != null) ((ViewGroup) getParent()).removeView(this); + } + public void stop(boolean error) { hideDialog(); + removeView(); stopLoading(); loadUrl(BLANK); App.removeCallbacks(timer); diff --git a/app/src/main/java/com/fongmi/android/tv/utils/M3U8.java b/app/src/main/java/com/fongmi/android/tv/utils/M3U8.java index 2e240fbd0..f1b056469 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/M3U8.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/M3U8.java @@ -32,7 +32,7 @@ public class M3U8 { try { if (TextUtils.isEmpty(url)) return ""; Response response = OkHttp.newCall(url, getHeader(headers)).execute(); - if (response.header(HttpHeaders.ACCEPT_RANGES) != null) return ""; + if (response.header(HttpHeaders.ACCEPT_RANGES) != null && !url.contains(".m3u8")) return ""; String result = response.body().string(); Matcher matcher = Pattern.compile("#EXT-X-STREAM-INF(.*)\\n?(.*)").matcher(result.replaceAll("\r\n", "\n")); if (matcher.find() && matcher.groupCount() > 1) return get(UriUtil.resolve(url, matcher.group(2)), headers); @@ -40,8 +40,7 @@ public class M3U8 { for (String line : result.split("\n")) sb.append(shouldResolve(line) ? resolve(url, line) : line).append("\n"); List ads = Sniffer.getRegex(Uri.parse(url)); return clean(sb.toString(), ads); - } catch (Exception e) { - e.printStackTrace(); + } catch (Throwable ignored) { return ""; } } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Util.java b/app/src/main/java/com/fongmi/android/tv/utils/Util.java index 848740a90..fcba1a90c 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Util.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Util.java @@ -90,7 +90,7 @@ public class Util { if (TextUtils.isEmpty(id)) throw new NullPointerException(); return id; } catch (Exception e) { - return "0200000000000000"; + return "0000000000000000"; } }