package in.co.praveenkumar.mdroid.dialog; import in.co.praveenkumar.R; import in.co.praveenkumar.mdroid.helper.LetterColor; import in.co.praveenkumar.mdroid.helper.SessionSetting; import in.co.praveenkumar.mdroid.model.MoodleContact; import in.co.praveenkumar.mdroid.model.MoodleSiteInfo; import in.co.praveenkumar.mdroid.model.MoodleUser; import in.co.praveenkumar.mdroid.model.MoodleUserCourse; import in.co.praveenkumar.mdroid.task.ContactSyncTask; import java.util.List; import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class UserinfoDialog extends Dialog implements android.view.View.OnClickListener { Context context; SessionSetting session; MoodleSiteInfo siteinfo; MoodleUser user; List<MoodleUserCourse> mCourses; CourseListAdapter userCourseListAdapter; ListView userCourseList; Boolean isContact; // Widgets ImageView contactIcon; TextView userEmail; TextView userSkype; TextView userUrl; TextView userCity; public UserinfoDialog(Context context, long siteid, int userid) { super(context); this.context = context; this.session = new SessionSetting(context); siteinfo = MoodleSiteInfo.findById(MoodleSiteInfo.class, siteid); List<MoodleUser> mUsers = MoodleUser.find(MoodleUser.class, "userid = ? and siteid = ?", userid + "", siteid + ""); if (mUsers != null && !mUsers.isEmpty()) user = mUsers.get(0); mCourses = MoodleUserCourse .find(MoodleUserCourse.class, "userid = ? and siteid = ?", user.getUserid() + "", siteid + ""); // Check if this user is a contact List<MoodleContact> mContacts = MoodleContact.find(MoodleContact.class, "contactid = ? and siteid = ?", userid + "", siteid + ""); isContact = (mContacts != null && !mContacts.isEmpty()); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.dialog_userinfo); TextView userImage = (TextView) findViewById(R.id.dialog_userinfo_user_image); TextView userFullname = (TextView) findViewById(R.id.dialog_userinfo_user_fullname); ImageView messageIcon = (ImageView) findViewById(R.id.dialog_userinfo_message_icon); contactIcon = (ImageView) findViewById(R.id.dialog_userinfo_contact_icon); // Set Info Header LayoutInflater inflater = this.getLayoutInflater(); LinearLayout infoHeaderView = (LinearLayout) inflater.inflate( R.layout.list_header_userinfo, null); // Get views LinearLayout userEmailLayout = (LinearLayout) infoHeaderView .findViewById(R.id.dialog_userinfo_layout_email); LinearLayout userSkypeLayout = (LinearLayout) infoHeaderView .findViewById(R.id.dialog_userinfo_layout_skype); LinearLayout userUrlLayout = (LinearLayout) infoHeaderView .findViewById(R.id.dialog_userinfo_layout_url); LinearLayout userCityLayout = (LinearLayout) infoHeaderView .findViewById(R.id.dialog_userinfo_layout_location); userEmail = (TextView) infoHeaderView .findViewById(R.id.dialog_userinfo_user_email); userSkype = (TextView) infoHeaderView .findViewById(R.id.dialog_userinfo_user_skype); userUrl = (TextView) infoHeaderView .findViewById(R.id.dialog_userinfo_user_url); userCity = (TextView) infoHeaderView .findViewById(R.id.dialog_userinfo_user_city); if (user == null) return; // Set OnClickListeners userEmailLayout.setOnClickListener(this); userSkypeLayout.setOnClickListener(this); userUrlLayout.setOnClickListener(this); userCityLayout.setOnClickListener(this); messageIcon.setOnClickListener(this); contactIcon.setOnClickListener(this); // Set values // Name and Image String name = user.getFullname(); char firstChar = 0; if (name.length() != 0) firstChar = name.charAt(0); userImage.setText(firstChar + ""); userImage.setBackgroundColor(LetterColor.of(firstChar)); userFullname.setText(user.getFullname()); // Contact icon if (isContact) contactIcon.setImageResource(R.drawable.icon_contact_remove); else contactIcon.setImageResource(R.drawable.icon_contact_add); // Email if (user.getEmail() != null && !user.getEmail().contentEquals("")) userEmail.setText(user.getEmail()); else userEmailLayout.setVisibility(LinearLayout.GONE); // Skype if (user.getSkype() != null && !user.getSkype().contentEquals("")) userSkype.setText(user.getSkype()); else userSkypeLayout.setVisibility(LinearLayout.GONE); // Url if (user.getUrl() != null && !user.getUrl().contentEquals("")) userUrl.setText(user.getUrl()); else userUrlLayout.setVisibility(LinearLayout.GONE); // City if (user.getCity() != null && !user.getCity().contentEquals("")) userCity.setText(user.getCity()); else userCityLayout.setVisibility(LinearLayout.GONE); // Set course list userCourseList = (ListView) findViewById(R.id.dialog_userinfo_user_infolist); userCourseList.addHeaderView(infoHeaderView); userCourseListAdapter = new CourseListAdapter(context); userCourseList.setAdapter(userCourseListAdapter); } @Override public void onClick(View v) { Intent DefaultIntent = new Intent(android.content.Intent.ACTION_SEND); DefaultIntent.setType("text/plain"); switch (v.getId()) { case R.id.dialog_userinfo_message_icon: MoodleContact contact = new MoodleContact(user.getUserid(), user.getFullname()); MessageDialog md = new MessageDialog(context); md.setContact(contact); md.show(); break; case R.id.dialog_userinfo_contact_icon: new contactStateChangeBg().execute(""); break; case R.id.dialog_userinfo_layout_email: Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts( "mailto", user.getEmail(), null)); context.startActivity(Intent.createChooser(intent, "Send Email")); break; case R.id.dialog_userinfo_layout_skype: DefaultIntent.putExtra(android.content.Intent.EXTRA_TEXT, userSkype.getText()); context.startActivity(Intent.createChooser(DefaultIntent, "Choose action for Skype")); break; case R.id.dialog_userinfo_layout_url: DefaultIntent.putExtra(android.content.Intent.EXTRA_TEXT, userUrl.getText()); context.startActivity(Intent.createChooser(DefaultIntent, "Choose action for URL")); break; case R.id.dialog_userinfo_layout_location: DefaultIntent.putExtra(android.content.Intent.EXTRA_TEXT, userCity.getText()); context.startActivity(Intent.createChooser(DefaultIntent, "Choose action for Location")); break; } } private class contactStateChangeBg extends AsyncTask<String, Integer, Boolean> { @Override protected void onPreExecute() { if (isContact) contactIcon.setImageResource(R.drawable.icon_contact_add); else contactIcon.setImageResource(R.drawable.icon_contact_remove); } @Override protected Boolean doInBackground(String... params) { ContactSyncTask cst = new ContactSyncTask(session.getmUrl(), session.getToken(), session.getCurrentSiteId()); Boolean status = isContact ? cst.RemoveContact(user) : cst .AddContact(user); if (status) { /** * Delete contact if it has been removed. Removed => currently a * contact. */ if (isContact) MoodleContact.deleteAll(MoodleContact.class, "siteid = ? and contactid = ?", String.valueOf(session.getCurrentSiteId()), String.valueOf(user.getUserid() )); cst.syncAllContacts(); } return status; } @Override protected void onPostExecute(Boolean result) { if (result) isContact = !isContact; else Toast.makeText(context, "Action failed!", Toast.LENGTH_LONG) .show(); if (isContact) contactIcon.setImageResource(R.drawable.icon_contact_remove); else contactIcon.setImageResource(R.drawable.icon_contact_add); } } public class CourseListAdapter extends BaseAdapter { private final Context context; public CourseListAdapter(Context context) { this.context = context; } @Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.list_item_usercourse, parent, false); viewHolder.shortname = (TextView) convertView .findViewById(R.id.list_course_shortname); viewHolder.fullname = (TextView) convertView .findViewById(R.id.list_course_fullname); // Save the holder with the view convertView.setTag(viewHolder); } else { // Just use the viewHolder and avoid findviewbyid() viewHolder = (ViewHolder) convertView.getTag(); } // Assign values final MoodleUserCourse mCourse = mCourses.get(position); viewHolder.shortname.setText(mCourse.getShortname()); viewHolder.fullname.setText(mCourse.getFullname()); return convertView; } @Override public int getCount() { return mCourses.size(); } @Override public Object getItem(int position) { return mCourses.get(position); } @Override public long getItemId(int position) { return position; } } static class ViewHolder { TextView shortname; TextView fullname; } }