package com.ijoomer.components.jbolochat; import android.app.Activity; import android.content.Intent; import android.text.Html; import android.text.SpannableStringBuilder; import android.text.method.LinkMovementMethod; import android.text.style.URLSpan; import android.view.LayoutInflater; import android.view.View; import android.widget.AbsListView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.RadioGroup; import android.widget.SeekBar; import com.androidquery.AQuery; import com.androidquery.callback.AjaxCallback; import com.androidquery.callback.AjaxStatus; import com.ijoomer.common.classes.IjoomerFileChooserActivity; import com.ijoomer.common.classes.IjoomerUtilities; import com.ijoomer.common.classes.URLImageParser; import com.ijoomer.common.classes.ViewHolder; import com.ijoomer.customviews.IjoomerTextView; import com.ijoomer.library.jbolochat.JBoloChatDataProvider; import com.ijoomer.src.R; import com.ijoomer.weservice.WebCallListener; import com.smart.framework.CustomAlertNeutral; import com.smart.framework.ItemView; import com.smart.framework.SmartListAdapterWithHolder; import com.smart.framework.SmartListItem; import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; /** * This Class Contains All Method Related To JboloHistoryListActivity. * * @author tasol * */ public class JboloHistoryListActivity extends com.ijoomer.components.jbolochat.JBoloChatMasterActivity { private ListView lstMessage; private View listFooter; private ArrayList<SmartListItem> listData = new ArrayList<SmartListItem>(); private SmartListAdapterWithHolder adapterWithHolder; private AQuery androidQuery; private JBoloChatDataProvider provider; final private int DOWNLOAD_FILE_LOCATION = 5; private String IN_NODEID; private String IN_CHAT_USER_NAME; private String downlodFileUrl=""; /** * Overrides methods */ @Override public int setLayoutId() { return R.layout.jbolo_chat_online_member_list; } @Override public void initComponents() { lstMessage = (ListView) findViewById(R.id.lstOnline); listFooter = LayoutInflater.from(this).inflate(R.layout.ijoomer_list_footer, null); lstMessage.addFooterView(listFooter, null, false); androidQuery = new AQuery(this); provider = new JBoloChatDataProvider(this); } @Override public void prepareViews() { getIntentData(); } @Override protected void onResume() { super.onResume(); } @Override public void setActionListeners() { lstMessage.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int i) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if ((firstVisibleItem + visibleItemCount) >= totalItemCount && totalItemCount > 1) { if (!provider.isCalling() && provider.hasNextPage()) { listFooterVisible(); provider.getHistory(IN_NODEID,new WebCallListener() { @Override public void onCallComplete(int responseCode, String errorMessage, ArrayList<HashMap<String, String>> data1, Object data2) { listFooterInvisible(); if (responseCode == 200) { prepareList(data1, true); } else { responseErrorMessageHandler(responseCode,false); } } @Override public void onProgressUpdate(int progressCount) { } }); } } } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { if (requestCode == DOWNLOAD_FILE_LOCATION) { final String path = data.getStringExtra("IN_PATH"); if(downlodFileUrl.trim().length()>0){ int startIndex = downlodFileUrl.lastIndexOf("/"); int endIndex = downlodFileUrl.lastIndexOf("."); String downlodFileName = downlodFileUrl.substring(startIndex,endIndex); androidQuery.download(downlodFileUrl, new File(path + downlodFileName), new AjaxCallback<File>() { @Override public void callback(String url, File object, AjaxStatus status) { super.callback(url, object, status); downlodFileUrl=""; IjoomerUtilities.getCustomOkDialog(getString(R.string.download), status.getMessage(), getString(R.string.ok), R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() { @Override public void NeutralMethod() { } }); } }); } } } } @Override public void onCheckedChanged(RadioGroup arg0, int arg1) { } /** * Class methods */ /** * This method used to get intetn data. */ private void getIntentData(){ IN_NODEID = getIntent().getStringExtra("IN_NODEID") == null ?"" : getIntent().getStringExtra("IN_NODEID"); IN_CHAT_USER_NAME = getIntent().getStringExtra("IN_CHAT_USER_NAME") == null ?"" : getIntent().getStringExtra("IN_CHAT_USER_NAME"); ((IjoomerTextView)getHeaderView().findViewById(R.id.txtHeader)).setText(IN_CHAT_USER_NAME); ((IjoomerTextView)getHeaderView().findViewById(R.id.txtHeader)).setVisibility(View.VISIBLE); getChatHistory(); } /** * This method used to get current chat history. */ private void getChatHistory(){ final SeekBar proSeekBar = IjoomerUtilities.getLoadingDialog(getString(R.string.dialog_loading_sending_request)); provider.getHistory(IN_NODEID,new WebCallListener() { @Override public void onCallComplete(int responseCode, String errorMessage, ArrayList<HashMap<String, String>> data1, Object data2) { if(responseCode==200){ prepareList(data1,false); adapterWithHolder = getListAdapter(); lstMessage.setAdapter(adapterWithHolder); }else{ responseErrorMessageHandler(responseCode,true); } } @Override public void onProgressUpdate(int progressCount) { proSeekBar.setProgress(progressCount); } }); } /** * This method used to shown response message. * * @param responseCode * represented response code * @param finishActivityOnConnectionProblem * represented finish activity on connection problem */ private void responseErrorMessageHandler(final int responseCode, final boolean finishActivityOnConnectionProblem) { IjoomerUtilities.getCustomOkDialog(getString(R.string.jbolochat), getString(getResources().getIdentifier("code" + responseCode, "string", getPackageName())), getString(R.string.ok), R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() { @Override public void NeutralMethod() { if(responseCode==599 && finishActivityOnConnectionProblem){ finish(); } } }); } /** * This method used to visible list footer */ public void listFooterVisible() { listFooter.setVisibility(View.VISIBLE); } /** * This method used to gone list footer */ public void listFooterInvisible() { listFooter.setVisibility(View.GONE); } /** * This method used to prepare list for history message. * @param data represented chat data * @param isAppend represented is data append */ public void prepareList(ArrayList<HashMap<String, String>> data,boolean isAppend) { if(data!=null && data.size()>0){ if(!isAppend){ listData.clear(); } for (HashMap<String, String> hashMap : data) { SmartListItem item = new SmartListItem(); item.setItemLayout(R.layout.jbolo_chat_message_list_item); ArrayList<Object> obj = new ArrayList<Object>(); obj.add(hashMap); item.setValues(obj); if(isAppend){ adapterWithHolder.add(item); }else{ listData.add(item); } } } } /** * List adapter chat history. */ private SmartListAdapterWithHolder getListAdapter() { SmartListAdapterWithHolder adapterWithHolder = new SmartListAdapterWithHolder(this, R.layout.jbolo_chat_message_list_item, listData, new ItemView() { @Override public View setItemView(final int position, View v, SmartListItem item, final ViewHolder holder) { holder.lnrChatOthers = (LinearLayout) v.findViewById(R.id.lnrChatOthers); holder.imgChatOthersUser = (ImageView) v.findViewById(R.id.imgChatOthersUser); holder.txtChatOthersUserName = (IjoomerTextView) v.findViewById(R.id.txtChatOthersUserName); holder.txtChatOthersMessage = (IjoomerTextView) v.findViewById(R.id.txtChatOthersMessage); holder.txtChatOthersDate = (IjoomerTextView) v.findViewById(R.id.txtChatOthersDate); holder.lnrChatMe = (LinearLayout) v.findViewById(R.id.lnrChatMe); holder.txtMeChatDate = (IjoomerTextView) v.findViewById(R.id.txtMeChatDate); holder.txtMeChatMessage = (IjoomerTextView) v.findViewById(R.id.txtMeChatMessage); holder.pbrMeChatLoading = (ProgressBar) v.findViewById(R.id.pbrMeChatLoading); holder.pbrMeChatLoading.setVisibility(View.GONE); holder.lnrChat = (LinearLayout) v.findViewById(R.id.lnrChat); holder.txtChatMessage = (IjoomerTextView) v.findViewById(R.id.txtChatMessage); final HashMap<String, String> row = (HashMap<String, String>) item.getValues().get(0); if (row.get(FROMID).equals("-1")) { holder.lnrChat.setVisibility(View.VISIBLE); holder.lnrChatOthers.setVisibility(View.GONE); holder.lnrChatMe.setVisibility(View.GONE); holder.txtChatMessage.setVisibility(View.VISIBLE); holder.txtChatMessage.setText(Html.fromHtml(row.get(MESSAGE).trim())); }else if (row.get(FROMID).equals("0")) { if (row.containsKey(CUSTOM)) { holder.pbrMeChatLoading.setVisibility(View.VISIBLE); } holder.lnrChatMe.setVisibility(View.VISIBLE); holder.lnrChatOthers.setVisibility(View.GONE); holder.lnrChat.setVisibility(View.GONE); SimpleDateFormat ft = new SimpleDateFormat("dd MMM hh:mm a"); try { holder.txtMeChatDate.setText(ft.format(new Date(IjoomerUtilities.getMillisecondsTimeZone(Long.parseLong(row.get(TIMESTAMP)))))); } catch (Exception e) { holder.txtMeChatDate.setText(""); } holder.txtMeChatMessage.setVisibility(View.VISIBLE); SpannableStringBuilder builder; try { URLImageParser p = new URLImageParser(holder.txtMeChatMessage, JboloHistoryListActivity.this); builder = (SpannableStringBuilder) Html.fromHtml(row.get(MESSAGE).trim(), p, null); } catch (Throwable e) { builder = (SpannableStringBuilder) Html.fromHtml(row.get(MESSAGE)); } builder = (SpannableStringBuilder) IjoomerUtilities.RichTextUtils.replaceAll(builder, URLSpan.class, new IjoomerUtilities.URLSpanConverter(new IjoomerUtilities.SpnebleListener() { @Override public void onUrlClick(String url) { downlodFileUrl = url; Intent intent = new Intent(JboloHistoryListActivity.this, IjoomerFileChooserActivity.class); startActivityForResult(intent, DOWNLOAD_FILE_LOCATION); } })); holder.txtMeChatMessage.setMovementMethod(LinkMovementMethod.getInstance()); holder.txtMeChatMessage.setText(builder); }else{ holder.lnrChatOthers.setVisibility(View.VISIBLE); holder.lnrChatMe.setVisibility(View.GONE); holder.lnrChat.setVisibility(View.GONE); holder.imgChatOthersUser.setVisibility(View.VISIBLE); androidQuery.id(holder.imgChatOthersUser).image(row.get(AVTR), true, true); holder.txtChatOthersUserName.setVisibility(View.VISIBLE); holder.txtChatOthersUserName.setText(row.get(FROMNAME)); SimpleDateFormat ft = new SimpleDateFormat("dd MMM hh:mm a"); try { holder.txtChatOthersDate.setText(ft.format(new Date(IjoomerUtilities.getMillisecondsTimeZone(Long.parseLong(row.get(TIMESTAMP)))))); } catch (Exception e) { holder.txtChatOthersDate.setText(""); } holder.txtChatOthersMessage.setVisibility(View.VISIBLE); SpannableStringBuilder builder; try { URLImageParser p = new URLImageParser(holder.txtChatOthersMessage, JboloHistoryListActivity.this); builder = (SpannableStringBuilder) Html.fromHtml(row.get(MESSAGE).trim(), p, null); } catch (Throwable e) { builder = (SpannableStringBuilder) Html.fromHtml(row.get(MESSAGE)); } builder = (SpannableStringBuilder) IjoomerUtilities.RichTextUtils.replaceAll(builder, URLSpan.class, new IjoomerUtilities.URLSpanConverter(new IjoomerUtilities.SpnebleListener() { @Override public void onUrlClick(String url) { downlodFileUrl = url; Intent intent = new Intent(JboloHistoryListActivity.this, IjoomerFileChooserActivity.class); startActivityForResult(intent, DOWNLOAD_FILE_LOCATION); } })); holder.txtChatOthersMessage.setMovementMethod(LinkMovementMethod.getInstance()); holder.txtChatOthersMessage.setText(builder); } return v; } @Override public View setItemView(int position, View v, SmartListItem item) { return null; } }); return adapterWithHolder; } }