Don't crash on rotation when cropping a profile picture
Bug: 8910780 Keep track of pending activity result and avoid deleting the intermediate file. Change-Id: I56f63e1348c8b1f5229ad3e135016b8b75d3a335
This commit is contained in:
@@ -66,6 +66,7 @@ import java.util.List;
|
|||||||
public class RestrictedProfileSettings extends AppRestrictionsFragment {
|
public class RestrictedProfileSettings extends AppRestrictionsFragment {
|
||||||
|
|
||||||
private static final String KEY_SAVED_PHOTO = "pending_photo";
|
private static final String KEY_SAVED_PHOTO = "pending_photo";
|
||||||
|
private static final String KEY_AWAITING_RESULT = "awaiting_result";
|
||||||
private static final int DIALOG_ID_EDIT_USER_INFO = 1;
|
private static final int DIALOG_ID_EDIT_USER_INFO = 1;
|
||||||
public static final String FILE_PROVIDER_AUTHORITY = "com.android.settings.files";
|
public static final String FILE_PROVIDER_AUTHORITY = "com.android.settings.files";
|
||||||
|
|
||||||
@@ -76,6 +77,7 @@ public class RestrictedProfileSettings extends AppRestrictionsFragment {
|
|||||||
private Dialog mEditUserInfoDialog;
|
private Dialog mEditUserInfoDialog;
|
||||||
private EditUserPhotoController mEditUserPhotoController;
|
private EditUserPhotoController mEditUserPhotoController;
|
||||||
private Bitmap mSavedPhoto;
|
private Bitmap mSavedPhoto;
|
||||||
|
private boolean mWaitingForActivityResult;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle icicle) {
|
public void onCreate(Bundle icicle) {
|
||||||
@@ -83,6 +85,7 @@ public class RestrictedProfileSettings extends AppRestrictionsFragment {
|
|||||||
|
|
||||||
if (icicle != null) {
|
if (icicle != null) {
|
||||||
mSavedPhoto = (Bitmap) icicle.getParcelable(KEY_SAVED_PHOTO);
|
mSavedPhoto = (Bitmap) icicle.getParcelable(KEY_SAVED_PHOTO);
|
||||||
|
mWaitingForActivityResult = icicle.getBoolean(KEY_AWAITING_RESULT, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
init(icicle);
|
init(icicle);
|
||||||
@@ -111,6 +114,9 @@ public class RestrictedProfileSettings extends AppRestrictionsFragment {
|
|||||||
outState.putParcelable(KEY_SAVED_PHOTO,
|
outState.putParcelable(KEY_SAVED_PHOTO,
|
||||||
mEditUserPhotoController.getNewUserPhotoBitmap());
|
mEditUserPhotoController.getNewUserPhotoBitmap());
|
||||||
}
|
}
|
||||||
|
if (mWaitingForActivityResult) {
|
||||||
|
outState.putBoolean(KEY_AWAITING_RESULT, mWaitingForActivityResult);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -123,9 +129,16 @@ public class RestrictedProfileSettings extends AppRestrictionsFragment {
|
|||||||
getCircularUserIcon());
|
getCircularUserIcon());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void startActivityForResult(Intent intent, int requestCode) {
|
||||||
|
mWaitingForActivityResult = true;
|
||||||
|
super.startActivityForResult(intent, requestCode);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
mWaitingForActivityResult = false;
|
||||||
|
|
||||||
if (mEditUserInfoDialog != null && mEditUserInfoDialog.isShowing()
|
if (mEditUserInfoDialog != null && mEditUserInfoDialog.isShowing()
|
||||||
&& mEditUserPhotoController.onActivityResult(requestCode, resultCode, data)) {
|
&& mEditUserPhotoController.onActivityResult(requestCode, resultCode, data)) {
|
||||||
@@ -168,9 +181,8 @@ public class RestrictedProfileSettings extends AppRestrictionsFragment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
userPhotoView.setImageDrawable(drawable);
|
userPhotoView.setImageDrawable(drawable);
|
||||||
|
|
||||||
mEditUserPhotoController = new EditUserPhotoController(this, userPhotoView,
|
mEditUserPhotoController = new EditUserPhotoController(this, userPhotoView,
|
||||||
mSavedPhoto, drawable);
|
mSavedPhoto, drawable, mWaitingForActivityResult);
|
||||||
|
|
||||||
mEditUserInfoDialog = new AlertDialog.Builder(getActivity())
|
mEditUserInfoDialog = new AlertDialog.Builder(getActivity())
|
||||||
.setTitle(R.string.profile_info_settings_title)
|
.setTitle(R.string.profile_info_settings_title)
|
||||||
@@ -262,12 +274,12 @@ public class RestrictedProfileSettings extends AppRestrictionsFragment {
|
|||||||
private Drawable mNewUserPhotoDrawable;
|
private Drawable mNewUserPhotoDrawable;
|
||||||
|
|
||||||
public EditUserPhotoController(Fragment fragment, ImageView view,
|
public EditUserPhotoController(Fragment fragment, ImageView view,
|
||||||
Bitmap bitmap, Drawable drawable) {
|
Bitmap bitmap, Drawable drawable, boolean waiting) {
|
||||||
mContext = view.getContext();
|
mContext = view.getContext();
|
||||||
mFragment = fragment;
|
mFragment = fragment;
|
||||||
mImageView = view;
|
mImageView = view;
|
||||||
mCropPictureUri = createTempImageUri(mContext, CROP_PICTURE_FILE_NAME);
|
mCropPictureUri = createTempImageUri(mContext, CROP_PICTURE_FILE_NAME, !waiting);
|
||||||
mTakePictureUri = createTempImageUri(mContext, TAKE_PICTURE_FILE_NAME);
|
mTakePictureUri = createTempImageUri(mContext, TAKE_PICTURE_FILE_NAME, !waiting);
|
||||||
mPhotoSize = getPhotoSize(mContext);
|
mPhotoSize = getPhotoSize(mContext);
|
||||||
mImageView.setOnClickListener(new OnClickListener() {
|
mImageView.setOnClickListener(new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
@@ -487,11 +499,13 @@ public class RestrictedProfileSettings extends AppRestrictionsFragment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Uri createTempImageUri(Context context, String fileName) {
|
private Uri createTempImageUri(Context context, String fileName, boolean purge) {
|
||||||
final File folder = context.getCacheDir();
|
final File folder = context.getCacheDir();
|
||||||
folder.mkdirs();
|
folder.mkdirs();
|
||||||
final File fullPath = new File(folder, fileName);
|
final File fullPath = new File(folder, fileName);
|
||||||
fullPath.delete();
|
if (purge) {
|
||||||
|
fullPath.delete();
|
||||||
|
}
|
||||||
final Uri fileUri =
|
final Uri fileUri =
|
||||||
FileProvider.getUriForFile(context, FILE_PROVIDER_AUTHORITY, fullPath);
|
FileProvider.getUriForFile(context, FILE_PROVIDER_AUTHORITY, fullPath);
|
||||||
return fileUri;
|
return fileUri;
|
||||||
|
Reference in New Issue
Block a user