LocalePicker.java revision 69621ece97d9f82e7408562f28110f40d872cb24
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; 229627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 239627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasaniimport com.android.settings.SettingsPreferenceFragment.SettingsDialogFragment; 249627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 250b8c710d060c55cfe0208a9d6f02b0007d607bd5Daisuke Miyakawaimport java.util.Locale; 260b8c710d060c55cfe0208a9d6f02b0007d607bd5Daisuke Miyakawa 27cdadb566447451de7e1431b6c5eb2aef1e9157fcDaisuke Miyakawapublic class LocalePicker extends com.android.internal.app.LocalePicker 289627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani implements com.android.internal.app.LocalePicker.LocaleSelectionListener, 299627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani DialogCreatable { 309627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 319627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani private static final String TAG = "LocalePicker"; 329627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 339627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani private SettingsDialogFragment mDialogFragment; 349627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani private static final int DLG_SHOW_GLOBAL_WARNING = 1; 359627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani private static final String SAVE_TARGET_LOCALE = "locale"; 369627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 379627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani private Locale mTargetLocale; 389627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 39cdadb566447451de7e1431b6c5eb2aef1e9157fcDaisuke Miyakawa public LocalePicker() { 40cdadb566447451de7e1431b6c5eb2aef1e9157fcDaisuke Miyakawa super(); 41cdadb566447451de7e1431b6c5eb2aef1e9157fcDaisuke Miyakawa setLocaleSelectionListener(this); 420cc35e444bd71f117b6aed97e40ea4f3d82cd8faDaisuke Miyakawa } 430cc35e444bd71f117b6aed97e40ea4f3d82cd8faDaisuke Miyakawa 440cc35e444bd71f117b6aed97e40ea4f3d82cd8faDaisuke Miyakawa @Override 459627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani public void onCreate(Bundle savedInstanceState) { 469627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani super.onCreate(savedInstanceState); 479627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (savedInstanceState != null && savedInstanceState.containsKey(SAVE_TARGET_LOCALE)) { 489627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mTargetLocale = new Locale(savedInstanceState.getString(SAVE_TARGET_LOCALE)); 499627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 509627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 519627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 529627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani @Override 539627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani public void onLocaleSelected(final Locale locale) { 549627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (Utils.hasMultipleUsers(getActivity())) { 559627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mTargetLocale = locale; 569627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani showDialog(DLG_SHOW_GLOBAL_WARNING); 579627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } else { 589627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani LocalePicker.updateLocale(locale); 599627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 609627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 619627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 629627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani @Override 639627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani public void onSaveInstanceState(Bundle outState) { 649627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani super.onSaveInstanceState(outState); 659627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 669627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (mTargetLocale != null) { 679627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani outState.putString(SAVE_TARGET_LOCALE, mTargetLocale.toString()); 689627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 699627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 709627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 719627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani protected void showDialog(int dialogId) { 729627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (mDialogFragment != null) { 739627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani Log.e(TAG, "Old dialog fragment not null!"); 749627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 759627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mDialogFragment = new SettingsDialogFragment(this, dialogId); 769627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mDialogFragment.show(getActivity().getFragmentManager(), Integer.toString(dialogId)); 779627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 789627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 799627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani public Dialog onCreateDialog(int dialogId) { 809627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani return Utils.buildGlobalChangeWarningDialog(getActivity(), 819627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani R.string.global_locale_change_title, 829627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani new Runnable() { 839627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani public void run() { 8469621ece97d9f82e7408562f28110f40d872cb24Svetoslav Ganov removeDialog(dialogId); 859627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani getActivity().onBackPressed(); 869627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani LocalePicker.updateLocale(mTargetLocale); 879627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 889627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 899627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani ); 909627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 919627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani 929627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani protected void removeDialog(int dialogId) { 939627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani // mDialogFragment may not be visible yet in parent fragment's onResume(). 949627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani // To be able to dismiss dialog at that time, don't check 959627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani // mDialogFragment.isVisible(). 969627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani if (mDialogFragment != null && mDialogFragment.getDialogId() == dialogId) { 979627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mDialogFragment.dismiss(); 989627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 999627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani mDialogFragment = null; 100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 101cdadb566447451de7e1431b6c5eb2aef1e9157fcDaisuke Miyakawa} 102