109 lines
3.4 KiB
Java
109 lines
3.4 KiB
Java
/*
|
|
* Copyright (C) 2010 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.email.data;
|
|
|
|
import com.android.email.Throttle;
|
|
import com.android.emailcommon.Logging;
|
|
|
|
import android.content.Context;
|
|
import android.content.CursorLoader;
|
|
import android.database.Cursor;
|
|
import android.net.Uri;
|
|
import android.os.Handler;
|
|
import android.util.Log;
|
|
|
|
/**
|
|
* A {@link CursorLoader} variant that throttle auto-requery on content changes using
|
|
* {@link Throttle}.
|
|
*/
|
|
public class ThrottlingCursorLoader extends CursorLoader {
|
|
private final Throttle mThrottle;
|
|
|
|
/** Constructor with default timeout */
|
|
public ThrottlingCursorLoader(Context context, Uri uri, String[] projection, String selection,
|
|
String[] selectionArgs, String sortOrder) {
|
|
this(context, uri, projection, selection, selectionArgs, sortOrder,
|
|
Throttle.DEFAULT_MIN_TIMEOUT, Throttle.DEFAULT_MAX_TIMEOUT);
|
|
}
|
|
|
|
/** Constructor that takes custom timeout */
|
|
public ThrottlingCursorLoader(Context context, Uri uri, String[] projection, String selection,
|
|
String[] selectionArgs, String sortOrder, int minTimeout, int maxTimeout) {
|
|
super(context, uri, projection, selection, selectionArgs, sortOrder);
|
|
|
|
Runnable forceLoadRunnable = new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
callSuperOnContentChanged();
|
|
}
|
|
};
|
|
mThrottle = new Throttle(uri.toString(), forceLoadRunnable, new Handler(),
|
|
minTimeout, maxTimeout);
|
|
}
|
|
|
|
private void debugLog(String message) {
|
|
Log.d(Logging.LOG_TAG, "ThrottlingCursorLoader: [" + getUri() + "] " + message);
|
|
}
|
|
|
|
@Override
|
|
protected void onStartLoading() {
|
|
if (Throttle.DEBUG) debugLog("startLoading");
|
|
mThrottle.cancelScheduledCallback();
|
|
super.onStartLoading();
|
|
}
|
|
|
|
@Override
|
|
protected void onForceLoad() {
|
|
if (Throttle.DEBUG) debugLog("forceLoad");
|
|
mThrottle.cancelScheduledCallback();
|
|
super.onForceLoad();
|
|
}
|
|
|
|
@Override
|
|
protected void onStopLoading() {
|
|
if (Throttle.DEBUG) debugLog("stopLoading");
|
|
mThrottle.cancelScheduledCallback();
|
|
super.onStopLoading();
|
|
}
|
|
|
|
@Override
|
|
public void onCanceled(Cursor cursor) {
|
|
if (Throttle.DEBUG) debugLog("onCancelled");
|
|
mThrottle.cancelScheduledCallback();
|
|
super.onCanceled(cursor);
|
|
}
|
|
|
|
@Override
|
|
protected void onReset() {
|
|
if (Throttle.DEBUG) debugLog("onReset");
|
|
mThrottle.cancelScheduledCallback();
|
|
super.onReset();
|
|
}
|
|
|
|
@Override
|
|
public void onContentChanged() {
|
|
if (Throttle.DEBUG) debugLog("onContentChanged");
|
|
|
|
mThrottle.onEvent();
|
|
}
|
|
|
|
private void callSuperOnContentChanged() {
|
|
if (Throttle.DEBUG) debugLog("callSuperOnContentChanged");
|
|
super.onContentChanged();
|
|
}
|
|
}
|