From aa9dd5a1d7fac652045d2c0684a5e32b88a25892 Mon Sep 17 00:00:00 2001
From: kecinzer <kecinzer@gmail.com>
Date: Tue, 22 Jul 2014 15:03:25 +0200
Subject: [PATCH] (2/3) Contact details on incoming call

Change-Id: Iff5c101e8f02493d69558bcda54b96fe98f0523f
Signed-off-by: kecinzer <kecinzer@gmail.com>
---

diff --git a/res/layout/primary_call_info.xml b/res/layout/primary_call_info.xml
index 969c773..e93294c 100644
--- a/res/layout/primary_call_info.xml
+++ b/res/layout/primary_call_info.xml
@@ -186,7 +186,57 @@
                       android:ellipsize="end"/>
         </LinearLayout>
 
-    </LinearLayout>
+        <LinearLayout android:id="@+id/detailedCallInfo"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingStart="@dimen/call_banner_side_padding"
+            android:paddingEnd="@dimen/call_banner_side_padding"
+            android:paddingTop="@dimen/call_banner_top_bottom_padding"
+            android:paddingBottom="@dimen/call_banner_top_bottom_padding"
+            android:orientation="vertical"
+            android:background="@color/incall_call_banner_background"
+            android:visibility="gone">
 
+        <LinearLayout android:id="@+id/organizationContainer"
+                      android:layout_width="wrap_content"
+                      android:layout_height="wrap_content"
+                      android:paddingEnd="@dimen/call_banner_name_number_right_padding"
+                      android:orientation="horizontal">
+            <TextView android:id="@+id/position"
+                      android:layout_width="wrap_content"
+                      android:layout_height="wrap_content"
+                      android:textAppearance="?android:attr/textAppearanceSmall"
+                      android:textColor="@color/incall_call_banner_text_color"
+                      android:singleLine="true"
+                      android:textDirection="ltr" />
+            <TextView android:id="@+id/organization"
+                      android:layout_width="wrap_content"
+                      android:layout_height="wrap_content"
+                      android:textAppearance="?android:attr/textAppearanceSmall"
+                      android:textColor="@color/incall_call_banner_text_color"
+                      android:textStyle="bold"
+                      android:singleLine="true"
+                      android:layout_marginStart="3dp" />
+        </LinearLayout>
+
+        <TextView android:id="@+id/city"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:textAppearance="?android:attr/textAppearanceSmall"
+                  android:textColor="@color/incall_call_banner_text_color"
+                  android:maxLines="1"
+                  android:ellipsize="end" />
+
+        <TextView android:id="@+id/nickName"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:textAppearance="?android:attr/textAppearanceSmall"
+                  android:textColor="@color/incall_call_banner_text_color"
+                  android:maxLines="1"
+                  android:ellipsize="end" />
+
+        </LinearLayout>
+
+    </LinearLayout>
 
 </FrameLayout>
diff --git a/src/com/android/incallui/CallCardFragment.java b/src/com/android/incallui/CallCardFragment.java
index f7bf646..1951b6a 100644
--- a/src/com/android/incallui/CallCardFragment.java
+++ b/src/com/android/incallui/CallCardFragment.java
@@ -56,6 +56,11 @@
     private TextView mProviderLabel;
     private TextView mProviderNumber;
     private ViewGroup mSupplementaryInfoContainer;
+    private View mDetailedCallInfo;
+    private TextView mNickName;
+    private TextView mOrganization;
+    private TextView mPosition;
+    private TextView mCity;
 
     // Secondary caller info
     private ViewStub mSecondaryCallInfo;
@@ -145,6 +150,11 @@
         mProviderNumber = (TextView) view.findViewById(R.id.providerAddress);
         mSupplementaryInfoContainer =
             (ViewGroup) view.findViewById(R.id.supplementary_info_container);
+        mDetailedCallInfo = view.findViewById(R.id.detailedCallInfo);
+        mNickName = (TextView) view.findViewById(R.id.nickName);
+        mPosition = (TextView) view.findViewById(R.id.position);
+        mOrganization = (TextView) view.findViewById(R.id.organization);
+        mCity = (TextView) view.findViewById(R.id.city);
         ViewGroup photoContainer = (ViewGroup) view.findViewById(R.id.photo_container);
         LayoutTransition transition = photoContainer.getLayoutTransition();
         transition.enableTransitionType(LayoutTransition.CHANGING);
@@ -210,7 +220,8 @@
 
     @Override
     public void setPrimary(String number, String name, boolean nameIsNumber, String label,
-            Drawable photo, boolean isConference, boolean isGeneric, boolean isSipCall) {
+            Drawable photo, boolean isConference, boolean isGeneric, boolean isSipCall,
+            String nickName, String organization, String position, String city) {
         Log.d(this, "Setting primary call");
 
         if (isConference) {
@@ -230,6 +241,8 @@
         showInternetCallLabel(isSipCall);
 
         setDrawableToImageView(mPhoto, photo);
+
+        setDetailedInfo(nickName, organization, position, city);
     }
 
     @Override
@@ -557,4 +570,38 @@
             eventText.add(null);
         }
     }
+
+    private void setDetailedInfo(String nickName, String organization, String position, String city) {
+        boolean show = false;
+        if (!TextUtils.isEmpty(nickName)) {
+            show = true;
+            mNickName.setText(nickName);
+            mNickName.setVisibility(View.VISIBLE);
+        } else {
+            mNickName.setVisibility(View.GONE);
+        }
+        if (!TextUtils.isEmpty(organization)) {
+            show = true;
+            mOrganization.setText(organization);
+            mOrganization.setVisibility(View.VISIBLE);
+        } else {
+            mOrganization.setVisibility(View.GONE);
+        }
+        if (!TextUtils.isEmpty(position)) {
+            show = true;
+            mPosition.setText(position);
+            mPosition.setVisibility(View.VISIBLE);
+        } else {
+            mPosition.setVisibility(View.GONE);
+        }
+        if (!TextUtils.isEmpty(city)) {
+            show = true;
+            mCity.setText(city);
+            mCity.setVisibility(View.VISIBLE);
+        } else {
+            mCity.setVisibility(View.GONE);
+        }
+
+        mDetailedCallInfo.setVisibility(show ? View.VISIBLE : View.GONE);
+    }
 }
diff --git a/src/com/android/incallui/CallCardPresenter.java b/src/com/android/incallui/CallCardPresenter.java
index 949d718..2083df3 100644
--- a/src/com/android/incallui/CallCardPresenter.java
+++ b/src/com/android/incallui/CallCardPresenter.java
@@ -359,9 +359,11 @@
             final String number = getNumberForCall(entry);
             final boolean nameIsNumber = name != null && name.equals(entry.number);
             ui.setPrimary(number, name, nameIsNumber, entry.label,
-                    entry.photo, isConference, isGenericConf, entry.isSipCall);
+                    entry.photo, isConference, isGenericConf, entry.isSipCall,
+                    entry.nickName, entry.organization, entry.position, entry.city);
         } else {
-            ui.setPrimary(null, null, false, null, null, isConference, isGenericConf, false);
+            ui.setPrimary(null, null, false, null, null, isConference, isGenericConf, false,
+                    null, null, null, null);
         }
 
     }
@@ -458,7 +460,8 @@
     public interface CallCardUi extends Ui {
         void setVisible(boolean on);
         void setPrimary(String number, String name, boolean nameIsNumber, String label,
-                Drawable photo, boolean isConference, boolean isGeneric, boolean isSipCall);
+                Drawable photo, boolean isConference, boolean isGeneric, boolean isSipCall,
+                String nickName, String organization, String position, String city);
         void setSecondary(boolean show, String name, boolean nameIsNumber, String label,
                 Drawable photo, boolean isConference, boolean isGeneric);
         void setSecondaryImage(Drawable image);
diff --git a/src/com/android/incallui/ContactInfoCache.java b/src/com/android/incallui/ContactInfoCache.java
index 4bbf8fa..9cafdc5 100644
--- a/src/com/android/incallui/ContactInfoCache.java
+++ b/src/com/android/incallui/ContactInfoCache.java
@@ -18,6 +18,7 @@
 
 import android.content.ContentUris;
 import android.content.Context;
+import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
@@ -25,6 +26,7 @@
 import android.os.Looper;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.Settings;
 import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
 
@@ -45,6 +47,9 @@
 import java.util.List;
 import java.util.Set;
 
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds;
+
 /**
  * Class responsible for querying Contact Information for Call objects. Can perform asynchronous
  * requests to the Contact Provider for information as well as respond synchronously for any data
@@ -509,6 +514,11 @@
         cce.location = displayLocation;
         cce.label = label;
         cce.isSipCall = isSipCall;
+
+        if (isIncoming && Settings.AOKP.getInt(context.getContentResolver(),
+                Settings.AOKP.DETAILED_INCALL_INFO, 0) == 1) {
+            getDetailedInfo(info.person_id, cce, context);
+        }
     }
 
     /**
@@ -557,12 +567,53 @@
         public void onImageLoadComplete(int callId, ContactCacheEntry entry);
     }
 
+    private static void getDetailedInfo(final long contactId, ContactCacheEntry cce, Context context) {
+        final String[] projection = new String[] {
+                ContactsContract.Data.MIMETYPE,
+                CommonDataKinds.Nickname.NAME,
+                CommonDataKinds.Organization.COMPANY,
+                CommonDataKinds.Organization.TITLE,
+                CommonDataKinds.StructuredPostal.CITY
+        };
+        final String where = ContactsContract.Data.CONTACT_ID + " = " + contactId;
+        Cursor cursor = context.getContentResolver().query(
+                ContactsContract.Data.CONTENT_URI, projection, where, null, null);
+        String nickName = null, organization = null, position = null, city = null;
+        if (cursor != null) {
+            for (boolean valid = cursor.moveToFirst(); valid; valid = cursor.moveToNext()) {
+                final String mimeType = cursor.getString(0);
+                organization = cursor.getString(cursor.getColumnIndex(CommonDataKinds.Organization.COMPANY));
+                position = cursor.getString(cursor.getColumnIndex(CommonDataKinds.Organization.TITLE));
+                nickName = cursor.getString(cursor.getColumnIndex(CommonDataKinds.Nickname.NAME));
+                city = cursor.getString(cursor.getColumnIndex(CommonDataKinds.StructuredPostal.CITY));
+
+                if (TextUtils.equals(mimeType, CommonDataKinds.Organization.CONTENT_ITEM_TYPE) && organization != null) {
+                    cce.organization = organization;
+                }
+                if (TextUtils.equals(mimeType, CommonDataKinds.Organization.CONTENT_ITEM_TYPE) && position != null) {
+                    cce.position = position;
+                }
+                if (TextUtils.equals(mimeType, CommonDataKinds.Nickname.CONTENT_ITEM_TYPE) && nickName != null) {
+                    cce.nickName = nickName;
+                }
+                if (TextUtils.equals(mimeType, CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) && city != null) {
+                    cce.city = city;
+                }
+            }
+            cursor.close();
+        }
+    }
+
     public static class ContactCacheEntry {
         public String name;
         public String number;
         public String location;
         public String label;
         public Drawable photo;
+        public String nickName;
+        public String organization;
+        public String position;
+        public String city;
         public boolean isSipCall;
         public Uri personUri; // Used for local photo load
 
