package de.theknut.xposedgelsettings.ui; import android.content.ComponentName; import android.content.Context; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.view.View; import android.widget.CheckBox; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; import java.util.HashSet; import de.theknut.xposedgelsettings.hooks.Common; import de.theknut.xposedgelsettings.hooks.icon.IconPack; /** * Created by Alexander Schulz on 15.06.2014. */ public class ImageLoader extends AsyncTask<Void, Void, Void> { PackageManager pm; ResolveInfo item; ViewHolder holder; IconPack iconPack; Drawable icon; Drawable selectedIcon; ComponentName cmpName; boolean iconNotFound; public ImageLoader(PackageManager pm, ResolveInfo item, ViewHolder holder) { this.pm = pm; this.item = item; this.holder = holder; this.iconPack = FragmentIcon.iconPack; } @Override protected void onPreExecute() { super.onPreExecute(); this.holder.imageView.setImageResource(android.R.drawable.sym_def_app_icon); } @Override protected Void doInBackground(Void... params) { cmpName = new ComponentName(item.activityInfo.packageName, item.activityInfo.name); if (iconPack == null) { try { FragmentIcon.iconPack = new IconPack( CommonUI.CONTEXT, CommonUI.CONTEXT.getSharedPreferences( Common.PREFERENCES_NAME, Context.MODE_WORLD_READABLE ).getString("iconpack", Common.ICONPACK_DEFAULT)); this.iconPack = FragmentIcon.iconPack; this.iconPack.loadAppFilter(); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } } this.icon = iconPack.loadIcon(cmpName.flattenToString()); if (isCancelled()) return null; if (this.icon == null) { iconNotFound = true; this.icon = item.loadIcon(pm); } SharedPreferences prefs = CommonUI.CONTEXT.getSharedPreferences(Common.PREFERENCES_NAME, Context.MODE_WORLD_READABLE); HashSet<String> selectedIcons = (HashSet<String>) prefs.getStringSet("selectedicons", new HashSet<String>()); for (String i : selectedIcons) { if (isCancelled()) return null; String[] split = i.split("\\|"); if (split[0].equals(cmpName.flattenToString())) { selectedIcon = iconPack.loadSingleIconFromIconPack(split[1], split[0], split[2], false); break; } } return null; } @Override protected void onPostExecute(Void aVoid) { if (isCancelled()) return; holder.imageView.setImageDrawable(icon); if (holder.delete == null || holder.checkBox.getVisibility() == View.VISIBLE) return; if (holder.delete.getVisibility() == View.VISIBLE) { holder.textView.setTextColor(Color.parseColor("#ff22aa00")); if (selectedIcon != null) { holder.selectedIcon.setImageDrawable(selectedIcon); } } else if (iconPack != null && !iconPack.isDefault() && FragmentIcon.iconPack.getUnthemedIcons().contains(cmpName.flattenToString())) { holder.textView.setTextColor(Color.RED); } else { holder.textView.setTextColor(CommonUI.TextColor); } } public static class ViewHolder { ImageView imageView; TextView textView; CheckBox checkBox; ImageButton delete; ImageView selectedIcon; ImageLoader imageLoader; String cmpName; public void loadImageAsync(PackageManager pm, ResolveInfo item, ViewHolder holder) { if (imageLoader != null) { imageLoader.cancel(true); } imageLoader = new ImageLoader(pm, item, holder); imageLoader.execute(); } } }