• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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.eventlib.events.activities;
18 
19 import android.app.Activity;
20 import android.os.Bundle;
21 import android.os.PersistableBundle;
22 
23 import androidx.annotation.CheckResult;
24 
25 import com.android.eventlib.Event;
26 import com.android.eventlib.EventLogger;
27 import com.android.eventlib.EventLogsQuery;
28 import com.android.queryable.info.ActivityInfo;
29 import com.android.queryable.queries.ActivityQuery;
30 import com.android.queryable.queries.ActivityQueryHelper;
31 import com.android.queryable.queries.BundleQueryHelper;
32 import com.android.queryable.queries.IntegerQuery;
33 import com.android.queryable.queries.IntegerQueryHelper;
34 import com.android.queryable.queries.PersistableBundleQuery;
35 import com.android.queryable.queries.PersistableBundleQueryHelper;
36 import com.android.queryable.util.SerializableParcelWrapper;
37 
38 /**
39  * Event logged when {@link Activity#onCreate(Bundle)} or
40  * {@link Activity#onCreate(Bundle, PersistableBundle)} is called.
41  */
42 public final class ActivityCreatedEvent extends Event {
43 
44     private static final long serialVersionUID = 1;
45 
46     /** Begins a query for {@link ActivityCreatedEvent} events. */
queryPackage(String packageName)47     public static ActivityCreatedEventQuery queryPackage(String packageName) {
48         return new ActivityCreatedEventQuery(packageName);
49     }
50 
51     /** {@link EventLogsQuery} for {@link ActivityCreatedEvent}. */
52     public static final class ActivityCreatedEventQuery
53             extends EventLogsQuery<ActivityCreatedEvent, ActivityCreatedEventQuery> {
54 
55         private static final long serialVersionUID = 1;
56 
57         ActivityQueryHelper<ActivityCreatedEventQuery> mActivity = new ActivityQueryHelper<>(this);
58         BundleQueryHelper<ActivityCreatedEventQuery> mSavedInstanceState =
59                 new BundleQueryHelper<>(this);
60         PersistableBundleQueryHelper<ActivityCreatedEventQuery> mPersistentState =
61                 new PersistableBundleQueryHelper<>(this);
62         IntegerQuery<ActivityCreatedEventQuery> mTaskId = new IntegerQueryHelper<>(this);
63 
ActivityCreatedEventQuery(String packageName)64         private ActivityCreatedEventQuery(String packageName) {
65             super(ActivityCreatedEvent.class, packageName);
66         }
67 
68         /**
69          * Query {@code savedInstanceState} {@link Bundle} passed into
70          * {@link Activity#onCreate(Bundle)} or
71          * {@link Activity#onCreate(Bundle, PersistableBundle)}.
72          */
73         @CheckResult
whereSavedInstanceState()74         public BundleQueryHelper<ActivityCreatedEventQuery> whereSavedInstanceState() {
75             return mSavedInstanceState;
76         }
77 
78         /**
79          * Query {@code persistentState} {@link PersistableBundle} passed into
80          * {@link Activity#onCreate(Bundle, PersistableBundle)}.
81          */
82         @CheckResult
wherePersistentState()83         public PersistableBundleQuery<ActivityCreatedEventQuery> wherePersistentState() {
84             return mPersistentState;
85         }
86 
87         /** Query {@link Activity}. */
88         @CheckResult
whereActivity()89         public ActivityQuery<ActivityCreatedEventQuery> whereActivity() {
90             return mActivity;
91         }
92 
93         /** Query {@code taskId}. */
94         @CheckResult
whereTaskId()95         public IntegerQuery<ActivityCreatedEventQuery> whereTaskId() {
96             return mTaskId;
97         }
98 
99         @Override
filter(ActivityCreatedEvent event)100         protected boolean filter(ActivityCreatedEvent event) {
101             if (!mSavedInstanceState.matches(event.mSavedInstanceState)) {
102                 return false;
103             }
104             if (!mPersistentState.matches(event.mPersistentState)) {
105                 return false;
106             }
107             if (!mActivity.matches(event.mActivity)) {
108                 return false;
109             }
110             if (!mTaskId.matches(event.mTaskId)) {
111                 return false;
112             }
113             return true;
114         }
115 
116         @Override
describeQuery(String fieldName)117         public String describeQuery(String fieldName) {
118             return toStringBuilder(ActivityCreatedEvent.class, this)
119                     .field("savedInstanceState", mSavedInstanceState)
120                     .field("persistentState", mPersistentState)
121                     .field("activity", mActivity)
122                     .field("taskId", mTaskId)
123                     .toString();
124         }
125     }
126 
127     /** Begins logging a {@link ActivityCreatedEvent}. */
logger(Activity activity, android.content.pm.ActivityInfo activityInfo, Bundle savedInstanceState)128     public static ActivityCreatedEventLogger logger(Activity activity, android.content.pm.ActivityInfo activityInfo, Bundle savedInstanceState) {
129         return new ActivityCreatedEventLogger(activity, activityInfo, savedInstanceState);
130     }
131 
132     /** {@link EventLogger} for {@link ActivityCreatedEvent}. */
133     public static final class ActivityCreatedEventLogger extends EventLogger<ActivityCreatedEvent> {
ActivityCreatedEventLogger(Activity activity, android.content.pm.ActivityInfo activityInfo, Bundle savedInstanceState)134         private ActivityCreatedEventLogger(Activity activity, android.content.pm.ActivityInfo activityInfo, Bundle savedInstanceState) {
135             super(activity, new ActivityCreatedEvent());
136             setSavedInstanceState(savedInstanceState);
137             setTaskId(activity.getTaskId());
138             setActivity(activityInfo);
139         }
140 
setActivity(android.content.pm.ActivityInfo activityInfo)141         public ActivityCreatedEventLogger setActivity(android.content.pm.ActivityInfo activityInfo) {
142             mEvent.mActivity = ActivityInfo.builder()
143                     .activityClass(activityInfo.name)
144                     .exported(activityInfo.exported)
145                     .build();
146             return this;
147         }
148 
setSavedInstanceState(Bundle savedInstanceState)149         public ActivityCreatedEventLogger setSavedInstanceState(Bundle savedInstanceState) {
150             mEvent.mSavedInstanceState = new SerializableParcelWrapper<>(savedInstanceState);
151             return this;
152         }
153 
setPersistentState(PersistableBundle persistentState)154         public ActivityCreatedEventLogger setPersistentState(PersistableBundle persistentState) {
155             mEvent.mPersistentState = new SerializableParcelWrapper<>(persistentState);
156             return this;
157         }
158 
159         /** Sets the task ID for the activity. */
setTaskId(int taskId)160         public ActivityCreatedEventLogger setTaskId(int taskId) {
161             mEvent.mTaskId = taskId;
162             return this;
163         }
164     }
165 
166     protected SerializableParcelWrapper<Bundle> mSavedInstanceState;
167     protected SerializableParcelWrapper<PersistableBundle> mPersistentState;
168     protected ActivityInfo mActivity;
169     protected int mTaskId;
170 
171     /**
172      * The {@code savedInstanceState} {@link Bundle} passed into
173      * {@link Activity#onCreate(Bundle)} or
174      * {@link Activity#onCreate(Bundle, PersistableBundle)}.
175      */
savedInstanceState()176     public Bundle savedInstanceState() {
177         if (mSavedInstanceState == null) {
178             return null;
179         }
180         return mSavedInstanceState.get();
181     }
182 
183     /**
184      * The {@code persistentState} {@link PersistableBundle} passed into
185      * {@link Activity#onCreate(Bundle, PersistableBundle)}.
186      */
persistentState()187     public PersistableBundle persistentState() {
188         if (mPersistentState == null) {
189             return null;
190         }
191         return mPersistentState.get();
192     }
193 
194     /** Information about the {@link Activity} started. */
activity()195     public ActivityInfo activity() {
196         return mActivity;
197     }
198 
199     /** The Task ID of the Activity. */
taskId()200     public int taskId() {
201         return mTaskId;
202     }
203 
204     @Override
toString()205     public String toString() {
206         return "ActivityCreatedEvent{"
207                 + " savedInstanceState=" + savedInstanceState()
208                 + ", persistentState=" + persistentState()
209                 + ", activity=" + mActivity
210                 + ", taskId=" + mTaskId
211                 + ", packageName='" + mPackageName + "'"
212                 + ", timestamp=" + mTimestamp
213                 + "}";
214     }
215 }
216