blob: 172b9f51d6d9dea4c028ec257ee8ee70e629e238 [file] [log] [blame]
/*
* Copyright (C) 2017 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.documentsui.testing;
import android.app.LoaderManager;
import android.content.AsyncTaskLoader;
import android.content.Loader;
import android.content.Loader.OnLoadCompleteListener;
import android.os.Bundle;
import android.util.SparseArray;
import java.io.FileDescriptor;
import java.io.PrintWriter;
/**
* A test double of {@link LoaderManager} that doesn't kick off loading when {@link Loader} is
* created. If caller needs to kick off loading caller can obtain the loader initialized and
* explicitly call {@link Loader#startLoading()}.
*/
public class TestLoaderManager extends LoaderManager {
private final SparseArray<Loader> mLoaders = new SparseArray<>();
private final SparseArray<OnLoadCompleteListener> mListeners = new SparseArray<>();
@Override
public <D> Loader<D> initLoader(int id, Bundle args,
LoaderCallbacks<D> callback) {
Loader<D> loader = mLoaders.get(id);
OnLoadCompleteListener<D> listener = callback::onLoadFinished;
if (loader == null) {
loader = callback.onCreateLoader(id, args);
mLoaders.put(id, loader);
} else {
loader.unregisterListener(mListeners.get(id));
}
loader.registerListener(id, listener);
mListeners.put(id, listener);
return loader;
}
@Override
public <D> Loader<D> restartLoader(int id, Bundle args,
LoaderCallbacks<D> callback) {
if (mLoaders.get(id) != null) {
destroyLoader(id);
}
return initLoader(id, args, callback);
}
@Override
public void destroyLoader(int id) {
Loader loader = getLoader(id);
if (loader != null) {
loader.abandon();
mLoaders.remove(id);
mListeners.remove(id);
}
}
@Override
public <D> Loader<D> getLoader(int id) {
return mLoaders.get(id);
}
public <D> OnLoadCompleteListener<D> getListener(int id) {
return mListeners.get(id);
}
public void runAsyncTaskLoader(int id) {
AsyncTaskLoader loader = (AsyncTaskLoader) getLoader(id);
loader.startLoading();
}
@Override
public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
}
}