1 /* 2 * Copyright (C) 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.mail.ui; 18 19 import android.accounts.Account; 20 import android.app.AlertDialog; 21 import android.app.Dialog; 22 import android.app.DialogFragment; 23 import android.content.ContentResolver; 24 import android.content.DialogInterface; 25 import android.content.res.Resources; 26 import android.os.Bundle; 27 import android.text.TextUtils; 28 29 import com.android.mail.R; 30 import com.android.mail.utils.Utils; 31 32 /** 33 * Confirmation dialog for turning global auto-sync setting on. 34 */ 35 public class TurnAutoSyncOnDialog extends DialogFragment { 36 37 private static final String ACCOUNT = "account"; 38 private static final String SYNC_AUTHORITY = "syncAuthority"; 39 40 public static final String DIALOG_TAG = "auto sync"; 41 42 private static String sDefaultSyncAuthority; 43 44 // Should be called once per app. setDefaultSyncAuthority(String defaultSyncAuthority)45 static public void setDefaultSyncAuthority(String defaultSyncAuthority) { 46 sDefaultSyncAuthority = defaultSyncAuthority; 47 } 48 49 public interface TurnAutoSyncOnDialogListener { onEnableAutoSync()50 void onEnableAutoSync(); onCancelAutoSync()51 void onCancelAutoSync(); 52 } 53 54 private TurnAutoSyncOnDialogListener mListener; 55 56 // Public no-args constructor needed for fragment re-instantiation TurnAutoSyncOnDialog()57 public TurnAutoSyncOnDialog() {} 58 newInstance(Account account, String syncAuthority)59 public static TurnAutoSyncOnDialog newInstance(Account account, 60 String syncAuthority) { 61 final TurnAutoSyncOnDialog frag = new TurnAutoSyncOnDialog(); 62 final Bundle args = new Bundle(3); 63 args.putParcelable(ACCOUNT, account); 64 args.putString(SYNC_AUTHORITY, syncAuthority); 65 frag.setArguments(args); 66 return frag; 67 } 68 69 @Override onCreateDialog(Bundle savedInstanceState)70 public Dialog onCreateDialog(Bundle savedInstanceState) { 71 final Account account = getArguments().getParcelable(ACCOUNT); 72 final String syncAuthority = getArguments().getString(SYNC_AUTHORITY); 73 final Resources resources = getResources(); 74 final boolean isTablet = Utils.useTabletUI(resources); 75 final String bodyText = resources.getString( 76 R.string.turn_auto_sync_on_dialog_body, 77 resources.getString(isTablet ? R.string.tablet : R.string.phone)); 78 return new AlertDialog.Builder(getActivity()) 79 .setMessage(bodyText) 80 .setTitle(R.string.turn_auto_sync_on_dialog_title) 81 .setPositiveButton(R.string.turn_auto_sync_on_dialog_confirm_btn, 82 new DialogInterface.OnClickListener() { 83 @Override 84 public void onClick(DialogInterface dialog, int whichButton) { 85 // Turn on auto-sync 86 ContentResolver.setMasterSyncAutomatically(true); 87 // Also enable auto-sync for Gmail. 88 // Note it's possible for syncAuthority to be empty on the 89 // account (used for constructing this dialog) was 90 // cached from shared prefs. This can happen during app upgrade. 91 // As work around use default value set by app. 92 final String authority = TextUtils.isEmpty(syncAuthority) ? 93 sDefaultSyncAuthority : syncAuthority; 94 if (!TextUtils.isEmpty(authority)) { 95 ContentResolver.setSyncAutomatically( 96 account, 97 authority, 98 true); 99 if (mListener != null) { 100 mListener.onEnableAutoSync(); 101 } 102 } 103 } 104 }) 105 .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 106 @Override 107 public void onClick(DialogInterface dialog, int which) { 108 if (mListener != null) { 109 mListener.onCancelAutoSync(); 110 } 111 } 112 }) 113 .create(); 114 } 115 116 public void setListener(final TurnAutoSyncOnDialogListener listener) { 117 mListener = listener; 118 } 119 } 120