1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 20cc35e444bd71f117b6aed97e40ea4f3d82cd8faDaisuke Miyakawa * Copyright (C) 2010 The Android Open Source Project 3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License. 6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at 7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and 14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License. 15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 199627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasaniimport android.app.Dialog; 209627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasaniimport android.os.Bundle; 219627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasaniimport android.util.Log; 2297d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkeyimport android.view.LayoutInflater; 2397d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkeyimport android.view.View; 2497d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkeyimport android.view.ViewGroup; 2597d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkeyimport android.widget.ListView; 26cbde502ebb2ffe00eec713a91e1f05d753b2b603Benjamin Poieszimport android.content.Context; 279627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 289627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasaniimport com.android.settings.SettingsPreferenceFragment.SettingsDialogFragment; 29cbde502ebb2ffe00eec713a91e1f05d753b2b603Benjamin Poieszimport com.android.settings.DevelopmentSettings; 309627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 310b8c710d060c55cfe0208a9d6f02b0007d607bd5Daisuke Miyakawaimport java.util.Locale; 320b8c710d060c55cfe0208a9d6f02b0007d607bd5Daisuke Miyakawa 33cdadb566447451de7e1431b6c5eb2aef1e9157fcDaisuke Miyakawapublic class LocalePicker extends com.android.internal.app.LocalePicker 349627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani implements com.android.internal.app.LocalePicker.LocaleSelectionListener, 359627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani DialogCreatable { 369627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 379627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani private static final String TAG = "LocalePicker"; 389627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 399627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani private SettingsDialogFragment mDialogFragment; 409627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani private static final int DLG_SHOW_GLOBAL_WARNING = 1; 419627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani private static final String SAVE_TARGET_LOCALE = "locale"; 429627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 439627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani private Locale mTargetLocale; 449627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 45cdadb566447451de7e1431b6c5eb2aef1e9157fcDaisuke Miyakawa public LocalePicker() { 46cdadb566447451de7e1431b6c5eb2aef1e9157fcDaisuke Miyakawa super(); 47cdadb566447451de7e1431b6c5eb2aef1e9157fcDaisuke Miyakawa setLocaleSelectionListener(this); 480cc35e444bd71f117b6aed97e40ea4f3d82cd8faDaisuke Miyakawa } 490cc35e444bd71f117b6aed97e40ea4f3d82cd8faDaisuke Miyakawa 500cc35e444bd71f117b6aed97e40ea4f3d82cd8faDaisuke Miyakawa @Override 51cbde502ebb2ffe00eec713a91e1f05d753b2b603Benjamin Poiesz protected boolean isInDeveloperMode() { 52cbde502ebb2ffe00eec713a91e1f05d753b2b603Benjamin Poiesz final boolean showDev = getActivity().getSharedPreferences(DevelopmentSettings.PREF_FILE, 53cbde502ebb2ffe00eec713a91e1f05d753b2b603Benjamin Poiesz Context.MODE_PRIVATE).getBoolean( 54cbde502ebb2ffe00eec713a91e1f05d753b2b603Benjamin Poiesz DevelopmentSettings.PREF_SHOW, 55cbde502ebb2ffe00eec713a91e1f05d753b2b603Benjamin Poiesz android.os.Build.TYPE.equals("eng")); 56cbde502ebb2ffe00eec713a91e1f05d753b2b603Benjamin Poiesz return showDev; 57cbde502ebb2ffe00eec713a91e1f05d753b2b603Benjamin Poiesz } 58cbde502ebb2ffe00eec713a91e1f05d753b2b603Benjamin Poiesz 59cbde502ebb2ffe00eec713a91e1f05d753b2b603Benjamin Poiesz @Override 609627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani public void onCreate(Bundle savedInstanceState) { 619627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani super.onCreate(savedInstanceState); 629627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (savedInstanceState != null && savedInstanceState.containsKey(SAVE_TARGET_LOCALE)) { 639627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mTargetLocale = new Locale(savedInstanceState.getString(SAVE_TARGET_LOCALE)); 649627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 659627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 669627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 679627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani @Override 6897d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey public View onCreateView( 6997d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 7097d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey final View view = super.onCreateView(inflater, container, savedInstanceState); 7197d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey final ListView list = (ListView) view.findViewById(android.R.id.list); 7297d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey Utils.forcePrepareCustomPreferencesList(container, view, list, false); 7397d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey return view; 7497d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey } 7597d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey 7697d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey @Override 779627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani public void onLocaleSelected(final Locale locale) { 789627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (Utils.hasMultipleUsers(getActivity())) { 799627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mTargetLocale = locale; 809627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani showDialog(DLG_SHOW_GLOBAL_WARNING); 819627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } else { 8253b14f57c311c3cf170cbe8255d57e3f44b2b80cAmith Yamasani getActivity().onBackPressed(); 839627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani LocalePicker.updateLocale(locale); 849627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 859627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 869627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 879627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani @Override 889627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani public void onSaveInstanceState(Bundle outState) { 899627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani super.onSaveInstanceState(outState); 909627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 919627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (mTargetLocale != null) { 929627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani outState.putString(SAVE_TARGET_LOCALE, mTargetLocale.toString()); 939627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 949627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 959627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 969627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani protected void showDialog(int dialogId) { 979627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (mDialogFragment != null) { 989627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani Log.e(TAG, "Old dialog fragment not null!"); 999627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 1009627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mDialogFragment = new SettingsDialogFragment(this, dialogId); 1019627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mDialogFragment.show(getActivity().getFragmentManager(), Integer.toString(dialogId)); 1029627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 1039627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 10478995994b9b0afbc4c4705e41d1c4ac944e557f2Svetoslav Ganov public Dialog onCreateDialog(final int dialogId) { 1059627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani return Utils.buildGlobalChangeWarningDialog(getActivity(), 1069627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani R.string.global_locale_change_title, 1079627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani new Runnable() { 1089627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani public void run() { 10969621ece97d9f82e7408562f28110f40d872cb24Svetoslav Ganov removeDialog(dialogId); 1109627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani getActivity().onBackPressed(); 1119627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani LocalePicker.updateLocale(mTargetLocale); 1129627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 1139627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 1149627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani ); 1159627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 1169627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 1179627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani protected void removeDialog(int dialogId) { 1189627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani // mDialogFragment may not be visible yet in parent fragment's onResume(). 1199627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani // To be able to dismiss dialog at that time, don't check 1209627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani // mDialogFragment.isVisible(). 1219627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (mDialogFragment != null && mDialogFragment.getDialogId() == dialogId) { 1229627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mDialogFragment.dismiss(); 1239627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 1249627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mDialogFragment = null; 125afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 126cdadb566447451de7e1431b6c5eb2aef1e9157fcDaisuke Miyakawa} 127