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