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