Merge "Adds DownloadStateCallback test to EMBMS Download TestApp"
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 dcb7320..093d683 100644
--- a/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/EmbmsSampleDownloadService.java
+++ b/testapps/EmbmsServiceTestApp/src/com/android/phone/testapps/embmsmw/EmbmsSampleDownloadService.java
@@ -32,6 +32,7 @@
import android.os.RemoteException;
import android.telephony.MbmsDownloadSession;
import android.telephony.mbms.DownloadRequest;
+import android.telephony.mbms.DownloadStateCallback;
import android.telephony.mbms.FileInfo;
import android.telephony.mbms.FileServiceInfo;
import android.telephony.mbms.MbmsDownloadSessionCallback;
@@ -142,6 +143,13 @@
}
@Override
+ public int registerStateCallback(DownloadRequest downloadRequest,
+ DownloadStateCallback callback) throws RemoteException {
+ mDownloadStateCallbacks.put(downloadRequest, callback);
+ return MbmsErrors.SUCCESS;
+ }
+
+ @Override
public int cancelDownload(DownloadRequest downloadRequest) {
FrontendAppIdentifier appKey = new FrontendAppIdentifier(
Binder.getCallingUid(), downloadRequest.getSubscriptionId());
@@ -175,6 +183,8 @@
// A map of app-identifiers to (maps of service-ids to sets of temp file uris in use)
private final Map<FrontendAppIdentifier, Map<String, Set<Uri>>> mTempFilesInUse =
new ConcurrentHashMap<>();
+ private final Map<DownloadRequest, DownloadStateCallback> mDownloadStateCallbacks =
+ new ConcurrentHashMap<>();
private HandlerThread mHandlerThread;
private Handler mHandler;
@@ -323,6 +333,16 @@
private void downloadSingleFile(FrontendAppIdentifier appKey, DownloadRequest request,
UriPathPair tempFile, FileInfo fileToDownload) {
int result = MbmsDownloadSession.RESULT_SUCCESSFUL;
+ // Test Callback
+ DownloadStateCallback c = mDownloadStateCallbacks.get(request);
+ if (c != null) {
+ c.onProgressUpdated(request, fileToDownload, 0, 10, 0, 10);
+ }
+ // Test Callback
+ if (c != null) {
+ c.onStateUpdated(request, fileToDownload,
+ MbmsDownloadSession.STATUS_ACTIVELY_DOWNLOADING);
+ }
try {
// Get the ParcelFileDescriptor for the single temp file we requested
ParcelFileDescriptor tempFileFd = getContentResolver().openFileDescriptor(
@@ -346,7 +366,10 @@
} catch (IOException e) {
result = MbmsDownloadSession.RESULT_CANCELLED;
}
-
+ // Test Callback
+ if (c != null) {
+ c.onProgressUpdated(request, fileToDownload, 10, 10, 10, 10);
+ }
// Take a round-trip through the download request serialization to exercise it
DownloadRequest request1 = new DownloadRequest.Builder()
.setSource(request.getSourceUri())
diff --git a/testapps/EmbmsTestDownloadApp/res/layout/activity_main.xml b/testapps/EmbmsTestDownloadApp/res/layout/activity_main.xml
index 076bc37..1aea6a5 100644
--- a/testapps/EmbmsTestDownloadApp/res/layout/activity_main.xml
+++ b/testapps/EmbmsTestDownloadApp/res/layout/activity_main.xml
@@ -105,9 +105,31 @@
android:layout_row="4"
android:layout_column="0"
android:text="@string/cancel_download_button" />
+ <Button
+ android:id="@+id/register_state_callback_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_row="5"
+ android:layout_column="0"
+ android:text="@string/register_state_callback_button" />
+ <Button
+ android:id="@+id/register_progress_callback_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_row="5"
+ android:layout_column="1"
+ android:text="@string/register_progress_callback_button" />
+ <Button
+ android:id="@+id/register_all_callback_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_row="6"
+ android:layout_column="0"
+ android:text="@string/register_all_callback_button" />
+
<Spinner
android:id="@+id/active_downloads"
- android:layout_row="4"
+ android:layout_row="7"
android:layout_column="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
diff --git a/testapps/EmbmsTestDownloadApp/res/values/donottranslate_strings.xml b/testapps/EmbmsTestDownloadApp/res/values/donottranslate_strings.xml
index 13d9fc2..b032b26 100644
--- a/testapps/EmbmsTestDownloadApp/res/values/donottranslate_strings.xml
+++ b/testapps/EmbmsTestDownloadApp/res/values/donottranslate_strings.xml
@@ -24,4 +24,7 @@
<string name="request_spurious_temp_files_button">Request more temp files</string>
<string name="delay_download_button">Delay download</string>
<string name="cancel_download_button">Cancel download</string>
+ <string name="register_state_callback_button">Register State Cb</string>
+ <string name="register_progress_callback_button">Register Progress Cb</string>
+ <string name="register_all_callback_button">Register All Cbs</string>
</resources>
\ No newline at end of file
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 23f2cc5..4513329 100644
--- a/testapps/EmbmsTestDownloadApp/src/com/android/phone/testapps/embmsdownload/EmbmsTestDownloadApp.java
+++ b/testapps/EmbmsTestDownloadApp/src/com/android/phone/testapps/embmsdownload/EmbmsTestDownloadApp.java
@@ -28,6 +28,8 @@
import android.telephony.MbmsDownloadSession;
import android.telephony.SubscriptionManager;
import android.telephony.mbms.DownloadRequest;
+import android.telephony.mbms.DownloadStateCallback;
+import android.telephony.mbms.FileInfo;
import android.telephony.mbms.FileServiceInfo;
import android.telephony.mbms.MbmsDownloadSessionCallback;
import android.util.Log;
@@ -274,6 +276,112 @@
mDownloadManager.cancelDownload(request);
mDownloadRequestAdapter.remove(request);
});
+
+ Button registerProgressCallback =
+ (Button) findViewById(R.id.register_progress_callback_button);
+ registerProgressCallback.setOnClickListener((view) -> {
+ if (mDownloadManager == null) {
+ Toast.makeText(EmbmsTestDownloadApp.this,
+ "No download service bound", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ DownloadRequest req = (DownloadRequest) downloadRequestSpinner.getSelectedItem();
+ if (req == null) {
+ Toast.makeText(EmbmsTestDownloadApp.this,
+ "No DownloadRequest Pending for progress...", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ mDownloadManager.registerStateCallback(req, new DownloadStateCallback(
+ DownloadStateCallback.PROGRESS_UPDATES) {
+ @Override
+ public void onProgressUpdated(DownloadRequest request, FileInfo fileInfo,
+ int currentDownloadSize, int fullDownloadSize, int currentDecodedSize,
+ int fullDecodedSize) {
+ Toast.makeText(EmbmsTestDownloadApp.this,
+ "Progress Updated (" + fileInfo + ") cd: " + currentDecodedSize
+ + " fd: " + fullDownloadSize, Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onStateUpdated(DownloadRequest request, FileInfo fileInfo,
+ @MbmsDownloadSession.DownloadStatus int state) {
+ // only registered for state callback, this shouldn't happen!
+ Toast.makeText(EmbmsTestDownloadApp.this,
+ "State ERROR: received state update for callback that didn't filter it",
+ Toast.LENGTH_SHORT).show();
+ }
+ }, sInstance.getMainThreadHandler());
+ });
+
+ Button registerStateCallback =
+ (Button) findViewById(R.id.register_state_callback_button);
+ registerStateCallback.setOnClickListener((view) -> {
+ if (mDownloadManager == null) {
+ Toast.makeText(EmbmsTestDownloadApp.this,
+ "No download service bound", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ DownloadRequest req = (DownloadRequest) downloadRequestSpinner.getSelectedItem();
+ if (req == null) {
+ Toast.makeText(EmbmsTestDownloadApp.this,
+ "No DownloadRequest Pending for state...", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ mDownloadManager.registerStateCallback(req, new DownloadStateCallback(
+ DownloadStateCallback.STATE_UPDATES) {
+ @Override
+ public void onProgressUpdated(DownloadRequest request, FileInfo fileInfo,
+ int currentDownloadSize, int fullDownloadSize, int currentDecodedSize,
+ int fullDecodedSize) {
+ // only registered for state callback, this shouldn't happen!
+ Toast.makeText(EmbmsTestDownloadApp.this,
+ "Progress ERROR: received progress update for callback that didn't "
+ + "filter it", Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onStateUpdated(DownloadRequest request, FileInfo fileInfo,
+ @MbmsDownloadSession.DownloadStatus int state) {
+ Toast.makeText(EmbmsTestDownloadApp.this,
+ "State Updated (" + fileInfo + ") state: " + state,
+ Toast.LENGTH_SHORT).show();
+ }
+ }, sInstance.getMainThreadHandler());
+ });
+
+ Button registerAllCallbacks =
+ (Button) findViewById(R.id.register_all_callback_button);
+ registerAllCallbacks.setOnClickListener((view) -> {
+ if (mDownloadManager == null) {
+ Toast.makeText(EmbmsTestDownloadApp.this,
+ "No download service bound", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ DownloadRequest req = (DownloadRequest) downloadRequestSpinner.getSelectedItem();
+ if (req == null) {
+ Toast.makeText(EmbmsTestDownloadApp.this,
+ "No DownloadRequest Pending for state...", Toast.LENGTH_SHORT).show();
+ return;
+ }
+ mDownloadManager.registerStateCallback(req, new DownloadStateCallback() {
+ @Override
+ public void onProgressUpdated(DownloadRequest request, FileInfo fileInfo,
+ int currentDownloadSize, int fullDownloadSize, int currentDecodedSize,
+ int fullDecodedSize) {
+ Toast.makeText(EmbmsTestDownloadApp.this,
+ "Progress Updated (" + fileInfo + ") cd: " + currentDecodedSize
+ + " fd: " + fullDownloadSize, Toast.LENGTH_SHORT).show();
+ }
+
+ @Override
+ public void onStateUpdated(DownloadRequest request, FileInfo fileInfo,
+ @MbmsDownloadSession.DownloadStatus int state) {
+ Toast.makeText(EmbmsTestDownloadApp.this,
+ "State Updated (" + fileInfo + ") state: " + state,
+ Toast.LENGTH_SHORT).show();
+ }
+ }, sInstance.getMainThreadHandler());
+ });
}
@Override