From 65e76d1200395a9c67893378ddb64c47ede400b4 Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Tue, 9 Sep 2014 17:28:03 -0700 Subject: Output recent configs in am get-config command Change-Id: Ic516e73d2e72ac0dc3136f7226cedd851fe22b85 --- cmds/am/src/com/android/commands/am/Am.java | 77 +++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) (limited to 'cmds/am/src/com') diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java index c06ef0d..989b500 100644 --- a/cmds/am/src/com/android/commands/am/Am.java +++ b/cmds/am/src/com/android/commands/am/Am.java @@ -28,10 +28,15 @@ import android.app.IInstrumentationWatcher; import android.app.Instrumentation; import android.app.ProfilerInfo; import android.app.UiAutomationConnection; +import android.app.usage.ConfigurationStats; +import android.app.usage.IUsageStatsManager; +import android.app.usage.UsageStatsManager; import android.content.ComponentName; +import android.content.Context; import android.content.IIntentReceiver; import android.content.Intent; import android.content.pm.IPackageManager; +import android.content.pm.ParceledListSlice; import android.content.pm.ResolveInfo; import android.content.res.Configuration; import android.graphics.Rect; @@ -47,6 +52,7 @@ import android.os.SystemProperties; import android.os.UserHandle; import android.text.TextUtils; import android.util.AndroidException; +import android.util.ArrayMap; import android.view.IWindowManager; import android.view.View; @@ -61,6 +67,9 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.HashSet; import java.util.List; @@ -1722,7 +1731,64 @@ public class Am extends BaseCommand { } } + private List getRecentConfigurations(int days) { + IUsageStatsManager usm = IUsageStatsManager.Stub.asInterface(ServiceManager.getService( + Context.USAGE_STATS_SERVICE)); + final long now = System.currentTimeMillis(); + final long nDaysAgo = now - (days * 24 * 60 * 60 * 1000); + try { + @SuppressWarnings("unchecked") + ParceledListSlice configStatsSlice = usm.queryConfigurationStats( + UsageStatsManager.INTERVAL_BEST, nDaysAgo, now, "com.android.shell"); + if (configStatsSlice == null) { + return Collections.emptyList(); + } + + final ArrayMap recentConfigs = new ArrayMap<>(); + final List configStatsList = configStatsSlice.getList(); + final int configStatsListSize = configStatsList.size(); + for (int i = 0; i < configStatsListSize; i++) { + final ConfigurationStats stats = configStatsList.get(i); + final int indexOfKey = recentConfigs.indexOfKey(stats.getConfiguration()); + if (indexOfKey < 0) { + recentConfigs.put(stats.getConfiguration(), stats.getActivationCount()); + } else { + recentConfigs.setValueAt(indexOfKey, + recentConfigs.valueAt(indexOfKey) + stats.getActivationCount()); + } + } + + final Comparator comparator = new Comparator() { + @Override + public int compare(Configuration a, Configuration b) { + return recentConfigs.get(b).compareTo(recentConfigs.get(a)); + } + }; + + ArrayList configs = new ArrayList<>(recentConfigs.size()); + configs.addAll(recentConfigs.keySet()); + Collections.sort(configs, comparator); + return configs; + + } catch (RemoteException e) { + return Collections.emptyList(); + } + } + private void runGetConfig() throws Exception { + int days = 14; + String option = nextOption(); + if (option != null) { + if (!option.equals("--days")) { + throw new IllegalArgumentException("unrecognized option " + option); + } + + days = Integer.parseInt(nextArgRequired()); + if (days <= 0) { + throw new IllegalArgumentException("--days must be a positive integer"); + } + } + try { Configuration config = mAm.getConfiguration(); if (config == null) { @@ -1733,6 +1799,17 @@ public class Am extends BaseCommand { System.out.println("config: " + Configuration.resourceQualifierString(config)); System.out.println("abi: " + TextUtils.join(",", Build.SUPPORTED_ABIS)); + final List recentConfigs = getRecentConfigurations(days); + final int recentConfigSize = recentConfigs.size(); + if (recentConfigSize > 0) { + System.out.println("recentConfigs:"); + } + + for (int i = 0; i < recentConfigSize; i++) { + System.out.println(" config: " + Configuration.resourceQualifierString( + recentConfigs.get(i))); + } + } catch (RemoteException e) { } } -- cgit v1.1