176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler/*
276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * Copyright (C) 2014 The Android Open Source Project
376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler *
476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * Licensed under the Apache License, Version 2.0 (the "License");
576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * you may not use this file except in compliance with the License.
676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * You may obtain a copy of the License at
776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler *
876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler *      http://www.apache.org/licenses/LICENSE-2.0
976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler *
1076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * Unless required by applicable law or agreed to in writing, software
1176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * distributed under the License is distributed on an "AS IS" BASIS,
1276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * See the License for the specific language governing permissions and
1476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler * limitations under the License.
1576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler */
1676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
1776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerpackage com.android.email.activity.setup;
1876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
1976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport android.app.Fragment;
2076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport android.app.LoaderManager;
2176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport android.content.ContentValues;
2276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport android.content.Context;
2376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport android.content.Loader;
2476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport android.os.Bundle;
2576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport android.os.Handler;
2676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
2776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport com.android.email.provider.AccountBackupRestore;
2876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport com.android.emailcommon.provider.Account;
2976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport com.android.emailcommon.provider.EmailContent;
3076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport com.android.mail.ui.MailAsyncTaskLoader;
3176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
3276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerpublic class AccountFinalizeFragment extends Fragment {
3376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public static final String TAG = "AccountFinalizeFragment";
3476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
3576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static final String ACCOUNT_TAG = "account";
3676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
3776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static final int FINAL_ACCOUNT_TASK_LOADER_ID = 0;
3876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
3976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private Context mAppContext;
4076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private final Handler mHandler = new Handler();
4176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
4276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public interface Callback {
4376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        void onAccountFinalizeFragmentComplete();
4476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    }
4576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
4676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public AccountFinalizeFragment() {}
4776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
4876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public static AccountFinalizeFragment newInstance(Account account) {
4976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        final AccountFinalizeFragment f = new AccountFinalizeFragment();
5076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        final Bundle args = new Bundle(1);
5176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        args.putParcelable(ACCOUNT_TAG, account);
5276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        f.setArguments(args);
5376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        return f;
5476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    }
5576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
5676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    @Override
5776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public void onCreate(Bundle savedInstanceState) {
5876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        super.onCreate(savedInstanceState);
5976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
6076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mAppContext = getActivity().getApplicationContext();
6176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
6276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        setRetainInstance(true);
6376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    }
6476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
6576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    @Override
6676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public void onResume() {
6776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        super.onResume();
6876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
6976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        getLoaderManager().initLoader(FINAL_ACCOUNT_TASK_LOADER_ID, getArguments(),
7076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                new LoaderManager.LoaderCallbacks<Boolean>() {
7176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                    @Override
7276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                    public Loader<Boolean> onCreateLoader(int id, Bundle args) {
7376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                        final Account accountArg = args.getParcelable(ACCOUNT_TAG);
7476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                        return new FinalSetupTaskLoader(mAppContext, accountArg);
7576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                    }
7676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
7776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                    @Override
7876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                    public void onLoadFinished(Loader<Boolean> loader, Boolean success) {
7976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                        if (!success) {
8076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                            return;
8176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                        }
8276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                        mHandler.post(new Runnable() {
8376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                            @Override
8476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                            public void run() {
8576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                                if (isResumed()) {
8676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                                    Callback activity = (Callback) getActivity();
8776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                                    activity.onAccountFinalizeFragmentComplete();
8876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                                }
8976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                            }
9076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                        });
9176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
9276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                    }
9376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
9476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                    @Override
9576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                    public void onLoaderReset(Loader<Boolean> loader) {}
9676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler                });
9776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    }
9876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
9976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    /**
10076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler     * Final account setup work is handled in this Loader:
10176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler     *   Commit final values to provider
10276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler     *   Trigger account backup
10376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler     */
10476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static class FinalSetupTaskLoader extends MailAsyncTaskLoader<Boolean> {
10576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
10676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        private final Account mAccount;
10776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
10876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        public FinalSetupTaskLoader(Context context, Account account) {
10976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            super(context);
11076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            mAccount = account;
11176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        }
11276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
11376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        Account getAccount() {
11476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            return mAccount;
11576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        }
11676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
11776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        @Override
11876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        public Boolean loadInBackground() {
11976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            // Update the account in the database
12076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            final ContentValues cv = new ContentValues();
12176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            cv.put(EmailContent.AccountColumns.DISPLAY_NAME, mAccount.getDisplayName());
12276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            cv.put(EmailContent.AccountColumns.SENDER_NAME, mAccount.getSenderName());
12376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            mAccount.update(getContext(), cv);
12476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
12576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            // Update the backup (side copy) of the accounts
12676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            AccountBackupRestore.backup(getContext());
12776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
12876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            return true;
12976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        }
13076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler
13176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        @Override
13276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        protected void onDiscardResult(Boolean result) {}
13376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    }
13476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler}
135