package im.actor.sdk.controllers.tools;
import android.content.DialogInterface;
import android.content.Intent;
import android.support.v7.app.AlertDialog;
import android.widget.Toast;
import java.io.UnsupportedEncodingException;
import im.actor.core.entity.Peer;
import im.actor.core.viewmodel.CommandCallback;
import im.actor.core.viewmodel.GroupVM;
import im.actor.runtime.HTTP;
import im.actor.runtime.function.Consumer;
import im.actor.runtime.http.HTTPResponse;
import im.actor.runtime.json.JSONException;
import im.actor.runtime.json.JSONObject;
import im.actor.sdk.ActorSDK;
import im.actor.sdk.R;
import im.actor.sdk.controllers.Intents;
import im.actor.sdk.controllers.activity.BaseActivity;
import static im.actor.sdk.util.ActorSDKMessenger.groups;
import static im.actor.sdk.util.ActorSDKMessenger.messenger;
public class InviteHandler {
public static void handleIntent(BaseActivity activity, Intent intent) {
if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_VIEW) && intent.getData() != null) {
String joinGroupUrl = intent.getData().toString();
if (joinGroupUrl != null && (joinGroupUrl.contains("join") || joinGroupUrl.contains("token"))) {
String[] urlSplit = null;
if (joinGroupUrl.contains("join")) {
urlSplit = joinGroupUrl.split("/join/");
} else if (joinGroupUrl.contains("token")) {
urlSplit = joinGroupUrl.split("token=");
}
if (urlSplit != null) {
joinGroupUrl = urlSplit[urlSplit.length - 1];
final String token = joinGroupUrl;
HTTP.getMethod(ActorSDK.sharedActor().getInviteDataUrl() + joinGroupUrl, 0, 0, 0).then(new Consumer<HTTPResponse>() {
@Override
public void apply(HTTPResponse httpResponse) {
try {
JSONObject data = new JSONObject(new String(httpResponse.getContent(), "UTF-8"));
JSONObject group = data.getJSONObject("group");
String title = group.getString("title");
if (group.has("id") && group.has("isPublic")) {
int gid = group.getInt("id");
boolean isPublic = group.getBoolean("isPublic");
//Check if we have this group
try {
GroupVM groupVM = groups().get(gid);
if (groupVM.isMember().get() || isPublic) {
//Have this group, is member or group is public, just open it
activity.startActivity(Intents.openDialog(Peer.group(gid), false, activity));
} else {
//Have this group, but not member, join it
joinViaToken(token, title, activity);
}
} catch (Exception e) {
//Do not have this group, join it
if (isPublic) {
messenger().findPublicGroupById(gid).then(peer -> activity.startActivity(Intents.openDialog(peer, false, activity)));
} else {
joinViaToken(token, title, activity);
}
}
} else {
joinViaToken(token, title, activity);
}
} catch (JSONException | UnsupportedEncodingException e) {
e.printStackTrace();
}
}
});
}
}
}
}
private static void joinViaToken(String joinGroupUrl, String title, BaseActivity activity) {
AlertDialog.Builder b = new AlertDialog.Builder(activity);
b.setTitle(activity.getString(R.string.invite_link_join_confirm, title))
.setPositiveButton(R.string.dialog_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
activity.execute(messenger().joinGroupViaToken(joinGroupUrl), R.string.invite_link_title, new CommandCallback<Integer>() {
@Override
public void onResult(Integer res) {
activity.startActivity(Intents.openGroupDialog(res, true, activity));
}
@Override
public void onError(Exception e) {
Toast.makeText(activity, e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
})
.setNegativeButton(R.string.dialog_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
}).show();
}
}