Load adaptive icon properly
This commit is contained in:
parent
2c563ec9e2
commit
c460571a3e
|
|
@ -74,5 +74,6 @@ dependencies {
|
||||||
implementation 'com.takisoft.preferencex:preferencex-colorpicker:1.1.0'
|
implementation 'com.takisoft.preferencex:preferencex-colorpicker:1.1.0'
|
||||||
implementation 'tech.rectifier.preferencex-android:preferencex-simplemenu:88f93154b2'
|
implementation 'tech.rectifier.preferencex-android:preferencex-simplemenu:88f93154b2'
|
||||||
implementation 'com.timehop.stickyheadersrecyclerview:library:0.4.3@aar'
|
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'
|
compileOnly 'de.robv.android.xposed:api:82'
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ public class XposedApp extends Application {
|
||||||
public static final String TAG = "XposedApp";
|
public static final String TAG = "XposedApp";
|
||||||
private static final File EDXPOSED_PROP_FILE = new File("/system/framework/edconfig.jar");
|
private static final File EDXPOSED_PROP_FILE = new File("/system/framework/edconfig.jar");
|
||||||
private static XposedApp instance = null;
|
private static XposedApp instance = null;
|
||||||
public InstallZipUtil.XposedProp xposedProp;
|
public InstallZipUtil.XposedProp mXposedProp;
|
||||||
|
|
||||||
public static XposedApp getInstance() {
|
public static XposedApp getInstance() {
|
||||||
return instance;
|
return instance;
|
||||||
|
|
@ -51,7 +51,7 @@ public class XposedApp extends Application {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
xposedProp = prop;
|
mXposedProp = prop;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,8 @@ public class AboutActivity extends BaseActivity {
|
||||||
if (translator.isEmpty()) {
|
if (translator.isEmpty()) {
|
||||||
binding.translatorsView.setVisibility(View.GONE);
|
binding.translatorsView.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
binding.appIcon.setImageBitmap(XposedApp.getInstance().getAppIconLoader().loadIcon(getApplicationInfo(), false));
|
||||||
}
|
}
|
||||||
|
|
||||||
void setupView(View v, final int url) {
|
void setupView(View v, final int url) {
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,8 @@ import org.meowcat.edxposed.manager.databinding.ActivityMainBinding;
|
||||||
import org.meowcat.edxposed.manager.util.ModuleUtil;
|
import org.meowcat.edxposed.manager.util.ModuleUtil;
|
||||||
import org.meowcat.edxposed.manager.util.RepoLoader;
|
import org.meowcat.edxposed.manager.util.RepoLoader;
|
||||||
|
|
||||||
|
import me.zhanghai.android.appiconloader.AppIconLoader;
|
||||||
|
|
||||||
public class MainActivity extends BaseActivity implements RepoLoader.RepoListener, ModuleUtil.ModuleListener {
|
public class MainActivity extends BaseActivity implements RepoLoader.RepoListener, ModuleUtil.ModuleListener {
|
||||||
ActivityMainBinding binding;
|
ActivityMainBinding binding;
|
||||||
private RepoLoader repoLoader;
|
private RepoLoader repoLoader;
|
||||||
|
|
@ -70,6 +72,7 @@ public class MainActivity extends BaseActivity implements RepoLoader.RepoListene
|
||||||
appMenu.setOnMenuItemClickListener(this::onOptionsItemSelected);
|
appMenu.setOnMenuItemClickListener(this::onOptionsItemSelected);
|
||||||
appMenu.show();
|
appMenu.show();
|
||||||
});
|
});
|
||||||
|
binding.appIcon.setImageBitmap(XposedApp.getInstance().getAppIconLoader().loadIcon(getApplicationInfo(), false));
|
||||||
String installedXposedVersion;
|
String installedXposedVersion;
|
||||||
try {
|
try {
|
||||||
installedXposedVersion = XposedApp.getXposedProp().getVersion();
|
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.status.setCardBackgroundColor(ContextCompat.getColor(this, R.color.amber_500));
|
||||||
binding.statusIcon.setImageDrawable(getDrawable(R.drawable.ic_warning));
|
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 {
|
} else {
|
||||||
binding.statusTitle.setText(R.string.Install);
|
binding.statusTitle.setText(R.string.Install);
|
||||||
binding.statusSummary.setText(R.string.InstallDetail);
|
binding.statusSummary.setText(R.string.InstallDetail);
|
||||||
|
|
|
||||||
|
|
@ -545,7 +545,7 @@ public class ModulesActivity extends BaseActivity implements ModuleUtil.ModuleLi
|
||||||
String updateDate = dateformat.format(new Date(item.updateTime));
|
String updateDate = dateformat.format(new Date(item.updateTime));
|
||||||
holder.timestamps.setText(getString(R.string.install_timestamps, creationDate, updateDate));
|
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;
|
TextView descriptionText = holder.appDescription;
|
||||||
descriptionText.setVisibility(View.VISIBLE);
|
descriptionText.setVisibility(View.VISIBLE);
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ import java.util.Date;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import de.robv.android.xposed.installer.util.InstallZipUtil;
|
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 class XposedApp extends de.robv.android.xposed.installer.XposedApp implements Application.ActivityLifecycleCallbacks {
|
||||||
public static final String TAG = "EdXposedManager";
|
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 SharedPreferences pref;
|
||||||
private AppCompatActivity currentActivity = null;
|
private AppCompatActivity currentActivity = null;
|
||||||
private boolean isUiLoaded = false;
|
private boolean isUiLoaded = false;
|
||||||
|
private AppIconLoader appIconLoader;
|
||||||
|
|
||||||
public static XposedApp getInstance() {
|
public static XposedApp getInstance() {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static InstallZipUtil.XposedProp getXposedProp() {
|
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) {
|
public static void runOnUiThread(Runnable action) {
|
||||||
|
|
@ -144,6 +146,13 @@ public class XposedApp extends de.robv.android.xposed.installer.XposedApp implem
|
||||||
}
|
}
|
||||||
|
|
||||||
RepoLoader.getInstance().triggerFirstLoadIfNecessary();
|
RepoLoader.getInstance().triggerFirstLoadIfNecessary();
|
||||||
|
|
||||||
|
appIconLoader = new AppIconLoader(getResources().getDimensionPixelSize(
|
||||||
|
R.dimen.app_icon_size), this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public AppIconLoader getAppIconLoader(){
|
||||||
|
return appIconLoader;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerReceivers() {
|
private void registerReceivers() {
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,8 @@ import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import me.zhanghai.android.appiconloader.AppIconLoader;
|
||||||
|
|
||||||
public class AppAdapter extends RecyclerView.Adapter<AppAdapter.ViewHolder> implements Filterable {
|
public class AppAdapter extends RecyclerView.Adapter<AppAdapter.ViewHolder> implements Filterable {
|
||||||
|
|
||||||
protected final Context context;
|
protected final Context context;
|
||||||
|
|
@ -173,7 +175,7 @@ public class AppAdapter extends RecyclerView.Adapter<AppAdapter.ViewHolder> impl
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
|
||||||
ApplicationInfo info = showList.get(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));
|
holder.appName.setText(InstallApkUtil.getAppLabel(info, pm));
|
||||||
try {
|
try {
|
||||||
holder.appVersion.setText(pm.getPackageInfo(info.packageName, 0).versionName);
|
holder.appVersion.setText(pm.getPackageInfo(info.packageName, 0).versionName);
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.PackageManager.NameNotFoundException;
|
import android.content.pm.PackageManager.NameNotFoundException;
|
||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.FileUtils;
|
import android.os.FileUtils;
|
||||||
|
|
@ -32,6 +33,8 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
|
||||||
|
import me.zhanghai.android.appiconloader.AppIconLoader;
|
||||||
|
|
||||||
@SuppressWarnings("OctalInteger")
|
@SuppressWarnings("OctalInteger")
|
||||||
public final class ModuleUtil {
|
public final class ModuleUtil {
|
||||||
// xposedminversion below this
|
// xposedminversion below this
|
||||||
|
|
@ -385,23 +388,8 @@ public final class ModuleUtil {
|
||||||
return (version != null) && version.code > versionCode;
|
return (version != null) && version.code > versionCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Drawable getIcon() {
|
public Bitmap getIcon(Context context) {
|
||||||
if (iconCache != null)
|
return XposedApp.getInstance().getAppIconLoader().loadIcon(app, false);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|
|
||||||
|
|
@ -27,22 +27,22 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="72dp"
|
android:layout_height="72dp"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:padding="16dp">
|
android:padding="16dp"
|
||||||
|
android:clipChildren="false"
|
||||||
|
android:clipToPadding="false">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
android:id="@+id/app_icon"
|
||||||
android:layout_width="42dp"
|
android:layout_width="42dp"
|
||||||
android:layout_height="64dp"
|
android:layout_height="42dp"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:adjustViewBounds="true"
|
android:contentDescription="@string/app_name" />
|
||||||
android:contentDescription="@string/app_name"
|
|
||||||
android:scaleType="centerCrop"
|
|
||||||
app:srcCompat="@drawable/ic_launcher_foreground" />
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:paddingHorizontal="16dp"
|
android:layout_marginStart="14dp"
|
||||||
android:text="@string/app_name"
|
android:text="@string/app_name"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Headline" />
|
android:textAppearance="@style/TextAppearance.AppCompat.Headline" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
@ -67,7 +67,6 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="32dp"
|
android:layout_marginStart="32dp"
|
||||||
android:layout_marginLeft="32dp"
|
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:paddingTop="8dp"
|
android:paddingTop="8dp"
|
||||||
android:paddingBottom="8dp"
|
android:paddingBottom="8dp"
|
||||||
|
|
|
||||||
|
|
@ -35,19 +35,17 @@
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/app_icon"
|
android:id="@+id/app_icon"
|
||||||
android:layout_width="28dp"
|
android:layout_width="42dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="42dp"
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_marginStart="16dp"
|
android:layout_marginStart="16dp"
|
||||||
android:contentDescription="@string/app_name"
|
android:contentDescription="@string/app_name" />
|
||||||
android:scaleType="centerCrop"
|
|
||||||
app:srcCompat="@drawable/ic_launcher_foreground" />
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_marginStart="25dp"
|
android:layout_marginStart="10dp"
|
||||||
android:layout_toEndOf="@id/app_icon"
|
android:layout_toEndOf="@id/app_icon"
|
||||||
android:contentDescription="@string/app_name"
|
android:contentDescription="@string/app_name"
|
||||||
android:text="@string/app_name"
|
android:text="@string/app_name"
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
<resources>
|
||||||
|
<dimen name="app_icon_size">48dp</dimen>\
|
||||||
|
</resources>
|
||||||
|
|
@ -335,4 +335,5 @@
|
||||||
<string name="material_design_2">Material Design 2</string>
|
<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="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="status_enhancement">Enhancement mode</string>
|
||||||
|
<string name="version_x">Version %d</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue