Load icons with glide

This commit is contained in:
NekoInverter 2020-11-22 16:00:01 +08:00
parent 01fb6a61e2
commit 1eb3d44592
No known key found for this signature in database
GPG Key ID: 280D6CCCF95715F9
9 changed files with 70 additions and 22 deletions

View File

@ -63,6 +63,7 @@ android {
}
dependencies {
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.browser:browser:1.2.0'
@ -76,8 +77,8 @@ dependencies {
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'com.takisoft.preferencex:preferencex:1.1.0'
implementation 'com.takisoft.preferencex:preferencex-colorpicker:1.1.0'
implementation 'tech.rectifier.preferencex-android:preferencex-simplemenu:88f93154b2'
implementation 'com.timehop.stickyheadersrecyclerview:library:0.4.3@aar'
implementation 'me.zhanghai.android.appiconloader:appiconloader:1.2.0'
implementation 'tech.rectifier.preferencex-android:preferencex-simplemenu:88f93154b2'
implementation 'me.zhanghai.android.appiconloader:appiconloader-glide:1.2.0'
compileOnly 'de.robv.android.xposed:api:82'
}

View File

@ -8,10 +8,12 @@ import android.view.View;
import androidx.appcompat.app.ActionBar;
import androidx.core.text.HtmlCompat;
import com.bumptech.glide.Glide;
import com.google.android.gms.oss.licenses.OssLicensesMenuActivity;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.meowcat.edxposed.manager.databinding.ActivityAboutBinding;
import org.meowcat.edxposed.manager.util.GlideHelper;
import org.meowcat.edxposed.manager.util.NavUtil;
public class AboutActivity extends BaseActivity {
@ -64,7 +66,9 @@ public class AboutActivity extends BaseActivity {
binding.translatorsView.setVisibility(View.GONE);
}
binding.appIcon.setImageBitmap(App.getInstance().getAppIconLoader().loadIcon(getApplicationInfo(), false));
Glide.with(binding.appIcon)
.load(GlideHelper.wrapApplicationInfoForIconLoader(getApplicationInfo()))
.into(binding.appIcon);
}
void setupView(View v, final int url) {

View File

@ -36,7 +36,6 @@ import java.util.Objects;
import de.robv.android.xposed.installer.XposedApp;
import de.robv.android.xposed.installer.util.InstallZipUtil;
import me.zhanghai.android.appiconloader.AppIconLoader;
public class App extends XposedApp implements Application.ActivityLifecycleCallbacks {
public static final String TAG = "EdXposedManager";
@ -49,7 +48,6 @@ public class App extends XposedApp implements Application.ActivityLifecycleCallb
private SharedPreferences pref;
private AppCompatActivity currentActivity = null;
private boolean isUiLoaded = false;
private AppIconLoader appIconLoader;
public static App getInstance() {
return instance;
@ -144,13 +142,6 @@ public class App extends XposedApp implements Application.ActivityLifecycleCallb
}
RepoLoader.getInstance().triggerFirstLoadIfNecessary();
appIconLoader = new AppIconLoader(getResources().getDimensionPixelSize(
R.dimen.app_icon_size), false, this);
}
public AppIconLoader getAppIconLoader() {
return appIconLoader;
}
private void registerReceivers() {

View File

@ -8,9 +8,12 @@ import androidx.appcompat.widget.PopupMenu;
import androidx.appcompat.widget.TooltipCompat;
import androidx.core.content.ContextCompat;
import com.bumptech.glide.Glide;
import org.meowcat.edxposed.manager.adapters.AppHelper;
import org.meowcat.edxposed.manager.adapters.BlackListAdapter;
import org.meowcat.edxposed.manager.databinding.ActivityMainBinding;
import org.meowcat.edxposed.manager.util.GlideHelper;
import org.meowcat.edxposed.manager.util.ModuleUtil;
import org.meowcat.edxposed.manager.util.RepoLoader;
import org.meowcat.edxposed.manager.util.light.Light;
@ -78,7 +81,9 @@ public class MainActivity extends BaseActivity implements RepoLoader.RepoListene
appMenu.setOnMenuItemClickListener(this::onOptionsItemSelected);
appMenu.show();
});
binding.appIcon.setImageBitmap(App.getInstance().getAppIconLoader().loadIcon(getApplicationInfo(), false));
Glide.with(binding.appIcon)
.load(GlideHelper.wrapApplicationInfoForIconLoader(getApplicationInfo()))
.into(binding.appIcon);
String installedXposedVersion;
try {
installedXposedVersion = App.getXposedProp().getVersion();

View File

@ -22,7 +22,6 @@ import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.SwitchCompat;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.snackbar.Snackbar;
@ -32,6 +31,7 @@ import org.meowcat.edxposed.manager.repo.Module;
import org.meowcat.edxposed.manager.repo.ModuleVersion;
import org.meowcat.edxposed.manager.repo.ReleaseType;
import org.meowcat.edxposed.manager.repo.RepoDb;
import org.meowcat.edxposed.manager.util.GlideApp;
import org.meowcat.edxposed.manager.util.InstallApkUtil;
import org.meowcat.edxposed.manager.util.LinearLayoutManagerFix;
import org.meowcat.edxposed.manager.util.ModuleUtil;
@ -547,7 +547,9 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
String updateDate = dateformat.format(new Date(item.updateTime));
holder.timestamps.setText(getString(R.string.install_timestamps, creationDate, updateDate));
holder.appIcon.setImageBitmap(item.getIcon());
GlideApp.with(holder.appIcon)
.load(item.getPackageInfo())
.into(holder.appIcon);
TextView descriptionText = holder.appDescription;
descriptionText.setVisibility(View.VISIBLE);

View File

@ -2,6 +2,7 @@ package org.meowcat.edxposed.manager.adapters;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.text.TextUtils;
@ -20,6 +21,7 @@ import androidx.recyclerview.widget.RecyclerView;
import org.meowcat.edxposed.manager.App;
import org.meowcat.edxposed.manager.R;
import org.meowcat.edxposed.manager.util.GlideApp;
import org.meowcat.edxposed.manager.util.InstallApkUtil;
import java.text.DateFormat;
@ -190,13 +192,16 @@ public class AppAdapter extends RecyclerView.Adapter<AppAdapter.ViewHolder> impl
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
ApplicationInfo info = showList.get(position);
holder.appIcon.setImageBitmap(App.getInstance().getAppIconLoader().loadIcon(info, false));
holder.appName.setText(InstallApkUtil.getAppLabel(info, pm));
try {
holder.appVersion.setText(pm.getPackageInfo(info.packageName, 0).versionName);
PackageInfo packageInfo = pm.getPackageInfo(info.packageName, 0);
GlideApp.with(holder.appIcon)
.load(packageInfo)
.into(holder.appIcon);
holder.appVersion.setText(packageInfo.versionName);
holder.appVersion.setSelected(true);
String creationDate = dateformat.format(new Date(pm.getPackageInfo(info.packageName, 0).firstInstallTime));
String updateDate = dateformat.format(new Date(pm.getPackageInfo(info.packageName, 0).lastUpdateTime));
String creationDate = dateformat.format(new Date(packageInfo.firstInstallTime));
String updateDate = dateformat.format(new Date(packageInfo.lastUpdateTime));
holder.timestamps.setText(holder.itemView.getContext().getString(R.string.install_timestamps, creationDate, updateDate));
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();

View File

@ -0,0 +1,12 @@
package org.meowcat.edxposed.manager.util;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
public class GlideHelper {
public static PackageInfo wrapApplicationInfoForIconLoader(ApplicationInfo applicationInfo) {
PackageInfo packageInfo = new PackageInfo();
packageInfo.applicationInfo = applicationInfo;
return packageInfo;
}
}

View File

@ -0,0 +1,27 @@
package org.meowcat.edxposed.manager.util;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.graphics.Bitmap;
import androidx.annotation.NonNull;
import com.bumptech.glide.Glide;
import com.bumptech.glide.Registry;
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
import org.meowcat.edxposed.manager.R;
import me.zhanghai.android.appiconloader.glide.AppIconModelLoader;
@GlideModule
public class IconLoader extends AppGlideModule {
@Override
public void registerComponents(Context context, @NonNull Glide glide, Registry registry) {
int iconSize = context.getResources().getDimensionPixelSize(R.dimen.app_icon_size);
registry.prepend(PackageInfo.class, Bitmap.class, new AppIconModelLoader.Factory(iconSize,
false, context));
}
}

View File

@ -6,7 +6,6 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.Bitmap;
import android.os.Build;
import android.util.Log;
import android.widget.Toast;
@ -311,11 +310,13 @@ public final class ModuleUtil {
public final long updateTime;
final boolean isFramework;
public ApplicationInfo app;
public PackageInfo pkg;
private String appName; // loaded lazyily
private String description; // loaded lazyily
private InstalledModule(PackageInfo pkg, boolean isFramework) {
this.app = pkg.applicationInfo;
this.pkg = pkg;
this.packageName = pkg.packageName;
this.isFramework = isFramework;
this.versionName = pkg.versionName;
@ -380,8 +381,8 @@ public final class ModuleUtil {
return (version != null) && version.code > versionCode;
}
public Bitmap getIcon() {
return App.getInstance().getAppIconLoader().loadIcon(app, false);
public PackageInfo getPackageInfo() {
return pkg;
}
@NonNull