/*
* This file provided by Facebook is for non-commercial testing and evaluation
* purposes only. Facebook reserves all rights not expressly granted.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.facebook.fresco.samples.showcase.imagepipeline;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import com.facebook.common.executors.UiThreadImmediateExecutorService;
import com.facebook.datasource.BaseDataSubscriber;
import com.facebook.datasource.DataSource;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.fresco.samples.showcase.BaseShowcaseFragment;
import com.facebook.fresco.samples.showcase.R;
import com.facebook.imagepipeline.request.ImageRequest;
/**
* Fragment that illustrates how to prefetch images to disk cache so that they load faster when
* finally displayed.
*/
public class ImagePipelinePrefetchFragment extends BaseShowcaseFragment {
private static final String[] URLS = {
"http://frescolib.org/static/sample-images/animal_a.png",
"http://frescolib.org/static/sample-images/animal_c.png",
};
private Button mPrefetchButton;
private TextView mPrefetchStatus;
private ViewGroup mDraweesHolder;
@Override
public int getTitleId() {
return R.string.imagepipeline_prefetch_title;
}
private class PrefetchSubscriber extends BaseDataSubscriber<Void> {
private int mSuccessful = 0;
private int mFailed = 0;
@Override
protected void onNewResultImpl(DataSource<Void> dataSource) {
mSuccessful++;
updateDisplay();
}
@Override
protected void onFailureImpl(DataSource<Void> dataSource) {
mFailed++;
updateDisplay();
}
private void updateDisplay() {
if (mSuccessful + mFailed == URLS.length) {
mPrefetchButton.setEnabled(true);
}
mPrefetchStatus.setText(
getString(R.string.prefetch_status, mSuccessful, URLS.length, mFailed));
}
}
public ImagePipelinePrefetchFragment() {
// Required empty public constructor
}
@Override
public @Nullable View onCreateView(
LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_imagepipeline_prefetch, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final Button clearCacheButton = (Button) view.findViewById(R.id.clear_cache);
clearCacheButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (String url : URLS) {
Fresco.getImagePipeline().evictFromCache(Uri.parse(url));
}
}
});
mPrefetchStatus = (TextView) view.findViewById(R.id.prefetch_status);
mPrefetchButton = (Button) view.findViewById(R.id.prefetch_now);
mPrefetchButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPrefetchButton.setEnabled(false);
final PrefetchSubscriber subscriber = new PrefetchSubscriber();
for (String url : URLS) {
final DataSource<Void> ds =
Fresco.getImagePipeline().prefetchToDiskCache(ImageRequest.fromUri(url), null);
ds.subscribe(subscriber, UiThreadImmediateExecutorService.getInstance());
}
}
});
mDraweesHolder = (ViewGroup) view.findViewById(R.id.drawees);
Button toggleImages = (Button) view.findViewById(R.id.toggle_images);
toggleImages.setOnClickListener(new View.OnClickListener() {
private boolean mShowing = false;
@Override
public void onClick(View v) {
if (!mShowing) {
for (int i = 0; i < mDraweesHolder.getChildCount(); i++) {
((SimpleDraweeView) mDraweesHolder.getChildAt(i)).setImageURI(URLS[i]);
}
} else {
for (int i = 0; i < mDraweesHolder.getChildCount(); i++) {
((SimpleDraweeView) mDraweesHolder.getChildAt(i)).setController(null);
}
}
mShowing = !mShowing;
}
});
}
}