Home | History | Annotate | Download | only in ui
      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.
     45     static public void setDefaultSyncAuthority(String defaultSyncAuthority) {
     46         sDefaultSyncAuthority = defaultSyncAuthority;
     47     }
     48 
     49     public interface TurnAutoSyncOnDialogListener {
     50         void onEnableAutoSync();
     51         void onCancelAutoSync();
     52     }
     53 
     54     private TurnAutoSyncOnDialogListener mListener;
     55 
     56     // Public no-args constructor needed for fragment re-instantiation
     57     public TurnAutoSyncOnDialog() {}
     58 
     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
     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