package com.mogujie.tt.ui.activity; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.mogujie.tt.R; import com.mogujie.tt.adapter.album.ImageGridAdapter; import com.mogujie.tt.adapter.album.ImageGridAdapter.TextCallback; import com.mogujie.tt.adapter.album.ImageItem; import com.mogujie.tt.cache.biz.CacheHub; import com.mogujie.tt.config.SysConstant; import com.mogujie.tt.entity.MessageInfo; import com.mogujie.tt.imlib.service.IMService; import com.mogujie.tt.imlib.utils.IMUIHelper; import com.mogujie.tt.log.Logger; import com.mogujie.tt.ui.utils.IMServiceHelper; import com.mogujie.tt.ui.utils.IMServiceHelper.OnIMServiceListner; /** * @Description 相册图片列表 * @author Nana * @date 2014-5-9 */ public class ImageGridActivity extends Activity implements OnTouchListener, OnIMServiceListner { private List<ImageItem> dataList = null; private GridView gridView = null; private TextView title = null; private TextView cancel = null; private static TextView finish = null; private TextView preview = null; private String name = null; private ImageView leftBtn = null; private static Context context = null; private static String CHAT_USER_ID = null; private static ImageGridAdapter adapter = null; private Logger logger = Logger.getLogger(ImageGridActivity.class); private IMServiceHelper imServiceHelper = new IMServiceHelper(); private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 0: Toast.makeText(ImageGridActivity.this, "最多选择" + SysConstant.MAX_SELECT_IMAGE_COUNT + "张图片", 400).show(); break; default: break; } } }; OnScrollListener onScrollListener = new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case OnScrollListener.SCROLL_STATE_FLING: adapter.lock(); break; case OnScrollListener.SCROLL_STATE_IDLE: adapter.unlock(); break; case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: adapter.lock(); break; default: break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }; @SuppressWarnings("unchecked") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); imServiceHelper.connect(this, null, IMServiceHelper.INTENT_NO_PRIORITY, this); setContentView(R.layout.tt_activity_image_grid); context = this; name = (String) getIntent().getSerializableExtra( SysConstant.EXTRA_ALBUM_NAME); dataList = (List<ImageItem>) getIntent().getSerializableExtra( SysConstant.EXTRA_IMAGE_LIST); CHAT_USER_ID = (String) getIntent().getSerializableExtra( SysConstant.EXTRA_CHAT_USER_ID); initView(); initAdapter(); } private void initAdapter() { adapter = new ImageGridAdapter(ImageGridActivity.this, dataList, mHandler); adapter.setTextCallback(new TextCallback() { public void onListen(int count) { setSendText(count); } }); gridView.setAdapter(adapter); gridView.setOnScrollListener(onScrollListener); } private void initView() { gridView = (GridView) findViewById(R.id.gridview); gridView.setSelector(new ColorDrawable(Color.TRANSPARENT)); gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { adapter.notifyDataSetChanged(); } }); title = (TextView) findViewById(R.id.base_fragment_title); if (name.length() > 12) { name = name.substring(0, 11) + "..."; } title.setText(name); leftBtn = (ImageView) findViewById(R.id.back_btn); leftBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(ImageGridActivity.this, PickPhotoActivity.class); startActivity(intent); ImageGridActivity.this.finish(); } }); cancel = (TextView) findViewById(R.id.cancel); cancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { adapter.setSelectMap(null); setResult(RESULT_OK, null); ImageGridActivity.this.finish(); } }); finish = (TextView) findViewById(R.id.finish); finish.setOnClickListener(new OnClickListener() { public void onClick(View v) { logger.d("pic#click send image btn"); if (adapter.getSelectMap().size() > 0) { List<MessageInfo> messageList = new ArrayList<MessageInfo>(); Iterator<Integer> iter = adapter.getSelectMap().keySet() .iterator(); while (iter.hasNext()) { int position = iter.next(); ImageItem imgItem = adapter.getSelectMap() .get(position); MessageInfo msg = drawMessageInfo( ImageGridActivity.this, imgItem); messageList.add(msg); } setSendText(0); setResult(RESULT_OK, null); ImageGridActivity.this.finish(); String Dao = "";//TokenManager.getInstance().getDao(); IMUIHelper.SessionInfo sessionInfo = CacheHub.getInstance().getSessionInfo(); if (sessionInfo == null) { logger.e("pic#sessionInfo is null"); return; } IMService imService = imServiceHelper.getIMService(); if (imService != null) { imService.getMessageManager().sendImages(sessionInfo.getSessionId(), sessionInfo.getSessionType(), messageList); } } else { Toast.makeText(ImageGridActivity.this, R.string.need_choose_images, Toast.LENGTH_SHORT) .show(); } } }); preview = (TextView) findViewById(R.id.preview); preview.setOnClickListener(new OnClickListener() { public void onClick(View v) { if (adapter.getSelectMap().size() > 0) { Intent intent = new Intent(ImageGridActivity.this, PreviewActivity.class); startActivityForResult(intent, SysConstant.ALBUM_PREVIEW_BACK); } else { Toast.makeText(ImageGridActivity.this, R.string.need_choose_images, Toast.LENGTH_SHORT) .show(); } } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (RESULT_OK != resultCode) return; if (requestCode == SysConstant.ALBUM_PREVIEW_BACK) { boolean finishActivity = data.getExtras().getBoolean("finish"); if (finishActivity) { ImageGridActivity.this.finish(); } } super.onActivityResult(requestCode, resultCode, data); } @Override protected void onDestroy() { setAdapterSelectedMap(null); imServiceHelper.disconnect(this); super.onStop(); } public static MessageInfo drawMessageInfo(Activity activity, ImageItem item) { Logger.getLogger(ImageGridActivity.class).d("chat#pic#create picture messageinfo"); MessageInfo msg = new MessageInfo(); if (new File(item.getImagePath()).exists()) { msg.setSavePath(item.getImagePath()); } else { if (new File(item.getThumbnailPath()).exists()) { msg.setSavePath(item.getThumbnailPath()); } else { // 找不到图片路径时使用加载失败的图片展示 msg.setSavePath(null); } } // 将图片发送至服务器 msg.setMsgFromUserId(CacheHub.getInstance().getLoginUserId()); msg.setIsSend(true); msg.setMsgCreateTime((int) (System.currentTimeMillis() / 1000)); msg.setDisplayType(SysConstant.DISPLAY_TYPE_IMAGE); msg.setMsgType(SysConstant.MESSAGE_TYPE_TELETEXT); msg.setMsgContent(""); msg.setMsgAttachContent(""); msg.setTargetId(CHAT_USER_ID); msg.setMsgLoadState(SysConstant.MESSAGE_STATE_LOADDING); msg.setMsgReadStatus(SysConstant.MESSAGE_ALREADY_READ); //int messageSendRequestNo = CacheHub.getInstance().obtainMsgId(); //msg.setMsgId(messageSendRequestNo); CacheHub.getInstance().pushMsg(msg); MessageActivity.addItem(msg); return msg; } public static void setSendText(int selNum) { if (selNum == 0) { finish.setText(context.getResources().getString(R.string.send)); } else { finish.setText(context.getResources().getString(R.string.send) + "(" + selNum + ")"); } } public static void setAdapterSelectedMap(Map<Integer, ImageItem> map) { Iterator<Integer> it = adapter.getSelectMap().keySet().iterator(); if (map != null) { while (it.hasNext()) { int key = (Integer) it.next(); if (map.containsKey(key)) { adapter.updateSelectedStatus(key, true); } else { adapter.updateSelectedStatus(key, false); } } adapter.setSelectMap(map); adapter.setSelectTotalNum(map.size()); } else { while (it.hasNext()) { int key = (Integer) it.next(); adapter.updateSelectedStatus(key, false); } adapter.setSelectMap(null); adapter.setSelectTotalNum(0); } adapter.notifyDataSetChanged(); } public static ImageGridAdapter getAdapter() { return adapter; } @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_DOWN: adapter.unlock(); break; } return false; } @Override public void onAction(String action, Intent intent, BroadcastReceiver broadcastReceiver) { // TODO Auto-generated method stub } @Override public void onIMServiceConnected() { // TODO Auto-generated method stub } }