/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.dhaval.android.appstat.service;

import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author dhaval
 */
public class ProcessManager {

    private Context context;

    public ProcessManager(Context context) {
        this.context = context;
    }

    public List<com.dhaval.android.appstat.model.Process> getRunningProcesses(){
        List<com.dhaval.android.appstat.model.Process> processes = new ArrayList<com.dhaval.android.appstat.model.Process>();

        PackageManager pm = context.getPackageManager();
        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0);

        ActivityManager activityManager= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> processList = activityManager.getRunningAppProcesses();
        List<String> runningProcesses = new ArrayList<String>();

        for(ActivityManager.RunningAppProcessInfo procInfo : processList){
            runningProcesses.add(procInfo.processName);
        }

        for(ResolveInfo info: list) {
            String procLabel = info.activityInfo.applicationInfo.loadLabel(pm).toString();
            String procName = info.activityInfo.applicationInfo.processName;
            boolean running = runningProcesses.contains(procName);

            if (running) {
                processes.add(new com.dhaval.android.appstat.model.Process(procName, procLabel, running));
            }
        }

        return processes;
    }

    public List<com.dhaval.android.appstat.model.Process> getAllProcesses(){
        List<com.dhaval.android.appstat.model.Process> processes = new ArrayList<com.dhaval.android.appstat.model.Process>();

        PackageManager pm = context.getPackageManager();
        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0);

        ActivityManager activityManager= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> processList = activityManager.getRunningAppProcesses();
        List<String> runningProcesses = new ArrayList<String>();

        for(ActivityManager.RunningAppProcessInfo procInfo : processList){
            runningProcesses.add(procInfo.processName);
        }

        for(ResolveInfo info: list) {
            String procLabel = info.activityInfo.applicationInfo.loadLabel(pm).toString();
            String procName = info.activityInfo.applicationInfo.processName;
            boolean running = runningProcesses.contains(procName);

            processes.add(new com.dhaval.android.appstat.model.Process(procName, procLabel, running));
        }

        return processes;
    }
}
