/** * Copyright (c) 2013, Redsolution LTD. All rights reserved. * * This file is part of Xabber project; you can redistribute it and/or * modify it under the terms of the GNU General Public License, Version 3. * * Xabber is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License, * along with this program. If not, see http://www.gnu.org/licenses/. */ package com.xabber.android.data.message; import android.content.Context; import com.xabber.android.R; import com.xabber.android.data.account.StatusMode; /** * Action in chat. * * @author alexander.ivanov */ public enum ChatAction { /** * Contact becomes available. */ available, /** * Contact becomes free for chat. */ chat, /** * Contact go away. */ away, /** * Contact go away for an extended period of time. */ xa, /** * Contact ask to do not disturb. */ dnd, /** * Contact becomes unavailable. */ unavailable, /** * Contact changes status text. */ status, /** * User joins room. */ join, /** * User leaves room. */ leave, /** * User was kicked. */ kick, /** * User was banned. */ ban, /** * User changes nickname. */ nickname, /** * You have join room. */ complete, /** * Invitation to the room was sent. */ invite_sent, /** * Invitation was not received. */ invite_error, /** * Subject of the room has been changed. */ subject, /** * Chat becomes encrypted with verified contact. */ otr_verified, /** * Chat becomes encrypted. */ otr_encryption, /** * Chat becomes not encrypted. */ otr_plain, /** * Chat was finished by another entity. */ otr_finish, /** * OTR error. */ otr_error, /** * Unreadable OTR message received. */ otr_unreadable, /** * Request to send message to the finished session was blocked. */ otr_finished_session, /** * Cheat occurred while SMP. */ otr_smp_cheated, /** * Error occurred while SMP. */ otr_smp_failed, /** * SMP verification for the shared secret or your question has been passed. */ otr_smp_verified, /** * OTR verification for your response has been passed. */ otr_smp_not_approved, /** * OTR session don't passes verification. */ otr_smp_unverified, /** * Call attention. */ attention_called, /** * Request attention. */ attention_requested; public static ChatAction getChatAction(StatusMode statusMode) { if (statusMode == StatusMode.unavailable) return ChatAction.unavailable; else if (statusMode == StatusMode.available) return ChatAction.available; else if (statusMode == StatusMode.away) return ChatAction.away; else if (statusMode == StatusMode.chat) return ChatAction.chat; else if (statusMode == StatusMode.dnd) return ChatAction.dnd; else if (statusMode == StatusMode.xa) return ChatAction.xa; else throw new IllegalStateException(); } /** * @param name * @return Chat action by name. <code>null</code> if action is empty (usual * message) or action is unknown. */ public static ChatAction getChatAction(String name) { for (ChatAction messageAction : ChatAction.values()) if (messageAction.name().equals(name)) return messageAction; return null; } /** * @param text * @return String to be added to the status mode change action. */ private static String getOptionalText(String text) { if ("".equals(text)) return ""; else return " (" + text + ")"; } /** * @param context * @param name contact's name. * @param text additional text depend on action. * @return Text representation for the action. */ public String getText(Context context, String name, String text) { if (this == ChatAction.available) return context.getString(R.string.action_status_available, name) + getOptionalText(text); else if (this == ChatAction.away) return context.getString(R.string.action_status_away, name) + getOptionalText(text); else if (this == ChatAction.chat) return context.getString(R.string.action_status_chat, name) + getOptionalText(text); else if (this == ChatAction.dnd) return context.getString(R.string.action_status_dnd, name) + getOptionalText(text); else if (this == ChatAction.unavailable) return context.getString(R.string.action_status_unavailable, name) + getOptionalText(text); else if (this == ChatAction.xa) return context.getString(R.string.action_status_xa, name) + getOptionalText(text); else if (this == ChatAction.status && "".equals(text)) return context.getString(R.string.action_status_text_none, name); else if (this == ChatAction.status) return context.getString(R.string.action_status_text, name, text); else if (this == ChatAction.join) return context.getString(R.string.action_join, name); else if (this == ChatAction.kick && "".equals(text)) return context.getString(R.string.action_kick, name); else if (this == ChatAction.kick) return context.getString(R.string.action_kick_by, name, text); else if (this == ChatAction.leave) return context.getString(R.string.action_leave, name); else if (this == ChatAction.ban && "".equals(text)) return context.getString(R.string.action_ban, name); else if (this == ChatAction.ban) return context.getString(R.string.action_ban_by, name, text); else if (this == ChatAction.nickname) return context.getString(R.string.action_nickname, name, text); else if (this == ChatAction.complete) return context.getString(R.string.action_join_complete, name); else if (this == ChatAction.invite_sent) return context.getString(R.string.action_invite_sent, text); else if (this == ChatAction.invite_error) return context.getString(R.string.action_invite_error, text); else if (this == ChatAction.subject) return context.getString(R.string.action_subject, name, text); else if (this == ChatAction.otr_verified) return context.getString(R.string.action_otr_verified); else if (this == ChatAction.otr_encryption) return context.getString(R.string.action_otr_encryption); else if (this == ChatAction.otr_plain) return context.getString(R.string.action_otr_plain); else if (this == ChatAction.otr_finish) return context.getString(R.string.action_otr_finish); else if (this == ChatAction.otr_error) return context.getString(R.string.action_otr_error, text); else if (this == ChatAction.otr_unreadable) return context.getString(R.string.action_otr_unreadable); else if (this == ChatAction.otr_finished_session) return context.getString(R.string.action_otr_finished_session); else if (this == ChatAction.otr_smp_cheated) return context.getString(R.string.action_otr_smp_cheated); else if (this == ChatAction.otr_smp_failed) return context.getString(R.string.action_otr_smp_failed); else if (this == ChatAction.otr_smp_not_approved) return context.getString(R.string.action_otr_smp_not_approved); else if (this == ChatAction.otr_smp_verified) return context.getString(R.string.action_otr_smp_verified); else if (this == ChatAction.otr_smp_unverified) return context.getString(R.string.action_otr_smp_unverified); else if (this == ChatAction.attention_called) return context.getString(R.string.action_attention_called); else if (this == ChatAction.attention_requested) return context.getString(R.string.action_attention_requested); else throw new IllegalStateException(); } /** * @return Whether action is status change. */ public boolean isStatusChage() { return this == ChatAction.available || this == ChatAction.away || this == ChatAction.chat || this == ChatAction.dnd || this == ChatAction.unavailable || this == ChatAction.xa || this == ChatAction.status; } }