| // Copyright 2017 Google Inc. All Rights Reserved. |
| package com.android.tradefed.targetprep; |
| |
| import com.android.tradefed.build.IBuildInfo; |
| import com.android.tradefed.config.Option; |
| import com.android.tradefed.device.DeviceNotAvailableException; |
| import com.android.tradefed.device.ITestDevice; |
| |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.List; |
| import java.util.concurrent.TimeUnit; |
| |
| /** |
| * Reads the list of packages on the phone and sets all packages to be 'last used' 24 hrs ago. |
| * Writes to /data/system/package-usage.list and deletes it at teardown. |
| */ |
| public class SetPackagesRecentlyUsed implements ITargetPreparer, ITargetCleaner { |
| |
| private static final String LINE_PREFIX = "package:"; |
| private static final String PACKAGE_USAGE_FILE = "/data/system/package-usage.list"; |
| |
| @Option( |
| name = "package-recently-used-time", |
| description = "Time since package last used", |
| isTimeVal = true |
| ) |
| private long mRecentTimeMillis = TimeUnit.DAYS.toMillis(1); |
| |
| @Option( |
| name = "package-recently-used-name", |
| description = "Package(s) to set. If none specified, then all are set." |
| ) |
| private List<String> mPackages = new ArrayList<>(); |
| |
| @Override |
| public void setUp(ITestDevice device, IBuildInfo buildInfo) |
| throws TargetSetupError, BuildError, DeviceNotAvailableException { |
| long deviceTimeMillis = TimeUnit.SECONDS.toMillis(device.getDeviceDate()); |
| long deviceRecentMillis = deviceTimeMillis - mRecentTimeMillis; |
| StringBuilder builder = new StringBuilder(); |
| builder.append("PACKAGE_USAGE__VERSION_1\n"); |
| for (String p : getPackagesToSet(device)) { |
| if (p.startsWith(LINE_PREFIX)) { |
| builder.append(p.substring(LINE_PREFIX.length())); |
| builder.append(" "); |
| builder.append(Long.toString(deviceRecentMillis)); |
| builder.append(" 0 0 0 0 0 0 0\n"); |
| } |
| } |
| device.pushString(builder.toString(), PACKAGE_USAGE_FILE); |
| } |
| |
| private List<String> getPackagesToSet(ITestDevice device) throws DeviceNotAvailableException { |
| if (mPackages.isEmpty()) { |
| String[] packages = device.executeShellCommand("cmd package list package").split("\n"); |
| return Arrays.asList(packages); |
| } else { |
| return mPackages; |
| } |
| } |
| |
| @Override |
| public void tearDown(ITestDevice device, IBuildInfo buildInfo, Throwable e) |
| throws DeviceNotAvailableException { |
| device.executeShellCommand("rm " + PACKAGE_USAGE_FILE); |
| } |
| } |