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.services; 18 19 import android.app.Service; 20 21 import androidx.annotation.CheckResult; 22 23 import com.android.eventlib.Event; 24 import com.android.eventlib.EventLogger; 25 import com.android.eventlib.EventLogsQuery; 26 import com.android.queryable.info.ServiceInfo; 27 import com.android.queryable.queries.IntegerQueryHelper; 28 import com.android.queryable.queries.ServiceQuery; 29 import com.android.queryable.queries.ServiceQueryHelper; 30 31 /** 32 * Event logged when {@link Service#onTrimMemory(int)} 33 */ 34 public class ServiceMemoryTrimmedEvent extends Event { 35 36 private static final long serialVersionUID = 1; 37 38 /** Begins a query for {@link ServiceMemoryTrimmedEvent} events. */ queryPackage(String packageName)39 public static ServiceMemoryTrimmedEventQuery queryPackage(String packageName) { 40 return new ServiceMemoryTrimmedEventQuery(packageName); 41 } 42 43 /** {@link EventLogsQuery} for {@link ServiceMemoryTrimmedEvent}. */ 44 public static final class ServiceMemoryTrimmedEventQuery extends 45 EventLogsQuery<ServiceMemoryTrimmedEvent, 46 ServiceMemoryTrimmedEventQuery> { 47 48 private static final long serialVersionUID = 1; 49 50 ServiceQueryHelper<ServiceMemoryTrimmedEventQuery> mService = 51 new ServiceQueryHelper<>(this); 52 IntegerQueryHelper<ServiceMemoryTrimmedEventQuery> mLevel = new IntegerQueryHelper<>(this); 53 ServiceMemoryTrimmedEventQuery(String packageName)54 private ServiceMemoryTrimmedEventQuery(String packageName) { 55 super(ServiceMemoryTrimmedEvent.class, packageName); 56 } 57 58 /** Query {@link Service}. */ 59 @CheckResult whereService()60 public ServiceQuery<ServiceMemoryTrimmedEventQuery> whereService() { 61 return mService; 62 } 63 64 /** Query {@link Service}. */ 65 @CheckResult whereLevel()66 public IntegerQueryHelper<ServiceMemoryTrimmedEventQuery> whereLevel() { 67 return mLevel; 68 } 69 70 @Override filter(ServiceMemoryTrimmedEvent event)71 protected boolean filter(ServiceMemoryTrimmedEvent event) { 72 if (!mLevel.matches(event.mLevel)) { 73 return false; 74 } 75 if (!mService.matches(event.mService)) { 76 return false; 77 } 78 return true; 79 } 80 81 @Override describeQuery(String fieldName)82 public String describeQuery(String fieldName) { 83 return toStringBuilder(ServiceMemoryTrimmedEvent.class, this) 84 .field("level", mLevel) 85 .field("service", mService) 86 .toString(); 87 } 88 } 89 90 91 /** Begins logging a {@link ServiceMemoryTrimmedEvent}. */ logger(Service service, String serviceName, int level)92 public static ServiceMemoryTrimmedEventLogger logger(Service service, 93 String serviceName, int level) { 94 return new ServiceMemoryTrimmedEventLogger(service, serviceName, level); 95 } 96 97 /** {@link EventLogger} for {@link ServiceMemoryTrimmedEvent}. */ 98 public static final class ServiceMemoryTrimmedEventLogger extends 99 EventLogger<ServiceMemoryTrimmedEvent> { ServiceMemoryTrimmedEventLogger(Service service, String serviceName, int level)100 private ServiceMemoryTrimmedEventLogger(Service service, 101 String serviceName, int level) { 102 super(service, new ServiceMemoryTrimmedEvent()); 103 mEvent.mLevel = level; 104 setService(serviceName); 105 } 106 107 /** Sets the {@link Service} which received this event. */ setService( String serviceName)108 public ServiceMemoryTrimmedEventLogger setService( 109 String serviceName) { 110 mEvent.mService = ServiceInfo.builder() 111 .serviceClass(serviceName) 112 .build(); 113 return this; 114 } 115 116 /** Sets the level. */ setLevel(int level)117 public ServiceMemoryTrimmedEventLogger setLevel(int level) { 118 mEvent.mLevel = level; 119 return this; 120 } 121 122 } 123 124 protected ServiceInfo mService; 125 protected int mLevel; 126 127 /** 128 * The level passed into {@link Service#onTrimMemory(int)}. 129 */ level()130 public int level() { 131 return mLevel; 132 } 133 134 /** Information about the {@link Service} which received the intent. */ service()135 public ServiceInfo service() { 136 return mService; 137 } 138 139 @Override toString()140 public String toString() { 141 return "ServiceMemoryTrimmedEvent{" 142 + ", service=" + mService 143 + ", level=" + mLevel 144 + ", packageName='" + mPackageName + "'" 145 + ", timestamp=" + mTimestamp 146 + "}"; 147 } 148 } 149