Browse Source

群头像处理九宫格图

Arisono 10 years ago
parent
commit
5dade1c5f7

+ 73 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/helper/AvatarHelper.java

@@ -175,6 +175,52 @@ public class AvatarHelper {
         }
     }
 
+
+    public void displayAvatarPng(String userId, final ImageView imageView, final boolean isThumb) {
+        final String url = getAvatarUrlPng(userId, isThumb);
+        Log.i("Arison","AvatarHelper:displayAvatar:140:"+url);
+        if (TextUtils.isEmpty(url)) {
+            return;
+        }
+
+        Long lastCheckTime = mCheckTimeMaps.get(url);
+        if (lastCheckTime == null || System.currentTimeMillis() - lastCheckTime > 5 * 60 * 1000) {// 至少间隔5分钟检测一下
+            new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    long lastModifyTime = getLastModify(url);
+                    long localLastModified = 0;
+                    final File localFile = ImageLoader.getInstance().getDiscCache().get(url);
+                    if (localFile != null && localFile.exists()) {
+                        localLastModified = localFile.lastModified();
+                    }
+                    final boolean delete = localLastModified < lastModifyTime;
+                    mHandler.post(new Runnable() {
+                        @Override
+                        public void run() {
+                            mCheckTimeMaps.put(url, System.currentTimeMillis());
+                            if (delete) {
+                                if (localFile != null) {
+                                    localFile.delete();
+                                }
+                                List<String> keys = MemoryCacheUtil.findCacheKeysForImageUri(url, ImageLoader.getInstance().getMemoryCache());
+                                if (keys != null && keys.size() > 0) {
+                                    for (String key : keys) {
+                                        ImageLoader.getInstance().getMemoryCache().remove(key);
+                                    }
+                                }
+                            }
+                            display(url, imageView, isThumb);
+                        }
+                    });
+
+                }
+            }).start();
+        } else {
+            display(url, imageView, isThumb);
+        }
+    }
+
     private long getLastModify(String url) {
         HttpURLConnection connection = null;
         try {
@@ -307,6 +353,33 @@ public class AvatarHelper {
         return url;
     }
 
+
+    public static String getAvatarUrlPng(String userId, boolean isThumb) {
+        if (TextUtils.isEmpty(userId)) {
+            return null;
+        }
+        int userIdInt = -1;
+        try {
+            userIdInt = Integer.parseInt(userId);
+        } catch (NumberFormatException e) {
+            e.printStackTrace();
+        }
+        if (userIdInt == -1 || userIdInt == 0) {
+            return null;
+        }
+
+        int dirName = userIdInt % 10000;
+        String url = null;
+        if (isThumb) {
+            url = MyApplication.getInstance().getConfig().AVATAR_THUMB_PREFIX + "/" + dirName + "/" + userId + ".png";
+        } else {
+            url = MyApplication.getInstance().getConfig().AVATAR_ORIGINAL_PREFIX + "/" + dirName + "/" + userId + ".png";
+        }
+        return url;
+    }
+
+
+
     // // 无用
     // public void displayResumeAvatar(String userId, ImageView imageView, boolean isThumb) {
     // String url = getResumeAvatar(userId, isThumb);

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/activity/WebViewLoadActivity.java

@@ -175,7 +175,7 @@ public class WebViewLoadActivity extends BaseActivity {
         Log.i("PushParam", " 远程master:" + master);
         Log.i("PushParam", " 远程uu:" + uu);
         Log.i("PushParam", " 远程masterId:" + masterId);
-        if (!StringUtils.isEmpty(erp_uu) && !StringUtils.isEmpty(uu)) {
+        if (!StringUtils.isEmpty(erp_uu) && !StringUtils.isEmpty(uu)&&!"null".equals(uu)) {
             if (!uu.equals(erp_uu)) { // uu不相同
                 updateCompany(uu, master); // 切换公司
             } else {

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/BitmapUtil.java

@@ -310,7 +310,7 @@ public class BitmapUtil {
 		}
 		File myCaptureFile = new File(path + fileName);
 		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
-		bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);
+		bm.compress(Bitmap.CompressFormat.PNG, 100, bos);
 		bos.flush();
 		bos.close();
 

+ 2 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/CommonUtil.java

@@ -54,10 +54,10 @@ public class CommonUtil {
         for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
             if (appProcess.processName.equals(context.getPackageName())) {
                 if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND) {
-                    Log.i("Arison", "进入后台..."+appProcess.processName);
+                    Log.i("Process", "进入后台..."+appProcess.processName);
                     return true;
                 }else{
-                    Log.i("Arison", "进入前台..."+appProcess.processName);
+                    Log.i("Process", "进入前台..."+appProcess.processName);
                     return false;
                 }
             }

+ 82 - 0
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/erp/util/NumberUtils.java

@@ -0,0 +1,82 @@
+package com.xzjmyk.pm.activity.ui.erp.util;
+
+import android.text.TextUtils;
+import android.util.Log;
+import android.widget.ImageView;
+
+import com.nostra13.universalimageloader.core.ImageLoader;
+import com.nostra13.universalimageloader.core.assist.MemoryCacheUtil;
+
+import java.io.File;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Created by Arisono on 2016/6/2.
+ */
+public class NumberUtils {
+    /**
+     * 这是典型的随机洗牌算法。
+     * 流程是从备选数组中选择一个放入目标数组中,将选取的数组从备选数组移除(放至最后,并缩小选择区域)
+     * 算法时间复杂度O(n)
+     * @return 随机8为不重复数组
+     */
+    public static String generateNumber() {
+        String no="";
+        //初始化备选数组
+        int[] defaultNums = new int[10];
+        for (int i = 0; i < defaultNums.length; i++) {
+            defaultNums[i] = i;
+        }
+
+        Random random = new Random();
+        int[] nums = new int[LENGTH];
+        //默认数组中可以选择的部分长度
+        int canBeUsed = 10;
+        //填充目标数组
+        for (int i = 0; i < nums.length; i++) {
+            //将随机选取的数字存入目标数组
+            int index = random.nextInt(canBeUsed);
+            nums[i] = defaultNums[index];
+            //将已用过的数字扔到备选数组最后,并减小可选区域
+            swap(index, canBeUsed - 1, defaultNums);
+            canBeUsed--;
+        }
+        if (nums.length>0) {
+            for (int i = 0; i < nums.length; i++) {
+                no+=nums[i];
+            }
+        }
+
+        return no;
+    }
+    private static final int LENGTH = 8;
+
+    private static void swap(int i, int j, int[] nums) {
+        int temp = nums[i];
+        nums[i] = nums[j];
+        nums[j] = temp;
+    }
+
+    public static String generateNumber2() {
+        String no="";
+        int num[]=new int[8];
+        int c=0;
+        for (int i = 0; i < 8; i++) {
+            num[i] = new Random().nextInt(10);
+            c = num[i];
+            for (int j = 0; j < i; j++) {
+                if (num[j] == c) {
+                    i--;
+                    break;
+                }
+            }
+        }
+        if (num.length>0) {
+            for (int i = 0; i < num.length; i++) {
+                no+=num[i];
+            }
+        }
+        return no;
+    }
+}

+ 2 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/groupchat/GroupChatFragment.java

@@ -389,10 +389,10 @@ public class GroupChatFragment extends EasyFragment {
             if (!StringUtils.isEmpty(room.getSubject()))
             {
                 //合成图像下载
-                AvatarHelper.getInstance().displayAvatar("812815872",
+                AvatarHelper.getInstance().displayAvatarPng(room.getSubject(),
                         avatar_img, false);
             }else{
-                AvatarHelper.getInstance().displayAvatar("812815872",
+                AvatarHelper.getInstance().displayAvatar(room.getUserId(),
                         avatar_img, false);
             }
 

+ 32 - 7
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/groupchat/SelectContactsActivity.java

@@ -54,6 +54,7 @@ import com.xzjmyk.pm.activity.ui.erp.net.HttpUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.BitmapUtil;
 import com.xzjmyk.pm.activity.ui.erp.util.FileUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.ListUtils;
+import com.xzjmyk.pm.activity.ui.erp.util.NumberUtils;
 import com.xzjmyk.pm.activity.ui.erp.util.PropertiesUtil;
 import com.xzjmyk.pm.activity.ui.message.MucChatActivity;
 import com.xzjmyk.pm.activity.util.Constants;
@@ -404,9 +405,13 @@ public class SelectContactsActivity extends BaseActivity {
             String userId = mFriendList.get(mSelectPositions.get(i)).getUserId();
             inviteUsers.add(userId);
         }
-        new Thread(new Runnable() {
+        //开启线程处理合成群头像操作
+     final Thread uploadImageTask=
+             new Thread(new Runnable() {
             @Override
             public void run() {
+                uploadIsEnd=false;//开始上传任务
+                photoId= NumberUtils.generateNumber2();//八位不重复随机数
                 inviteUsers.add(0, MyApplication.getInstance().mLoginUser.getUserId());
                 image=  createChatImage(inviteUsers);
                 Message msg=mhandler.obtainMessage();
@@ -414,7 +419,8 @@ public class SelectContactsActivity extends BaseActivity {
                 msg.what=uploadFile;
                 mhandler.sendMessage(msg);
             }
-        }).start();
+        });
+        uploadImageTask.start();
 
         params.put("text", JSON.toJSONString(inviteUsers));
 
@@ -431,9 +437,19 @@ public class SelectContactsActivity extends BaseActivity {
             public void onResponse(ObjectResult<MucRoom> result) {
                 boolean parserResult = Result.defaultParser(mContext, result, true);
                 if (parserResult && result.getData() != null) {
-                    createRoomSuccess(result.getData().getId(), roomJid, roomName, roomDesc);
+                    while (uploadImageTask.isAlive()){
+                          //上传线程正在运行
+                        Log.i("Arison","SelectContactsActivity:onResponse:440:上传是否结束:"+uploadIsEnd);
+                    }
+//                    while (!uploadIsEnd){
+//                        //上传线程正在运行
+//                        Log.i("Arison","SelectContactsActivity:onResponse:440:上传是否结束:"+uploadIsEnd);
+//                    }
+
+                    createRoomSuccess(result.getData().getId(), roomJid, roomName, roomDesc,photoId);
+                    ProgressDialogUtil.dismiss(mProgressDialog);
                 }
-                ProgressDialogUtil.dismiss(mProgressDialog);
+
             }
         }, MucRoom.class, params);
         addDefaultRequest(request);
@@ -447,6 +463,7 @@ public class SelectContactsActivity extends BaseActivity {
           switch (msg.what){
               case uploadFile:
                   String roomjId=msg.getData().getString("roomjId");
+                  Log.i("Arison","SelectContactsActivity:handleMessage:466:handler uploadFile="+uploadFile);
                   uploadAvatar(image,roomjId);
                   break;
           }
@@ -455,7 +472,7 @@ public class SelectContactsActivity extends BaseActivity {
     };
 
 
-    private void createRoomSuccess(String roomId, String roomJid, String roomName, String roomDesc) {
+    private void createRoomSuccess(String roomId, String roomJid, String roomName, String roomDesc,String photoId) {
         Friend friend = new Friend();// 将房间也存为好友
         friend.setOwnerId(mLoginUserId);
         friend.setUserId(roomJid);
@@ -463,7 +480,8 @@ public class SelectContactsActivity extends BaseActivity {
         friend.setDescription(roomDesc);
         friend.setRoomFlag(1);
         friend.setRoomId(roomId);
-        friend.setRoomCreateUserId(mLoginUserId);
+//        friend.setRoomCreateUserId(mLoginUserId);
+        friend.setRoomCreateUserId(photoId);
         // timeSend作为取群聊离线消息的标志,所以要在这里设置一个初始值
         friend.setTimeSend(TimeUtils.sk_time_current_time());
         friend.setStatus(Friend.STATUS_FRIEND);
@@ -544,6 +562,7 @@ public class SelectContactsActivity extends BaseActivity {
 
 
     private void uploadAvatar(File file, final String roomjId) {
+
         if (!file.exists()) {// 文件不存在
             return;
         }
@@ -557,7 +576,9 @@ public class SelectContactsActivity extends BaseActivity {
         long roomImgId=Long.valueOf(loginUserId)+time;
         Log.i("Arison","SelectContactsActivity:uploadAvatar:471:roomImgId:"+roomImgId
         +"时间:"+ DateFormatUtil.getDateTimeStr(new Date(time)));
-       final String  photoId="812815872";
+
+
+
         params.put("userId", photoId);//群主id+当前系统时间
         try {
             params.put("file1", file);
@@ -606,6 +627,9 @@ public class SelectContactsActivity extends BaseActivity {
        // Looper.loop();
     }
 
+    private String photoId;
+    private static boolean uploadIsEnd=true;
+
     /**
      * @功能:上传文件后,需要上传更新图像id
      * @author:Arisono
@@ -613,6 +637,7 @@ public class SelectContactsActivity extends BaseActivity {
      * @return:
      */
     public void updateIMChatImageId(String roomjId,String photoId){
+//        this.uploadIsEnd=true;
 		String url = MyApplication.getInstance().getConfig().apiUrl+"room/setRelationGroupPhoto";
 		final String requestTag = "loginManagerSystem";
 		Map<String, String> params = new HashMap<String, String>();

+ 2 - 2
WeiChat/src/main/java/com/xzjmyk/pm/activity/ui/message/MessageFragment.java

@@ -530,8 +530,8 @@ public class MessageFragment extends EasyFragment {
                     //					avatar_img.setImageResource(R.drawable.avatar_normal);
                     avatar_img.setImageResource(R.drawable.qunliao);
                 } else {
-                    //					AvatarHelper.getInstance().displayAvatar(friend.getRoomCreateUserId(), avatar_img, true);// 目前在备注名放房间的创建者Id
-                    avatar_img.setImageResource(R.drawable.qunliao);
+                    AvatarHelper.getInstance().displayAvatarPng(friend.getRoomCreateUserId(), avatar_img, true);// 目前在备注名放房间的创建者Id
+                   // avatar_img.setImageResource(R.drawable.qunliao);
                 }
             }
             nick_name_tv.setText(friend.getRemarkName() != null ? friend.getRemarkName() : friend.getNickName());

+ 3 - 3
WeiChat/src/main/java/com/xzjmyk/pm/activity/xmpp/CoreService.java

@@ -71,9 +71,9 @@ public class CoreService extends Service {
         int messageType = chatMessage.getType();
         boolean isNotification = PreferenceUtils.getBoolean(getApplicationContext(), Constants.IS_NOTIFICATION);//进行通知
         isNotification= CommonUtil.isBackground(getApplicationContext());
-        if (!isNotification) {
-            return;
-        }
+//        if (!isNotification) {
+//            return;
+//        }
         String content;
         switch (messageType) {
             case XmppMessage.TYPE_TEXT:

+ 1 - 0
WeiChat/src/main/res/layout/row_muc_room.xml

@@ -20,6 +20,7 @@
             android:layout_height="50dp"
             android:layout_gravity="center_vertical"
             android:contentDescription="@string/app_name"
+            android:background="@color/gray_light"
             android:src="@drawable/avatar_normal" />
     </FrameLayout>
 

+ 1 - 0
WeiChat/src/main/res/layout/row_nearly_message.xml

@@ -19,6 +19,7 @@
             android:layout_height="@dimen/item_img_width"
             android:layout_gravity="center_vertical"
             android:contentDescription="@string/app_name"
+            android:background="@color/gray_light"
             android:src="@drawable/avatar_normal" />
 
         <TextView

+ 2 - 2
WeiChat/src/main/res/values/dimens.xml

@@ -10,8 +10,8 @@
     <dimen name="item_height">60.0dip</dimen>
     <dimen name="item_me_height">80.0dip</dimen>
     <dimen name="bar_height">80.0dip</dimen>
-    <dimen name="item_img_height">38dp</dimen>
-    <dimen name="item_img_width">38dp</dimen>
+    <dimen name="item_img_height">48dp</dimen>
+    <dimen name="item_img_width">48dp</dimen>
     <dimen name="LargestTextSize">30.0dip</dimen>
     <dimen name="BigerTextSize">24.0dip</dimen>
     <dimen name="BigTextSize">17.0dip</dimen>