Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a4efdf51 authored by Pavlin Radoslavov's avatar Pavlin Radoslavov
Browse files

Catch IllegalStateException when updating Bluetooth A2DP codec info

Add an explicit check when calling getResources() inside
updateBluetoothA2dpConfigurationValues().
This fixes a potential race condition - the latter could be called
in background when processing intent update.

Bug: 35021206
Test: Manual UI testing
Change-Id: I38117c5b1e08f4b2ecfd7637bb3e34920aa0d296
parent 78115c0a
Loading
Loading
Loading
Loading
+20 −10
Original line number Diff line number Diff line
@@ -1825,6 +1825,7 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
        BluetoothCodecConfig[] codecsLocalCapabilities = null;
        BluetoothCodecConfig[] codecsSelectableCapabilities = null;
        String streaming;
        Resources resources = null;

        synchronized (mBluetoothA2dpLock) {
            if (mBluetoothA2dp != null) {
@@ -1839,6 +1840,15 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
        if (codecConfig == null)
            return;

        try {
            resources = getResources();
        } catch (IllegalStateException e) {
            return;
        }
        if (resources == null) {
            return;
        }

        // Update the Codec Type
        index = -1;
        switch (codecConfig.getCodecType()) {
@@ -1862,8 +1872,8 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
            break;
        }
        if (index >= 0) {
            summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_summaries);
            streaming = getResources().getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
            summaries = resources.getStringArray(R.array.bluetooth_a2dp_codec_summaries);
            streaming = resources.getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
            mBluetoothSelectA2dpCodec.setSummary(streaming);
        }

@@ -1889,8 +1899,8 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
            break;
        }
        if (index >= 0) {
            summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_summaries);
            streaming = getResources().getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
            summaries = resources.getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_summaries);
            streaming = resources.getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
             mBluetoothSelectA2dpSampleRate.setSummary(streaming);
        }

@@ -1911,8 +1921,8 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
            break;
        }
        if (index >= 0) {
            summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_summaries);
            streaming = getResources().getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
            summaries = resources.getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_summaries);
            streaming = resources.getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
            mBluetoothSelectA2dpBitsPerSample.setSummary(streaming);
        }

@@ -1930,8 +1940,8 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
            break;
        }
        if (index >= 0) {
            summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_summaries);
            streaming = getResources().getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
            summaries = resources.getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_summaries);
            streaming = resources.getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
             mBluetoothSelectA2dpChannelMode.setSummary(streaming);
        }

@@ -1956,8 +1966,8 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
            break;
        }
        if (index >= 0) {
            summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_summaries);
            streaming = getResources().getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
            summaries = resources.getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_summaries);
            streaming = resources.getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
            mBluetoothSelectA2dpLdacPlaybackQuality.setSummary(streaming);
        }
    }