16b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal/* 26b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * Copyright (C) 2013 The Android Open Source Project 36b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * 46b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * Licensed under the Apache License, Version 2.0 (the "License"); 56b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * you may not use this file except in compliance with the License. 66b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * You may obtain a copy of the License at 76b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * 86b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * http://www.apache.org/licenses/LICENSE-2.0 96b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * 106b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * Unless required by applicable law or agreed to in writing, software 116b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * distributed under the License is distributed on an "AS IS" BASIS, 126b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * See the License for the specific language governing permissions and 146b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * limitations under the License. 156b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal */ 166b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal 176b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal 186b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwalpackage com.android.mail.providers; 196b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal 206b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwalimport com.android.mail.ui.AccountController; 216b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwalimport com.android.mail.utils.LogTag; 226b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwalimport com.android.mail.utils.LogUtils; 236b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal 246b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwalimport android.database.DataSetObserver; 256b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal 266b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal/** 276b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * A simple extension of {@link android.database.DataSetObserver} to provide all Accounts in 286b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * {@link #onChanged(Account[])} when the list of Accounts changes. Initializing the object 296b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * registers with the observer with the {@link com.android.mail.ui.AccountController} provided. 306b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * The object will then begin to receive {@link #onChanged(Account[])} till {@link 316b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * #unregisterAndDestroy()} is called. <p> To implement an {@link com.android.mail.providers 326b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * .AllAccountObserver}, you need to implement the {@link #onChanged(Account[])} method. 336b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal */ 346b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwalpublic abstract class AllAccountObserver extends DataSetObserver { 356b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal /** 366b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * The AccountController that the observer is registered with. 376b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal */ 386b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal private AccountController mController; 396b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal 406b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal private static final String LOG_TAG = LogTag.getLogTag(); 416b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal 426b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal /** 436b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * The no-argument constructor leaves the object unusable till 446b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * {@link #initialize(com.android.mail.ui.AccountController)} is called. 456b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal */ 466b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal public AllAccountObserver() { 476b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal } 486b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal 496b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal /** 506b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * Initializes an {@link com.android.mail.providers.AllAccountObserver} object that receives 516b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * a call to {@link #onChanged(Account[])} when the controller changes the list of accounts. 526b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * 536b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * @param controller 546b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal */ 556b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal public Account[] initialize(AccountController controller) { 566b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal if (controller == null) { 576b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal LogUtils.wtf(LOG_TAG, "AllAccountObserver initialized with null controller!"); 586b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal } 596b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal mController = controller; 606b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal mController.registerAllAccountObserver(this); 616b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal return mController.getAllAccounts(); 626b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal } 636b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal 646b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal @Override 656b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal public final void onChanged() { 666b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal if (mController == null) { 676b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal return; 686b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal } 696b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal onChanged(mController.getAllAccounts()); 706b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal } 716b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal 726b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal /** 736b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * Callback invoked when the list of Accounts changes. 746b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * The updated list is passed as the argument. 756b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * @param allAccounts the array of all accounts in the current application. 766b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal */ 776b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal public abstract void onChanged(Account[] allAccounts); 786b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal 796b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal /** 806b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * Return the array of existing accounts. 816b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * @return the array of existing accounts. 826b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal */ 836b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal public final Account[] getAllAccounts() { 846b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal if (mController == null) { 856b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal return null; 866b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal } 876b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal return mController.getAllAccounts(); 886b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal } 896b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal 906b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal /** 916b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal * Unregisters for list of Account changes and makes the object unusable. 926b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal */ 936b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal public void unregisterAndDestroy() { 946b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal if (mController == null) { 956b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal return; 966b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal } 976b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal mController.unregisterAllAccountObserver(this); 986b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal } 996b641bab2b76995a717b183ac539267a6facdbf6Vikram Aggarwal} 100