32
32
import androidx .media3 .common .util .Assertions ;
33
33
import androidx .media3 .common .util .Log ;
34
34
import androidx .media3 .common .util .Util ;
35
+ import com .google .common .base .Supplier ;
36
+ import com .google .common .base .Suppliers ;
35
37
import java .lang .annotation .Documented ;
36
38
import java .lang .annotation .Retention ;
37
39
import java .lang .annotation .RetentionPolicy ;
@@ -160,15 +162,14 @@ public interface PlayerControl {
160
162
private static final float VOLUME_MULTIPLIER_DUCK = 0.2f ;
161
163
private static final float VOLUME_MULTIPLIER_DEFAULT = 1.0f ;
162
164
163
- private final AudioManager audioManager ;
165
+ private final Supplier < AudioManager > audioManager ;
164
166
private final AudioFocusListener focusListener ;
165
167
@ Nullable private PlayerControl playerControl ;
166
168
@ Nullable private AudioAttributes audioAttributes ;
167
169
168
170
private @ AudioFocusState int audioFocusState ;
169
171
private @ AudioFocusGain int focusGainToRequest ;
170
172
private float volumeMultiplier = VOLUME_MULTIPLIER_DEFAULT ;
171
-
172
173
private @ MonotonicNonNull AudioFocusRequest audioFocusRequest ;
173
174
private boolean rebuildAudioFocusRequest ;
174
175
@@ -181,8 +182,11 @@ public interface PlayerControl {
181
182
*/
182
183
public AudioFocusManager (Context context , Handler eventHandler , PlayerControl playerControl ) {
183
184
this .audioManager =
184
- checkNotNull (
185
- (AudioManager ) context .getApplicationContext ().getSystemService (Context .AUDIO_SERVICE ));
185
+ Suppliers .memoize (
186
+ () ->
187
+ checkNotNull (
188
+ (AudioManager )
189
+ context .getApplicationContext ().getSystemService (Context .AUDIO_SERVICE )));
186
190
this .playerControl = playerControl ;
187
191
this .focusListener = new AudioFocusListener (eventHandler );
188
192
this .audioFocusState = AUDIO_FOCUS_STATE_NOT_REQUESTED ;
@@ -287,10 +291,12 @@ private void abandonAudioFocusIfHeld() {
287
291
}
288
292
289
293
private int requestAudioFocusDefault () {
290
- return audioManager .requestAudioFocus (
291
- focusListener ,
292
- Util .getStreamTypeForAudioUsage (checkNotNull (audioAttributes ).usage ),
293
- focusGainToRequest );
294
+ return audioManager
295
+ .get ()
296
+ .requestAudioFocus (
297
+ focusListener ,
298
+ Util .getStreamTypeForAudioUsage (checkNotNull (audioAttributes ).usage ),
299
+ focusGainToRequest );
294
300
}
295
301
296
302
@ RequiresApi (26 )
@@ -312,17 +318,17 @@ private int requestAudioFocusV26() {
312
318
313
319
rebuildAudioFocusRequest = false ;
314
320
}
315
- return audioManager .requestAudioFocus (audioFocusRequest );
321
+ return audioManager .get (). requestAudioFocus (audioFocusRequest );
316
322
}
317
323
318
324
private void abandonAudioFocusDefault () {
319
- audioManager .abandonAudioFocus (focusListener );
325
+ audioManager .get (). abandonAudioFocus (focusListener );
320
326
}
321
327
322
328
@ RequiresApi (26 )
323
329
private void abandonAudioFocusV26 () {
324
330
if (audioFocusRequest != null ) {
325
- audioManager .abandonAudioFocusRequest (audioFocusRequest );
331
+ audioManager .get (). abandonAudioFocusRequest (audioFocusRequest );
326
332
}
327
333
}
328
334
0 commit comments