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.IntentQueryHelper;
32 import com.android.queryable.util.SerializableParcelWrapper;
33 
34 /**
35  * Event logged when {@link DeviceAdminReceiver#onDisableRequested(Context, Intent)} is called.
36  */
37 public final class DeviceAdminDisableRequestedEvent extends Event {
38 
39     /** Begin a query for {@link DeviceAdminDisableRequestedEvent} events. */
queryPackage(String packageName)40     public static DeviceAdminDisableRequestedEventQuery queryPackage(String packageName) {
41         return new DeviceAdminDisableRequestedEventQuery(packageName);
42     }
43 
44     /** {@link EventLogsQuery} for {@link DeviceAdminDisableRequestedEvent}. */
45     public static final class DeviceAdminDisableRequestedEventQuery
46             extends EventLogsQuery<DeviceAdminDisableRequestedEvent,
47             DeviceAdminDisableRequestedEventQuery> {
48         DeviceAdminReceiverQueryHelper<DeviceAdminDisableRequestedEventQuery> mDeviceAdminReceiver =
49                 new DeviceAdminReceiverQueryHelper<>(this);
50         IntentQueryHelper<DeviceAdminDisableRequestedEventQuery> mIntent =
51                 new IntentQueryHelper<>(this);
52 
DeviceAdminDisableRequestedEventQuery(String packageName)53         private DeviceAdminDisableRequestedEventQuery(String packageName) {
54             super(DeviceAdminDisableRequestedEvent.class, packageName);
55         }
56 
57         /**
58          * Query {@link Intent} passed into
59          * {@link DeviceAdminReceiver#onDisableRequested(Context, Intent)}.
60          */
61         @CheckResult
whereIntent()62         public IntentQueryHelper<DeviceAdminDisableRequestedEventQuery> whereIntent() {
63             return mIntent;
64         }
65 
66         /** Query {@link DeviceAdminReceiver}. */
67         @CheckResult
68         public DeviceAdminReceiverQuery<DeviceAdminDisableRequestedEventQuery>
whereDeviceAdminReceiver()69                 whereDeviceAdminReceiver() {
70             return mDeviceAdminReceiver;
71         }
72 
73         @Override
filter(DeviceAdminDisableRequestedEvent event)74         protected boolean filter(DeviceAdminDisableRequestedEvent event) {
75             if (!mIntent.matches(event.mIntent)) {
76                 return false;
77             }
78             if (!mDeviceAdminReceiver.matches(event.mDeviceAdminReceiver)) {
79                 return false;
80             }
81             return true;
82         }
83     }
84 
85     /** Begin logging a {@link DeviceAdminDisableRequestedEvent}. */
logger( DeviceAdminReceiver deviceAdminReceiver, Context context, Intent intent)86     public static DeviceAdminDisableRequestedEventLogger logger(
87             DeviceAdminReceiver deviceAdminReceiver, Context context, Intent intent) {
88         return new DeviceAdminDisableRequestedEventLogger(deviceAdminReceiver, context, intent);
89     }
90 
91     /** {@link EventLogger} for {@link DeviceAdminDisableRequestedEvent}. */
92     public static final class DeviceAdminDisableRequestedEventLogger
93             extends EventLogger<DeviceAdminDisableRequestedEvent> {
DeviceAdminDisableRequestedEventLogger( DeviceAdminReceiver deviceAdminReceiver, Context context, Intent intent)94         private DeviceAdminDisableRequestedEventLogger(
95                 DeviceAdminReceiver deviceAdminReceiver, Context context, Intent intent) {
96             super(context, new DeviceAdminDisableRequestedEvent());
97             mEvent.mIntent = new SerializableParcelWrapper<>(intent);
98             setDeviceAdminReceiver(deviceAdminReceiver);
99         }
100 
101         /** Set the {@link DeviceAdminReceiver} which received this event. */
setDeviceAdminReceiver( DeviceAdminReceiver deviceAdminReceiver)102         public DeviceAdminDisableRequestedEventLogger setDeviceAdminReceiver(
103                 DeviceAdminReceiver deviceAdminReceiver) {
104             mEvent.mDeviceAdminReceiver = new DeviceAdminReceiverInfo(deviceAdminReceiver);
105             return this;
106         }
107 
108         /** Set the {@link DeviceAdminReceiver} which received this event. */
setDeviceAdminReceiver( Class<? extends DeviceAdminReceiver> deviceAdminReceiverClass)109         public DeviceAdminDisableRequestedEventLogger setDeviceAdminReceiver(
110                 Class<? extends DeviceAdminReceiver> deviceAdminReceiverClass) {
111             mEvent.mDeviceAdminReceiver = new DeviceAdminReceiverInfo(deviceAdminReceiverClass);
112             return this;
113         }
114 
115         /** Set the {@link DeviceAdminReceiver} which received this event. */
setDeviceAdminReceiver( String deviceAdminReceiverClassName)116         public DeviceAdminDisableRequestedEventLogger setDeviceAdminReceiver(
117                 String deviceAdminReceiverClassName) {
118             mEvent.mDeviceAdminReceiver = new DeviceAdminReceiverInfo(deviceAdminReceiverClassName);
119             return this;
120         }
121 
122         /** Set the {@link Intent} which was received. */
setIntent(Intent intent)123         public DeviceAdminDisableRequestedEventLogger setIntent(Intent intent) {
124             mEvent.mIntent = new SerializableParcelWrapper<>(intent);
125             return this;
126         }
127     }
128 
129     protected SerializableParcelWrapper<Intent> mIntent;
130     protected DeviceAdminReceiverInfo mDeviceAdminReceiver;
131 
132     /**
133      * The {@link Intent} passed into
134      * {@link DeviceAdminReceiver#onDisableRequested(Context, Intent)}.
135      */
intent()136     public Intent intent() {
137         if (mIntent == null) {
138             return null;
139         }
140         return mIntent.get();
141     }
142 
143     /** Information about the {@link DeviceAdminReceiver} which received the intent. */
deviceAdminReceiver()144     public DeviceAdminReceiverInfo deviceAdminReceiver() {
145         return mDeviceAdminReceiver;
146     }
147 
148     @Override
toString()149     public String toString() {
150         return "DeviceAdminDisableRequestedEvent{"
151                 + " intent=" + intent()
152                 + ", deviceAdminReceiver=" + mDeviceAdminReceiver
153                 + ", packageName='" + mPackageName + "'"
154                 + ", timestamp=" + mTimestamp
155                 + "}";
156     }
157 }
158