分类页图片不存在时加载纯色背景;修正直播历史当前直播配置对不上的bug

pull/142/head
21561 9 months ago
parent 69eab36df9
commit 731a763d8e
  1. 9
      app/src/main/java/com/github/tvbox/osc/player/IjkMediaPlayer.java
  2. 29
      app/src/main/java/com/github/tvbox/osc/ui/activity/SettingActivity.java
  3. 2
      app/src/main/java/com/github/tvbox/osc/ui/adapter/CollectAdapter.java
  4. 21
      app/src/main/java/com/github/tvbox/osc/ui/adapter/GridAdapter.java
  5. 2
      app/src/main/java/com/github/tvbox/osc/ui/adapter/HistoryAdapter.java
  6. 6
      app/src/main/java/com/github/tvbox/osc/ui/adapter/HomeHotVodAdapter.java
  7. 8
      app/src/main/java/com/github/tvbox/osc/ui/fragment/ModelSettingFragment.java
  8. 22
      app/src/main/java/com/github/tvbox/osc/util/Base64Img.java
  9. 78
      app/src/main/java/com/github/tvbox/osc/util/ImgUtil.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;
// 如果需要,还可以检查轨道的描述或标题以获取更多信息

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

@ -50,7 +50,7 @@ public class CollectAdapter extends BaseQuickAdapter<VodCollect, BaseViewHolder>
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))

@ -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<Movie.Video, BaseViewHolder> {
//由于部分电视机使用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<Movie.Video, BaseViewHolder> {
.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<Movie.Video, BaseViewHolder> {
//由于部分电视机使用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<Movie.Video, BaseViewHolder> {
.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));
}
}
}

@ -85,7 +85,7 @@ public class HistoryAdapter extends BaseQuickAdapter<VodInfo, BaseViewHolder> {
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))

@ -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<Movie.Video, BaseViewHol
//由于部分电视机使用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))

@ -320,6 +320,14 @@ public class ModelSettingFragment extends BaseLazyFragment {
public void click(String value) {
Hawk.put(HawkConfig.API_URL, value);
Hawk.put(HawkConfig.LIVE_API_URL, value);
ArrayList<String> history = Hawk.get(HawkConfig.LIVE_API_HISTORY, new ArrayList<String>());
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();
}

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

@ -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 <br/>
*/
public class ImgUtil {
private static final Map<String, Drawable> 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();
}
}
Loading…
Cancel
Save