package com.ijoomer.components.jbolochat; import android.content.Context; import android.content.res.TypedArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; 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 android.widget.Spinner; import android.widget.TextView; import com.androidquery.AQuery; import com.ijoomer.common.classes.IjoomerUtilities; import com.ijoomer.common.classes.ViewHolder; import com.ijoomer.customviews.IjoomerButton; import com.ijoomer.customviews.IjoomerEditText; 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.util.ArrayList; import java.util.HashMap; /** * This Class Contains All Method Related To JboloOnlineUserListActivity. * * @author tasol * */ public class JboloOnlineUserListActivity extends JBoloChatMasterActivity { private ListView lstOnline; private LinearLayout lnrUserStatus; private ProgressBar pbrOnline; private IjoomerEditText edtStatusMessage; private Spinner spnStatus; private IjoomerButton btnSetStatus; private ArrayList<Object> statusList = new ArrayList<Object>(); private ArrayList<SmartListItem> listData = new ArrayList<SmartListItem>(); private SmartListAdapterWithHolder adapterWithHolder; private MyCustomAdapter statusAdapter; private AQuery androidQuery; private JBoloChatManager chatManager; private JBoloChatDataProvider provider; /** * Overrides methods */ @Override public int setLayoutId() { return R.layout.jbolo_chat_online_member_list; } @Override public void initComponents() { lstOnline = (ListView) findViewById(R.id.lstOnline); pbrOnline = (ProgressBar) findViewById(R.id.pbrOnline); lnrUserStatus = (LinearLayout) findViewById(R.id.lnrUserStatus); lnrUserStatus.setVisibility(View.VISIBLE); pbrOnline.setVisibility(View.VISIBLE); edtStatusMessage = (IjoomerEditText) findViewById(R.id.edtStatusMessage); spnStatus = (Spinner) findViewById(R.id.spnStatus); btnSetStatus = (IjoomerButton) findViewById(R.id.btnSetStatus); androidQuery = new AQuery(this); chatManager = JBoloChatManager.getInstance(this); chatManager.setCurrentChatId("0"); provider = new JBoloChatDataProvider(this); } @Override public void prepareViews() { ((ImageView)getHeaderView().findViewById(R.id.imgHeader)).setVisibility(View.VISIBLE); adapterWithHolder = getListAdapter(); lstOnline.setAdapter(adapterWithHolder); prepareStatusList(); if(getSmartApplication().readSharedPreferences().getString(SP_JBOLOCHAT_USER_STATUS_MESSAGE, "").trim().length()>0){ edtStatusMessage.setText(getSmartApplication().readSharedPreferences().getString(SP_JBOLOCHAT_USER_STATUS_MESSAGE, "")); } spnStatus.setSelection(getSmartApplication().readSharedPreferences().getInt(SP_JBOLOCHAT_USER_STATUS, 0)); } @Override protected void onResume() { super.onResume(); } @Override public void setActionListeners() { spnStatus.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { getSmartApplication().writeSharedPreferences(SP_JBOLOCHAT_USER_STATUS, spnStatus.getSelectedItemPosition()); final SeekBar proSeekBar = IjoomerUtilities.getLoadingDialog(getString(R.string.dialog_loading_sending_request)); provider.setStaus(edtStatusMessage.getText().toString().trim(), "" + (spnStatus.getSelectedItemPosition() + 1), new WebCallListener() { @Override public void onCallComplete(int responseCode, String errorMessage, ArrayList<HashMap<String, String>> data1, Object data2) { if (responseCode != 200) { responseErrorMessageHandler(responseCode); } } @Override public void onProgressUpdate(int progressCount) { proSeekBar.setProgress(progressCount); } }); } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); btnSetStatus.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (!getSmartApplication().readSharedPreferences().getString(SP_JBOLOCHAT_USER_STATUS_MESSAGE, "").equals(edtStatusMessage.getText().toString().trim())) { getSmartApplication().writeSharedPreferences(SP_JBOLOCHAT_USER_STATUS_MESSAGE, edtStatusMessage.getText().toString().trim()); final SeekBar proSeekBar = IjoomerUtilities.getLoadingDialog(getString(R.string.dialog_loading_sending_request)); provider.setStaus(edtStatusMessage.getText().toString().trim(), "" + (spnStatus.getSelectedItemPosition() + 1), new WebCallListener() { @Override public void onCallComplete(int responseCode, String errorMessage, ArrayList<HashMap<String, String>> data1, Object data2) { if (responseCode != 200) { responseErrorMessageHandler(responseCode); } } @Override public void onProgressUpdate(int progressCount) { proSeekBar.setProgress(progressCount); } }); } } }); lstOnline.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { HashMap<String,String> row = ((HashMap<String, String>)listData.get(i).getValues().get(0)); try { loadNew(JboloMessageListActivity.class,JboloOnlineUserListActivity.this,false,"IN_CHAT_USER",row); } catch (Throwable e) { e.printStackTrace(); } } }); chatManager.addJBoloChatHandler(new JBoloChatHandler() { @Override public void onUserOnlineUpdated(ArrayList<HashMap<String, String>> userOnline) { pbrOnline.setVisibility(View.GONE); prepareList(userOnline); } @Override public void onMessageUpdate(ArrayList<HashMap<String, String>> onMessage) { } }); } @Override public void onCheckedChanged(RadioGroup arg0, int arg1) { } /** * Class methods */ /** * This method used to prepare login user status. */ private void prepareStatusList(){ String[] status = getResources().getStringArray(R.array.jbolo_chat_status); TypedArray statusIcon = getResources().obtainTypedArray(R.array.jbolo_chat_status_icon); for (int i=0;i<status.length;i++){ HashMap<String,Object> data = new HashMap<String, Object>(); data.put("status",status[i]); data.put("statusIcon",statusIcon.getResourceId(i,-1)); statusList.add(data); } statusAdapter = new MyCustomAdapter(this,statusList); spnStatus.setAdapter(statusAdapter); statusAdapter.setDefaultPostion(0); } /** * This method used to shown response message. * * @param responseCode * represented response code */ private void responseErrorMessageHandler(final int responseCode) { 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() { } }); } /** * This method used to prepare online user. * @param data represented user data */ public void prepareList(ArrayList<HashMap<String, String>> data) { if(data!=null && data.size()>0){ listData.clear(); for (HashMap<String, String> hashMap : data) { SmartListItem item = new SmartListItem(); item.setItemLayout(R.layout.jbolo_chat_online_member_list_item); ArrayList<Object> obj = new ArrayList<Object>(); obj.add(hashMap); item.setValues(obj); listData.add(item); } adapterWithHolder.notifyDataSetChanged(); } } /** * List adapter online user. */ private SmartListAdapterWithHolder getListAdapter() { SmartListAdapterWithHolder adapter = new SmartListAdapterWithHolder(this, R.layout.jbolo_chat_online_member_list_item, listData, new ItemView() { @Override public View setItemView(int position, View v, SmartListItem item, ViewHolder holder) { holder.jbolotxtUserName = (IjoomerTextView) v.findViewById(R.id.jbolotxtUserName); holder.jboloUserImg = (ImageView) v.findViewById(R.id.jboloUserImg); holder.jbolotxtUserStatusMessage = (IjoomerTextView) v.findViewById(R.id.jbolotxtUserStatusMessage); holder.jboloUserStatusImg = (ImageView) v.findViewById(R.id.jboloUserStatusImg); @SuppressWarnings("unchecked") final HashMap<String, String> row = (HashMap<String, String>) item.getValues().get(0); holder.jbolotxtUserName.setText(row.get(USERNAME)); holder.jbolotxtUserStatusMessage.setText(row.get(STATUSMSG)); androidQuery.id(holder.jboloUserImg).image(row.get(AVTR), true, true, getDeviceWidth(), 0); if(row.get(STATUS).equals("1")){ androidQuery.id(holder.jboloUserStatusImg).image(getResources().getDrawable(R.drawable.jbolo_chat_available)); }else if(row.get(STATUS).equals("2")){ androidQuery.id(holder.jboloUserStatusImg).image(getResources().getDrawable(R.drawable.jbolo_chat_busy)); }else if(row.get(STATUS).equals("3")){ androidQuery.id(holder.jboloUserStatusImg).image(getResources().getDrawable(R.drawable.jbolo_chat_away)); } return v; } @Override public View setItemView(int position, View v, SmartListItem item) { return null; } }); return adapter; } /** * this custom class for login user status spinner adapter. */ class MyCustomAdapter extends ArrayAdapter<Object> { Context context; ArrayList<Object> list; private int defaultPosition; public int getDefaultPosition() { return defaultPosition; } public MyCustomAdapter(Context context, ArrayList<Object> objects) { super(context, 0, objects); this.context = context; list = objects; } public void setDefaultPostion(int position) { this.defaultPosition = position; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { return getCustomView(position, convertView, parent); } @Override public View getView(int position, View convertView, ViewGroup parent) { return getCustom(position, convertView, parent); } public View getCustom(int position, View convertView, ViewGroup parent) { View row = LayoutInflater.from(context).inflate( android.R.layout.simple_spinner_item, parent, false); TextView label = (TextView) row.findViewById(android.R.id.text1); label.setText(((HashMap<String,Object>)list.get(position)).get("status").toString()); label.setCompoundDrawablePadding(convertSizeToDeviceDependent(5)); label.setCompoundDrawablesWithIntrinsicBounds(((Integer) ((HashMap<String, Object>) list.get(position)).get("statusIcon")), 0, 0, 0); return row; } public View getCustomView(int position, View convertView, ViewGroup parent) { View row = LayoutInflater.from(context).inflate( R.layout.ijoomer_spinner_item, parent, false); IjoomerTextView label = (IjoomerTextView) row .findViewById(R.id.text1); label.setText(((HashMap<String,Object>)list.get(position)).get("status").toString()); label.setCompoundDrawablePadding(convertSizeToDeviceDependent(5)); label.setCompoundDrawablesWithIntrinsicBounds(((Integer) ((HashMap<String, Object>) list.get(position)).get("statusIcon")), 0, 0, 0); return row; } } }