1 /* 2 * Copyright (C) 2014 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.email.activity.setup; 18 19 import android.app.Fragment; 20 import android.app.LoaderManager; 21 import android.content.ContentValues; 22 import android.content.Context; 23 import android.content.Loader; 24 import android.os.Bundle; 25 import android.os.Handler; 26 27 import com.android.email.provider.AccountBackupRestore; 28 import com.android.emailcommon.provider.Account; 29 import com.android.emailcommon.provider.EmailContent; 30 import com.android.mail.ui.MailAsyncTaskLoader; 31 32 public class AccountFinalizeFragment extends Fragment { 33 public static final String TAG = "AccountFinalizeFragment"; 34 35 private static final String ACCOUNT_TAG = "account"; 36 37 private static final int FINAL_ACCOUNT_TASK_LOADER_ID = 0; 38 39 private Context mAppContext; 40 private final Handler mHandler = new Handler(); 41 42 public interface Callback { onAccountFinalizeFragmentComplete()43 void onAccountFinalizeFragmentComplete(); 44 } 45 AccountFinalizeFragment()46 public AccountFinalizeFragment() {} 47 newInstance(Account account)48 public static AccountFinalizeFragment newInstance(Account account) { 49 final AccountFinalizeFragment f = new AccountFinalizeFragment(); 50 final Bundle args = new Bundle(1); 51 args.putParcelable(ACCOUNT_TAG, account); 52 f.setArguments(args); 53 return f; 54 } 55 56 @Override onCreate(Bundle savedInstanceState)57 public void onCreate(Bundle savedInstanceState) { 58 super.onCreate(savedInstanceState); 59 60 mAppContext = getActivity().getApplicationContext(); 61 62 setRetainInstance(true); 63 } 64 65 @Override onResume()66 public void onResume() { 67 super.onResume(); 68 69 getLoaderManager().initLoader(FINAL_ACCOUNT_TASK_LOADER_ID, getArguments(), 70 new LoaderManager.LoaderCallbacks<Boolean>() { 71 @Override 72 public Loader<Boolean> onCreateLoader(int id, Bundle args) { 73 final Account accountArg = args.getParcelable(ACCOUNT_TAG); 74 return new FinalSetupTaskLoader(mAppContext, accountArg); 75 } 76 77 @Override 78 public void onLoadFinished(Loader<Boolean> loader, Boolean success) { 79 if (!success) { 80 return; 81 } 82 mHandler.post(new Runnable() { 83 @Override 84 public void run() { 85 if (isResumed()) { 86 Callback activity = (Callback) getActivity(); 87 activity.onAccountFinalizeFragmentComplete(); 88 } 89 } 90 }); 91 92 } 93 94 @Override 95 public void onLoaderReset(Loader<Boolean> loader) {} 96 }); 97 } 98 99 /** 100 * Final account setup work is handled in this Loader: 101 * Commit final values to provider 102 * Trigger account backup 103 */ 104 private static class FinalSetupTaskLoader extends MailAsyncTaskLoader<Boolean> { 105 106 private final Account mAccount; 107 FinalSetupTaskLoader(Context context, Account account)108 public FinalSetupTaskLoader(Context context, Account account) { 109 super(context); 110 mAccount = account; 111 } 112 getAccount()113 Account getAccount() { 114 return mAccount; 115 } 116 117 @Override loadInBackground()118 public Boolean loadInBackground() { 119 // Update the account in the database 120 final ContentValues cv = new ContentValues(); 121 cv.put(EmailContent.AccountColumns.DISPLAY_NAME, mAccount.getDisplayName()); 122 cv.put(EmailContent.AccountColumns.SENDER_NAME, mAccount.getSenderName()); 123 mAccount.update(getContext(), cv); 124 125 // Update the backup (side copy) of the accounts 126 AccountBackupRestore.backup(getContext()); 127 128 return true; 129 } 130 131 @Override onDiscardResult(Boolean result)132 protected void onDiscardResult(Boolean result) {} 133 } 134 } 135