Let importer/exporter show progress correctly.

Bug: 3201670
Change-Id: Ibb4b91e025ba89ed202c7919a89ecd8c9bd7e24a
diff --git a/res/layout/status_bar_ongoing_event_progress_bar.xml b/res/layout/status_bar_ongoing_event_progress_bar.xml
index 3c7530a..e3edf95 100644
--- a/res/layout/status_bar_ongoing_event_progress_bar.xml
+++ b/res/layout/status_bar_ongoing_event_progress_bar.xml
@@ -69,7 +69,7 @@
                 <TextView android:id="@+id/status_description"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:textColor="#ff000000"
+                    android:textColor="?android:attr/textColorPrimary"
                     android:singleLine="true"
                     android:textSize="18sp"
                     android:paddingLeft="5dp" />
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7437427..e993a18 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -850,7 +850,7 @@
          mention it here. -->
     <string name="fail_reason_too_long_filename">Required filename is too long (\"<xliff:g id="filename">%s</xliff:g>\")</string>
 
-    <!-- The title shown when reading vCard is canceled (probably by a user) -->
+    <!-- The title shown when exporting vCard is successfuly finished [CHAR LIMIT=40] -->
     <string name="exporting_vcard_finished_title">Finished exporting vCard</string>
 
     <!-- Dialog title shown when the application is exporting contact data outside -->
diff --git a/src/com/android/contacts/vcard/ExportProcessor.java b/src/com/android/contacts/vcard/ExportProcessor.java
index 4634b40..5e0a19d 100644
--- a/src/com/android/contacts/vcard/ExportProcessor.java
+++ b/src/com/android/contacts/vcard/ExportProcessor.java
@@ -30,6 +30,7 @@
 import android.net.Uri;
 import android.text.TextUtils;
 import android.util.Log;
+import android.widget.RemoteViews;
 
 import java.io.FileNotFoundException;
 import java.io.OutputStream;
@@ -148,13 +149,19 @@
                     doFinishNotification(title, "");
                     return;
                 }
-                doProgressNotification(uri, total, current);
+
+                // vCard export is quite fast (compared to import), and frequent notifications
+                // bother notification bar too much.
+                if (current % 100 == 1) {
+                    doProgressNotification(uri, total, current);
+                }
                 current++;
             }
             Log.i(LOG_TAG, "Successfully finished exporting vCard " + request.destUri);
 
             successful = true;
-            // TODO: Show "successful"
+            final String title = mService.getString(R.string.exporting_vcard_finished_title);
+            doFinishNotification(title, "");
         } finally {
             if (composer != null) {
                 composer.terminate();
@@ -179,13 +186,13 @@
 
     private void doProgressNotification(Uri uri, int total, int current) {
         final String title = mService.getString(R.string.exporting_contact_list_title);
+        final String filename = uri.getLastPathSegment();
         final String description =
-                mService.getString(R.string.exporting_contact_list_message, uri);
+                mService.getString(R.string.exporting_contact_list_message, filename);
 
-        /* TODO: we should show more informative Notification to users.
         final RemoteViews remoteViews = new RemoteViews(mService.getPackageName(),
                 R.layout.status_bar_ongoing_event_progress_bar);
-        remoteViews.setTextViewText(R.id.status_description, message);
+        remoteViews.setTextViewText(R.id.status_description, description);
         remoteViews.setProgressBar(R.id.status_progress_bar, total, current, (total == -1));
 
         final String percentage = mService.getString(R.string.percentage,
@@ -200,21 +207,8 @@
         notification.contentView = remoteViews;
         notification.contentIntent =
                 PendingIntent.getActivity(mService, 0,
-                        new Intent(mService, ContactBrowserActivity.class), 0);*/
+                        new Intent(mService, ContactBrowserActivity.class), 0);
 
-        final long when = System.currentTimeMillis();
-        final Notification notification = new Notification(
-                android.R.drawable.stat_sys_upload,
-                description,
-                when);
-
-        final Context context = mService.getApplicationContext();
-        final PendingIntent pendingIntent =
-                PendingIntent.getActivity(context, 0,
-                        new Intent(context, ContactBrowserActivity.class),
-                        PendingIntent.FLAG_UPDATE_CURRENT);
-
-        notification.setLatestEventInfo(context, title, description, pendingIntent);
         mNotificationManager.notify(VCardService.EXPORT_NOTIFICATION_ID, notification);
     }
 
diff --git a/src/com/android/contacts/vcard/ImportProcessor.java b/src/com/android/contacts/vcard/ImportProcessor.java
index ca7223d..acb6792 100644
--- a/src/com/android/contacts/vcard/ImportProcessor.java
+++ b/src/com/android/contacts/vcard/ImportProcessor.java
@@ -115,6 +115,8 @@
         final Account account = request.account;
         final int estimatedVCardType = request.estimatedVCardType;
         final String estimatedCharset = request.estimatedCharset;
+        final int entryCount = request.entryCount;
+        mNotifier.addTotalCount(entryCount);
 
         final VCardEntryConstructor constructor =
                 new VCardEntryConstructor(estimatedVCardType, account, estimatedCharset);
diff --git a/src/com/android/contacts/vcard/ImportProgressNotifier.java b/src/com/android/contacts/vcard/ImportProgressNotifier.java
index 99a6f55..6a24bc0 100644
--- a/src/com/android/contacts/vcard/ImportProgressNotifier.java
+++ b/src/com/android/contacts/vcard/ImportProgressNotifier.java
@@ -15,6 +15,10 @@
  */
 package com.android.contacts.vcard;
 
+import com.android.contacts.R;
+import com.android.vcard.VCardEntry;
+import com.android.vcard.VCardEntryHandler;
+
 import android.app.Notification;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
@@ -22,15 +26,13 @@
 import android.content.Intent;
 import android.widget.RemoteViews;
 
-import com.android.contacts.R;
-import com.android.vcard.VCardEntry;
-import com.android.vcard.VCardEntryHandler;
-
 /**
  * {@link VCardEntryHandler} implementation which lets the system update
  * the current status of vCard import.
  */
 public class ImportProgressNotifier implements VCardEntryHandler {
+    private static final String LOG_TAG = "VCardImport";
+
     private Context mContext;
     private NotificationManager mNotificationManager;
 
@@ -51,7 +53,7 @@
             return;
         }
 
-        // We don't use startEntry() since:
+        // We don't use onStart() since:
         // - We cannot know name there but here.
         // - There's high probability where name comes soon after the beginning of entry, so
         //   we don't need to hurry to show something.