Merge "Add TD-SCDMA related network mode options"
diff --git a/src/com/android/services/telephony/TelephonyConferenceController.java b/src/com/android/services/telephony/TelephonyConferenceController.java
index 1386e19..acb41f6 100644
--- a/src/com/android/services/telephony/TelephonyConferenceController.java
+++ b/src/com/android/services/telephony/TelephonyConferenceController.java
@@ -161,14 +161,20 @@
// Set the conference as conferenceable with all of the connections that are not in the
// conference.
- if (mTelephonyConference != null && !isFullConference(mTelephonyConference)) {
- List<Connection> nonConferencedConnections = mTelephonyConnections
- .stream()
- // Only retrieve Connections that are not in a conference (but support
- // conferences).
- .filter(c -> c.isConferenceSupported() && c.getConference() == null)
- .collect(Collectors.toList());
- mTelephonyConference.setConferenceableConnections(nonConferencedConnections);
+ if (mTelephonyConference != null) {
+ if (!isFullConference(mTelephonyConference)) {
+ List<Connection> nonConferencedConnections = mTelephonyConnections
+ .stream()
+ // Only retrieve Connections that are not in a conference (but support
+ // conferences).
+ .filter(c -> c.isConferenceSupported() && c.getConference() == null)
+ .collect(Collectors.toList());
+ mTelephonyConference.setConferenceableConnections(nonConferencedConnections);
+ } else {
+ Log.d(this, "cannot merge anymore due it is full");
+ mTelephonyConference
+ .setConferenceableConnections(Collections.<Connection>emptyList());
+ }
}
// TODO: Do not allow conferencing of already conferenced connections.
}
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 f1060e3..dcb7320 100644
--- a/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/EmbmsSampleDownloadService.java
+++ b/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/EmbmsSampleDownloadService.java
@@ -30,19 +30,16 @@
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
-import android.telephony.MbmsDownloadManager;
-import android.telephony.mbms.DownloadProgressListener;
+import android.telephony.MbmsDownloadSession;
import android.telephony.mbms.DownloadRequest;
import android.telephony.mbms.FileInfo;
import android.telephony.mbms.FileServiceInfo;
-import android.telephony.mbms.IDownloadProgressListener;
-import android.telephony.mbms.IMbmsDownloadManagerCallback;
-import android.telephony.mbms.MbmsDownloadManagerCallback;
-import android.telephony.mbms.MbmsException;
+import android.telephony.mbms.MbmsDownloadSessionCallback;
+import android.telephony.mbms.MbmsErrors;
import android.telephony.mbms.UriPathPair;
import android.telephony.mbms.vendor.IMbmsDownloadService;
import android.telephony.mbms.vendor.MbmsDownloadServiceBase;
-import android.telephony.mbms.vendor.VendorIntents;
+import android.telephony.mbms.vendor.VendorUtils;
import android.util.Log;
import java.io.IOException;
@@ -71,15 +68,15 @@
private final IMbmsDownloadService mBinder = new MbmsDownloadServiceBase() {
@Override
- public int initialize(int subId, MbmsDownloadManagerCallback callback) {
+ public int initialize(int subId, MbmsDownloadSessionCallback callback) {
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.
@@ -87,30 +84,23 @@
FrontendAppIdentifier appKey = new FrontendAppIdentifier(packageUid, subId);
if (!mAppCallbacks.containsKey(appKey)) {
mAppCallbacks.put(appKey, callback);
- ComponentName appReceiver = VendorIntents.getAppReceiverFromUid(
- EmbmsSampleDownloadService.this, packageUid);
+ ComponentName appReceiver = VendorUtils.getAppReceiverFromPackageName(
+ EmbmsSampleDownloadService.this,
+ getPackageManager().getNameForUid(packageUid));
mAppReceivers.put(appKey, appReceiver);
} else {
- try {
- callback.error(
- MbmsException.InitializationErrors.ERROR_DUPLICATE_INITIALIZE, "");
- } catch (RemoteException e) {
- // ignore, it was an error anyway
- }
+ callback.onError(
+ MbmsErrors.InitializationErrors.ERROR_DUPLICATE_INITIALIZE, "");
return;
}
- try {
- callback.middlewareReady();
- } catch (RemoteException e) {
- // TODO: call dispose
- }
+ callback.onMiddlewareReady();
}, INITIALIZATION_DELAY);
- return MbmsException.SUCCESS;
+ return MbmsErrors.SUCCESS;
}
@Override
- public int getFileServices(int subscriptionId,
+ public int requestUpdateFileServices(int subscriptionId,
List<String> serviceClasses) throws RemoteException {
FrontendAppIdentifier appKey =
new FrontendAppIdentifier(Binder.getCallingUid(), subscriptionId);
@@ -121,14 +111,10 @@
.getFileServicesForClasses(serviceClasses);
mHandler.postDelayed(() -> {
- try {
- IMbmsDownloadManagerCallback appCallback = mAppCallbacks.get(appKey);
- appCallback.fileServicesUpdated(serviceInfos);
- } catch (RemoteException e) {
- // TODO: call dispose
- }
+ MbmsDownloadSessionCallback appCallback = mAppCallbacks.get(appKey);
+ appCallback.onFileServicesUpdated(serviceInfos);
}, SEND_FILE_SERVICE_INFO_DELAY);
- return MbmsException.SUCCESS;
+ return MbmsErrors.SUCCESS;
}
@Override
@@ -139,20 +125,20 @@
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
- public int download(DownloadRequest downloadRequest, DownloadProgressListener listener) {
+ public int download(DownloadRequest downloadRequest) {
FrontendAppIdentifier appKey = new FrontendAppIdentifier(
Binder.getCallingUid(), downloadRequest.getSubscriptionId());
checkInitialized(appKey);
mHandler.post(() -> sendFdRequest(downloadRequest, appKey));
- return MbmsException.SUCCESS;
+ return MbmsErrors.SUCCESS;
}
@Override
@@ -162,16 +148,25 @@
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
+ public void onAppCallbackDied(int uid, int subscriptionId) {
+ FrontendAppIdentifier appKey = new FrontendAppIdentifier(uid, subscriptionId);
+
+ Log.i(LOG_TAG, "Disposing app " + appKey + " due to binder death");
+ mAppCallbacks.remove(appKey);
+ // TODO: call dispose
}
};
private static EmbmsSampleDownloadService sInstance = null;
- private final Map<FrontendAppIdentifier, IMbmsDownloadManagerCallback> mAppCallbacks =
+ private final Map<FrontendAppIdentifier, MbmsDownloadSessionCallback> mAppCallbacks =
new HashMap<>();
private final Map<FrontendAppIdentifier, ComponentName> mAppReceivers = new HashMap<>();
private final Map<FrontendAppIdentifier, String> mAppTempFileRoots = new HashMap<>();
@@ -204,15 +199,15 @@
ComponentName appReceiver = mAppReceivers.values().iterator().next();
for (FileServiceInfo fileServiceInfo :
FileServiceRepository.getInstance(this).getAllFileServices()) {
- Intent cleanupIntent = new Intent(VendorIntents.ACTION_CLEANUP);
+ Intent cleanupIntent = new Intent(VendorUtils.ACTION_CLEANUP);
cleanupIntent.setComponent(appReceiver);
- cleanupIntent.putExtra(VendorIntents.EXTRA_SERVICE_INFO, fileServiceInfo);
- cleanupIntent.putExtra(VendorIntents.EXTRA_TEMP_FILE_ROOT,
+ cleanupIntent.putExtra(VendorUtils.EXTRA_SERVICE_ID, fileServiceInfo.getServiceId());
+ cleanupIntent.putExtra(VendorUtils.EXTRA_TEMP_FILE_ROOT,
mAppTempFileRoots.get(registeredAppId));
Set<Uri> tempFilesInUse =
mTempFilesInUse.getOrDefault(registeredAppId, Collections.emptyMap())
.getOrDefault(fileServiceInfo.getServiceId(), Collections.emptySet());
- cleanupIntent.putExtra(VendorIntents.EXTRA_TEMP_FILES_IN_USE,
+ cleanupIntent.putExtra(VendorUtils.EXTRA_TEMP_FILES_IN_USE,
new ArrayList<>(tempFilesInUse));
sendBroadcast(cleanupIntent);
}
@@ -222,10 +217,10 @@
// Assume one app, and do it for the specified service.
FrontendAppIdentifier registeredAppId = mAppReceivers.keySet().iterator().next();
ComponentName appReceiver = mAppReceivers.values().iterator().next();
- Intent fdRequestIntent = new Intent(VendorIntents.ACTION_FILE_DESCRIPTOR_REQUEST);
- fdRequestIntent.putExtra(VendorIntents.EXTRA_SERVICE_INFO, serviceInfo);
- fdRequestIntent.putExtra(VendorIntents.EXTRA_FD_COUNT, 10);
- fdRequestIntent.putExtra(VendorIntents.EXTRA_TEMP_FILE_ROOT,
+ Intent fdRequestIntent = new Intent(VendorUtils.ACTION_FILE_DESCRIPTOR_REQUEST);
+ fdRequestIntent.putExtra(VendorUtils.EXTRA_SERVICE_ID, serviceInfo.getServiceId());
+ fdRequestIntent.putExtra(VendorUtils.EXTRA_FD_COUNT, 10);
+ fdRequestIntent.putExtra(VendorUtils.EXTRA_TEMP_FILE_ROOT,
mAppTempFileRoots.get(registeredAppId));
fdRequestIntent.setComponent(appReceiver);
@@ -240,7 +235,7 @@
if (extras != null) {
Log.i(LOG_TAG, "Got "
+ extras.getParcelableArrayList(
- VendorIntents.EXTRA_FREE_URI_LIST).size()
+ VendorUtils.EXTRA_FREE_URI_LIST).size()
+ " fds");
}
}
@@ -258,12 +253,10 @@
private void sendFdRequest(DownloadRequest request, FrontendAppIdentifier appKey) {
int numFds = getNumFdsNeededForRequest(request);
// Compose the FILE_DESCRIPTOR_REQUEST_INTENT
- Intent requestIntent = new Intent(VendorIntents.ACTION_FILE_DESCRIPTOR_REQUEST);
- requestIntent.putExtra(VendorIntents.EXTRA_SERVICE_INFO,
- FileServiceRepository.getInstance(this)
- .getFileServiceInfoForId(request.getFileServiceId()));
- requestIntent.putExtra(VendorIntents.EXTRA_FD_COUNT, numFds);
- requestIntent.putExtra(VendorIntents.EXTRA_TEMP_FILE_ROOT,
+ Intent requestIntent = new Intent(VendorUtils.ACTION_FILE_DESCRIPTOR_REQUEST);
+ requestIntent.putExtra(VendorUtils.EXTRA_SERVICE_ID, request.getFileServiceId());
+ requestIntent.putExtra(VendorUtils.EXTRA_FD_COUNT, numFds);
+ requestIntent.putExtra(VendorUtils.EXTRA_TEMP_FILE_ROOT,
mAppTempFileRoots.get(appKey));
requestIntent.setComponent(mAppReceivers.get(appKey));
@@ -291,7 +284,7 @@
private void performDownload(DownloadRequest request, FrontendAppIdentifier appKey,
Bundle extras) {
List<UriPathPair> tempFiles = extras.getParcelableArrayList(
- VendorIntents.EXTRA_FREE_URI_LIST);
+ VendorUtils.EXTRA_FREE_URI_LIST);
List<FileInfo> filesToDownload = FileServiceRepository.getInstance(this)
.getFileServiceInfoForId(request.getFileServiceId())
.getFiles();
@@ -329,7 +322,7 @@
private void downloadSingleFile(FrontendAppIdentifier appKey, DownloadRequest request,
UriPathPair tempFile, FileInfo fileToDownload) {
- int result = MbmsDownloadManager.RESULT_SUCCESSFUL;
+ int result = MbmsDownloadSession.RESULT_SUCCESSFUL;
try {
// Get the ParcelFileDescriptor for the single temp file we requested
ParcelFileDescriptor tempFileFd = getContentResolver().openFileDescriptor(
@@ -351,7 +344,7 @@
destinationStream.write(imageBuffer);
destinationStream.flush();
} catch (IOException e) {
- result = MbmsDownloadManager.RESULT_CANCELLED;
+ result = MbmsDownloadSession.RESULT_CANCELLED;
}
// Take a round-trip through the download request serialization to exercise it
@@ -363,18 +356,18 @@
.build();
Intent downloadResultIntent =
- new Intent(VendorIntents.ACTION_DOWNLOAD_RESULT_INTERNAL);
- downloadResultIntent.putExtra(VendorIntents.EXTRA_REQUEST, request1);
- downloadResultIntent.putExtra(VendorIntents.EXTRA_FINAL_URI,
+ new Intent(VendorUtils.ACTION_DOWNLOAD_RESULT_INTERNAL);
+ downloadResultIntent.putExtra(MbmsDownloadSession.EXTRA_MBMS_DOWNLOAD_REQUEST, request1);
+ downloadResultIntent.putExtra(VendorUtils.EXTRA_FINAL_URI,
tempFile.getFilePathUri());
- downloadResultIntent.putExtra(MbmsDownloadManager.EXTRA_FILE_INFO, fileToDownload);
- downloadResultIntent.putExtra(VendorIntents.EXTRA_TEMP_FILE_ROOT,
+ downloadResultIntent.putExtra(MbmsDownloadSession.EXTRA_MBMS_FILE_INFO, fileToDownload);
+ downloadResultIntent.putExtra(VendorUtils.EXTRA_TEMP_FILE_ROOT,
mAppTempFileRoots.get(appKey));
ArrayList<Uri> tempFileList = new ArrayList<>(1);
tempFileList.add(tempFile.getFilePathUri());
downloadResultIntent.getExtras().putParcelableArrayList(
- VendorIntents.EXTRA_TEMP_LIST, tempFileList);
- downloadResultIntent.putExtra(MbmsDownloadManager.EXTRA_RESULT, result);
+ VendorUtils.EXTRA_TEMP_LIST, tempFileList);
+ downloadResultIntent.putExtra(MbmsDownloadSession.EXTRA_MBMS_DOWNLOAD_RESULT, result);
downloadResultIntent.setComponent(mAppReceivers.get(appKey));
sendOrderedBroadcast(downloadResultIntent,
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 3428e38..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,14 +23,11 @@
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
-import android.os.RemoteException;
-import android.telephony.mbms.IMbmsStreamingManagerCallback;
-import android.telephony.mbms.MbmsException;
-import android.telephony.mbms.MbmsStreamingManagerCallback;
+import android.telephony.mbms.MbmsErrors;
+import android.telephony.mbms.MbmsStreamingSessionCallback;
import android.telephony.mbms.StreamingService;
import android.telephony.mbms.StreamingServiceCallback;
import android.telephony.mbms.StreamingServiceInfo;
-import android.telephony.mbms.vendor.IMbmsStreamingService;
import android.telephony.mbms.vendor.MbmsStreamingServiceBase;
import android.util.Log;
@@ -56,7 +53,7 @@
private static final int SEND_STREAMING_SERVICES_LIST = 1;
- private final Map<FrontendAppIdentifier, MbmsStreamingManagerCallback> mAppCallbacks =
+ private final Map<FrontendAppIdentifier, MbmsStreamingSessionCallback> mAppCallbacks =
new HashMap<>();
private HandlerThread mHandlerThread;
@@ -67,7 +64,7 @@
SomeArgs args = (SomeArgs) msg.obj;
FrontendAppIdentifier appKey = (FrontendAppIdentifier) args.arg1;
List<StreamingServiceInfo> services = (List) args.arg2;
- MbmsStreamingManagerCallback appCallback = mAppCallbacks.get(appKey);
+ MbmsStreamingSessionCallback appCallback = mAppCallbacks.get(appKey);
if (appCallback != null) {
appCallback.onStreamingServicesUpdated(services);
}
@@ -78,15 +75,15 @@
private final MbmsStreamingServiceBase mBinder = new MbmsStreamingServiceBase() {
@Override
- public int initialize(MbmsStreamingManagerCallback callback, int subId) {
+ public int initialize(MbmsStreamingSessionCallback callback, int subId) {
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(() -> {
@@ -95,16 +92,16 @@
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
- public int getStreamingServices(int subscriptionId, List<String> serviceClasses) {
+ public int requestUpdateStreamingServices(int subscriptionId, List<String> serviceClasses) {
FrontendAppIdentifier appKey =
new FrontendAppIdentifier(Binder.getCallingUid(), subscriptionId);
checkInitialized(appKey);
@@ -120,7 +117,7 @@
mHandler.sendMessageDelayed(
mHandler.obtainMessage(SEND_STREAMING_SERVICES_LIST, args),
SEND_SERVICE_LIST_DELAY);
- return MbmsException.SUCCESS;
+ return MbmsErrors.SUCCESS;
}
@Override
@@ -133,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
@@ -166,16 +163,6 @@
mHandler.post(() -> StreamStateTracker.stopStreaming(appKey, serviceId,
StreamingService.REASON_BY_USER_REQUEST));
- }
-
- @Override
- public void disposeStream(int subscriptionId, String serviceId) {
- FrontendAppIdentifier appKey =
- new FrontendAppIdentifier(Binder.getCallingUid(), subscriptionId);
- checkInitialized(appKey);
- checkServiceExists(serviceId);
-
- Log.i(TAG, "Disposing of stream " + serviceId);
StreamStateTracker.dispose(appKey, serviceId);
}
diff --git a/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/FileServiceRepository.java b/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/FileServiceRepository.java
index 7b8cbd5..27911f6 100644
--- a/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/FileServiceRepository.java
+++ b/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/FileServiceRepository.java
@@ -21,13 +21,8 @@
import android.telephony.mbms.FileInfo;
import android.telephony.mbms.FileServiceInfo;
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -67,7 +62,7 @@
public List<FileServiceInfo> getFileServicesForClasses(
List<String> serviceClasses) {
return mIdToServiceInfo.values().stream()
- .filter((info) -> serviceClasses.contains(info.getClassName()))
+ .filter((info) -> serviceClasses.contains(info.getServiceClassName()))
.collect(Collectors.toList());
}
diff --git a/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/StreamingServiceRepository.java b/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/StreamingServiceRepository.java
index 677f39b..e1a12e3 100644
--- a/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/StreamingServiceRepository.java
+++ b/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/StreamingServiceRepository.java
@@ -43,7 +43,7 @@
public static List<StreamingServiceInfo> getStreamingServicesForClasses(
List<String> serviceClasses) {
return sIdToServiceInfo.values().stream()
- .filter((info) -> serviceClasses.contains(info.getClassName()))
+ .filter((info) -> serviceClasses.contains(info.getServiceClassName()))
.collect(Collectors.toList());
}
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 ef9e672..3c94b76 100644
--- a/testapps/EmbmsTestDownloadApp/src/com/android/phone/testapps/embmsdownload/DownloadCompletionReceiver.java
+++ b/testapps/EmbmsTestDownloadApp/src/com/android/phone/testapps/embmsdownload/DownloadCompletionReceiver.java
@@ -20,20 +20,68 @@
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
-import android.telephony.MbmsDownloadManager;
+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
public void onReceive(Context context, Intent intent) {
if (EmbmsTestDownloadApp.DOWNLOAD_DONE_ACTION.equals(intent.getAction())) {
- int result = intent.getIntExtra(MbmsDownloadManager.EXTRA_RESULT,
- MbmsDownloadManager.RESULT_CANCELLED);
- if (result != MbmsDownloadManager.RESULT_SUCCESSFUL) {
+ int result = intent.getIntExtra(MbmsDownloadSession.EXTRA_MBMS_DOWNLOAD_RESULT,
+ MbmsDownloadSession.RESULT_CANCELLED);
+ if (result != MbmsDownloadSession.RESULT_SUCCESSFUL) {
EmbmsTestDownloadApp.getInstance().onDownloadFailed(result);
}
Uri completedFile = intent.getParcelableExtra(
- MbmsDownloadManager.EXTRA_COMPLETED_FILE_URI);
- EmbmsTestDownloadApp.getInstance().onDownloadDone(completedFile);
+ MbmsDownloadSession.EXTRA_MBMS_COMPLETED_FILE_URI);
+ 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 80045ce..23f2cc5 100644
--- a/testapps/EmbmsTestDownloadApp/src/com/android/phone/testapps/embmsdownload/EmbmsTestDownloadApp.java
+++ b/testapps/EmbmsTestDownloadApp/src/com/android/phone/testapps/embmsdownload/EmbmsTestDownloadApp.java
@@ -25,12 +25,11 @@
import android.os.HandlerThread;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
-import android.telephony.MbmsDownloadManager;
+import android.telephony.MbmsDownloadSession;
import android.telephony.SubscriptionManager;
import android.telephony.mbms.DownloadRequest;
import android.telephony.mbms.FileServiceInfo;
-import android.telephony.mbms.MbmsDownloadManagerCallback;
-import android.telephony.mbms.MbmsException;
+import android.telephony.mbms.MbmsDownloadSessionCallback;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
@@ -43,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;
@@ -108,7 +106,7 @@
public View getView(int position, View convertView, ViewGroup parent) {
FileServiceInfo info = getItem(position);
TextView result = new TextView(EmbmsTestDownloadApp.this);
- result.setText(info.getNames().get(info.getLocales().get(0)));
+ result.setText(info.getNameForLocale(info.getLocales().get(0)));
return result;
}
@@ -117,7 +115,7 @@
FileServiceInfo info = getItem(position);
TextView result = new TextView(EmbmsTestDownloadApp.this);
String text = "name="
- + info.getNames().get(info.getLocales().get(0))
+ + info.getNameForLocale(info.getLocales().get(0))
+ ", "
+ "numFiles="
+ info.getFiles().size();
@@ -153,15 +151,15 @@
}
- private MbmsDownloadManagerCallback mCallback = new MbmsDownloadManagerCallback() {
+ private MbmsDownloadSessionCallback mCallback = new MbmsDownloadSessionCallback() {
@Override
- public void error(int errorCode, String message) {
+ public void onError(int errorCode, String message) {
runOnUiThread(() -> Toast.makeText(EmbmsTestDownloadApp.this,
"Error " + errorCode + ": " + message, Toast.LENGTH_SHORT).show());
}
@Override
- public void fileServicesUpdated(List<FileServiceInfo> services) {
+ public void onFileServicesUpdated(List<FileServiceInfo> services) {
EmbmsTestDownloadApp.this.runOnUiThread(() ->
Toast.makeText(EmbmsTestDownloadApp.this,
"Got services length " + services.size(),
@@ -170,13 +168,13 @@
}
@Override
- public void middlewareReady() {
+ public void onMiddlewareReady() {
runOnUiThread(() -> Toast.makeText(EmbmsTestDownloadApp.this,
"Initialization done", Toast.LENGTH_SHORT).show());
}
};
- private MbmsDownloadManager mDownloadManager;
+ private MbmsDownloadSession mDownloadManager;
private Handler mHandler;
private HandlerThread mHandlerThread;
private FileServiceInfoAdapter mFileServiceInfoAdapter;
@@ -203,12 +201,7 @@
Button bindButton = (Button) findViewById(R.id.bind_button);
bindButton.setOnClickListener((view) -> {
- try {
- mDownloadManager = MbmsDownloadManager.create(this, mCallback);
- } catch (MbmsException e) {
- Toast.makeText(EmbmsTestDownloadApp.this,
- "caught MbmsException: " + e.getErrorCode(), Toast.LENGTH_SHORT).show();
- }
+ mDownloadManager = MbmsDownloadSession.create(this, mCallback, mHandler);
});
Button setTempFileRootButton = (Button) findViewById(R.id.set_temp_root_button);
@@ -216,24 +209,14 @@
File downloadDir = new File(EmbmsTestDownloadApp.this.getFilesDir(),
CUSTOM_EMBMS_TEMP_FILE_LOCATION);
downloadDir.mkdirs();
- try {
- mDownloadManager.setTempFileRootDirectory(downloadDir);
- Toast.makeText(EmbmsTestDownloadApp.this,
- "temp file root set to " + downloadDir, Toast.LENGTH_SHORT).show();
- } catch (MbmsException e) {
- Toast.makeText(EmbmsTestDownloadApp.this,
- "caught MbmsException: " + e.getErrorCode(), Toast.LENGTH_SHORT).show();
- }
+ mDownloadManager.setTempFileRootDirectory(downloadDir);
+ Toast.makeText(EmbmsTestDownloadApp.this,
+ "temp file root set to " + downloadDir, Toast.LENGTH_SHORT).show();
});
Button getFileServicesButton = (Button) findViewById(R.id.get_file_services_button);
getFileServicesButton.setOnClickListener((view) -> mHandler.post(() -> {
- try {
- mDownloadManager.getFileServices(Collections.singletonList("Class1"));
- } catch (MbmsException e) {
- runOnUiThread(() -> Toast.makeText(EmbmsTestDownloadApp.this,
- "caught MbmsException: " + e.getErrorCode(), Toast.LENGTH_SHORT).show());
- }
+ mDownloadManager.requestUpdateFileServices(Collections.singletonList("Class1"));
}));
final Spinner serviceSelector = (Spinner) findViewById(R.id.available_file_services);
@@ -286,15 +269,10 @@
"No download service bound", Toast.LENGTH_SHORT).show();
return;
}
- try {
- DownloadRequest request =
- (DownloadRequest) downloadRequestSpinner.getSelectedItem();
- mDownloadManager.cancelDownload(request);
- mDownloadRequestAdapter.remove(request);
- } catch (MbmsException e) {
- runOnUiThread(() -> Toast.makeText(EmbmsTestDownloadApp.this,
- "caught MbmsException: " + e.getErrorCode(), Toast.LENGTH_SHORT).show());
- }
+ DownloadRequest request =
+ (DownloadRequest) downloadRequestSpinner.getSelectedItem();
+ mDownloadManager.cancelDownload(request);
+ mDownloadRequestAdapter.remove(request);
});
}
@@ -331,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);
@@ -356,26 +324,11 @@
DownloadRequest request = new DownloadRequest.Builder()
.setServiceInfo(info)
.setSource(sourceUriBuilder.build())
- .setDest(Uri.fromFile(destination))
.setAppIntent(completionIntent)
.setSubscriptionId(SubscriptionManager.getDefaultSubscriptionId())
.build();
- try {
- mDownloadManager.download(request, null);
- mDownloadRequestAdapter.add(request);
- } catch (MbmsException e) {
- Toast.makeText(EmbmsTestDownloadApp.this,
- "caught MbmsException: " + e.getErrorCode(), Toast.LENGTH_SHORT).show();
- }
- }
-
- private static void clearDirectory(File directory) {
- for (File file: directory.listFiles()) {
- if (file.isDirectory()) {
- clearDirectory(file);
- }
- file.delete();
- }
+ mDownloadManager.download(request);
+ mDownloadRequestAdapter.add(request);
}
}
diff --git a/testapps/EmbmsTestStreamingApp/res/layout/activity_main.xml b/testapps/EmbmsTestStreamingApp/res/layout/activity_main.xml
index b75a157..d28ede2 100644
--- a/testapps/EmbmsTestStreamingApp/res/layout/activity_main.xml
+++ b/testapps/EmbmsTestStreamingApp/res/layout/activity_main.xml
@@ -96,13 +96,6 @@
android:layout_column="1"
android:text="@string/stop_streaming_button" />
<Button
- android:id="@+id/dispose_stream_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_row="2"
- android:layout_column="0"
- android:text="@string/dispose_stream_button" />
- <Button
android:id="@+id/dispose_manager_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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 1505846..0546c9d 100644
--- a/testapps/EmbmsTestStreamingApp/src/com/android/phone/testapps/embmsfrontend/EmbmsTestStreamingApp.java
+++ b/testapps/EmbmsTestStreamingApp/src/com/android/phone/testapps/embmsfrontend/EmbmsTestStreamingApp.java
@@ -22,9 +22,8 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
-import android.telephony.MbmsStreamingManager;
-import android.telephony.mbms.MbmsException;
-import android.telephony.mbms.MbmsStreamingManagerCallback;
+import android.telephony.MbmsStreamingSession;
+import android.telephony.mbms.MbmsStreamingSessionCallback;
import android.telephony.mbms.StreamingService;
import android.telephony.mbms.StreamingServiceInfo;
import android.view.View;
@@ -41,9 +40,10 @@
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.NoSuchElementException;
public class EmbmsTestStreamingApp extends Activity {
- private MbmsStreamingManagerCallback mStreamingListener = new MbmsStreamingManagerCallback() {
+ private MbmsStreamingSessionCallback mStreamingListener = new MbmsStreamingSessionCallback() {
@Override
public void onStreamingServicesUpdated(List<StreamingServiceInfo> services) {
EmbmsTestStreamingApp.this.runOnUiThread(() ->
@@ -67,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
@@ -131,7 +128,7 @@
}
}
- private MbmsStreamingManager mStreamingManager = null;
+ private MbmsStreamingSession mStreamingManager = null;
private Handler mHandler;
private HandlerThread mHandlerThread;
@@ -156,14 +153,8 @@
Button bindButton = (Button) findViewById(R.id.bind_button);
bindButton.setOnClickListener((view) -> {
- try {
- mStreamingManager = MbmsStreamingManager.create(
- EmbmsTestStreamingApp.this, mStreamingListener, mHandler);
- } catch (MbmsException e) {
- Toast.makeText(EmbmsTestStreamingApp.this,
- "Init error: " + e.getErrorCode(), Toast.LENGTH_SHORT).show();
- return;
- }
+ mStreamingManager = MbmsStreamingSession.create(
+ EmbmsTestStreamingApp.this, mStreamingListener, mHandler);
});
Button getStreamingServicesButton = (Button)
@@ -174,13 +165,7 @@
"No streaming service bound", Toast.LENGTH_SHORT).show();
return;
}
- try {
- mStreamingManager.getStreamingServices(Collections.singletonList("Class1"));
- } catch (MbmsException e) {
- Toast.makeText(EmbmsTestStreamingApp.this,
- "Error getting streaming services" + e.getErrorCode(),
- Toast.LENGTH_SHORT).show();
- }
+ mStreamingManager.requestUpdateStreamingServices(Collections.singletonList("Class1"));
});
final Spinner serviceSelector = (Spinner) findViewById(R.id.available_streaming_services);
@@ -241,27 +226,13 @@
stream.stopStreaming();
});
- Button disposeStreamButton = (Button) findViewById(R.id.dispose_stream_button);
- disposeStreamButton.setOnClickListener((view) -> {
- if (getSelectedTrackedStream() == null) {
- Toast.makeText(EmbmsTestStreamingApp.this,
- "No streams selected", Toast.LENGTH_SHORT).show();
- return;
- }
- clearStateAndUriDisplay();
- StreamingServiceTracker stream = getSelectedTrackedStream();
- mTrackedStreamingServiceAdapter.remove(stream.getServiceId());
- mStreamingServiceTrackerById.remove(stream.getServiceId());
- stream.dispose();
- });
-
Button disposeManagerButton = (Button) findViewById(R.id.dispose_manager_button);
disposeManagerButton.setOnClickListener((view) -> {
clearStateAndUriDisplay();
mTrackedStreamingServiceAdapter.clear();
mStreamingServicesDisplayAdapter.update(Collections.emptyList());
mStreamingServiceTrackerById.clear();
- mStreamingManager.dispose();
+ mStreamingManager.close();
});
}
diff --git a/testapps/EmbmsTestStreamingApp/src/com/android/phone/testapps/embmsfrontend/StreamingServiceTracker.java b/testapps/EmbmsTestStreamingApp/src/com/android/phone/testapps/embmsfrontend/StreamingServiceTracker.java
index 4821bee..5244d30 100644
--- a/testapps/EmbmsTestStreamingApp/src/com/android/phone/testapps/embmsfrontend/StreamingServiceTracker.java
+++ b/testapps/EmbmsTestStreamingApp/src/com/android/phone/testapps/embmsfrontend/StreamingServiceTracker.java
@@ -17,8 +17,7 @@
package com.android.phone.testapps.embmsfrontend;
import android.net.Uri;
-import android.telephony.MbmsStreamingManager;
-import android.telephony.mbms.MbmsException;
+import android.telephony.MbmsStreamingSession;
import android.telephony.mbms.StreamingService;
import android.telephony.mbms.StreamingServiceCallback;
import android.telephony.mbms.StreamingServiceInfo;
@@ -57,37 +56,17 @@
mStreamingServiceInfo = info;
}
- public boolean startStreaming(MbmsStreamingManager streamingManager) {
- try {
- mStreamingService =
- streamingManager.startStreaming(mStreamingServiceInfo, new Callback(), null);
- return true;
- } catch (MbmsException e) {
- Toast.makeText(mActivity,
- "Error starting streaming: " + e.getErrorCode(),
- Toast.LENGTH_SHORT).show();
- }
- return false;
+ /**
+ * Start streaming using the provided streaming session
+ */
+ public boolean startStreaming(MbmsStreamingSession streamingManager) {
+ mStreamingService =
+ streamingManager.startStreaming(mStreamingServiceInfo, new Callback(), null);
+ return true;
}
public void stopStreaming() {
- try {
- mStreamingService.stopStreaming();
- } catch (MbmsException e) {
- Toast.makeText(mActivity,
- "Error stopping streaming: " + e.getErrorCode(),
- Toast.LENGTH_SHORT).show();
- }
- }
-
- public void dispose() {
- try {
- mStreamingService.dispose();
- } catch (MbmsException e) {
- Toast.makeText(mActivity,
- "Error disposing stream" + e.getErrorCode(),
- Toast.LENGTH_SHORT).show();
- }
+ mStreamingService.stopStreaming();
}
public String getServiceId() {
@@ -108,14 +87,8 @@
private void onStreamStateUpdated(int state, int reason) {
if (state == StreamingService.STATE_STARTED && mState != StreamingService.STATE_STARTED) {
- try {
- mStreamingUri = mStreamingService.getPlaybackUri();
- mActivity.updateUri();
- } catch (MbmsException e) {
- String errorToast = "Got error " + e.getErrorCode() + " while getting uri";
- mActivity.runOnUiThread(() ->
- Toast.makeText(mActivity, errorToast, Toast.LENGTH_SHORT).show());
- }
+ mStreamingUri = mStreamingService.getPlaybackUri();
+ mActivity.updateUri();
}
mState = state;
mActivity.updateStreamingState();