Merge "Implement getDownloadStatus and add permission"

am: 2fa880d016

Change-Id: I1c8b9140d6fdc20347858f1296dbccfc60319959
This commit is contained in:
Hall Liu
2017-07-12 23:27:49 +00:00
committed by android-build-merger
10 changed files with 70 additions and 119 deletions

View File

@@ -615,7 +615,6 @@ include $(CLEAR_VARS)
aidl_files := \
frameworks/base/telephony/java/android/telephony/mbms/DownloadRequest.aidl \
frameworks/base/telephony/java/android/telephony/mbms/DownloadStatus.aidl \
frameworks/base/telephony/java/android/telephony/mbms/FileInfo.aidl \
frameworks/base/telephony/java/android/telephony/mbms/FileServiceInfo.aidl \
frameworks/base/telephony/java/android/telephony/mbms/ServiceInfo.aidl \

View File

@@ -121,6 +121,7 @@ package android {
field public static final java.lang.String REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
field public static final java.lang.String REQUEST_INSTALL_PACKAGES = "android.permission.REQUEST_INSTALL_PACKAGES";
field public static final deprecated java.lang.String RESTART_PACKAGES = "android.permission.RESTART_PACKAGES";
field public static final java.lang.String SEND_EMBMS_INTENTS = "android.permission.SEND_EMBMS_INTENTS";
field public static final java.lang.String SEND_RESPOND_VIA_MESSAGE = "android.permission.SEND_RESPOND_VIA_MESSAGE";
field public static final java.lang.String SEND_SMS = "android.permission.SEND_SMS";
field public static final java.lang.String SET_ALARM = "com.android.alarm.permission.SET_ALARM";

View File

@@ -221,6 +221,7 @@ package android {
field public static final java.lang.String RETRIEVE_WINDOW_CONTENT = "android.permission.RETRIEVE_WINDOW_CONTENT";
field public static final java.lang.String REVOKE_RUNTIME_PERMISSIONS = "android.permission.REVOKE_RUNTIME_PERMISSIONS";
field public static final java.lang.String SCORE_NETWORKS = "android.permission.SCORE_NETWORKS";
field public static final java.lang.String SEND_EMBMS_INTENTS = "android.permission.SEND_EMBMS_INTENTS";
field public static final java.lang.String SEND_RESPOND_VIA_MESSAGE = "android.permission.SEND_RESPOND_VIA_MESSAGE";
field public static final java.lang.String SEND_SMS = "android.permission.SEND_SMS";
field public static final java.lang.String SEND_SMS_NO_CONFIRMATION = "android.permission.SEND_SMS_NO_CONFIRMATION";

View File

@@ -121,6 +121,7 @@ package android {
field public static final java.lang.String REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
field public static final java.lang.String REQUEST_INSTALL_PACKAGES = "android.permission.REQUEST_INSTALL_PACKAGES";
field public static final deprecated java.lang.String RESTART_PACKAGES = "android.permission.RESTART_PACKAGES";
field public static final java.lang.String SEND_EMBMS_INTENTS = "android.permission.SEND_EMBMS_INTENTS";
field public static final java.lang.String SEND_RESPOND_VIA_MESSAGE = "android.permission.SEND_RESPOND_VIA_MESSAGE";
field public static final java.lang.String SEND_SMS = "android.permission.SEND_SMS";
field public static final java.lang.String SET_ALARM = "com.android.alarm.permission.SET_ALARM";

View File

@@ -1671,6 +1671,10 @@
<permission android:name="android.permission.RECEIVE_STK_COMMANDS"
android:protectionLevel="signature|privileged" />
<!-- Allows an application to send EMBMS download intents to apps-->
<permission android:name="android.permission.SEND_EMBMS_INTENTS"
android:protectionLevel="signature|privileged" />
<!-- Must be required by an ImsService to ensure that only the
system can bind to it.
<p>Protection level: signature|privileged

View File

@@ -16,6 +16,7 @@
package android.telephony;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.content.ComponentName;
import android.content.Context;
@@ -26,9 +27,9 @@ import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.IBinder;
import android.os.RemoteException;
import android.telephony.mbms.FileInfo;
import android.telephony.mbms.IDownloadCallback;
import android.telephony.mbms.DownloadRequest;
import android.telephony.mbms.DownloadStatus;
import android.telephony.mbms.IMbmsDownloadManagerCallback;
import android.telephony.mbms.MbmsDownloadManagerCallback;
import android.telephony.mbms.MbmsDownloadReceiver;
@@ -40,6 +41,8 @@ import android.util.Log;
import java.io.File;
import java.io.IOException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
@@ -192,6 +195,18 @@ public class MbmsDownloadManager {
public static final int RESULT_EXPIRED = 3;
// TODO - more results!
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef({STATUS_UNKNOWN, STATUS_ACTIVELY_DOWNLOADING, STATUS_PENDING_DOWNLOAD,
STATUS_PENDING_REPAIR, STATUS_PENDING_DOWNLOAD_WINDOW})
public @interface DownloadStatus {}
public static final int STATUS_UNKNOWN = 0;
public static final int STATUS_ACTIVELY_DOWNLOADING = 1;
public static final int STATUS_PENDING_DOWNLOAD = 2;
public static final int STATUS_PENDING_REPAIR = 3;
public static final int STATUS_PENDING_DOWNLOAD_WINDOW = 4;
private final Context mContext;
private int mSubscriptionId = INVALID_SUBSCRIPTION_ID;
@@ -271,8 +286,6 @@ public class MbmsDownloadManager {
* The serviceClasses argument lets the app filter on types of programming and is opaque data
* negotiated beforehand between the app and the carrier.
*
* Multiple calls replace the list of serviceClasses of interest.
*
* This may throw an {@link MbmsException} containing one of the following errors:
* {@link MbmsException#ERROR_MIDDLEWARE_NOT_BOUND}
* {@link MbmsException#ERROR_CONCURRENT_SERVICE_LIMIT_REACHED}
@@ -282,6 +295,12 @@ public class MbmsDownloadManager {
* callback can include any of the errors except:
* {@link MbmsException#ERROR_UNABLE_TO_START_SERVICE}
* {@link MbmsException#ERROR_END_OF_SESSION}
*
* @param classList A list of service classes which the app wishes to receive
* {@link IMbmsDownloadManagerCallback#fileServicesUpdated(List)} callbacks
* about. Subsequent calls to this method will replace this list of service
* classes (i.e. the middleware will no longer send updates for services
* matching classes only in the old list).
*/
public void getFileServices(List<String> classList) throws MbmsException {
IMbmsDownloadService downloadService = mService.get();
@@ -312,8 +331,9 @@ public class MbmsDownloadManager {
* will default to a directory formed by the concatenation of the app's files directory and
* {@link android.telephony.mbms.MbmsTempFileProvider#DEFAULT_TOP_LEVEL_TEMP_DIRECTORY}.
*
* This method may not be called while any download requests are still active. If this is
* the case, an {@link MbmsException} will be thrown with code
* Before calling this method, the app must cancel all of its pending
* {@link DownloadRequest}s via {@link #cancelDownload(DownloadRequest)}. If this is not done,
* an {@link MbmsException} will be thrown with code
* {@link MbmsException#ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT}
*
* The {@link File} supplied as a root temp file directory must already exist. If not, an
@@ -444,20 +464,30 @@ public class MbmsDownloadManager {
}
/**
* Gets information about current and known upcoming downloads.
* Gets information about the status of a file pending download.
*
* Current is a straightforward count of the files being downloaded "now"
* for some definition of now (may be racey).
* Future downloads include counts of files with pending repair operations, counts of
* files with future downloads and indication of scheduled download times with unknown
* file details.
* If the middleware has not yet been properly initialized or if it has no records of the
* file indicated by {@code fileInfo} being associated with {@code downloadRequest},
* {@link #STATUS_UNKNOWN} will be returned.
*
* May throw an IllegalArgumentException or RemoteException.
*
* If the DownloadRequest is unknown the results will be null.
* @param downloadRequest The download request to query.
* @param fileInfo The particular file within the request to get information on.
* @return The status of the download.
*/
public DownloadStatus getDownloadStatus(DownloadRequest downloadRequest) {
return null;
@DownloadStatus
public int getDownloadStatus(DownloadRequest downloadRequest, FileInfo fileInfo)
throws MbmsException {
IMbmsDownloadService downloadService = mService.get();
if (downloadService == null) {
throw new MbmsException(MbmsException.ERROR_MIDDLEWARE_NOT_BOUND);
}
try {
return downloadService.getDownloadStatus(downloadRequest, fileInfo);
} catch (RemoteException e) {
mService.set(null);
throw new MbmsException(MbmsException.ERROR_SERVICE_LOST);
}
}
/**

View File

@@ -1,19 +0,0 @@
/*
** Copyright 2017, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
package android.telephony.mbms;
parcelable DownloadStatus;

View File

@@ -1,77 +0,0 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.telephony.mbms;
import android.os.Parcel;
import android.os.Parcelable;
/**
* A Parcelable class describing the status of a Cell-Broadcast download request
* @hide
*/
public class DownloadStatus implements Parcelable {
// includes downloads and active repair work
public final int activelyDownloading;
// files scheduled for future broadcast
public final int pendingDownloads;
// files scheduled for future repairs
public final int pendingRepairs;
// is a future download window scheduled with unknown
// number of files
public final boolean windowPending;
public DownloadStatus(int downloading, int downloads, int repairs, boolean window) {
activelyDownloading = downloading;
pendingDownloads = downloads;
pendingRepairs = repairs;
windowPending = window;
}
public static final Parcelable.Creator<DownloadStatus> CREATOR =
new Parcelable.Creator<DownloadStatus>() {
@Override
public DownloadStatus createFromParcel(Parcel in) {
return new DownloadStatus(in);
}
@Override
public DownloadStatus[] newArray(int size) {
return new DownloadStatus[size];
}
};
DownloadStatus(Parcel in) {
activelyDownloading = in.readInt();
pendingDownloads = in.readInt();
pendingRepairs = in.readInt();
windowPending = (in.readInt() == 1);
}
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(activelyDownloading);
dest.writeInt(pendingDownloads);
dest.writeInt(pendingRepairs);
dest.writeInt((windowPending ? 1 : 0));
}
public int describeContents() {
return 0;
}
}

View File

@@ -19,7 +19,7 @@ package android.telephony.mbms.vendor;
import android.app.PendingIntent;
import android.net.Uri;
import android.telephony.mbms.DownloadRequest;
import android.telephony.mbms.DownloadStatus;
import android.telephony.mbms.FileInfo;
import android.telephony.mbms.IMbmsDownloadManagerCallback;
import android.telephony.mbms.IDownloadCallback;
@@ -41,7 +41,7 @@ interface IMbmsDownloadService
int cancelDownload(in DownloadRequest downloadRequest);
DownloadStatus getDownloadStatus(in DownloadRequest downloadRequest);
int getDownloadStatus(in DownloadRequest downloadRequest, in FileInfo fileInfo);
/*
* named this for 2 reasons:

View File

@@ -18,7 +18,7 @@ package android.telephony.mbms.vendor;
import android.os.RemoteException;
import android.telephony.mbms.DownloadRequest;
import android.telephony.mbms.DownloadStatus;
import android.telephony.mbms.FileInfo;
import android.telephony.mbms.IDownloadCallback;
import android.telephony.mbms.IMbmsDownloadManagerCallback;
import android.telephony.mbms.MbmsException;
@@ -73,9 +73,15 @@ public class MbmsDownloadServiceBase extends IMbmsDownloadService.Stub {
* Sets the temp file root directory for this app/subscriptionId combination. The middleware
* should persist {@code rootDirectoryPath} and send it back when sending intents to the
* app's {@link android.telephony.mbms.MbmsDownloadReceiver}.
*
* If the calling app (as identified by the calling UID) currently has any pending download
* requests that have not been canceled, the middleware must return
* {@link MbmsException#ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT} here.
*
* @param subscriptionId The subscription id the download is operating under.
* @param rootDirectoryPath The path to the app's temp file root directory.
* @return {@link MbmsException#ERROR_MIDDLEWARE_NOT_YET_READY},
* @return {@link MbmsException#SUCCESS},
* {@link MbmsException#ERROR_MIDDLEWARE_NOT_YET_READY},
* {@link MbmsException#ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT},
* or {@link MbmsException#ERROR_CONCURRENT_SERVICE_LIMIT_REACHED}
*/
@@ -87,6 +93,11 @@ public class MbmsDownloadServiceBase extends IMbmsDownloadService.Stub {
/**
* Issues a request to download a set of files.
*
* The middleware should expect that {@link #setTempFileRootDirectory(int, String)} has been
* called for this app between when the app was installed and when this method is called. If
* this is not the case, an {@link IllegalStateException} may be thrown.
*
* @param downloadRequest An object describing the set of files to be downloaded.
* @param listener A listener through which the middleware can provide progress updates to
* the app while both are still running.
@@ -122,9 +133,9 @@ public class MbmsDownloadServiceBase extends IMbmsDownloadService.Stub {
}
@Override
public DownloadStatus getDownloadStatus(DownloadRequest downloadRequest)
public int getDownloadStatus(DownloadRequest downloadRequest, FileInfo fileInfo)
throws RemoteException {
return null;
return 0;
}
@Override