Search in sources :

Example 6 with Alarm

use of com.asksven.android.common.privateapiproxies.Alarm in project BetterBatteryStats by asksven.

the class AlarmsDumpsys method getAlarmsPriorTo_4_2_2.

/**
 * Returns a list of alarm value objects
 * @return
 * @throws Exception
 */
protected static ArrayList<StatElement> getAlarmsPriorTo_4_2_2(List<String> res) {
    ArrayList<StatElement> myAlarms = null;
    long nTotalCount = 0;
    // if (res.getSuccess())
    if ((res != null) && (res.size() != 0)) {
        // String strRes = res.getResultLine();
        if (!res.contains("Permission Denial")) {
            Pattern begin = Pattern.compile("Alarm Stats");
            boolean bParsing = false;
            // ArrayList<String> myRes = res.getResult(); // getTestData();
            // we are looking for multiline entries in the format
            // ' <package name>
            // '  <time> ms running, <number> wakeups
            // '  <number> alarms: act=<intent name> flg=<flag> (repeating 1..n times)
            Pattern packagePattern = Pattern.compile("\\s\\s([a-z][a-zA-Z0-9\\.]+)");
            Pattern timePattern = Pattern.compile("\\s\\s(\\d+)ms running, (\\d+) wakeups");
            Pattern numberPattern = Pattern.compile("\\s\\s(\\d+) alarms: (flg=[a-z0-9]+\\s){0,1}(act|cmp)=([A-Za-z0-9\\-\\_\\.\\{\\}\\/\\{\\}\\$]+)");
            myAlarms = new ArrayList<StatElement>();
            Alarm myAlarm = null;
            // process the file
            for (int i = 0; i < res.size(); i++) {
                // skip till start mark found
                if (bParsing) {
                    // parse the alarms by block
                    String line = res.get(i);
                    Matcher mPackage = packagePattern.matcher(line);
                    Matcher mTime = timePattern.matcher(line);
                    Matcher mNumber = numberPattern.matcher(line);
                    // first line
                    if (mPackage.find()) {
                        try {
                            // if there was a previous Alarm populated store it
                            if (myAlarm != null) {
                                myAlarms.add(myAlarm);
                            }
                            // we are interested in the first token
                            String strPackageName = mPackage.group(1);
                            myAlarm = new Alarm(strPackageName);
                        } catch (Exception e) {
                            Log.e(TAG, "Error: parsing error in package line (" + line + ")");
                        }
                    }
                    // second line
                    if (mTime.find()) {
                        try {
                            // we are interested in the second token
                            String strWakeups = mTime.group(2);
                            long nWakeups = Long.parseLong(strWakeups);
                            if (myAlarm == null) {
                                Log.e(TAG, "Error: time line found but without alarm object (" + line + ")");
                            } else {
                                myAlarm.setWakeups(nWakeups);
                                nTotalCount += nWakeups;
                            }
                        } catch (Exception e) {
                            Log.e(TAG, "Error: parsing error in time line (" + line + ")");
                        }
                    }
                    // third line (and following till next package
                    if (mNumber.find()) {
                        try {
                            // we are interested in the first and second token
                            String strNumber = mNumber.group(1);
                            String strIntent = mNumber.group(4);
                            long nNumber = Long.parseLong(strNumber);
                            if (myAlarm == null) {
                                Log.e(TAG, "Error: number line found but without alarm object (" + line + ")");
                            } else {
                                myAlarm.addItem(nNumber, strIntent);
                            }
                        } catch (Exception e) {
                            Log.e(TAG, "Error: parsing error in number line (" + line + ")");
                        }
                    }
                } else {
                    // look for beginning
                    Matcher line = begin.matcher(res.get(i));
                    if (line.find()) {
                        bParsing = true;
                    }
                }
            }
            // the last populated alarms has not been added to the list yet
            myAlarms.add(myAlarm);
        } else {
            myAlarms = new ArrayList<StatElement>();
            Alarm myAlarm = new Alarm(PERMISSION_DENIED);
            myAlarm.setWakeups(1);
            myAlarms.add(myAlarm);
        }
    } else {
        myAlarms = new ArrayList<StatElement>();
        Alarm myAlarm = new Alarm(PERMISSION_DENIED);
        myAlarm.setWakeups(1);
        myAlarms.add(myAlarm);
    }
    for (int i = 0; i < myAlarms.size(); i++) {
        ((Alarm) myAlarms.get(i)).setTotalCount(nTotalCount);
    }
    return myAlarms;
}
Also used : Pattern(java.util.regex.Pattern) Matcher(java.util.regex.Matcher) StatElement(com.asksven.android.common.privateapiproxies.StatElement) Alarm(com.asksven.android.common.privateapiproxies.Alarm)

Example 7 with Alarm

use of com.asksven.android.common.privateapiproxies.Alarm in project BetterBatteryStats by asksven.

the class AlarmsDumpsys method getAlarmsFrom_4_3.

protected static ArrayList<StatElement> getAlarmsFrom_4_3(List<String> res) {
    ArrayList<StatElement> myAlarms = null;
    long nTotalCount = 0;
    if ((res != null) && (res.size() != 0)) {
        Pattern begin = Pattern.compile("Alarm Stats");
        boolean bParsing = false;
        // we are looking for multiline entries in the format
        // ' <package name> +<time>ms running, <number> wakeups
        // '  +<time>ms <number> wakes <number> alarms: act=<intern> (repeating 1..n times)
        Pattern packagePattern = Pattern.compile("\\s\\s([a-z][a-zA-Z0-9\\.]+)\\s\\+(.*), (\\d+) wakeups:");
        Pattern numberPattern = Pattern.compile("\\s\\s\\s\\s\\+([0-9a-z]+)ms (\\d+) wakes (\\d+) alarms: (act|cmp)=(.*)");
        myAlarms = new ArrayList<StatElement>();
        Alarm myAlarm = null;
        // process the file
        for (int i = 0; i < res.size(); i++) {
            // skip till start mark found
            if (bParsing) {
                // parse the alarms by block
                String line = res.get(i);
                Matcher mPackage = packagePattern.matcher(line);
                Matcher mNumber = numberPattern.matcher(line);
                // first line
                if (mPackage.find()) {
                    try {
                        // if there was a previous Alarm populated store it
                        if (myAlarm != null) {
                            myAlarms.add(myAlarm);
                        }
                        // we are interested in the first token
                        String strPackageName = mPackage.group(1);
                        myAlarm = new Alarm(strPackageName);
                        String strWakeups = mPackage.group(3);
                        long nWakeups = Long.parseLong(strWakeups);
                        myAlarm.setWakeups(nWakeups);
                        nTotalCount += nWakeups;
                    } catch (Exception e) {
                        Log.e(TAG, "Error: parsing error in package line (" + line + ")");
                    }
                }
                // second line (and following till next package)
                if (mNumber.find()) {
                    try {
                        // we are interested in the first and second token
                        String strNumber = mNumber.group(2);
                        String strIntent = mNumber.group(5);
                        long nNumber = Long.parseLong(strNumber);
                        if (myAlarm == null) {
                            Log.e(TAG, "Error: number line found but without alarm object (" + line + ")");
                        } else {
                            myAlarm.addItem(nNumber, strIntent);
                        }
                    } catch (Exception e) {
                        Log.e(TAG, "Error: parsing error in number line (" + line + ")");
                    }
                }
            } else {
                // look for beginning
                Matcher line = begin.matcher(res.get(i));
                if (line.find()) {
                    bParsing = true;
                }
            }
        }
        // the last populated alarms has not been added to the list yet
        myAlarms.add(myAlarm);
    } else {
        myAlarms = new ArrayList<StatElement>();
        Alarm myAlarm = new Alarm(PERMISSION_DENIED);
        myAlarm.setWakeups(1);
        myAlarms.add(myAlarm);
    }
    for (int i = 0; i < myAlarms.size(); i++) {
        Alarm myAlarm = (Alarm) myAlarms.get(i);
        if (myAlarm != null) {
            myAlarm.setTotalCount(nTotalCount);
        }
    }
    return myAlarms;
}
Also used : Pattern(java.util.regex.Pattern) Matcher(java.util.regex.Matcher) StatElement(com.asksven.android.common.privateapiproxies.StatElement) Alarm(com.asksven.android.common.privateapiproxies.Alarm)

Example 8 with Alarm

use of com.asksven.android.common.privateapiproxies.Alarm in project BetterBatteryStats by asksven.

the class AlarmsDumpsys method getAlarmsFrom_5.

protected static ArrayList<StatElement> getAlarmsFrom_5(List<String> res) {
    ArrayList<StatElement> myAlarms = null;
    long nTotalCount = 0;
    if ((res != null) && (res.size() != 0)) {
        Pattern begin = Pattern.compile("Alarm Stats");
        boolean bParsing = false;
        // we are looking for multiline entries in the format
        // ' <package name> +<time>ms running, <number> wakeups
        // '  +<time>ms <number> wakes <number> alarms: act=<intern> (repeating 1..n times)
        Pattern packagePattern = Pattern.compile("\\s\\s.*:([a-z][a-zA-Z0-9\\.]+)\\s\\+(.*), (\\d+) wakeups:");
        Pattern numberPattern = Pattern.compile("\\s\\s\\s\\s\\+([0-9a-z]+)ms (\\d+) wakes (\\d+) alarms: (\\*alarm\\*|\\*walarm\\*):(.*)");
        myAlarms = new ArrayList<StatElement>();
        Alarm myAlarm = null;
        // process the file
        for (int i = 0; i < res.size(); i++) {
            // skip till start mark found
            if (bParsing) {
                // parse the alarms by block
                String line = res.get(i);
                Matcher mPackage = packagePattern.matcher(line);
                Matcher mNumber = numberPattern.matcher(line);
                // first line
                if (mPackage.find()) {
                    try {
                        // if there was a previous Alarm populated store it
                        if (myAlarm != null) {
                            myAlarms.add(myAlarm);
                        }
                        // we are interested in the first token
                        String strPackageName = mPackage.group(1);
                        myAlarm = new Alarm(strPackageName);
                        String strWakeups = mPackage.group(3);
                        long nWakeups = Long.parseLong(strWakeups);
                        myAlarm.setWakeups(nWakeups);
                        nTotalCount += nWakeups;
                    } catch (Exception e) {
                        Log.e(TAG, "Error: parsing error in package line (" + line + ")");
                    }
                }
                // second line (and following till next package)
                if (mNumber.find()) {
                    try {
                        // we are interested in the first and second token
                        String strNumber = mNumber.group(2);
                        String strIntent = mNumber.group(5);
                        long nNumber = Long.parseLong(strNumber);
                        if (myAlarm == null) {
                            Log.e(TAG, "Error: number line found but without alarm object (" + line + ")");
                        } else {
                            myAlarm.addItem(nNumber, strIntent);
                        }
                    } catch (Exception e) {
                        Log.e(TAG, "Error: parsing error in number line (" + line + ")");
                    }
                }
            } else {
                // look for beginning
                Matcher line = begin.matcher(res.get(i));
                if (line.find()) {
                    bParsing = true;
                }
            }
        }
        // the last populated alarms has not been added to the list yet
        myAlarms.add(myAlarm);
    } else {
        myAlarms = new ArrayList<StatElement>();
        Alarm myAlarm = new Alarm(PERMISSION_DENIED);
        myAlarm.setWakeups(1);
        myAlarms.add(myAlarm);
    }
    for (int i = 0; i < myAlarms.size(); i++) {
        Alarm myAlarm = (Alarm) myAlarms.get(i);
        if (myAlarm != null) {
            myAlarm.setTotalCount(nTotalCount);
        }
    }
    return myAlarms;
}
Also used : Pattern(java.util.regex.Pattern) Matcher(java.util.regex.Matcher) StatElement(com.asksven.android.common.privateapiproxies.StatElement) Alarm(com.asksven.android.common.privateapiproxies.Alarm)

Aggregations

Alarm (com.asksven.android.common.privateapiproxies.Alarm)8 StatElement (com.asksven.android.common.privateapiproxies.StatElement)8 Matcher (java.util.regex.Matcher)5 Pattern (java.util.regex.Pattern)5 SuppressLint (android.annotation.SuppressLint)3 SharedPreferences (android.content.SharedPreferences)3 Context (android.content.Context)2 ArrayList (java.util.ArrayList)2 LayoutInflater (android.view.LayoutInflater)1 ImageView (android.widget.ImageView)1 LinearLayout (android.widget.LinearLayout)1 TextView (android.widget.TextView)1 State (com.asksven.android.common.kernelutils.State)1 BatteryStatsProxy (com.asksven.android.common.privateapiproxies.BatteryStatsProxy)1 Misc (com.asksven.android.common.privateapiproxies.Misc)1 NativeKernelWakelock (com.asksven.android.common.privateapiproxies.NativeKernelWakelock)1 NetworkUsage (com.asksven.android.common.privateapiproxies.NetworkUsage)1 Notification (com.asksven.android.common.privateapiproxies.Notification)1 Process (com.asksven.android.common.privateapiproxies.Process)1 SensorUsage (com.asksven.android.common.privateapiproxies.SensorUsage)1