SettingsActivity.java revision 67e0cf15d323642516f40b619f6474db333524a7
1243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org/*
2a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis *  Copyright 2014 The WebRTC Project Authors. All rights reserved.
3243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org *
4a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis *  Use of this source code is governed by a BSD-style license
5a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis *  that can be found in the LICENSE file in the root of the source
6a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis *  tree. An additional intellectual property rights grant can be found
7a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis *  in the file PATENTS.  All contributing project authors may
8a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis *  be found in the AUTHORS file in the root of the source tree.
9243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org */
10243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
11243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgpackage org.appspot.apprtc;
12243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
13243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.app.Activity;
14243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.content.SharedPreferences;
15243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.content.SharedPreferences.OnSharedPreferenceChangeListener;
16243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.os.Bundle;
17243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.preference.Preference;
18243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
195eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org/**
205eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org * Settings activity for AppRTC.
215eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org */
22243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgpublic class SettingsActivity extends Activity
23243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    implements OnSharedPreferenceChangeListener{
24243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  private SettingsFragment settingsFragment;
25e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org  private String keyprefVideoCall;
26243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  private String keyprefResolution;
275f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org  private String keyprefFps;
2867e0cf15d323642516f40b619f6474db333524a7Magnus Jedvert  private String keyprefCaptureQualitySlider;
29e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org  private String keyprefStartVideoBitrateType;
30e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org  private String keyprefStartVideoBitrateValue;
3144ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org  private String keyPrefVideoCodec;
32dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org  private String keyprefHwCodec;
33e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org
34e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org  private String keyprefStartAudioBitrateType;
35e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org  private String keyprefStartAudioBitrateValue;
36e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org  private String keyPrefAudioCodec;
378a19f3dc62f4817404c322280d8f035de1adb56aNiklas Enbom  private String keyprefNoAudioProcessing;
38e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org
392176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org  private String keyprefCpuUsageDetection;
40a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org  private String keyPrefRoomServerUrl;
41bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org  private String keyPrefDisplayHud;
42243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
43243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  @Override
44243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  protected void onCreate(Bundle savedInstanceState) {
45243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    super.onCreate(savedInstanceState);
46e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    keyprefVideoCall = getString(R.string.pref_videocall_key);
47243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    keyprefResolution = getString(R.string.pref_resolution_key);
485f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org    keyprefFps = getString(R.string.pref_fps_key);
4967e0cf15d323642516f40b619f6474db333524a7Magnus Jedvert    keyprefCaptureQualitySlider = getString(R.string.pref_capturequalityslider_key);
50e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    keyprefStartVideoBitrateType = getString(R.string.pref_startvideobitrate_key);
51e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    keyprefStartVideoBitrateValue = getString(R.string.pref_startvideobitratevalue_key);
5244ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org    keyPrefVideoCodec = getString(R.string.pref_videocodec_key);
53dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    keyprefHwCodec = getString(R.string.pref_hwcodec_key);
54e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org
55e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    keyprefStartAudioBitrateType = getString(R.string.pref_startaudiobitrate_key);
56e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    keyprefStartAudioBitrateValue = getString(R.string.pref_startaudiobitratevalue_key);
57e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    keyPrefAudioCodec = getString(R.string.pref_audiocodec_key);
588a19f3dc62f4817404c322280d8f035de1adb56aNiklas Enbom    keyprefNoAudioProcessing = getString(R.string.pref_noaudioprocessing_key);
59e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org
602176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org    keyprefCpuUsageDetection = getString(R.string.pref_cpu_usage_detection_key);
61a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org    keyPrefRoomServerUrl = getString(R.string.pref_room_server_url_key);
62bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org    keyPrefDisplayHud = getString(R.string.pref_displayhud_key);
63243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
64243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    // Display the fragment as the main content.
65243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    settingsFragment = new SettingsFragment();
66243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    getFragmentManager().beginTransaction()
67243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org        .replace(android.R.id.content, settingsFragment)
68243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org        .commit();
69243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  }
70243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
71243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  @Override
72243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  protected void onResume() {
73243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    super.onResume();
74243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    // Set summary to be the user-description for the selected value
75243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    SharedPreferences sharedPreferences =
76243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org        settingsFragment.getPreferenceScreen().getSharedPreferences();
77243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    sharedPreferences.registerOnSharedPreferenceChangeListener(this);
78e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    updateSummaryB(sharedPreferences, keyprefVideoCall);
79243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    updateSummary(sharedPreferences, keyprefResolution);
805f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org    updateSummary(sharedPreferences, keyprefFps);
8167e0cf15d323642516f40b619f6474db333524a7Magnus Jedvert    updateSummaryB(sharedPreferences, keyprefCaptureQualitySlider);
82e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    updateSummary(sharedPreferences, keyprefStartVideoBitrateType);
83e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    updateSummaryBitrate(sharedPreferences, keyprefStartVideoBitrateValue);
84e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    setVideoBitrateEnable(sharedPreferences);
8544ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org    updateSummary(sharedPreferences, keyPrefVideoCodec);
86dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    updateSummaryB(sharedPreferences, keyprefHwCodec);
87e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org
88e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    updateSummary(sharedPreferences, keyprefStartAudioBitrateType);
89e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    updateSummaryBitrate(sharedPreferences, keyprefStartAudioBitrateValue);
90e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    setAudioBitrateEnable(sharedPreferences);
91e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    updateSummary(sharedPreferences, keyPrefAudioCodec);
928a19f3dc62f4817404c322280d8f035de1adb56aNiklas Enbom    updateSummaryB(sharedPreferences, keyprefNoAudioProcessing);
93e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org
942176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org    updateSummaryB(sharedPreferences, keyprefCpuUsageDetection);
9544ae4c8b07cdf06d20d5042326b90ec9b466b664glaznev@webrtc.org    updateSummary(sharedPreferences, keyPrefRoomServerUrl);
96bc40324d9c673f5ba4df78590d928be3b9c62418glaznev@webrtc.org    updateSummaryB(sharedPreferences, keyPrefDisplayHud);
97243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  }
98243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
99243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  @Override
100243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  protected void onPause() {
101243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    super.onPause();
102243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    SharedPreferences sharedPreferences =
103243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org        settingsFragment.getPreferenceScreen().getSharedPreferences();
104243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
105243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  }
106243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
107243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  @Override
108243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
109243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org      String key) {
1105eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org    if (key.equals(keyprefResolution)
1115eb71eb4f470bac0cbae0e1be4db8c83bc16fcd9jiayl@webrtc.org        || key.equals(keyprefFps)
112e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org        || key.equals(keyprefStartVideoBitrateType)
113e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org        || key.equals(keyPrefVideoCodec)
114e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org        || key.equals(keyprefStartAudioBitrateType)
115e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org        || key.equals(keyPrefAudioCodec)
116e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org        || key.equals(keyPrefRoomServerUrl)) {
117243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org      updateSummary(sharedPreferences, key);
118e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    } else if (key.equals(keyprefStartVideoBitrateValue)
119e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org        || key.equals(keyprefStartAudioBitrateValue)) {
120dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org      updateSummaryBitrate(sharedPreferences, key);
121e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    } else if (key.equals(keyprefVideoCall)
12267e0cf15d323642516f40b619f6474db333524a7Magnus Jedvert        || key.equals(keyprefCaptureQualitySlider)
123e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org        || key.equals(keyprefHwCodec)
1248a19f3dc62f4817404c322280d8f035de1adb56aNiklas Enbom        || key.equals(keyprefNoAudioProcessing)
125e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org        || key.equals(keyprefCpuUsageDetection)
126e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org        || key.equals(keyPrefDisplayHud)) {
1272176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org      updateSummaryB(sharedPreferences, key);
128243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    }
129e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    if (key.equals(keyprefStartVideoBitrateType)) {
130e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org      setVideoBitrateEnable(sharedPreferences);
131e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    }
132e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    if (key.equals(keyprefStartAudioBitrateType)) {
133e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org      setAudioBitrateEnable(sharedPreferences);
134dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    }
135243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  }
136243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
137243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  private void updateSummary(SharedPreferences sharedPreferences, String key) {
138243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    Preference updatedPref = settingsFragment.findPreference(key);
139243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    // Set summary to be the user-description for the selected value
140243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    updatedPref.setSummary(sharedPreferences.getString(key, ""));
141243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  }
142243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
143dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org  private void updateSummaryBitrate(
144dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org      SharedPreferences sharedPreferences, String key) {
145dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    Preference updatedPref = settingsFragment.findPreference(key);
146dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    updatedPref.setSummary(sharedPreferences.getString(key, "") + " kbps");
147dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org  }
148dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org
1492176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org  private void updateSummaryB(SharedPreferences sharedPreferences, String key) {
1502176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org    Preference updatedPref = settingsFragment.findPreference(key);
1512176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org    updatedPref.setSummary(sharedPreferences.getBoolean(key, true)
152dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org        ? getString(R.string.pref_value_enabled)
153dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org        : getString(R.string.pref_value_disabled));
154dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org  }
155dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org
156e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org  private void setVideoBitrateEnable(SharedPreferences sharedPreferences) {
157e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    Preference bitratePreferenceValue =
158e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org        settingsFragment.findPreference(keyprefStartVideoBitrateValue);
159e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    String bitrateTypeDefault = getString(R.string.pref_startvideobitrate_default);
160e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    String bitrateType = sharedPreferences.getString(
161e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org        keyprefStartVideoBitrateType, bitrateTypeDefault);
162e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    if (bitrateType.equals(bitrateTypeDefault)) {
163e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org      bitratePreferenceValue.setEnabled(false);
164e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    } else {
165e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org      bitratePreferenceValue.setEnabled(true);
166e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    }
167e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org  }
168e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org
169e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org  private void setAudioBitrateEnable(SharedPreferences sharedPreferences) {
170dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    Preference bitratePreferenceValue =
171e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org        settingsFragment.findPreference(keyprefStartAudioBitrateValue);
172e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org    String bitrateTypeDefault = getString(R.string.pref_startaudiobitrate_default);
173dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    String bitrateType = sharedPreferences.getString(
174e3fccd4268d8e46c737f27a431c1dd263f312395glaznev@webrtc.org        keyprefStartAudioBitrateType, bitrateTypeDefault);
175dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    if (bitrateType.equals(bitrateTypeDefault)) {
176dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org      bitratePreferenceValue.setEnabled(false);
177dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    } else {
178dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org      bitratePreferenceValue.setEnabled(true);
179dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    }
1802176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org  }
181243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org}
182