Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c6703d9a authored by Hall Liu's avatar Hall Liu
Browse files

Add feature flag and EMBMS bug fixes

Add a feature flag for EMBMS
Modify validation in ServiceInfo constructor
Change return signature of some download methods to better reflect
synchronous errors

Test: run cts tests
Change-Id: I42ee748ba29ba62becf23c5487310cd1e7a397da
parent 403c8f72
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -10757,6 +10757,7 @@ package android.content.pm {
    field public static final java.lang.String FEATURE_TELEPHONY = "android.hardware.telephony";
    field public static final java.lang.String FEATURE_TELEPHONY_CDMA = "android.hardware.telephony.cdma";
    field public static final java.lang.String FEATURE_TELEPHONY_GSM = "android.hardware.telephony.gsm";
    field public static final java.lang.String FEATURE_TELEPHONY_MBMS = "android.hardware.telephony.mbms";
    field public static final deprecated java.lang.String FEATURE_TELEVISION = "android.hardware.type.television";
    field public static final java.lang.String FEATURE_TOUCHSCREEN = "android.hardware.touchscreen";
    field public static final java.lang.String FEATURE_TOUCHSCREEN_MULTITOUCH = "android.hardware.touchscreen.multitouch";
@@ -39987,19 +39988,19 @@ package android.telephony {
  }
  public class MbmsDownloadSession implements java.lang.AutoCloseable {
    method public void cancelDownload(android.telephony.mbms.DownloadRequest);
    method public int cancelDownload(android.telephony.mbms.DownloadRequest);
    method public void close();
    method public static android.telephony.MbmsDownloadSession create(android.content.Context, android.telephony.mbms.MbmsDownloadSessionCallback, android.os.Handler);
    method public static android.telephony.MbmsDownloadSession create(android.content.Context, android.telephony.mbms.MbmsDownloadSessionCallback, int, android.os.Handler);
    method public void download(android.telephony.mbms.DownloadRequest);
    method public int download(android.telephony.mbms.DownloadRequest);
    method public int getDownloadStatus(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo);
    method public java.io.File getTempFileRootDirectory();
    method public java.util.List<android.telephony.mbms.DownloadRequest> listPendingDownloads();
    method public void registerStateCallback(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStateCallback, android.os.Handler);
    method public int registerStateCallback(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStateCallback, android.os.Handler);
    method public void requestUpdateFileServices(java.util.List<java.lang.String>);
    method public void resetDownloadKnowledge(android.telephony.mbms.DownloadRequest);
    method public void setTempFileRootDirectory(java.io.File);
    method public void unregisterStateCallback(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStateCallback);
    method public int unregisterStateCallback(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStateCallback);
    field public static final java.lang.String DEFAULT_TOP_LEVEL_TEMP_DIRECTORY = "androidMbmsTempFileRoot";
    field public static final java.lang.String EXTRA_MBMS_COMPLETED_FILE_URI = "android.telephony.extra.MBMS_COMPLETED_FILE_URI";
    field public static final java.lang.String EXTRA_MBMS_DOWNLOAD_REQUEST = "android.telephony.extra.MBMS_DOWNLOAD_REQUEST";
+7 −0
Original line number Diff line number Diff line
@@ -2084,6 +2084,13 @@ public abstract class PackageManager {
    @SdkConstant(SdkConstantType.FEATURE)
    public static final String FEATURE_TELEPHONY_EUICC = "android.hardware.telephony.euicc";

    /**
     * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device
     * supports cell-broadcast reception using the MBMS APIs.
     */
    @SdkConstant(SdkConstantType.FEATURE)
    public static final String FEATURE_TELEPHONY_MBMS = "android.hardware.telephony.mbms";

    /**
     * Feature for {@link #getSystemAvailableFeatures} and
     * {@link #hasSystemFeature}: The device supports connecting to USB devices
+31 −18
Original line number Diff line number Diff line
@@ -502,8 +502,10 @@ public class MbmsDownloadSession implements AutoCloseable {
     * Asynchronous errors through the callback may include any error not specific to the
     * streaming use-case.
     * @param request The request that specifies what should be downloaded.
     * @return {@link MbmsErrors#SUCCESS} if the operation did not encounter a synchronous error,
     * and some other error code otherwise.
     */
    public void download(@NonNull DownloadRequest request) {
    public int download(@NonNull DownloadRequest request) {
        IMbmsDownloadService downloadService = mService.get();
        if (downloadService == null) {
            throw new IllegalStateException("Middleware not yet bound");
@@ -519,13 +521,16 @@ public class MbmsDownloadSession implements AutoCloseable {
            setTempFileRootDirectory(tempRootDirectory);
        }

        writeDownloadRequestToken(request);
        try {
            downloadService.download(request);
            int result = downloadService.download(request);
            if (result == MbmsErrors.SUCCESS) {
                writeDownloadRequestToken(request);
            }
            return result;
        } catch (RemoteException e) {
            mService.set(null);
            sIsInitialized.set(false);
            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
            return MbmsErrors.ERROR_MIDDLEWARE_LOST;
        }
    }

@@ -565,8 +570,10 @@ public class MbmsDownloadSession implements AutoCloseable {
     * @param callback The callback that should be called when the middleware has information to
     *                 share on the download.
     * @param handler The {@link Handler} on which calls to {@code callback} should be enqueued on.
     * @return {@link MbmsErrors#SUCCESS} if the operation did not encounter a synchronous error,
     * and some other error code otherwise.
     */
    public void registerStateCallback(@NonNull DownloadRequest request,
    public int registerStateCallback(@NonNull DownloadRequest request,
            @NonNull DownloadStateCallback callback, @NonNull Handler handler) {
        IMbmsDownloadService downloadService = mService.get();
        if (downloadService == null) {
@@ -583,16 +590,15 @@ public class MbmsDownloadSession implements AutoCloseable {
                if (result == MbmsErrors.DownloadErrors.ERROR_UNKNOWN_DOWNLOAD_REQUEST) {
                    throw new IllegalArgumentException("Unknown download request.");
                }
                sendErrorToApp(result, null);
                return;
                return result;
            }
        } catch (RemoteException e) {
            mService.set(null);
            sIsInitialized.set(false);
            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
            return;
            return MbmsErrors.ERROR_MIDDLEWARE_LOST;
        }
        mInternalDownloadCallbacks.put(callback, internalCallback);
        return MbmsErrors.SUCCESS;
    }

    /**
@@ -606,8 +612,10 @@ public class MbmsDownloadSession implements AutoCloseable {
     *
     * @param request The {@link DownloadRequest} provided during registration
     * @param callback The callback provided during registration.
     * @return {@link MbmsErrors#SUCCESS} if the operation did not encounter a synchronous error,
     * and some other error code otherwise.
     */
    public void unregisterStateCallback(@NonNull DownloadRequest request,
    public int unregisterStateCallback(@NonNull DownloadRequest request,
            @NonNull DownloadStateCallback callback) {
        try {
            IMbmsDownloadService downloadService = mService.get();
@@ -617,6 +625,9 @@ public class MbmsDownloadSession implements AutoCloseable {

            InternalDownloadStateCallback internalCallback =
                    mInternalDownloadCallbacks.get(callback);
            if (internalCallback == null) {
                throw new IllegalArgumentException("Provided callback was never registered");
            }

            try {
                int result = downloadService.unregisterStateCallback(request, internalCallback);
@@ -624,12 +635,12 @@ public class MbmsDownloadSession implements AutoCloseable {
                    if (result == MbmsErrors.DownloadErrors.ERROR_UNKNOWN_DOWNLOAD_REQUEST) {
                        throw new IllegalArgumentException("Unknown download request.");
                    }
                    sendErrorToApp(result, null);
                    return result;
                }
            } catch (RemoteException e) {
                mService.set(null);
                sIsInitialized.set(false);
                sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
                return MbmsErrors.ERROR_MIDDLEWARE_LOST;
            }
        } finally {
            InternalDownloadStateCallback internalCallback =
@@ -638,6 +649,7 @@ public class MbmsDownloadSession implements AutoCloseable {
                internalCallback.stop();
            }
        }
        return MbmsErrors.SUCCESS;
    }

    /**
@@ -647,8 +659,10 @@ public class MbmsDownloadSession implements AutoCloseable {
     * this method will throw an {@link IllegalArgumentException}.
     *
     * @param downloadRequest The download request that you wish to cancel.
     * @return {@link MbmsErrors#SUCCESS} if the operation did not encounter a synchronous error,
     * and some other error code otherwise.
     */
    public void cancelDownload(@NonNull DownloadRequest downloadRequest) {
    public int cancelDownload(@NonNull DownloadRequest downloadRequest) {
        IMbmsDownloadService downloadService = mService.get();
        if (downloadService == null) {
            throw new IllegalStateException("Middleware not yet bound");
@@ -660,16 +674,15 @@ public class MbmsDownloadSession implements AutoCloseable {
                if (result == MbmsErrors.DownloadErrors.ERROR_UNKNOWN_DOWNLOAD_REQUEST) {
                    throw new IllegalArgumentException("Unknown download request.");
                }
                sendErrorToApp(result, null);
                return;
            } else {
                deleteDownloadRequestToken(downloadRequest);
            }
            return result;
        } catch (RemoteException e) {
            mService.set(null);
            sIsInitialized.set(false);
            sendErrorToApp(MbmsErrors.ERROR_MIDDLEWARE_LOST, null);
            return;
            return MbmsErrors.ERROR_MIDDLEWARE_LOST;
        }
        deleteDownloadRequestToken(downloadRequest);
    }

    /**
+2 −2
Original line number Diff line number Diff line
@@ -51,8 +51,8 @@ public class ServiceInfo {
    /** @hide */
    public ServiceInfo(Map<Locale, String> newNames, String newClassName, List<Locale> newLocales,
            String newServiceId, Date start, Date end) {
        if (newNames == null || newNames.isEmpty() || TextUtils.isEmpty(newClassName)
                || newLocales == null || newLocales.isEmpty() || TextUtils.isEmpty(newServiceId)
        if (newNames == null || newClassName == null
                || newLocales == null || newServiceId == null
                || start == null || end == null) {
            throw new IllegalArgumentException("Bad ServiceInfo construction");
        }