Commit Graph

415 Commits

Author SHA1 Message Date
Michael Wachenschwanz
793da64d37 Move AppStandbyController calls out of UsageStats lock
Move reportEvent, flushToDisk, and dumping out of the UsageStats lock.

Fixes: 158361735
Test: atest com.android.server.usage.AppStandbyControllerTests
Test: atest android.app.usage.UsageStatsTest
Test: manual ("adb shell dumpsys usagestats", with multiple users)
Change-Id: I9f5c2adcb3ef71e82b969b35e7129e715fbfa00d
2020-06-19 10:44:49 -07:00
Michael Wachenschwanz
709758d448 Small Fix to App Usage logging
Relocated MOVE_TO_FOREGROUND so that it will get logged for  Activity
Paused to Activity Resumed transitions.
Also moved some calls into PackageManager outside of the UsageStats lock

Bug: 159165822
Test: builds and flashes
Change-Id: I8e9e96ae1fc3b77535514df2422ce3b7935d850f
2020-06-17 16:05:53 -07:00
Jonathan Nguyen
0a1a911a5e Merge "Add app usage logging for statsd" into rvc-dev 2020-05-14 17:35:28 +00:00
TreeHugger Robot
3931dd2013 Merge "Delay updating of usage stats package mappings." into rvc-dev 2020-05-12 20:56:14 +00:00
Varun Shah
a7f9c762cb Delay updating of usage stats package mappings.
Do not update package mappings for the system user when the user is
first unlocked. Instead, schedule a job to be executed after 24 to 48
hours from when the system user is unlocked. This makes the service
initialization phase for the system user a little quicker since their
data is not likely to be stale. Additionally, this also ensures that
restored data is not pruned by mistake if there is a device restart
before restore is completed. The updating of the mappings occurs
normally for other users, on user service initialization.

Bug: 155209652
Test: manually ensure job is skipped for system user
Test: atest android.app.usage.cts.UsageStatsTest
Change-Id: I2c03a1a05246d6b454569c4569813e90bede3693
2020-05-12 16:45:58 +00:00
TreeHugger Robot
0a78a5ad9d Merge "Fix DPM check logic for AppUsageLimitObserver (un)registering" into rvc-dev 2020-05-12 05:26:36 +00:00
Michael Wachenschwanz
cfe8c66a7a Fix DPM check logic for AppUsageLimitObserver (un)registering
In the case that the DevicePolicyManagerInternal Local service does not
exist on device, the permission check for
(un)registerAppUsageLimitObserver should not be skipped.

Test: atest android.app.usage.cts.UsageStatsTest (must be on a device
with <unavailable-feature name="android.software.device_admin" /> in
it's features xml)
Fixes: 155360727

Change-Id: I8a88e03a7636956d27f531cf989bda1a32799f07
2020-05-11 16:23:43 -07:00
Varun Shah
b1d32ee75a Merge "Persist Locus Id Event to UsageStatsProto." into rvc-dev 2020-05-09 08:58:13 +00:00
Jonathan Nguyen
28f7ecf533 Add app usage logging for statsd
Test: manually tested on local flame
Bug: 156041159
Change-Id: I0513be4524b3ceb1c4840bf7f83048f7c1f55019
2020-05-08 12:30:02 -07:00
Varun Shah
7ce78c23df Persist Locus Id Event to UsageStatsProto.
Currently, we are only using UsageStatsProto for backup and restore
purposes but to ensure it is in sync with UsageStatsProtoV2, adding the
recently added LOCUS_ID event. This enables us to easily fall back to
the earlier proto version if there are issues with V2. This also allows
us to backup all events data if we decide to do that in the future
before updating the B&R restore logic to use V2.

Bug: 155935953
Test: atest UsageStatsDatabaseTest
Change-Id: I792f20a0b44d13f1ed17c4dbebe5555044afa165
2020-05-07 21:34:09 -07:00
Varun Shah
75aeabdd8a Merge "Persist UsageStats before backup." into rvc-dev 2020-05-07 20:58:40 +00:00
Varun Shah
fb7b3208df Persist UsageStats before backup.
This fixes a bug where in-memory usage stats were not being backed up,
potentially causing a loss of up to 20 minutes of data when restoring.

Fixes: 155930164
Test: atest UsageStatsDatabaseTest
Test: atest android.app.usage.cts.UsageStatsTest
Change-Id: I454f64e7de3f7a6046c408859998a3e51d5d338d
2020-05-07 03:38:39 +00:00
Jeff Sharkey
559130df3f Merge "Add custom Error Prone check for SDK comparisons." into rvc-dev 2020-05-04 23:10:06 +00:00
Jeff Sharkey
4d1d7b56cd Add custom Error Prone check for SDK comparisons.
Over the years we've had several obscure bugs related to how SDK level
comparisons are performed, specifically during the window of time
where we've started distributing the "frankenbuild" to developers.

Consider the case where a framework developer shipping release "R"
wants to only grant a specific behavior to modern apps; they could
write this in two different ways:

1. if (targetSdkVersion > Build.VERSION_CODES.Q) {
2. if (targetSdkVersion >= Build.VERSION_CODES.R) {

The safer of these two options is (2), which will ensure that
developers only get the behavior when *both* the app and the
platform concur on the specific SDK level having shipped.

Consider the breakage that would happen with option (1) if we
started shipping APKs that are based on the final R SDK, but are
then installed on earlier preview releases which still consider R
to be CUR_DEVELOPMENT; they'd risk crashing due to behaviors that
were never part of the official R SDK.

Bug: 64412239
Test: ./build/soong/soong_ui.bash --make-mode services RUN_ERROR_PRONE=true
Exempt-From-Owner-Approval: trivial blueprint changes
Change-Id: Ia20181f8602451ac9a719ea488d148e160708592
2020-05-04 23:09:48 +00:00
Varun Shah
b44e22c8d9 Update how UsageStats timestamps are written to disk.
When writing UsageStats timestamps to disk in proto, we offset the time
by the begin time to save storage space. However, there was logic which
reset default timestamp values of 0 to begin time for those stats.

This CL standardizes how timestamps are written to disk in proto for
UsageStats and updates the parsers. Since backup and restore use
database version 4, UsageStatsProto is also updated in addition to
UsageStatsProtoV2.

Bug: 155149300
Test: atest UsageStatsDatabaseTest
Test: atest android.app.usage.cts.UsageStatsTest
Change-Id: I624e4d56c91762b56eb1c3be67cd8df033fcac95
2020-05-01 11:08:20 -07:00
Michael Wachenschwanz
dcc388ab44 Merge "Add permission check to UsageStatsManager#isAppInactive" into rvc-dev 2020-04-20 15:15:35 +00:00
Michael Wachenschwanz
d2b132fac4 Add permission check to UsageStatsManager#isAppInactive
UsageStatsManager#isAppInactive provides usage information that is
usually gated by the PACKAGE_USAGE_STATS permission in similar API.
This updates isAppInactive to also check for the PACKAGE_USAGE_STATS
permission.

Test: atest android.app.usage.cts android.app.usage.cts.UsageStatsTest#testIsAppInactive
Fixes: 148991455

Change-Id: I8ff8eb5d2e887bc164095f38d374e3992808fe79
2020-04-06 16:02:33 -07:00
TreeHugger Robot
35afbf3271 Merge "Update UsageStatsSerivce#KEEP_LEGACY_DIR." into rvc-dev 2020-03-14 01:32:52 +00:00
Varun Shah
11b34ce0c7 Update UsageStatsDatabase#KEEP_BACKUP_DIR.
Delete the backup usage stats directory on a successful upgrade to v5.
This was kept as true such that a revert to the previous version  would
be possible if needed.

Also indicate that an upgrade was performed such that relevant data is
pruned on dogfood builds.

Bug: 139937606
Test: manual: dir is deleted on migration.
Change-Id: I60285dc812a045bc82dd68a6e7ae87c2d3563adc
2020-03-13 21:51:07 +00:00
Varun Shah
7dbf65f032 Update UsageStatsSerivce#KEEP_LEGACY_DIR.
Delete legacy usage stats directory on a successful migration to CE.
This was kept as true such that a revert to the legacy would be possible
if needed.

Bug: 138323140
Test: manual: dir is deleted on migration.
Change-Id: I727df5d9139bfa1601cd02d979732f0d912bd29d
2020-03-04 23:24:01 +00:00
Sudheer Shanka
77f2a2c3dd Merge "Update BlobStoreMS to augment storage stats with blobs data." 2020-02-21 19:28:09 +00:00
TreeHugger Robot
5025c2ab69 Merge "Disable storage crates functionalities" 2020-02-20 05:00:47 +00:00
Sudheer Shanka
e9232d6d6f Update BlobStoreMS to augment storage stats with blobs data.
- Any pending sessions data is attributed to the apps
  which contributed them.
- Any commited blobs data is attributed to the app which
  has a lease on it. If multiple apps have lease on a blob, don't
  attribute the blob to those apps for now.
- Remove StorageStatsAugmenter.augmentStatsForUser as it
  is not used for anything currently.
- Fix an issue in how we override existing committers and leasees.

Bug: 148694869
Test: atest cts/tests/BlobStore/src/com/android/cts/blob/BlobStoreManagerTest.java
Test: atest tests/tests/os/src/android/os/storage/cts/StorageStatsManagerTest.java
Test: atest hostsidetests/appsecurity/src/android/appsecurity/cts/StorageHostTest.java
Test: manual
Change-Id: Ia4af0a2549c75db66741f2d1979de95d2d150bc8
2020-02-19 14:45:12 -08:00
Sudheer Shanka
b497dd4045 Allow usagestats for multiple pkgs to be dumped.
+ Skip dumping database summaries when dumping data for specific pkgs.

Bug: 145420790
Test: manual
Change-Id: If4ac1008ffc73ad4b3227c0a407323b43547a6b8
2020-02-18 18:59:59 +00:00
Varun Shah
0cbb6b63ee Obfuscate visibility of notification-related events.
UsageStats will return obfuscated NOTIFICATION_SEEN or
NOTIFICATION_INTERRUPTION events to callers of #queryEvents
and #queryEventsForUser if they don't hold the MANAGE_NOTIFICATIONS
permission.

Additionaly, refactor the query API in UsageStats to take in flags as
defined in UsageEvents to make future obfuscation/visibility parameters
cleaner.

Also, add the MANAGE_NOTIFICATIONS permission to shell for CTS test.

Bug: 144724524
Test: atest android.app.usage.cts.UsageStatsTest
Test: atest com.android.server.people.data.UsageStatsQueryHelperTest
Test: atest android.content.pm.cts.shortcutmanager.ShortcutManagerUsageTest
Change-Id: I118de7e589ac8dd5924d3740c70903fa484b79b5
2020-02-13 12:01:13 -08:00
Yuliya Kamatkova
4d5b0be481 Merge "Restrict visibility of LOCUS_ID_SET events." 2020-02-13 01:05:09 +00:00
Yuliya Kamatkova
fea62a512b Restrict visibility of LOCUS_ID_SET events.
UsageStats will not return LOCUS_ID_SET events to callers
of #queryEvents and #queryEventsForUser if they don't have visibility.

Bug: 148821246
Test: manual, atest tests/tests/app.usage/src/android/app/usage/cts/UsageStatsTest
Change-Id: Ic904a97e66775ef63bc8b84e67e8f430b2a4121b
2020-02-12 11:20:22 -08:00
Felka Chang
1980c9a893 Disable storage crates functionalities
The Storage Crates functionalities is disabled by default. In order to
make the android system more secure, the crate function should throw
exception to tell the caller that the crate function is disabled until
it addes more tests such as benchmark and memory regression tests.

Bug: 148179319
Fixes: 149366046
Test: atest \
         CtsOsTestCases:android.os.storage.cts.StorageCrateTest \
         CtsOsTestCases:android.os.storage.cts.StorageStatsManagerTest \
         CtsOsTestCases:android.os.storage.cts.CrateInfoTest
Test: adb root ;\
      adb shell setprop fw.storage_crates 1 ;\
      atest \
        CtsOsTestCases:android.os.storage.cts.StorageCrateTest \
        CtsOsTestCases:android.os.storage.cts.StorageStatsManagerTest \
        CtsOsTestCases:android.os.storage.cts.CrateInfoTest
Change-Id: I7bfbdcbde5a90ecad7ef690a9d9a62e5ed0ad5eb
2020-02-12 17:15:26 +08:00
Varun Shah
96000b20cd Fix UsageStats dump NPEs.
Update the dump method to handle locked users properly.

Fixes: 149019903
Test: manual (adb shell dumpsys usagestats)
Change-Id: I86e7cfe01bb485f2125c84e6f1013e20b5ac9ba4
2020-02-11 11:22:56 -08:00
Danning Chen
001eb8f4d9 Update the method signature for queryEventsForUser()
Change-Id: I9ed16e6164493915dba48366249c61dc49214e5a
Test: atest com.android.server.people.data.DataManagerTest
Bug: 148627336
2020-01-31 09:40:30 -08:00
Varun Shah
01f6f26b54 Restrict visibility of SHORTCUT_INVOCATION events.
UsageStats will not return SHORTCUT_INVOCATION events to callers
of #queryEvents and #queryEventsForUser if they don't have visibility,
as defined by ShortcutService#hasShortcutHostPermission.

Also, add ACCESS_SHORTCUT permission to shell for CTS test and add the
ShortcutManagerUsageTest to postsubmit.

Bug: 145549490
Test: atest android.app.usage.cts.UsageStatsTest
Test: atest android.content.pm.cts.shortcutmanager.ShortcutManagerUsageTest
Change-Id: I2a69f061c35c31035a5d0381ab2f42029ec4fffc
2020-01-29 11:28:22 -08:00
Yuliya Kamatkova
56f7c7f37c Merge "Add Activity#setLocusContext API. Plumb LocusID to the System Server. Add locus update event to the Usage Stats. Test: Build and run on a test device with a test app. Bug: 147594233, 147100454" 2020-01-24 21:10:54 +00:00
Yuliya Kamatkova
48c38076ef Add Activity#setLocusContext API. Plumb LocusID to the System Server.
Add locus update event to the Usage Stats.
Test: Build and run on a test device with a test app.
Bug: 147594233, 147100454

Change-Id: I1e058ac87244d47719606d8dcfaea2df4bff43d2
Signed-off-by: Yuliya Kamatkova <yuliyak@google.com>
2020-01-24 11:19:10 -08:00
Sudheer Shanka
31961ce780 Update references of "DONT_DELETE_DATA" to "DELETE_KEEP_DATA".
The flag PackageManager.DONT_DELETE_DATA was renamed to DELETE_KEEP_DATA
long ago in commit 7767eac.

Bug: 28343859
Test: n/a
Change-Id: I9e4079ec394f92a3e293df7b80b627e2b6130827
2020-01-22 20:56:31 -08:00
Sudheer Shanka
e479c958b5 Merge "Add internal APIs for system services to augment storage stats." 2020-01-16 23:15:58 +00:00
Sudheer Shanka
18d3798328 Add internal APIs for system services to augment storage stats.
Bug: 142808097
Test: n/a (tests will be added along with the client impl)
Change-Id: Iba2330d67a29ccfab95ce65daf85312beff5ecf3
2020-01-16 23:12:30 +00:00
Danning Chen
6a5982f300 Add a new method queryEventsForUser() to UsageStatsManagerInternal for People Service to call
Change-Id: I4baf755a3dc1af421ea755ed2f4cfe3440741290
Test: Build and run on a test device
Bug: 146522621
2020-01-14 16:21:57 -08:00
TreeHugger Robot
5049573e20 Merge "Move setAppStandby logic inside AppStandbyController." 2020-01-10 09:42:05 +00:00
Kweku Adams
c4ee998be8 Move setAppStandby logic inside AppStandbyController.
Since we've moved AppStandbyController inside the JobScheduler mainline
module boundary, we need to move the logic of setAppStandby over so that
it's consistent for callers and easy to do the right thing.

Bug: 137763703
Bug: 145551233
Test: atest AppIdleHistoryTests
Test: atest AppStandbyControllerTests
Test: atest UsageStatsTest
Change-Id: Ie2ccb0508c3a3887ab3debc47e78427477d2d77b
2020-01-09 12:33:44 -08:00
Varun Shah
7def30c838 Add OWNERS for UsageStats.
Bug: n/a
Test: n/a
Change-Id: Id5805e32794b2bb2eff17e4c139e29517b27c325
2020-01-07 10:13:26 -08:00
Felka Chang
71e3efed54 Add query functionalities to query all of crates
Once the application called Context.getCrateDir(), the crates root
directory is also created. The application can mkdir directory under the
crates root. Each child directory in crates root is one crate.

Each crate information is descibed by CrateInfo. CrateInfo contains
the following information.
* Label:
    It is used to display text to the users.
    Default is the folder name.
* Expiration:
    When the system needs more space. The system will clean the files
    in the crates according to the expired or not.
    Default is 0.

Test: atest \
    CtsOsTestCases:android.os.storage.cts.CrateInfoTest \
    CtsOsTestCases:android.os.storage.cts.StorageCrateTest \
    CtsOsTestCases:android.os.storage.cts.StorageStatsManagerTest

Bug: 141660526

Change-Id: Icdc8123c481ef7c5b4fd68ffcfd334ffbfc9d655
2019-12-18 23:04:15 +08:00
TreeHugger Robot
c10004fe32 Merge "Ensure UsageStats data is read correctly." 2019-12-10 19:58:51 +00:00
TreeHugger Robot
a281d69a39 Merge "Better error handling in UsageStats." 2019-12-09 18:00:46 +00:00
Varun Shah
6b993a7408 Ensure UsageStats data is read correctly.
Add documentation that the IntervalStats object passed into the read
methods in UsageStatsDatabase should ideally be used only as a temporary
reading object unless the caller specifically has other use-cases. Also
updated all the internal calls to match this behavior.

Bug: n/a
Test: atest UsageStatsDatabaseTest
Change-Id: Id3aa2575fa29bf5adc6a52ee8e75690aecf50b8e
2019-12-06 17:26:41 -08:00
Varun Shah
55ae881649 Better error handling in UsageStats.
Ensure all types of exceptions are caught and logged/handled within
UsageStats.

Also update how read failures for pending events files are handled -
since the entire System DE directory is deleted on a successful user
unlock, read all the pending events that you can and skip over
potentially corrupted files.

Bug: 145574371
Test: atest UsageStatsDatabaseTest
Test: atest android.app.usage.cts.UsageStatsTest
Change-Id: I2e22fb01f9b97961b2160aeebaf7791d6673f8b9
2019-12-06 16:08:04 -08:00
Jeffrey Huang
cb78285b81 Rename writeToProto to be dumpDebug
We want to eventually migrate some of these APIs to be @SystemApi for mainline modules.
The #dumpDebug name is more appropriate than #writeToProto.

Bug: 142279786
Test: Manual
Change-Id: I60793e91cedf6b720d4ecef6a8484f4fed4ff30f
2019-12-05 11:28:11 -08:00
TreeHugger Robot
1403ee3ad5 Merge "Prune UsageStats data belonging to uninstalled packages." 2019-12-05 00:14:43 +00:00
Varun Shah
2c0b9f5d78 Prune UsageStats data belonging to uninstalled packages.
Add a per-user job to prune any usage stats data which belongs to a
recently removed package. This job will be scheduled when a package is
removed and it will be executed when the device is considered to be
idle. The jobs are persisted by job scheduler and they are also removed
when a user is removed since all usage stats data is deleted on user
removal.

When executed, the job reads all of the stats on disk and removes those
that belong to removed packages (packages which don't have a token
mapping). If no data is ommitted on read, a write is not performed. If
the user is in a locked state when the job is executed, the job will
keep getting rescheduled until a sucessful pruning of the data.

Additionally, add logic to prune any obsolete usage stats data on a
database upgrade, pruning all data belonging to packages which have
been uninstalled. This ensures that all data in UsageStats in R belongs
to packages that are currently installed or to packages whose
DONT_DELETE_DATA flag was set when uninstalling.

Also remove the clean-up mappings step on boot. That was added as a
safety measure to ensure the mappings file is always updated. However,
with the logic to prune on upgrade and on package uninstalls, that step
is now unnecessary.

This CL also refactors how the UserUsageStatsService is fetched and
initialized within UsageStatsService. This is to ensure there is no lock
contention when the user service is initialized and it also makes way
for other refactorings in the future related to the user service
initialization.

Bug: 143889121
Test: atest UsageStatsDatabaseTest
Test: atest android.app.usage.cts.UsageStatsTest
Change-Id: If475fc018a930d0956b85a64b4e34e2c75b2476f
2019-12-02 17:07:16 -08:00
Kweku Adams
835283f000 Adding temp whitelist methods to PowerWhitelistManager interface.
Migrating temp whitelist APIs to PowerWhitelistManager to allow
telephony to add apps to the temp whitelist.

Bug: 138239060
Bug: 140141678
Bug: 141155196
Bug: 142420609
Bug: 144864180
Test: atest PowerWhitelistTest
Change-Id: Iefd6ecf89aad46de042ef3a1ec0c20d6c35da5a6
2019-11-26 11:07:29 -08:00
TreeHugger Robot
da0af1203b Merge "Remove UserUsageStatsService#userUnlocked." 2019-11-23 01:55:39 +00:00