1a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann/*
2a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann * Copyright (C) 2010 The Android Open Source Project
3a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann *
4a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann * Licensed under the Apache License, Version 2.0 (the "License");
5a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann * you may not use this file except in compliance with the License.
6a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann * You may obtain a copy of the License at
7a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann *
8a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann *      http://www.apache.org/licenses/LICENSE-2.0
9a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann *
10a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann * Unless required by applicable law or agreed to in writing, software
11a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann * distributed under the License is distributed on an "AS IS" BASIS,
12a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann * See the License for the specific language governing permissions and
14a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann * limitations under the License
15a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann */
16a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann
1718ffaa2561cc7dd2e3ef81737e6537931c0a9a11Dmitri Plotnikovpackage com.android.contacts.editor;
18a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann
19a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmannimport android.app.AlertDialog;
20a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmannimport android.app.Dialog;
214a62be4f5a365e5afde71becfd446381f2baa494Daniel Lehmannimport android.app.DialogFragment;
224a62be4f5a365e5afde71becfd446381f2baa494Daniel Lehmannimport android.app.Fragment;
23a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmannimport android.content.DialogInterface;
24a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmannimport android.os.Bundle;
25a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann
26e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.R;
27e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng
28a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann/**
29a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann * Shows a dialog asking the user whether to split the contact. The result is passed back
304a62be4f5a365e5afde71becfd446381f2baa494Daniel Lehmann * to the Fragment that is configured by {@link Fragment#setTargetFragment(Fragment, int)}, which
314a62be4f5a365e5afde71becfd446381f2baa494Daniel Lehmann * has to implement {@link SplitContactConfirmationDialogFragment.Listener}.
32a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann * Does not split the contact itself.
33a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann */
34a3e498a1d189010791f98183c1267d869f0d941bBrian Attwellpublic class SplitContactConfirmationDialogFragment extends DialogFragment {
35a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann
360d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang    private static final String ARG_HAS_PENDING_CHANGES = "hasPendingChanges";
37ffb419e08d7bab32ee489ec1e8e4a341d01a968aWenyi Wang    public static final String TAG = "SplitConfirmation";
380d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang
390d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang    /**
400d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang     * Callbacks for the dialog host.
410d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang     */
420d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang    public interface Listener {
430d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang
440d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang        /**
450d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang         * Invoked after the user has confirmed that they want to proceed with the split.
460d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang         *
470d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang         * @param hasPendingChanges whether there are unsaved changes in the underlying contact
480d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang         *         that should be saved before the split.
490d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang         */
500d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang        void onSplitContactConfirmed(boolean hasPendingChanges);
51b9065ddb28a2040cabda251891be2062b5260217Gary Mai
52b9065ddb28a2040cabda251891be2062b5260217Gary Mai        /**
53b9065ddb28a2040cabda251891be2062b5260217Gary Mai         * Invoked if the user has canceled or dismissed the dialog without making a choice.
54b9065ddb28a2040cabda251891be2062b5260217Gary Mai         */
55b9065ddb28a2040cabda251891be2062b5260217Gary Mai        void onSplitContactCanceled();
560d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang    }
570d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang
58363af60ea23e5a3b945005712a16564ab69db18bGary Mai    public static void show(ContactEditorFragment fragment, boolean hasPendingChanges) {
590d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang        final Bundle args = new Bundle();
600d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang        args.putBoolean(ARG_HAS_PENDING_CHANGES, hasPendingChanges);
610d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang
620d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang        final SplitContactConfirmationDialogFragment dialog = new
63ed8f6c9744dd38e089598acfba6fb90446954e6eWalter Jang                SplitContactConfirmationDialogFragment();
64ed8f6c9744dd38e089598acfba6fb90446954e6eWalter Jang        dialog.setTargetFragment(fragment, 0);
650d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang        dialog.setArguments(args);
66ed8f6c9744dd38e089598acfba6fb90446954e6eWalter Jang        dialog.show(fragment.getFragmentManager(), "splitContact");
67a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann    }
68a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann
690d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang    private boolean mHasPendingChanges;
700d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang
710d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang    @Override
720d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang    public void onCreate(Bundle savedInstanceState) {
730d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang        super.onCreate(savedInstanceState);
74b9065ddb28a2040cabda251891be2062b5260217Gary Mai        mHasPendingChanges = getArguments() != null
75b9065ddb28a2040cabda251891be2062b5260217Gary Mai                && getArguments().getBoolean(ARG_HAS_PENDING_CHANGES);
760d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang    }
770d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang
78a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann    @Override
79a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann    public Dialog onCreateDialog(Bundle savedInstanceState) {
80a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
810d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang        builder.setMessage(mHasPendingChanges
820d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang                ? R.string.splitConfirmationWithPendingChanges
830d9c24b77d319db5ecf21e92898625fdec5c1ec2Walter Jang                : R.string.splitConfirmation);
84168331d85c5be43a816eb24fd37a2ebdbe61ac53Tingting Wang        builder.setPositiveButton(mHasPendingChanges
85168331d85c5be43a816eb24fd37a2ebdbe61ac53Tingting Wang                ? R.string.splitConfirmationWithPendingChanges_positive_button
86168331d85c5be43a816eb24fd37a2ebdbe61ac53Tingting Wang                : R.string.splitConfirmation_positive_button,
87168331d85c5be43a816eb24fd37a2ebdbe61ac53Tingting Wang                new DialogInterface.OnClickListener() {
88168331d85c5be43a816eb24fd37a2ebdbe61ac53Tingting Wang                    @Override
89168331d85c5be43a816eb24fd37a2ebdbe61ac53Tingting Wang                    public void onClick(DialogInterface dialog, int which) {
90b9065ddb28a2040cabda251891be2062b5260217Gary Mai                        getListener().onSplitContactConfirmed(mHasPendingChanges);
91168331d85c5be43a816eb24fd37a2ebdbe61ac53Tingting Wang                    }
92168331d85c5be43a816eb24fd37a2ebdbe61ac53Tingting Wang                });
93b9065ddb28a2040cabda251891be2062b5260217Gary Mai        builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
94b9065ddb28a2040cabda251891be2062b5260217Gary Mai            @Override
95b9065ddb28a2040cabda251891be2062b5260217Gary Mai            public void onClick(DialogInterface dialog, int which) {
96b9065ddb28a2040cabda251891be2062b5260217Gary Mai                onCancel(dialog);
97b9065ddb28a2040cabda251891be2062b5260217Gary Mai            }
98b9065ddb28a2040cabda251891be2062b5260217Gary Mai        });
99a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann        builder.setCancelable(false);
100a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann        return builder.create();
101a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann    }
102b9065ddb28a2040cabda251891be2062b5260217Gary Mai
103b9065ddb28a2040cabda251891be2062b5260217Gary Mai    private Listener getListener() {
104b9065ddb28a2040cabda251891be2062b5260217Gary Mai        return getTargetFragment() == null
105b9065ddb28a2040cabda251891be2062b5260217Gary Mai                ? (Listener) getActivity()
106b9065ddb28a2040cabda251891be2062b5260217Gary Mai                : (Listener) getTargetFragment();
107b9065ddb28a2040cabda251891be2062b5260217Gary Mai    }
108b9065ddb28a2040cabda251891be2062b5260217Gary Mai
109b9065ddb28a2040cabda251891be2062b5260217Gary Mai    @Override
110b9065ddb28a2040cabda251891be2062b5260217Gary Mai    public void onCancel(DialogInterface dialog) {
111b9065ddb28a2040cabda251891be2062b5260217Gary Mai        super.onCancel(dialog);
112b9065ddb28a2040cabda251891be2062b5260217Gary Mai        getListener().onSplitContactCanceled();
113b9065ddb28a2040cabda251891be2062b5260217Gary Mai    }
114a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmann}
115