17c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal/* 27c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * Copyright (C) 2012 Google Inc. 37c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * Licensed to The Android Open Source Project. 47c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * 57c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * Licensed under the Apache License, Version 2.0 (the "License"); 67c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * you may not use this file except in compliance with the License. 77c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * You may obtain a copy of the License at 87c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * 97c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * http://www.apache.org/licenses/LICENSE-2.0 107c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * 117c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * Unless required by applicable law or agreed to in writing, software 127c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * distributed under the License is distributed on an "AS IS" BASIS, 137c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 147c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * See the License for the specific language governing permissions and 157c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * limitations under the License. 167c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal */ 177c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal 187c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwalpackage com.android.mail.providers; 197c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal 207c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwalimport android.database.DataSetObserver; 217c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal 227c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwalimport com.android.mail.ui.AccountController; 237c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwalimport com.android.mail.utils.LogTag; 247c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwalimport com.android.mail.utils.LogUtils; 257c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal 267c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal/** 277c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * A simple extension of {@link DataSetObserver} to provide the updated account in 287c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * {@link #onChanged(Account)} when the account changes. Initializing the object registers with 297c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * the observer with the {@link AccountController} provided. The object will then begin to 307c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * receive {@link #onChanged(Account)} till {@link #unregisterAndDestroy()} is called. 317c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * <p> 327c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * To implement an {@link AccountObserver}, you need to implement the {@link #onChanged(Account)} 337c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * method. 347c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal */ 357c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwalpublic abstract class AccountObserver extends DataSetObserver { 367c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal /** 377c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * The AccountController that the observer is registered with. 387c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal */ 397c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal private AccountController mController; 407c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal 417c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal private static final String LOG_TAG = LogTag.getLogTag(); 427c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal 437c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal /** 447c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * The no-argument constructor leaves the object unusable till 457c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * {@link #initialize(AccountController)} is called. 467c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal */ 477c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal public AccountObserver () { 487c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal } 497c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal 507c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal /** 517c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * Initializes an {@link AccountObserver} object that receives a call to 527c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * {@link #onChanged(Account)} when the controller changes the account. 537c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * 547c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * @param controller 557c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal */ 567c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal public Account initialize(AccountController controller) { 577c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal if (controller == null) { 587c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal LogUtils.wtf(LOG_TAG, "AccountObserver initialized with null controller!"); 597c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal } 607c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal mController = controller; 617c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal mController.registerAccountObserver(this); 627c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal return mController.getAccount(); 637c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal } 647c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal 657c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal @Override 667c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal public final void onChanged() { 67ca9b3f6c4a6611ccf89016f63ecf672f2f008820Vikram Aggarwal if (mController == null) { 68ca9b3f6c4a6611ccf89016f63ecf672f2f008820Vikram Aggarwal return; 69ca9b3f6c4a6611ccf89016f63ecf672f2f008820Vikram Aggarwal } 707c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal onChanged(mController.getAccount()); 717c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal } 727c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal 737c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal /** 747c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * Callback invoked when the account object is changed. Since {@link Account} objects are 757c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * immutable, updates can be received on changes to individual settings (sync on/off) 767c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * in addition to changes of accounts: alice@example.com -> bob@example.com. 777c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * The updated account is passed as the argument. 787c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * @param newAccount 797c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal */ 807c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal public abstract void onChanged(Account newAccount); 817c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal 827c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal /** 837c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * Return the most current account. 847c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * @return 857c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal */ 867c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal public final Account getAccount() { 87ca9b3f6c4a6611ccf89016f63ecf672f2f008820Vikram Aggarwal if (mController == null) { 88ca9b3f6c4a6611ccf89016f63ecf672f2f008820Vikram Aggarwal return null; 89ca9b3f6c4a6611ccf89016f63ecf672f2f008820Vikram Aggarwal } 907c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal return mController.getAccount(); 917c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal } 927c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal 937c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal /** 947c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal * Unregisters for account changes and makes the object unusable. 957c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal */ 967c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal public void unregisterAndDestroy() { 97ca9b3f6c4a6611ccf89016f63ecf672f2f008820Vikram Aggarwal if (mController == null) { 98ca9b3f6c4a6611ccf89016f63ecf672f2f008820Vikram Aggarwal return; 99ca9b3f6c4a6611ccf89016f63ecf672f2f008820Vikram Aggarwal } 1007c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal mController.unregisterAccountObserver(this); 1017c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal } 1027c401b7896910c00e6234e8774aab0be45740d32Vikram Aggarwal}