/*
* 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.app.NotificationManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.NotificationCompat;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import com.facebook.common.executors.UiThreadImmediateExecutorService;
import com.facebook.common.references.CloseableReference;
import com.facebook.datasource.DataSource;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.fresco.samples.showcase.BaseShowcaseFragment;
import com.facebook.fresco.samples.showcase.R;
import com.facebook.imagepipeline.core.ImagePipeline;
import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber;
import com.facebook.imagepipeline.image.CloseableImage;
import com.facebook.imagepipeline.request.ImageRequest;
/**
* Fragment that illustrates how to use the image pipeline directly in order to create
* notifications.
*/
public class ImagePipelineNotificationFragment extends BaseShowcaseFragment {
private static final int NOTIFICATION_ID = 1;
private static final Uri URI =
Uri.parse("http://frescolib.org/static/sample-images/animal_b_s.jpg");
@Nullable
@Override
public View onCreateView(
LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_imagepipeline_notification, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
final Button button = (Button) view.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
createNotification();
}
});
}
private void createNotification() {
final ImagePipeline imagePipeline = Fresco.getImagePipeline();
final ImageRequest imageRequest = ImageRequest.fromUri(URI);
final DataSource<CloseableReference<CloseableImage>> dataSource =
imagePipeline.fetchDecodedImage(imageRequest, null);
dataSource.subscribe(
new BaseBitmapDataSubscriber() {
@Override
protected void onNewResultImpl(Bitmap bitmap) {
displayNotification(bitmap);
}
@Override
protected void onFailureImpl(DataSource<CloseableReference<CloseableImage>> dataSource) {
showToastText("Failed to fetch image directly: " + dataSource.getFailureCause());
// In general, failing to fetch the image should not keep us from displaying the
// notification. We proceed without the bitmap.
displayNotification(null);
}
},
UiThreadImmediateExecutorService.getInstance());
}
private void displayNotification(@Nullable Bitmap bitmap) {
final NotificationCompat.Builder notificationBuilder =
new NotificationCompat.Builder(getContext())
.setSmallIcon(R.drawable.ic_done)
.setLargeIcon(bitmap)
.setContentTitle(getString(R.string.imagepipeline_notification_content_title))
.setContentText(getString(R.string.imagepipeline_notification_content_text));
final NotificationManager notificationManager =
(NotificationManager) getContext().getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
}
private void showToastText(String text) {
Toast.makeText(getContext(), text, Toast.LENGTH_SHORT).show();
}
@Override
public int getTitleId() {
return R.string.imagepipeline_notification_title;
}
}