Load adaptive icon properly

This commit is contained in:
NekoInverter 2020-04-04 15:54:29 +08:00
parent 2c563ec9e2
commit c460571a3e
No known key found for this signature in database
GPG Key ID: 280D6CCCF95715F9
12 changed files with 47 additions and 36 deletions

View File

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

View File

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

View File

@ -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) {

View File

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

View File

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

View File

@ -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() {

View File

@ -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<AppAdapter.ViewHolder> implements Filterable {
protected final Context context;
@ -173,7 +175,7 @@ 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.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);

View File

@ -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<ResolveInfo> 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

View File

@ -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">
<ImageView
android:id="@+id/app_icon"
android:layout_width="42dp"
android:layout_height="64dp"
android:layout_height="42dp"
android:layout_gravity="center_vertical"
android:adjustViewBounds="true"
android:contentDescription="@string/app_name"
android:scaleType="centerCrop"
app:srcCompat="@drawable/ic_launcher_foreground" />
android:contentDescription="@string/app_name" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:paddingHorizontal="16dp"
android:layout_marginStart="14dp"
android:text="@string/app_name"
android:textAppearance="@style/TextAppearance.AppCompat.Headline" />
</LinearLayout>
@ -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"

View File

@ -35,19 +35,17 @@
<ImageView
android:id="@+id/app_icon"
android:layout_width="28dp"
android:layout_height="wrap_content"
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_centerVertical="true"
android:layout_marginStart="16dp"
android:contentDescription="@string/app_name"
android:scaleType="centerCrop"
app:srcCompat="@drawable/ic_launcher_foreground" />
android:contentDescription="@string/app_name" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="25dp"
android:layout_marginStart="10dp"
android:layout_toEndOf="@id/app_icon"
android:contentDescription="@string/app_name"
android:text="@string/app_name"

View File

@ -0,0 +1,3 @@
<resources>
<dimen name="app_icon_size">48dp</dimen>\
</resources>

View File

@ -335,4 +335,5 @@
<string name="material_design_2">Material Design 2</string>
<string name="xposed_description">Enable EdXposed enhancements:\nRemove background restrictions on EdXposed\nDetermine if Xposed is working properly\nPretend to have Xposed Installer installed</string>
<string name="status_enhancement">Enhancement mode</string>
<string name="version_x">Version %d</string>
</resources>