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;
}
}