• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5  * except in compliance with the License. You may obtain a copy of the License at
6  *
7  *      http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software distributed under the
10  * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11  * KIND, either express or implied. See the License for the specific language governing
12  * permissions and limitations under the License.
13  */
14 
15 package com.android.systemui;
16 
17 import android.content.BroadcastReceiver;
18 import android.content.Context;
19 import android.content.Intent;
20 import android.content.IntentFilter;
21 import android.os.Handler;
22 import android.os.UserHandle;
23 import android.testing.LeakCheck;
24 import android.testing.TestableContext;
25 import android.util.ArraySet;
26 import android.util.Log;
27 import android.view.Display;
28 
29 import com.android.internal.annotations.GuardedBy;
30 
31 import java.util.Set;
32 
33 public class SysuiTestableContext extends TestableContext {
34 
35     @GuardedBy("mRegisteredReceivers")
36     private final Set<BroadcastReceiver> mRegisteredReceivers = new ArraySet<>();
37 
SysuiTestableContext(Context base)38     public SysuiTestableContext(Context base) {
39         super(base);
40         setTheme(R.style.Theme_SystemUI);
41     }
42 
SysuiTestableContext(Context base, LeakCheck check)43     public SysuiTestableContext(Context base, LeakCheck check) {
44         super(base, check);
45         setTheme(R.style.Theme_SystemUI);
46     }
47 
48     @Override
createDisplayContext(Display display)49     public Context createDisplayContext(Display display) {
50         if (display == null) {
51             throw new IllegalArgumentException("display must not be null");
52         }
53 
54         SysuiTestableContext context =
55                 new SysuiTestableContext(getBaseContext().createDisplayContext(display));
56         return context;
57     }
58 
cleanUpReceivers(String testName)59     public void cleanUpReceivers(String testName) {
60         Set<BroadcastReceiver> copy;
61         synchronized (mRegisteredReceivers) {
62             copy = new ArraySet<>(mRegisteredReceivers);
63             mRegisteredReceivers.clear();
64         }
65         for (BroadcastReceiver r : copy) {
66             try {
67                 unregisterReceiver(r);
68                 Log.w(testName, "Receiver not unregistered from Context: " + r);
69             } catch (IllegalArgumentException e) {
70                 // Nothing to do here. Somehow it got unregistered.
71             }
72         }
73     }
74 
75     @Override
registerReceiver(BroadcastReceiver receiver, IntentFilter filter)76     public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
77         if (receiver != null) {
78             synchronized (mRegisteredReceivers) {
79                 mRegisteredReceivers.add(receiver);
80             }
81         }
82         return super.registerReceiver(receiver, filter);
83     }
84 
85     @Override
registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler)86     public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter,
87             String broadcastPermission, Handler scheduler) {
88         if (receiver != null) {
89             synchronized (mRegisteredReceivers) {
90                 mRegisteredReceivers.add(receiver);
91             }
92         }
93         return super.registerReceiver(receiver, filter, broadcastPermission, scheduler);
94     }
95 
96     @Override
registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user, IntentFilter filter, String broadcastPermission, Handler scheduler)97     public Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user,
98             IntentFilter filter, String broadcastPermission, Handler scheduler) {
99         if (receiver != null) {
100             synchronized (mRegisteredReceivers) {
101                 mRegisteredReceivers.add(receiver);
102             }
103         }
104         return super.registerReceiverAsUser(receiver, user, filter, broadcastPermission, scheduler);
105     }
106 
107     @Override
unregisterReceiver(BroadcastReceiver receiver)108     public void unregisterReceiver(BroadcastReceiver receiver) {
109         if (receiver != null) {
110             synchronized (mRegisteredReceivers) {
111                 mRegisteredReceivers.remove(receiver);
112             }
113         }
114         super.unregisterReceiver(receiver);
115     }
116 }
117