blob: 5f1bb21d208a260dabde077b8912aff2c930a5a1 [file] [log] [blame]
Arthur Eubankse6d49cc2017-11-29 17:21:03 -08001// Copyright 2017 Google Inc. All Rights Reserved.
2package com.android.tradefed.targetprep;
3
4import com.android.tradefed.build.IBuildInfo;
5import com.android.tradefed.config.Option;
6import com.android.tradefed.device.DeviceNotAvailableException;
7import com.android.tradefed.device.ITestDevice;
8
9import java.util.ArrayList;
10import java.util.Arrays;
11import java.util.List;
12import java.util.concurrent.TimeUnit;
13
14/**
15 * Reads the list of packages on the phone and sets all packages to be 'last used' 24 hrs ago.
16 * Writes to /data/system/package-usage.list and deletes it at teardown.
17 */
18public class SetPackagesRecentlyUsed implements ITargetPreparer, ITargetCleaner {
19
20 private static final String LINE_PREFIX = "package:";
21 private static final String PACKAGE_USAGE_FILE = "/data/system/package-usage.list";
22
23 @Option(
24 name = "package-recently-used-time",
25 description = "Time since package last used",
26 isTimeVal = true
27 )
28 private long mRecentTimeMillis = TimeUnit.DAYS.toMillis(1);
29
30 @Option(
31 name = "package-recently-used-name",
32 description = "Package(s) to set. If none specified, then all are set."
33 )
34 private List<String> mPackages = new ArrayList<>();
35
36 @Override
37 public void setUp(ITestDevice device, IBuildInfo buildInfo)
38 throws TargetSetupError, BuildError, DeviceNotAvailableException {
39 long deviceTimeMillis = TimeUnit.SECONDS.toMillis(device.getDeviceDate());
40 long deviceRecentMillis = deviceTimeMillis - mRecentTimeMillis;
41 StringBuilder builder = new StringBuilder();
42 builder.append("PACKAGE_USAGE__VERSION_1\n");
43 for (String p : getPackagesToSet(device)) {
44 if (p.startsWith(LINE_PREFIX)) {
45 builder.append(p.substring(LINE_PREFIX.length()));
46 builder.append(" ");
47 builder.append(Long.toString(deviceRecentMillis));
48 builder.append(" 0 0 0 0 0 0 0\n");
49 }
50 }
51 device.pushString(builder.toString(), PACKAGE_USAGE_FILE);
52 }
53
54 private List<String> getPackagesToSet(ITestDevice device) throws DeviceNotAvailableException {
55 if (mPackages.isEmpty()) {
56 String[] packages = device.executeShellCommand("cmd package list package").split("\n");
57 return Arrays.asList(packages);
58 } else {
59 return mPackages;
60 }
61 }
62
63 @Override
64 public void tearDown(ITestDevice device, IBuildInfo buildInfo, Throwable e)
65 throws DeviceNotAvailableException {
66 device.executeShellCommand("rm " + PACKAGE_USAGE_FILE);
67 }
68}