• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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.car.audio;
18 
19 import static com.android.car.internal.ExcludeFromCodeCoverageGeneratedReport.BOILERPLATE_CODE;
20 
21 import android.media.AudioAttributes;
22 import android.media.AudioFocusInfo;
23 import android.media.AudioManager;
24 import android.os.Build;
25 import android.os.Bundle;
26 
27 import com.android.car.internal.ExcludeFromCodeCoverageGeneratedReport;
28 
29 @ExcludeFromCodeCoverageGeneratedReport(reason = BOILERPLATE_CODE)
30 public final class AudioFocusInfoBuilder {
31     private int mUsage;
32     private int mClientUid;
33     private String mClientId;
34     private int mGainRequest;
35     private String mPackageName = "com.android.car.audio";
36     private Bundle mBundle = null;
37     private int mLossReceived = AudioManager.AUDIOFOCUS_NONE;
38     private int mSdk = Build.VERSION.SDK_INT;
39     private boolean mDelayedFocusRequestEnabled;
40     private boolean mPausesOnDuckRequestEnabled;
41 
42     /**
43      * Set audio focus info usage
44      */
setUsage(int usage)45     public AudioFocusInfoBuilder setUsage(int usage) {
46         mUsage = usage;
47         return this;
48     }
49 
50     /**
51      * Set client UID info usage
52      */
setClientUid(int clientUid)53     public AudioFocusInfoBuilder setClientUid(int clientUid) {
54         mClientUid = clientUid;
55         return this;
56     }
57 
58     /**
59      * Set audio focus info client ID
60      */
setClientId(String clientId)61     public AudioFocusInfoBuilder setClientId(String clientId) {
62         mClientId = clientId;
63         return this;
64     }
65 
66     /**
67      * Set audio focus info package name
68      */
setPackageName(String packageName)69     public AudioFocusInfoBuilder setPackageName(String packageName) {
70         mPackageName = packageName;
71         return this;
72     }
73 
74     /**
75      * Set audio focus info gain request
76      */
setGainRequest(int gainRequest)77     public AudioFocusInfoBuilder setGainRequest(int gainRequest) {
78         mGainRequest = gainRequest;
79         return this;
80     }
81 
82     /**
83      * Set audio focus info loss request
84      */
setLossReceived(int lossReceived)85     public AudioFocusInfoBuilder setLossReceived(int lossReceived) {
86         mLossReceived = lossReceived;
87         return this;
88     }
89 
90     /**
91      * Set audio focus info sdk
92      */
setSdk(int sdk)93     public AudioFocusInfoBuilder setSdk(int sdk) {
94         mSdk = sdk;
95         return this;
96     }
97 
98     /**
99      * Set audio focus info bundle
100      */
setBundle(Bundle bundle)101     public AudioFocusInfoBuilder setBundle(Bundle bundle) {
102         mBundle = bundle;
103         return this;
104     }
105 
106     /**
107      * Set whether delayed focus request should be enabled in audio focus info
108      */
setDelayedFocusRequestEnable(boolean delayedFocusRequestEnabled)109     public AudioFocusInfoBuilder setDelayedFocusRequestEnable(boolean delayedFocusRequestEnabled) {
110         mDelayedFocusRequestEnabled = delayedFocusRequestEnabled;
111         return this;
112     }
113 
114     /**
115      * Set whether pause on duck should be enabled in audio focus info
116      */
setPausesOnDuckRequestEnable(boolean pausesOnDuckRequestEnabled)117     public AudioFocusInfoBuilder setPausesOnDuckRequestEnable(boolean pausesOnDuckRequestEnabled) {
118         mPausesOnDuckRequestEnabled = pausesOnDuckRequestEnabled;
119         return this;
120     }
121 
122 
123     /**
124      * Build audio focus info
125      */
createAudioFocusInfo()126     public AudioFocusInfo createAudioFocusInfo() {
127         AudioAttributes.Builder builder = new AudioAttributes.Builder();
128         if (AudioAttributes.isSystemUsage(mUsage)) {
129             builder.setSystemUsage(mUsage);
130         } else {
131             builder.setUsage(mUsage);
132         }
133 
134         int flags = 0;
135         if (mBundle != null) {
136             builder = builder.addBundle(mBundle);
137         }
138 
139         if (mDelayedFocusRequestEnabled) {
140             flags |= AudioManager.AUDIOFOCUS_FLAG_DELAY_OK;
141         }
142 
143         if (mPausesOnDuckRequestEnabled) {
144             flags |= AudioManager.AUDIOFOCUS_FLAG_PAUSES_ON_DUCKABLE_LOSS;
145         }
146 
147         return new AudioFocusInfo(builder.build(), mClientUid, mClientId,
148                 mPackageName, mGainRequest, mLossReceived, flags, mSdk);
149     }
150 }
151