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
519627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    public void onCreate(Bundle savedInstanceState) {
529627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        super.onCreate(savedInstanceState);
539627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        if (savedInstanceState != null && savedInstanceState.containsKey(SAVE_TARGET_LOCALE)) {
549627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani            mTargetLocale = new Locale(savedInstanceState.getString(SAVE_TARGET_LOCALE));
559627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        }
569627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    }
579627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani
589627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    @Override
5997d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey    public View onCreateView(
6097d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
6197d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey        final View view = super.onCreateView(inflater, container, savedInstanceState);
6297d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey        final ListView list = (ListView) view.findViewById(android.R.id.list);
6397d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey        Utils.forcePrepareCustomPreferencesList(container, view, list, false);
6497d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey        return view;
6597d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey    }
6697d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey
6797d07fa3aedde44368818551dc789eaff7bfb047Jeff Sharkey    @Override
689627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    public void onLocaleSelected(final Locale locale) {
699627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        if (Utils.hasMultipleUsers(getActivity())) {
709627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani            mTargetLocale = locale;
719627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani            showDialog(DLG_SHOW_GLOBAL_WARNING);
729627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        } else {
7353b14f57c311c3cf170cbe8255d57e3f44b2b80cAmith Yamasani            getActivity().onBackPressed();
749627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani            LocalePicker.updateLocale(locale);
759627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        }
769627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    }
779627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani
789627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    @Override
799627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    public void onSaveInstanceState(Bundle outState) {
809627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        super.onSaveInstanceState(outState);
819627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani
829627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        if (mTargetLocale != null) {
839627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani            outState.putString(SAVE_TARGET_LOCALE, mTargetLocale.toString());
849627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        }
859627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    }
869627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani
879627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    protected void showDialog(int dialogId) {
889627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        if (mDialogFragment != null) {
899627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani            Log.e(TAG, "Old dialog fragment not null!");
909627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        }
919627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        mDialogFragment = new SettingsDialogFragment(this, dialogId);
929627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        mDialogFragment.show(getActivity().getFragmentManager(), Integer.toString(dialogId));
939627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    }
949627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani
9578995994b9b0afbc4c4705e41d1c4ac944e557f2Svetoslav Ganov    public Dialog onCreateDialog(final int dialogId) {
969627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        return Utils.buildGlobalChangeWarningDialog(getActivity(),
979627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani                R.string.global_locale_change_title,
989627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani                new Runnable() {
999627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani                    public void run() {
10069621ece97d9f82e7408562f28110f40d872cb24Svetoslav Ganov                        removeDialog(dialogId);
1019627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani                        getActivity().onBackPressed();
1029627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani                        LocalePicker.updateLocale(mTargetLocale);
1039627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani                    }
1049627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani                }
1059627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        );
1069627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    }
1079627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani
1089627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani    protected void removeDialog(int dialogId) {
1099627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        // mDialogFragment may not be visible yet in parent fragment's onResume().
1109627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        // To be able to dismiss dialog at that time, don't check
1119627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        // mDialogFragment.isVisible().
1129627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        if (mDialogFragment != null && mDialogFragment.getDialogId() == dialogId) {
1139627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani            mDialogFragment.dismiss();
1149627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        }
1159627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani        mDialogFragment = null;
116afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
117cdadb566447451de7e1431b6c5eb2aef1e9157fcDaisuke Miyakawa}
118