/* * Copyright (C) 2015 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.messaging.datamodel.media; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import com.android.messaging.Factory; import com.android.messaging.util.Assert; import com.android.messaging.util.ContentType; import com.android.messaging.util.LogUtil; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; /** * Serves network content URI based image requests. */ public class NetworkUriImageRequest extends ImageRequest { public NetworkUriImageRequest(Context context, D descriptor) { super(context, descriptor); mOrientation = android.media.ExifInterface.ORIENTATION_UNDEFINED; } @Override protected InputStream getInputStreamForResource() throws FileNotFoundException { Assert.isNotMainThread(); // Since we need to have an open urlConnection to get the stream, but we don't want to keep // that connection open. There is no good way to perform this method. return null; } @Override protected boolean isGif() throws FileNotFoundException { Assert.isNotMainThread(); HttpURLConnection connection = null; try { final URL url = new URL(mDescriptor.uri.toString()); connection = (HttpURLConnection) url.openConnection(); connection.connect(); if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { return ContentType.IMAGE_GIF.equalsIgnoreCase(connection.getContentType()); } } catch (MalformedURLException e) { LogUtil.e(LogUtil.BUGLE_TAG, "MalformedUrl for image with url: " + mDescriptor.uri.toString(), e); } catch (IOException e) { LogUtil.e(LogUtil.BUGLE_TAG, "IOException trying to get inputStream for image with url: " + mDescriptor.uri.toString(), e); } finally { if (connection != null) { connection.disconnect(); } } return false; } @SuppressWarnings("deprecation") @Override public Bitmap loadBitmapInternal() throws IOException { Assert.isNotMainThread(); InputStream inputStream = null; Bitmap bitmap = null; HttpURLConnection connection = null; try { final URL url = new URL(mDescriptor.uri.toString()); connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { bitmap = BitmapFactory.decodeStream(connection.getInputStream()); } } catch (MalformedURLException e) { LogUtil.e(LogUtil.BUGLE_TAG, "MalformedUrl for image with url: " + mDescriptor.uri.toString(), e); } catch (final OutOfMemoryError e) { LogUtil.e(LogUtil.BUGLE_TAG, "OutOfMemoryError for image with url: " + mDescriptor.uri.toString(), e); Factory.get().reclaimMemory(); } catch (IOException e) { LogUtil.e(LogUtil.BUGLE_TAG, "IOException trying to get inputStream for image with url: " + mDescriptor.uri.toString(), e); } finally { if (inputStream != null) { inputStream.close(); } if (connection != null) { connection.disconnect(); } } return bitmap; } }