• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.fuelgauge.batteryusage.db;
18 
19 import android.content.ContentValues;
20 
21 import androidx.room.Entity;
22 import androidx.room.PrimaryKey;
23 
24 import com.android.settings.fuelgauge.batteryusage.ConvertUtils;
25 
26 import com.google.errorprone.annotations.CanIgnoreReturnValue;
27 
28 import java.util.Locale;
29 
30 /** A {@link Entity} class to save app usage events into database. */
31 @Entity
32 public class AppUsageEventEntity {
33     /** Keys for accessing {@link ContentValues}. */
34     public static final String KEY_UID = "uid";
35     public static final String KEY_USER_ID = "userId";
36     public static final String KEY_TIMESTAMP = "timestamp";
37     public static final String KEY_APP_USAGE_EVENT_TYPE = "appUsageEventType";
38     public static final String KEY_PACKAGE_NAME = "packageName";
39     public static final String KEY_INSTANCE_ID = "instanceId";
40     public static final String KEY_TASK_ROOT_PACKAGE_NAME = "taskRootPackageName";
41 
42     @PrimaryKey(autoGenerate = true)
43     private long mId;
44 
45     // Records the app relative information.
46     public final long uid;
47     public final long userId;
48     public final long timestamp;
49     public final int appUsageEventType;
50     public final String packageName;
51     public final int instanceId;
52     public final String taskRootPackageName;
53 
AppUsageEventEntity( final long uid, final long userId, final long timestamp, final int appUsageEventType, final String packageName, final int instanceId, final String taskRootPackageName)54     public AppUsageEventEntity(
55             final long uid,
56             final long userId,
57             final long timestamp,
58             final int appUsageEventType,
59             final String packageName,
60             final int instanceId,
61             final String taskRootPackageName) {
62         this.uid = uid;
63         this.userId = userId;
64         this.timestamp = timestamp;
65         this.appUsageEventType = appUsageEventType;
66         this.packageName = packageName;
67         this.instanceId = instanceId;
68         this.taskRootPackageName = taskRootPackageName;
69     }
70 
71     /** Sets the auto-generated content ID. */
setId(long id)72     public void setId(long id) {
73         this.mId = id;
74     }
75 
76     /** Gets the auto-generated content ID. */
getId()77     public long getId() {
78         return mId;
79     }
80 
81     @Override
toString()82     public String toString() {
83         final String recordAtDateTime = ConvertUtils.utcToLocalTimeForLogging(timestamp);
84         final StringBuilder builder = new StringBuilder()
85                 .append("\nAppUsageEvent{")
86                 .append(String.format(Locale.US,
87                         "\n\tpackage=%s|uid=%d|userId=%d", packageName, uid, userId))
88                 .append(String.format(Locale.US, "\n\ttimestamp=%s|eventType=%d|instanceId=%d",
89                         recordAtDateTime, appUsageEventType, instanceId))
90                 .append(String.format(Locale.US, "\n\ttaskRootPackageName=%s",
91                         taskRootPackageName));
92         return builder.toString();
93     }
94 
95     /** Creates new {@link AppUsageEventEntity} from {@link ContentValues}. */
create(ContentValues contentValues)96     public static AppUsageEventEntity create(ContentValues contentValues) {
97         Builder builder = AppUsageEventEntity.newBuilder();
98         if (contentValues.containsKey(KEY_UID)) {
99             builder.setUid(contentValues.getAsLong(KEY_UID));
100         }
101         if (contentValues.containsKey(KEY_USER_ID)) {
102             builder.setUserId(contentValues.getAsLong(KEY_USER_ID));
103         }
104         if (contentValues.containsKey(KEY_TIMESTAMP)) {
105             builder.setTimestamp(contentValues.getAsLong(KEY_TIMESTAMP));
106         }
107         if (contentValues.containsKey(KEY_APP_USAGE_EVENT_TYPE)) {
108             builder.setAppUsageEventType(contentValues.getAsInteger(KEY_APP_USAGE_EVENT_TYPE));
109         }
110         if (contentValues.containsKey(KEY_PACKAGE_NAME)) {
111             builder.setPackageName(contentValues.getAsString(KEY_PACKAGE_NAME));
112         }
113         if (contentValues.containsKey(KEY_INSTANCE_ID)) {
114             builder.setInstanceId(
115                     contentValues.getAsInteger(KEY_INSTANCE_ID));
116         }
117         if (contentValues.containsKey(KEY_TASK_ROOT_PACKAGE_NAME)) {
118             builder.setTaskRootPackageName(contentValues.getAsString(KEY_TASK_ROOT_PACKAGE_NAME));
119         }
120         return builder.build();
121     }
122 
123     /** Creates a new {@link Builder} instance. */
newBuilder()124     public static Builder newBuilder() {
125         return new Builder();
126     }
127 
128     /** A convenience builder class to improve readability. */
129     public static class Builder {
130         private long mUid;
131         private long mUserId;
132         private long mTimestamp;
133         private int mAppUsageEventType;
134         private String mPackageName;
135         private int mInstanceId;
136         private String mTaskRootPackageName;
137 
138         /** Sets the uid. */
139         @CanIgnoreReturnValue
setUid(final long uid)140         public Builder setUid(final long uid) {
141             this.mUid = uid;
142             return this;
143         }
144 
145         /** Sets the user ID. */
146         @CanIgnoreReturnValue
setUserId(final long userId)147         public Builder setUserId(final long userId) {
148             this.mUserId = userId;
149             return this;
150         }
151 
152         /** Sets the timestamp. */
153         @CanIgnoreReturnValue
setTimestamp(final long timestamp)154         public Builder setTimestamp(final long timestamp) {
155             this.mTimestamp = timestamp;
156             return this;
157         }
158 
159         /** Sets the app usage event type. */
160         @CanIgnoreReturnValue
setAppUsageEventType(final int appUsageEventType)161         public Builder setAppUsageEventType(final int appUsageEventType) {
162             this.mAppUsageEventType = appUsageEventType;
163             return this;
164         }
165 
166         /** Sets the package name. */
167         @CanIgnoreReturnValue
setPackageName(final String packageName)168         public Builder setPackageName(final String packageName) {
169             this.mPackageName = packageName;
170             return this;
171         }
172 
173         /** Sets the instance ID. */
174         @CanIgnoreReturnValue
setInstanceId(final int instanceId)175         public Builder setInstanceId(final int instanceId) {
176             this.mInstanceId = instanceId;
177             return this;
178         }
179 
180         /** Sets the task root package name. */
181         @CanIgnoreReturnValue
setTaskRootPackageName(final String taskRootPackageName)182         public Builder setTaskRootPackageName(final String taskRootPackageName) {
183             this.mTaskRootPackageName = taskRootPackageName;
184             return this;
185         }
186 
187         /** Builds the AppUsageEvent. */
build()188         public AppUsageEventEntity build() {
189             return new AppUsageEventEntity(
190                     mUid,
191                     mUserId,
192                     mTimestamp,
193                     mAppUsageEventType,
194                     mPackageName,
195                     mInstanceId,
196                     mTaskRootPackageName);
197         }
198 
Builder()199         private Builder() {}
200     }
201 
202 
203 }
204