package im.actor.sdk.controllers;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.webkit.MimeTypeMap;
import java.io.File;
import java.io.FileOutputStream;
import im.actor.core.entity.FileReference;
import im.actor.core.entity.Peer;
import im.actor.core.utils.IOUtils;
import im.actor.sdk.controllers.contacts.AddContactActivity;
import im.actor.sdk.controllers.pickers.TakePhotoActivity;
import im.actor.sdk.controllers.conversation.ChatActivity;
import im.actor.sdk.controllers.group.GroupInfoActivity;
import im.actor.sdk.controllers.group.InviteLinkActivity;
import im.actor.sdk.controllers.fragment.preview.PictureActivity;
import im.actor.sdk.controllers.settings.EditAboutActivity;
import im.actor.sdk.controllers.settings.EditNameActivity;
public class Intents {
public static final String EXTRA_FORWARD_TEXT = "forward_text";
public static final String EXTRA_FORWARD_TEXT_RAW = "forward_text_raw";
public static final String EXTRA_FORWARD_CONTENT = "forward_content";
public static final String EXTRA_SHARE_USER = "share_user";
public static final String EXTRA_UID = "uid";
public static final String EXTRA_GROUP_ID = "group_id";
public static final String EXTRA_CHAT_PEER = "chat_peer";
public static final String EXTRA_CHAT_COMPOSE = "compose";
public static final String EXTRA_EDIT_TYPE = "edit_type";
public static final String EXTRA_EDIT_ID = "edit_id";
public static final int RESULT_DELETE = 0;
public static final int RESULT_IMAGE = 1;
public static final String EXTRA_ALLOW_DELETE = "allow_delete";
public static final String EXTRA_RESULT = "result";
public static final String EXTRA_IMAGE = "image";
public static Intent pickAvatar(boolean isAllowDelete, Context context) {
return new Intent(context, TakePhotoActivity.class)
.putExtra(EXTRA_ALLOW_DELETE, isAllowDelete);
}
public static Intent editMyName(Context context) {
return new Intent(context, EditNameActivity.class)
.putExtra(EXTRA_EDIT_TYPE, EditNameActivity.TYPE_ME)
.putExtra(EXTRA_EDIT_ID, 0);
}
public static Intent editUserName(int uid, Context context) {
return new Intent(context, EditNameActivity.class)
.putExtra(EXTRA_EDIT_TYPE, EditNameActivity.TYPE_USER)
.putExtra(EXTRA_EDIT_ID, uid);
}
public static Intent editGroupTitle(int groupId, Context context) {
return new Intent(context, EditNameActivity.class)
.putExtra(EXTRA_EDIT_TYPE, EditNameActivity.TYPE_GROUP)
.putExtra(EXTRA_EDIT_ID, groupId);
}
public static Intent editGroupTheme(int groupId, Context context) {
return new Intent(context, EditNameActivity.class)
.putExtra(EXTRA_EDIT_TYPE, EditNameActivity.TYPE_GROUP_THEME)
.putExtra(EXTRA_EDIT_ID, groupId);
}
public static Intent editUserAbout(Context context) {
return new Intent(context, EditAboutActivity.class)
.putExtra(EXTRA_EDIT_TYPE, EditAboutActivity.TYPE_ME)
.putExtra(EXTRA_EDIT_ID, 0);
}
public static Intent editUserNick(Context context) {
return new Intent(context, EditNameActivity.class)
.putExtra(EXTRA_EDIT_TYPE, EditNameActivity.TYPE_NICK);
}
public static Intent editGroupAbout(int groupId, Context context) {
return new Intent(context, EditAboutActivity.class)
.putExtra(EXTRA_EDIT_TYPE, EditAboutActivity.TYPE_GROUP)
.putExtra(EXTRA_EDIT_ID, groupId);
}
public static Intent openGroup(int chatId, Context context) {
Intent res = new Intent(context, GroupInfoActivity.class);
res.putExtra(EXTRA_GROUP_ID, chatId);
return res;
}
public static Intent inviteLink(int chatId, Context context) {
Intent res = new Intent(context, InviteLinkActivity.class);
res.putExtra(EXTRA_GROUP_ID, chatId);
return res;
}
public static Intent openDialog(Peer peer, boolean compose, Context context) {
final Intent intent = new Intent(context, ChatActivity.class);
intent.putExtra(EXTRA_CHAT_PEER, peer.getUnuqueId());
intent.putExtra(EXTRA_CHAT_COMPOSE, compose);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
return intent;
}
public static Intent openPrivateDialog(int uid, boolean compose, Context context) {
return openDialog(Peer.user(uid), compose, context);
}
public static Intent openGroupDialog(int chatId, boolean compose, Context context) {
return openDialog(Peer.group(chatId), compose, context);
}
public static Intent call(long phone) {
return call(phone + "");
}
public static Intent call(String phone) {
return new Intent(Intent.ACTION_DIAL).setData(Uri.parse("tel:+" + phone));
}
public static Intent findContacts(Context context) {
return new Intent(context, AddContactActivity.class);
}
// External intents
private static Uri getAvatarUri(FileReference location) {
return Uri.parse("content://im.actor.avatar/" + location.getFileId());
}
public static Intent openDoc(String fileName, String downloadFileName) {
String mimeType = MimeTypeMap.getSingleton()
.getMimeTypeFromExtension(IOUtils.getFileExtension(fileName));
if (mimeType == null) {
mimeType = "*/*";
}
return new Intent(Intent.ACTION_VIEW)
.setDataAndType(Uri.fromFile(new File(downloadFileName)), mimeType);
}
public static Intent shareDoc(String fileName, String downloadFileName) {
String mimeType = MimeTypeMap.getSingleton()
.getMimeTypeFromExtension(IOUtils.getFileExtension(fileName));
if (mimeType == null) {
mimeType = "*/*";
}
return new Intent(Intent.ACTION_SEND)
.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(downloadFileName)))
.setType(mimeType);
}
public static Intent shareAvatar(FileReference location) {
return new Intent(Intent.ACTION_SEND)
.putExtra(Intent.EXTRA_STREAM, getAvatarUri(location))
.setType("image/jpeg");
}
public static Intent openAvatar(FileReference location) {
return new Intent(Intent.ACTION_VIEW)
.setDataAndType(getAvatarUri(location), "image/jpeg");
}
public static Intent setAsAvatar(FileReference location) {
Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
intent.setDataAndType(getAvatarUri(location), "image/jpg");
intent.putExtra("mimeType", "image/jpg");
return intent;
}
public static Intent pickFile(Context context) {
return im.actor.sdk.controllers.pickers.Intents.pickFile(context);
}
public static Intent pickLocation(Context context) {
return im.actor.sdk.controllers.pickers.Intents.pickLocation(context);
}
public static void openMedia(Activity activity, View photoView, String path, int senderId) {
PictureActivity.launchPhoto(activity, photoView, path, senderId);
}
public static void savePicture(Context context, Bitmap bitmap) {
File actorPicturesFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
actorPicturesFolder = new File(actorPicturesFolder, "Actor");
actorPicturesFolder.mkdirs();
try {
File pictureFile = new File(actorPicturesFolder, System.currentTimeMillis() + ".jpg");
pictureFile.createNewFile();
FileOutputStream ostream = new FileOutputStream(pictureFile);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, ostream);
ostream.close();
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri contentUri = Uri.fromFile(pictureFile);
mediaScanIntent.setData(contentUri);
context.sendBroadcast(mediaScanIntent);
Log.d("Picture saving", "Saved as " + pictureFile.getPath());
} catch (Exception e) {
e.printStackTrace();
}
}
}