SettingsActivity.java revision a6f7ba6848302d142ba769615d12bbf77a13e6e6
1243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org/*
2243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org * libjingle
3243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org * Copyright 2014, Google Inc.
4243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org *
5243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org * Redistribution and use in source and binary forms, with or without
6243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org * modification, are permitted provided that the following conditions are met:
7243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org *
8243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org *  1. Redistributions of source code must retain the above copyright notice,
9243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org *     this list of conditions and the following disclaimer.
10243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org *  2. Redistributions in binary form must reproduce the above copyright notice,
11243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org *     this list of conditions and the following disclaimer in the documentation
12243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org *     and/or other materials provided with the distribution.
13243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org *  3. The name of the author may not be used to endorse or promote products
14243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org *     derived from this software without specific prior written permission.
15243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org *
16243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org */
27243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
28243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgpackage org.appspot.apprtc;
29243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
30243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.app.Activity;
31243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.content.SharedPreferences;
32243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.content.SharedPreferences.OnSharedPreferenceChangeListener;
33243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.os.Bundle;
34243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgimport android.preference.Preference;
35243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
36243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.orgpublic class SettingsActivity extends Activity
37243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    implements OnSharedPreferenceChangeListener{
38243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  private SettingsFragment settingsFragment;
39243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  private String keyprefResolution;
405f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org  private String keyprefFps;
41dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org  private String keyprefStartBitrateType;
42dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org  private String keyprefStartBitrateValue;
43dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org  private String keyprefHwCodec;
442176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org  private String keyprefCpuUsageDetection;
45369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org  private String keyprefSignaling;
46a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org  private String keyPrefRoomServerUrl;
47243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
48243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  @Override
49243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  protected void onCreate(Bundle savedInstanceState) {
50243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    super.onCreate(savedInstanceState);
51243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    keyprefResolution = getString(R.string.pref_resolution_key);
525f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org    keyprefFps = getString(R.string.pref_fps_key);
53dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    keyprefStartBitrateType = getString(R.string.pref_startbitrate_key);
54dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    keyprefStartBitrateValue = getString(R.string.pref_startbitratevalue_key);
55dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    keyprefHwCodec = getString(R.string.pref_hwcodec_key);
562176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org    keyprefCpuUsageDetection = getString(R.string.pref_cpu_usage_detection_key);
57a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org    keyPrefRoomServerUrl = getString(R.string.pref_room_server_url_key);
58243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
59243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    // Display the fragment as the main content.
60243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    settingsFragment = new SettingsFragment();
61243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    getFragmentManager().beginTransaction()
62243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org        .replace(android.R.id.content, settingsFragment)
63243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org        .commit();
64243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  }
65243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
66243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  @Override
67243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  protected void onResume() {
68243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    super.onResume();
69243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    // Set summary to be the user-description for the selected value
70243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    SharedPreferences sharedPreferences =
71243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org        settingsFragment.getPreferenceScreen().getSharedPreferences();
72243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    sharedPreferences.registerOnSharedPreferenceChangeListener(this);
73243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    updateSummary(sharedPreferences, keyprefResolution);
745f38c8d1b8e842652e55410333870acfc5395ea6glaznev@webrtc.org    updateSummary(sharedPreferences, keyprefFps);
75dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    updateSummary(sharedPreferences, keyprefStartBitrateType);
76a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org    updateSummary(sharedPreferences, keyPrefRoomServerUrl);
77dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    updateSummaryBitrate(sharedPreferences, keyprefStartBitrateValue);
78dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    setBitrateEnable(sharedPreferences);
79dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    updateSummaryB(sharedPreferences, keyprefHwCodec);
802176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org    updateSummaryB(sharedPreferences, keyprefCpuUsageDetection);
81369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org    updateSummaryB(sharedPreferences, keyprefSignaling);
82243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  }
83243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
84243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  @Override
85243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  protected void onPause() {
86243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    super.onPause();
87243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    SharedPreferences sharedPreferences =
88243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org        settingsFragment.getPreferenceScreen().getSharedPreferences();
89243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
90243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  }
91243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
92243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  @Override
93243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
94243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org      String key) {
95a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org    if (key.equals(keyprefResolution) ||
96a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org        key.equals(keyprefFps) ||
97a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org        key.equals(keyprefStartBitrateType) ||
98a6f7ba6848302d142ba769615d12bbf77a13e6e6jiayl@webrtc.org        key.equals(keyPrefRoomServerUrl)) {
99243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org      updateSummary(sharedPreferences, key);
100dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    } else if (key.equals(keyprefStartBitrateValue)) {
101dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org      updateSummaryBitrate(sharedPreferences, key);
102dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    } else if (key.equals(keyprefCpuUsageDetection) ||
103369746bcb8daa10dc2686b6317b51e4442a9b9feglaznev@webrtc.org        key.equals(keyprefHwCodec) || key.equals(keyprefSignaling)) {
1042176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org      updateSummaryB(sharedPreferences, key);
105243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    }
106dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    if (key.equals(keyprefStartBitrateType)) {
107dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org      setBitrateEnable(sharedPreferences);
108dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    }
109243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  }
110243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
111243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  private void updateSummary(SharedPreferences sharedPreferences, String key) {
112243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    Preference updatedPref = settingsFragment.findPreference(key);
113243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    // Set summary to be the user-description for the selected value
114243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org    updatedPref.setSummary(sharedPreferences.getString(key, ""));
115243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org  }
116243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org
117dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org  private void updateSummaryBitrate(
118dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org      SharedPreferences sharedPreferences, String key) {
119dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    Preference updatedPref = settingsFragment.findPreference(key);
120dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    updatedPref.setSummary(sharedPreferences.getString(key, "") + " kbps");
121dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org  }
122dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org
1232176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org  private void updateSummaryB(SharedPreferences sharedPreferences, String key) {
1242176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org    Preference updatedPref = settingsFragment.findPreference(key);
1252176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org    updatedPref.setSummary(sharedPreferences.getBoolean(key, true)
126dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org        ? getString(R.string.pref_value_enabled)
127dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org        : getString(R.string.pref_value_disabled));
128dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org  }
129dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org
130dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org  private void setBitrateEnable(SharedPreferences sharedPreferences) {
131dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    Preference bitratePreferenceValue =
132dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org        settingsFragment.findPreference(keyprefStartBitrateValue);
133dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    String bitrateTypeDefault = getString(R.string.pref_startbitrate_default);
134dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    String bitrateType = sharedPreferences.getString(
135dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org        keyprefStartBitrateType, bitrateTypeDefault);
136dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    if (bitrateType.equals(bitrateTypeDefault)) {
137dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org      bitratePreferenceValue.setEnabled(false);
138dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    } else {
139dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org      bitratePreferenceValue.setEnabled(true);
140dea5173edfcc6fed0572ff61bbc116918988bd16glaznev@webrtc.org    }
1412176db343cf269a6f1faa7f0b20e8b5ad001c654henrika@webrtc.org  }
142243eb8e9af35f07befa733c86dd320f9f8b021bdglaznev@webrtc.org}
143