mirror of
https://github.com/oxen-io/session-android.git
synced 2025-10-24 01:21:09 +00:00
Support for direct photo capture from app.
Make the send button toggle to an attach button when the compose text and attachments are emmpty. Part of #520 Closes #3186 // FREEBIE
This commit is contained in:
@@ -23,6 +23,7 @@ import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.provider.ContactsContract;
|
||||
import android.provider.MediaStore;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
@@ -32,20 +33,23 @@ import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.components.ThumbnailView;
|
||||
import org.thoughtcrime.securesms.util.BitmapDecodingException;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
public class AttachmentManager {
|
||||
private final static String TAG = AttachmentManager.class.getSimpleName();
|
||||
|
||||
private final Context context;
|
||||
private final View attachmentView;
|
||||
private final ThumbnailView thumbnail;
|
||||
private final Button removeButton;
|
||||
private final SlideDeck slideDeck;
|
||||
private final Context context;
|
||||
private final View attachmentView;
|
||||
private final ThumbnailView thumbnail;
|
||||
private final Button removeButton;
|
||||
private final SlideDeck slideDeck;
|
||||
private final AttachmentListener attachmentListener;
|
||||
|
||||
private File captureFile;
|
||||
|
||||
public AttachmentManager(Activity view, AttachmentListener listener) {
|
||||
this.attachmentView = (View)view.findViewById(R.id.attachment_editor);
|
||||
this.attachmentView = view.findViewById(R.id.attachment_editor);
|
||||
this.thumbnail = (ThumbnailView)view.findViewById(R.id.attachment_thumbnail);
|
||||
this.removeButton = (Button)view.findViewById(R.id.remove_image_button);
|
||||
this.slideDeck = new SlideDeck();
|
||||
@@ -61,6 +65,11 @@ public class AttachmentManager {
|
||||
attachmentListener.onAttachmentChanged();
|
||||
}
|
||||
|
||||
public void cleanup() {
|
||||
if (captureFile != null) captureFile.delete();
|
||||
captureFile = null;
|
||||
}
|
||||
|
||||
public void setImage(Uri image) throws IOException, BitmapDecodingException {
|
||||
setMedia(new ImageSlide(context, image));
|
||||
}
|
||||
@@ -78,6 +87,7 @@ public class AttachmentManager {
|
||||
slideDeck.addSlide(slide);
|
||||
attachmentView.setVisibility(View.VISIBLE);
|
||||
thumbnail.setImageResource(slide);
|
||||
attachmentListener.onAttachmentChanged();
|
||||
}
|
||||
|
||||
public boolean isAttachmentPresent() {
|
||||
@@ -88,6 +98,24 @@ public class AttachmentManager {
|
||||
return slideDeck;
|
||||
}
|
||||
|
||||
public File getCaptureFile() {
|
||||
return captureFile;
|
||||
}
|
||||
|
||||
public void capturePhoto(Activity activity, int requestCode) {
|
||||
try {
|
||||
Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
||||
|
||||
if (captureIntent.resolveActivity(activity.getPackageManager()) != null) {
|
||||
captureFile = File.createTempFile(String.valueOf(System.currentTimeMillis()), ".jpg", activity.getExternalFilesDir(null));
|
||||
captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(captureFile));
|
||||
activity.startActivityForResult(captureIntent, requestCode);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.w(TAG, e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void selectVideo(Activity activity, int requestCode) {
|
||||
selectMediaType(activity, "video/*", requestCode);
|
||||
}
|
||||
@@ -132,6 +160,7 @@ public class AttachmentManager {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
clear();
|
||||
cleanup();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ public class AttachmentTypeSelectorAdapter extends ArrayAdapter<AttachmentTypeSe
|
||||
public static final int ADD_VIDEO = 2;
|
||||
public static final int ADD_SOUND = 3;
|
||||
public static final int ADD_CONTACT_INFO = 4;
|
||||
public static final int TAKE_PHOTO = 5;
|
||||
|
||||
private final Context context;
|
||||
|
||||
@@ -71,10 +72,11 @@ public class AttachmentTypeSelectorAdapter extends ArrayAdapter<AttachmentTypeSe
|
||||
|
||||
private static List<IconListItem> getItemList(Context context) {
|
||||
List<IconListItem> data = new ArrayList<>(4);
|
||||
addItem(data, context.getString(R.string.AttachmentTypeSelectorAdapter_picture), ResUtil.getDrawableRes(context, R.attr.conversation_attach_image), ADD_IMAGE);
|
||||
addItem(data, context.getString(R.string.AttachmentTypeSelectorAdapter_video), ResUtil.getDrawableRes(context, R.attr.conversation_attach_video), ADD_VIDEO);
|
||||
addItem(data, context.getString(R.string.AttachmentTypeSelectorAdapter_audio), ResUtil.getDrawableRes(context, R.attr.conversation_attach_sound), ADD_SOUND);
|
||||
addItem(data, context.getString(R.string.AttachmentTypeSelectorAdapter_contact), ResUtil.getDrawableRes(context, R.attr.conversation_attach_contact_info), ADD_CONTACT_INFO);
|
||||
addItem(data, context.getString(R.string.AttachmentTypeSelectorAdapter_take_photo), ResUtil.getDrawableRes(context, R.attr.conversation_attach_photo), TAKE_PHOTO);
|
||||
addItem(data, context.getString(R.string.AttachmentTypeSelectorAdapter_picture), ResUtil.getDrawableRes(context, R.attr.conversation_attach_image), ADD_IMAGE);
|
||||
addItem(data, context.getString(R.string.AttachmentTypeSelectorAdapter_video), ResUtil.getDrawableRes(context, R.attr.conversation_attach_video), ADD_VIDEO);
|
||||
addItem(data, context.getString(R.string.AttachmentTypeSelectorAdapter_audio), ResUtil.getDrawableRes(context, R.attr.conversation_attach_sound), ADD_SOUND);
|
||||
addItem(data, context.getString(R.string.AttachmentTypeSelectorAdapter_contact), ResUtil.getDrawableRes(context, R.attr.conversation_attach_contact_info), ADD_CONTACT_INFO);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user