@@ -89,7 +89,6 @@ public class BannerAdView extends AdView {
89
89
private boolean loadAdHasBeenCalled ;
90
90
private boolean shouldReloadOnResume ;
91
91
private BroadcastReceiver receiver ;
92
- private boolean receiversRegistered ;
93
92
protected boolean shouldResetContainer = false ;
94
93
private boolean expandsToFitScreenWidth = false ;
95
94
private int width = -1 ;
@@ -99,7 +98,6 @@ private void setDefaultsBeforeXML() {
99
98
loadAdHasBeenCalled = false ;
100
99
auto_refresh = true ;
101
100
shouldReloadOnResume = false ;
102
- receiversRegistered = false ;
103
101
}
104
102
105
103
/**
@@ -177,11 +175,12 @@ protected void setup(Context context, AttributeSet attrs) {
177
175
mAdFetcher .setAutoRefresh (auto_refresh );
178
176
}
179
177
180
- void setupBroadcast (Context context ) {
178
+ private void setupBroadcast () {
179
+ if (receiver != null ) return ;
180
+
181
181
IntentFilter filter = new IntentFilter (Intent .ACTION_SCREEN_OFF );
182
182
filter .addAction (Intent .ACTION_SCREEN_ON );
183
183
receiver = new BroadcastReceiver () {
184
-
185
184
@ Override
186
185
public void onReceive (Context context , Intent intent ) {
187
186
if (intent .getAction ().equals (Intent .ACTION_SCREEN_OFF )) {
@@ -197,11 +196,9 @@ else if (shouldReloadOnResume)
197
196
Clog .d (Clog .baseLogTag ,
198
197
Clog .getString (R .string .screen_on_start ));
199
198
}
200
-
201
199
}
202
-
203
200
};
204
- context .registerReceiver (receiver , filter );
201
+ getContext () .registerReceiver (receiver , filter );
205
202
}
206
203
207
204
@ Override
@@ -211,10 +208,7 @@ public final void onLayout(boolean changed, int left, int top, int right,
211
208
212
209
// Are we coming back from a screen/user presence change?
213
210
if (loadAdHasBeenCalled ) {
214
- if (!receiversRegistered ) {
215
- setupBroadcast (getContext ());
216
- receiversRegistered = true ;
217
- }
211
+ setupBroadcast ();
218
212
if (shouldReloadOnResume ) {
219
213
start ();
220
214
}
@@ -225,10 +219,7 @@ public final void onLayout(boolean changed, int left, int top, int right,
225
219
// Make sure receiver is registered.
226
220
private void onFirstLayout () {
227
221
if (this .auto_refresh ) {
228
- if (!receiversRegistered ) {
229
- setupBroadcast (getContext ());
230
- receiversRegistered = true ;
231
- }
222
+ setupBroadcast ();
232
223
}
233
224
}
234
225
@@ -522,10 +513,7 @@ protected void onWindowVisibilityChanged(int visibility) {
522
513
// Register a broadcast receiver to pause and refresh when the phone
523
514
// is
524
515
// locked
525
- if (!receiversRegistered ) {
526
- setupBroadcast (getContext ());
527
- receiversRegistered = true ;
528
- }
516
+ setupBroadcast ();
529
517
Clog .d (Clog .baseLogTag , Clog .getString (R .string .unhidden ));
530
518
//The only time we want to request on visibility changes is if an ad hasn't been loaded yet (loadAdHasBeenCalled)
531
519
// shouldReloadOnResume is true
@@ -545,10 +533,7 @@ protected void onWindowVisibilityChanged(int visibility) {
545
533
}
546
534
} else {
547
535
// Unregister the receiver to prevent a leak.
548
- if (receiversRegistered ) {
549
- dismantleBroadcast ();
550
- receiversRegistered = false ;
551
- }
536
+ dismantleBroadcast ();
552
537
Clog .d (Clog .baseLogTag , Clog .getString (R .string .hidden ));
553
538
if (mAdFetcher != null && loadAdHasBeenCalled ) {
554
539
stop ();
@@ -562,7 +547,9 @@ protected void onWindowVisibilityChanged(int visibility) {
562
547
}
563
548
564
549
private void dismantleBroadcast () {
550
+ if (receiver == null ) return ;
565
551
getContext ().unregisterReceiver (receiver );
552
+ receiver = null ;
566
553
}
567
554
568
555
@ Override
0 commit comments