Fix bug #17459965 Take photo for Profile twice leads to "A resource was acquired at attached stack trace but never released

- close the stream properly in all cases

Change-Id: I3a593be534ea444a2e2659458918cce221891456
This commit is contained in:
Fabrice Di Meglio
2014-09-10 16:35:36 -07:00
parent 1e7dbd455e
commit 2a8f7cb736

View File

@@ -35,6 +35,7 @@ import android.os.AsyncTask;
import android.provider.MediaStore; import android.provider.MediaStore;
import android.provider.ContactsContract.DisplayPhoto; import android.provider.ContactsContract.DisplayPhoto;
import android.support.v4.content.FileProvider; import android.support.v4.content.FileProvider;
import android.util.Log;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.widget.AdapterView; import android.widget.AdapterView;
@@ -48,11 +49,14 @@ import com.android.settings.drawable.CircleFramedDrawable;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class EditUserPhotoController { public class EditUserPhotoController {
private static final String TAG = "EditUserPhotoController";
private static final int POPUP_LIST_ITEM_ID_CHOOSE_PHOTO = 1; private static final int POPUP_LIST_ITEM_ID_CHOOSE_PHOTO = 1;
private static final int POPUP_LIST_ITEM_ID_TAKE_PHOTO = 2; private static final int POPUP_LIST_ITEM_ID_TAKE_PHOTO = 2;
@@ -239,12 +243,22 @@ public class EditUserPhotoController {
@Override @Override
protected Bitmap doInBackground(Void... params) { protected Bitmap doInBackground(Void... params) {
if (cropped) { if (cropped) {
InputStream imageStream = null;
try { try {
InputStream imageStream = mContext.getContentResolver() imageStream = mContext.getContentResolver()
.openInputStream(data); .openInputStream(data);
return BitmapFactory.decodeStream(imageStream); return BitmapFactory.decodeStream(imageStream);
} catch (FileNotFoundException fe) { } catch (FileNotFoundException fe) {
Log.w(TAG, "Cannot find image file", fe);
return null; return null;
} finally {
if (imageStream != null) {
try {
imageStream.close();
} catch (IOException ioe) {
Log.w(TAG, "Cannot close image stream", ioe);
}
}
} }
} else { } else {
// Scale and crop to a square aspect ratio // Scale and crop to a square aspect ratio