From c460571a3e60f4b08354a4d23f4a01fe681860c4 Mon Sep 17 00:00:00 2001 From: NekoInverter <42698724+NekoInverter@users.noreply.github.com> Date: Sat, 4 Apr 2020 15:54:29 +0800 Subject: [PATCH] Load adaptive icon properly --- app/build.gradle | 1 + .../android/xposed/installer/XposedApp.java | 4 ++-- .../edxposed/manager/AboutActivity.java | 2 ++ .../edxposed/manager/MainActivity.java | 8 +++++++ .../edxposed/manager/ModulesActivity.java | 2 +- .../meowcat/edxposed/manager/XposedApp.java | 11 +++++++++- .../edxposed/manager/adapters/AppAdapter.java | 4 +++- .../edxposed/manager/util/ModuleUtil.java | 22 +++++-------------- app/src/main/res/layout/activity_about.xml | 15 ++++++------- app/src/main/res/layout/activity_main.xml | 10 ++++----- app/src/main/res/values/dimens.xml | 3 +++ app/src/main/res/values/strings.xml | 1 + 12 files changed, 47 insertions(+), 36 deletions(-) create mode 100644 app/src/main/res/values/dimens.xml diff --git a/app/build.gradle b/app/build.gradle index 4a856134..459f0d64 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -74,5 +74,6 @@ dependencies { 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.1.0' compileOnly 'de.robv.android.xposed:api:82' } diff --git a/app/src/main/java/de/robv/android/xposed/installer/XposedApp.java b/app/src/main/java/de/robv/android/xposed/installer/XposedApp.java index 90ca0f73..3c3a897a 100644 --- a/app/src/main/java/de/robv/android/xposed/installer/XposedApp.java +++ b/app/src/main/java/de/robv/android/xposed/installer/XposedApp.java @@ -17,7 +17,7 @@ public class XposedApp extends Application { public static final String TAG = "XposedApp"; private static final File EDXPOSED_PROP_FILE = new File("/system/framework/edconfig.jar"); private static XposedApp instance = null; - public InstallZipUtil.XposedProp xposedProp; + public InstallZipUtil.XposedProp mXposedProp; public static XposedApp getInstance() { return instance; @@ -51,7 +51,7 @@ public class XposedApp extends Application { } } synchronized (this) { - xposedProp = prop; + mXposedProp = prop; } } } 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 464c4b56..f3f6d878 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/AboutActivity.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/AboutActivity.java @@ -69,6 +69,8 @@ public class AboutActivity extends BaseActivity { if (translator.isEmpty()) { binding.translatorsView.setVisibility(View.GONE); } + + binding.appIcon.setImageBitmap(XposedApp.getInstance().getAppIconLoader().loadIcon(getApplicationInfo(), false)); } void setupView(View v, final int url) { 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 b82aecb6..038591a6 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/MainActivity.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/MainActivity.java @@ -14,6 +14,8 @@ import org.meowcat.edxposed.manager.databinding.ActivityMainBinding; import org.meowcat.edxposed.manager.util.ModuleUtil; import org.meowcat.edxposed.manager.util.RepoLoader; +import me.zhanghai.android.appiconloader.AppIconLoader; + public class MainActivity extends BaseActivity implements RepoLoader.RepoListener, ModuleUtil.ModuleListener { ActivityMainBinding binding; private RepoLoader repoLoader; @@ -70,6 +72,7 @@ public class MainActivity extends BaseActivity implements RepoLoader.RepoListene appMenu.setOnMenuItemClickListener(this::onOptionsItemSelected); appMenu.show(); }); + binding.appIcon.setImageBitmap(XposedApp.getInstance().getAppIconLoader().loadIcon(getApplicationInfo(), false)); String installedXposedVersion; try { installedXposedVersion = XposedApp.getXposedProp().getVersion(); @@ -90,6 +93,11 @@ public class MainActivity extends BaseActivity implements RepoLoader.RepoListene binding.status.setCardBackgroundColor(ContextCompat.getColor(this, R.color.amber_500)); binding.statusIcon.setImageDrawable(getDrawable(R.drawable.ic_warning)); } + } else if (XposedApp.getXposedVersion() > 0) { + binding.statusTitle.setText(R.string.Activated); + binding.statusSummary.setText(getString(R.string.version_x, XposedApp.getXposedVersion())); + binding.status.setCardBackgroundColor(ContextCompat.getColor(this, R.color.download_status_update_available)); + binding.statusIcon.setImageDrawable(getDrawable(R.drawable.ic_check_circle)); } else { binding.statusTitle.setText(R.string.Install); binding.statusSummary.setText(R.string.InstallDetail); 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 d08fb183..171919fd 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/ModulesActivity.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/ModulesActivity.java @@ -545,7 +545,7 @@ 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.setImageDrawable(item.getIcon()); + holder.appIcon.setImageBitmap(item.getIcon(ModulesActivity.this)); TextView descriptionText = holder.appDescription; descriptionText.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/org/meowcat/edxposed/manager/XposedApp.java b/app/src/main/java/org/meowcat/edxposed/manager/XposedApp.java index a0bcceda..962c19ab 100644 --- a/app/src/main/java/org/meowcat/edxposed/manager/XposedApp.java +++ b/app/src/main/java/org/meowcat/edxposed/manager/XposedApp.java @@ -36,6 +36,7 @@ import java.util.Date; import java.util.Objects; import de.robv.android.xposed.installer.util.InstallZipUtil; +import me.zhanghai.android.appiconloader.AppIconLoader; public class XposedApp extends de.robv.android.xposed.installer.XposedApp implements Application.ActivityLifecycleCallbacks { public static final String TAG = "EdXposedManager"; @@ -49,13 +50,14 @@ public class XposedApp extends de.robv.android.xposed.installer.XposedApp implem private SharedPreferences pref; private AppCompatActivity currentActivity = null; private boolean isUiLoaded = false; + private AppIconLoader appIconLoader; public static XposedApp getInstance() { return instance; } public static InstallZipUtil.XposedProp getXposedProp() { - return de.robv.android.xposed.installer.XposedApp.getInstance().xposedProp; + return de.robv.android.xposed.installer.XposedApp.getInstance().mXposedProp; } public static void runOnUiThread(Runnable action) { @@ -144,6 +146,13 @@ public class XposedApp extends de.robv.android.xposed.installer.XposedApp implem } RepoLoader.getInstance().triggerFirstLoadIfNecessary(); + + appIconLoader = new AppIconLoader(getResources().getDimensionPixelSize( + R.dimen.app_icon_size), this); + } + + public AppIconLoader getAppIconLoader(){ + return appIconLoader; } private void registerReceivers() { 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 393e84a0..36f26e38 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 @@ -33,6 +33,8 @@ import java.util.Date; import java.util.List; import java.util.Locale; +import me.zhanghai.android.appiconloader.AppIconLoader; + public class AppAdapter extends RecyclerView.Adapter implements Filterable { protected final Context context; @@ -173,7 +175,7 @@ public class AppAdapter extends RecyclerView.Adapter impl @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { ApplicationInfo info = showList.get(position); - holder.appIcon.setImageDrawable(info.loadIcon(pm)); + holder.appIcon.setImageBitmap(XposedApp.getInstance().getAppIconLoader().loadIcon(info, false)); holder.appName.setText(InstallApkUtil.getAppLabel(info, pm)); try { holder.appVersion.setText(pm.getPackageInfo(info.packageName, 0).versionName); 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 c5c638b5..7a68c67b 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 @@ -8,6 +8,7 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; +import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.FileUtils; @@ -32,6 +33,8 @@ import java.util.List; import java.util.Map; import java.util.concurrent.CopyOnWriteArrayList; +import me.zhanghai.android.appiconloader.AppIconLoader; + @SuppressWarnings("OctalInteger") public final class ModuleUtil { // xposedminversion below this @@ -385,23 +388,8 @@ public final class ModuleUtil { return (version != null) && version.code > versionCode; } - public Drawable getIcon() { - if (iconCache != null) - return iconCache.newDrawable(); - - Intent mIntent = new Intent(Intent.ACTION_MAIN); - //mIntent.addCategory(ModulesFragment.SETTINGS_CATEGORY); - mIntent.setPackage(app.packageName); - List ris = pm.queryIntentActivities(mIntent, 0); - - Drawable result; - if (ris == null || ris.size() <= 0) - result = app.loadIcon(pm); - else - result = ris.get(0).activityInfo.loadIcon(pm); - iconCache = result.getConstantState(); - - return result; + public Bitmap getIcon(Context context) { + return XposedApp.getInstance().getAppIconLoader().loadIcon(app, false); } @NonNull diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 3a967f30..4a8dd996 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -27,22 +27,22 @@ android:layout_width="match_parent" android:layout_height="72dp" android:orientation="horizontal" - android:padding="16dp"> + android:padding="16dp" + android:clipChildren="false" + android:clipToPadding="false"> + android:contentDescription="@string/app_name" /> @@ -67,7 +67,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="32dp" - android:layout_marginLeft="32dp" android:orientation="vertical" android:paddingTop="8dp" android:paddingBottom="8dp" diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index ab70d387..b0fd8790 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -35,19 +35,17 @@ + android:contentDescription="@string/app_name" /> + 48dp\ + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7f070899..8d0ba9ba 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -335,4 +335,5 @@ Material Design 2 Enable EdXposed enhancements:\nRemove background restrictions on EdXposed\nDetermine if Xposed is working properly\nPretend to have Xposed Installer installed Enhancement mode + Version %d