From: Raff Tsai Date: Wed, 29 May 2019 22:39:39 +0000 (+0800) Subject: Fix IllegalArgumentException in AudioHelper X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=1a2b34b625c5e40056a80a3020e7e5f269289d7f;p=android-x86%2Fpackages-apps-Settings.git Fix IllegalArgumentException in AudioHelper Audio streams for phone calls in BT device (STREAM_VOICE_CALL) is not supported in AudioManager.getStreamMinVolume(), fallback to use STREAM_VOICE_CALL Fixes: 133812547 Test: make RunSettingsRoboTests Change-Id: I8e330f60bae2a7cf9cd0cf7288076b8320ccc504 --- diff --git a/src/com/android/settings/notification/AudioHelper.java b/src/com/android/settings/notification/AudioHelper.java index d178113906..01945fd5f6 100644 --- a/src/com/android/settings/notification/AudioHelper.java +++ b/src/com/android/settings/notification/AudioHelper.java @@ -22,6 +22,7 @@ import android.media.AudioManager; import android.media.AudioSystem; import android.os.UserHandle; import android.os.UserManager; +import android.util.Log; import com.android.settings.Utils; @@ -30,6 +31,7 @@ import com.android.settings.Utils; */ public class AudioHelper { + private static final String TAG = "AudioHelper"; private Context mContext; private AudioManager mAudioManager; @@ -76,6 +78,15 @@ public class AudioHelper { } public int getMinVolume(int stream) { - return mAudioManager.getStreamMinVolume(stream); + int minVolume; + try { + minVolume = mAudioManager.getStreamMinVolume(stream); + } catch (IllegalArgumentException e) { + Log.w(TAG, "Invalid stream type " + stream); + // Fallback to STREAM_VOICE_CALL because CallVolumePreferenceController.java default + // return STREAM_VOICE_CALL in getAudioStream + minVolume = mAudioManager.getStreamMinVolume(AudioManager.STREAM_VOICE_CALL); + } + return minVolume; } } diff --git a/tests/robotests/src/com/android/settings/notification/AudioHelperTest.java b/tests/robotests/src/com/android/settings/notification/AudioHelperTest.java new file mode 100644 index 0000000000..79d0198ce4 --- /dev/null +++ b/tests/robotests/src/com/android/settings/notification/AudioHelperTest.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.settings.notification; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.Context; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; + +@RunWith(RobolectricTestRunner.class) +public class AudioHelperTest { + + private static final int START = -10; + private static final int END = 10; + private static final int DEFAULT = -100; + + private Context mContext; + private AudioHelper mAudioHelper; + + @Before + public void setUp() { + mContext = RuntimeEnvironment.application; + mAudioHelper = new AudioHelper(mContext); + } + + @Test + public void getMaxVolume_anyStreamType_getValue() { + int volume = DEFAULT; + + for (int i = START; i < END; i++) { + volume = mAudioHelper.getMaxVolume(i); + assertThat(volume).isNotEqualTo(DEFAULT); + } + } + + @Test + public void getMinVolume_anyStreamType_getValue() { + int volume = DEFAULT; + + for (int i = START; i < END; i++) { + volume = mAudioHelper.getMinVolume(i); + assertThat(volume).isNotEqualTo(DEFAULT); + } + } +}