PageRenderTime 82ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/mgandroid-teamtalk/src/com/mogujie/tt/ui/activity/ImageGridActivity.java

https://gitlab.com/lisit1003/TTAndroidClient
Java | 346 lines | 297 code | 38 blank | 11 comment | 32 complexity | ea1eaba43a918bfba4e5edf78d3c4a29 MD5 | raw file
  1. package com.mogujie.tt.ui.activity;
  2. import java.io.File;
  3. import java.util.ArrayList;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.Map;
  7. import android.app.Activity;
  8. import android.content.BroadcastReceiver;
  9. import android.content.Context;
  10. import android.content.Intent;
  11. import android.graphics.Color;
  12. import android.graphics.drawable.ColorDrawable;
  13. import android.os.Bundle;
  14. import android.os.Handler;
  15. import android.os.Message;
  16. import android.view.MotionEvent;
  17. import android.view.View;
  18. import android.view.View.OnClickListener;
  19. import android.view.View.OnTouchListener;
  20. import android.widget.AbsListView;
  21. import android.widget.AbsListView.OnScrollListener;
  22. import android.widget.AdapterView;
  23. import android.widget.AdapterView.OnItemClickListener;
  24. import android.widget.GridView;
  25. import android.widget.ImageView;
  26. import android.widget.TextView;
  27. import android.widget.Toast;
  28. import com.mogujie.tt.R;
  29. import com.mogujie.tt.adapter.album.ImageGridAdapter;
  30. import com.mogujie.tt.adapter.album.ImageGridAdapter.TextCallback;
  31. import com.mogujie.tt.adapter.album.ImageItem;
  32. import com.mogujie.tt.cache.biz.CacheHub;
  33. import com.mogujie.tt.config.SysConstant;
  34. import com.mogujie.tt.entity.MessageInfo;
  35. import com.mogujie.tt.imlib.service.IMService;
  36. import com.mogujie.tt.imlib.utils.IMUIHelper;
  37. import com.mogujie.tt.log.Logger;
  38. import com.mogujie.tt.ui.utils.IMServiceHelper;
  39. import com.mogujie.tt.ui.utils.IMServiceHelper.OnIMServiceListner;
  40. /**
  41. * @Description 相册图片列表
  42. * @author Nana
  43. * @date 2014-5-9
  44. */
  45. public class ImageGridActivity extends Activity implements OnTouchListener, OnIMServiceListner {
  46. private List<ImageItem> dataList = null;
  47. private GridView gridView = null;
  48. private TextView title = null;
  49. private TextView cancel = null;
  50. private static TextView finish = null;
  51. private TextView preview = null;
  52. private String name = null;
  53. private ImageView leftBtn = null;
  54. private static Context context = null;
  55. private static String CHAT_USER_ID = null;
  56. private static ImageGridAdapter adapter = null;
  57. private Logger logger = Logger.getLogger(ImageGridActivity.class);
  58. private IMServiceHelper imServiceHelper = new IMServiceHelper();
  59. private Handler mHandler = new Handler() {
  60. @Override
  61. public void handleMessage(Message msg) {
  62. switch (msg.what) {
  63. case 0:
  64. Toast.makeText(ImageGridActivity.this,
  65. "最多选择" + SysConstant.MAX_SELECT_IMAGE_COUNT + "张图片",
  66. 400).show();
  67. break;
  68. default:
  69. break;
  70. }
  71. }
  72. };
  73. OnScrollListener onScrollListener = new OnScrollListener() {
  74. @Override
  75. public void onScrollStateChanged(AbsListView view, int scrollState) {
  76. switch (scrollState) {
  77. case OnScrollListener.SCROLL_STATE_FLING:
  78. adapter.lock();
  79. break;
  80. case OnScrollListener.SCROLL_STATE_IDLE:
  81. adapter.unlock();
  82. break;
  83. case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
  84. adapter.lock();
  85. break;
  86. default:
  87. break;
  88. }
  89. }
  90. @Override
  91. public void onScroll(AbsListView view, int firstVisibleItem,
  92. int visibleItemCount, int totalItemCount) {
  93. }
  94. };
  95. @SuppressWarnings("unchecked")
  96. @Override
  97. protected void onCreate(Bundle savedInstanceState) {
  98. super.onCreate(savedInstanceState);
  99. imServiceHelper.connect(this, null, IMServiceHelper.INTENT_NO_PRIORITY, this);
  100. setContentView(R.layout.tt_activity_image_grid);
  101. context = this;
  102. name = (String) getIntent().getSerializableExtra(
  103. SysConstant.EXTRA_ALBUM_NAME);
  104. dataList = (List<ImageItem>) getIntent().getSerializableExtra(
  105. SysConstant.EXTRA_IMAGE_LIST);
  106. CHAT_USER_ID = (String) getIntent().getSerializableExtra(
  107. SysConstant.EXTRA_CHAT_USER_ID);
  108. initView();
  109. initAdapter();
  110. }
  111. private void initAdapter() {
  112. adapter = new ImageGridAdapter(ImageGridActivity.this, dataList,
  113. mHandler);
  114. adapter.setTextCallback(new TextCallback() {
  115. public void onListen(int count) {
  116. setSendText(count);
  117. }
  118. });
  119. gridView.setAdapter(adapter);
  120. gridView.setOnScrollListener(onScrollListener);
  121. }
  122. private void initView() {
  123. gridView = (GridView) findViewById(R.id.gridview);
  124. gridView.setSelector(new ColorDrawable(Color.TRANSPARENT));
  125. gridView.setOnItemClickListener(new OnItemClickListener() {
  126. @Override
  127. public void onItemClick(AdapterView<?> parent, View view,
  128. int position, long id) {
  129. adapter.notifyDataSetChanged();
  130. }
  131. });
  132. title = (TextView) findViewById(R.id.base_fragment_title);
  133. if (name.length() > 12) {
  134. name = name.substring(0, 11) + "...";
  135. }
  136. title.setText(name);
  137. leftBtn = (ImageView) findViewById(R.id.back_btn);
  138. leftBtn.setOnClickListener(new OnClickListener() {
  139. @Override
  140. public void onClick(View v) {
  141. Intent intent = new Intent(ImageGridActivity.this,
  142. PickPhotoActivity.class);
  143. startActivity(intent);
  144. ImageGridActivity.this.finish();
  145. }
  146. });
  147. cancel = (TextView) findViewById(R.id.cancel);
  148. cancel.setOnClickListener(new OnClickListener() {
  149. @Override
  150. public void onClick(View v) {
  151. adapter.setSelectMap(null);
  152. setResult(RESULT_OK, null);
  153. ImageGridActivity.this.finish();
  154. }
  155. });
  156. finish = (TextView) findViewById(R.id.finish);
  157. finish.setOnClickListener(new OnClickListener() {
  158. public void onClick(View v) {
  159. logger.d("pic#click send image btn");
  160. if (adapter.getSelectMap().size() > 0) {
  161. List<MessageInfo> messageList = new ArrayList<MessageInfo>();
  162. Iterator<Integer> iter = adapter.getSelectMap().keySet()
  163. .iterator();
  164. while (iter.hasNext()) {
  165. int position = iter.next();
  166. ImageItem imgItem = adapter.getSelectMap()
  167. .get(position);
  168. MessageInfo msg = drawMessageInfo(
  169. ImageGridActivity.this, imgItem);
  170. messageList.add(msg);
  171. }
  172. setSendText(0);
  173. setResult(RESULT_OK, null);
  174. ImageGridActivity.this.finish();
  175. String Dao = "";//TokenManager.getInstance().getDao();
  176. IMUIHelper.SessionInfo sessionInfo = CacheHub.getInstance().getSessionInfo();
  177. if (sessionInfo == null) {
  178. logger.e("pic#sessionInfo is null");
  179. return;
  180. }
  181. IMService imService = imServiceHelper.getIMService();
  182. if (imService != null) {
  183. imService.getMessageManager().sendImages(sessionInfo.getSessionId(), sessionInfo.getSessionType(), messageList);
  184. }
  185. } else {
  186. Toast.makeText(ImageGridActivity.this,
  187. R.string.need_choose_images, Toast.LENGTH_SHORT)
  188. .show();
  189. }
  190. }
  191. });
  192. preview = (TextView) findViewById(R.id.preview);
  193. preview.setOnClickListener(new OnClickListener() {
  194. public void onClick(View v) {
  195. if (adapter.getSelectMap().size() > 0) {
  196. Intent intent = new Intent(ImageGridActivity.this,
  197. PreviewActivity.class);
  198. startActivityForResult(intent,
  199. SysConstant.ALBUM_PREVIEW_BACK);
  200. } else {
  201. Toast.makeText(ImageGridActivity.this,
  202. R.string.need_choose_images, Toast.LENGTH_SHORT)
  203. .show();
  204. }
  205. }
  206. });
  207. }
  208. @Override
  209. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  210. if (RESULT_OK != resultCode)
  211. return;
  212. if (requestCode == SysConstant.ALBUM_PREVIEW_BACK) {
  213. boolean finishActivity = data.getExtras().getBoolean("finish");
  214. if (finishActivity) {
  215. ImageGridActivity.this.finish();
  216. }
  217. }
  218. super.onActivityResult(requestCode, resultCode, data);
  219. }
  220. @Override
  221. protected void onDestroy() {
  222. setAdapterSelectedMap(null);
  223. imServiceHelper.disconnect(this);
  224. super.onStop();
  225. }
  226. public static MessageInfo drawMessageInfo(Activity activity, ImageItem item) {
  227. Logger.getLogger(ImageGridActivity.class).d("chat#pic#create picture messageinfo");
  228. MessageInfo msg = new MessageInfo();
  229. if (new File(item.getImagePath()).exists()) {
  230. msg.setSavePath(item.getImagePath());
  231. } else {
  232. if (new File(item.getThumbnailPath()).exists()) {
  233. msg.setSavePath(item.getThumbnailPath());
  234. } else {
  235. // 找不到图片路径时使用加载失败的图片展示
  236. msg.setSavePath(null);
  237. }
  238. }
  239. // 将图片发送至服务器
  240. msg.setMsgFromUserId(CacheHub.getInstance().getLoginUserId());
  241. msg.setIsSend(true);
  242. msg.setMsgCreateTime((int) (System.currentTimeMillis() / 1000));
  243. msg.setDisplayType(SysConstant.DISPLAY_TYPE_IMAGE);
  244. msg.setMsgType(SysConstant.MESSAGE_TYPE_TELETEXT);
  245. msg.setMsgContent("");
  246. msg.setMsgAttachContent("");
  247. msg.setTargetId(CHAT_USER_ID);
  248. msg.setMsgLoadState(SysConstant.MESSAGE_STATE_LOADDING);
  249. msg.setMsgReadStatus(SysConstant.MESSAGE_ALREADY_READ);
  250. //int messageSendRequestNo = CacheHub.getInstance().obtainMsgId();
  251. //msg.setMsgId(messageSendRequestNo);
  252. CacheHub.getInstance().pushMsg(msg);
  253. MessageActivity.addItem(msg);
  254. return msg;
  255. }
  256. public static void setSendText(int selNum) {
  257. if (selNum == 0) {
  258. finish.setText(context.getResources().getString(R.string.send));
  259. } else {
  260. finish.setText(context.getResources().getString(R.string.send)
  261. + "(" + selNum + ")");
  262. }
  263. }
  264. public static void setAdapterSelectedMap(Map<Integer, ImageItem> map) {
  265. Iterator<Integer> it = adapter.getSelectMap().keySet().iterator();
  266. if (map != null) {
  267. while (it.hasNext()) {
  268. int key = (Integer) it.next();
  269. if (map.containsKey(key)) {
  270. adapter.updateSelectedStatus(key, true);
  271. } else {
  272. adapter.updateSelectedStatus(key, false);
  273. }
  274. }
  275. adapter.setSelectMap(map);
  276. adapter.setSelectTotalNum(map.size());
  277. } else {
  278. while (it.hasNext()) {
  279. int key = (Integer) it.next();
  280. adapter.updateSelectedStatus(key, false);
  281. }
  282. adapter.setSelectMap(null);
  283. adapter.setSelectTotalNum(0);
  284. }
  285. adapter.notifyDataSetChanged();
  286. }
  287. public static ImageGridAdapter getAdapter() {
  288. return adapter;
  289. }
  290. @Override
  291. public boolean onTouch(View view, MotionEvent motionEvent) {
  292. switch (motionEvent.getAction()) {
  293. case MotionEvent.ACTION_DOWN:
  294. adapter.unlock();
  295. break;
  296. }
  297. return false;
  298. }
  299. @Override
  300. public void onAction(String action, Intent intent,
  301. BroadcastReceiver broadcastReceiver) {
  302. // TODO Auto-generated method stub
  303. }
  304. @Override
  305. public void onIMServiceConnected() {
  306. // TODO Auto-generated method stub
  307. }
  308. }