prevent overwriting external capture URIs

Closes #4719
fixes #4538
// FREEBIE
This commit is contained in:
Jake McGinty 2015-11-23 17:56:41 -08:00 committed by Moxie Marlinspike
parent bde838d35a
commit 7625ba919e
3 changed files with 7 additions and 12 deletions

View File

@ -995,7 +995,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
case AttachmentTypeSelectorAdapter.ADD_CONTACT_INFO:
AttachmentManager.selectContactInfo(this, PICK_CONTACT_INFO); break;
case AttachmentTypeSelectorAdapter.TAKE_PHOTO:
attachmentManager.capturePhoto(this, recipients, TAKE_PHOTO); break;
attachmentManager.capturePhoto(this, TAKE_PHOTO); break;
}
}

View File

@ -126,8 +126,8 @@ public class AttachmentManager {
}
private void setSlide(@NonNull Slide slide) {
if (getSlideUri() != null) cleanup(getSlideUri());
if (captureUri != null && slide.getUri() != captureUri) cleanup(captureUri);
if (getSlideUri() != null) cleanup(getSlideUri());
if (captureUri != null && !captureUri.equals(slide.getUri())) cleanup(captureUri);
this.captureUri = null;
this.slide = Optional.of(slide);
@ -225,12 +225,12 @@ public class AttachmentManager {
return captureUri;
}
public void capturePhoto(Activity activity, Recipients recipients, int requestCode) {
public void capturePhoto(Activity activity, int requestCode) {
try {
Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (captureIntent.resolveActivity(activity.getPackageManager()) != null) {
if (captureUri == null) {
captureUri = PersistentBlobProvider.getInstance(context).createForExternal(recipients);
captureUri = PersistentBlobProvider.getInstance(context).createForExternal();
}
Log.w(TAG, "captureUri path is " + captureUri.getPath());
captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, captureUri);

View File

@ -97,10 +97,9 @@ public class PersistentBlobProvider {
});
}
public Uri createForExternal(@NonNull Recipients recipients) throws IOException {
return Uri.fromFile(new File(getExternalDir(context), String.valueOf(generateId(recipients)) + ".jpg"))
public Uri createForExternal() throws IOException {
return Uri.fromFile(new File(getExternalDir(context), String.valueOf(System.currentTimeMillis()) + ".jpg"))
.buildUpon()
.appendQueryParameter("unique", String.valueOf(System.currentTimeMillis()))
.build();
}
@ -121,10 +120,6 @@ public class PersistentBlobProvider {
: new DecryptingPartInputStream(getFile(id), masterSecret);
}
private int generateId(Recipients recipients) {
return Math.abs(Arrays.hashCode(recipients.getIds()));
}
private File getFile(long id) {
return new File(context.getDir("captures", Context.MODE_PRIVATE), id + ".jpg");
}