// Path: apicompat/src/main/java/android/content/pm/UserInfo.java
// public class UserInfo {
//   public int id;
//   public int serialNumber;
//   public String name;
//   public String iconPath;
//   public int flags;
// 
// 
//   public boolean isPrimary() {
//     return false;
//   }
// 
//   public boolean isAdmin() {
//     return false;
//   }
// 
//   public boolean isManagedProfile() {
//     return false;
//   }
// 
// 
//   public UserHandle getUserHandle() {
//     return null;
//   }
// }
// 
// Path: app/src/main/java/com/zzzmode/appopsx/ui/model/AppInfo.java
// public class AppInfo implements Parcelable {
// 
//   public String appName;
//   public String packageName;
//   public long time;
//   public long installTime;
//   public long updateTime;
//   public String pinyin;
//   public ApplicationInfo applicationInfo;
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) {
//       return true;
//     }
//     if (o == null || getClass() != o.getClass()) {
//       return false;
//     }
// 
//     AppInfo appInfo = (AppInfo) o;
// 
//     return packageName != null ? packageName.equals(appInfo.packageName)
//         : appInfo.packageName == null;
// 
//   }
// 
//   @Override
//   public int describeContents() {
//     return 0;
//   }
// 
//   @Override
//   public void writeToParcel(Parcel dest, int flags) {
//     dest.writeString(this.appName);
//     dest.writeString(this.packageName);
//   }
// 
//   public AppInfo() {
//   }
// 
//   protected AppInfo(Parcel in) {
//     this.appName = in.readString();
//     this.packageName = in.readString();
//   }
// 
//   public static final Parcelable.Creator<AppInfo> CREATOR = new Parcelable.Creator<AppInfo>() {
//     @Override
//     public AppInfo createFromParcel(Parcel source) {
//       return new AppInfo(source);
//     }
// 
//     @Override
//     public AppInfo[] newArray(int size) {
//       return new AppInfo[size];
//     }
//   };
// 
// 
//   @Override
//   public String toString() {
//     return "AppInfo{" +
//         "appName='" + appName + '\'' +
//         ", packageName='" + packageName + '\'' +
//         '}';
//   }
// }


import android.app.ActivityManager;
import android.content.Context;
import android.content.pm.UserInfo;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import androidx.collection.LruCache;
import android.widget.ImageView;
import com.zzzmode.appopsx.R;
import com.zzzmode.appopsx.ui.model.AppInfo;
package com.zzzmode.appopsx.ui.core;



/**
 * Created by zl on 2017/4/18.
 */

public class LocalImageLoader {

  private static LruCache<String, Drawable> sLruCache = null;

  private static void init(Context context) {
    if (sLruCache == null) {

      ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
      int maxSize = Math.round(am.getMemoryClass() * 1024 * 1024 * 0.3f);

      sLruCache = new LruCache<String, Drawable>(maxSize) {
        @Override
        protected int sizeOf(String key, Drawable drawable) {
          if (drawable != null) {
            if (drawable instanceof BitmapDrawable) {
              return ((BitmapDrawable) drawable).getBitmap().getAllocationByteCount();
            } else {
              return drawable.getIntrinsicWidth() * drawable.getIntrinsicHeight() * 2;
            }
          }
          return super.sizeOf(key, drawable);
        }

        @Override
        protected void entryRemoved(boolean evicted, String key, Drawable oldValue,
            Drawable newValue) {
          super.entryRemoved(evicted, key, oldValue, newValue);

        }
      };
    }
  }

// Path: apicompat/src/main/java/android/content/pm/UserInfo.java
// public class UserInfo {
//   public int id;
//   public int serialNumber;
//   public String name;
//   public String iconPath;
//   public int flags;
// 
// 
//   public boolean isPrimary() {
//     return false;
//   }
// 
//   public boolean isAdmin() {
//     return false;
//   }
// 
//   public boolean isManagedProfile() {
//     return false;
//   }
// 
// 
//   public UserHandle getUserHandle() {
//     return null;
//   }
// }
// 
// Path: app/src/main/java/com/zzzmode/appopsx/ui/model/AppInfo.java
// public class AppInfo implements Parcelable {
// 
//   public String appName;
//   public String packageName;
//   public long time;
//   public long installTime;
//   public long updateTime;
//   public String pinyin;
//   public ApplicationInfo applicationInfo;
// 
//   @Override
//   public boolean equals(Object o) {
//     if (this == o) {
//       return true;
//     }
//     if (o == null || getClass() != o.getClass()) {
//       return false;
//     }
// 
//     AppInfo appInfo = (AppInfo) o;
// 
//     return packageName != null ? packageName.equals(appInfo.packageName)
//         : appInfo.packageName == null;
// 
//   }
// 
//   @Override
//   public int describeContents() {
//     return 0;
//   }
// 
//   @Override
//   public void writeToParcel(Parcel dest, int flags) {
//     dest.writeString(this.appName);
//     dest.writeString(this.packageName);
//   }
// 
//   public AppInfo() {
//   }
// 
//   protected AppInfo(Parcel in) {
//     this.appName = in.readString();
//     this.packageName = in.readString();
//   }
// 
//   public static final Parcelable.Creator<AppInfo> CREATOR = new Parcelable.Creator<AppInfo>() {
//     @Override
//     public AppInfo createFromParcel(Parcel source) {
//       return new AppInfo(source);
//     }
// 
//     @Override
//     public AppInfo[] newArray(int size) {
//       return new AppInfo[size];
//     }
//   };
// 
// 
//   @Override
//   public String toString() {
//     return "AppInfo{" +
//         "appName='" + appName + '\'' +
//         ", packageName='" + packageName + '\'' +
//         '}';
//   }
// }


// Path: app/src/main/java/com/zzzmode/appopsx/ui/core/LocalImageLoader.java
import android.app.ActivityManager;
import android.content.Context;
import android.content.pm.UserInfo;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import androidx.collection.LruCache;
import android.widget.ImageView;
import com.zzzmode.appopsx.R;
import com.zzzmode.appopsx.ui.model.AppInfo;

package com.zzzmode.appopsx.ui.core;



/**
 * Created by zl on 2017/4/18.
 */

public class LocalImageLoader {

  private static LruCache<String, Drawable> sLruCache = null;

  private static void init(Context context) {
    if (sLruCache == null) {

      ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
      int maxSize = Math.round(am.getMemoryClass() * 1024 * 1024 * 0.3f);

      sLruCache = new LruCache<String, Drawable>(maxSize) {
        @Override
        protected int sizeOf(String key, Drawable drawable) {
          if (drawable != null) {
            if (drawable instanceof BitmapDrawable) {
              return ((BitmapDrawable) drawable).getBitmap().getAllocationByteCount();
            } else {
              return drawable.getIntrinsicWidth() * drawable.getIntrinsicHeight() * 2;
            }
          }
          return super.sizeOf(key, drawable);
        }

        @Override
        protected void entryRemoved(boolean evicted, String key, Drawable oldValue,
            Drawable newValue) {
          super.entryRemoved(evicted, key, oldValue, newValue);

        }
      };
    }
  }

  public static void load(ImageView view, AppInfo appInfo) {