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.server.statusbar; 18 19 import android.content.BroadcastReceiver; 20 import android.content.Context; 21 import android.content.ContextWrapper; 22 import android.content.Intent; 23 import android.content.IntentFilter; 24 import android.os.Handler; 25 import android.os.UserHandle; 26 import android.testing.TestableContext; 27 28 import androidx.annotation.NonNull; 29 import androidx.annotation.Nullable; 30 31 import java.util.ArrayList; 32 33 /** 34 * {@link ContextWrapper} that doesn't register {@link BroadcastReceiver}. 35 * 36 * Instead, it keeps a list of the registrations for querying. 37 */ 38 class NoBroadcastContextWrapper extends TestableContext { 39 40 ArrayList<BroadcastReceiverRegistration> mRegistrationList = 41 new ArrayList<>(); 42 NoBroadcastContextWrapper(Context context)43 NoBroadcastContextWrapper(Context context) { 44 super(context); 45 } 46 47 @Override registerReceiver(@ullable BroadcastReceiver receiver, IntentFilter filter)48 public Intent registerReceiver(@Nullable BroadcastReceiver receiver, IntentFilter filter) { 49 return registerReceiver(receiver, filter, 0); 50 } 51 52 @Override registerReceiver(@ullable BroadcastReceiver receiver, IntentFilter filter, int flags)53 public Intent registerReceiver(@Nullable BroadcastReceiver receiver, IntentFilter filter, 54 int flags) { 55 return registerReceiver(receiver, filter, null, null, flags); 56 } 57 58 @Override registerReceiver(@ullable BroadcastReceiver receiver, IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler)59 public Intent registerReceiver(@Nullable BroadcastReceiver receiver, IntentFilter filter, 60 @Nullable String broadcastPermission, @Nullable Handler scheduler) { 61 return registerReceiver(receiver, filter, broadcastPermission, scheduler, 0); 62 } 63 64 @Override registerReceiver(@ullable BroadcastReceiver receiver, IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler, int flags)65 public Intent registerReceiver(@Nullable BroadcastReceiver receiver, IntentFilter filter, 66 @Nullable String broadcastPermission, @Nullable Handler scheduler, int flags) { 67 return registerReceiverAsUser(receiver, getUser(), filter, broadcastPermission, scheduler, 68 flags); 69 } 70 71 @Nullable 72 @Override registerReceiverForAllUsers(@ullable BroadcastReceiver receiver, @NonNull IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler)73 public Intent registerReceiverForAllUsers(@Nullable BroadcastReceiver receiver, 74 @NonNull IntentFilter filter, @Nullable String broadcastPermission, 75 @Nullable Handler scheduler) { 76 return registerReceiverForAllUsers(receiver, filter, broadcastPermission, scheduler, 0); 77 } 78 79 @Nullable 80 @Override registerReceiverForAllUsers(@ullable BroadcastReceiver receiver, @NonNull IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler, int flags)81 public Intent registerReceiverForAllUsers(@Nullable BroadcastReceiver receiver, 82 @NonNull IntentFilter filter, @Nullable String broadcastPermission, 83 @Nullable Handler scheduler, int flags) { 84 return registerReceiverAsUser(receiver, UserHandle.ALL, filter, broadcastPermission, 85 scheduler, flags); 86 } 87 88 @Override registerReceiverAsUser(@ullable BroadcastReceiver receiver, UserHandle user, IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler)89 public Intent registerReceiverAsUser(@Nullable BroadcastReceiver receiver, UserHandle user, 90 IntentFilter filter, @Nullable String broadcastPermission, 91 @Nullable Handler scheduler) { 92 return registerReceiverAsUser(receiver, user, filter, broadcastPermission, 93 scheduler, 0); 94 } 95 96 @Override registerReceiverAsUser(@ullable BroadcastReceiver receiver, UserHandle user, IntentFilter filter, @Nullable String broadcastPermission, @Nullable Handler scheduler, int flags)97 public Intent registerReceiverAsUser(@Nullable BroadcastReceiver receiver, UserHandle user, 98 IntentFilter filter, @Nullable String broadcastPermission, 99 @Nullable Handler scheduler, int flags) { 100 BroadcastReceiverRegistration reg = new BroadcastReceiverRegistration( 101 receiver, user, filter, broadcastPermission, scheduler, flags 102 ); 103 mRegistrationList.add(reg); 104 return null; 105 } 106 107 @Override unregisterReceiver(BroadcastReceiver receiver)108 public void unregisterReceiver(BroadcastReceiver receiver) { 109 mRegistrationList.removeIf((reg) -> reg.mReceiver == receiver); 110 } 111 112 static class BroadcastReceiverRegistration { 113 final BroadcastReceiver mReceiver; 114 final UserHandle mUser; 115 final IntentFilter mIntentFilter; 116 final String mBroadcastPermission; 117 final Handler mHandler; 118 final int mFlags; 119 BroadcastReceiverRegistration(BroadcastReceiver receiver, UserHandle user, IntentFilter intentFilter, String broadcastPermission, Handler handler, int flags)120 BroadcastReceiverRegistration(BroadcastReceiver receiver, UserHandle user, 121 IntentFilter intentFilter, String broadcastPermission, Handler handler, int flags) { 122 mReceiver = receiver; 123 mUser = user; 124 mIntentFilter = intentFilter; 125 mBroadcastPermission = broadcastPermission; 126 mHandler = handler; 127 mFlags = flags; 128 } 129 } 130 } 131