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.deviceadminreceivers;
18 
19 import android.app.admin.DeviceAdminReceiver;
20 import android.content.Context;
21 import android.content.Intent;
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.DeviceAdminReceiverInfo;
29 import com.android.queryable.queries.DeviceAdminReceiverQuery;
30 import com.android.queryable.queries.DeviceAdminReceiverQueryHelper;
31 import com.android.queryable.queries.IntentQuery;
32 import com.android.queryable.queries.IntentQueryHelper;
33 import com.android.queryable.queries.LongQuery;
34 import com.android.queryable.queries.LongQueryHelper;
35 import com.android.queryable.util.SerializableParcelWrapper;
36 
37 /** Event logged when {@link DeviceAdminReceiver#onSystemUpdatePending} is called. */
38 public class DeviceAdminSystemUpdatePendingEvent extends Event {
39 
40     /** Begin a query for {@link DeviceAdminSystemUpdatePendingEvent} events. */
queryPackage(String packageName)41     public static DeviceAdminSystemUpdatePendingEventQuery queryPackage(String packageName) {
42         return new DeviceAdminSystemUpdatePendingEventQuery(packageName);
43     }
44 
45     /** {@link EventLogsQuery} for {@link DeviceAdminSystemUpdatePendingEvent}. */
46     public static final class DeviceAdminSystemUpdatePendingEventQuery
47             extends EventLogsQuery<DeviceAdminSystemUpdatePendingEvent,
48                     DeviceAdminSystemUpdatePendingEventQuery> {
49         DeviceAdminReceiverQueryHelper<DeviceAdminSystemUpdatePendingEventQuery>
50                 mDeviceAdminReceiver = new DeviceAdminReceiverQueryHelper<>(this);
51         IntentQueryHelper<DeviceAdminSystemUpdatePendingEventQuery> mIntent =
52                 new IntentQueryHelper<>(this);
53         LongQueryHelper<DeviceAdminSystemUpdatePendingEventQuery> mReceivedTime =
54                 new LongQueryHelper<>(this);
55 
DeviceAdminSystemUpdatePendingEventQuery(String packageName)56         private DeviceAdminSystemUpdatePendingEventQuery(String packageName) {
57             super(DeviceAdminSystemUpdatePendingEvent.class, packageName);
58         }
59 
60         /**
61          * Query {@link Intent} passed into {@link
62          * DeviceAdminReceiver#onPasswordSucceeded(Context, Intent)}.
63          */
64         @CheckResult
whereIntent()65         public IntentQuery<DeviceAdminSystemUpdatePendingEventQuery> whereIntent() {
66             return mIntent;
67         }
68 
69         /** Query {@link DeviceAdminReceiver}. */
70         @CheckResult
71         public DeviceAdminReceiverQuery<DeviceAdminSystemUpdatePendingEventQuery>
whereDeviceAdminReceiver()72         whereDeviceAdminReceiver() {
73             return mDeviceAdminReceiver;
74         }
75 
76         /**
77          * Query the received time passed into {@link
78          * DeviceAdminReceiver#onSystemUpdatePending(Context, Intent, long)}.
79          */
80         @CheckResult
whereReceivedTime()81         public LongQuery<DeviceAdminSystemUpdatePendingEventQuery> whereReceivedTime() {
82             return mReceivedTime;
83         }
84 
85         @Override
filter(DeviceAdminSystemUpdatePendingEvent event)86         protected boolean filter(DeviceAdminSystemUpdatePendingEvent event) {
87             if (!mIntent.matches(event.mIntent)) {
88                 return false;
89             }
90             if (!mDeviceAdminReceiver.matches(event.mDeviceAdminReceiver)) {
91                 return false;
92             }
93             if (!mReceivedTime.matches(event.mReceivedTime)) {
94                 return false;
95             }
96             return true;
97         }
98     }
99 
100     /** Begin logging a {@link DeviceAdminSystemUpdatePendingEvent}. */
logger( DeviceAdminReceiver deviceAdminReceiver, Context context, Intent intent, long receivedTime)101     public static DeviceAdminSystemUpdatePendingEventLogger logger(
102             DeviceAdminReceiver deviceAdminReceiver,
103             Context context,
104             Intent intent,
105             long receivedTime) {
106         return new DeviceAdminSystemUpdatePendingEventLogger(
107                 deviceAdminReceiver, context, intent, receivedTime);
108     }
109 
110     /** {@link EventLogger} for {@link DeviceAdminSystemUpdatePendingEvent}. */
111     public static final class DeviceAdminSystemUpdatePendingEventLogger
112             extends EventLogger<DeviceAdminSystemUpdatePendingEvent> {
DeviceAdminSystemUpdatePendingEventLogger( DeviceAdminReceiver deviceAdminReceiver, Context context, Intent intent, long receivedTime)113         private DeviceAdminSystemUpdatePendingEventLogger(
114                 DeviceAdminReceiver deviceAdminReceiver,
115                 Context context,
116                 Intent intent,
117                 long receivedTime) {
118             super(context, new DeviceAdminSystemUpdatePendingEvent());
119             mEvent.mIntent = new SerializableParcelWrapper<>(intent);
120             setDeviceAdminReceiver(deviceAdminReceiver);
121             setReceivedTime(receivedTime);
122         }
123 
124         /** Set the {@link DeviceAdminReceiver} which received this event. */
setDeviceAdminReceiver( DeviceAdminReceiver deviceAdminReceiver)125         public DeviceAdminSystemUpdatePendingEventLogger setDeviceAdminReceiver(
126                 DeviceAdminReceiver deviceAdminReceiver) {
127             mEvent.mDeviceAdminReceiver = new DeviceAdminReceiverInfo(deviceAdminReceiver);
128             return this;
129         }
130 
131         /** Set the {@link DeviceAdminReceiver} which received this event. */
setDeviceAdminReceiver( Class<? extends DeviceAdminReceiver> deviceAdminReceiverClass)132         public DeviceAdminSystemUpdatePendingEventLogger setDeviceAdminReceiver(
133                 Class<? extends DeviceAdminReceiver> deviceAdminReceiverClass) {
134             mEvent.mDeviceAdminReceiver = new DeviceAdminReceiverInfo(deviceAdminReceiverClass);
135             return this;
136         }
137 
138         /** Set the {@link DeviceAdminReceiver} which received this event. */
setDeviceAdminReceiver( String deviceAdminReceiverClassName)139         public DeviceAdminSystemUpdatePendingEventLogger setDeviceAdminReceiver(
140                 String deviceAdminReceiverClassName) {
141             mEvent.mDeviceAdminReceiver = new DeviceAdminReceiverInfo(deviceAdminReceiverClassName);
142             return this;
143         }
144 
145         /** Set the {@link Intent} which was received. */
setIntent(Intent intent)146         public DeviceAdminSystemUpdatePendingEventLogger setIntent(Intent intent) {
147             mEvent.mIntent = new SerializableParcelWrapper<>(intent);
148             return this;
149         }
150 
151         /** Set the received time. */
setReceivedTime(long receivedTime)152         public DeviceAdminSystemUpdatePendingEventLogger setReceivedTime(long receivedTime) {
153             mEvent.mReceivedTime = receivedTime;
154             return this;
155         }
156     }
157 
158     protected SerializableParcelWrapper<Intent> mIntent;
159     protected long mReceivedTime;
160     protected DeviceAdminReceiverInfo mDeviceAdminReceiver;
161 
162     /**
163      * The {@link Intent} passed into {@link
164      * DeviceAdminReceiver#onPasswordSucceeded(Context, Intent)}.
165      */
intent()166     public Intent intent() {
167         if (mIntent == null) {
168             return null;
169         }
170         return mIntent.get();
171     }
172 
173     /**
174      * The received time passed into {@link
175      * DeviceAdminReceiver#onSystemUpdatePending(Context, Intent, long)}.
176      */
receivedTime()177     public long receivedTime() {
178         return mReceivedTime;
179     }
180 
181     /** Information about the {@link DeviceAdminReceiver} which received the intent. */
deviceAdminReceiver()182     public DeviceAdminReceiverInfo deviceAdminReceiver() {
183         return mDeviceAdminReceiver;
184     }
185 
186     @Override
toString()187     public String toString() {
188         return "DeviceAdminSystemUpdatePendingEvent{"
189                 + " intent=" + intent()
190                 + ", receivedTime=" + receivedTime()
191                 + ", deviceAdminReceiver=" + mDeviceAdminReceiver
192                 + ", packageName='" + mPackageName + "'"
193                 + ", timestamp=" + mTimestamp
194                 + "}";
195     }
196 }
197