summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/provider/Settings.java13
-rw-r--r--core/jni/android_os_FileUtils.cpp50
-rw-r--r--core/res/res/values-cs/cm_strings.xml5
-rw-r--r--core/res/res/values-el/cm_strings.xml14
-rw-r--r--core/res/res/values-es/cm_strings.xml4
-rw-r--r--core/res/res/values-et-rEE/donottranslate-maps.xml28
-rw-r--r--core/res/res/values-fr/cm_strings.xml4
-rw-r--r--core/res/res/values-hu/cm_strings.xml4
-rw-r--r--core/res/res/values-it/cm_strings.xml4
-rw-r--r--core/res/res/values-nl/cm_strings.xml4
-rw-r--r--libs/hwui/DisplayListRenderer.cpp3
-rwxr-xr-xlibs/hwui/OpenGLRenderer.cpp11
-rw-r--r--libs/hwui/Snapshot.cpp13
-rw-r--r--libs/hwui/Snapshot.h15
-rw-r--r--packages/InputDevices/res/raw/keyboard_layout_hungarian.kcm2
-rw-r--r--packages/SystemUI/res/values-el/cm_strings.xml2
-rw-r--r--packages/SystemUI/res/values/ids.xml2
-rw-r--r--packages/SystemUI/src/com/android/systemui/SwipeHelper.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java78
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java18
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java109
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/IntruderAlertView.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java16
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java5
-rw-r--r--services/java/com/android/server/am/BatteryStatsService.java7
-rw-r--r--services/java/com/android/server/location/GpsLocationProvider.java4
-rw-r--r--services/jni/com_android_server_location_GpsLocationProvider.cpp8
-rw-r--r--telephony/java/com/android/internal/telephony/RILConstants.java2
31 files changed, 335 insertions, 111 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index e1c4361..7925d31 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -2777,6 +2777,19 @@ public final class Settings {
*/
public static final String STATUS_BAR_IME_SWITCHER = "status_bar_ime_switcher";
+ /**
+ * Whether to collapse the notification area after dismissing the last notification
+ * @hide
+ */
+ public static final String STATUS_BAR_COLLAPSE_ON_DISMISS = "status_bar_collapse_on_dismiss";
+
+ /** @hide */
+ public static final int STATUS_BAR_COLLAPSE_NEVER = 0;
+ /** @hide */
+ public static final int STATUS_BAR_COLLAPSE_IF_EMPTIED = 1;
+ /** @hide */
+ public static final int STATUS_BAR_COLLAPSE_IF_NO_CLEARABLE = 2;
+
/**
* Expanded desktop on/off state
* @hide
diff --git a/core/jni/android_os_FileUtils.cpp b/core/jni/android_os_FileUtils.cpp
index b624a0d..e088a68 100644
--- a/core/jni/android_os_FileUtils.cpp
+++ b/core/jni/android_os_FileUtils.cpp
@@ -69,28 +69,58 @@ jint android_os_FileUtils_getVolumeUUID(JNIEnv* env, jobject clazz, jstring path
const char *pathStr = env->GetStringUTFChars(path, NULL);
ALOGD("Trying to get UUID for %s \n", pathStr);
- uuid = blkid_get_tag_value(NULL, "UUID", pathStr);
+ char device[256];
+ char mount_path[256];
+ char rest[256];
+ FILE *fp;
+ char line[1024];
+ bool findDevice = false;
+ if (!(fp = fopen("/proc/mounts", "r"))) {
+ SLOGE("Error opening /proc/mounts (%s)", strerror(errno));
+ return false;
+ }
+
+ while(fgets(line, sizeof(line), fp)) {
+ line[strlen(line)-1] = '\0';
+ sscanf(line, "%255s %255s %255s\n", device, mount_path, rest);
+ if (!strcmp(mount_path, pathStr)) {
+ findDevice = true;
+ break;
+ }
+ }
+
+ fclose(fp);
+
+ if (findDevice) {
+ uuid = blkid_get_tag_value(NULL, "UUID", device);
+ } else {
+ uuid = blkid_get_tag_value(NULL, "UUID", pathStr);
+ }
if (uuid) {
ALOGD("UUID for %s is %s\n", pathStr, uuid);
- String8 s8uuid = (String8)uuid;
- size_t len = s8uuid.length();
- String8 result;
+ int len = strlen(uuid);
+ char result[len];
if (len > 0) {
- for (int i = 0; i > len; i++)
+ char * pCur = uuid;
+ int length = 0;
+ while (*pCur!='\0' && length < len)
{
- if (strncmp((const char *)s8uuid[i], (const char *)"-", 1) != 0) {
- result.append((const char *)s8uuid[i]);
+ if ((*pCur) != '-') {
+ result[length] = (*pCur);
}
+ pCur++;
+ length++;
}
- len = 0;
+ result[length] = '\0';
}
- len = result.length();
+ len = strlen(result);
if (len > 0) {
- return atoi(s8uuid);
+ char *pEnd = NULL;
+ return (int)strtol(result, &pEnd, 16);
} else {
ALOGE("Couldn't get UUID for %s\n", pathStr);
}
diff --git a/core/res/res/values-cs/cm_strings.xml b/core/res/res/values-cs/cm_strings.xml
index b6b6d1e..9080511 100644
--- a/core/res/res/values-cs/cm_strings.xml
+++ b/core/res/res/values-cs/cm_strings.xml
@@ -62,4 +62,9 @@
<string name="permlab_interceptSmsSent">zachytit odchozí SMS</string>
<string name="permdesc_interceptSmsSent">Umožní odchytit odchozí SMS. Škodlivé aplikace mohou pomocí odchycení SMS zabránit její odeslání příjemci.</string>
+
+ <string name="policylab_enforceSelinux">Vynucení SELinux</string>
+ <string name="policydesc_enforceSelinux">Přepnutí politiky SELinux na vynucující (enforcing ) nebo tolerantní (permissive).</string>
+ <string name="policylab_enforceMmac">Vynucení MMAC</string>
+ <string name="policydesc_enforceMmac">Přepnutí politiky MMAC na vynucující (enforcing ) nebo tolerantní (permissive).</string>
</resources>
diff --git a/core/res/res/values-el/cm_strings.xml b/core/res/res/values-el/cm_strings.xml
index d14c7ea..fbb3708 100644
--- a/core/res/res/values-el/cm_strings.xml
+++ b/core/res/res/values-el/cm_strings.xml
@@ -107,4 +107,18 @@
<string name="symbol_picker_equal">\u2260\u2248\u221e</string>
<string name="symbol_picker_lt">\u2264\u00ab\u2039</string>
<string name="symbol_picker_gt">\u2265\u00bb\u203a</string>
+ <string name="permlab_changePrivacyGuardState">ενεργοποίηση ή απενεργοποίηση του privacy guard</string>
+ <string name="permdesc_changePrivacyGuardState">Επιτρέπει σε μια εφαρμογή τον χειρισμό άλλων εφαρμογών με το Privacy Guard. Όταν μια εφαρμογή τρέχει με το Privacy Guard, δεν θα έχει πρόσβαση στα προσωπικά σας δεδομένα όπως επαφές, μηνύματα ή το αρχείο κλήσεων.</string>
+ <string name="privacy_guard_notification">Privacy Guard ενεργό</string>
+ <string name="privacy_guard_notification_detail"><xliff:g id="app">%1$s</xliff:g> δεν θα μπορεί να έχει πρόσβαση στα προσωπικά σας δεδομένα</string>
+ <string name="profile_picker_title">Προφίλ</string>
+ <string name="profile_none">Κανένα</string>
+ <string name="permlab_cancelNotifications">ακύρωση ειδοποιήσεων εφαρμογών</string>
+ <string name="permdesc_cancelNotifications">Επιτρέπει σε μια εφαρμογή την ακύρωση ειδοποιήσεων που προέρχονται από άλλες εφαρμογές.</string>
+ <string name="permlab_interceptSmsSent">παρεμπόδιση εξερχόμενων SMS</string>
+ <string name="permdesc_interceptSmsSent">Επιτρέπει σε μια εφαρμογή να παρεμποδίσει τα εξερχόμενα SMS. Κακόβουλες εφαρμογές μπορεί να το χρησιμοποιήσουν για να εμποδίσουν τη αποστολή SMS.</string>
+ <string name="policylab_enforceSelinux">Εξαναγκασμός SELinux</string>
+ <string name="policydesc_enforceSelinux">Εναλλαγή πολιτικής SELinux σε εξαναγκασμένη ή επιτρεπόμενη.</string>
+ <string name="policylab_enforceMmac">Εξαναγκασμός MMAC</string>
+ <string name="policydesc_enforceMmac">Εναλλαγή πολιτικής MMAC σε εξαναγκασμένη ή επιτρεπόμενη.</string>
</resources>
diff --git a/core/res/res/values-es/cm_strings.xml b/core/res/res/values-es/cm_strings.xml
index ae74d8c..351925a 100644
--- a/core/res/res/values-es/cm_strings.xml
+++ b/core/res/res/values-es/cm_strings.xml
@@ -64,4 +64,8 @@
<string name="permdesc_cancelNotifications">Permite que la aplicación cancele las notificaciones creadas por otras.</string>
<string name="permlab_interceptSmsSent">interceptar mensajes SMS salientes</string>
<string name="permdesc_interceptSmsSent">Permite que la aplicación intercepte mensajes SMS salientes. Las aplicaciones maliciosas pueden impedir los mensajes SMS salientes.</string>
+ <string name="policylab_enforceSelinux">Forzar SELinux</string>
+ <string name="policydesc_enforceSelinux">Alternar entre el modo permisivo o restrictivo de SELinux.</string>
+ <string name="policylab_enforceMmac">Forzar MMAC</string>
+ <string name="policydesc_enforceMmac">Alternar entre el modo permisivo o restrictivo de MMAC.</string>
</resources>
diff --git a/core/res/res/values-et-rEE/donottranslate-maps.xml b/core/res/res/values-et-rEE/donottranslate-maps.xml
new file mode 100644
index 0000000..f1fea17
--- /dev/null
+++ b/core/res/res/values-et-rEE/donottranslate-maps.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The CyanogenMod 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.
+-->
+<resources>
+
+ <!-- Do not translate. -->
+ <integer-array name="maps_starting_lat_lng">
+ <item>5884131</item>
+ <item>2570560</item>
+ </integer-array>
+ <!-- Do not translate. -->
+ <integer-array name="maps_starting_zoom">
+ <item>4</item>
+ </integer-array>
+
+</resources>
diff --git a/core/res/res/values-fr/cm_strings.xml b/core/res/res/values-fr/cm_strings.xml
index 1f93895..0cdf31c 100644
--- a/core/res/res/values-fr/cm_strings.xml
+++ b/core/res/res/values-fr/cm_strings.xml
@@ -64,4 +64,8 @@
<string name="permdesc_cancelNotifications">Permet à l\'application de révoquer les notifications créées par d\'autres applications.</string>
<string name="permlab_interceptSmsSent">intercepte les SMS sortants</string>
<string name="permdesc_interceptSmsSent">Permet à l\'application d\'intercepter un SMS sortant. Des applications malveillantes peuvent utiliser cette option pour empêcher les SMS d\'être envoyés.</string>
+ <string name="policylab_enforceSelinux">Appliquer SELinux</string>
+ <string name="policydesc_enforceSelinux">Bascule entre l\'imposition des régles SELinux et le mode permissif.</string>
+ <string name="policylab_enforceMmac">Appliquer MMAC</string>
+ <string name="policydesc_enforceMmac">Bascule entre l\'imposition des régles MMAC et le mode permissif.</string>
</resources>
diff --git a/core/res/res/values-hu/cm_strings.xml b/core/res/res/values-hu/cm_strings.xml
index b39efd8..abfcd4b 100644
--- a/core/res/res/values-hu/cm_strings.xml
+++ b/core/res/res/values-hu/cm_strings.xml
@@ -64,4 +64,8 @@
<string name="permdesc_cancelNotifications">Lehetővé teszi, hogy más alkalmazások számára törölje az értesítéseket</string>
<string name="permlab_interceptSmsSent">kimenő SMS üzenetek elfogása</string>
<string name="permdesc_interceptSmsSent">Lehetővé teszi az alkalmazás számára, hogy elfogja a kimenő SMS üzeneteket. A rosszindulatú alkalmazások ezt felhasználhatják az SMS-küldés blokkolására.</string>
+ <string name="policylab_enforceSelinux">SELinux</string>
+ <string name="policydesc_enforceSelinux">Váltás a biztonságos és az engedélyező SELinux mód közt.</string>
+ <string name="policylab_enforceMmac">MMAC</string>
+ <string name="policydesc_enforceMmac">Váltás a biztonságos és az engedélyező MMAC mód közt.</string>
</resources>
diff --git a/core/res/res/values-it/cm_strings.xml b/core/res/res/values-it/cm_strings.xml
index a771c0f..5e35fe0 100644
--- a/core/res/res/values-it/cm_strings.xml
+++ b/core/res/res/values-it/cm_strings.xml
@@ -64,4 +64,8 @@
<string name="permdesc_cancelNotifications">Consente all\'applicazione di cancellare le notifiche create da altre applicazioni.</string>
<string name="permlab_interceptSmsSent">intercetta SMS in uscita</string>
<string name="permdesc_interceptSmsSent">Consente all\'applicazione di intercettare un SMS in uscita. Le applicazioni maligne potrebbero usarlo per impedire la spedizione di SMS.</string>
+ <string name="policylab_enforceSelinux">Forza SELinux</string>
+ <string name="policydesc_enforceSelinux">Alterna tra regole restrittive o permissive di SELinux.</string>
+ <string name="policylab_enforceMmac">Forza MMAC</string>
+ <string name="policydesc_enforceMmac">Alterna tra regole restrittive o permissive di MMAC.</string>
</resources>
diff --git a/core/res/res/values-nl/cm_strings.xml b/core/res/res/values-nl/cm_strings.xml
index 90994ca..97d74e5 100644
--- a/core/res/res/values-nl/cm_strings.xml
+++ b/core/res/res/values-nl/cm_strings.xml
@@ -64,4 +64,8 @@
<string name="permdesc_cancelNotifications">Hiermee kan de app meldingen gecreeërd door andere apps sluiten.</string>
<string name="permlab_interceptSmsSent">uitgaand sms-bericht onderscheppen</string>
<string name="permdesc_interceptSmsSent">Hiermee kan de app een uitgaand sms-bericht onderscheppen. Schadelijke apps kunnen dit gebruiken om uitgaande sms-berichten te blokkeren.</string>
+ <string name="policylab_enforceSelinux">SELinux afdwingen</string>
+ <string name="policydesc_enforceSelinux">Wisselen tussen SELinux-beleid afdwingen of tolerante stand.</string>
+ <string name="policylab_enforceMmac">MMAC afdwingen</string>
+ <string name="policydesc_enforceMmac">Wisselen tussen MMAC-beleid afdwingen of tolerante stand.</string>
</resources>
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp
index 7a38b40..8d2a84e 100644
--- a/libs/hwui/DisplayListRenderer.cpp
+++ b/libs/hwui/DisplayListRenderer.cpp
@@ -1442,6 +1442,9 @@ status_t DisplayListRenderer::prepareDirty(float left, float top,
mSaveCount = 1;
mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight);
+#ifdef QCOM_HARDWARE
+ mSnapshot->setTileClip(0.0f, 0.0f, mWidth, mHeight);
+#endif
mDirtyClip = opaque;
mRestoreSaveCount = -1;
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 7309e46..efae551 100755
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -179,6 +179,9 @@ status_t OpenGLRenderer::prepareDirty(float left, float top, float right, float
mSaveCount = 1;
mSnapshot->setClip(left, top, right, bottom);
+#ifdef QCOM_HARDWARE
+ mSnapshot->setTileClip(left, top, right, bottom);
+#endif
mDirtyClip = true;
updateLayers();
@@ -246,11 +249,14 @@ void OpenGLRenderer::syncState() {
void OpenGLRenderer::startTiling(const sp<Snapshot>& s, bool opaque) {
if (!mSuppressTiling) {
+#ifdef QCOM_HARDWARE
+ const Rect* clip = &mSnapshot->getTileClip();
+#else
Rect* clip = mTilingSnapshot->clipRect;
if (s->flags & Snapshot::kFlagIsFboLayer) {
clip = s->clipRect;
}
-
+#endif
mCaches.startTiling(clip->left, s->height - clip->bottom,
clip->right - clip->left, clip->bottom - clip->top, opaque);
}
@@ -800,6 +806,9 @@ bool OpenGLRenderer::createFboLayer(Layer* layer, Rect& bounds, Rect& clip, GLui
mSnapshot->fbo = layer->getFbo();
mSnapshot->resetTransform(-bounds.left, -bounds.top, 0.0f);
mSnapshot->resetClip(clip.left, clip.top, clip.right, clip.bottom);
+#ifdef QCOM_HARDWARE
+ mSnapshot->setTileClip(clip.left, clip.top, clip.right, clip.bottom);
+#endif
mSnapshot->viewport.set(0.0f, 0.0f, bounds.getWidth(), bounds.getHeight());
mSnapshot->height = bounds.getHeight();
mSnapshot->flags |= Snapshot::kFlagDirtyOrtho;
diff --git a/libs/hwui/Snapshot.cpp b/libs/hwui/Snapshot.cpp
index fbc8455..e2675a8 100644
--- a/libs/hwui/Snapshot.cpp
+++ b/libs/hwui/Snapshot.cpp
@@ -74,6 +74,9 @@ Snapshot::Snapshot(const sp<Snapshot>& s, int saveFlags):
} else {
region = NULL;
}
+#ifdef QCOM_HARDWARE
+ mTileClip.set(s->getTileClip());
+#endif
}
///////////////////////////////////////////////////////////////////////////////
@@ -192,6 +195,16 @@ const Rect& Snapshot::getLocalClip() {
return mLocalClip;
}
+#ifdef QCOM_HARDWARE
+void Snapshot::setTileClip(float left, float top, float right, float bottom) {
+ mTileClip.set(left, top, right, bottom);
+}
+
+const Rect& Snapshot::getTileClip() {
+ return mTileClip;
+}
+#endif
+
void Snapshot::resetClip(float left, float top, float right, float bottom) {
clipRect = &mClipRectRoot;
setClip(left, top, right, bottom);
diff --git a/libs/hwui/Snapshot.h b/libs/hwui/Snapshot.h
index 9c612ff..18d405b 100644
--- a/libs/hwui/Snapshot.h
+++ b/libs/hwui/Snapshot.h
@@ -104,6 +104,18 @@ public:
*/
const Rect& getLocalClip();
+#ifdef QCOM_HARDWARE
+ /**
+ * Sets the current tile clip.
+ */
+ void setTileClip(float left, float top, float right, float bottom);
+
+ /**
+ * Returns the current tile clip in local coordinates.
+ */
+ const Rect& getTileClip();
+#endif
+
/**
* Resets the clip to the specified rect.
*/
@@ -233,6 +245,9 @@ private:
mat4 mTransformRoot;
Rect mClipRectRoot;
Rect mLocalClip;
+#ifdef QCOM_HARDWARE
+ Rect mTileClip;
+#endif
#if STENCIL_BUFFER_SIZE
SkRegion mClipRegionRoot;
diff --git a/packages/InputDevices/res/raw/keyboard_layout_hungarian.kcm b/packages/InputDevices/res/raw/keyboard_layout_hungarian.kcm
index dafb50b..67127d0 100644
--- a/packages/InputDevices/res/raw/keyboard_layout_hungarian.kcm
+++ b/packages/InputDevices/res/raw/keyboard_layout_hungarian.kcm
@@ -37,7 +37,7 @@ key 0 {
key 1 {
label: '1'
base: '1'
- shift: '!'
+ shift: '\''
ralt: '\u0303'
}
diff --git a/packages/SystemUI/res/values-el/cm_strings.xml b/packages/SystemUI/res/values-el/cm_strings.xml
index 33b4393..8498343 100644
--- a/packages/SystemUI/res/values-el/cm_strings.xml
+++ b/packages/SystemUI/res/values-el/cm_strings.xml
@@ -52,8 +52,10 @@
<string name="quick_settings_lte">LTE</string>
<string name="quick_settings_lte_off">LTE ανενεργό</string>
<string name="quick_settings_volume">Ένταση</string>
+ <string name="quick_settings_camera_label">Φωτογρ. μηχανή</string>
<string name="quick_settings_expanded_desktop">Επεκταμένη</string>
<string name="quick_settings_expanded_desktop_off">Κανονική</string>
+ <string name="quick_settings_camera_error_connect">Δεν είναι δυνατή η σύνδεση με την φωτογραφ. μηχανή</string>
<string name="navbar_dialog_title">Επιλέξτε λειτουργία για εκχώρηση</string>
<string name="navbar_home_button">Πλήκτρο Home</string>
<string name="navbar_recent_button">Πλήκτρο Recent</string>
diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml
index f7bc614..bd24f0f 100644
--- a/packages/SystemUI/res/values/ids.xml
+++ b/packages/SystemUI/res/values/ids.xml
@@ -19,6 +19,6 @@
<item type="id" name="expandable_tag" />
<item type="id" name="user_expanded_tag" />
<item type="id" name="user_lock_tag" />
- <item type="id" name="user_cleared_tag" />
+ <item type="id" name="user_dismissed_tag" />
<item type="id" name="status_bar_cling_stub" />
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
index 7be5949..ceb8654 100644
--- a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
@@ -257,10 +257,6 @@ public class SwipeHelper implements Gefingerpoken {
* @param velocity The desired pixels/second speed at which the view should move
*/
public void dismissChild(final View view, float velocity) {
- dismissChild(view, velocity, false);
- }
-
- private void dismissChild(final View view, float velocity, final boolean fromUser) {
final View animView = mCallback.getChildContentView(view);
final boolean canAnimViewBeDismissed = mCallback.canChildBeDismissed(view);
float newPos;
@@ -288,7 +284,7 @@ public class SwipeHelper implements Gefingerpoken {
anim.setDuration(duration);
anim.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
- mCallback.onChildDismissed(view, fromUser);
+ mCallback.onChildDismissed(view);
animView.setLayerType(View.LAYER_TYPE_NONE, null);
}
});
@@ -378,7 +374,7 @@ public class SwipeHelper implements Gefingerpoken {
if (dismissChild) {
// flingadingy
- dismissChild(mCurrView, childSwipedFastEnough ? velocity : 0f, true);
+ dismissChild(mCurrView, childSwipedFastEnough ? velocity : 0f);
} else {
// snappity
mCallback.onDragCancelled(mCurrView);
@@ -399,7 +395,7 @@ public class SwipeHelper implements Gefingerpoken {
void onBeginDrag(View v);
- void onChildDismissed(View v, boolean fromUser);
+ void onChildDismissed(View v);
void onDragCancelled(View v);
}
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java
index b59acad..989ada0 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java
@@ -212,7 +212,7 @@ public class RecentsHorizontalScrollView extends HorizontalScrollView
mSwipeHelper.dismissChild(v, 0);
}
- public void onChildDismissed(View v, boolean fromUser) {
+ public void onChildDismissed(View v) {
addToRecycledViews(v);
mLinearLayout.removeView(v);
mCallback.handleSwipe(v);
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java
index d6f417d..0f48751 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java
@@ -220,7 +220,7 @@ public class RecentsVerticalScrollView extends ScrollView
mSwipeHelper.dismissChild(v, 0);
}
- public void onChildDismissed(View v, boolean fromUser) {
+ public void onChildDismissed(View v) {
addToRecycledViews(v);
mLinearLayout.removeView(v);
mCallback.handleSwipe(v);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 9f57e72..b56aa12 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -108,6 +108,10 @@ public abstract class BaseStatusBar extends SystemUI implements
public static final int EXPANDED_LEAVE_ALONE = -10000;
public static final int EXPANDED_FULL_OPEN = -10001;
+ private static final boolean CLOSE_PANEL_WHEN_EMPTIED = true;
+ private static final int COLLAPSE_AFTER_DISMISS_DELAY = 200;
+ private static final int COLLAPSE_AFTER_REMOVE_DELAY = 400;
+
protected CommandQueue mCommandQueue;
protected IStatusBarService mBarService;
protected H mHandler = createHandler();
@@ -130,6 +134,13 @@ public abstract class BaseStatusBar extends SystemUI implements
protected FrameLayout mStatusBarContainer;
+ private Runnable mPanelCollapseRunnable = new Runnable() {
+ @Override
+ public void run() {
+ animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);
+ }
+ };
+
/**
* An interface for navigation key bars to allow status bars to signal which keys are
* currently of interest to the user.<br>
@@ -172,6 +183,7 @@ public abstract class BaseStatusBar extends SystemUI implements
protected Display mDisplay;
private boolean mDeviceProvisioned = false;
+ private int mAutoCollapseBehaviour;
public IStatusBarService getStatusBarService() {
return mBarService;
@@ -181,7 +193,7 @@ public abstract class BaseStatusBar extends SystemUI implements
return mDeviceProvisioned;
}
- private ContentObserver mProvisioningObserver = new ContentObserver(new Handler()) {
+ private ContentObserver mProvisioningObserver = new ContentObserver(mHandler) {
@Override
public void onChange(boolean selfChange) {
final boolean provisioned = 0 != Settings.Global.getInt(
@@ -193,6 +205,33 @@ public abstract class BaseStatusBar extends SystemUI implements
}
};
+ private class SettingsObserver extends ContentObserver {
+ public SettingsObserver(Handler handler) {
+ super(handler);
+ }
+
+ public void observe() {
+ ContentResolver resolver = mContext.getContentResolver();
+ resolver.registerContentObserver(Settings.System.getUriFor(
+ Settings.System.STATUS_BAR_COLLAPSE_ON_DISMISS), false, this);
+ update();
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ update();
+ }
+
+ private void update() {
+ ContentResolver resolver = mContext.getContentResolver();
+ mAutoCollapseBehaviour = Settings.System.getIntForUser(resolver,
+ Settings.System.STATUS_BAR_COLLAPSE_ON_DISMISS,
+ Settings.System.STATUS_BAR_COLLAPSE_IF_NO_CLEARABLE, UserHandle.USER_CURRENT);
+ }
+ };
+
+ private SettingsObserver mSettingsObserver = new SettingsObserver(mHandler);
+
private RemoteViews.OnClickHandler mOnClickHandler = new RemoteViews.OnClickHandler() {
@Override
public boolean onClickHandler(View view, PendingIntent pendingIntent, Intent fillInIntent) {
@@ -235,6 +274,8 @@ public abstract class BaseStatusBar extends SystemUI implements
Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONED), true,
mProvisioningObserver);
+ mSettingsObserver.observe();
+
mBarService = IStatusBarService.Stub.asInterface(
ServiceManager.getService(Context.STATUS_BAR_SERVICE));
@@ -939,18 +980,33 @@ public abstract class BaseStatusBar extends SystemUI implements
if (rowParent != null) rowParent.removeView(entry.row);
updateExpansionStates();
updateNotificationIcons();
+ maybeCollapseAfterNotificationRemoval(entry.userDismissed());
- if (entry.userCleared() && !mNotificationData.hasClearableItems()) {
- // wait a bit to make the user aware of what's happening
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);
- }
- }, 225);
+ return entry.notification;
+ }
+
+ protected void maybeCollapseAfterNotificationRemoval(boolean userDismissed) {
+ if (mAutoCollapseBehaviour == Settings.System.STATUS_BAR_COLLAPSE_NEVER) {
+ return;
+ }
+ if (!isNotificationPanelFullyVisible()) {
+ return;
}
- return entry.notification;
+ boolean collapseDueToEmpty =
+ mAutoCollapseBehaviour == Settings.System.STATUS_BAR_COLLAPSE_IF_EMPTIED
+ && mNotificationData.size() == 0;
+ boolean collapseDueToNoClearable =
+ mAutoCollapseBehaviour == Settings.System.STATUS_BAR_COLLAPSE_IF_NO_CLEARABLE
+ && !mNotificationData.hasClearableItems();
+
+ if (userDismissed && (collapseDueToEmpty || collapseDueToNoClearable)) {
+ mHandler.removeCallbacks(mPanelCollapseRunnable);
+ mHandler.postDelayed(mPanelCollapseRunnable, COLLAPSE_AFTER_DISMISS_DELAY);
+ } else if (mNotificationData.size() == 0) {
+ mHandler.removeCallbacks(mPanelCollapseRunnable);
+ mHandler.postDelayed(mPanelCollapseRunnable, COLLAPSE_AFTER_REMOVE_DELAY);
+ }
}
protected StatusBarIconView addNotificationViews(IBinder key,
@@ -989,6 +1045,7 @@ public abstract class BaseStatusBar extends SystemUI implements
}
updateExpansionStates();
updateNotificationIcons();
+ mHandler.removeCallbacks(mPanelCollapseRunnable);
return iconView;
}
@@ -1036,6 +1093,7 @@ public abstract class BaseStatusBar extends SystemUI implements
protected abstract void tick(IBinder key, StatusBarNotification n, boolean firstTime);
protected abstract void updateExpandedViewPos(int expandedPosition);
protected abstract int getExpandedViewMaxHeight();
+ protected abstract boolean isNotificationPanelFullyVisible();
protected abstract boolean shouldDisableNavbarGestures();
protected boolean isTopNotification(ViewGroup parent, NotificationData.Entry entry) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java
index 7222c08..a457167 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java
@@ -66,10 +66,10 @@ public class NotificationData {
return NotificationData.getUserExpanded(row);
}
/**
- * Return whether the entry has been manually cleared by the user.
+ * Return whether the entry has been manually dismissed by the user.
*/
- public boolean userCleared() {
- return NotificationData.getUserCleared(row);
+ public boolean userDismissed() {
+ return NotificationData.getUserDismissed(row);
}
/**
* Set the flag indicating that this was manually expanded by the user.
@@ -235,16 +235,16 @@ public class NotificationData {
}
/**
- * Return whether the entry was cleared by the user.
+ * Return whether the entry was dismissed by the user.
*/
- public static boolean getUserCleared(View row) {
- return readBooleanTag(row, R.id.user_cleared_tag);
+ public static boolean getUserDismissed(View row) {
+ return readBooleanTag(row, R.id.user_dismissed_tag);
}
/**
- * Set whether the entry is being touched by the user.
+ * Set whether the entry was dismissed by the user.
*/
- public static boolean setUserCleared(View row) {
- return writeBooleanTag(row, R.id.user_cleared_tag, true);
+ public static boolean setUserDismissed(View row) {
+ return writeBooleanTag(row, R.id.user_dismissed_tag, true);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 82b6538..ad588af 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -290,7 +290,6 @@ public class PhoneStatusBar extends BaseStatusBar {
float mFlingVelocity;
int mFlingY;
int[] mAbsPos = new int[2];
- Runnable mPostCollapseCleanup = null;
private Animator mLightsOutAnimation;
private Animator mLightsOnAnimation;
@@ -340,6 +339,19 @@ public class PhoneStatusBar extends BaseStatusBar {
}
};
+ private final Runnable mNotifyClearAll = new Runnable() {
+ @Override
+ public void run() {
+ if (DEBUG) {
+ Slog.v(TAG, "Notifying status bar of notification clear");
+ }
+ try {
+ mPile.setViewRemoval(true);
+ mBarService.onClearAllNotifications();
+ } catch (RemoteException ex) { }
+ }
+ };
+
class SettingsObserver extends ContentObserver {
SettingsObserver(Handler handler) {
super(handler);
@@ -1878,11 +1890,6 @@ public class PhoneStatusBar extends BaseStatusBar {
// Close any "App info" popups that might have snuck on-screen
dismissPopups();
-
- if (mPostCollapseCleanup != null) {
- mPostCollapseCleanup.run();
- mPostCollapseCleanup = null;
- }
}
/**
@@ -2487,6 +2494,11 @@ public class PhoneStatusBar extends BaseStatusBar {
}
@Override
+ protected boolean isNotificationPanelFullyVisible() {
+ return mExpandedVisible && !mAnimating && !isShowingSettings();
+ }
+
+ @Override
public void updateExpandedViewPos(int thingy) {
if (DEBUG) Slog.v(TAG, "updateExpandedViewPos");
@@ -2522,7 +2534,7 @@ public class PhoneStatusBar extends BaseStatusBar {
@Override
public void onClick(View v) {
synchronized (mNotificationData) {
- // animate-swipe all dismissable notifications, then animate the shade closed
+ // animate-swipe all dismissable notifications
int numChildren = mPile.getChildCount();
int scrollTop = mScrollView.getScrollY();
@@ -2535,63 +2547,40 @@ public class PhoneStatusBar extends BaseStatusBar {
snapshot.add(child);
}
}
+
if (snapshot.isEmpty()) {
- animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);
+ maybeCollapseAfterNotificationRemoval(true);
return;
}
- new Thread(new Runnable() {
- @Override
- public void run() {
- // Decrease the delay for every row we animate to give the sense of
- // accelerating the swipes
- final int ROW_DELAY_DECREMENT = 10;
- int currentDelay = 140;
- int totalDelay = 0;
-
- // Set the shade-animating state to avoid doing other work during
- // all of these animations. In particular, avoid layout and
- // redrawing when collapsing the shade.
- mPile.setViewRemoval(false);
-
- mPostCollapseCleanup = new Runnable() {
- @Override
- public void run() {
- if (DEBUG) {
- Slog.v(TAG, "running post-collapse cleanup");
- }
- try {
- mPile.setViewRemoval(true);
- mBarService.onClearAllNotifications();
- } catch (Exception ex) { }
- }
- };
-
- View sampleView = snapshot.get(0);
- int width = sampleView.getWidth();
- final int velocity = width * 8; // 1000/8 = 125 ms duration
- for (final View _v : snapshot) {
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- mPile.dismissRowAnimated(_v, velocity);
- }
- }, totalDelay);
- currentDelay = Math.max(50, currentDelay - ROW_DELAY_DECREMENT);
- totalDelay += currentDelay;
+
+ // Decrease the delay for every row we animate to give the sense of
+ // accelerating the swipes
+ final int ROW_DELAY_DECREMENT = 10;
+ int currentDelay = 140;
+ int totalDelay = 0;
+
+ // Set the shade-animating state to avoid doing other work, in
+ // particular layout and redrawing, during all of these animations.
+ mPile.setViewRemoval(false);
+
+ View sampleView = snapshot.get(0);
+ int width = sampleView.getWidth();
+ final int velocity = width * 8; // 1000/8 = 125 ms duration
+ for (final View _v : snapshot) {
+ mHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ mPile.dismissRowAnimated(_v, velocity);
}
- // Delay the collapse animation until after all swipe animations have
- // finished. Provide some buffer because there may be some extra delay
- // before actually starting each swipe animation. Ideally, we'd
- // synchronize the end of those animations with the start of the collaps
- // exactly.
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);
- }
- }, totalDelay + 225);
- }
- }).start();
+ }, totalDelay);
+ currentDelay = Math.max(50, currentDelay - ROW_DELAY_DECREMENT);
+ totalDelay += currentDelay;
+ }
+
+ // After ending all animations, tell the service to remove the
+ // notifications, which will trigger collapsing the shade
+ final View lastEntry = snapshot.get(snapshot.size() - 1);
+ mPile.runOnDismiss(lastEntry, mNotifyClearAll);
}
}
};
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/IntruderAlertView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/IntruderAlertView.java
index 9cbd853..4adc6c0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/IntruderAlertView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/IntruderAlertView.java
@@ -101,7 +101,7 @@ public class IntruderAlertView extends LinearLayout implements SwipeHelper.Callb
return true;
}
- public void onChildDismissed(View v, boolean fromUser) {
+ public void onChildDismissed(View v) {
Slog.v(TAG, "User swiped intruder to dismiss");
mBar.dismissIntruder();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
index 9e9dec2..2aa0f5e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
@@ -61,7 +61,8 @@ public class NotificationRowLayout
HashMap<View, ValueAnimator> mDisappearingViews = new HashMap<View, ValueAnimator>();
private SwipeHelper mSwipeHelper;
-
+ private HashMap<View, Runnable> mDismissRunnables = new HashMap<View, Runnable>();
+
private OnSizeChangedListener mOnSizeChangedListener;
// Flag set during notification removal animation to avoid causing too much work until
@@ -111,6 +112,10 @@ public class NotificationRowLayout
mOnSizeChangedListener = l;
}
+ public void runOnDismiss(View child, Runnable runnable) {
+ mDismissRunnables.put(child, runnable);
+ }
+
@Override
public void onWindowFocusChanged(boolean hasWindowFocus) {
super.onWindowFocusChanged(hasWindowFocus);
@@ -166,14 +171,17 @@ public class NotificationRowLayout
return NotificationData.setUserLocked(v, userLocked);
}
- public void onChildDismissed(View v, boolean fromUser) {
+ public void onChildDismissed(View v) {
if (DEBUG) Slog.v(TAG, "onChildDismissed: " + v + " mRemoveViews=" + mRemoveViews);
final View veto = v.findViewById(R.id.veto);
if (veto != null && veto.getVisibility() != View.GONE && mRemoveViews) {
veto.performClick();
}
- if (fromUser) {
- NotificationData.setUserCleared(v);
+ NotificationData.setUserDismissed(v);
+
+ Runnable dismissRunnable = mDismissRunnables.remove(v);
+ if (dismissRunnable != null) {
+ dismissRunnable.run();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
index d40bff6..2c9da8f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -383,6 +383,11 @@ public class TabletStatusBar extends BaseStatusBar implements
return getNotificationPanelHeight();
}
+ @Override
+ protected boolean isNotificationPanelFullyVisible() {
+ return mNotificationPanel.getVisibility() == View.VISIBLE;
+ }
+
private int getNotificationPanelHeight() {
final Resources res = mContext.getResources();
final Display d = mWindowManager.getDefaultDisplay();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
index d43e4a4..509e97c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
@@ -137,6 +137,11 @@ public class TvStatusBar extends BaseStatusBar {
}
@Override
+ protected boolean isNotificationPanelFullyVisible() {
+ return false;
+ }
+
+ @Override
protected boolean shouldDisableNavbarGestures() {
return true;
}
diff --git a/services/java/com/android/server/am/BatteryStatsService.java b/services/java/com/android/server/am/BatteryStatsService.java
index ab20208..99cb2c8 100644
--- a/services/java/com/android/server/am/BatteryStatsService.java
+++ b/services/java/com/android/server/am/BatteryStatsService.java
@@ -330,6 +330,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub {
synchronized (mStats) {
mBluetoothPendingStats = false;
mStats.noteBluetoothOffLocked();
+ mStats.setBtHeadset(null);
+ }
+
+ BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+ if (adapter != null && mBluetoothHeadset != null) {
+ adapter.closeProfileProxy(BluetoothProfile.HEADSET, mBluetoothHeadset);
+ mBluetoothHeadset = null;
}
}
diff --git a/services/java/com/android/server/location/GpsLocationProvider.java b/services/java/com/android/server/location/GpsLocationProvider.java
index 22c52f4..cba2db2 100644
--- a/services/java/com/android/server/location/GpsLocationProvider.java
+++ b/services/java/com/android/server/location/GpsLocationProvider.java
@@ -1471,7 +1471,7 @@ public class GpsLocationProvider implements LocationProviderInterface {
type = AGPS_REF_LOCATION_TYPE_GSM_CELLID;
}
native_agps_set_ref_location_cellid(type, mcc, mnc,
- gsm_cell.getLac(), gsm_cell.getCid());
+ gsm_cell.getLac(), gsm_cell.getPsc(), gsm_cell.getCid());
} else {
Log.e(TAG,"Error getting cell location info.");
}
@@ -1642,7 +1642,7 @@ public class GpsLocationProvider implements LocationProviderInterface {
// AGPS ril suport
private native void native_agps_set_ref_location_cellid(int type, int mcc, int mnc,
- int lac, int cid);
+ int lac, int psc, int cid);
private native void native_agps_set_id(int type, String setid);
private native void native_update_network_state(boolean connected, int type,
diff --git a/services/jni/com_android_server_location_GpsLocationProvider.cpp b/services/jni/com_android_server_location_GpsLocationProvider.cpp
index f2ec1b3..4285ddf 100644
--- a/services/jni/com_android_server_location_GpsLocationProvider.cpp
+++ b/services/jni/com_android_server_location_GpsLocationProvider.cpp
@@ -375,7 +375,7 @@ static jint android_location_GpsLocationProvider_read_sv_status(JNIEnv* env, job
}
static void android_location_GpsLocationProvider_agps_set_reference_location_cellid(JNIEnv* env,
- jobject obj, jint type, jint mcc, jint mnc, jint lac, jint cid)
+ jobject obj, jint type, jint mcc, jint mnc, jint lac, jint psc, jint cid)
{
AGpsRefLocation location;
@@ -388,9 +388,13 @@ static void android_location_GpsLocationProvider_agps_set_reference_location_cel
case AGPS_REF_LOCATION_TYPE_GSM_CELLID:
case AGPS_REF_LOCATION_TYPE_UMTS_CELLID:
location.type = type;
+ location.u.cellID.type = type;
location.u.cellID.mcc = mcc;
location.u.cellID.mnc = mnc;
location.u.cellID.lac = lac;
+#ifdef AGPS_USE_PSC
+ location.u.cellID.psc = psc;
+#endif
location.u.cellID.cid = cid;
break;
default:
@@ -601,7 +605,7 @@ static JNINativeMethod sMethods[] = {
{"native_agps_data_conn_closed", "()V", (void*)android_location_GpsLocationProvider_agps_data_conn_closed},
{"native_agps_data_conn_failed", "()V", (void*)android_location_GpsLocationProvider_agps_data_conn_failed},
{"native_agps_set_id","(ILjava/lang/String;)V",(void*)android_location_GpsLocationProvider_agps_set_id},
- {"native_agps_set_ref_location_cellid","(IIIII)V",(void*)android_location_GpsLocationProvider_agps_set_reference_location_cellid},
+ {"native_agps_set_ref_location_cellid","(IIIIII)V",(void*)android_location_GpsLocationProvider_agps_set_reference_location_cellid},
{"native_set_agps_server", "(ILjava/lang/String;I)V", (void*)android_location_GpsLocationProvider_set_agps_server},
{"native_send_ni_response", "(II)V", (void*)android_location_GpsLocationProvider_send_ni_response},
{"native_agps_ni_message", "([BI)V", (void *)android_location_GpsLocationProvider_agps_send_ni_message},
diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java
index d93da8f..feac45b 100644
--- a/telephony/java/com/android/internal/telephony/RILConstants.java
+++ b/telephony/java/com/android/internal/telephony/RILConstants.java
@@ -293,7 +293,7 @@ cat include/telephony/ril.h | \
int RIL_UNSOL_RINGBACK_TONE = 1029;
int RIL_UNSOL_RESEND_INCALL_MUTE = 1030;
int RIL_UNSOL_CDMA_SUBSCRIPTION_SOURCE_CHANGED = 1031;
- int RIL_UNSOl_CDMA_PRL_CHANGED = 1032;
+ int RIL_UNSOL_CDMA_PRL_CHANGED = 1032;
int RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE = 1033;
int RIL_UNSOL_RIL_CONNECTED = 1034;
int RIL_UNSOL_VOICE_RADIO_TECH_CHANGED = 1035;