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