diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index ba8f7e60e268a..7408987e465e9 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -5987,6 +5987,20 @@ public class AudioManager { } } + /** + * Set whether or not there is an active RTT call. + * This method should be called by Telecom service. + * @hide + * TODO: make this a @SystemApi + */ + public static void setRttEnabled(boolean rttEnabled) { + try { + getService().setRttEnabled(rttEnabled); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + //--------------------------------------------------------- // Inner classes //-------------------- diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl index 5f320cd052c9f..453a5d8a5b7ec 100644 --- a/media/java/android/media/IAudioService.aidl +++ b/media/java/android/media/IAudioService.aidl @@ -292,6 +292,8 @@ interface IAudioService { oneway void unregisterStrategyPreferredDeviceDispatcher( IStrategyPreferredDeviceDispatcher dispatcher); + oneway void setRttEnabled(in boolean rttEnabled); + // WARNING: read warning at top of file, new methods that need to be used by native // code via IAudioManager.h need to be added to the top section. } diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index 6ae0ad7b105fa..3fa6081f44803 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -635,6 +635,9 @@ public class AudioService extends IAudioService.Stub } }; + @GuardedBy("mSettingsLock") + private boolean mRttEnabled = false; + /////////////////////////////////////////////////////////////////////////// // Construction /////////////////////////////////////////////////////////////////////////// @@ -1054,7 +1057,7 @@ public class AudioService extends IAudioService.Stub sendEncodedSurroundMode(mContentResolver, "onAudioServerDied"); sendEnabledSurroundFormats(mContentResolver, true); updateAssistantUId(true); - updateRttEanbled(mContentResolver); + AudioSystem.setRttEnabled(mRttEnabled); } synchronized (mAccessibilityServiceUidsLock) { AudioSystem.setA11yServicesUids(mAccessibilityServiceUids); @@ -1599,12 +1602,6 @@ public class AudioService extends IAudioService.Stub } } - private void updateRttEanbled(ContentResolver cr) { - final boolean rttEnabled = Settings.Secure.getIntForUser(cr, - Settings.Secure.RTT_CALLING_MODE, 0, UserHandle.USER_CURRENT) != 0; - AudioSystem.setRttEnabled(rttEnabled); - } - private void readPersistedSettings() { final ContentResolver cr = mContentResolver; @@ -1649,7 +1646,7 @@ public class AudioService extends IAudioService.Stub sendEncodedSurroundMode(cr, "readPersistedSettings"); sendEnabledSurroundFormats(cr, true); updateAssistantUId(true); - updateRttEanbled(cr); + AudioSystem.setRttEnabled(mRttEnabled); } mMuteAffectedStreams = System.getIntForUser(cr, @@ -3770,6 +3767,27 @@ public class AudioService extends IAudioService.Stub return mIsCallScreeningModeSupported; } + /** @see AudioManager#setRttEnabled() */ + @Override + public void setRttEnabled(boolean rttEnabled) { + if (mContext.checkCallingOrSelfPermission( + android.Manifest.permission.MODIFY_PHONE_STATE) + != PackageManager.PERMISSION_GRANTED) { + Log.w(TAG, "MODIFY_PHONE_STATE Permission Denial: setRttEnabled from pid=" + + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()); + return; + } + synchronized (mSettingsLock) { + mRttEnabled = rttEnabled; + final long identity = Binder.clearCallingIdentity(); + try { + AudioSystem.setRttEnabled(rttEnabled); + } finally { + Binder.restoreCallingIdentity(identity); + } + } + } + //========================================================================================== // Sound Effects //========================================================================================== @@ -5984,8 +6002,6 @@ public class AudioService extends IAudioService.Stub mContentResolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.VOICE_INTERACTION_SERVICE), false, this); - mContentResolver.registerContentObserver(Settings.Secure.getUriFor( - Settings.Secure.RTT_CALLING_MODE), false, this); } @Override @@ -6009,7 +6025,6 @@ public class AudioService extends IAudioService.Stub updateEncodedSurroundOutput(); sendEnabledSurroundFormats(mContentResolver, mSurroundModeChanged); updateAssistantUId(false); - updateRttEanbled(mContentResolver); } }