package fr.neamar.kiss.result;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Handler;
import android.provider.ContactsContract;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.PopupMenu;
import android.widget.TextView;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import fr.neamar.kiss.KissApplication;
import fr.neamar.kiss.R;
import fr.neamar.kiss.UiTweaks;
import fr.neamar.kiss.adapter.RecordAdapter;
import fr.neamar.kiss.pojo.ContactsPojo;
import fr.neamar.kiss.searcher.QueryInterface;
import fr.neamar.kiss.ui.ImprovedQuickContactBadge;
public class ContactsResult extends Result {
private final ContactsPojo contactPojo;
private final QueryInterface queryInterface;
public ContactsResult(QueryInterface queryInterface, ContactsPojo contactPojo) {
super();
this.pojo = this.contactPojo = contactPojo;
this.queryInterface = queryInterface;
}
@Override
public View display(Context context, int position, View v) {
if (v == null)
v = inflateFromId(context, R.layout.item_contact);
// Contact name
TextView contactName = (TextView) v.findViewById(R.id.item_contact_name);
contactName.setText(enrichText(contactPojo.displayName, context));
// Contact phone
TextView contactPhone = (TextView) v.findViewById(R.id.item_contact_phone);
contactPhone.setText(contactPojo.phone);
// Contact photo
ImprovedQuickContactBadge contactIcon = (ImprovedQuickContactBadge) v
.findViewById(R.id.item_contact_icon);
contactIcon.setImageDrawable(getDrawable(context));
contactIcon.assignContactUri(Uri.withAppendedPath(
ContactsContract.Contacts.CONTENT_LOOKUP_URI,
String.valueOf(contactPojo.lookupKey)));
contactIcon.setExtraOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
recordLaunch(v.getContext());
queryInterface.launchOccurred(-1, ContactsResult.this);
}
});
int primaryColor = Color.parseColor(UiTweaks.getPrimaryColor(context));
// Phone action
ImageButton phoneButton = (ImageButton) v.findViewById(R.id.item_contact_action_phone);
phoneButton.setColorFilter(primaryColor);
// Message action
ImageButton messageButton = (ImageButton) v.findViewById(R.id.item_contact_action_message);
messageButton.setColorFilter(primaryColor);
PackageManager pm = context.getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
phoneButton.setVisibility(View.VISIBLE);
messageButton.setVisibility(View.VISIBLE);
phoneButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
launchCall(v.getContext());
}
});
messageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
launchMessaging(v.getContext());
}
});
if (contactPojo.homeNumber)
messageButton.setVisibility(View.INVISIBLE);
else
messageButton.setVisibility(View.VISIBLE);
} else {
phoneButton.setVisibility(View.INVISIBLE);
messageButton.setVisibility(View.INVISIBLE);
}
return v;
}
@Override
protected PopupMenu buildPopupMenu(Context context, final RecordAdapter parent, View parentView) {
return inflatePopupMenu(R.menu.menu_item_contact, context, parentView);
}
@Override
protected Boolean popupMenuClickHandler(Context context, RecordAdapter parent, MenuItem item) {
switch (item.getItemId()) {
case R.id.item_contact_copy_phone:
copyPhone(context, contactPojo);
return true;
}
return super.popupMenuClickHandler(context, parent, item);
}
@SuppressWarnings("deprecation")
private void copyPhone(Context context, ContactsPojo contactPojo) {
android.content.ClipboardManager clipboard =
(android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
android.content.ClipData clip = android.content.ClipData.newPlainText(
"Phone number for " + contactPojo.displayName,
contactPojo.phone);
clipboard.setPrimaryClip(clip);
}
@SuppressWarnings("deprecation")
@Override
public Drawable getDrawable(Context context) {
if (contactPojo.icon != null) {
InputStream inputStream = null;
try {
inputStream = context.getContentResolver().openInputStream(contactPojo.icon);
return Drawable.createFromStream(inputStream, null);
} catch (FileNotFoundException ignored) {
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException ignored) {
}
}
}
}
// Default icon
return context.getResources().getDrawable(R.drawable.ic_contact);
}
@Override
public void doLaunch(Context context, View v) {
Intent viewContact = new Intent(Intent.ACTION_VIEW);
viewContact.setData(Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI,
String.valueOf(contactPojo.lookupKey)));
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
viewContact.setSourceBounds(v.getClipBounds());
}
viewContact.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
viewContact.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
context.startActivity(viewContact);
}
private void launchMessaging(final Context context) {
String url = "sms:" + Uri.encode(contactPojo.phone);
Intent i = new Intent(Intent.ACTION_SENDTO, Uri.parse(url));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
recordLaunch(context);
queryInterface.launchOccurred(-1, ContactsResult.this);
}
}, KissApplication.TOUCH_DELAY);
}
private void launchCall(final Context context) {
String url = "tel:" + Uri.encode(contactPojo.phone);
Intent i = new Intent(Intent.ACTION_CALL, Uri.parse(url));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
recordLaunch(context);
queryInterface.launchOccurred(-1, ContactsResult.this);
}
}, KissApplication.TOUCH_DELAY);
}
}