package com.parttime.IM;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
import com.carson.constant.ConstantForSaveList;
import com.easemob.chat.EMChatManager;
import com.easemob.chat.EMGroup;
import com.easemob.chat.EMGroupManager;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.parttime.constants.ActivityExtraAndKeys;
import com.parttime.constants.SharedPreferenceConstants;
import com.parttime.pojo.GroupDescription;
import com.parttime.utils.SharePreferenceUtil;
import com.qingmu.jianzhidaren.R;
import com.quark.jianzhidaren.ApplicationControl;
import org.apache.http.protocol.HTTP;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Map;
/**
*
* Created by luhua on 15/7/12.
*/
public class ChatActivityHelper {
private final String TAG = "ChatActivityHelper";
/**
* 群聊通知
* @param activity ChatActivity
*/
public void showGroupNotice(final ChatActivity activity, View view){
View popView = activity.getLayoutInflater().inflate(R.layout.activity_chat_group_notice_popup, null);
DisplayMetrics metric = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metric);
final PopupWindow popupWindow = new PopupWindow(popView,
(metric.widthPixels),
LinearLayout.LayoutParams.WRAP_CONTENT);
EMGroup group = EMGroupManager.getInstance().getGroup(activity.toChatUsername);
final String description = group.getDescription();
View edit = popView.findViewById(R.id.edit);
String currentUser = EMChatManager.getInstance().getCurrentUser();
if(currentUser != null && currentUser.equals(group.getOwner())) {
edit.setVisibility(View.VISIBLE);
edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(ApplicationControl.getInstance(), EditGroupNoticeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(ActivityExtraAndKeys.ChatGroupNotice.GROUP_NOTICE_CONTENT, description);
intent.putExtra(ActivityExtraAndKeys.GroupSetting.GROUPID, activity.toChatUsername);
ApplicationControl.getInstance().startActivity(intent);
popupWindow.dismiss();
}
});
}
TextView content = (TextView)popView.findViewById(R.id.group_notice_content);
Map<String,GroupDescription> cache = ConstantForSaveList.groupDescriptionMapCache;
GroupDescription groupDescription = cache.get(activity.toChatUsername);
GroupDescription gd = null;
if(groupDescription != null){
content.setText(toDBC(groupDescription.info));
}else if(description != null) {
try {
String desc = URLDecoder.decode(description, HTTP.UTF_8);
gd = new Gson().fromJson(desc, GroupDescription.class);
if(gd != null){
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(gd.info).append(" ").append("更新于").append(" ").append(gd.time);
content.setText(toDBC(stringBuilder.toString()));
}
} catch (IllegalStateException | JsonSyntaxException | UnsupportedEncodingException ignore) {
Log.e(TAG, "description format is error , description = " + description);
}
}
popupWindow.setBackgroundDrawable(new ColorDrawable(0));
//设置popwindow显示位置
popupWindow.showAsDropDown(view,
0,
(int) activity.getResources().getDimension(R.dimen.chat_activity_popup_margin) / 5);
//获取popwindow焦点
popupWindow.setFocusable(true);
//设置popwindow如果点击外面区域,便关闭。
popupWindow.setOutsideTouchable(true);
popupWindow.update();
updateNoticeStatus(activity,gd);
}
public static String toDBC(String input) {
char[] c = input.toCharArray();
for (int i = 0; i< c.length; i++) {
if (c[i] == 12288) {
c[i] = (char) 32;
continue;
}if (c[i]> 65280&& c[i]< 65375)
c[i] = (char) (c[i] - 65248);
}
return new String(c);
}
private void updateNoticeStatus(ChatActivity activity,GroupDescription gd) {
Map<String,GroupDescription> cache = ConstantForSaveList.groupDescriptionMapCache;
GroupDescription groupDescription = cache.get(activity.toChatUsername);
if(groupDescription != null){
if(groupDescription.isNew){
groupDescription.isNew = false;
}else{
return;
}
}else{
if(gd != null) {
cache.put(activity.toChatUsername, gd);
}else{
return;
}
}
SharePreferenceUtil.getInstance(ApplicationControl.getInstance()).saveSharedPreferences(
SharedPreferenceConstants.GROUP_NOTICE_CONFIGGURE,
new Gson().toJson(cache));
}
}