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