Merge "Modify testapps for MbmsError and download api"
am: 21205a8aa9

Change-Id: Ic5640b43e99ce87b7d64b111c8ac2f3b928e52e7
diff --git a/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/EmbmsSampleDownloadService.java b/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/EmbmsSampleDownloadService.java
index f73aec9..dcb7320 100644
--- a/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/EmbmsSampleDownloadService.java
+++ b/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/EmbmsSampleDownloadService.java
@@ -35,7 +35,7 @@
 import android.telephony.mbms.FileInfo;
 import android.telephony.mbms.FileServiceInfo;
 import android.telephony.mbms.MbmsDownloadSessionCallback;
-import android.telephony.mbms.MbmsException;
+import android.telephony.mbms.MbmsErrors;
 import android.telephony.mbms.UriPathPair;
 import android.telephony.mbms.vendor.IMbmsDownloadService;
 import android.telephony.mbms.vendor.MbmsDownloadServiceBase;
@@ -72,11 +72,11 @@
             int packageUid = Binder.getCallingUid();
             String[] packageNames = getPackageManager().getPackagesForUid(packageUid);
             if (packageNames == null) {
-                return MbmsException.InitializationErrors.ERROR_APP_PERMISSIONS_NOT_GRANTED;
+                return MbmsErrors.InitializationErrors.ERROR_APP_PERMISSIONS_NOT_GRANTED;
             }
             boolean isUidAllowed = Arrays.stream(packageNames).anyMatch(ALLOWED_PACKAGES::contains);
             if (!isUidAllowed) {
-                return MbmsException.InitializationErrors.ERROR_APP_PERMISSIONS_NOT_GRANTED;
+                return MbmsErrors.InitializationErrors.ERROR_APP_PERMISSIONS_NOT_GRANTED;
             }
 
             // Do initialization with a bit of a delay to simulate work being done.
@@ -90,13 +90,13 @@
                     mAppReceivers.put(appKey, appReceiver);
                 } else {
                     callback.onError(
-                            MbmsException.InitializationErrors.ERROR_DUPLICATE_INITIALIZE, "");
+                            MbmsErrors.InitializationErrors.ERROR_DUPLICATE_INITIALIZE, "");
                     return;
                 }
                 callback.onMiddlewareReady();
             }, INITIALIZATION_DELAY);
 
-            return MbmsException.SUCCESS;
+            return MbmsErrors.SUCCESS;
         }
 
         @Override
@@ -114,7 +114,7 @@
                 MbmsDownloadSessionCallback appCallback = mAppCallbacks.get(appKey);
                 appCallback.onFileServicesUpdated(serviceInfos);
             }, SEND_FILE_SERVICE_INFO_DELAY);
-            return MbmsException.SUCCESS;
+            return MbmsErrors.SUCCESS;
         }
 
         @Override
@@ -125,10 +125,10 @@
             checkInitialized(appKey);
 
             if (mActiveDownloadRequests.getOrDefault(appKey, Collections.emptySet()).size() > 0) {
-                return MbmsException.DownloadErrors.ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT;
+                return MbmsErrors.DownloadErrors.ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT;
             }
             mAppTempFileRoots.put(appKey, rootDirectoryPath);
-            return MbmsException.SUCCESS;
+            return MbmsErrors.SUCCESS;
         }
 
         @Override
@@ -138,7 +138,7 @@
             checkInitialized(appKey);
 
             mHandler.post(() -> sendFdRequest(downloadRequest, appKey));
-            return MbmsException.SUCCESS;
+            return MbmsErrors.SUCCESS;
         }
 
         @Override
@@ -148,10 +148,10 @@
             checkInitialized(appKey);
             if (!mActiveDownloadRequests.getOrDefault(
                     appKey, Collections.emptySet()).contains(downloadRequest)) {
-                return MbmsException.DownloadErrors.ERROR_UNKNOWN_DOWNLOAD_REQUEST;
+                return MbmsErrors.DownloadErrors.ERROR_UNKNOWN_DOWNLOAD_REQUEST;
             }
             mActiveDownloadRequests.get(appKey).remove(downloadRequest);
-            return MbmsException.SUCCESS;
+            return MbmsErrors.SUCCESS;
         }
 
         @Override
@@ -357,7 +357,7 @@
 
         Intent downloadResultIntent =
                 new Intent(VendorUtils.ACTION_DOWNLOAD_RESULT_INTERNAL);
-        downloadResultIntent.putExtra(VendorUtils.EXTRA_REQUEST, request1);
+        downloadResultIntent.putExtra(MbmsDownloadSession.EXTRA_MBMS_DOWNLOAD_REQUEST, request1);
         downloadResultIntent.putExtra(VendorUtils.EXTRA_FINAL_URI,
                 tempFile.getFilePathUri());
         downloadResultIntent.putExtra(MbmsDownloadSession.EXTRA_MBMS_FILE_INFO, fileToDownload);
diff --git a/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/EmbmsTestStreamingService.java b/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/EmbmsTestStreamingService.java
index 67d1950..f50536c 100644
--- a/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/EmbmsTestStreamingService.java
+++ b/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/EmbmsTestStreamingService.java
@@ -23,7 +23,7 @@
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.IBinder;
-import android.telephony.mbms.MbmsException;
+import android.telephony.mbms.MbmsErrors;
 import android.telephony.mbms.MbmsStreamingSessionCallback;
 import android.telephony.mbms.StreamingService;
 import android.telephony.mbms.StreamingServiceCallback;
@@ -79,11 +79,11 @@
             int packageUid = Binder.getCallingUid();
             String[] packageNames = getPackageManager().getPackagesForUid(packageUid);
             if (packageNames == null) {
-                return MbmsException.InitializationErrors.ERROR_APP_PERMISSIONS_NOT_GRANTED;
+                return MbmsErrors.InitializationErrors.ERROR_APP_PERMISSIONS_NOT_GRANTED;
             }
             boolean isUidAllowed = Arrays.stream(packageNames).anyMatch(ALLOWED_PACKAGES::contains);
             if (!isUidAllowed) {
-                return MbmsException.InitializationErrors.ERROR_APP_PERMISSIONS_NOT_GRANTED;
+                return MbmsErrors.InitializationErrors.ERROR_APP_PERMISSIONS_NOT_GRANTED;
             }
 
             mHandler.postDelayed(() -> {
@@ -92,12 +92,12 @@
                     mAppCallbacks.put(appKey, callback);
                 } else {
                     callback.onError(
-                            MbmsException.InitializationErrors.ERROR_DUPLICATE_INITIALIZE, "");
+                            MbmsErrors.InitializationErrors.ERROR_DUPLICATE_INITIALIZE, "");
                     return;
                 }
                 callback.onMiddlewareReady();
             }, INITIALIZATION_DELAY);
-            return MbmsException.SUCCESS;
+            return MbmsErrors.SUCCESS;
         }
 
         @Override
@@ -117,7 +117,7 @@
             mHandler.sendMessageDelayed(
                     mHandler.obtainMessage(SEND_STREAMING_SERVICES_LIST, args),
                     SEND_SERVICE_LIST_DELAY);
-            return MbmsException.SUCCESS;
+            return MbmsErrors.SUCCESS;
         }
 
         @Override
@@ -130,14 +130,14 @@
 
             if (StreamStateTracker.getStreamingState(appKey, serviceId) ==
                     StreamingService.STATE_STARTED) {
-                return MbmsException.StreamingErrors.ERROR_DUPLICATE_START_STREAM;
+                return MbmsErrors.StreamingErrors.ERROR_DUPLICATE_START_STREAM;
             }
 
             mHandler.postDelayed(
                     () -> StreamStateTracker.startStreaming(appKey, serviceId, callback,
                             StreamingService.REASON_BY_USER_REQUEST),
                     START_STREAMING_DELAY);
-            return MbmsException.SUCCESS;
+            return MbmsErrors.SUCCESS;
         }
 
         @Override
diff --git a/testapps/EmbmsTestDownloadApp/src/com/android/phone/testapps/embmsdownload/DownloadCompletionReceiver.java b/testapps/EmbmsTestDownloadApp/src/com/android/phone/testapps/embmsdownload/DownloadCompletionReceiver.java
index e434e9a..3c94b76 100644
--- a/testapps/EmbmsTestDownloadApp/src/com/android/phone/testapps/embmsdownload/DownloadCompletionReceiver.java
+++ b/testapps/EmbmsTestDownloadApp/src/com/android/phone/testapps/embmsdownload/DownloadCompletionReceiver.java
@@ -21,6 +21,14 @@
 import android.content.Intent;
 import android.net.Uri;
 import android.telephony.MbmsDownloadSession;
+import android.telephony.mbms.DownloadRequest;
+import android.telephony.mbms.FileInfo;
+
+import java.io.IOException;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
 
 public class DownloadCompletionReceiver extends BroadcastReceiver {
     @Override
@@ -33,7 +41,47 @@
             }
             Uri completedFile = intent.getParcelableExtra(
                     MbmsDownloadSession.EXTRA_MBMS_COMPLETED_FILE_URI);
-            EmbmsTestDownloadApp.getInstance().onDownloadDone(completedFile);
+            FileInfo completedFileInfo = intent.getParcelableExtra(
+                    MbmsDownloadSession.EXTRA_MBMS_FILE_INFO);
+            DownloadRequest request = intent.getParcelableExtra(
+                    MbmsDownloadSession.EXTRA_MBMS_DOWNLOAD_REQUEST);
+
+            Path destinationFile = getDestinationFile(context,
+                    request.getFileServiceId(), completedFileInfo);
+            Path sourceFile = FileSystems.getDefault().getPath(completedFile.getPath());
+            try {
+                Files.move(sourceFile, destinationFile, StandardCopyOption.REPLACE_EXISTING);
+            } catch (IOException e) {
+                return;
+            }
+
+            EmbmsTestDownloadApp.getInstance().onDownloadDone(
+                    Uri.fromFile(destinationFile.toFile()));
+        }
+    }
+
+    private Path getDestinationFile(Context context, String serviceId, FileInfo info) {
+        try {
+            if (serviceId.contains("2")) {
+                String fileName = info.getUri().getLastPathSegment();
+                Path destination = FileSystems.getDefault()
+                        .getPath(context.getFilesDir().getPath(), "images/animals/", fileName)
+                        .normalize();
+                if (!Files.isDirectory(destination.getParent())) {
+                    Files.createDirectory(destination.getParent());
+                }
+                return destination;
+            } else {
+                Path destination = FileSystems.getDefault()
+                        .getPath(context.getFilesDir().getPath(), "images/image.png")
+                        .normalize();
+                if (!Files.isDirectory(destination.getParent())) {
+                    Files.createDirectory(destination.getParent());
+                }
+                return destination;
+            }
+        } catch (IOException e) {
+            return null;
         }
     }
 }
diff --git a/testapps/EmbmsTestDownloadApp/src/com/android/phone/testapps/embmsdownload/EmbmsTestDownloadApp.java b/testapps/EmbmsTestDownloadApp/src/com/android/phone/testapps/embmsdownload/EmbmsTestDownloadApp.java
index 9611cca..23f2cc5 100644
--- a/testapps/EmbmsTestDownloadApp/src/com/android/phone/testapps/embmsdownload/EmbmsTestDownloadApp.java
+++ b/testapps/EmbmsTestDownloadApp/src/com/android/phone/testapps/embmsdownload/EmbmsTestDownloadApp.java
@@ -42,7 +42,6 @@
 import android.widget.Toast;
 
 import java.io.File;
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -310,23 +309,13 @@
     }
 
     private void performDownload(FileServiceInfo info) {
-        File destination = null;
         Uri.Builder sourceUriBuilder = new Uri.Builder()
                 .scheme(FILE_DOWNLOAD_SCHEME)
                 .authority(FILE_AUTHORITY);
-        try {
-            if (info.getFiles().size() > 1) {
-                destination = new File(getFilesDir(), "images/animals/").getCanonicalFile();
-                destination.mkdirs();
-                clearDirectory(destination);
-                sourceUriBuilder.path("/*");
-            } else {
-                destination = new File(getFilesDir(), "images/image.png").getCanonicalFile();
-                destination.delete();
-                sourceUriBuilder.path("/image.png");
-            }
-        } catch (IOException e) {
-            // ignore
+        if (info.getServiceId().contains("2")) {
+            sourceUriBuilder.path("/*");
+        } else {
+            sourceUriBuilder.path("/image.png");
         }
 
         Intent completionIntent = new Intent(DOWNLOAD_DONE_ACTION);
@@ -335,7 +324,6 @@
         DownloadRequest request = new DownloadRequest.Builder()
                 .setServiceInfo(info)
                 .setSource(sourceUriBuilder.build())
-                .setDest(Uri.fromFile(destination))
                 .setAppIntent(completionIntent)
                 .setSubscriptionId(SubscriptionManager.getDefaultSubscriptionId())
                 .build();
@@ -343,13 +331,4 @@
         mDownloadManager.download(request);
         mDownloadRequestAdapter.add(request);
     }
-
-    private static void clearDirectory(File directory) {
-        for (File file: directory.listFiles()) {
-            if (file.isDirectory()) {
-                clearDirectory(file);
-            }
-            file.delete();
-        }
-    }
 }
diff --git a/testapps/EmbmsTestStreamingApp/src/com/android/phone/testapps/embmsfrontend/EmbmsTestStreamingApp.java b/testapps/EmbmsTestStreamingApp/src/com/android/phone/testapps/embmsfrontend/EmbmsTestStreamingApp.java
index 39d82e6..0546c9d 100644
--- a/testapps/EmbmsTestStreamingApp/src/com/android/phone/testapps/embmsfrontend/EmbmsTestStreamingApp.java
+++ b/testapps/EmbmsTestStreamingApp/src/com/android/phone/testapps/embmsfrontend/EmbmsTestStreamingApp.java
@@ -40,6 +40,7 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.NoSuchElementException;
 
 public class EmbmsTestStreamingApp extends Activity {
     private MbmsStreamingSessionCallback mStreamingListener = new MbmsStreamingSessionCallback() {
@@ -66,16 +67,13 @@
         }
 
         private String getName(StreamingServiceInfo info) {
-            Map<Locale, String> names = info.getNames();
-            String name = "<No Name>";
-            if (!names.isEmpty()) {
-                Locale locale = Locale.getDefault();
-                if (!names.containsKey(locale)) {
-                    locale = names.keySet().iterator().next();
-                }
-                name = names.get(locale);
+            Locale locale = Locale.getDefault();
+            try {
+                return info.getNameForLocale(locale).toString();
+            } catch (NoSuchElementException e) {
+                locale = info.getLocales().iterator().next();
+                return info.getNameForLocale(locale).toString();
             }
-            return name;
         }
 
         @Override
@@ -167,8 +165,7 @@
                         "No streaming service bound", Toast.LENGTH_SHORT).show();
                 return;
             }
-            mStreamingManager.requestUpdateStreamingServices(
-                    Collections.singletonList("Class1"));
+            mStreamingManager.requestUpdateStreamingServices(Collections.singletonList("Class1"));
         });
 
         final Spinner serviceSelector = (Spinner) findViewById(R.id.available_streaming_services);