Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $ GIT_PAGER=cat repo forall -p -c git diff android-4.2_r1..android-4.2.1_r1
- project build/
- diff --git a/core/build_id.mk b/core/build_id.mk
- index 0713d42..bebcbfa 100644
- --- a/core/build_id.mk
- +++ b/core/build_id.mk
- @@ -19,4 +19,4 @@
- # (like "CRB01"). It must be a single word, and is
- # capitalized by convention.
- -export BUILD_ID=JOP40C
- +export BUILD_ID=JOP40D
- diff --git a/core/version_defaults.mk b/core/version_defaults.mk
- index 1162b78..fb1f361 100644
- --- a/core/version_defaults.mk
- +++ b/core/version_defaults.mk
- @@ -41,7 +41,7 @@ ifeq "" "$(PLATFORM_VERSION)"
- # which is the version that we reveal to the end user.
- # Update this value when the platform version changes (rather
- # than overriding it somewhere else). Can be an arbitrary string.
- - PLATFORM_VERSION := 4.2
- + PLATFORM_VERSION := 4.2.1
- endif
- ifeq "" "$(PLATFORM_SDK_VERSION)"
- project frameworks/base/
- diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java
- index 4918e48..ac21671 100644
- --- a/core/java/android/widget/NumberPicker.java
- +++ b/core/java/android/widget/NumberPicker.java
- @@ -1284,7 +1284,12 @@ public class NumberPicker extends LinearLayout {
- /**
- * Sets the min value of the picker.
- *
- - * @param minValue The min value.
- + * @param minValue The min value inclusive.
- + *
- + * <strong>Note:</strong> The length of the displayed values array
- + * set via {@link #setDisplayedValues(String[])} must be equal to the
- + * range of selectable numbers which is equal to
- + * {@link #getMaxValue()} - {@link #getMinValue()} + 1.
- */
- public void setMinValue(int minValue) {
- if (mMinValue == minValue) {
- @@ -1317,7 +1322,12 @@ public class NumberPicker extends LinearLayout {
- /**
- * Sets the max value of the picker.
- *
- - * @param maxValue The max value.
- + * @param maxValue The max value inclusive.
- + *
- + * <strong>Note:</strong> The length of the displayed values array
- + * set via {@link #setDisplayedValues(String[])} must be equal to the
- + * range of selectable numbers which is equal to
- + * {@link #getMaxValue()} - {@link #getMinValue()} + 1.
- */
- public void setMaxValue(int maxValue) {
- if (mMaxValue == maxValue) {
- @@ -1351,6 +1361,10 @@ public class NumberPicker extends LinearLayout {
- * Sets the values to be displayed.
- *
- * @param displayedValues The displayed values.
- + *
- + * <strong>Note:</strong> The length of the displayed values array
- + * must be equal to the range of selectable numbers which is equal to
- + * {@link #getMaxValue()} - {@link #getMinValue()} + 1.
- */
- public void setDisplayedValues(String[] displayedValues) {
- if (mDisplayedValues == displayedValues) {
- @@ -1361,14 +1375,6 @@ public class NumberPicker extends LinearLayout {
- // Allow text entry rather than strictly numeric entry.
- mInputText.setRawInputType(InputType.TYPE_CLASS_TEXT
- | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
- - // Make sure the min, max, respect the size of the displayed
- - // values. This will take care of the current value as well.
- - if (getMinValue() >= displayedValues.length) {
- - setMinValue(0);
- - }
- - if (getMaxValue() >= displayedValues.length) {
- - setMaxValue(displayedValues.length - 1);
- - }
- } else {
- mInputText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
- }
- diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
- index 3b7d73a..f91df99 100755
- --- a/core/res/res/values/config.xml
- +++ b/core/res/res/values/config.xml
- @@ -1000,4 +1000,25 @@
- provisioning on some carriers, working around a bug (7305641)
- where if the preferred is used we don't try the others. -->
- <bool name="config_dontPreferApn">false</bool>
- +
- + <!-- Vibrator pattern to be used as the default for notifications
- + that specify DEFAULT_VIBRATE.
- + -->
- + <integer-array name="config_defaultNotificationVibePattern">
- + <item>0</item>
- + <item>250</item>
- + <item>250</item>
- + <item>250</item>
- + </integer-array>
- +
- + <!-- Vibrator pattern to be used as the default for notifications
- + that do not specify vibration but vibrate anyway because the device
- + is in vibrate mode.
- + -->
- + <integer-array name="config_notificationFallbackVibePattern">
- + <item>0</item>
- + <item>250</item>
- + <item>250</item>
- + <item>250</item>
- + </integer-array>
- </resources>
- diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
- index 68a0289..6858732 100644
- --- a/core/res/res/values/symbols.xml
- +++ b/core/res/res/values/symbols.xml
- @@ -1525,6 +1525,8 @@
- <java-symbol type="array" name="radioAttributes" />
- <java-symbol type="array" name="config_oemUsbModeOverride" />
- <java-symbol type="array" name="config_locationProviderPackageNames" />
- + <java-symbol type="array" name="config_defaultNotificationVibePattern" />
- + <java-symbol type="array" name="config_notificationFallbackVibePattern" />
- <java-symbol type="bool" name="config_animateScreenLights" />
- <java-symbol type="bool" name="config_automatic_brightness_available" />
- <java-symbol type="bool" name="config_sf_limitedAlpha" />
- diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java
- index f3a38f0..70d37bf 100755
- --- a/services/java/com/android/server/NotificationManagerService.java
- +++ b/services/java/com/android/server/NotificationManagerService.java
- @@ -101,6 +101,7 @@ public class NotificationManagerService extends INotificationManager.Stub
- private static final int SHORT_DELAY = 2000; // 2 seconds
- private static final long[] DEFAULT_VIBRATE_PATTERN = {0, 250, 250, 250};
- + private static final int VIBRATE_PATTERN_MAXLEN = 8 * 2 + 1; // up to eight bumps
- private static final int DEFAULT_STREAM_TYPE = AudioManager.STREAM_NOTIFICATION;
- private static final boolean SCORE_ONGOING_HIGHER = false;
- @@ -125,6 +126,9 @@ public class NotificationManagerService extends INotificationManager.Stub
- private int mDefaultNotificationLedOn;
- private int mDefaultNotificationLedOff;
- + private long[] mDefaultVibrationPattern;
- + private long[] mFallbackVibrationPattern;
- +
- private boolean mSystemReady;
- private int mDisabledNotifications;
- @@ -596,6 +600,19 @@ public class NotificationManagerService extends INotificationManager.Stub
- }
- }
- + static long[] getLongArray(Resources r, int resid, int maxlen, long[] def) {
- + int[] ar = r.getIntArray(resid);
- + if (ar == null) {
- + return def;
- + }
- + final int len = ar.length > maxlen ? maxlen : ar.length;
- + long[] out = new long[len];
- + for (int i=0; i<len; i++) {
- + out[i] = ar[i];
- + }
- + return out;
- + }
- +
- NotificationManagerService(Context context, StatusBarManagerService statusBar,
- LightsService lights)
- {
- @@ -622,6 +639,16 @@ public class NotificationManagerService extends INotificationManager.Stub
- mDefaultNotificationLedOff = resources.getInteger(
- com.android.internal.R.integer.config_defaultNotificationLedOff);
- + mDefaultVibrationPattern = getLongArray(resources,
- + com.android.internal.R.array.config_defaultNotificationVibePattern,
- + VIBRATE_PATTERN_MAXLEN,
- + DEFAULT_VIBRATE_PATTERN);
- +
- + mFallbackVibrationPattern = getLongArray(resources,
- + com.android.internal.R.array.config_notificationFallbackVibePattern,
- + VIBRATE_PATTERN_MAXLEN,
- + DEFAULT_VIBRATE_PATTERN);
- +
- // Don't start allowing notifications until the setup wizard has run once.
- // After that, including subsequent boots, init with notifications turned on.
- // This works on the first boot because the setup wizard will toggle this
- @@ -1086,24 +1113,40 @@ public class NotificationManagerService extends INotificationManager.Stub
- }
- // vibrate
- + // Does the notification want to specify its own vibration?
- + final boolean hasCustomVibrate = notification.vibrate != null;
- +
- // new in 4.2: if there was supposed to be a sound and we're in vibrate mode,
- - // we always vibrate, even if no vibration was specified
- + // and no other vibration is specified, we apply the default vibration anyway
- final boolean convertSoundToVibration =
- - notification.vibrate == null
- + !hasCustomVibrate
- && (useDefaultSound || notification.sound != null)
- && (audioManager.getRingerMode() == AudioManager.RINGER_MODE_VIBRATE);
- + // The DEFAULT_VIBRATE flag trumps any custom vibration.
- final boolean useDefaultVibrate =
- - (notification.defaults & Notification.DEFAULT_VIBRATE) != 0
- - || convertSoundToVibration;
- + (notification.defaults & Notification.DEFAULT_VIBRATE) != 0;
- - if ((useDefaultVibrate || notification.vibrate != null)
- + if ((useDefaultVibrate || convertSoundToVibration || hasCustomVibrate)
- && !(audioManager.getRingerMode() == AudioManager.RINGER_MODE_SILENT)) {
- mVibrateNotification = r;
- - mVibrator.vibrate(useDefaultVibrate ? DEFAULT_VIBRATE_PATTERN
- - : notification.vibrate,
- - ((notification.flags & Notification.FLAG_INSISTENT) != 0) ? 0: -1);
- + if (useDefaultVibrate || convertSoundToVibration) {
- + // Escalate privileges so we can use the vibrator even if the notifying app
- + // does not have the VIBRATE permission.
- + long identity = Binder.clearCallingIdentity();
- + try {
- + mVibrator.vibrate(convertSoundToVibration ? mFallbackVibrationPattern
- + : mDefaultVibrationPattern,
- + ((notification.flags & Notification.FLAG_INSISTENT) != 0) ? 0: -1);
- + } finally {
- + Binder.restoreCallingIdentity(identity);
- + }
- + } else if (notification.vibrate.length > 1) {
- + // If you want your own vibration pattern, you need the VIBRATE permission
- + mVibrator.vibrate(notification.vibrate,
- + ((notification.flags & Notification.FLAG_INSISTENT) != 0) ? 0: -1);
- + }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement