diff --git a/app/build.gradle b/app/build.gradle index 3fb1a78d..7e415d19 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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' } diff --git a/app/src/main/java/org/meowcat/edxposed/manager/AboutActivity.java b/app/src/main/java/org/meowcat/edxposed/manager/AboutActivity.java index f6898443..b706b2d7 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/AboutActivity.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/AboutActivity.java @@ -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) { diff --git a/app/src/main/java/org/meowcat/edxposed/manager/App.java b/app/src/main/java/org/meowcat/edxposed/manager/App.java index 6ad4014a..9118fd87 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/App.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/App.java @@ -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() { diff --git a/app/src/main/java/org/meowcat/edxposed/manager/MainActivity.java b/app/src/main/java/org/meowcat/edxposed/manager/MainActivity.java index ad9571d3..9cc07f77 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/MainActivity.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/MainActivity.java @@ -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(); diff --git a/app/src/main/java/org/meowcat/edxposed/manager/ModulesActivity.java b/app/src/main/java/org/meowcat/edxposed/manager/ModulesActivity.java index c2b1c476..8bba3351 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/ModulesActivity.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/ModulesActivity.java @@ -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); diff --git a/app/src/main/java/org/meowcat/edxposed/manager/adapters/AppAdapter.java b/app/src/main/java/org/meowcat/edxposed/manager/adapters/AppAdapter.java index 240ebb78..ca7557ef 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/adapters/AppAdapter.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/adapters/AppAdapter.java @@ -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 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(); diff --git a/app/src/main/java/org/meowcat/edxposed/manager/util/GlideHelper.java b/app/src/main/java/org/meowcat/edxposed/manager/util/GlideHelper.java new file mode 100644 index 00000000..caf73c54 --- /dev/null +++ b/app/src/main/java/org/meowcat/edxposed/manager/util/GlideHelper.java @@ -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; + } +} diff --git a/app/src/main/java/org/meowcat/edxposed/manager/util/IconLoader.java b/app/src/main/java/org/meowcat/edxposed/manager/util/IconLoader.java new file mode 100644 index 00000000..878b4af1 --- /dev/null +++ b/app/src/main/java/org/meowcat/edxposed/manager/util/IconLoader.java @@ -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)); + } +} + diff --git a/app/src/main/java/org/meowcat/edxposed/manager/util/ModuleUtil.java b/app/src/main/java/org/meowcat/edxposed/manager/util/ModuleUtil.java index 724cd17b..50652360 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/util/ModuleUtil.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/util/ModuleUtil.java @@ -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