diff options
author | Justin Klaassen <justinklaassen@google.com> | 2017-10-10 15:20:13 -0400 |
---|---|---|
committer | Justin Klaassen <justinklaassen@google.com> | 2017-10-10 15:20:13 -0400 |
commit | 93b7ee4fce01df52a6607f0b1965cbafdfeaf1a6 (patch) | |
tree | 49f76f879a89c256a4f65b674086be50760bdffb /android/telephony | |
parent | bc81c7ada5aab3806dd0b17498f5c9672c9b33c4 (diff) | |
download | android-28-93b7ee4fce01df52a6607f0b1965cbafdfeaf1a6.tar.gz |
Import Android SDK Platform P [4386628]
/google/data/ro/projects/android/fetch_artifact \
--bid 4386628 \
--target sdk_phone_armv7-win_sdk \
sdk-repo-linux-sources-4386628.zip
AndroidVersion.ApiLevel has been modified to appear as 28
Change-Id: I9b8400ac92116cae4f033d173f7a5682b26ccba9
Diffstat (limited to 'android/telephony')
-rw-r--r-- | android/telephony/MbmsDownloadSession.java | 6 | ||||
-rw-r--r-- | android/telephony/PhoneNumberUtils.java | 185 | ||||
-rw-r--r-- | android/telephony/TelephonyManager.java | 23 | ||||
-rw-r--r-- | android/telephony/mbms/DownloadStateCallback.java | 69 | ||||
-rw-r--r-- | android/telephony/mbms/MbmsDownloadReceiver.java | 6 | ||||
-rw-r--r-- | android/telephony/mbms/ServiceInfo.java | 20 | ||||
-rw-r--r-- | android/telephony/mbms/vendor/MbmsDownloadServiceBase.java | 70 | ||||
-rw-r--r-- | android/telephony/mbms/vendor/VendorUtils.java | 3 |
8 files changed, 282 insertions, 100 deletions
diff --git a/android/telephony/MbmsDownloadSession.java b/android/telephony/MbmsDownloadSession.java index ebac0419..764b7b22 100644 --- a/android/telephony/MbmsDownloadSession.java +++ b/android/telephony/MbmsDownloadSession.java @@ -522,8 +522,7 @@ public class MbmsDownloadSession implements AutoCloseable { * @param handler The {@link Handler} on which calls to {@code callback} should be enqueued on. */ public void registerStateCallback(@NonNull DownloadRequest request, - @NonNull DownloadStateCallback callback, - @NonNull Handler handler) { + @NonNull DownloadStateCallback callback, @NonNull Handler handler) { IMbmsDownloadService downloadService = mService.get(); if (downloadService == null) { throw new IllegalStateException("Middleware not yet bound"); @@ -533,7 +532,8 @@ public class MbmsDownloadSession implements AutoCloseable { new InternalDownloadStateCallback(callback, handler); try { - int result = downloadService.registerStateCallback(request, internalCallback); + int result = downloadService.registerStateCallback(request, internalCallback, + callback.getCallbackFilterFlags()); if (result != MbmsErrors.SUCCESS) { if (result == MbmsErrors.DownloadErrors.ERROR_UNKNOWN_DOWNLOAD_REQUEST) { throw new IllegalArgumentException("Unknown download request."); diff --git a/android/telephony/PhoneNumberUtils.java b/android/telephony/PhoneNumberUtils.java index d5ff1adb..ff671163 100644 --- a/android/telephony/PhoneNumberUtils.java +++ b/android/telephony/PhoneNumberUtils.java @@ -77,9 +77,28 @@ public class PhoneNumberUtils public static final int TOA_International = 0x91; public static final int TOA_Unknown = 0x81; + /* + * The BCD extended type used to determine the extended char for the digit which is greater than + * 9. + * + * see TS 51.011 section 10.5.1 EF_ADN(Abbreviated dialling numbers) + */ + public static final int BCD_EXTENDED_TYPE_EF_ADN = 1; + + /* + * The BCD extended type used to determine the extended char for the digit which is greater than + * 9. + * + * see TS 24.008 section 10.5.4.7 Called party BCD number + */ + public static final int BCD_EXTENDED_TYPE_CALLED_PARTY = 2; + static final String LOG_TAG = "PhoneNumberUtils"; private static final boolean DBG = false; + private static final String BCD_EF_ADN_EXTENDED = "*#,N;"; + private static final String BCD_CALLED_PARTY_EXTENDED = "*#abc"; + /* * global-phone-number = ["+"] 1*( DIGIT / written-sep ) * written-sep = ("-"/".") @@ -799,11 +818,33 @@ public class PhoneNumberUtils * * @return partial string on invalid decode * - * FIXME(mkf) support alphanumeric address type - * currently implemented in SMSMessage.getAddress() + * @deprecated use {@link #calledPartyBCDToString(byte[], int, int, int)} instead. Calling this + * method is equivalent to calling {@link #calledPartyBCDToString(byte[], int, int)} with + * {@link #BCD_EXTENDED_TYPE_EF_ADN} as the extended type. */ - public static String - calledPartyBCDToString (byte[] bytes, int offset, int length) { + @Deprecated + public static String calledPartyBCDToString(byte[] bytes, int offset, int length) { + return calledPartyBCDToString(bytes, offset, length, BCD_EXTENDED_TYPE_EF_ADN); + } + + /** + * 3GPP TS 24.008 10.5.4.7 + * Called Party BCD Number + * + * See Also TS 51.011 10.5.1 "dialing number/ssc string" + * and TS 11.11 "10.3.1 EF adn (Abbreviated dialing numbers)" + * + * @param bytes the data buffer + * @param offset should point to the TOA (aka. TON/NPI) octet after the length byte + * @param length is the number of bytes including TOA byte + * and must be at least 2 + * @param bcdExtType used to determine the extended bcd coding + * @see #BCD_EXTENDED_TYPE_EF_ADN + * @see #BCD_EXTENDED_TYPE_CALLED_PARTY + * + */ + public static String calledPartyBCDToString( + byte[] bytes, int offset, int length, int bcdExtType) { boolean prependPlus = false; StringBuilder ret = new StringBuilder(1 + length * 2); @@ -817,7 +858,7 @@ public class PhoneNumberUtils } internalCalledPartyBCDFragmentToString( - ret, bytes, offset + 1, length - 1); + ret, bytes, offset + 1, length - 1, bcdExtType); if (prependPlus && ret.length() == 0) { // If the only thing there is a prepended plus, return "" @@ -902,14 +943,13 @@ public class PhoneNumberUtils return ret.toString(); } - private static void - internalCalledPartyBCDFragmentToString( - StringBuilder sb, byte [] bytes, int offset, int length) { + private static void internalCalledPartyBCDFragmentToString( + StringBuilder sb, byte [] bytes, int offset, int length, int bcdExtType) { for (int i = offset ; i < length + offset ; i++) { byte b; char c; - c = bcdToChar((byte)(bytes[i] & 0xf)); + c = bcdToChar((byte)(bytes[i] & 0xf), bcdExtType); if (c == 0) { return; @@ -930,7 +970,7 @@ public class PhoneNumberUtils break; } - c = bcdToChar(b); + c = bcdToChar(b, bcdExtType); if (c == 0) { return; } @@ -943,49 +983,65 @@ public class PhoneNumberUtils /** * Like calledPartyBCDToString, but field does not start with a * TOA byte. For example: SIM ADN extension fields + * + * @deprecated use {@link #calledPartyBCDFragmentToString(byte[], int, int, int)} instead. + * Calling this method is equivalent to calling + * {@link #calledPartyBCDFragmentToString(byte[], int, int, int)} with + * {@link #BCD_EXTENDED_TYPE_EF_ADN} as the extended type. */ + @Deprecated + public static String calledPartyBCDFragmentToString(byte[] bytes, int offset, int length) { + return calledPartyBCDFragmentToString(bytes, offset, length, BCD_EXTENDED_TYPE_EF_ADN); + } - public static String - calledPartyBCDFragmentToString(byte [] bytes, int offset, int length) { + /** + * Like calledPartyBCDToString, but field does not start with a + * TOA byte. For example: SIM ADN extension fields + */ + public static String calledPartyBCDFragmentToString( + byte[] bytes, int offset, int length, int bcdExtType) { StringBuilder ret = new StringBuilder(length * 2); - - internalCalledPartyBCDFragmentToString(ret, bytes, offset, length); - + internalCalledPartyBCDFragmentToString(ret, bytes, offset, length, bcdExtType); return ret.toString(); } - /** returns 0 on invalid value */ - private static char - bcdToChar(byte b) { + /** + * Returns the correspond character for given {@code b} based on {@code bcdExtType}, or 0 on + * invalid code. + */ + private static char bcdToChar(byte b, int bcdExtType) { if (b < 0xa) { - return (char)('0' + b); - } else switch (b) { - case 0xa: return '*'; - case 0xb: return '#'; - case 0xc: return PAUSE; - case 0xd: return WILD; + return (char) ('0' + b); + } - default: return 0; + String extended = null; + if (BCD_EXTENDED_TYPE_EF_ADN == bcdExtType) { + extended = BCD_EF_ADN_EXTENDED; + } else if (BCD_EXTENDED_TYPE_CALLED_PARTY == bcdExtType) { + extended = BCD_CALLED_PARTY_EXTENDED; } + if (extended == null || b - 0xa >= extended.length()) { + return 0; + } + + return extended.charAt(b - 0xa); } - private static int - charToBCD(char c) { - if (c >= '0' && c <= '9') { + private static int charToBCD(char c, int bcdExtType) { + if ('0' <= c && c <= '9') { return c - '0'; - } else if (c == '*') { - return 0xa; - } else if (c == '#') { - return 0xb; - } else if (c == PAUSE) { - return 0xc; - } else if (c == WILD) { - return 0xd; - } else if (c == WAIT) { - return 0xe; - } else { - throw new RuntimeException ("invalid char for BCD " + c); } + + String extended = null; + if (BCD_EXTENDED_TYPE_EF_ADN == bcdExtType) { + extended = BCD_EF_ADN_EXTENDED; + } else if (BCD_EXTENDED_TYPE_CALLED_PARTY == bcdExtType) { + extended = BCD_CALLED_PARTY_EXTENDED; + } + if (extended == null || extended.indexOf(c) == -1) { + throw new RuntimeException("invalid char for BCD " + c); + } + return 0xa + extended.indexOf(c); } /** @@ -1034,40 +1090,60 @@ public class PhoneNumberUtils * * Returns null if network portion is empty. */ - public static byte[] - networkPortionToCalledPartyBCD(String s) { + public static byte[] networkPortionToCalledPartyBCD(String s) { String networkPortion = extractNetworkPortion(s); - return numberToCalledPartyBCDHelper(networkPortion, false); + return numberToCalledPartyBCDHelper( + networkPortion, false, BCD_EXTENDED_TYPE_EF_ADN); } /** * Same as {@link #networkPortionToCalledPartyBCD}, but includes a * one-byte length prefix. */ - public static byte[] - networkPortionToCalledPartyBCDWithLength(String s) { + public static byte[] networkPortionToCalledPartyBCDWithLength(String s) { String networkPortion = extractNetworkPortion(s); - return numberToCalledPartyBCDHelper(networkPortion, true); + return numberToCalledPartyBCDHelper( + networkPortion, true, BCD_EXTENDED_TYPE_EF_ADN); + } + + /** + * Convert a dialing number to BCD byte array + * + * @param number dialing number string. If the dialing number starts with '+', set to + * international TOA + * + * @return BCD byte array + * + * @deprecated use {@link #numberToCalledPartyBCD(String, int)} instead. Calling this method + * is equivalent to calling {@link #numberToCalledPartyBCD(String, int)} with + * {@link #BCD_EXTENDED_TYPE_EF_ADN} as the extended type. + */ + @Deprecated + public static byte[] numberToCalledPartyBCD(String number) { + return numberToCalledPartyBCD(number, BCD_EXTENDED_TYPE_EF_ADN); } /** * Convert a dialing number to BCD byte array * - * @param number dialing number string - * if the dialing number starts with '+', set to international TOA + * @param number dialing number string. If the dialing number starts with '+', set to + * international TOA + * @param bcdExtType used to determine the extended bcd coding + * @see #BCD_EXTENDED_TYPE_EF_ADN + * @see #BCD_EXTENDED_TYPE_CALLED_PARTY + * * @return BCD byte array */ - public static byte[] - numberToCalledPartyBCD(String number) { - return numberToCalledPartyBCDHelper(number, false); + public static byte[] numberToCalledPartyBCD(String number, int bcdExtType) { + return numberToCalledPartyBCDHelper(number, false, bcdExtType); } /** * If includeLength is true, prepend a one-byte length value to * the return array. */ - private static byte[] - numberToCalledPartyBCDHelper(String number, boolean includeLength) { + private static byte[] numberToCalledPartyBCDHelper( + String number, boolean includeLength, int bcdExtType) { int numberLenReal = number.length(); int numberLenEffective = numberLenReal; boolean hasPlus = number.indexOf('+') != -1; @@ -1087,7 +1163,8 @@ public class PhoneNumberUtils char c = number.charAt(i); if (c == '+') continue; int shift = ((digitCount & 0x01) == 1) ? 4 : 0; - result[extraBytes + (digitCount >> 1)] |= (byte)((charToBCD(c) & 0x0F) << shift); + result[extraBytes + (digitCount >> 1)] |= + (byte)((charToBCD(c, bcdExtType) & 0x0F) << shift); digitCount++; } diff --git a/android/telephony/TelephonyManager.java b/android/telephony/TelephonyManager.java index cde0bdfd..c0564c55 100644 --- a/android/telephony/TelephonyManager.java +++ b/android/telephony/TelephonyManager.java @@ -107,8 +107,6 @@ public class TelephonyManager { public static final String MODEM_ACTIVITY_RESULT_KEY = BatteryStats.RESULT_RECEIVER_CONTROLLER_KEY; - private static ITelephonyRegistry sRegistry; - /** * The allowed states of Wi-Fi calling. * @@ -179,11 +177,6 @@ public class TelephonyManager { mContext = context; } mSubscriptionManager = SubscriptionManager.from(mContext); - - if (sRegistry == null) { - sRegistry = ITelephonyRegistry.Stub.asInterface(ServiceManager.getService( - "telephony.registry")); - } } /** @hide */ @@ -3513,6 +3506,10 @@ public class TelephonyManager { return ITelecomService.Stub.asInterface(ServiceManager.getService(Context.TELECOM_SERVICE)); } + private ITelephonyRegistry getTelephonyRegistry() { + return ITelephonyRegistry.Stub.asInterface(ServiceManager.getService("telephony.registry")); + } + // // // PhoneStateListener @@ -3552,12 +3549,16 @@ public class TelephonyManager { if (listener.mSubId == null) { listener.mSubId = mSubId; } - sRegistry.listenForSubscriber(listener.mSubId, getOpPackageName(), - listener.callback, events, notifyNow); + + ITelephonyRegistry registry = getTelephonyRegistry(); + if (registry != null) { + registry.listenForSubscriber(listener.mSubId, getOpPackageName(), + listener.callback, events, notifyNow); + } else { + Rlog.w(TAG, "telephony registry not ready."); + } } catch (RemoteException ex) { // system process dead - } catch (NullPointerException ex) { - // system process dead } } diff --git a/android/telephony/mbms/DownloadStateCallback.java b/android/telephony/mbms/DownloadStateCallback.java index 86920bd3..892fbf07 100644 --- a/android/telephony/mbms/DownloadStateCallback.java +++ b/android/telephony/mbms/DownloadStateCallback.java @@ -16,8 +16,12 @@ package android.telephony.mbms; +import android.annotation.IntDef; import android.telephony.MbmsDownloadSession; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + /** * A optional listener class used by download clients to track progress. Apps should extend this * class and pass an instance into @@ -29,6 +33,71 @@ import android.telephony.MbmsDownloadSession; public class DownloadStateCallback { /** + * Bitmask flags used for filtering out callback methods. Used when constructing the + * DownloadStateCallback as an optional parameter. + * @hide + */ + @Retention(RetentionPolicy.SOURCE) + @IntDef({ALL_UPDATES, PROGRESS_UPDATES, STATE_UPDATES}) + public @interface FilterFlag {} + + /** + * Receive all callbacks. + * Default value. + */ + public static final int ALL_UPDATES = 0x00; + /** + * Receive callbacks for {@link #onProgressUpdated}. + */ + public static final int PROGRESS_UPDATES = 0x01; + /** + * Receive callbacks for {@link #onStateUpdated}. + */ + public static final int STATE_UPDATES = 0x02; + + private final int mCallbackFilterFlags; + + /** + * Creates a DownloadStateCallback that will receive all callbacks. + */ + public DownloadStateCallback() { + mCallbackFilterFlags = ALL_UPDATES; + } + + /** + * Creates a DownloadStateCallback that will only receive callbacks for the methods specified + * via the filterFlags parameter. + * @param filterFlags A bitmask of filter flags that will specify which callback this instance + * is interested in. + */ + public DownloadStateCallback(int filterFlags) { + mCallbackFilterFlags = filterFlags; + } + + /** + * Return the currently set filter flags. + * @return An integer containing the bitmask of flags that this instance is interested in. + * @hide + */ + public int getCallbackFilterFlags() { + return mCallbackFilterFlags; + } + + /** + * Returns true if a filter flag is set for a particular callback method. If the flag is set, + * the callback will be delivered to the listening process. + * @param flag A filter flag specifying whether or not a callback method is registered to + * receive callbacks. + * @return true if registered to receive callbacks in the listening process, false if not. + */ + public final boolean isFilterFlagSet(@FilterFlag int flag) { + if (mCallbackFilterFlags == ALL_UPDATES) { + return true; + } + return (mCallbackFilterFlags & flag) > 0; + } + + /** * Called when the middleware wants to report progress for a file in a {@link DownloadRequest}. * * @param request a {@link DownloadRequest}, indicating which download is being referenced. diff --git a/android/telephony/mbms/MbmsDownloadReceiver.java b/android/telephony/mbms/MbmsDownloadReceiver.java index 61415b50..fe275372 100644 --- a/android/telephony/mbms/MbmsDownloadReceiver.java +++ b/android/telephony/mbms/MbmsDownloadReceiver.java @@ -165,6 +165,12 @@ public class MbmsDownloadReceiver extends BroadcastReceiver { Log.w(LOG_TAG, "Download result did not include a result code. Ignoring."); return false; } + // We do not need to verify below extras if the result is not success. + if (MbmsDownloadSession.RESULT_SUCCESSFUL != + intent.getIntExtra(MbmsDownloadSession.EXTRA_MBMS_DOWNLOAD_RESULT, + MbmsDownloadSession.RESULT_CANCELLED)) { + return true; + } if (!intent.hasExtra(MbmsDownloadSession.EXTRA_MBMS_DOWNLOAD_REQUEST)) { Log.w(LOG_TAG, "Download result did not include the associated request. Ignoring."); return false; diff --git a/android/telephony/mbms/ServiceInfo.java b/android/telephony/mbms/ServiceInfo.java index 9a01ed00..8529f525 100644 --- a/android/telephony/mbms/ServiceInfo.java +++ b/android/telephony/mbms/ServiceInfo.java @@ -23,6 +23,7 @@ import android.os.Parcelable; import android.text.TextUtils; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -62,12 +63,6 @@ public class ServiceInfo { throw new RuntimeException("bad locales length " + newLocales.size()); } - for (Locale l : newLocales) { - if (!newNames.containsKey(l)) { - throw new IllegalArgumentException("A name must be provided for each locale"); - } - } - names = new HashMap(newNames.size()); names.putAll(newNames); className = newClassName; @@ -127,7 +122,7 @@ public class ServiceInfo { * Get the user-displayable name for this cell-broadcast service corresponding to the * provided {@link Locale}. * @param locale The {@link Locale} in which you want the name of the service. This must be a - * value from the list returned by {@link #getLocales()} -- an + * value from the set returned by {@link #getNamedContentLocales()} -- an * {@link java.util.NoSuchElementException} may be thrown otherwise. * @return The {@link CharSequence} providing the name of the service in the given * {@link Locale} @@ -140,6 +135,17 @@ public class ServiceInfo { } /** + * Return an unmodifiable set of the current {@link Locale}s that have a user-displayable name + * associated with them. The user-displayable name associated with any {@link Locale} in this + * set can be retrieved with {@link #getNameForLocale(Locale)}. + * @return An unmodifiable set of {@link Locale} objects corresponding to a user-displayable + * content name in that locale. + */ + public @NonNull Set<Locale> getNamedContentLocales() { + return Collections.unmodifiableSet(names.keySet()); + } + + /** * The class name for this service - used to categorize and filter */ public String getServiceClassName() { diff --git a/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java b/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java index d845a57b..2f85a1df 100644 --- a/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java +++ b/android/telephony/mbms/vendor/MbmsDownloadServiceBase.java @@ -46,6 +46,47 @@ public class MbmsDownloadServiceBase extends IMbmsDownloadService.Stub { private final Map<IBinder, DownloadStateCallback> mDownloadCallbackBinderMap = new HashMap<>(); private final Map<IBinder, DeathRecipient> mDownloadCallbackDeathRecipients = new HashMap<>(); + + // Filters the DownloadStateCallbacks by its configuration from the app. + private abstract static class FilteredDownloadStateCallback extends DownloadStateCallback { + + private final IDownloadStateCallback mCallback; + public FilteredDownloadStateCallback(IDownloadStateCallback callback, int callbackFlags) { + super(callbackFlags); + mCallback = callback; + } + + @Override + public void onProgressUpdated(DownloadRequest request, FileInfo fileInfo, + int currentDownloadSize, int fullDownloadSize, int currentDecodedSize, + int fullDecodedSize) { + if (!isFilterFlagSet(PROGRESS_UPDATES)) { + return; + } + try { + mCallback.onProgressUpdated(request, fileInfo, currentDownloadSize, + fullDownloadSize, currentDecodedSize, fullDecodedSize); + } catch (RemoteException e) { + onRemoteException(e); + } + } + + @Override + public void onStateUpdated(DownloadRequest request, FileInfo fileInfo, + @MbmsDownloadSession.DownloadStatus int state) { + if (!isFilterFlagSet(STATE_UPDATES)) { + return; + } + try { + mCallback.onStateUpdated(request, fileInfo, state); + } catch (RemoteException e) { + onRemoteException(e); + } + } + + protected abstract void onRemoteException(RemoteException e); + } + /** * Initialize the download service for this app and subId, registering the listener. * @@ -196,9 +237,8 @@ public class MbmsDownloadServiceBase extends IMbmsDownloadService.Stub { * @hide */ @Override - public final int registerStateCallback( - final DownloadRequest downloadRequest, final IDownloadStateCallback callback) - throws RemoteException { + public final int registerStateCallback(final DownloadRequest downloadRequest, + final IDownloadStateCallback callback, int flags) throws RemoteException { final int uid = Binder.getCallingUid(); DeathRecipient deathRecipient = new DeathRecipient() { @Override @@ -211,28 +251,10 @@ public class MbmsDownloadServiceBase extends IMbmsDownloadService.Stub { mDownloadCallbackDeathRecipients.put(callback.asBinder(), deathRecipient); callback.asBinder().linkToDeath(deathRecipient, 0); - DownloadStateCallback exposedCallback = new DownloadStateCallback() { + DownloadStateCallback exposedCallback = new FilteredDownloadStateCallback(callback, flags) { @Override - public void onProgressUpdated(DownloadRequest request, FileInfo fileInfo, int - currentDownloadSize, int fullDownloadSize, int currentDecodedSize, int - fullDecodedSize) { - try { - callback.onProgressUpdated(request, fileInfo, currentDownloadSize, - fullDownloadSize, - currentDecodedSize, fullDecodedSize); - } catch (RemoteException e) { - onAppCallbackDied(uid, downloadRequest.getSubscriptionId()); - } - } - - @Override - public void onStateUpdated(DownloadRequest request, FileInfo fileInfo, - @MbmsDownloadSession.DownloadStatus int state) { - try { - callback.onStateUpdated(request, fileInfo, state); - } catch (RemoteException e) { - onAppCallbackDied(uid, downloadRequest.getSubscriptionId()); - } + protected void onRemoteException(RemoteException e) { + onAppCallbackDied(uid, downloadRequest.getSubscriptionId()); } }; diff --git a/android/telephony/mbms/vendor/VendorUtils.java b/android/telephony/mbms/vendor/VendorUtils.java index 8fb27b29..a43f1224 100644 --- a/android/telephony/mbms/vendor/VendorUtils.java +++ b/android/telephony/mbms/vendor/VendorUtils.java @@ -38,8 +38,9 @@ public class VendorUtils { /** * The MBMS middleware should send this when a download of single file has completed or - * failed. Mandatory extras are + * failed. The only mandatory extra is * {@link MbmsDownloadSession#EXTRA_MBMS_DOWNLOAD_RESULT} + * and the following are required when the download has completed: * {@link MbmsDownloadSession#EXTRA_MBMS_FILE_INFO} * {@link MbmsDownloadSession#EXTRA_MBMS_DOWNLOAD_REQUEST} * {@link #EXTRA_TEMP_LIST} |