Merge "Add indicator for system dialer in Settings" into nyc-dev
diff --git a/res/layout/app_preference_item.xml b/res/layout/app_preference_item.xml
index 0ad08cc..2f722a1 100755
--- a/res/layout/app_preference_item.xml
+++ b/res/layout/app_preference_item.xml
@@ -69,4 +69,26 @@
         android:paddingEnd="7dip"
         android:duplicateParentState="true"
         />
+    <TextView
+        android:id="@+id/system_label"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:layout_gravity="center_vertical"
+        android:text="@string/system_app"
+        android:visibility="gone"
+        android:paddingEnd="7dip"
+        android:duplicateParentState="true"
+        />
+    <TextView
+        android:id="@+id/system_default_label"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        android:layout_gravity="center_vertical"
+        android:text="@string/system_default_app"
+        android:visibility="gone"
+        android:paddingEnd="7dip"
+        android:duplicateParentState="true"
+        />
 </LinearLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 14bcd0e..bc89640 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6607,6 +6607,12 @@
     <!-- Label of default app for current setting [CHAR LIMIT=40] -->
     <string name="default_app">(Default)</string>
 
+    <!-- Label of system app for current setting -->
+    <string name="system_app">(System)</string>
+
+    <!-- Label of system and default app for current setting -->
+    <string name="system_default_app">(System default)</string>
+
     <!-- Title of app storage screen [CHAR LIMIT=30] -->
     <string name="apps_storage">Apps storage</string>
 
diff --git a/src/com/android/settings/AppListPreference.java b/src/com/android/settings/AppListPreference.java
index 8dee7b8..b42f17b 100644
--- a/src/com/android/settings/AppListPreference.java
+++ b/src/com/android/settings/AppListPreference.java
@@ -56,6 +56,7 @@
     private Drawable[] mEntryDrawables;
     private boolean mShowItemNone = false;
     private CharSequence[] mSummaries;
+    private int mSystemAppIndex = -1;
 
     public class AppArrayAdapter extends ArrayAdapter<CharSequence> {
         private Drawable[] mImageDrawables = null;
@@ -79,8 +80,12 @@
             View view = inflater.inflate(R.layout.app_preference_item, parent, false);
             TextView textView = (TextView) view.findViewById(android.R.id.title);
             textView.setText(getItem(position));
-            if (position == mSelectedIndex) {
+            if (position == mSelectedIndex && position == mSystemAppIndex) {
+                view.findViewById(R.id.system_default_label).setVisibility(View.VISIBLE);
+            } else if (position == mSelectedIndex) {
                 view.findViewById(R.id.default_label).setVisibility(View.VISIBLE);
+            } else if (position == mSystemAppIndex) {
+                view.findViewById(R.id.system_label).setVisibility(View.VISIBLE);
             }
             ImageView imageView = (ImageView) view.findViewById(android.R.id.icon);
             imageView.setImageDrawable(mImageDrawables[position]);
@@ -122,6 +127,11 @@
     }
 
     public void setPackageNames(CharSequence[] packageNames, CharSequence defaultPackageName) {
+        setPackageNames(packageNames, defaultPackageName, null);
+    }
+
+    public void setPackageNames(CharSequence[] packageNames, CharSequence defaultPackageName,
+            CharSequence systemPackageName) {
         // Look up all package names in PackageManager. Skip ones we can't find.
         PackageManager pm = getContext().getPackageManager();
         final int entryCount = packageNames.length + (mShowItemNone ? 1 : 0);
@@ -129,6 +139,7 @@
         List<CharSequence> validatedPackageNames = new ArrayList<>(entryCount);
         List<Drawable> entryDrawables = new ArrayList<>(entryCount);
         int selectedIndex = -1;
+        mSystemAppIndex = -1;
         for (int i = 0; i < packageNames.length; i++) {
             try {
                 ApplicationInfo appInfo = pm.getApplicationInfoAsUser(packageNames[i].toString(), 0,
@@ -140,6 +151,10 @@
                         appInfo.packageName.contentEquals(defaultPackageName)) {
                     selectedIndex = i;
                 }
+                if (appInfo.packageName != null && systemPackageName != null &&
+                        appInfo.packageName.contentEquals(systemPackageName)) {
+                    mSystemAppIndex = i;
+                }
             } catch (NameNotFoundException e) {
                 // Skip unknown packages.
             }
diff --git a/src/com/android/settings/applications/DefaultPhonePreference.java b/src/com/android/settings/applications/DefaultPhonePreference.java
index 23f3929..fdaf7ad 100644
--- a/src/com/android/settings/applications/DefaultPhonePreference.java
+++ b/src/com/android/settings/applications/DefaultPhonePreference.java
@@ -20,6 +20,7 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.telecom.DefaultDialerManager;
+import android.telecom.TelecomManager;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.util.AttributeSet;
@@ -56,13 +57,18 @@
         for (int i = 0; i < dialerPackages.size(); i++) {
             dialers[i] = dialerPackages.get(i);
         }
-        setPackageNames(dialers, getDefaultPackage());
+        setPackageNames(dialers, getDefaultPackage(), getSystemPackage());
     }
 
     private String getDefaultPackage() {
         return DefaultDialerManager.getDefaultDialerApplication(getContext(), mUserId);
     }
 
+    private String getSystemPackage() {
+        TelecomManager tm = TelecomManager.from(getContext());
+        return tm.getSystemDialerPackage();
+    }
+
     @Override
     public boolean isAvailable(Context context) {
         final TelephonyManager tm =