Force talkback to read imei # digit by digit
am: cf21d91b76

Change-Id: I1770ddd0f320240417a2deb8a7b3f515ad598a6e
diff --git a/src/com/android/settings/dashboard/conditional/Condition.java b/src/com/android/settings/dashboard/conditional/Condition.java
index 1d48d5d..758632e 100644
--- a/src/com/android/settings/dashboard/conditional/Condition.java
+++ b/src/com/android/settings/dashboard/conditional/Condition.java
@@ -38,6 +38,12 @@
     // All conditions must live in this package.
     Condition(ConditionManager manager) {
         mManager = manager;
+        Class<?> receiverClass = getReceiverClass();
+        if (receiverClass != null && shouldAlwaysListenToBroadcast()) {
+            PackageManager pm = mManager.getContext().getPackageManager();
+            pm.setComponentEnabledSetting(new ComponentName(mManager.getContext(), receiverClass),
+                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0 /* flag */);
+        }
     }
 
     void restoreState(PersistableBundle bundle) {
@@ -93,6 +99,10 @@
     }
 
     private void onSilenceChanged(boolean silenced) {
+        if (shouldAlwaysListenToBroadcast()) {
+            // Don't try to disable BroadcastReceiver if we want it always on.
+            return;
+        }
         Class<?> clz = getReceiverClass();
         if (clz == null) {
             return;
@@ -109,6 +119,10 @@
         return null;
     }
 
+    protected boolean shouldAlwaysListenToBroadcast() {
+        return false;
+    }
+
     public boolean shouldShow() {
         return isActive() && !isSilenced();
     }
diff --git a/src/com/android/settings/dashboard/conditional/DndCondition.java b/src/com/android/settings/dashboard/conditional/DndCondition.java
index 2a5aa8a..dcab279 100644
--- a/src/com/android/settings/dashboard/conditional/DndCondition.java
+++ b/src/com/android/settings/dashboard/conditional/DndCondition.java
@@ -26,6 +26,7 @@
 import android.provider.Settings;
 import android.provider.Settings.Global;
 import android.service.notification.ZenModeConfig;
+
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 
@@ -143,4 +144,9 @@
             }
         }
     }
+
+    @Override
+    protected boolean shouldAlwaysListenToBroadcast() {
+        return true;
+    }
 }
diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java
index 8f0e91b..532c720 100644
--- a/src/com/android/settings/deviceinfo/StorageSettings.java
+++ b/src/com/android/settings/deviceinfo/StorageSettings.java
@@ -109,7 +109,9 @@
         mStorageManager = context.getSystemService(StorageManager.class);
         mStorageManager.registerListener(mStorageListener);
 
-        sTotalInternalStorage = mStorageManager.getPrimaryStorageSize();
+        if (sTotalInternalStorage <= 0) {
+            sTotalInternalStorage = mStorageManager.getPrimaryStorageSize();
+        }
 
         addPreferencesFromResource(R.xml.device_info_storage);
 
@@ -169,8 +171,11 @@
                 if (vol.isMountedReadable()) {
                     final File path = vol.getPath();
                     privateUsedBytes += path.getTotalSpace() - path.getFreeSpace();
-                    privateTotalBytes += sTotalInternalStorage > 0
-                            ? sTotalInternalStorage : path.getTotalSpace();
+                    if (sTotalInternalStorage > 0) {
+                        privateTotalBytes = sTotalInternalStorage;
+                    } else {
+                        privateTotalBytes += path.getTotalSpace();
+                    }
                 }
             } else if (vol.getType() == VolumeInfo.TYPE_PUBLIC) {
                 mExternalCategory.addPreference(
@@ -215,7 +220,6 @@
                 result.value, result.units));
         mInternalSummary.setSummary(getString(R.string.storage_volume_used_total,
                 Formatter.formatFileSize(context, privateTotalBytes)));
-
         if (mInternalCategory.getPreferenceCount() > 0) {
             getPreferenceScreen().addPreference(mInternalCategory);
         }
@@ -483,9 +487,12 @@
 
         private void updateSummary() {
             // TODO: Register listener.
-            StorageManager storageManager = mContext.getSystemService(StorageManager.class);
+            final StorageManager storageManager = mContext.getSystemService(StorageManager.class);
+            if (sTotalInternalStorage <= 0) {
+                sTotalInternalStorage = storageManager.getPrimaryStorageSize();
+            }
             final List<VolumeInfo> volumes = storageManager.getVolumes();
-            long privateUsedBytes = 0;
+            long privateFreeBytes = 0;
             long privateTotalBytes = 0;
             for (VolumeInfo info : volumes) {
                 if (info.getType() != VolumeInfo.TYPE_PUBLIC
@@ -496,13 +503,14 @@
                 if (path == null) {
                     continue;
                 }
-                privateUsedBytes += path.getTotalSpace() - path.getFreeSpace();
                 if (info.getType() == VolumeInfo.TYPE_PRIVATE && sTotalInternalStorage > 0) {
                     privateTotalBytes = sTotalInternalStorage;
                 } else {
                     privateTotalBytes += path.getTotalSpace();
                 }
+                privateFreeBytes += path.getFreeSpace();
             }
+            long privateUsedBytes = privateTotalBytes - privateFreeBytes;
             mLoader.setSummary(this, mContext.getString(R.string.storage_summary,
                     Formatter.formatFileSize(mContext, privateUsedBytes),
                     Formatter.formatFileSize(mContext, privateTotalBytes)));