1  /*
2   * Copyright (C) 2014 The Android Open Source Project
3   *
4   * Licensed under the Apache License, Version 2.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *      http://www.apache.org/licenses/LICENSE-2.0
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package com.android.inputmethod.latin.settings;
18  
19  import android.content.Context;
20  import android.content.res.Resources;
21  import android.os.Bundle;
22  import android.preference.Preference;
23  import android.preference.PreferenceScreen;
24  
25  import com.android.inputmethod.keyboard.KeyboardTheme;
26  import com.android.inputmethod.latin.R;
27  import com.android.inputmethod.latin.settings.RadioButtonPreference.OnRadioButtonClickedListener;
28  
29  /**
30   * "Keyboard theme" settings sub screen.
31   */
32  public final class ThemeSettingsFragment extends SubScreenFragment
33          implements OnRadioButtonClickedListener {
34      private int mSelectedThemeId;
35  
36      static class KeyboardThemePreference extends RadioButtonPreference {
37          final int mThemeId;
38  
KeyboardThemePreference(final Context context, final String name, final int id)39          KeyboardThemePreference(final Context context, final String name, final int id) {
40              super(context);
41              setTitle(name);
42              mThemeId = id;
43          }
44      }
45  
updateKeyboardThemeSummary(final Preference pref)46      static void updateKeyboardThemeSummary(final Preference pref) {
47          final Context context = pref.getContext();
48          final Resources res = context.getResources();
49          final KeyboardTheme keyboardTheme = KeyboardTheme.getKeyboardTheme(context);
50          final String[] keyboardThemeNames = res.getStringArray(R.array.keyboard_theme_names);
51          final int[] keyboardThemeIds = res.getIntArray(R.array.keyboard_theme_ids);
52          for (int index = 0; index < keyboardThemeNames.length; index++) {
53              if (keyboardTheme.mThemeId == keyboardThemeIds[index]) {
54                  pref.setSummary(keyboardThemeNames[index]);
55                  return;
56              }
57          }
58      }
59  
60      @Override
onCreate(final Bundle icicle)61      public void onCreate(final Bundle icicle) {
62          super.onCreate(icicle);
63          addPreferencesFromResource(R.xml.prefs_screen_theme);
64          final PreferenceScreen screen = getPreferenceScreen();
65          final Context context = getActivity();
66          final Resources res = getResources();
67          final String[] keyboardThemeNames = res.getStringArray(R.array.keyboard_theme_names);
68          final int[] keyboardThemeIds = res.getIntArray(R.array.keyboard_theme_ids);
69          for (int index = 0; index < keyboardThemeNames.length; index++) {
70              final KeyboardThemePreference pref = new KeyboardThemePreference(
71                      context, keyboardThemeNames[index], keyboardThemeIds[index]);
72              screen.addPreference(pref);
73              pref.setOnRadioButtonClickedListener(this);
74          }
75          final KeyboardTheme keyboardTheme = KeyboardTheme.getKeyboardTheme(context);
76          mSelectedThemeId = keyboardTheme.mThemeId;
77      }
78  
79      @Override
onRadioButtonClicked(final RadioButtonPreference preference)80      public void onRadioButtonClicked(final RadioButtonPreference preference) {
81          if (preference instanceof KeyboardThemePreference) {
82              final KeyboardThemePreference pref = (KeyboardThemePreference)preference;
83              mSelectedThemeId = pref.mThemeId;
84              updateSelected();
85          }
86      }
87  
88      @Override
onResume()89      public void onResume() {
90          super.onResume();
91          updateSelected();
92      }
93  
94      @Override
onPause()95      public void onPause() {
96          super.onPause();
97          KeyboardTheme.saveKeyboardThemeId(mSelectedThemeId, getSharedPreferences());
98      }
99  
updateSelected()100      private void updateSelected() {
101          final PreferenceScreen screen = getPreferenceScreen();
102          final int count = screen.getPreferenceCount();
103          for (int index = 0; index < count; index++) {
104              final Preference preference = screen.getPreference(index);
105              if (preference instanceof KeyboardThemePreference) {
106                  final KeyboardThemePreference pref = (KeyboardThemePreference)preference;
107                  final boolean selected = (mSelectedThemeId == pref.mThemeId);
108                  pref.setSelected(selected);
109              }
110          }
111      }
112  }
113