Load icons with glide
This commit is contained in:
parent
01fb6a61e2
commit
1eb3d44592
|
|
@ -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'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue