Merge "Schematize Contacts system properties"
diff --git a/src/com/android/providers/contacts/ContactDirectoryManager.java b/src/com/android/providers/contacts/ContactDirectoryManager.java
index 33e541d..8a1c88b 100644
--- a/src/com/android/providers/contacts/ContactDirectoryManager.java
+++ b/src/com/android/providers/contacts/ContactDirectoryManager.java
@@ -30,9 +30,9 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.SystemClock;
-import android.os.SystemProperties;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.Directory;
+import android.sysprop.ContactsProperties;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -194,7 +194,7 @@
 
     @VisibleForTesting
     boolean isRescanNeeded() {
-        if ("1".equals(SystemProperties.get("debug.cp2.scan_all_packages", "0"))) {
+        if (ContactsProperties.debug_scan_all_packages().orElse(false)) {
             Log.w(TAG, "debug.cp2.scan_all_packages set to 1.");
             return true; // For debugging.
         }
diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java
index 3a77793..bef38ea 100644
--- a/src/com/android/providers/contacts/ContactsProvider2.java
+++ b/src/com/android/providers/contacts/ContactsProvider2.java
@@ -62,7 +62,6 @@
 import android.os.RemoteException;
 import android.os.StrictMode;
 import android.os.SystemClock;
-import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.preference.PreferenceManager;
 import android.provider.BaseColumns;
@@ -107,6 +106,7 @@
 import android.provider.OpenableColumns;
 import android.provider.Settings.Global;
 import android.provider.SyncStateContract;
+import android.sysprop.ContactsProperties;
 import android.telephony.PhoneNumberUtils;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
@@ -291,22 +291,8 @@
 
     private static final int AGGREGATION_ALGORITHM_NEW_VERSION = 5;
 
-    private static final String AGGREGATE_CONTACTS = "sync.contacts.aggregate";
-
     private static final String CONTACT_MEMORY_FILE_NAME = "contactAssetFile";
 
-    /**
-     * If set to "1", we don't remove account data when accounts have been removed.
-     *
-     * This should be used sparingly; even though there are data still available, the UI
-     * don't know anything about them, so they won't show up in the contact filter screen, and
-     * the contact card/editor may get confused to see unknown custom mimetypes.
-     *
-     * We can't spell it out because a property name must be less than 32 chars.
-     */
-    private static final String DEBUG_PROPERTY_KEEP_STALE_ACCOUNT_DATA =
-            "debug.contacts.ksad";
-
     public static final ProfileAwareUriMatcher sUriMatcher =
             new ProfileAwareUriMatcher(UriMatcher.NO_MATCH);
 
@@ -1646,7 +1632,7 @@
                 createPhotoPriorityResolver(getContext()), mNameSplitter, mCommonNicknameCache)
                 : new ContactAggregator(this, mContactsHelper,
                 createPhotoPriorityResolver(getContext()), mNameSplitter, mCommonNicknameCache);
-        mContactAggregator.setEnabled(SystemProperties.getBoolean(AGGREGATE_CONTACTS, true));
+        mContactAggregator.setEnabled(ContactsProperties.aggregate_contacts().orElse(true));
         initDataRowHandlers(mDataRowHandlers, mContactsHelper, mContactAggregator,
                 mContactsPhotoStore);
     }
@@ -1678,10 +1664,10 @@
                 : new ContactAggregator2(this, mContactsHelper,
                         createPhotoPriorityResolver(context), mNameSplitter, mCommonNicknameCache);
 
-        mContactAggregator.setEnabled(SystemProperties.getBoolean(AGGREGATE_CONTACTS, true));
+        mContactAggregator.setEnabled(ContactsProperties.aggregate_contacts().orElse(true));
         mProfileAggregator = new ProfileAggregator(this, mProfileHelper,
                 createPhotoPriorityResolver(context), mNameSplitter, mCommonNicknameCache);
-        mProfileAggregator.setEnabled(SystemProperties.getBoolean(AGGREGATE_CONTACTS, true));
+        mProfileAggregator.setEnabled(ContactsProperties.aggregate_contacts().orElse(true));
         mSearchIndexManager = new SearchIndexManager(this);
         mContactsPhotoStore = new PhotoStore(getContext().getFilesDir(), mContactsHelper);
         mProfilePhotoStore =
@@ -5234,9 +5220,8 @@
         if (!haveAccountsChanged(systemAccounts)) {
             return false;
         }
-        if ("1".equals(SystemProperties.get(DEBUG_PROPERTY_KEEP_STALE_ACCOUNT_DATA))) {
-            Log.w(TAG, "Accounts changed, but not removing stale data for " +
-                    DEBUG_PROPERTY_KEEP_STALE_ACCOUNT_DATA);
+        if (ContactsProperties.keep_stale_account_data().orElse(false)) {
+            Log.w(TAG, "Accounts changed, but not removing stale data for debug.contacts.ksad");
             return true;
         }
         Log.i(TAG, "Accounts changed");
diff --git a/src/com/android/providers/contacts/PhotoProcessor.java b/src/com/android/providers/contacts/PhotoProcessor.java
index b49e792..643d92d 100644
--- a/src/com/android/providers/contacts/PhotoProcessor.java
+++ b/src/com/android/providers/contacts/PhotoProcessor.java
@@ -22,7 +22,7 @@
 import android.graphics.Paint;
 import android.graphics.Rect;
 import android.graphics.RectF;
-import android.os.SystemProperties;
+import android.sysprop.ContactsProperties;
 
 import com.android.providers.contacts.util.MemoryUtils;
 import com.google.common.annotations.VisibleForTesting;
@@ -61,11 +61,10 @@
         final boolean isExpensiveDevice =
                 MemoryUtils.getTotalMemorySize() >= PhotoSizes.LARGE_RAM_THRESHOLD;
 
-        sMaxThumbnailDim = SystemProperties.getInt(
-                PhotoSizes.SYS_PROPERTY_THUMBNAIL_SIZE, PhotoSizes.DEFAULT_THUMBNAIL);
+        sMaxThumbnailDim = ContactsProperties.thumbnail_size().orElse(
+                PhotoSizes.DEFAULT_THUMBNAIL);
 
-        sMaxDisplayPhotoDim = SystemProperties.getInt(
-                PhotoSizes.SYS_PROPERTY_DISPLAY_PHOTO_SIZE,
+        sMaxDisplayPhotoDim = ContactsProperties.display_photo_size().orElse(
                 isExpensiveDevice
                         ? PhotoSizes.DEFAULT_DISPLAY_PHOTO_LARGE_MEMORY
                         : PhotoSizes.DEFAULT_DISPLAY_PHOTO_MEMORY_CONSTRAINED);
@@ -95,12 +94,6 @@
          * photos
          */
         public static final int LARGE_RAM_THRESHOLD = 640 * 1024 * 1024;
-
-        /** If present, overrides the size given in {@link #DEFAULT_THUMBNAIL} */
-        public static final String SYS_PROPERTY_THUMBNAIL_SIZE = "contacts.thumbnail_size";
-
-        /** If present, overrides the size determined for the display photo */
-        public static final String SYS_PROPERTY_DISPLAY_PHOTO_SIZE = "contacts.display_photo_size";
     }
 
     private final int mMaxDisplayPhotoDim;