// Path: app/src/main/java/ooo/oxo/apps/materialize/io/IconCacheManager.java
// public class IconCacheManager extends IconManager {
// 
//     private static final String TAG = "IconCacheManager";
// 
//     @SuppressWarnings("SpellCheckingInspection")
//     private static final String NO_MEDIA = ".nomedia";
// 
//     public IconCacheManager(Context context) {
//         super(new File(context.getExternalCacheDir(), "icons"));
//     }
// 
//     @Nullable
//     public Uri get(AppInfo app) {
//         File file = makeIconFile(app);
// 
//         if (file == null || !file.isFile()) {
//             return null;
//         } else {
//             return Uri.fromFile(file);
//         }
//     }
// 
//     @Nullable
//     @Override
//     protected File makeIconFile(AppInfo app) {
//         File dir = makeIconDirectory(app);
//         return dir == null ? null : new File(dir, app.component.getClassName());
//     }
// 
//     @Nullable
//     private File makeIconDirectory(AppInfo app) {
//         File dir = new File(root, app.component.getPackageName());
// 
//         if (!dir.mkdirs() && !dir.isDirectory()) {
//             Log.e(TAG, "Failed to create icon directory for package at " + dir.getAbsolutePath());
//             return null;
//         }
// 
//         createNoMediaFile(dir);
// 
//         return dir;
//     }
// 
//     private boolean createNoMediaFile(File dir) {
//         try {
//             File noMedia = new File(dir, NO_MEDIA);
//             return noMedia.isFile() || noMedia.createNewFile();
//         } catch (IOException e) {
//             return false;
//         }
//     }
// 
// }
// 
// Path: app/src/main/java/ooo/oxo/apps/materialize/util/DisplayMetricsCompat.java
// public class DisplayMetricsCompat extends DisplayMetrics {
// 
//     public static final int DENSITY_XXXHIGH = 640;
// 
//     public static final int DENSITY_XXHIGH = 480;
// 
// }


import com.github.stuxuhai.jpinyin.PinyinFormat;
import com.github.stuxuhai.jpinyin.PinyinHelper;
import ooo.oxo.apps.materialize.io.IconCacheManager;
import ooo.oxo.apps.materialize.util.DisplayMetricsCompat;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log;
import android.util.TypedValue;
/*
 * Materialize - Materialize all those not material
 * Copyright (C) 2015  XiNGRZ <xxx@oxo.ooo>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package ooo.oxo.apps.materialize;




/**
 * A wrapper of {@link ActivityInfo}
 */
public class AppInfo {

    private static final String TAG = "AppInfo";

    private static int[] DENSITIES = new int[]{
            DisplayMetricsCompat.DENSITY_XXXHIGH,
            DisplayMetricsCompat.DENSITY_XXHIGH,
            DisplayMetricsCompat.DENSITY_XHIGH,
            DisplayMetricsCompat.DENSITY_HIGH   // 这都没有狗带吧
    };

    public final ActivityInfo activityInfo;

    public ComponentName component;

    public String label;

    public Pinyin labelPinyin;

    public Resources res;

    public int iconResId;

    public TypedValue iconValue = new TypedValue();

    public Bitmap icon = null;

    public Uri cache = null;

    private AppInfo(ActivityInfo activityInfo) {
        this.activityInfo = activityInfo;
    }

    /**
     * Wraps and resolve an {@link ActivityInfo}
     *
     * @param activityInfo   The {@link ActivityInfo} object to resolve
     * @param packageManager A {@link PackageManager} instance to resolve the {@link ActivityInfo}
     * @return An {@link AppInfo} instance with its {@link #label} and icon resolved
     */
    @Nullable
    public static AppInfo from(ActivityInfo activityInfo, PackageManager packageManager) {
// Path: app/src/main/java/ooo/oxo/apps/materialize/io/IconCacheManager.java
// public class IconCacheManager extends IconManager {
// 
//     private static final String TAG = "IconCacheManager";
// 
//     @SuppressWarnings("SpellCheckingInspection")
//     private static final String NO_MEDIA = ".nomedia";
// 
//     public IconCacheManager(Context context) {
//         super(new File(context.getExternalCacheDir(), "icons"));
//     }
// 
//     @Nullable
//     public Uri get(AppInfo app) {
//         File file = makeIconFile(app);
// 
//         if (file == null || !file.isFile()) {
//             return null;
//         } else {
//             return Uri.fromFile(file);
//         }
//     }
// 
//     @Nullable
//     @Override
//     protected File makeIconFile(AppInfo app) {
//         File dir = makeIconDirectory(app);
//         return dir == null ? null : new File(dir, app.component.getClassName());
//     }
// 
//     @Nullable
//     private File makeIconDirectory(AppInfo app) {
//         File dir = new File(root, app.component.getPackageName());
// 
//         if (!dir.mkdirs() && !dir.isDirectory()) {
//             Log.e(TAG, "Failed to create icon directory for package at " + dir.getAbsolutePath());
//             return null;
//         }
// 
//         createNoMediaFile(dir);
// 
//         return dir;
//     }
// 
//     private boolean createNoMediaFile(File dir) {
//         try {
//             File noMedia = new File(dir, NO_MEDIA);
//             return noMedia.isFile() || noMedia.createNewFile();
//         } catch (IOException e) {
//             return false;
//         }
//     }
// 
// }
// 
// Path: app/src/main/java/ooo/oxo/apps/materialize/util/DisplayMetricsCompat.java
// public class DisplayMetricsCompat extends DisplayMetrics {
// 
//     public static final int DENSITY_XXXHIGH = 640;
// 
//     public static final int DENSITY_XXHIGH = 480;
// 
// }


// Path: app/src/main/java/ooo/oxo/apps/materialize/AppInfo.java
import com.github.stuxuhai.jpinyin.PinyinFormat;
import com.github.stuxuhai.jpinyin.PinyinHelper;
import ooo.oxo.apps.materialize.io.IconCacheManager;
import ooo.oxo.apps.materialize.util.DisplayMetricsCompat;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Log;
import android.util.TypedValue;

/*
 * Materialize - Materialize all those not material
 * Copyright (C) 2015  XiNGRZ <xxx@oxo.ooo>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package ooo.oxo.apps.materialize;




/**
 * A wrapper of {@link ActivityInfo}
 */
public class AppInfo {

    private static final String TAG = "AppInfo";

    private static int[] DENSITIES = new int[]{
            DisplayMetricsCompat.DENSITY_XXXHIGH,
            DisplayMetricsCompat.DENSITY_XXHIGH,
            DisplayMetricsCompat.DENSITY_XHIGH,
            DisplayMetricsCompat.DENSITY_HIGH   // 这都没有狗带吧
    };

    public final ActivityInfo activityInfo;

    public ComponentName component;

    public String label;

    public Pinyin labelPinyin;

    public Resources res;

    public int iconResId;

    public TypedValue iconValue = new TypedValue();

    public Bitmap icon = null;

    public Uri cache = null;

    private AppInfo(ActivityInfo activityInfo) {
        this.activityInfo = activityInfo;
    }

    /**
     * Wraps and resolve an {@link ActivityInfo}
     *
     * @param activityInfo   The {@link ActivityInfo} object to resolve
     * @param packageManager A {@link PackageManager} instance to resolve the {@link ActivityInfo}
     * @return An {@link AppInfo} instance with its {@link #label} and icon resolved
     */
    @Nullable
    public static AppInfo from(ActivityInfo activityInfo, PackageManager packageManager) {
        AppInfo app = new AppInfo(activityInfo);