package org.mortbay.ijetty.util; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.mortbay.ijetty.MainApplication; import org.mortbay.ijetty.component.AppsLocation; import org.mortbay.ijetty.component.LogoImg; import org.mortbay.ijetty.component.Point; import org.mortbay.ijetty.network.IRequestListener; import org.mortbay.ijetty.network.InterfaceOp; import android.content.Context; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.graphics.drawable.BitmapDrawable; import android.os.Handler; import android.text.TextUtils; public class PackageUtil { public static Map<String, Point> mPackageNames = new HashMap<String, Point>(); // public static List<String> hidePkgs = new LinkedList<String>(); static { if (mPackageNames == null || mPackageNames.size() == 0) { mPackageNames.put("org.bug.company", new Point(2, 6)); // 公司 mPackageNames.put("org.bug.ezagoo.shopping", new Point(1, 6)); // 购物车 mPackageNames.put("org.bug.hcpgson", new Point(3, 6)); // 火车预定 mPackageNames.put("org.bug.recharge", new Point(1, 5)); // 话费充值 mPackageNames.put("org.bug.airticket", new Point(2, 5)); // 机票预定 mPackageNames.put("org.bug.banktransfer", new Point(1, 7)); // 银行转账 mPackageNames.put("org.bug.dispensary", new Point(2, 7)); // 酒店预定 mPackageNames.put("org.bug.ezagoo.creditcards", new Point(1, 8)); // 信用卡 mPackageNames.put("org.bug.ezagoo.donation", new Point(2, 8)); // 爱心捐赠 mPackageNames.put("com.test.cpicclienttest", new Point(3, 8)); // 刷卡体验 mPackageNames.put("org.bug.ezagoo.gamerecharge", new Point(1, 9)); // 游戏充值 mPackageNames.put("org.bug.browser", new Point(1, 4)); // E网导航 mPackageNames.put("org.bug.movie", new Point(2, 4)); // 电影票 mPackageNames.put("org.bug.master", new Point(3, 4)); // 店主管理 mPackageNames.put("com.example.installconfigsettings", new Point(1, 3)); // 设置 mPackageNames.put("org.bug.sharebills", new Point(2, 3)); // 设置 } // hidePkgs.add(AppConstants.MEDIA_PACKAGE_NAME); // hidePkgs.add(MainApplication.getInstance().getPackageName()); // hidePkgs.add("com.bill99.kuaishua"); // hidePkgs.add("com.mytime"); // hidePkgs.add("org.bug.ezagoopad"); } private static void getApps() { InterfaceOp.protoAppsLocation(new IRequestListener() { public void onError(Exception e) { // TODO Auto-generated method stub LogUtil.log("protoAppsLocation onError: " + e.getMessage()); } public void onComplete(boolean isError, String errMsg, JSONObject respObj) { // TODO Auto-generated method stub if (isError) return; if (respObj == null) return; AppsLocation vAppsLoaction = new AppsLocation(); boolean isChange = false; try { // vAppsLoaction.mRows = respObj.getInt("rows"); // vAppsLoaction.mCold = respObj.getInt("cols"); // if (vAppsLoaction.mRows != AppConstants.POLYGON_DEFAULT_ROWS // || vAppsLoaction.mCold != AppConstants.POLYGON_DEFAULT_COLS) // isChange = true; JSONArray vRespArr = respObj.getJSONArray("applist"); if (vRespArr != null && vRespArr.length() > 0 ) { vAppsLoaction.mApps = new HashMap<String, org.mortbay.ijetty.component.Point>(); for (int i = 0; i < vRespArr.length(); i++) { JSONObject vJo = vRespArr.getJSONObject(i); Point vP = new Point(vJo.getInt("x"), vJo .getInt("y")); String vKey = vJo.getString("packagename"); vAppsLoaction.mApps.put(vKey, vP); if (!isChange) { // if ((!mPackageNames.containsKey(vKey) // || !mPackageNames.get(vKey).equals(vP)) && !hidePkgs.contains(vKey)) { if ((!mPackageNames.containsKey(vKey) || !mPackageNames.get(vKey).equals(vP))) { isChange = true; } } } if(vAppsLoaction.mApps.size() != mPackageNames.size()) { isChange = true; } } // if (isChange) { // 重启 // //FileUtil.putObject(AppConstants.APPS_LOCATION_PATH, vAppsLoaction); // Handler handler = MainApplication.getInstance() // .getAppHandler(); // if (handler != null) // handler.sendEmptyMessage(AppConstants.MSG_RELOCATE_LOGOIMG); // } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } // public static final Point[] extAppPoints = new Point[] { new Point(2, 9), // new Point(1, 2), new Point(1, 10), new Point(2, 2), // new Point(2, 10), new Point(3, 2), new Point(3, 10), // new Point(1, 1), new Point(1, 11), new Point(2, 1), // new Point(2, 11) }; // public static int extAppCount = 0; // private static Map<String, Point> extApps = new HashMap<String, Point>(); // public synchronized static Point getAvailablePoint(String pkgname) { // if (extApps.containsKey(pkgname)) // return extApps.get(pkgname); // if (extAppCount >= extAppPoints.length) // extAppCount = 0; // Point p = extAppPoints[extAppCount]; // extApps.put(pkgname, p); // extAppCount++; // return p; // } // public synchronized static void addApp(String pkgname, String apkPath) { // // Log.e("gary", "addApp: " + pkgname + " " + apkPath); // if (mPackageNames.containsKey(pkgname)) // return; // if (TextUtils.isEmpty(pkgname) || TextUtils.isEmpty(apkPath)) // return; // File f = new File(apkPath); // if (!f.exists()) // return; // SharedPreferences sp = MainApplication // .getInstance() // .getSharedPreferences(AppConstants.PKG_SHAREDPREFERENCE_NAME, 0); // if (!sp.contains(pkgname)) // sp.edit().putString(pkgname, apkPath).commit(); // // } // public synchronized static void removeApp(String pkgname) { // if (TextUtils.isEmpty(pkgname)) // return; // SharedPreferences sp = MainApplication // .getInstance() // .getSharedPreferences(AppConstants.PKG_SHAREDPREFERENCE_NAME, 0); // if (sp.contains(pkgname)) { // sp.edit().remove(pkgname).commit(); // } // } // private static void loadRecommendPkgName() { // SharedPreferences sp = MainApplication // .getInstance() // .getSharedPreferences(AppConstants.PKG_SHAREDPREFERENCE_NAME, 0); // Map<String, ?> map = sp.getAll(); // if (map == null) // return; // Iterator<?> iter = map.entrySet().iterator(); // while (iter.hasNext()) { // Map.Entry entry = (Map.Entry) iter.next(); // String pkgname = (String) entry.getKey(); // if (mPackageNames.containsKey(pkgname)) // continue; // Point p = getAvailablePoint(pkgname); // mPackageNames.put(pkgname, p); // } // // for (String pkgname : hidePkgs) { // if (mPackageNames.containsKey(pkgname)) // mPackageNames.remove(pkgname); // } // } // public static List<String> fetchRecommendPkgNames() { // SharedPreferences sp = MainApplication // .getInstance() // .getSharedPreferences(AppConstants.PKG_SHAREDPREFERENCE_NAME, 0); // Map<String, ?> map = sp.getAll(); // if (map == null) // return null; // List<String> pkgs = new LinkedList<String>(); // Iterator<?> iter = map.entrySet().iterator(); // while (iter.hasNext()) { // Map.Entry entry = (Map.Entry) iter.next(); // String pkgname = (String) entry.getKey(); // // pkgs.add(pkgname); // } // return pkgs; // } public static List<LogoImg> getLocalApps(Context pContext) { getApps(); PackageManager vPM = pContext.getPackageManager(); List<LogoImg> vLogos = new ArrayList<LogoImg>(); List<PackageInfo> vPkgInfos = vPM .getInstalledPackages(PackageManager.GET_ACTIVITIES); // loadRecommendPkgName(); for (PackageInfo vPkgInfo : vPkgInfos) { ApplicationInfo appInfo = vPkgInfo.applicationInfo; // if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0 // || !mPoints.containsKey(appInfo.packageName)) if (!mPackageNames.containsKey(appInfo.packageName)) continue; if (vPkgInfo.activities == null || vPkgInfo.activities.length < 1) continue; LogoImg vLogo = new LogoImg(); vLogo.setmPackgeName(appInfo.packageName); vLogo.setmAppName(appInfo.loadLabel(vPM).toString()); BitmapDrawable vBD = (BitmapDrawable) appInfo.loadIcon(vPM); vLogo.setRowCol(mPackageNames.get(appInfo.packageName)); vLogo.setBackgroundImg(new BitmapDrawable(vBD.getBitmap())); vLogos.add(vLogo); } return vLogos; } /** * 获取当前APK的version code * * @param context * 上下文环境 * @return version code */ public static int getVersionCode(Context context) { PackageManager manager = context.getApplicationContext() .getPackageManager(); int versionCode = 0; try { PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0); versionCode = info.versionCode; } catch (NameNotFoundException e) { e.printStackTrace(); } return versionCode; } public static String getVersionName(Context context) { PackageManager manager = context.getApplicationContext() .getPackageManager(); String versionName = null; try { PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0); versionName = info.versionName; } catch (NameNotFoundException e) { e.printStackTrace(); } return versionName; } public static List<AppInfo> getInstalledAppsInfo() { List<AppInfo> vResult = new ArrayList<AppInfo>(); PackageManager vPm = MainApplication.getInstance().getPackageManager(); List<PackageInfo> vPkgInfo = vPm.getInstalledPackages(0); int count = vPkgInfo.size(); File vFile = null; for (int i = 0; i < count; i++) { PackageInfo p = vPkgInfo.get(i); ApplicationInfo appInfo = p.applicationInfo; if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0) { continue; } else { try { AppInfo vApp = new AppInfo(); // vApp.mIcon = p.applicationInfo.loadIcon(vPm); vApp.mPackageName = appInfo.packageName; vApp.mAppName = p.applicationInfo.loadLabel(vPm).toString(); vApp.mVersionName = p.versionName; vApp.mVersionCode = p.versionCode + ""; vFile = new File(appInfo.publicSourceDir); // queryPacakgeSize(appInfo.packageName); vApp.mSize = vFile.length() + ""; vResult.add(vApp); } catch (Exception e) { e.printStackTrace(); } catch (OutOfMemoryError e) { e.printStackTrace(); System.gc(); } } } return vResult; } public static AppInfo getInstalledAppInfo(String packagename) { PackageManager vPm = MainApplication.getInstance().getPackageManager(); List<PackageInfo> vPkgInfo = vPm.getInstalledPackages(0); int count = vPkgInfo.size(); File vFile = null; for (int i = 0; i < count; i++) { PackageInfo p = vPkgInfo.get(i); ApplicationInfo appInfo = p.applicationInfo; if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0) { continue; } try { if (appInfo.packageName.equals(packagename)) { AppInfo vApp = new AppInfo(); // vApp.mIcon = p.applicationInfo.loadIcon(vPm); vApp.mPackageName = appInfo.packageName; vApp.mAppName = p.applicationInfo.loadLabel(vPm).toString(); vApp.mVersionName = p.versionName; vApp.mVersionCode = p.versionCode + ""; vFile = new File(appInfo.publicSourceDir); // queryPacakgeSize(appInfo.packageName); vApp.mSize = vFile.length() + ""; return vApp; } } catch (Exception e) { e.printStackTrace(); } } return null; } }