diff options
| -rw-r--r-- | api/current.txt | 39 | ||||
| -rw-r--r-- | api/system-current.txt | 39 | ||||
| -rw-r--r-- | core/java/android/app/Activity.java | 25 | ||||
| -rw-r--r-- | core/java/android/app/ApplicationPackageManager.java | 10 | ||||
| -rw-r--r-- | core/java/android/content/pm/IPackageManager.aidl | 3 | ||||
| -rw-r--r-- | core/java/android/content/pm/PackageManager.java | 13 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java | 45 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 40 | ||||
| -rw-r--r-- | telephony/java/android/telephony/CarrierConfigManager.java | 69 | ||||
| -rw-r--r-- | telephony/java/android/telephony/PhoneNumberUtils.java | 18 | ||||
| -rw-r--r-- | test-runner/src/android/test/mock/MockPackageManager.java | 6 |
11 files changed, 143 insertions, 164 deletions
diff --git a/api/current.txt b/api/current.txt index cb72a2efe6c8..f110d0b6305c 100644 --- a/api/current.txt +++ b/api/current.txt @@ -3513,6 +3513,7 @@ package android.app { method public deprecated void setTitleColor(int); method public void setVisible(boolean); method public final void setVolumeControlStream(int); + method public boolean shouldShowRequestPermissionRationale(java.lang.String); method public boolean shouldUpRecreateTask(android.content.Intent); method public final deprecated void showDialog(int); method public final deprecated boolean showDialog(int, android.os.Bundle); @@ -30635,20 +30636,6 @@ package android.telephony { field public static final java.lang.String BOOL_HAS_IN_CALL_NOISE_SUPPRESSION = "bool_has_in_call_noise_suppression"; field public static final java.lang.String BOOL_HIDE_CARRIER_NETWORK_SETTINGS = "bool_hide_carrier_network_settings"; field public static final java.lang.String BOOL_IGNORE_SIM_NETWORK_LOCKED_EVENTS = "bool_ignore_sim_network_locked_events"; - field public static final java.lang.String BOOL_MMS_ALIAS_ENABLED = "aliasEnabled"; - field public static final java.lang.String BOOL_MMS_ALLOW_ATTACH_AUDIO = "allowAttachAudio"; - field public static final java.lang.String BOOL_MMS_APPEND_TRANSACTION_ID = "enabledTransID"; - field public static final java.lang.String BOOL_MMS_GROUP_MMS_ENABLED = "enableGroupMms"; - field public static final java.lang.String BOOL_MMS_MMS_DELIVERY_REPORT_ENABLED = "enableMMSDeliveryReports"; - field public static final java.lang.String BOOL_MMS_MMS_ENABLED = "enabledMMS"; - field public static final java.lang.String BOOL_MMS_MMS_READ_REPORT_ENABLED = "enableMMSReadReports"; - field public static final java.lang.String BOOL_MMS_MULTIPART_SMS_ENABLED = "enableMultipartSMS"; - field public static final java.lang.String BOOL_MMS_NOTIFY_WAP_MMSC_ENABLED = "enabledNotifyWapMMSC"; - field public static final java.lang.String BOOL_MMS_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES = "sendMultipartSmsAsSeparateMessages"; - field public static final java.lang.String BOOL_MMS_SHOW_CELL_BROADCAST_APP_LINKS = "config_cellBroadcastAppLinks"; - field public static final java.lang.String BOOL_MMS_SMS_DELIVERY_REPORT_ENABLED = "enableSMSDeliveryReports"; - field public static final java.lang.String BOOL_MMS_SUPPORT_HTTP_CHARSET_HEADER = "supportHttpCharsetHeader"; - field public static final java.lang.String BOOL_MMS_SUPPORT_MMS_CONTENT_DISPOSITION = "supportMmsContentDisposition"; field public static final java.lang.String BOOL_OPERATOR_SELECTION_EXPAND = "bool_operator_selection_expand"; field public static final java.lang.String BOOL_PREFER_2G = "bool_prefer_2g"; field public static final java.lang.String BOOL_SHOW_APN_SETTING_CDMA = "bool_show_apn_setting_cdma"; @@ -30662,24 +30649,7 @@ package android.telephony { field public static final java.lang.String BOOL_VOICEMAIL_NOTIFICATION_PERSISTENT = "bool_voicemail_notification_persistent"; field public static final java.lang.String BOOL_VOICE_PRIVACY_DISABLE = "bool_voice_privacy_disable"; field public static final java.lang.String BOOL_WORLD_PHONE = "bool_world_phone"; - field public static final java.lang.String INT_MMS_ALIAS_MAX_CHARS = "aliasMaxChars"; - field public static final java.lang.String INT_MMS_ALIAS_MIN_CHARS = "aliasMinChars"; - field public static final java.lang.String INT_MMS_HTTP_SOCKET_TIMEOUT = "httpSocketTimeout"; - field public static final java.lang.String INT_MMS_MAX_IMAGE_HEIGHT = "maxImageHeight"; - field public static final java.lang.String INT_MMS_MAX_IMAGE_WIDTH = "maxImageWidth"; - field public static final java.lang.String INT_MMS_MAX_MESSAGE_SIZE = "maxMessageSize"; - field public static final java.lang.String INT_MMS_MESSAGE_TEXT_MAX_SIZE = "maxMessageTextSize"; - field public static final java.lang.String INT_MMS_RECIPIENT_LIMIT = "recipientLimit"; - field public static final java.lang.String INT_MMS_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD = "smsToMmsTextLengthThreshold"; - field public static final java.lang.String INT_MMS_SMS_TO_MMS_TEXT_THRESHOLD = "smsToMmsTextThreshold"; - field public static final java.lang.String INT_MMS_SUBJECT_MAX_LENGTH = "maxSubjectLength"; field public static final java.lang.String INT_VOLTE_REPLACEMENT_RAT = "int_volte_replacement_rat"; - field public static final java.lang.String STRING_MMS_EMAIL_GATEWAY_NUMBER = "emailGatewayNumber"; - field public static final java.lang.String STRING_MMS_HTTP_PARAMS = "httpParams"; - field public static final java.lang.String STRING_MMS_NAI_SUFFIX = "naiSuffix"; - field public static final java.lang.String STRING_MMS_UA_PROF_TAG_NAME = "uaProfTagName"; - field public static final java.lang.String STRING_MMS_UA_PROF_URL = "uaProfUrl"; - field public static final java.lang.String STRING_MMS_USER_AGENT = "userAgent"; } public final class CellIdentityCdma implements android.os.Parcelable { @@ -30871,12 +30841,14 @@ package android.telephony { public class PhoneNumberUtils { ctor public PhoneNumberUtils(); - method public static void addPhoneTtsSpan(android.text.Spannable, int, int); + method public static void addTtsSpan(android.text.Spannable, int, int); method public static java.lang.String calledPartyBCDFragmentToString(byte[], int, int); method public static java.lang.String calledPartyBCDToString(byte[], int, int); method public static boolean compare(java.lang.String, java.lang.String); method public static boolean compare(android.content.Context, java.lang.String, java.lang.String); method public static java.lang.String convertKeypadLettersToDigits(java.lang.String); + method public static android.text.style.TtsSpan createTtsSpan(java.lang.String); + method public static java.lang.CharSequence createTtsSpannable(java.lang.CharSequence); method public static java.lang.String extractNetworkPortion(java.lang.String); method public static java.lang.String extractPostDialPortion(java.lang.String); method public static deprecated void formatJapaneseNumber(android.text.Editable); @@ -30889,8 +30861,6 @@ package android.telephony { method public static java.lang.String formatNumberToRFC3966(java.lang.String, java.lang.String); method public static deprecated int getFormatTypeForLocale(java.util.Locale); method public static java.lang.String getNumberFromIntent(android.content.Intent, android.content.Context); - method public static android.text.style.TtsSpan getPhoneTtsSpan(java.lang.String); - method public static java.lang.CharSequence getPhoneTtsSpannable(java.lang.CharSequence); method public static java.lang.String getStrippedReversed(java.lang.String); method public static final boolean is12Key(char); method public static final boolean isDialable(char); @@ -31029,7 +30999,6 @@ package android.telephony { field public static final java.lang.String MMS_CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD = "smsToMmsTextLengthThreshold"; field public static final java.lang.String MMS_CONFIG_SMS_TO_MMS_TEXT_THRESHOLD = "smsToMmsTextThreshold"; field public static final java.lang.String MMS_CONFIG_SUBJECT_MAX_LENGTH = "maxSubjectLength"; - field public static final java.lang.String MMS_CONFIG_SUPPORT_HTTP_CHARSET_HEADER = "supportHttpCharsetHeader"; field public static final java.lang.String MMS_CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION = "supportMmsContentDisposition"; field public static final java.lang.String MMS_CONFIG_UA_PROF_TAG_NAME = "uaProfTagName"; field public static final java.lang.String MMS_CONFIG_UA_PROF_URL = "uaProfUrl"; diff --git a/api/system-current.txt b/api/system-current.txt index 488c92e65c8a..84c0f83431a5 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -3599,6 +3599,7 @@ package android.app { method public deprecated void setTitleColor(int); method public void setVisible(boolean); method public final void setVolumeControlStream(int); + method public boolean shouldShowRequestPermissionRationale(java.lang.String); method public boolean shouldUpRecreateTask(android.content.Intent); method public final deprecated void showDialog(int); method public final deprecated boolean showDialog(int, android.os.Bundle); @@ -32850,20 +32851,6 @@ package android.telephony { field public static final java.lang.String BOOL_HAS_IN_CALL_NOISE_SUPPRESSION = "bool_has_in_call_noise_suppression"; field public static final java.lang.String BOOL_HIDE_CARRIER_NETWORK_SETTINGS = "bool_hide_carrier_network_settings"; field public static final java.lang.String BOOL_IGNORE_SIM_NETWORK_LOCKED_EVENTS = "bool_ignore_sim_network_locked_events"; - field public static final java.lang.String BOOL_MMS_ALIAS_ENABLED = "aliasEnabled"; - field public static final java.lang.String BOOL_MMS_ALLOW_ATTACH_AUDIO = "allowAttachAudio"; - field public static final java.lang.String BOOL_MMS_APPEND_TRANSACTION_ID = "enabledTransID"; - field public static final java.lang.String BOOL_MMS_GROUP_MMS_ENABLED = "enableGroupMms"; - field public static final java.lang.String BOOL_MMS_MMS_DELIVERY_REPORT_ENABLED = "enableMMSDeliveryReports"; - field public static final java.lang.String BOOL_MMS_MMS_ENABLED = "enabledMMS"; - field public static final java.lang.String BOOL_MMS_MMS_READ_REPORT_ENABLED = "enableMMSReadReports"; - field public static final java.lang.String BOOL_MMS_MULTIPART_SMS_ENABLED = "enableMultipartSMS"; - field public static final java.lang.String BOOL_MMS_NOTIFY_WAP_MMSC_ENABLED = "enabledNotifyWapMMSC"; - field public static final java.lang.String BOOL_MMS_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES = "sendMultipartSmsAsSeparateMessages"; - field public static final java.lang.String BOOL_MMS_SHOW_CELL_BROADCAST_APP_LINKS = "config_cellBroadcastAppLinks"; - field public static final java.lang.String BOOL_MMS_SMS_DELIVERY_REPORT_ENABLED = "enableSMSDeliveryReports"; - field public static final java.lang.String BOOL_MMS_SUPPORT_HTTP_CHARSET_HEADER = "supportHttpCharsetHeader"; - field public static final java.lang.String BOOL_MMS_SUPPORT_MMS_CONTENT_DISPOSITION = "supportMmsContentDisposition"; field public static final java.lang.String BOOL_OPERATOR_SELECTION_EXPAND = "bool_operator_selection_expand"; field public static final java.lang.String BOOL_PREFER_2G = "bool_prefer_2g"; field public static final java.lang.String BOOL_SHOW_APN_SETTING_CDMA = "bool_show_apn_setting_cdma"; @@ -32877,24 +32864,7 @@ package android.telephony { field public static final java.lang.String BOOL_VOICEMAIL_NOTIFICATION_PERSISTENT = "bool_voicemail_notification_persistent"; field public static final java.lang.String BOOL_VOICE_PRIVACY_DISABLE = "bool_voice_privacy_disable"; field public static final java.lang.String BOOL_WORLD_PHONE = "bool_world_phone"; - field public static final java.lang.String INT_MMS_ALIAS_MAX_CHARS = "aliasMaxChars"; - field public static final java.lang.String INT_MMS_ALIAS_MIN_CHARS = "aliasMinChars"; - field public static final java.lang.String INT_MMS_HTTP_SOCKET_TIMEOUT = "httpSocketTimeout"; - field public static final java.lang.String INT_MMS_MAX_IMAGE_HEIGHT = "maxImageHeight"; - field public static final java.lang.String INT_MMS_MAX_IMAGE_WIDTH = "maxImageWidth"; - field public static final java.lang.String INT_MMS_MAX_MESSAGE_SIZE = "maxMessageSize"; - field public static final java.lang.String INT_MMS_MESSAGE_TEXT_MAX_SIZE = "maxMessageTextSize"; - field public static final java.lang.String INT_MMS_RECIPIENT_LIMIT = "recipientLimit"; - field public static final java.lang.String INT_MMS_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD = "smsToMmsTextLengthThreshold"; - field public static final java.lang.String INT_MMS_SMS_TO_MMS_TEXT_THRESHOLD = "smsToMmsTextThreshold"; - field public static final java.lang.String INT_MMS_SUBJECT_MAX_LENGTH = "maxSubjectLength"; field public static final java.lang.String INT_VOLTE_REPLACEMENT_RAT = "int_volte_replacement_rat"; - field public static final java.lang.String STRING_MMS_EMAIL_GATEWAY_NUMBER = "emailGatewayNumber"; - field public static final java.lang.String STRING_MMS_HTTP_PARAMS = "httpParams"; - field public static final java.lang.String STRING_MMS_NAI_SUFFIX = "naiSuffix"; - field public static final java.lang.String STRING_MMS_UA_PROF_TAG_NAME = "uaProfTagName"; - field public static final java.lang.String STRING_MMS_UA_PROF_URL = "uaProfUrl"; - field public static final java.lang.String STRING_MMS_USER_AGENT = "userAgent"; } public final class CellIdentityCdma implements android.os.Parcelable { @@ -33086,12 +33056,14 @@ package android.telephony { public class PhoneNumberUtils { ctor public PhoneNumberUtils(); - method public static void addPhoneTtsSpan(android.text.Spannable, int, int); + method public static void addTtsSpan(android.text.Spannable, int, int); method public static java.lang.String calledPartyBCDFragmentToString(byte[], int, int); method public static java.lang.String calledPartyBCDToString(byte[], int, int); method public static boolean compare(java.lang.String, java.lang.String); method public static boolean compare(android.content.Context, java.lang.String, java.lang.String); method public static java.lang.String convertKeypadLettersToDigits(java.lang.String); + method public static android.text.style.TtsSpan createTtsSpan(java.lang.String); + method public static java.lang.CharSequence createTtsSpannable(java.lang.CharSequence); method public static java.lang.String extractNetworkPortion(java.lang.String); method public static java.lang.String extractPostDialPortion(java.lang.String); method public static deprecated void formatJapaneseNumber(android.text.Editable); @@ -33104,8 +33076,6 @@ package android.telephony { method public static java.lang.String formatNumberToRFC3966(java.lang.String, java.lang.String); method public static deprecated int getFormatTypeForLocale(java.util.Locale); method public static java.lang.String getNumberFromIntent(android.content.Intent, android.content.Context); - method public static android.text.style.TtsSpan getPhoneTtsSpan(java.lang.String); - method public static java.lang.CharSequence getPhoneTtsSpannable(java.lang.CharSequence); method public static java.lang.String getStrippedReversed(java.lang.String); method public static final boolean is12Key(char); method public static final boolean isDialable(char); @@ -33244,7 +33214,6 @@ package android.telephony { field public static final java.lang.String MMS_CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD = "smsToMmsTextLengthThreshold"; field public static final java.lang.String MMS_CONFIG_SMS_TO_MMS_TEXT_THRESHOLD = "smsToMmsTextThreshold"; field public static final java.lang.String MMS_CONFIG_SUBJECT_MAX_LENGTH = "maxSubjectLength"; - field public static final java.lang.String MMS_CONFIG_SUPPORT_HTTP_CHARSET_HEADER = "supportHttpCharsetHeader"; field public static final java.lang.String MMS_CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION = "supportMmsContentDisposition"; field public static final java.lang.String MMS_CONFIG_UA_PROF_TAG_NAME = "uaProfTagName"; field public static final java.lang.String MMS_CONFIG_UA_PROF_URL = "uaProfUrl"; diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 49f509974fcd..966482d53d61 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -3746,6 +3746,7 @@ public class Activity extends ContextThemeWrapper * * @see #onRequestPermissionsResult(int, String[], int[]) * @see #checkSelfPermission(String) + * @see #shouldShowRequestPermissionRationale(String) */ public final void requestPermissions(@NonNull String[] permissions, int requestCode) { Intent intent = getPackageManager().buildRequestPermissionsIntent(permissions); @@ -3770,6 +3771,30 @@ public class Activity extends ContextThemeWrapper } /** + * Gets whether you should show UI with rationale for requesting a permission. + * You should do this only if you do not have the permission and the context in + * which the permission is requested does not clearly communicate to the user + * what would be the benefit from granting this permission. + * <p> + * For example, if you write a camera app, requesting the camera permission + * would be expected by the user and no rationale for why it is requested is + * needed. If however, the app needs location for tagging photos then a non-tech + * savvy user may wonder how location is related to taking photos. In this case + * you may choose to show UI with rationale of requesting this permission. + * </p> + * + * @param permission A permission your app wants to request. + * @return Whether you can show permission rationale UI. + * + * @see #checkSelfPermission(String) + * @see #requestPermissions(String[], int) + * @see #onRequestPermissionsResult(int, String[], int[]) + */ + public boolean shouldShowRequestPermissionRationale(String permission) { + return getPackageManager().shouldShowRequestPermissionRationale(permission); + } + + /** * Same as calling {@link #startActivityForResult(Intent, int, Bundle)} * with no options. * diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index 04f643074592..41e3db834f48 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -486,6 +486,16 @@ final class ApplicationPackageManager extends PackageManager { } @Override + public boolean shouldShowRequestPermissionRationale(String permission) { + try { + return mPM.shouldShowRequestPermissionRationale(permission, + mContext.getPackageName(), mContext.getUserId()); + } catch (RemoteException e) { + throw new RuntimeException("Package manager has died", e); + } + } + + @Override public int checkSignatures(String pkg1, String pkg2) { try { return mPM.checkSignatures(pkg1, pkg2); diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index ddff7821cdcb..00b8c71fde32 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -105,6 +105,9 @@ interface IPackageManager { void updatePermissionFlags(String permissionName, String packageName, int flagMask, int flagValues, int userId); + boolean shouldShowRequestPermissionRationale(String permissionName, + String packageName, int userId); + boolean isProtectedBroadcast(String actionName); int checkSignatures(String pkg1, String pkg2); diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 2ca030635ef5..45245e4af95d 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -2539,6 +2539,19 @@ public abstract class PackageManager { @NonNull UserHandle user); /** + * Gets whether you should show UI with rationale for requesting a permission. + * You should do this only if you do not have the permission and the context in + * which the permission is requested does not clearly communicate to the user + * what would be the benefit from grating this permission. + * + * @param permission A permission your app wants to request. + * @return Whether you can show permission rationale UI. + * + * @hide + */ + public abstract boolean shouldShowRequestPermissionRationale(String permission); + + /** * Returns an {@link android.content.Intent} suitable for passing to * {@link android.app.Activity#startActivityForResult(android.content.Intent, int)} * which prompts the user to grant permissions to this application. diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index bc4210598bc8..0dcc0b9944eb 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -33,6 +33,7 @@ import android.content.pm.UserInfo; import android.media.AudioManager; import android.media.SoundPool; import android.os.Bundle; +import android.os.DeadObjectException; import android.os.Handler; import android.os.Looper; import android.os.Message; @@ -381,14 +382,17 @@ public class KeyguardViewMediator extends SystemUI { + ",state=" + simState + ")"); } - try { - int size = mKeyguardStateCallbacks.size(); - boolean simPinSecure = mUpdateMonitor.isSimPinSecure(); - for (int i = 0; i < size; i++) { + int size = mKeyguardStateCallbacks.size(); + boolean simPinSecure = mUpdateMonitor.isSimPinSecure(); + for (int i = size - 1; i >= 0; i--) { + try { mKeyguardStateCallbacks.get(i).onSimSecureStateChanged(simPinSecure); + } catch (RemoteException e) { + Slog.w(TAG, "Failed to call onSimSecureStateChanged", e); + if (e instanceof DeadObjectException) { + mKeyguardStateCallbacks.remove(i); + } } - } catch (RemoteException e) { - Slog.w(TAG, "Failed to call onSimSecureStateChanged", e); } switch (simState) { @@ -551,6 +555,7 @@ public class KeyguardViewMediator extends SystemUI { // Assume keyguard is showing (unless it's disabled) until we know for sure... setShowingLocked(!shouldWaitForProvisioning() && !mLockPatternUtils.isLockScreenDisabled( KeyguardUpdateMonitor.getCurrentUser())); + updateInputRestrictedLocked(); mTrustManager.reportKeyguardShowingChanged(); mStatusBarKeyguardViewManager = new StatusBarKeyguardViewManager(mContext, @@ -954,13 +959,16 @@ public class KeyguardViewMediator extends SystemUI { boolean inputRestricted = isInputRestricted(); if (mInputRestricted != inputRestricted) { mInputRestricted = inputRestricted; - try { - int size = mKeyguardStateCallbacks.size(); - for (int i = 0; i < size; i++) { + int size = mKeyguardStateCallbacks.size(); + for (int i = size - 1; i >= 0; i--) { + try { mKeyguardStateCallbacks.get(i).onInputRestrictedStateChanged(inputRestricted); + } catch (RemoteException e) { + Slog.w(TAG, "Failed to call onDeviceProvisioned", e); + if (e instanceof DeadObjectException) { + mKeyguardStateCallbacks.remove(i); + } } - } catch (RemoteException e) { - Slog.w(TAG, "Failed to call onDeviceProvisioned", e); } } } @@ -1544,13 +1552,16 @@ public class KeyguardViewMediator extends SystemUI { private void setShowingLocked(boolean showing) { if (showing != mShowing) { mShowing = showing; - try { - int size = mKeyguardStateCallbacks.size(); - for (int i = 0; i < size; i++) { + int size = mKeyguardStateCallbacks.size(); + for (int i = size - 1; i >= 0; i--) { + try { mKeyguardStateCallbacks.get(i).onShowingStateChanged(showing); + } catch (RemoteException e) { + Slog.w(TAG, "Failed to call onShowingStateChanged", e); + if (e instanceof DeadObjectException) { + mKeyguardStateCallbacks.remove(i); + } } - } catch (RemoteException e) { - Slog.w(TAG, "Failed to call onShowingStateChanged", e); } updateInputRestrictedLocked(); mTrustManager.reportKeyguardShowingChanged(); @@ -1565,7 +1576,7 @@ public class KeyguardViewMediator extends SystemUI { callback.onShowingStateChanged(mShowing); callback.onInputRestrictedStateChanged(mInputRestricted); } catch (RemoteException e) { - Slog.w(TAG, "Failed to call onShowingStateChanged or onSimSecureStateChanged", e); + Slog.w(TAG, "Failed to call onShowingStateChanged or onSimSecureStateChanged or onInputRestrictedStateChanged", e); } } } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 9b619c79749d..47e39631cfca 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -3360,6 +3360,46 @@ public class PackageManagerService extends IPackageManager.Stub { } @Override + public boolean shouldShowRequestPermissionRationale(String permissionName, + String packageName, int userId) { + if (UserHandle.getCallingUserId() != userId) { + mContext.enforceCallingPermission( + android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, + "canShowRequestPermissionRationale for user " + userId); + } + + final int uid = getPackageUid(packageName, userId); + if (UserHandle.getAppId(getCallingUid()) != UserHandle.getAppId(uid)) { + return false; + } + + if (checkPermission(permissionName, packageName, userId) + == PackageManager.PERMISSION_GRANTED) { + return false; + } + + final int flags; + + final long identity = Binder.clearCallingIdentity(); + try { + flags = getPermissionFlags(permissionName, + packageName, userId); + } finally { + Binder.restoreCallingIdentity(identity); + } + + final int fixedFlags = PackageManager.FLAG_PERMISSION_SYSTEM_FIXED + | PackageManager.FLAG_PERMISSION_POLICY_FIXED + | PackageManager.FLAG_PERMISSION_USER_FIXED; + + if ((flags & fixedFlags) != 0) { + return false; + } + + return (flags & PackageManager.FLAG_PERMISSION_USER_SET) != 0; + } + + @Override public boolean isProtectedBroadcast(String actionName) { synchronized (mPackages) { return mProtectedBroadcasts.contains(actionName); diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 1d751d545cbe..76da13f78119 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -37,8 +37,6 @@ import android.os.ServiceManager; * @see Context#CARRIER_CONFIG_SERVICE */ public class CarrierConfigManager { - private final static String TAG = "CarrierConfigManager"; - /** * @hide */ @@ -225,39 +223,7 @@ public class CarrierConfigManager { */ public static final String STRING_VVM_TYPE = "string_vvm_type"; - // These variables are used by the MMS service and exposed through another API, {@link - // SmsManager}. The variable names and string values are copied from there. - public static final String BOOL_MMS_ALIAS_ENABLED = "aliasEnabled"; - public static final String BOOL_MMS_ALLOW_ATTACH_AUDIO = "allowAttachAudio"; - public static final String BOOL_MMS_APPEND_TRANSACTION_ID = "enabledTransID"; - public static final String BOOL_MMS_GROUP_MMS_ENABLED = "enableGroupMms"; - public static final String BOOL_MMS_MMS_DELIVERY_REPORT_ENABLED = "enableMMSDeliveryReports"; - public static final String BOOL_MMS_MMS_ENABLED = "enabledMMS"; - public static final String BOOL_MMS_MMS_READ_REPORT_ENABLED = "enableMMSReadReports"; - public static final String BOOL_MMS_MULTIPART_SMS_ENABLED = "enableMultipartSMS"; - public static final String BOOL_MMS_NOTIFY_WAP_MMSC_ENABLED = "enabledNotifyWapMMSC"; - public static final String BOOL_MMS_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES = "sendMultipartSmsAsSeparateMessages"; - public static final String BOOL_MMS_SHOW_CELL_BROADCAST_APP_LINKS = "config_cellBroadcastAppLinks"; - public static final String BOOL_MMS_SMS_DELIVERY_REPORT_ENABLED = "enableSMSDeliveryReports"; - public static final String BOOL_MMS_SUPPORT_HTTP_CHARSET_HEADER = "supportHttpCharsetHeader"; - public static final String BOOL_MMS_SUPPORT_MMS_CONTENT_DISPOSITION = "supportMmsContentDisposition"; - public static final String INT_MMS_ALIAS_MAX_CHARS = "aliasMaxChars"; - public static final String INT_MMS_ALIAS_MIN_CHARS = "aliasMinChars"; - public static final String INT_MMS_HTTP_SOCKET_TIMEOUT = "httpSocketTimeout"; - public static final String INT_MMS_MAX_IMAGE_HEIGHT = "maxImageHeight"; - public static final String INT_MMS_MAX_IMAGE_WIDTH = "maxImageWidth"; - public static final String INT_MMS_MAX_MESSAGE_SIZE = "maxMessageSize"; - public static final String INT_MMS_MESSAGE_TEXT_MAX_SIZE = "maxMessageTextSize"; - public static final String INT_MMS_RECIPIENT_LIMIT = "recipientLimit"; - public static final String INT_MMS_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD = "smsToMmsTextLengthThreshold"; - public static final String INT_MMS_SMS_TO_MMS_TEXT_THRESHOLD = "smsToMmsTextThreshold"; - public static final String INT_MMS_SUBJECT_MAX_LENGTH = "maxSubjectLength"; - public static final String STRING_MMS_EMAIL_GATEWAY_NUMBER = "emailGatewayNumber"; - public static final String STRING_MMS_HTTP_PARAMS = "httpParams"; - public static final String STRING_MMS_NAI_SUFFIX = "naiSuffix"; - public static final String STRING_MMS_UA_PROF_TAG_NAME = "uaProfTagName"; - public static final String STRING_MMS_UA_PROF_URL = "uaProfUrl"; - public static final String STRING_MMS_USER_AGENT = "userAgent"; + private final static String TAG = "CarrierConfigManager"; /** The default value for every variable. */ private final static PersistableBundle sDefaults; @@ -296,39 +262,6 @@ public class CarrierConfigManager { sDefaults.putInt(INT_VVM_PORT_NUMBER, 0); sDefaults.putString(STRING_VVM_DESTINATION_NUMBER, ""); sDefaults.putString(STRING_VVM_TYPE, ""); - - // MMS defaults - sDefaults.putBoolean(BOOL_MMS_ALIAS_ENABLED, false); - sDefaults.putBoolean(BOOL_MMS_ALLOW_ATTACH_AUDIO, true); - sDefaults.putBoolean(BOOL_MMS_APPEND_TRANSACTION_ID, false); - sDefaults.putBoolean(BOOL_MMS_GROUP_MMS_ENABLED, true); - sDefaults.putBoolean(BOOL_MMS_MMS_DELIVERY_REPORT_ENABLED, false); - sDefaults.putBoolean(BOOL_MMS_MMS_ENABLED, true); - sDefaults.putBoolean(BOOL_MMS_MMS_READ_REPORT_ENABLED, false); - sDefaults.putBoolean(BOOL_MMS_MULTIPART_SMS_ENABLED, true); - sDefaults.putBoolean(BOOL_MMS_NOTIFY_WAP_MMSC_ENABLED, false); - sDefaults.putBoolean(BOOL_MMS_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES, false); - sDefaults.putBoolean(BOOL_MMS_SHOW_CELL_BROADCAST_APP_LINKS, true); - sDefaults.putBoolean(BOOL_MMS_SMS_DELIVERY_REPORT_ENABLED, true); - sDefaults.putBoolean(BOOL_MMS_SUPPORT_HTTP_CHARSET_HEADER, false); - sDefaults.putBoolean(BOOL_MMS_SUPPORT_MMS_CONTENT_DISPOSITION, true); - sDefaults.putInt(INT_MMS_ALIAS_MAX_CHARS, 48); - sDefaults.putInt(INT_MMS_ALIAS_MIN_CHARS, 2); - sDefaults.putInt(INT_MMS_HTTP_SOCKET_TIMEOUT, 60 * 1000); - sDefaults.putInt(INT_MMS_MAX_IMAGE_HEIGHT, 480); - sDefaults.putInt(INT_MMS_MAX_IMAGE_WIDTH, 640); - sDefaults.putInt(INT_MMS_MAX_MESSAGE_SIZE, 300 * 1024); - sDefaults.putInt(INT_MMS_MESSAGE_TEXT_MAX_SIZE, -1); - sDefaults.putInt(INT_MMS_RECIPIENT_LIMIT, Integer.MAX_VALUE); - sDefaults.putInt(INT_MMS_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD, -1); - sDefaults.putInt(INT_MMS_SMS_TO_MMS_TEXT_THRESHOLD, -1); - sDefaults.putInt(INT_MMS_SUBJECT_MAX_LENGTH, 40); - sDefaults.putString(STRING_MMS_EMAIL_GATEWAY_NUMBER, ""); - sDefaults.putString(STRING_MMS_HTTP_PARAMS, ""); - sDefaults.putString(STRING_MMS_NAI_SUFFIX, ""); - sDefaults.putString(STRING_MMS_UA_PROF_TAG_NAME, "x-wap-profile"); - sDefaults.putString(STRING_MMS_UA_PROF_URL, ""); - sDefaults.putString(STRING_MMS_USER_AGENT, ""); } /** diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java index a41875f705e7..3fcd7d9257a7 100644 --- a/telephony/java/android/telephony/PhoneNumberUtils.java +++ b/telephony/java/android/telephony/PhoneNumberUtils.java @@ -2336,12 +2336,12 @@ public class PhoneNumberUtils * @param phoneNumber A {@code CharSequence} the entirety of which represents a phone number. * @return A {@code CharSequence} with appropriate annotations. */ - public static CharSequence getPhoneTtsSpannable(CharSequence phoneNumber) { + public static CharSequence createTtsSpannable(CharSequence phoneNumber) { if (phoneNumber == null) { return null; } Spannable spannable = Spannable.Factory.getInstance().newSpannable(phoneNumber); - PhoneNumberUtils.addPhoneTtsSpan(spannable, 0, spannable.length()); + PhoneNumberUtils.addTtsSpan(spannable, 0, spannable.length()); return spannable; } @@ -2353,8 +2353,8 @@ public class PhoneNumberUtils * @param start The starting character position of the phone number in {@code s}. * @param endExclusive The position after the ending character in the phone number {@code s}. */ - public static void addPhoneTtsSpan(Spannable s, int start, int endExclusive) { - s.setSpan(getPhoneTtsSpan(s.subSequence(start, endExclusive).toString()), + public static void addTtsSpan(Spannable s, int start, int endExclusive) { + s.setSpan(createTtsSpan(s.subSequence(start, endExclusive).toString()), start, endExclusive, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); @@ -2366,13 +2366,13 @@ public class PhoneNumberUtils * * @param phoneNumber A {@code CharSequence} the entirety of which represents a phone number. * @return A {@code CharSequence} with appropriate annotations. - * @deprecated Renamed {@link #getPhoneTtsSpannable}. + * @deprecated Renamed {@link #createTtsSpannable}. * * @hide */ @Deprecated public static CharSequence ttsSpanAsPhoneNumber(CharSequence phoneNumber) { - return getPhoneTtsSpannable(phoneNumber); + return createTtsSpannable(phoneNumber); } /** @@ -2383,13 +2383,13 @@ public class PhoneNumberUtils * @param start The starting character position of the phone number in {@code s}. * @param end The ending character position of the phone number in {@code s}. * - * @deprecated Renamed {@link #addPhoneTtsSpan}. + * @deprecated Renamed {@link #addTtsSpan}. * * @hide */ @Deprecated public static void ttsSpanAsPhoneNumber(Spannable s, int start, int end) { - addPhoneTtsSpan(s, start, end); + addTtsSpan(s, start, end); } /** @@ -2398,7 +2398,7 @@ public class PhoneNumberUtils * @param phoneNumberString A {@code String} the entirety of which represents a phone number. * @return A {@code TtsSpan} for {@param phoneNumberString}. */ - public static TtsSpan getPhoneTtsSpan(String phoneNumberString) { + public static TtsSpan createTtsSpan(String phoneNumberString) { if (phoneNumberString == null) { return null; } diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java index bf1ea4d0d4e9..3b7aa9f3fecb 100644 --- a/test-runner/src/android/test/mock/MockPackageManager.java +++ b/test-runner/src/android/test/mock/MockPackageManager.java @@ -218,6 +218,12 @@ public class MockPackageManager extends PackageManager { throw new UnsupportedOperationException(); } + /** @hide */ + @Override + public boolean shouldShowRequestPermissionRationale(String permission) { + throw new UnsupportedOperationException(); + } + @Override public int checkSignatures(String pkg1, String pkg2) { throw new UnsupportedOperationException(); |