Resolve vcard export file display name
The display name of the export destination file is displayed
in the Toast indicating that an export has been initiated as
well as in the notification displayed after the export completes.
Bug 22208705
Change-Id: Ifbf80945614d6d3244b58acff2160e3caf051d8d
diff --git a/src/com/android/contacts/common/vcard/ExportProcessor.java b/src/com/android/contacts/common/vcard/ExportProcessor.java
index 791f2f9..d7b2c0f 100644
--- a/src/com/android/contacts/common/vcard/ExportProcessor.java
+++ b/src/com/android/contacts/common/vcard/ExportProcessor.java
@@ -197,9 +197,10 @@
mService.updateMediaScanner(request.destUri.getPath());
successful = true;
- final String filename = uri.getLastPathSegment();
- final String title = mService.getString(R.string.exporting_vcard_finished_title,
- filename);
+ final String filename = ExportVCardActivity.getOpenableUriDisplayName(mService, uri);
+ final String title = filename == null
+ ? mService.getString(R.string.exporting_vcard_finished_title_fallback)
+ : mService.getString(R.string.exporting_vcard_finished_title, filename);
doFinishNotification(title, null);
} finally {
if (composer != null) {
diff --git a/src/com/android/contacts/common/vcard/ExportVCardActivity.java b/src/com/android/contacts/common/vcard/ExportVCardActivity.java
index 172f2f5..9ee02fe 100644
--- a/src/com/android/contacts/common/vcard/ExportVCardActivity.java
+++ b/src/com/android/contacts/common/vcard/ExportVCardActivity.java
@@ -23,6 +23,7 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.content.ServiceConnection;
+import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
@@ -30,6 +31,7 @@
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
+import android.provider.OpenableColumns;
import android.text.BidiFormatter;
import android.text.TextDirectionHeuristics;
import android.text.TextUtils;
@@ -207,6 +209,23 @@
super.unbindService(conn);
}
+ /**
+ * Returns the display name for the given openable Uri or null if it could not be resolved. */
+ static String getOpenableUriDisplayName(Context context, Uri uri) {
+ if (uri == null) return null;
+ final Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
+ try {
+ if (cursor != null && cursor.moveToFirst()) {
+ return cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ return null;
+ }
+
private synchronized void unbindAndFinish() {
if (mConnected) {
unbindService(this);
diff --git a/src/com/android/contacts/common/vcard/NotificationImportExportListener.java b/src/com/android/contacts/common/vcard/NotificationImportExportListener.java
index 4b1f9e5..f1a9fab 100644
--- a/src/com/android/contacts/common/vcard/NotificationImportExportListener.java
+++ b/src/com/android/contacts/common/vcard/NotificationImportExportListener.java
@@ -157,9 +157,11 @@
@Override
public void onExportProcessed(ExportRequest request, int jobId) {
- final String displayName = request.destUri.getLastPathSegment();
- final String message = mContext.getString(R.string.vcard_export_will_start_message,
- displayName);
+ final String displayName = ExportVCardActivity.getOpenableUriDisplayName(mContext,
+ request.destUri);
+ final String message = displayName == null
+ ? mContext.getString(R.string.vcard_export_will_start_message_fallback)
+ : mContext.getString(R.string.vcard_export_will_start_message, displayName);
mHandler.obtainMessage(0, message).sendToTarget();
final Notification notification =