| /* | |
| * Copyright 2014 The WebRTC Project Authors. All rights reserved. | |
| * | |
| * Use of this source code is governed by a BSD-style license | |
| * that can be found in the LICENSE file in the root of the source | |
| * tree. An additional intellectual property rights grant can be found | |
| * in the file PATENTS. All contributing project authors may | |
| * be found in the AUTHORS file in the root of the source tree. | |
| */ | |
| package org.appspot.apprtc; | |
| import android.app.Activity; | |
| import android.content.SharedPreferences; | |
| import android.content.SharedPreferences.OnSharedPreferenceChangeListener; | |
| import android.os.Bundle; | |
| import android.preference.ListPreference; | |
| import android.preference.Preference; | |
| import org.webrtc.Camera2Enumerator; | |
| import org.webrtc.audio.JavaAudioDeviceModule; | |
| /** | |
| * Settings activity for AppRTC. | |
| */ | |
| public class SettingsActivity extends Activity implements OnSharedPreferenceChangeListener { | |
| private SettingsFragment settingsFragment; | |
| private String keyprefVideoCall; | |
| private String keyprefScreencapture; | |
| private String keyprefCamera2; | |
| private String keyprefResolution; | |
| private String keyprefFps; | |
| private String keyprefCaptureQualitySlider; | |
| private String keyprefMaxVideoBitrateType; | |
| private String keyprefMaxVideoBitrateValue; | |
| private String keyPrefVideoCodec; | |
| private String keyprefHwCodec; | |
| private String keyprefCaptureToTexture; | |
| private String keyprefFlexfec; | |
| private String keyprefStartAudioBitrateType; | |
| private String keyprefStartAudioBitrateValue; | |
| private String keyPrefAudioCodec; | |
| private String keyprefNoAudioProcessing; | |
| private String keyprefAecDump; | |
| private String keyprefEnableSaveInputAudioToFile; | |
| private String keyprefOpenSLES; | |
| private String keyprefDisableBuiltInAEC; | |
| private String keyprefDisableBuiltInAGC; | |
| private String keyprefDisableBuiltInNS; | |
| private String keyprefDisableWebRtcAGCAndHPF; | |
| private String keyprefSpeakerphone; | |
| private String keyPrefRoomServerUrl; | |
| private String keyPrefDisplayHud; | |
| private String keyPrefTracing; | |
| private String keyprefEnabledRtcEventLog; | |
| private String keyprefEnableDataChannel; | |
| private String keyprefOrdered; | |
| private String keyprefMaxRetransmitTimeMs; | |
| private String keyprefMaxRetransmits; | |
| private String keyprefDataProtocol; | |
| private String keyprefNegotiated; | |
| private String keyprefDataId; | |
| @Override | |
| protected void onCreate(Bundle savedInstanceState) { | |
| super.onCreate(savedInstanceState); | |
| keyprefVideoCall = getString(R.string.pref_videocall_key); | |
| keyprefScreencapture = getString(R.string.pref_screencapture_key); | |
| keyprefCamera2 = getString(R.string.pref_camera2_key); | |
| keyprefResolution = getString(R.string.pref_resolution_key); | |
| keyprefFps = getString(R.string.pref_fps_key); | |
| keyprefCaptureQualitySlider = getString(R.string.pref_capturequalityslider_key); | |
| keyprefMaxVideoBitrateType = getString(R.string.pref_maxvideobitrate_key); | |
| keyprefMaxVideoBitrateValue = getString(R.string.pref_maxvideobitratevalue_key); | |
| keyPrefVideoCodec = getString(R.string.pref_videocodec_key); | |
| keyprefHwCodec = getString(R.string.pref_hwcodec_key); | |
| keyprefCaptureToTexture = getString(R.string.pref_capturetotexture_key); | |
| keyprefFlexfec = getString(R.string.pref_flexfec_key); | |
| keyprefStartAudioBitrateType = getString(R.string.pref_startaudiobitrate_key); | |
| keyprefStartAudioBitrateValue = getString(R.string.pref_startaudiobitratevalue_key); | |
| keyPrefAudioCodec = getString(R.string.pref_audiocodec_key); | |
| keyprefNoAudioProcessing = getString(R.string.pref_noaudioprocessing_key); | |
| keyprefAecDump = getString(R.string.pref_aecdump_key); | |
| keyprefEnableSaveInputAudioToFile = | |
| getString(R.string.pref_enable_save_input_audio_to_file_key); | |
| keyprefOpenSLES = getString(R.string.pref_opensles_key); | |
| keyprefDisableBuiltInAEC = getString(R.string.pref_disable_built_in_aec_key); | |
| keyprefDisableBuiltInAGC = getString(R.string.pref_disable_built_in_agc_key); | |
| keyprefDisableBuiltInNS = getString(R.string.pref_disable_built_in_ns_key); | |
| keyprefDisableWebRtcAGCAndHPF = getString(R.string.pref_disable_webrtc_agc_and_hpf_key); | |
| keyprefSpeakerphone = getString(R.string.pref_speakerphone_key); | |
| keyprefEnableDataChannel = getString(R.string.pref_enable_datachannel_key); | |
| keyprefOrdered = getString(R.string.pref_ordered_key); | |
| keyprefMaxRetransmitTimeMs = getString(R.string.pref_max_retransmit_time_ms_key); | |
| keyprefMaxRetransmits = getString(R.string.pref_max_retransmits_key); | |
| keyprefDataProtocol = getString(R.string.pref_data_protocol_key); | |
| keyprefNegotiated = getString(R.string.pref_negotiated_key); | |
| keyprefDataId = getString(R.string.pref_data_id_key); | |
| keyPrefRoomServerUrl = getString(R.string.pref_room_server_url_key); | |
| keyPrefDisplayHud = getString(R.string.pref_displayhud_key); | |
| keyPrefTracing = getString(R.string.pref_tracing_key); | |
| keyprefEnabledRtcEventLog = getString(R.string.pref_enable_rtceventlog_key); | |
| // Display the fragment as the main content. | |
| settingsFragment = new SettingsFragment(); | |
| getFragmentManager() | |
| .beginTransaction() | |
| .replace(android.R.id.content, settingsFragment) | |
| .commit(); | |
| } | |
| @Override | |
| protected void onResume() { | |
| super.onResume(); | |
| // Set summary to be the user-description for the selected value | |
| SharedPreferences sharedPreferences = | |
| settingsFragment.getPreferenceScreen().getSharedPreferences(); | |
| sharedPreferences.registerOnSharedPreferenceChangeListener(this); | |
| updateSummaryB(sharedPreferences, keyprefVideoCall); | |
| updateSummaryB(sharedPreferences, keyprefScreencapture); | |
| updateSummaryB(sharedPreferences, keyprefCamera2); | |
| updateSummary(sharedPreferences, keyprefResolution); | |
| updateSummary(sharedPreferences, keyprefFps); | |
| updateSummaryB(sharedPreferences, keyprefCaptureQualitySlider); | |
| updateSummary(sharedPreferences, keyprefMaxVideoBitrateType); | |
| updateSummaryBitrate(sharedPreferences, keyprefMaxVideoBitrateValue); | |
| setVideoBitrateEnable(sharedPreferences); | |
| updateSummary(sharedPreferences, keyPrefVideoCodec); | |
| updateSummaryB(sharedPreferences, keyprefHwCodec); | |
| updateSummaryB(sharedPreferences, keyprefCaptureToTexture); | |
| updateSummaryB(sharedPreferences, keyprefFlexfec); | |
| updateSummary(sharedPreferences, keyprefStartAudioBitrateType); | |
| updateSummaryBitrate(sharedPreferences, keyprefStartAudioBitrateValue); | |
| setAudioBitrateEnable(sharedPreferences); | |
| updateSummary(sharedPreferences, keyPrefAudioCodec); | |
| updateSummaryB(sharedPreferences, keyprefNoAudioProcessing); | |
| updateSummaryB(sharedPreferences, keyprefAecDump); | |
| updateSummaryB(sharedPreferences, keyprefEnableSaveInputAudioToFile); | |
| updateSummaryB(sharedPreferences, keyprefOpenSLES); | |
| updateSummaryB(sharedPreferences, keyprefDisableBuiltInAEC); | |
| updateSummaryB(sharedPreferences, keyprefDisableBuiltInAGC); | |
| updateSummaryB(sharedPreferences, keyprefDisableBuiltInNS); | |
| updateSummaryB(sharedPreferences, keyprefDisableWebRtcAGCAndHPF); | |
| updateSummaryList(sharedPreferences, keyprefSpeakerphone); | |
| updateSummaryB(sharedPreferences, keyprefEnableDataChannel); | |
| updateSummaryB(sharedPreferences, keyprefOrdered); | |
| updateSummary(sharedPreferences, keyprefMaxRetransmitTimeMs); | |
| updateSummary(sharedPreferences, keyprefMaxRetransmits); | |
| updateSummary(sharedPreferences, keyprefDataProtocol); | |
| updateSummaryB(sharedPreferences, keyprefNegotiated); | |
| updateSummary(sharedPreferences, keyprefDataId); | |
| setDataChannelEnable(sharedPreferences); | |
| updateSummary(sharedPreferences, keyPrefRoomServerUrl); | |
| updateSummaryB(sharedPreferences, keyPrefDisplayHud); | |
| updateSummaryB(sharedPreferences, keyPrefTracing); | |
| updateSummaryB(sharedPreferences, keyprefEnabledRtcEventLog); | |
| if (!Camera2Enumerator.isSupported(this)) { | |
| Preference camera2Preference = settingsFragment.findPreference(keyprefCamera2); | |
| camera2Preference.setSummary(getString(R.string.pref_camera2_not_supported)); | |
| camera2Preference.setEnabled(false); | |
| } | |
| if (!JavaAudioDeviceModule.isBuiltInAcousticEchoCancelerSupported()) { | |
| Preference disableBuiltInAECPreference = | |
| settingsFragment.findPreference(keyprefDisableBuiltInAEC); | |
| disableBuiltInAECPreference.setSummary(getString(R.string.pref_built_in_aec_not_available)); | |
| disableBuiltInAECPreference.setEnabled(false); | |
| } | |
| Preference disableBuiltInAGCPreference = | |
| settingsFragment.findPreference(keyprefDisableBuiltInAGC); | |
| disableBuiltInAGCPreference.setSummary(getString(R.string.pref_built_in_agc_not_available)); | |
| disableBuiltInAGCPreference.setEnabled(false); | |
| if (!JavaAudioDeviceModule.isBuiltInNoiseSuppressorSupported()) { | |
| Preference disableBuiltInNSPreference = | |
| settingsFragment.findPreference(keyprefDisableBuiltInNS); | |
| disableBuiltInNSPreference.setSummary(getString(R.string.pref_built_in_ns_not_available)); | |
| disableBuiltInNSPreference.setEnabled(false); | |
| } | |
| } | |
| @Override | |
| protected void onPause() { | |
| super.onPause(); | |
| SharedPreferences sharedPreferences = | |
| settingsFragment.getPreferenceScreen().getSharedPreferences(); | |
| sharedPreferences.unregisterOnSharedPreferenceChangeListener(this); | |
| } | |
| @Override | |
| public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { | |
| // clang-format off | |
| if (key.equals(keyprefResolution) | |
| || key.equals(keyprefFps) | |
| || key.equals(keyprefMaxVideoBitrateType) | |
| || key.equals(keyPrefVideoCodec) | |
| || key.equals(keyprefStartAudioBitrateType) | |
| || key.equals(keyPrefAudioCodec) | |
| || key.equals(keyPrefRoomServerUrl) | |
| || key.equals(keyprefMaxRetransmitTimeMs) | |
| || key.equals(keyprefMaxRetransmits) | |
| || key.equals(keyprefDataProtocol) | |
| || key.equals(keyprefDataId)) { | |
| updateSummary(sharedPreferences, key); | |
| } else if (key.equals(keyprefMaxVideoBitrateValue) | |
| || key.equals(keyprefStartAudioBitrateValue)) { | |
| updateSummaryBitrate(sharedPreferences, key); | |
| } else if (key.equals(keyprefVideoCall) | |
| || key.equals(keyprefScreencapture) | |
| || key.equals(keyprefCamera2) | |
| || key.equals(keyPrefTracing) | |
| || key.equals(keyprefCaptureQualitySlider) | |
| || key.equals(keyprefHwCodec) | |
| || key.equals(keyprefCaptureToTexture) | |
| || key.equals(keyprefFlexfec) | |
| || key.equals(keyprefNoAudioProcessing) | |
| || key.equals(keyprefAecDump) | |
| || key.equals(keyprefEnableSaveInputAudioToFile) | |
| || key.equals(keyprefOpenSLES) | |
| || key.equals(keyprefDisableBuiltInAEC) | |
| || key.equals(keyprefDisableBuiltInAGC) | |
| || key.equals(keyprefDisableBuiltInNS) | |
| || key.equals(keyprefDisableWebRtcAGCAndHPF) | |
| || key.equals(keyPrefDisplayHud) | |
| || key.equals(keyprefEnableDataChannel) | |
| || key.equals(keyprefOrdered) | |
| || key.equals(keyprefNegotiated) | |
| || key.equals(keyprefEnabledRtcEventLog)) { | |
| updateSummaryB(sharedPreferences, key); | |
| } else if (key.equals(keyprefSpeakerphone)) { | |
| updateSummaryList(sharedPreferences, key); | |
| } | |
| // clang-format on | |
| if (key.equals(keyprefMaxVideoBitrateType)) { | |
| setVideoBitrateEnable(sharedPreferences); | |
| } | |
| if (key.equals(keyprefStartAudioBitrateType)) { | |
| setAudioBitrateEnable(sharedPreferences); | |
| } | |
| if (key.equals(keyprefEnableDataChannel)) { | |
| setDataChannelEnable(sharedPreferences); | |
| } | |
| } | |
| private void updateSummary(SharedPreferences sharedPreferences, String key) { | |
| Preference updatedPref = settingsFragment.findPreference(key); | |
| // Set summary to be the user-description for the selected value | |
| updatedPref.setSummary(sharedPreferences.getString(key, "")); | |
| } | |
| private void updateSummaryBitrate(SharedPreferences sharedPreferences, String key) { | |
| Preference updatedPref = settingsFragment.findPreference(key); | |
| updatedPref.setSummary(sharedPreferences.getString(key, "") + " kbps"); | |
| } | |
| private void updateSummaryB(SharedPreferences sharedPreferences, String key) { | |
| Preference updatedPref = settingsFragment.findPreference(key); | |
| updatedPref.setSummary(sharedPreferences.getBoolean(key, true) | |
| ? getString(R.string.pref_value_enabled) | |
| : getString(R.string.pref_value_disabled)); | |
| } | |
| private void updateSummaryList(SharedPreferences sharedPreferences, String key) { | |
| ListPreference updatedPref = (ListPreference) settingsFragment.findPreference(key); | |
| updatedPref.setSummary(updatedPref.getEntry()); | |
| } | |
| private void setVideoBitrateEnable(SharedPreferences sharedPreferences) { | |
| Preference bitratePreferenceValue = | |
| settingsFragment.findPreference(keyprefMaxVideoBitrateValue); | |
| String bitrateTypeDefault = getString(R.string.pref_maxvideobitrate_default); | |
| String bitrateType = | |
| sharedPreferences.getString(keyprefMaxVideoBitrateType, bitrateTypeDefault); | |
| if (bitrateType.equals(bitrateTypeDefault)) { | |
| bitratePreferenceValue.setEnabled(false); | |
| } else { | |
| bitratePreferenceValue.setEnabled(true); | |
| } | |
| } | |
| private void setAudioBitrateEnable(SharedPreferences sharedPreferences) { | |
| Preference bitratePreferenceValue = | |
| settingsFragment.findPreference(keyprefStartAudioBitrateValue); | |
| String bitrateTypeDefault = getString(R.string.pref_startaudiobitrate_default); | |
| String bitrateType = | |
| sharedPreferences.getString(keyprefStartAudioBitrateType, bitrateTypeDefault); | |
| if (bitrateType.equals(bitrateTypeDefault)) { | |
| bitratePreferenceValue.setEnabled(false); | |
| } else { | |
| bitratePreferenceValue.setEnabled(true); | |
| } | |
| } | |
| private void setDataChannelEnable(SharedPreferences sharedPreferences) { | |
| boolean enabled = sharedPreferences.getBoolean(keyprefEnableDataChannel, true); | |
| settingsFragment.findPreference(keyprefOrdered).setEnabled(enabled); | |
| settingsFragment.findPreference(keyprefMaxRetransmitTimeMs).setEnabled(enabled); | |
| settingsFragment.findPreference(keyprefMaxRetransmits).setEnabled(enabled); | |
| settingsFragment.findPreference(keyprefDataProtocol).setEnabled(enabled); | |
| settingsFragment.findPreference(keyprefNegotiated).setEnabled(enabled); | |
| settingsFragment.findPreference(keyprefDataId).setEnabled(enabled); | |
| } | |
| } |