/* * 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); } }