Commit 875d6e44 authored by qq247321453's avatar qq247321453

update glide

parent 511d83d1
......@@ -93,7 +93,8 @@ dependencies {
// implementation 'com.android.support:design:' + rootProject.ext.supportVersion
implementation 'org.jdeferred:jdeferred-android-aar:1.2.4'
implementation 'com.github.bumptech.glide:glide:3.7.0'
implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
implementation('com.github.chrisbanes.photoview:library:1.2.4') {
implementation 'com.github.chrisbanes.photoview:library:1.2.4'
exclude group: 'com.android.support', module: 'support-v4' //
......
......@@ -17,9 +17,24 @@
#}
-keepclassmembers class * implements cn.garymb.ygomobile.core.IrrlichtBridge.* { public *;}
-keepclassmembers class * implements android.os.Parcelable { public *;}
-keep class * implements com.bumptech.glide.module.GlideModule{
*;
#############
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep class * extends com.bumptech.glide.module.AppGlideModule {
<init>(...);
}
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {
*** rewind();
}
# for DexGuard only
#-keepresourcexmlelements manifest/application/meta-data@value=GlideModule
#############
-keep class net.kk.xml.**{
public *;
protected *;
......
......@@ -6,13 +6,10 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.util.Log;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatDelegate;
import com.bumptech.glide.Glide;
import com.ourygo.assistant.util.DuelAssistantManagement;
import com.tencent.bugly.Bugly;
import com.tencent.bugly.beta.Beta;
import com.tencent.smtt.export.external.TbsCoreSettings;
......@@ -26,6 +23,7 @@ import cn.garymb.ygomobile.lite.BuildConfig;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.home.MainActivity;
import cn.garymb.ygomobile.utils.CrashHandler;
import cn.garymb.ygomobile.utils.glide.GlideCompat;
import cn.garymb.ygomobile.utils.ProcessUtils;
public class App extends GameApplication {
......@@ -164,7 +162,7 @@ public class App extends GameApplication {
ISNav.getInstance().init(new ImageLoader() {
@Override
public void displayImage(Context context, String path, ImageView imageView) {
Glide.with(context).load(path).into(imageView);
GlideCompat.with(context).load(path).into(imageView);
}
});
}
......
......@@ -12,7 +12,6 @@ import androidx.annotation.Nullable;
import org.json.JSONArray;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
......@@ -224,13 +223,23 @@ public class AppsSettings {
return new File(getDataBasePath(), Constants.DATABASE_NAME);
}
public File[] getExpansionFiles(){
return new File(AppsSettings.get().getResourcePath(), Constants.CORE_EXPANSIONS)
.listFiles((file) -> {
if(!file.isFile()){
return false;
}
String s_name = file.getName().toLowerCase();
return s_name.endsWith(".zip") || s_name.endsWith(".ypk");
});
}
private void makeCdbList(List<String> pathList) {
if (isReadExpansions()) {
File expansionsDir = getExpansionsPath();
if (expansionsDir.exists()) {
File[] cdbs = expansionsDir.listFiles(file -> {
return file.isFile() && file.getName().toLowerCase(Locale.US).endsWith(".cdb");
});
File[] cdbs = expansionsDir.listFiles(file -> file.isFile() && file.getName().toLowerCase(Locale.US).endsWith(".cdb"));
if (cdbs != null) {
try {
Arrays.sort(cdbs, (file, t1) -> {
......@@ -259,25 +268,9 @@ public class AppsSettings {
if (isReadExpansions()) {
File expansionsDir = getExpansionsPath();
if (expansionsDir.exists()) {
File[] zips = expansionsDir.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
return file.isFile() && file.getName().toLowerCase(Locale.US).endsWith(".zip");
}
});
if (zips != null) {
for (File file : zips) {
pathList.add(file.getAbsolutePath());
}
}
File[] ypks = expansionsDir.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
return file.isFile() && file.getName().toLowerCase(Locale.US).endsWith(".ypk");
}
});
if (ypks != null) {
for (File file : ypks) {
File[] files = getExpansionFiles();
if (files != null) {
for (File file : files) {
pathList.add(file.getAbsolutePath());
}
}
......
......@@ -93,8 +93,10 @@ public interface Constants {
String YDK_FILE_EX = ".ydk";
int[] CORE_SKIN_BG_SIZE = new int[]{1280, 720};
int[] CORE_SKIN_CARD_MINI_SIZE = new int[]{44, 64};
int[] CORE_SKIN_CARD_SMALL_SIZE = new int[]{177, 254};
int[] CORE_SKIN_CARD_MIDDLE_SIZE = new int[]{531, 762};
//原图
int[] CORE_SKIN_CARD_MIDDLE_SIZE = new int[]{397, 578};
int[] CORE_SKIN_CARD_COVER_SIZE = new int[]{177, 254};
int[] CORE_SKIN_AVATAR_SIZE = new int[]{128, 128};
......
......@@ -17,11 +17,9 @@ import android.view.WindowManager;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.target.ViewTarget;
import com.bumptech.glide.signature.StringSignature;
import com.tencent.bugly.proguard.C;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import com.bumptech.glide.signature.MediaStoreSignature;
import java.io.File;
import java.util.HashMap;
......@@ -31,6 +29,7 @@ import cn.garymb.ygomobile.core.IrrlichtBridge;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.plus.ViewTargetPlus;
import cn.garymb.ygomobile.utils.ComponentUtils;
import cn.garymb.ygomobile.utils.glide.GlideCompat;
public class YGOStarter {
......@@ -83,12 +82,13 @@ public class YGOStarter {
File bgfile = new File(AppsSettings.get().getCoreSkinPath(), Constants.CORE_SKIN_BG);
if (bgfile.exists()) {
// .getApplicationContext()
Glide.with(activity).load(bgfile)
.signature(new StringSignature(bgfile.getName() + bgfile.lastModified()))
GlideCompat.with(activity).load(bgfile)
.signature(new MediaStoreSignature("image/*", bgfile.lastModified(), 0))
.transition(DrawableTransitionOptions.withCrossFade())
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(activityShowInfo.mViewTarget);
} else {
Glide.with(activity.getApplicationContext()).load(R.drawable.bg).into(activityShowInfo.mViewTarget);
GlideCompat.with(activity.getApplicationContext()).load(R.drawable.bg).into(activityShowInfo.mViewTarget);
}
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//强制为横屏
setFullScreen(activity, activityShowInfo);
......@@ -188,7 +188,7 @@ public class YGOStarter {
private static class ActivityShowInfo {
//根布局
View mRoot;
ViewTarget mViewTarget;
ViewTargetPlus mViewTarget;
//是否显示了标题栏
boolean hasSupperbar;
//是否显示了标题栏
......
package cn.garymb.ygomobile.loader;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.Log;
......@@ -9,16 +8,10 @@ import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.bumptech.glide.DrawableTypeRequest;
import com.bumptech.glide.load.ResourceDecoder;
import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool;
import com.bumptech.glide.load.model.ImageVideoWrapper;
import com.bumptech.glide.load.resource.bitmap.BitmapResource;
import com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapper;
import com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapperResource;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import com.bumptech.glide.signature.MediaStoreSignature;
import com.bumptech.glide.signature.StringSignature;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
......@@ -34,24 +27,32 @@ import java.util.zip.ZipFile;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.core.IrrlichtBridge;
import cn.garymb.ygomobile.lite.BuildConfig;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.utils.FileUtils;
import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.NetUtils;
import cn.garymb.ygomobile.utils.glide.GlideCompat;
import cn.garymb.ygomobile.utils.glide.StringSignature;
import ocgcore.data.Card;
import static com.bumptech.glide.Glide.with;
public class ImageLoader implements Closeable {
public enum Type {
//origin size
origin,
origin(0),
//44x64
@Deprecated
mini(1),
//177x254
small,
small(2),
//531x762
middle
middle(3);
private final int id;
Type(int id){this.id = id;}
public int getId() {
return id;
}
}
private static class Cache {
......@@ -67,7 +68,6 @@ public class ImageLoader implements Closeable {
private final boolean useCache;
private static final String TAG = ImageLoader.class.getSimpleName();
private final Map<String, ZipFile> zipFileCache = new ConcurrentHashMap<>();
private final LruBitmapPool mLruBitmapPool = new LruBitmapPool(128);
private final Map<Long, Cache> zipDataCache = new ConcurrentHashMap<>();
private ZipFile mDefaultZipFile;
private File mPicsFile;
......@@ -134,7 +134,7 @@ public class ImageLoader implements Closeable {
bindT(uri, name, imageview, pre, type);
}
private <T> void setDefaults(@NonNull DrawableTypeRequest<T> resource, String name,
private <T> void setDefaults(@NonNull RequestBuilder<Drawable> resource,
@Nullable com.bumptech.glide.load.Key signature,
@Nullable Drawable pre,
@NonNull Type type) {
......@@ -144,34 +144,31 @@ public class ImageLoader implements Closeable {
resource.placeholder(R.drawable.unknown);
}
resource.error(R.drawable.unknown);
resource.animate(R.anim.push_in);
if (type != Type.origin) {
int[] size = null;
switch (type) {
case small:
size = Constants.CORE_SKIN_CARD_SMALL_SIZE;
break;
case middle:
size = Constants.CORE_SKIN_CARD_MIDDLE_SIZE;
break;
}
if (size != null) {
resource.override(size[0], size[1]);
}
}
resource.transition(DrawableTransitionOptions.withCrossFade());
//都改为原图
// if (type != Type.origin) {
// int[] size = null;
// switch (type) {
// case small:
// size = Constants.CORE_SKIN_CARD_SMALL_SIZE;
// break;
// case middle:
// size = Constants.CORE_SKIN_CARD_MIDDLE_SIZE;
// break;
// }
// if (size != null) {
// resource.override(size[0], size[1]);
// }
// }
if (signature != null) {
resource.signature(signature);
}
String ex = FileUtils.getFileExpansion(name);
if ("bpg".equals(ex)) {
resource.decoder(new BpgResourceDecoder(name, mLruBitmapPool));
}
}
private <T> void bindT(final T data, String name, ImageView imageview, Drawable pre, @NonNull Type type) {
try {
DrawableTypeRequest<T> resource = with(imageview.getContext()).load(data);
setDefaults(resource, name, new StringSignature(name + ":" + type), pre, type);
RequestBuilder<Drawable> resource = GlideCompat.with(imageview.getContext()).load(data);
setDefaults(resource, new StringSignature(name + ":" + type), pre, type);
resource.into(imageview);
} catch (Exception e) {
Log.e(TAG, "$", e);
......@@ -183,10 +180,10 @@ public class ImageLoader implements Closeable {
Log.v(TAG, "bind file:" + file.getPath() + ", type=" + type);
}
try {
DrawableTypeRequest<File> resource = with(imageview.getContext()).load(file);
setDefaults(resource, file.getName(),
new MediaStoreSignature("image/*",
file.lastModified(), type.ordinal()), pre, type);
RequestBuilder<Drawable> resource = GlideCompat.with(imageview.getContext()).load(file);
setDefaults(resource,
new MediaStoreSignature("image/*", file.lastModified(), Type.origin.getId()),
pre, type);
resource.into(imageview);
} catch (Exception e) {
Log.e(TAG, "$", e);
......@@ -244,6 +241,20 @@ public class ImageLoader implements Closeable {
bindImage(imageview, code, null, type);
}
public static File getImageFile(long code){
for (String ex : Constants.IMAGE_EX) {
File file = new File(AppsSettings.get().getResourcePath(), Constants.CORE_IMAGE_PATH + "/" + code + ex);
if(file.exists()){
return file;
}
File file_ex = new File(AppsSettings.get().getResourcePath(), Constants.CORE_EXPANSIONS_IMAGE_PATH + "/" + code + ex);
if(file_ex.exists()){
return file_ex;
}
}
return null;
}
public void bindImage(ImageView imageview, long code, Drawable pre, @NonNull Type type) {
if (BuildConfig.DEBUG_MODE) {
Log.v(TAG, "bind image:" + code + ", type=" + type);
......@@ -283,8 +294,7 @@ public class ImageLoader implements Closeable {
}
//3.
//zips
File[] files = new File(AppsSettings.get().getResourcePath(), Constants.CORE_EXPANSIONS)
.listFiles((dir, name1) -> name1.endsWith(".zip") || name1.endsWith(".ypk"));
File[] files = AppsSettings.get().getExpansionFiles();
cleanInValidZips();
......@@ -321,28 +331,4 @@ public class ImageLoader implements Closeable {
}
}
private static class BpgResourceDecoder implements ResourceDecoder<ImageVideoWrapper, GifBitmapWrapper> {
private final String id;
private final LruBitmapPool mLruBitmapPool;
private BpgResourceDecoder(String id, LruBitmapPool lruBitmapPool) {
this.id = id;
this.mLruBitmapPool = lruBitmapPool;
}
@Override
public Resource<GifBitmapWrapper> decode(ImageVideoWrapper source, int width, int height) {
Bitmap bitmap = IrrlichtBridge.getBpgImage(source.getStream(), Bitmap.Config.RGB_565);
if (bitmap == null) {
return null;
}
BitmapResource resource = new BitmapResource(bitmap, mLruBitmapPool);
return new GifBitmapWrapperResource(new GifBitmapWrapper(resource, null));
}
@Override
public String getId() {
return id;
}
}
}
......@@ -256,7 +256,7 @@ public class BaseActivity extends AppCompatActivity {
}
public Context getContext() {
return getActivity();
return this;
}
protected <T extends View> T $(int id) {
......
......@@ -16,8 +16,6 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.bumptech.glide.GenericTranscodeRequest;
import java.util.ArrayList;
import java.util.List;
......
......@@ -22,7 +22,6 @@ import com.app.hubert.guide.NewbieGuide;
import com.app.hubert.guide.model.GuidePage;
import com.app.hubert.guide.model.HighLight;
import com.app.hubert.guide.model.HighlightOptions;
import com.bumptech.glide.Glide;
import java.util.List;
......@@ -32,6 +31,7 @@ import cn.garymb.ygomobile.loader.CardLoader;
import cn.garymb.ygomobile.loader.ImageLoader;
import cn.garymb.ygomobile.ui.activities.BaseActivity;
import cn.garymb.ygomobile.ui.adapters.CardListAdapter;
import cn.garymb.ygomobile.utils.glide.GlideCompat;
import ocgcore.DataManager;
import ocgcore.LimitManager;
import ocgcore.StringManager;
......@@ -180,10 +180,10 @@ public abstract class BaseCardsActivity extends BaseActivity implements CardLoad
switch (newState) {
case RecyclerView.SCROLL_STATE_IDLE:
case RecyclerView.SCROLL_STATE_SETTLING:
Glide.with(getContext()).resumeRequests();
GlideCompat.with(getContext()).resumeRequests();
break;
case RecyclerView.SCROLL_STATE_DRAGGING:
Glide.with(getContext()).pauseRequests();
GlideCompat.with(getContext()).pauseRequests();
break;
}
}
......
......@@ -349,7 +349,6 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
private void showCardImageDetail(int code) {
AppsSettings appsSettings = AppsSettings.get();
File file = new File(appsSettings.getCardImagePath(code));
View view = dialog.initDialog(context, R.layout.dialog_photo);
dialog.setDialogWidth(ViewGroup.LayoutParams.MATCH_PARENT);
......@@ -391,7 +390,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
btn_redownload.setOnClickListener((s) -> {
ll_btn.startAnimation(AnimationUtils.loadAnimation(context, R.anim.push_out));
ll_btn.setVisibility(View.GONE);
downloadCardImage(code, file, true);
downloadCardImage(code, true);
});
btn_share.setOnClickListener((s) -> {
......@@ -418,17 +417,18 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
//先显示普通卡片大图,判断如果没有高清图就下载
imageLoader.bindImage(photoView, code, null, ImageLoader.Type.middle);
if (!file.exists()) {
downloadCardImage(code, file, false);
if (null == ImageLoader.getImageFile(code)) {
downloadCardImage(code, false);
}
}
private void downloadCardImage(int code, File imgFile, boolean force) {
private void downloadCardImage(int code, boolean force) {
if (cardManager.getCard(code) == null) {
YGOUtil.show(context.getString(R.string.tip_expansions_image));
return;
}
File imgFile = new File(AppsSettings.get().getCardImagePath(code));
final File tmp = new File(imgFile.getAbsolutePath() + ".tmp");
if (tmp.exists()) {
if(force){
......
......@@ -26,7 +26,6 @@ import com.app.hubert.guide.NewbieGuide;
import com.app.hubert.guide.model.GuidePage;
import com.app.hubert.guide.model.HighLight;
import com.app.hubert.guide.model.HighlightOptions;
import com.bumptech.glide.Glide;
import com.ourygo.assistant.util.DuelAssistantManagement;
import java.util.List;
......@@ -42,6 +41,7 @@ import cn.garymb.ygomobile.ui.adapters.CardListAdapter;
import cn.garymb.ygomobile.ui.plus.AOnGestureListener;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.glide.GlideCompat;
import ocgcore.DataManager;
import ocgcore.LimitManager;
import ocgcore.StringManager;
......@@ -170,11 +170,11 @@ public class CardSearchActivity extends BaseActivity implements CardLoader.CallB
case RecyclerView.SCROLL_STATE_IDLE:
case RecyclerView.SCROLL_STATE_SETTLING:
if (!isFinishing()) {
Glide.with(getContext()).resumeRequests();
GlideCompat.with(getContext()).resumeRequests();
}
break;
case RecyclerView.SCROLL_STATE_DRAGGING:
Glide.with(getContext()).pauseRequests();
GlideCompat.with(getContext()).pauseRequests();
break;
}
}
......
......@@ -12,8 +12,6 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
......@@ -25,6 +23,7 @@ import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.adapters.BaseAdapterPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.glide.GlideCompat;
class FileAdapter extends BaseAdapterPlus<File> {
public interface OnPathChangedListener {
......@@ -221,7 +220,7 @@ class FileAdapter extends BaseAdapterPlus<File> {
}
if (!item.isDirectory()) {
if (isimage) {
Glide.with(context).load(item).into(viewHolder.icon);
GlideCompat.with(context).load(item).into(viewHolder.icon);
} else {
viewHolder.icon.setImageResource(R.drawable.ic_insert_drive_file);
}
......
......@@ -24,7 +24,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.drawerlayout.widget.DrawerLayout;
import com.bumptech.glide.Glide;
import com.google.android.material.navigation.NavigationView;
import com.tencent.smtt.sdk.ValueCallback;
import com.tencent.smtt.sdk.WebChromeClient;
......@@ -40,6 +39,7 @@ import cn.garymb.ygomobile.ui.activities.BaseActivity;
import cn.garymb.ygomobile.ui.cards.DeckManagerActivity;
import cn.garymb.ygomobile.ui.mycard.mcchat.SplashActivity;
import cn.garymb.ygomobile.utils.ActivityUtils;
import cn.garymb.ygomobile.utils.glide.GlideCompat;
public class MyCardActivity extends BaseActivity implements MyCard.MyCardListener, NavigationView.OnNavigationItemSelectedListener {
......@@ -56,15 +56,13 @@ public class MyCardActivity extends BaseActivity implements MyCard.MyCardListene
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case TYPE_MC_LOGIN:
if (msg.what == TYPE_MC_LOGIN) {
String[] ss = (String[]) msg.obj;
if (!TextUtils.isEmpty(ss[1]) && ActivityUtils.isActivityExist(MyCardActivity.this)) {
Glide.with(MyCardActivity.this).load(Uri.parse(ss[1])).into(mHeadView);
GlideCompat.with(MyCardActivity.this).load(Uri.parse(ss[1])).into(mHeadView);
}
mNameView.setText(ss[0]);
mStatusView.setText(ss[2]);
break;
}
}
};
......
package cn.garymb.ygomobile.ui.mycard.mcchat.util;
import android.content.Context;
import android.graphics.ColorFilter;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.net.Uri;
import android.util.Log;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import java.util.HashMap;
import java.util.Map;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.utils.glide.GlideCompat;
public class ImageUtil {
public static void setAvatar(Context context, String url, final ImageView im) {
if (url != null) {
Glide.with(context)
GlideCompat.with(context)
.load(Uri.parse(url))
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.diskCacheStrategy(DiskCacheStrategy.DATA)
.placeholder(R.drawable.avatar)
.into(im);
}
......@@ -32,10 +26,9 @@ public class ImageUtil {
public static void setImage(Context context, String url, final ImageView im) {
if (url != null) {
Glide.with(context)
GlideCompat.with(context)
.load(url)
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.diskCacheStrategy(DiskCacheStrategy.DATA)
.placeholder(R.drawable.unknown)
.into(im);
}
......
package cn.garymb.ygomobile.ui.plus;
import android.os.Build;
import android.graphics.drawable.Drawable;
import android.view.View;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.ViewTarget;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.bumptech.glide.request.target.CustomViewTarget;
import com.bumptech.glide.request.transition.Transition;
public class ViewTargetPlus extends ViewTarget<View, GlideDrawable> {
public class ViewTargetPlus extends CustomViewTarget<View, Drawable> {
public ViewTargetPlus(View view) {
super(view);
}
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
protected void onResourceCleared(@Nullable Drawable placeholder) {
this.view.setBackground(placeholder);
}
@Override
public void onLoadFailed(@Nullable Drawable errorDrawable) {
this.view.setBackground(errorDrawable);
}
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
this.view.setBackground(resource);
} else {
this.view.setBackgroundDrawable(resource);
if (transition != null) {
transition.transition(resource, new Transition.ViewAdapter() {
@Override
public View getView() {
return view;
}
@Nullable
@Override
public Drawable getCurrentDrawable() {
return view.getBackground();
}
@Override
public void setDrawable(Drawable drawable) {
view.setBackground(drawable);
}
});
}
}
}
......@@ -16,6 +16,11 @@ import android.view.MenuItem;
abstract class BasePreferenceFragment extends PreferenceFragment implements Preference.OnPreferenceClickListener
, Preference.OnPreferenceChangeListener {
public BasePreferenceFragment() {
super();
}
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
if (value == null) return false;
......
......@@ -22,9 +22,8 @@ import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.signature.StringSignature;
import com.bumptech.glide.signature.MediaStoreSignature;
import com.ourygo.assistant.service.DuelAssistantService;
import com.tencent.bugly.beta.Beta;
......@@ -46,6 +45,7 @@ import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.ui.preference.PreferenceFragmentPlus;
import cn.garymb.ygomobile.utils.FileUtils;
import cn.garymb.ygomobile.utils.glide.GlideCompat;
import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.SystemUtils;
import ocgcore.DataManager;
......@@ -489,7 +489,7 @@ public class SettingFragment extends PreferenceFragmentPlus {
//builder.show();
File img = new File(outFile);
if (img.exists()) {
Glide.with(this).load(img).signature(new StringSignature(img.getName() + img.lastModified()))
GlideCompat.with(this).load(img).signature(new MediaStoreSignature("image/*", img.lastModified(), 0))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.override(outWidth, outHeight)
.into(imageView);
......@@ -499,7 +499,7 @@ public class SettingFragment extends PreferenceFragmentPlus {
public void setImage(String outFile, int outWidth, int outHeight, ImageView imageView) {
File img = new File(outFile);
if (img.exists()) {
Glide.with(this).load(img).signature(new StringSignature(img.getName() + img.lastModified()))
GlideCompat.with(this).load(img).signature(new MediaStoreSignature("image/*", img.lastModified(), 0))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.override(outWidth, outHeight)
.into(imageView);
......
package cn.garymb.ygomobile.utils;
import android.content.Context;
import android.os.Build;
import java.io.File;
import java.io.IOException;
......@@ -94,23 +93,25 @@ public class DeckUtil {
}
}
}
files = appsSettings.getExpansionsPath().listFiles();
files = appsSettings.getExpansionFiles();
for (File file : files) {
if (file.isFile() && (file.getName().endsWith(".zip") || file.getName().endsWith(".ypk"))) {
ZipFile zipFile = new ZipFile(file.getAbsoluteFile());
Enumeration entries = zipFile.entries();
if (file.isFile()) {
ZipFile zipFile = null;
try {
zipFile = new ZipFile(file.getAbsoluteFile());
Enumeration<?> entries = zipFile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entries.nextElement();
if (entry.getName().endsWith(".ydk")) {
String name = entry.getName();
name = name.substring(name.lastIndexOf("/"), name.length());
name = name.substring(name.lastIndexOf("/"));
InputStream inputStream = zipFile.getInputStream(entry);
deckList.add(new DeckFile(
IOUtils.asFile(inputStream,
appsSettings.getCacheDeckDir() + "/" + name)));
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
} finally {
IOUtils.close(zipFile);
}
}
......@@ -119,14 +120,14 @@ public class DeckUtil {
return deckList;
}
static Comparator nameCom = new Comparator<DeckFile>() {
private final static Comparator<DeckFile> nameCom = new Comparator<DeckFile>() {
@Override
public int compare(DeckFile ydk1, DeckFile ydk2) {
return ydk1.getName().compareTo(ydk2.getName());
}
};
static Comparator dateCom = new Comparator<DeckFile>() {
private final static Comparator<DeckFile> dateCom = new Comparator<DeckFile>() {
@Override
public int compare(DeckFile ydk1, DeckFile ydk2) {
return ydk2.getDate().compareTo(ydk1.getDate());
......
package cn.garymb.ygomobile.utils.glide;
import android.graphics.Bitmap;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.bumptech.glide.load.Options;
import com.bumptech.glide.load.ResourceDecoder;
import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapResource;
import java.io.File;
import java.io.FileInputStream;
import cn.garymb.ygomobile.core.IrrlichtBridge;
import cn.garymb.ygomobile.utils.IOUtils;
public class BpgResourceDecoder implements ResourceDecoder<File, Bitmap> {
private final LruBitmapPool mLruBitmapPool;
public BpgResourceDecoder(LruBitmapPool lruBitmapPool) {
this.mLruBitmapPool = lruBitmapPool;
}
@Override
public boolean handles(@NonNull File source, @NonNull Options options) {
return source.getName().toLowerCase().endsWith(".bpg");
}
@Nullable
@Override
public Resource<Bitmap> decode(@NonNull File source, int width, int height, @NonNull Options options) {
// Log.v("ImageLoader", "decode:" + source);
FileInputStream input = null;
Bitmap bitmap = null;
try {
input = new FileInputStream(source);
bitmap = IrrlichtBridge.getBpgImage(input, Bitmap.Config.RGB_565);
} catch (Throwable e) {
//Ignore
} finally {
IOUtils.close(input);
}
if (bitmap == null) {
return null;
}
return new BitmapResource(bitmap, mLruBitmapPool);
}
}
\ No newline at end of file
package cn.garymb.ygomobile.utils.glide;
import android.app.Activity;
import android.content.Context;
import android.view.View;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
public class GlideCompat {
public static RequestManager with(Context context) {
return Glide.with(context);
}
@Deprecated
public static RequestManager with(android.app.Fragment context) {
return Glide.with(context);
}
public static RequestManager with(Fragment context) {
return Glide.with(context);
}
public static RequestManager with(View context) {
return Glide.with(context);
}
public static RequestManager with(FragmentActivity context) {
return Glide.with(context);
}
public static RequestManager with(Activity activity) {
return Glide.with(activity);
}
}
package cn.garymb.ygomobile.utils.glide;
import androidx.annotation.NonNull;
import com.bumptech.glide.load.Key;
import com.bumptech.glide.util.Preconditions;
import java.security.MessageDigest;
import java.util.Objects;
public class StringSignature implements Key {
private final String key;
public StringSignature(String key) {
this.key = Preconditions.checkNotNull(key);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
StringSignature that = (StringSignature) o;
return Objects.equals(key, that.key);
}
@Override
public int hashCode() {
return Objects.hash(key);
}
@Override
public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {
messageDigest.update(key.getBytes(CHARSET));
}
@NonNull
@Override
public String toString() {
return "StringSignature{" +
"key='" + key + '\'' +
'}';
}
}
package cn.garymb.ygomobile.utils.glide;
import android.content.Context;
import android.graphics.Bitmap;
import androidx.annotation.Keep;
import androidx.annotation.NonNull;
import com.bumptech.glide.Glide;
import com.bumptech.glide.GlideBuilder;
import com.bumptech.glide.Registry;
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.load.DecodeFormat;
import com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool;
import com.bumptech.glide.load.engine.cache.ExternalPreferredCacheDiskCacheFactory;
import com.bumptech.glide.module.AppGlideModule;
import com.bumptech.glide.request.RequestOptions;
import java.io.File;
@Keep
@GlideModule
public class YGOAppGlideModule extends AppGlideModule {
private final LruBitmapPool mLruBitmapPool = new LruBitmapPool(128);
@Override
public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
super.applyOptions(context, builder);
//不需要显示透明
builder.setDefaultRequestOptions(new RequestOptions().format(DecodeFormat.PREFER_RGB_565));
builder.setDiskCache(new ExternalPreferredCacheDiskCacheFactory(context));
}
@Override
public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
super.registerComponents(context, glide, registry);
registry.append(File.class, Bitmap.class, new BpgResourceDecoder(mLruBitmapPool));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment