158cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal/* 258cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * Copyright (C) 2012 Google Inc. 358cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * Licensed to The Android Open Source Project. 458cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * 558cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * Licensed under the Apache License, Version 2.0 (the "License"); 658cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * you may not use this file except in compliance with the License. 758cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * You may obtain a copy of the License at 858cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * 958cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * http://www.apache.org/licenses/LICENSE-2.0 1058cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * 1158cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * Unless required by applicable law or agreed to in writing, software 1258cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * distributed under the License is distributed on an "AS IS" BASIS, 1358cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1458cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * See the License for the specific language governing permissions and 1558cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * limitations under the License. 1658cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal */ 1758cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal 1858cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwalpackage com.android.mail.providers; 1958cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal 2058cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwalimport android.database.DataSetObserver; 2158cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal 2258cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwalimport com.android.mail.ui.RecentFolderController; 2358cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwalimport com.android.mail.ui.RecentFolderList; 2458cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwalimport com.android.mail.utils.LogTag; 2558cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwalimport com.android.mail.utils.LogUtils; 2658cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal 2758cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal/** 2858cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * A simple extension of {@link DataSetObserver} to provide the updated recent folders 2958cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * {@link #onChanged()} when they change. Initializing the object registers with 3058cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * the observer with the {@link RecentFolderObserver} provided. The object will then begin to 3158cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * receive {@link #onChanged()} till {@link #unregisterAndDestroy()} is called. 3258cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * The {@link RecentFolderList} returned in {@link #initialize(RecentFolderController)} is updated 3358cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * directly, no new object is created when the recent folder list is updated. 3458cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * <p> 3558cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * To implement an {@link RecentFolderObserver}, you need to implement the 3658cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * {@link #onChanged()} method. 3758cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal */ 3858cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwalpublic abstract class RecentFolderObserver extends DataSetObserver { 3958cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal /** 4058cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * The RecentFolderController that the observer is registered with. 4158cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal */ 4258cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal private RecentFolderController mController; 4358cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal 4458cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal private static final String LOG_TAG = LogTag.getLogTag(); 4558cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal 4658cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal /** 4758cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * The no-argument constructor leaves the object unusable till 4858cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * {@link #initialize(RecentFolderController)} is called. 4958cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal */ 5058cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal public RecentFolderObserver () { 5158cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal } 5258cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal 5358cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal /** 5458cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * Initializes an {@link RecentFolderObserver} object that receives a call to 5558cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * {@link #onChanged()} when the controller changes the recent folder. 5658cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * 5758cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * @param controller 5858cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal */ 5958cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal public RecentFolderList initialize(RecentFolderController controller) { 6058cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal if (controller == null) { 6158cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal LogUtils.wtf(LOG_TAG, "RecentFolderObserver initialized with null controller!"); 6258cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal } 6358cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal mController = controller; 6458cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal mController.registerRecentFolderObserver(this); 6558cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal return mController.getRecentFolders(); 6658cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal } 6758cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal 6858cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal @Override 6958cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal public abstract void onChanged(); 7058cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal 7158cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal /** 7258cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * Return the most current recent folder. 7358cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * @return 7458cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal */ 7558cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal public final RecentFolderList getRecentFolders() { 7658cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal if (mController == null) { 7758cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal return null; 7858cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal } 7958cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal return mController.getRecentFolders(); 8058cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal } 8158cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal 8258cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal /** 8358cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal * Unregisters for recent folder changes and makes the object unusable. 8458cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal */ 8558cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal public void unregisterAndDestroy() { 8658cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal if (mController == null) { 8758cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal return; 8858cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal } 8958cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal mController.unregisterRecentFolderObserver(this); 9058cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal } 9158cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal}