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: case AttachmentTypeSelectorAdapter.ADD_CONTACT_INFO:
AttachmentManager.selectContactInfo(this, PICK_CONTACT_INFO); break; AttachmentManager.selectContactInfo(this, PICK_CONTACT_INFO); break;
case AttachmentTypeSelectorAdapter.TAKE_PHOTO: 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) { private void setSlide(@NonNull Slide slide) {
if (getSlideUri() != null) cleanup(getSlideUri()); if (getSlideUri() != null) cleanup(getSlideUri());
if (captureUri != null && slide.getUri() != captureUri) cleanup(captureUri); if (captureUri != null && !captureUri.equals(slide.getUri())) cleanup(captureUri);
this.captureUri = null; this.captureUri = null;
this.slide = Optional.of(slide); this.slide = Optional.of(slide);
@ -225,12 +225,12 @@ public class AttachmentManager {
return captureUri; return captureUri;
} }
public void capturePhoto(Activity activity, Recipients recipients, int requestCode) { public void capturePhoto(Activity activity, int requestCode) {
try { try {
Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (captureIntent.resolveActivity(activity.getPackageManager()) != null) { if (captureIntent.resolveActivity(activity.getPackageManager()) != null) {
if (captureUri == null) { if (captureUri == null) {
captureUri = PersistentBlobProvider.getInstance(context).createForExternal(recipients); captureUri = PersistentBlobProvider.getInstance(context).createForExternal();
} }
Log.w(TAG, "captureUri path is " + captureUri.getPath()); Log.w(TAG, "captureUri path is " + captureUri.getPath());
captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, captureUri); captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, captureUri);

View File

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