package com.mcxiaoke.apptoolkit.task; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.util.Pair; import com.mcxiaoke.apptoolkit.AppConfig; import com.mcxiaoke.apptoolkit.AppContext; import com.mcxiaoke.apptoolkit.cache.CacheManager; import com.mcxiaoke.apptoolkit.db.Database; import com.mcxiaoke.apptoolkit.model.AppInfo; import com.mcxiaoke.apptoolkit.util.Utils; import java.util.ArrayList; import java.util.List; /** * Project: filemanager * Package: com.com.mcxiaoke.appmanager.task * User: com.mcxiaoke * Date: 13-6-11 * Time: 上午10:58 */ public class LoadAppsTask extends AsyncTaskBase<TaskMessage, Pair<Integer, Integer>, List<AppInfo>> { private Context mContext; private PackageManager mPackageManager; public LoadAppsTask(Context context, AsyncTaskCallback<Pair<Integer, Integer>, List<AppInfo>> callback) { super(callback); this.mContext = context; this.mPackageManager = context.getPackageManager(); AppContext.v("LoadAppsTask()"); } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected List<AppInfo> onExecute(TaskMessage... params) throws Exception { TaskMessage param = params[0]; int type = param.type; boolean includeSystemApp = param.flag; AppContext.v("LoadAppsTask.onExecute() type=" + type + " includeSystemApp=" + includeSystemApp); int flags = PackageManager.GET_META_DATA; List<AppInfo> apps = null; List<PackageInfo> installedPackages = mPackageManager.getInstalledPackages(flags); if (installedPackages != null && installedPackages.size() > 0) { apps = new ArrayList<AppInfo>(installedPackages.size()); List<String> backupDatas = new ArrayList<String>(); Database db = AppContext.getApp().getDB(); List<String> dbBackupDatas = db.getBackupApps(); if (dbBackupDatas != null) { for (String packageName : dbBackupDatas) { if (Utils.isBackupDataExists(packageName)) { backupDatas.add(packageName); } else { db.removeBackup(packageName); } } } List<String> backupApks = Utils.getBackupApkFiles(); if (AppConfig.TYPE_USER_APP_MANAGER == type) { for (PackageInfo info : installedPackages) { if (includeSystemApp || !Utils.isSystemApp(info)) { AddToApps(apps, backupDatas, backupApks, info); } } } else if (AppConfig.TYPE_SYSTEM_APP_MANAGER == type) { for (PackageInfo info : installedPackages) { if (Utils.isSystemApp(info)) { AddToApps(apps, backupDatas, backupApks, info); } } } } return apps; } private void AddToApps(List<AppInfo> apps, List<String> backupDatas, List<String> backupApks, PackageInfo info) { AppInfo app = Utils.convert(mPackageManager, info); app.apkBackup = backupApks.contains(Utils.buildApkName(app)); app.dataBackup = backupDatas.contains(app.packageName); apps.add(app); Drawable icon = info.applicationInfo.loadIcon(mPackageManager); CacheManager.getInstance().putIcon(info.packageName, icon); } @Override protected void onProgressUpdate(Pair<Integer, Integer>... values) { super.onProgressUpdate(values); } @Override protected void onPostExecuteSuccess(List<AppInfo> appInfos) { super.onPostExecuteSuccess(appInfos); } @Override protected void onPostExecuteFailure(Throwable exception) { super.onPostExecuteFailure(exception); } }