From 731a763d8eba6528b53ffde29493883821a7364f Mon Sep 17 00:00:00 2001 From: 21561 <215613905@qq.com> Date: Thu, 6 Mar 2025 00:01:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E7=B1=BB=E9=A1=B5=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E4=B8=8D=E5=AD=98=E5=9C=A8=E6=97=B6=E5=8A=A0=E8=BD=BD=E7=BA=AF?= =?UTF-8?q?=E8=89=B2=E8=83=8C=E6=99=AF;=E4=BF=AE=E6=AD=A3=E7=9B=B4?= =?UTF-8?q?=E6=92=AD=E5=8E=86=E5=8F=B2=E5=BD=93=E5=89=8D=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=AF=B9=E4=B8=8D=E4=B8=8A=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tvbox/osc/player/IjkMediaPlayer.java | 9 ++- .../osc/ui/activity/SettingActivity.java | 29 +++---- .../tvbox/osc/ui/adapter/CollectAdapter.java | 2 +- .../tvbox/osc/ui/adapter/GridAdapter.java | 21 ++--- .../tvbox/osc/ui/adapter/HistoryAdapter.java | 2 +- .../osc/ui/adapter/HomeHotVodAdapter.java | 6 +- .../osc/ui/fragment/ModelSettingFragment.java | 8 ++ .../com/github/tvbox/osc/util/Base64Img.java | 22 ------ .../com/github/tvbox/osc/util/ImgUtil.java | 78 +++++++++++++++++++ 9 files changed, 126 insertions(+), 51 deletions(-) delete mode 100644 app/src/main/java/com/github/tvbox/osc/util/Base64Img.java create mode 100644 app/src/main/java/com/github/tvbox/osc/util/ImgUtil.java diff --git a/app/src/main/java/com/github/tvbox/osc/player/IjkMediaPlayer.java b/app/src/main/java/com/github/tvbox/osc/player/IjkMediaPlayer.java index af77a09c..0dafef55 100644 --- a/app/src/main/java/com/github/tvbox/osc/player/IjkMediaPlayer.java +++ b/app/src/main/java/com/github/tvbox/osc/player/IjkMediaPlayer.java @@ -197,8 +197,15 @@ public class IjkMediaPlayer extends IjkPlayer { for (IjkTrackInfo info : trackInfo) { if (info.getTrackType() == ITrackInfo.MEDIA_TRACK_TYPE_AUDIO) {//音轨信息 TrackInfoBean a = new TrackInfoBean(); - a.name = info.getInfoInline(); + String name = info.getInfoInline(); a.language = info.getLanguage(); + name = name.replace("AUDIO,", ""); + name = name.replace("N/A,", ""); + name = name.replace(" ", ""); + if(name.startsWith("aac")){ + a.language="中文"; + } + a.name = name; a.index = index; a.selected = index == audioSelected; // 如果需要,还可以检查轨道的描述或标题以获取更多信息 diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/SettingActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/SettingActivity.java index 5049333d..aaf4ef10 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/SettingActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/SettingActivity.java @@ -179,21 +179,24 @@ public class SettingActivity extends BaseActivity { @Override public void onBackPressed() { - if ((homeSourceKey != null && !homeSourceKey.equals(Hawk.get(HawkConfig.HOME_API, ""))) || - !currentApi.equals(Hawk.get(HawkConfig.API_URL, "")) || - homeRec != Hawk.get(HawkConfig.HOME_REC, 0) || - dnsOpt != Hawk.get(HawkConfig.DOH_URL, 0) || - !currentLiveApi.equals(Hawk.get(HawkConfig.LIVE_API_URL, ""))) { - AppManager.getInstance().finishAllActivity(); - if (currentApi.equals(Hawk.get(HawkConfig.API_URL, ""))) { - Bundle bundle = new Bundle(); - bundle.putBoolean("useCache", true); - jumpActivity(HomeActivity.class, bundle); - } else { - jumpActivity(HomeActivity.class); + if (currentApi.equals(Hawk.get(HawkConfig.API_URL, ""))) { + if(dnsOpt != Hawk.get(HawkConfig.DOH_URL, 0)){ + AppManager.getInstance().finishAllActivity(); + jumpActivity(HomeActivity.class, createBundle()); + } + else if ((homeSourceKey != null && !homeSourceKey.equals(Hawk.get(HawkConfig.HOME_API, ""))) || homeRec != Hawk.get(HawkConfig.HOME_REC, 0) || !currentLiveApi.equals(Hawk.get(HawkConfig.LIVE_API_URL, ""))) { + jumpActivity(HomeActivity.class, createBundle()); } } else { - super.onBackPressed(); + AppManager.getInstance().finishAllActivity(); + jumpActivity(HomeActivity.class); } + super.onBackPressed(); + } + + private Bundle createBundle() { + Bundle bundle = new Bundle(); + bundle.putBoolean("useCache", true); + return bundle; } } \ No newline at end of file diff --git a/app/src/main/java/com/github/tvbox/osc/ui/adapter/CollectAdapter.java b/app/src/main/java/com/github/tvbox/osc/ui/adapter/CollectAdapter.java index 9d63c993..04380911 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/adapter/CollectAdapter.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/adapter/CollectAdapter.java @@ -50,7 +50,7 @@ public class CollectAdapter extends BaseQuickAdapter if (!TextUtils.isEmpty(item.pic)) { Picasso.get() .load(DefaultConfig.checkReplaceProxy(item.pic)) - .transform(new RoundTransformation(MD5.string2MD5(item.pic + item.name)) + .transform(new RoundTransformation(MD5.string2MD5(item.pic)) .centerCorp(true) .override(AutoSizeUtils.mm2px(mContext, 240), AutoSizeUtils.mm2px(mContext, 336)) .roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL)) diff --git a/app/src/main/java/com/github/tvbox/osc/ui/adapter/GridAdapter.java b/app/src/main/java/com/github/tvbox/osc/ui/adapter/GridAdapter.java index 4ca22bd7..662c1f6f 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/adapter/GridAdapter.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/adapter/GridAdapter.java @@ -10,10 +10,9 @@ import com.chad.library.adapter.base.BaseViewHolder; import com.github.tvbox.osc.R; import com.github.tvbox.osc.bean.Movie; import com.github.tvbox.osc.picasso.RoundTransformation; -import com.github.tvbox.osc.util.Base64Img; import com.github.tvbox.osc.util.DefaultConfig; +import com.github.tvbox.osc.util.ImgUtil; import com.github.tvbox.osc.util.MD5; -import com.squareup.picasso.MemoryPolicy; import com.squareup.picasso.Picasso; import java.util.ArrayList; @@ -42,9 +41,9 @@ public class GridAdapter extends BaseQuickAdapter { //由于部分电视机使用glide报错 if (!TextUtils.isEmpty(item.pic)) { item.pic=item.pic.trim(); - if(Base64Img.isBase64Image(item.pic)){ + if(ImgUtil.isBase64Image(item.pic)){ // 如果是 Base64 图片,解码并设置 - ivThumb.setImageBitmap(Base64Img.decodeBase64ToBitmap(item.pic)); + ivThumb.setImageBitmap(ImgUtil.decodeBase64ToBitmap(item.pic)); }else { Picasso.get() .load(DefaultConfig.checkReplaceProxy(item.pic)) @@ -54,11 +53,12 @@ public class GridAdapter extends BaseQuickAdapter { .roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL)) .placeholder(R.drawable.img_loading_placeholder) .noFade() - .error(R.drawable.img_loading_placeholder) + .error(ImgUtil.createTextDrawable(item.name)) .into(ivThumb); } } else { - ivThumb.setImageResource(R.drawable.img_loading_placeholder); +// ivThumb.setImageResource(R.drawable.img_loading_placeholder); + ivThumb.setImageDrawable(ImgUtil.createTextDrawable(item.name)); } return; } @@ -98,9 +98,9 @@ public class GridAdapter extends BaseQuickAdapter { //由于部分电视机使用glide报错 if (!TextUtils.isEmpty(item.pic)) { item.pic=item.pic.trim(); - if(Base64Img.isBase64Image(item.pic)){ + if(ImgUtil.isBase64Image(item.pic)){ // 如果是 Base64 图片,解码并设置 - ivThumb.setImageBitmap(Base64Img.decodeBase64ToBitmap(item.pic)); + ivThumb.setImageBitmap(ImgUtil.decodeBase64ToBitmap(item.pic)); }else { Picasso.get() .load(DefaultConfig.checkReplaceProxy(item.pic)) @@ -110,11 +110,12 @@ public class GridAdapter extends BaseQuickAdapter { .roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL)) .placeholder(R.drawable.img_loading_placeholder) .noFade() - .error(R.drawable.img_loading_placeholder) + .error(ImgUtil.createTextDrawable(item.name)) .into(ivThumb); } } else { - ivThumb.setImageResource(R.drawable.img_loading_placeholder); +// ivThumb.setImageResource(R.drawable.img_loading_placeholder); + ivThumb.setImageDrawable(ImgUtil.createTextDrawable(item.name)); } } } \ No newline at end of file diff --git a/app/src/main/java/com/github/tvbox/osc/ui/adapter/HistoryAdapter.java b/app/src/main/java/com/github/tvbox/osc/ui/adapter/HistoryAdapter.java index a2af4066..0623d61f 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/adapter/HistoryAdapter.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/adapter/HistoryAdapter.java @@ -85,7 +85,7 @@ public class HistoryAdapter extends BaseQuickAdapter { if (!TextUtils.isEmpty(item.pic)) { Picasso.get() .load(DefaultConfig.checkReplaceProxy(item.pic)) - .transform(new RoundTransformation(MD5.string2MD5(item.pic + item.name)) + .transform(new RoundTransformation(MD5.string2MD5(item.pic)) .centerCorp(true) .override(AutoSizeUtils.mm2px(mContext, 240), AutoSizeUtils.mm2px(mContext, 336)) .roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL)) diff --git a/app/src/main/java/com/github/tvbox/osc/ui/adapter/HomeHotVodAdapter.java b/app/src/main/java/com/github/tvbox/osc/ui/adapter/HomeHotVodAdapter.java index 6d8e397b..23f11b29 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/adapter/HomeHotVodAdapter.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/adapter/HomeHotVodAdapter.java @@ -12,9 +12,9 @@ import com.github.tvbox.osc.R; import com.github.tvbox.osc.api.ApiConfig; import com.github.tvbox.osc.bean.Movie; import com.github.tvbox.osc.picasso.RoundTransformation; -import com.github.tvbox.osc.util.Base64Img; import com.github.tvbox.osc.util.DefaultConfig; import com.github.tvbox.osc.util.HawkConfig; +import com.github.tvbox.osc.util.ImgUtil; import com.github.tvbox.osc.util.MD5; import com.orhanobut.hawk.Hawk; import com.squareup.picasso.Picasso; @@ -60,9 +60,9 @@ public class HomeHotVodAdapter extends BaseQuickAdapter history = Hawk.get(HawkConfig.LIVE_API_HISTORY, new ArrayList()); + if (!history.contains(value)) { + history.add(0, value); + } + if (history.size() > 30) { + history.remove(30); + } + Hawk.put(HawkConfig.LIVE_API_HISTORY, history); tvApi.setText(value); dialog.dismiss(); } diff --git a/app/src/main/java/com/github/tvbox/osc/util/Base64Img.java b/app/src/main/java/com/github/tvbox/osc/util/Base64Img.java deleted file mode 100644 index 4edd2046..00000000 --- a/app/src/main/java/com/github/tvbox/osc/util/Base64Img.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.github.tvbox.osc.util; - -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.util.Base64; - -/** - *base64图片 - * @version 1.0.0
- */ -public class Base64Img { - public static boolean isBase64Image(String picUrl) { - return picUrl.startsWith("data:image"); - } - - public static Bitmap decodeBase64ToBitmap(String base64Str) { - // 去掉 Base64 数据的头部前缀,例如 "data:image/png;base64," - String base64Data = base64Str.substring(base64Str.indexOf(",") + 1); - byte[] decodedBytes = Base64.decode(base64Data, Base64.DEFAULT); - return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length); - } -} diff --git a/app/src/main/java/com/github/tvbox/osc/util/ImgUtil.java b/app/src/main/java/com/github/tvbox/osc/util/ImgUtil.java new file mode 100644 index 00000000..daf6eeb8 --- /dev/null +++ b/app/src/main/java/com/github/tvbox/osc/util/ImgUtil.java @@ -0,0 +1,78 @@ +package com.github.tvbox.osc.util; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.RectF; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.util.Base64; + +import com.github.tvbox.osc.base.App; + +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +import me.jessyan.autosize.utils.AutoSizeUtils; + +/** + *base64图片 + * @version 1.0.0
+ */ +public class ImgUtil { + private static final Map drawableCache = new HashMap<>(); + public static boolean isBase64Image(String picUrl) { + return picUrl.startsWith("data:image"); + } + + public static Bitmap decodeBase64ToBitmap(String base64Str) { + // 去掉 Base64 数据的头部前缀,例如 "data:image/png;base64," + String base64Data = base64Str.substring(base64Str.indexOf(",") + 1); + byte[] decodedBytes = Base64.decode(base64Data, Base64.DEFAULT); + return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length); + } + + public static Drawable createTextDrawable(String text) { + if(text.isEmpty())text="J"; + text=text.substring(0, 1); + // 如果缓存中已存在,直接返回 + if (drawableCache.containsKey(text)) { + return drawableCache.get(text); + } + int width = 150, height = 200; // 设定图片大小 + int randomColor = getRandomColor(); + float cornerRadius = AutoSizeUtils.mm2px(App.getInstance(), 5); // 圆角半径 + + Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + // 画圆角背景 + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setColor(randomColor); + paint.setStyle(Paint.Style.FILL); + RectF rectF = new RectF(0, 0, width, height); + canvas.drawRoundRect(rectF, cornerRadius, cornerRadius, paint); + paint.setColor(Color.WHITE); // 文字颜色 + paint.setTextSize(50); // 文字大小 + paint.setTextAlign(Paint.Align.CENTER); + Paint.FontMetrics fontMetrics = paint.getFontMetrics(); + float x = width / 2f; + float y = (height - fontMetrics.bottom - fontMetrics.top) / 2f; + + canvas.drawText(text, x, y, paint); + Drawable drawable = new BitmapDrawable(bitmap); + drawableCache.put(text, drawable); + return drawable; + + } + public static int getRandomColor() { + Random random = new Random(); + return Color.argb(255, random.nextInt(256), random.nextInt(256), random.nextInt(256)); + } + + public static void clearCache() { + drawableCache.clear(); + } +}