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