package im.actor.sdk.controllers.dialogs;
import android.app.Activity;
import android.support.v7.app.AlertDialog;
import android.widget.Toast;
import im.actor.core.entity.Dialog;
import im.actor.core.entity.GroupType;
import im.actor.core.entity.PeerType;
import im.actor.core.viewmodel.CommandCallback;
import im.actor.core.viewmodel.GroupVM;
import im.actor.runtime.actors.messages.Void;
import im.actor.sdk.ActorSDK;
import im.actor.sdk.ActorSDKLauncher;
import im.actor.sdk.R;
import im.actor.sdk.controllers.Intents;
import static im.actor.sdk.util.ActorSDKMessenger.groups;
import static im.actor.sdk.util.ActorSDKMessenger.messenger;
public class DialogsDefaultFragment extends BaseDialogFragment {
@Override
protected void onItemClick(Dialog item) {
Activity activity = getActivity();
if (activity != null) {
startActivity(Intents.openDialog(item.getPeer(), false, activity));
}
}
@Override
protected boolean onItemLongClick(Dialog dialog) {
if (dialog.getPeer().getPeerType() == PeerType.PRIVATE) {
new AlertDialog.Builder(getActivity())
.setItems(new CharSequence[]{
getString(R.string.dialogs_menu_contact_view),
getString(R.string.dialogs_menu_contact_rename),
getString(R.string.dialogs_menu_conversation_delete)
}, (d, which) -> {
if (which == 0) {
// View profile
ActorSDKLauncher.startProfileActivity(getActivity(), dialog.getPeer().getPeerId());
} else if (which == 1) {
// Rename user
startActivity(Intents.editUserName(dialog.getPeer().getPeerId(), getActivity()));
} else if (which == 2) {
// Delete chat
new AlertDialog.Builder(getActivity())
.setMessage(getString(R.string.alert_delete_chat_message, dialog.getDialogTitle()))
.setNegativeButton(R.string.dialog_cancel, null)
.setPositiveButton(R.string.alert_delete_chat_yes, (d1, which1) -> {
execute(messenger().deleteChat(dialog.getPeer()), R.string.progress_common,
new CommandCallback<Void>() {
@Override
public void onResult(Void res) {
}
@Override
public void onError(Exception e) {
Toast.makeText(getActivity(), R.string.toast_unable_delete_chat, Toast.LENGTH_LONG).show();
}
});
})
.show();
}
})
.show();
return true;
} else if (dialog.getPeer().getPeerType() == PeerType.GROUP) {
GroupVM groupVM = groups().get(dialog.getPeer().getPeerId());
CharSequence[] items;
int dialogs_menu_view = groupVM.getGroupType() == GroupType.CHANNEL ? R.string.dialogs_menu_channel_view : R.string.dialogs_menu_group_view;
int dialogs_menu_rename = groupVM.getGroupType() == GroupType.CHANNEL ? R.string.dialogs_menu_channel_rename : R.string.dialogs_menu_group_rename;
int dialogs_menu_leave = groupVM.getGroupType() == GroupType.CHANNEL ? R.string.dialogs_menu_channel_leave : R.string.dialogs_menu_group_leave;
int dialogs_menu_delete = groupVM.getGroupType() == GroupType.CHANNEL ? R.string.dialogs_menu_channel_delete : R.string.dialogs_menu_group_delete;
items = new CharSequence[]{
getString(dialogs_menu_view),
getString(dialogs_menu_rename),
getString(groupVM.getIsCanLeave().get() ? dialogs_menu_leave :
groupVM.getIsCanDelete().get() ? dialogs_menu_delete :
dialogs_menu_leave),
};
new AlertDialog.Builder(getActivity())
.setItems(items, (d, which) -> {
if (which == 0) {
ActorSDK.sharedActor().startGroupInfoActivity(getActivity(), dialog.getPeer().getPeerId());
} else if (which == 1) {
startActivity(Intents.editGroupTitle(dialog.getPeer().getPeerId(), getActivity()));
} else if (which == 2) {
int alert_delete_title = groupVM.getGroupType() == GroupType.CHANNEL ? R.string.alert_delete_channel_title : R.string.alert_delete_group_title;
int alert_leave_message = groupVM.getGroupType() == GroupType.CHANNEL ? R.string.alert_leave_channel_message : R.string.alert_leave_group_message;
new AlertDialog.Builder(getActivity())
.setMessage(getString(groupVM.getIsCanLeave().get() ? alert_leave_message :
groupVM.getIsCanDelete().get() ? alert_delete_title :
alert_leave_message, dialog.getDialogTitle()))
.setNegativeButton(R.string.dialog_cancel, null)
.setPositiveButton(groupVM.getIsCanLeave().get() ? R.string.alert_leave_group_yes : R.string.alert_delete_group_yes, (d1, which1) -> {
if (groupVM.getIsCanLeave().get()) {
execute(messenger().leaveAndDeleteGroup(dialog.getPeer().getPeerId()), R.string.progress_common).failure(e -> {
Toast.makeText(getActivity(), R.string.toast_unable_leave, Toast.LENGTH_LONG).show();
});
} else if (groupVM.getIsCanDelete().get()) {
execute(messenger().deleteGroup(dialog.getPeer().getPeerId()), R.string.progress_common).failure(e -> {
Toast.makeText(getActivity(), R.string.toast_unable_delete_chat, Toast.LENGTH_LONG).show();
});
} else {
execute(messenger().deleteChat(dialog.getPeer()), R.string.progress_common, new CommandCallback<Void>() {
@Override
public void onResult(Void res) {
}
@Override
public void onError(Exception e) {
Toast.makeText(getActivity(), R.string.toast_unable_delete_chat, Toast.LENGTH_LONG).show();
}
});
}
})
.show();
}
}).show();
return true;
}
return false;
}
}