// Path: app/src/main/java/com/ryansteckler/nlpunbounce/helpers/UidNameResolver.java
// public class UidNameResolver {
// 
//     protected String[] m_packages;
//     protected String[] m_packageNames;
//     private static Context m_context;
//     private static UidNameResolver m_instance;
// 
//     private UidNameResolver(Context ctx) {
//         m_context = ctx;
//     }
// 
//     public static UidNameResolver getInstance(Context ctx) {
//         if (m_instance == null) {
//             m_instance = new UidNameResolver(ctx);
//         }
// 
//         return m_instance;
//     }
// 
//     public Drawable getIcon(String packageName) {
//         Drawable icon = null;
//         // retrieve and store the icon for that package
//         String myPackage = packageName;
//         if (!myPackage.equals("")) {
//             PackageManager manager = m_context.getPackageManager();
//             try {
//                 icon = manager.getApplicationIcon(myPackage);
//             } catch (Exception e) {
//                 // nop: no icon found
//                 icon = null;
//             }
//         }
//         return icon;
//     }
// 
//     public String getLabel(String packageName) {
//         String ret = packageName;
//         PackageManager pm = m_context.getPackageManager();
//         try {
//             ApplicationInfo ai = pm.getApplicationInfo(packageName, 0);
//             CharSequence label = ai.loadLabel(pm);
//             if (label != null) {
//                 ret = label.toString();
//             }
//         } catch (NameNotFoundException e) {
//             ret = packageName;
//         }
// 
//         return ret;
//     }
// 
//     public String getLabelForServices(int uId, String serviceName) {
// 
//         PackageManager pm = m_context.getPackageManager();
//         String applicationName = null;
//         if (uId > 0) {
//             String[] packages = pm.getPackagesForUid(uId);
//             if (null != packages) {
//                 for (String packageEntry : packages) {
//                     if (serviceName.contains(packageEntry)) {
//                         ApplicationInfo ai;
//                         try {
//                             ai = pm.getApplicationInfo(packageEntry, 0);
//                         } catch (final PackageManager.NameNotFoundException e) {
//                             ai = null;
//                         }
//                         applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "Unknown");
//                         break;
//                     }
//                 }
// 
//                 return applicationName;
// 
//             } else {
//                 return "Unknown";
//             }
//         } else {
//             return "Unknown";
//         }
//     }
// 
//     // Side effects: sets mName and mUniqueName
//     // Sets mNamePackage, mName and mUniqueName
//     public String getNameForUid(int uid) {
//         String uidName = "";
//         String uidNamePackage = "";
//         boolean uidUniqueName = false;
// 
//         PackageManager pm = m_context.getPackageManager();
//         m_packages = pm.getPackagesForUid(uid);
// 
//         if (m_packages == null) {
//             uidName = Integer.toString(uid);
//             return uidName;
//         }
// 
//         m_packageNames = new String[m_packages.length];
//         System.arraycopy(m_packages, 0, m_packageNames, 0, m_packages.length);
// 
//         // Convert package names to user-facing labels where possible
//         for (int i = 0; i < m_packageNames.length; i++) {
//             m_packageNames[i] = getLabel(m_packageNames[i]);
//         }
// 
//         if (m_packageNames.length == 1) {
//             uidNamePackage = m_packages[0];
//             uidName = m_packageNames[0];
//             uidUniqueName = true;
//         } else {
//             uidName = "UID"; // Default name
//             // Look for an official name for this UID.
//             for (String name : m_packages) {
//                 try {
//                     PackageInfo pi = pm.getPackageInfo(name, 0);
//                     if (pi.sharedUserLabel != 0) {
//                         CharSequence nm = pm.getText(name,
//                                 pi.sharedUserLabel, pi.applicationInfo);
//                         if (nm != null) {
//                             uidName = nm.toString();
//                             break;
//                         }
//                     }
//                 } catch (NameNotFoundException e) {
//                 }
//             }
//         }
//         return uidName;
//     }
// 
//     /**
//      * Returns the name for UIDs < 2000
//      *
//      * @param uid
//      * @return
//      */
//     String getName(int uid) {
//         String ret = "";
//         switch (uid) {
//             case 0:
//                 ret = "root";
//                 break;
//             case 1000:
//                 ret = "system";
//                 break;
//             case 1001:
//                 ret = "radio";
//                 break;
//             case 1002:
//                 ret = "bluetooth";
//                 break;
//             case 1003:
//                 ret = "graphics";
//                 break;
//             case 1004:
//                 ret = "input";
//                 break;
//             case 1005:
//                 ret = "audio";
//                 break;
//             case 1006:
//                 ret = "camera";
//                 break;
//             case 1007:
//                 ret = "log";
//                 break;
//             case 1008:
//                 ret = "compass";
//                 break;
//             case 1009:
//                 ret = "mount";
//                 break;
//             case 1010:
//                 ret = "wifi";
//                 break;
//             case 1011:
//                 ret = "adb";
//                 break;
//             case 1013:
//                 ret = "media";
//                 break;
//             case 1014:
//                 ret = "dhcp";
//                 break;
// 
//         }
//         return ret;
//     }
// 
// }


import android.content.Context;
import com.ryansteckler.nlpunbounce.helpers.UidNameResolver;
import java.io.Serializable;
package com.ryansteckler.nlpunbounce.models;




/**
 * Created by rsteckler on 9/13/14.
 */
public class AlarmStats extends BaseStats implements Serializable {

    public AlarmStats(String alarmName, String packageName) {
        setType("alarm");
        setName(alarmName);
        if (null != packageName && !packageName.trim().equals("")) setPackage(packageName);
        else {
            setPackage("No Package");
        }

    }

    private AlarmStats() {
    }

    @Override
    public String getDerivedPackageName(Context ctx) {
        if (null== getDerivedPackageName()){
// Path: app/src/main/java/com/ryansteckler/nlpunbounce/helpers/UidNameResolver.java
// public class UidNameResolver {
// 
//     protected String[] m_packages;
//     protected String[] m_packageNames;
//     private static Context m_context;
//     private static UidNameResolver m_instance;
// 
//     private UidNameResolver(Context ctx) {
//         m_context = ctx;
//     }
// 
//     public static UidNameResolver getInstance(Context ctx) {
//         if (m_instance == null) {
//             m_instance = new UidNameResolver(ctx);
//         }
// 
//         return m_instance;
//     }
// 
//     public Drawable getIcon(String packageName) {
//         Drawable icon = null;
//         // retrieve and store the icon for that package
//         String myPackage = packageName;
//         if (!myPackage.equals("")) {
//             PackageManager manager = m_context.getPackageManager();
//             try {
//                 icon = manager.getApplicationIcon(myPackage);
//             } catch (Exception e) {
//                 // nop: no icon found
//                 icon = null;
//             }
//         }
//         return icon;
//     }
// 
//     public String getLabel(String packageName) {
//         String ret = packageName;
//         PackageManager pm = m_context.getPackageManager();
//         try {
//             ApplicationInfo ai = pm.getApplicationInfo(packageName, 0);
//             CharSequence label = ai.loadLabel(pm);
//             if (label != null) {
//                 ret = label.toString();
//             }
//         } catch (NameNotFoundException e) {
//             ret = packageName;
//         }
// 
//         return ret;
//     }
// 
//     public String getLabelForServices(int uId, String serviceName) {
// 
//         PackageManager pm = m_context.getPackageManager();
//         String applicationName = null;
//         if (uId > 0) {
//             String[] packages = pm.getPackagesForUid(uId);
//             if (null != packages) {
//                 for (String packageEntry : packages) {
//                     if (serviceName.contains(packageEntry)) {
//                         ApplicationInfo ai;
//                         try {
//                             ai = pm.getApplicationInfo(packageEntry, 0);
//                         } catch (final PackageManager.NameNotFoundException e) {
//                             ai = null;
//                         }
//                         applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "Unknown");
//                         break;
//                     }
//                 }
// 
//                 return applicationName;
// 
//             } else {
//                 return "Unknown";
//             }
//         } else {
//             return "Unknown";
//         }
//     }
// 
//     // Side effects: sets mName and mUniqueName
//     // Sets mNamePackage, mName and mUniqueName
//     public String getNameForUid(int uid) {
//         String uidName = "";
//         String uidNamePackage = "";
//         boolean uidUniqueName = false;
// 
//         PackageManager pm = m_context.getPackageManager();
//         m_packages = pm.getPackagesForUid(uid);
// 
//         if (m_packages == null) {
//             uidName = Integer.toString(uid);
//             return uidName;
//         }
// 
//         m_packageNames = new String[m_packages.length];
//         System.arraycopy(m_packages, 0, m_packageNames, 0, m_packages.length);
// 
//         // Convert package names to user-facing labels where possible
//         for (int i = 0; i < m_packageNames.length; i++) {
//             m_packageNames[i] = getLabel(m_packageNames[i]);
//         }
// 
//         if (m_packageNames.length == 1) {
//             uidNamePackage = m_packages[0];
//             uidName = m_packageNames[0];
//             uidUniqueName = true;
//         } else {
//             uidName = "UID"; // Default name
//             // Look for an official name for this UID.
//             for (String name : m_packages) {
//                 try {
//                     PackageInfo pi = pm.getPackageInfo(name, 0);
//                     if (pi.sharedUserLabel != 0) {
//                         CharSequence nm = pm.getText(name,
//                                 pi.sharedUserLabel, pi.applicationInfo);
//                         if (nm != null) {
//                             uidName = nm.toString();
//                             break;
//                         }
//                     }
//                 } catch (NameNotFoundException e) {
//                 }
//             }
//         }
//         return uidName;
//     }
// 
//     /**
//      * Returns the name for UIDs < 2000
//      *
//      * @param uid
//      * @return
//      */
//     String getName(int uid) {
//         String ret = "";
//         switch (uid) {
//             case 0:
//                 ret = "root";
//                 break;
//             case 1000:
//                 ret = "system";
//                 break;
//             case 1001:
//                 ret = "radio";
//                 break;
//             case 1002:
//                 ret = "bluetooth";
//                 break;
//             case 1003:
//                 ret = "graphics";
//                 break;
//             case 1004:
//                 ret = "input";
//                 break;
//             case 1005:
//                 ret = "audio";
//                 break;
//             case 1006:
//                 ret = "camera";
//                 break;
//             case 1007:
//                 ret = "log";
//                 break;
//             case 1008:
//                 ret = "compass";
//                 break;
//             case 1009:
//                 ret = "mount";
//                 break;
//             case 1010:
//                 ret = "wifi";
//                 break;
//             case 1011:
//                 ret = "adb";
//                 break;
//             case 1013:
//                 ret = "media";
//                 break;
//             case 1014:
//                 ret = "dhcp";
//                 break;
// 
//         }
//         return ret;
//     }
// 
// }


// Path: app/src/main/java/com/ryansteckler/nlpunbounce/models/AlarmStats.java
import android.content.Context;
import com.ryansteckler.nlpunbounce.helpers.UidNameResolver;
import java.io.Serializable;

package com.ryansteckler.nlpunbounce.models;




/**
 * Created by rsteckler on 9/13/14.
 */
public class AlarmStats extends BaseStats implements Serializable {

    public AlarmStats(String alarmName, String packageName) {
        setType("alarm");
        setName(alarmName);
        if (null != packageName && !packageName.trim().equals("")) setPackage(packageName);
        else {
            setPackage("No Package");
        }

    }

    private AlarmStats() {
    }

    @Override
    public String getDerivedPackageName(Context ctx) {
        if (null== getDerivedPackageName()){
            UidNameResolver resolver = UidNameResolver.getInstance(ctx);