auto import from //branches/cupcake_rel/...@138607
diff --git a/res/layout-land/choose_lock_pattern.xml b/res/layout-land/choose_lock_pattern.xml
index 1502301..9d623f6 100644
--- a/res/layout-land/choose_lock_pattern.xml
+++ b/res/layout-land/choose_lock_pattern.xml
@@ -43,29 +43,35 @@
                 android:layout_height="0dip"
                 android:layout_weight="1.0">
 
-            <!-- left button: skip, or re-try -->
-            <Button android:id="@+id/footerLeftButton"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_alignParentLeft="true"
-                android:layout_alignParentBottom="true"
-                android:text="@string/lockpattern_restart_button_text"/>
-
-            <!-- right button: confirm or ok -->
+            <!-- right / bottom button: confirm or ok -->
             <Button android:id="@+id/footerRightButton"
-                android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_alignParentRight="true"
+                android:layout_width="140dip"
                 android:layout_alignParentBottom="true"
+                android:layout_centerHorizontal="true"
+                android:ellipsize="marquee"
+                android:singleLine="true"
                 android:drawableRight="@drawable/ic_btn_next"
                 android:drawablePadding="3dip"
                 android:text="@string/lockpattern_confirm_button_text"/>
 
+
+            <!-- left / top button: skip, or re-try -->
+            <Button android:id="@+id/footerLeftButton"
+                android:layout_height="wrap_content"
+                android:layout_width="140dip"
+                android:layout_above="@id/footerRightButton"
+                android:layout_centerHorizontal="true"
+                android:ellipsize="marquee"
+                android:singleLine="true"
+                android:text="@string/lockpattern_restart_button_text"/>
+
+
             <!-- message above buttons -->
             <TextView android:id="@+id/footerText"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_above="@+id/footerRightButton"
+                android:layout_above="@+id/footerLeftButton"
                 android:layout_centerHorizontal="true"
                 android:layout_marginBottom="4dip"
                 android:textSize="14sp"/>
diff --git a/res/layout/choose_lock_pattern.xml b/res/layout/choose_lock_pattern.xml
index 110b9ad..b4472ba 100644
--- a/res/layout/choose_lock_pattern.xml
+++ b/res/layout/choose_lock_pattern.xml
@@ -56,8 +56,9 @@
         <!-- left button: skip, or retry -->
         <Button android:id="@+id/footerLeftButton"
             android:layout_height="wrap_content"
-            android:layout_width="0dip"
-            android:layout_weight="1"
+            android:layout_width="140dip"
+            android:ellipsize="marquee"
+            android:singleLine="true"
             android:text="@string/lockpattern_restart_button_text"/>
 
         <!-- Placeholder to get blank space between the two buttons -->
@@ -70,8 +71,9 @@
         <!-- right button: confirm or ok -->
         <Button android:id="@+id/footerRightButton"
             android:layout_height="wrap_content"
-            android:layout_width="0dip"
-            android:layout_weight="1"
+            android:layout_width="140dip"
+            android:ellipsize="marquee"
+            android:singleLine="true"
             android:drawableRight="@drawable/ic_btn_next"
             android:drawablePadding="3dip"
             android:text="@string/lockpattern_confirm_button_text"/>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 5aca72a..de79429 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -417,8 +417,6 @@
     <string name="status_wifi_mac_address">"Adresa MAC sítě WiFi"</string>
     <string name="status_bt_address">"Adresa zařízení Bluetooth"</string>
     <string name="status_unavailable">"Nedostupný údaj"</string>
-    <string name="status_network_traffic_stats">"Využití sítě"</string>
-    <string name="status_network_traffic_summary">"Odesláno: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>Přijato: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
     <string name="status_up_time">"Doba provozu"</string>
     <string name="status_awake_time">"Doba provozu"</string>
     <string name="internal_memory">"Interní paměť telefonu"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 68790d5..60deacd 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -417,8 +417,6 @@
     <string name="status_wifi_mac_address">"WLAN-MAC-Adresse"</string>
     <string name="status_bt_address">"Bluetooth-Adresse"</string>
     <string name="status_unavailable">"Nicht verfügbar"</string>
-    <string name="status_network_traffic_stats">"Netzwerknutzung"</string>
-    <string name="status_network_traffic_summary">"Gesendet: \n<xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>Erhalt: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
     <string name="status_up_time">"Betriebszeit"</string>
     <string name="status_awake_time">"Aktivzeit"</string>
     <string name="internal_memory">"Interner Telefonspeicher"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index e22ee4b..eb4c8b1 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -416,8 +416,6 @@
     <string name="status_wifi_mac_address">"Dirección MAC de la red Wi-Fi"</string>
     <string name="status_bt_address">"Dirección de Bluetooth"</string>
     <string name="status_unavailable">"No disponible"</string>
-    <string name="status_network_traffic_stats">"Uso de red"</string>
-    <string name="status_network_traffic_summary">"Enviado: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>Recibido: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
     <string name="status_up_time">"Tiempo de actividad"</string>
     <string name="status_awake_time">"Tiempo de actividad"</string>
     <string name="internal_memory">"Almacenamiento interno del teléfono"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 7d8e534..3feed96 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -416,8 +416,6 @@
     <string name="status_wifi_mac_address">"Adresse MAC Wi-Fi"</string>
     <string name="status_bt_address">"Adresse Bluetooth"</string>
     <string name="status_unavailable">"Non disponible"</string>
-    <string name="status_network_traffic_stats">"Utilisation du réseau"</string>
-    <string name="status_network_traffic_summary">"Envoyés : <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g> Reçus : <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
     <string name="status_up_time">"Durée d\'activité"</string>
     <string name="status_awake_time">"Temps en activité"</string>
     <string name="internal_memory">"Mémoire interne du téléphone"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 24efd38..6e10e36 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -416,8 +416,6 @@
     <string name="status_wifi_mac_address">"Indirizzo MAC Wi-Fi"</string>
     <string name="status_bt_address">"Indirizzo Bluetooth"</string>
     <string name="status_unavailable">"Non disponibile"</string>
-    <string name="status_network_traffic_stats">"Utilizzo della rete"</string>
-    <string name="status_network_traffic_summary">"Inviati: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>Ricevuti: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
     <string name="status_up_time">"Tempo di attività"</string>
     <string name="status_awake_time">"Tempo di attività"</string>
     <string name="internal_memory">"Archiviazione interna telefono"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index f1c2414..b887234 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -417,8 +417,6 @@
     <string name="status_wifi_mac_address">"Wi-Fi MACアドレス"</string>
     <string name="status_bt_address">"Bluetoothアドレス"</string>
     <string name="status_unavailable">"不明"</string>
-    <string name="status_network_traffic_stats">"ネットワーク使用状況"</string>
-    <string name="status_network_traffic_summary">"送信: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>受信: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
     <string name="status_up_time">"稼働時間"</string>
     <string name="status_awake_time">"端末使用時間"</string>
     <string name="internal_memory">"端末内部メモリ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 7d7590f..f5d680f 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -417,8 +417,6 @@
     <string name="status_wifi_mac_address">"Wi-Fi MAC 주소"</string>
     <string name="status_bt_address">"Bluetooth 주소"</string>
     <string name="status_unavailable">"사용할 수 없음"</string>
-    <string name="status_network_traffic_stats">"네트워크 사용량"</string>
-    <string name="status_network_traffic_summary">"전송: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g> 수신:<xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
     <string name="status_up_time">"가동 시간"</string>
     <string name="status_awake_time">"무중단 가동 시간"</string>
     <string name="internal_memory">"전화기 내부 저장공간"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index f111758..f9f01a6 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -416,8 +416,6 @@
     <string name="status_wifi_mac_address">"MAC-adresse for WLAN"</string>
     <string name="status_bt_address">"Bluetooth-adresse"</string>
     <string name="status_unavailable">"Ikke tilgjengelig"</string>
-    <string name="status_network_traffic_stats">"Nettverksbruk"</string>
-    <string name="status_network_traffic_summary">"Sendt: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>Mottatt: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
     <string name="status_up_time">"Oppetid"</string>
     <string name="status_awake_time">"Våken tid"</string>
     <string name="internal_memory">"Intern lagringsplass"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 6f30611..4f1c6f9 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -417,8 +417,6 @@
     <string name="status_wifi_mac_address">"Wi-Fi MAC-adres"</string>
     <string name="status_bt_address">"Bluetooth-adres"</string>
     <string name="status_unavailable">"Niet beschikbaar"</string>
-    <string name="status_network_traffic_stats">"Netwerkgebruik"</string>
-    <string name="status_network_traffic_summary">"Verzonden: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>Ontvangen: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
     <string name="status_up_time">"Bedrijfstijd"</string>
     <string name="status_awake_time">"Stand-bytijd"</string>
     <string name="internal_memory">"Intern telefoongeheugen"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 51ce9cb..c6e7b07 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -417,8 +417,6 @@
     <string name="status_wifi_mac_address">"Adres MAC karty Wi-Fi"</string>
     <string name="status_bt_address">"Adres Bluetooth"</string>
     <string name="status_unavailable">"Niedostępny"</string>
-    <string name="status_network_traffic_stats">"Wykorzystanie sieci"</string>
-    <string name="status_network_traffic_summary">"Wysłane: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>Odebrane: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
     <string name="status_up_time">"Czas działania"</string>
     <string name="status_awake_time">"Czas działania (włączony)"</string>
     <string name="internal_memory">"Pamięć wewnętrzna telefonu"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 0a80622..fa835ab 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -417,8 +417,6 @@
     <string name="status_wifi_mac_address">"MAC-адрес Wi-Fi"</string>
     <string name="status_bt_address">"Адрес Bluetooth"</string>
     <string name="status_unavailable">"Недоступно"</string>
-    <string name="status_network_traffic_stats">"Использование сети"</string>
-    <string name="status_network_traffic_summary">"Отправлено: <xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>Принято: <xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
     <string name="status_up_time">"Время работы"</string>
     <string name="status_awake_time">"Время активности"</string>
     <string name="internal_memory">"Хранение в памяти телефона"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 45148de..4ad3d9e 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -417,8 +417,6 @@
     <string name="status_wifi_mac_address">"Wi-Fi MAC 地址"</string>
     <string name="status_bt_address">"蓝牙地址"</string>
     <string name="status_unavailable">"不可用"</string>
-    <string name="status_network_traffic_stats">"网络使用"</string>
-    <string name="status_network_traffic_summary">"发送:<xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g> 接收:<xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
     <string name="status_up_time">"正常使用时间"</string>
     <string name="status_awake_time">"唤醒时间"</string>
     <string name="internal_memory">"手机内部存储"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index c34d6a5..a076eb8 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -417,8 +417,6 @@
     <string name="status_wifi_mac_address">"Wi-Fi MAC 位址"</string>
     <string name="status_bt_address">"藍牙位址"</string>
     <string name="status_unavailable">"無法取得"</string>
-    <string name="status_network_traffic_stats">"網路使用率"</string>
-    <string name="status_network_traffic_summary">"已傳送:<xliff:g id="NETWORK_TRAFFIC_0">%1$d packets, %2$d bytes%n</xliff:g>已接收:<xliff:g id="NETWORK_TRAFFIC_1">%3$d packets, %4$d bytes</xliff:g>"</string>
     <string name="status_up_time">"開機時間"</string>
     <string name="status_awake_time">"清醒時間"</string>
     <string name="internal_memory">"手機內部記憶體"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 24dda75..356dbef 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -812,9 +812,9 @@
     <!-- Sound & display settings screen, animations check box label -->
     <string name="animations_title">Animation</string>
     <!-- Sound & display settings screen, animations option summary text when check box is selected -->
-    <string name="animations_summary_on">Show animation when opening &amp; closing windows</string>
+    <string name="animations_summary_on">Show screen transition animations</string>
     <!-- Sound & display settings screen, animations option summary text when check box is clear -->
-    <string name="animations_summary_off">Show animation when opening &amp; closing windows</string>
+    <string name="animations_summary_off">Show screen transition animations</string>
     <!-- Sound & display settings screen, accelerometer-based rotation check box label -->
     <string name="accelerometer_title">Orientation</string>
     <!-- Sound & display settings screen, accelerometer-based rotation summary text when check box is selected -->
@@ -927,10 +927,6 @@
     <string name="status_bt_address">Bluetooth address</string>
     <!-- About phone, status item value if the actual value is not available. -->
     <string name="status_unavailable">Unavailable</string>
-    <!-- About phone, status item title.  How many packets and bytes have been sent and received across all network interfaces. -->
-    <string name="status_network_traffic_stats">Network usage</string>
-    <!-- About phone, status item summary.  How many packets and bytes have been sent and received across all network interfaces. -->
-    <string name="status_network_traffic_summary">Sent: <xliff:g id="network_traffic">%1$d packets, %2$d bytes%n</xliff:g>Rcvd: <xliff:g id="network_traffic">%3$d packets, %4$d bytes</xliff:g></string>
     <!-- About phone, status item title.  How long the device has been running since its last reboot. -->
     <string name="status_up_time">Up time</string>
     <!-- About phone, status item title.  How much time the device has had its main CPU awake. -->
diff --git a/res/xml/device_info_status.xml b/res/xml/device_info_status.xml
index 9537795..4934817 100644
--- a/res/xml/device_info_status.xml
+++ b/res/xml/device_info_status.xml
@@ -82,11 +82,6 @@
         android:title="@string/status_bt_address"
         android:summary="@string/device_info_not_available"
         android:persistent="false" />
-    <Preference android:key="network_traffic_stats"
-        style="?android:attr/preferenceInformationStyle" 
-        android:title="@string/status_network_traffic_stats"
-        android:summary="@string/device_info_not_available"
-        android:persistent="false" />
     <Preference android:key="up_time"
         style="?android:attr/preferenceInformationStyle" 
         android:title="@string/status_up_time"
diff --git a/src/com/android/settings/ChooseLockPattern.java b/src/com/android/settings/ChooseLockPattern.java
index 47fc07f..3ddd669 100644
--- a/src/com/android/settings/ChooseLockPattern.java
+++ b/src/com/android/settings/ChooseLockPattern.java
@@ -481,15 +481,8 @@
     }
 
     private void saveChosenPatternAndFinish() {
-        boolean patternExistedBefore = mLockPatternUtils.savedPatternExists();
         mLockPatternUtils.saveLockPattern(mChosenPattern);
-
-        // if setting pattern for first time, enable the lock gesture.  otherwise,
-        // keep the user's setting.
-        if (!patternExistedBefore) {
-            mLockPatternUtils.setLockPatternEnabled(true);
-            mLockPatternUtils.setVisiblePatternEnabled(true);
-        }
+        mLockPatternUtils.setLockPatternEnabled(true);
         
         setResult(RESULT_FINISHED);
         finish();
diff --git a/src/com/android/settings/ChooseLockPatternTutorial.java b/src/com/android/settings/ChooseLockPatternTutorial.java
index a0a878a..6e92ca8 100644
--- a/src/com/android/settings/ChooseLockPatternTutorial.java
+++ b/src/com/android/settings/ChooseLockPatternTutorial.java
@@ -34,7 +34,7 @@
         super.onCreate(savedInstanceState);
         // Don't show the tutorial if the user has seen it before.
         LockPatternUtils lockPatternUtils = new LockPatternUtils(getContentResolver());
-        if (savedInstanceState == null && lockPatternUtils.savedPatternExists()) {
+        if (savedInstanceState == null && lockPatternUtils.isPatternEverChosen()) {
             Intent intent = new Intent();
             intent.setClassName("com.android.settings", "com.android.settings.ChooseLockPattern");
             startActivity(intent);
diff --git a/src/com/android/settings/DateTimeSettings.java b/src/com/android/settings/DateTimeSettings.java
index e78215a..1b9fecb 100644
--- a/src/com/android/settings/DateTimeSettings.java
+++ b/src/com/android/settings/DateTimeSettings.java
@@ -171,7 +171,10 @@
             SystemClock.setCurrentTimeMillis(when);
         }
         updateTimeAndDateDisplay();
-        timeUpdated();
+        
+        // We don't need to call timeUpdated() here because the TIME_CHANGED
+        // broadcast is sent by the AlarmManager as a side effect of setting the
+        // SystemClock time.
     }
 
     public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
diff --git a/src/com/android/settings/LauncherAppWidgetBinder.java b/src/com/android/settings/LauncherAppWidgetBinder.java
index 5cd3a11..98ea246 100644
--- a/src/com/android/settings/LauncherAppWidgetBinder.java
+++ b/src/com/android/settings/LauncherAppWidgetBinder.java
@@ -53,7 +53,7 @@
         static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + TABLE_FAVORITES);
 
         static final String ITEM_TYPE = "itemType";
-        static final String APPWIDGET_ID = "gadgetId";
+        static final String APPWIDGET_ID = "appWidgetId";
         static final String ICON = "icon";
 
         static final int ITEM_TYPE_APPWIDGET = 4;
diff --git a/src/com/android/settings/ManageApplications.java b/src/com/android/settings/ManageApplications.java
index 74957ed..7402727 100644
--- a/src/com/android/settings/ManageApplications.java
+++ b/src/com/android/settings/ManageApplications.java
@@ -248,6 +248,38 @@
             switch (msg.what) {
             case INIT_PKG_INFO:
                 if(localLOGV) Log.i(TAG, "Message INIT_PKG_INFO");
+                if (!mJustCreated) {
+                    // Add or delete newly created packages by comparing lists
+                    List<ApplicationInfo> newList = getInstalledApps(FILTER_APPS_ALL);
+                    int oldCount = mAppPropCache.size();
+                    boolean idxArr[] = new boolean[oldCount];
+                    for ( int i = 0; i < oldCount; i++) {
+                        idxArr[i] = false;
+                    }
+                        
+                    if (newList != null) {
+                        for (ApplicationInfo app : newList) {
+                            AppInfo aInfo = mAppPropCache.get(app.packageName);
+                            if ( aInfo == null) {
+                                // New package. post an ADD_PKG message
+                                if(localLOGV) Log.i(TAG, "Adding pkg: "+app.packageName);
+                                updatePackageList(Intent.ACTION_PACKAGE_ADDED, app.packageName);
+                            } else {
+                                idxArr[aInfo.index] = true;
+                            }
+                        }
+                        Set<String> keyList = mAppPropCache.keySet();
+                        for (String key : keyList) {
+                            AppInfo aInfo = mAppPropCache.get(key);
+                            int idx = aInfo.index;
+                            if (!idxArr[idx]) {
+                                String pkg = aInfo.pkgName; 
+                                if(localLOGV) Log.i(TAG, "Deleting pkg: " + pkg);
+                                updatePackageList(Intent.ACTION_PACKAGE_REMOVED, pkg);
+                            }
+                        }
+                    }
+                }
                 // Retrieve the package list and init some structures
                 initAppList(mFilterApps);
                 mHandler.sendEmptyMessage(NEXT_LOAD_STEP);
@@ -499,12 +531,18 @@
     
     // some initialization code used when kicking off the size computation
     private void initAppList(int filterOption) {
+        // Initialize lists
+        List<ApplicationInfo> appList = getInstalledApps(filterOption);
+        initAppList(appList, filterOption);
+    }
+    
+     // some initialization code used when kicking off the size computation
+    private void initAppList(List<ApplicationInfo> appList, int filterOption) {
         setProgressBarIndeterminateVisibility(true);
         mComputeIndex = 0;
         mComputeSizes = false;
         mLoadLabels = false;
         // Initialize lists
-        List<ApplicationInfo> appList = getInstalledApps(filterOption);
         mAddRemoveMap = new TreeMap<String, Boolean>();
         mAppInfoAdapter.resetAppList(filterOption, appList);
     }
@@ -860,11 +898,18 @@
             }
             return mSizeComparator;
         }
-        
-        public void updateAppsResourceInfo(Map<String, AppInfo> iconMap) {
+
+        /*
+         * This method updates resource information in the package map.
+         * 
+         *  @param iconMap a map of package names and attributes
+         *  @return A boolean value to indicate if the property map has to be
+         *  refreshed completely
+         */
+        public boolean updateAppsResourceInfo(Map<String, AppInfo> iconMap) {
             if(iconMap == null) {
                 Log.w(TAG, "Null iconMap when refreshing icon in List Adapter");
-                return;
+                return true;
             }
             boolean changed = false;
             for (ApplicationInfo info : mAppLocalList) {
@@ -874,7 +919,7 @@
                     if (aInfo != null) {
                         aInfo.refreshIcon(pInfo);
                     } else {
-                        mAppPropMap.put(info.packageName, pInfo);
+                        return false;
                     }
                     changed = true;
                 }
@@ -882,14 +927,56 @@
             if(changed) {
                 notifyDataSetChanged();
             }
+            return true;
         }
         
+        private boolean shouldBeInList(int filterOption, ApplicationInfo info) {
+            // Match filter here
+            boolean addToCurrList = false;
+            if (filterOption == FILTER_APPS_RUNNING) {
+                List<ApplicationInfo> runningList = getInstalledApps(FILTER_APPS_RUNNING);
+                for (ApplicationInfo running : runningList) {
+                    if (running.packageName.equalsIgnoreCase(info.packageName)) {
+                        addToCurrList = true;
+                        break;
+                    }
+                }
+            } else if (filterOption == FILTER_APPS_THIRD_PARTY) {
+                if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
+                    addToCurrList = true;
+                } else if ((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
+                    addToCurrList = true;
+                }
+            } else {
+                return true;
+            }
+            return addToCurrList;
+        }
+        
+        /*
+         * Add a package to the current list.
+         * The package is only added to the displayed list
+         * based on the filter value. The package is always added to the property map.
+         * @param pkgName name of package to be added
+         * @param ps PackageStats of new package
+         */
         public void addToList(String pkgName, PackageStats ps) {
             if(pkgName == null) {
                 Log.w(TAG, "Adding null pkg to List Adapter");
                 return;
             }
-            ApplicationInfo info;
+            boolean notInList = true;
+            int newIdx = getIndex(pkgName);
+            if (newIdx != -1) {
+                notInList = false;
+                if (mAppPropMap.get(pkgName) != null) {
+                    // weird. just ignore entry
+                    Log.i(TAG, "Package:"+pkgName+" already added");
+                    return;
+                }
+            }
+            // Get ApplicationInfo
+            ApplicationInfo info = null;
             try {
                 info = mPm.getApplicationInfo(pkgName, 0);
             } catch (NameNotFoundException e) {
@@ -901,21 +988,26 @@
                 Log.i(TAG, "Null ApplicationInfo for package:"+pkgName);
                 return;
             }
-            // Binary search returns a negative index (ie --index) of the position where
-            // this might be inserted. 
-            int newIdx = Collections.binarySearch(mAppLocalList, info, 
-                    getAppComparator(mSortOrder));
-            if(newIdx >= 0) {
-                Log.i(TAG, "Strange. Package:"+pkgName+" is not new");
-                return;
-            }
-            // New entry
-            newIdx = -newIdx-1;
-            mAppLocalList.add(newIdx, info);
-            mAppPropMap.put(info.packageName, new AppInfo(pkgName, newIdx,
+            // Add entry to map
+            mAppPropMap.put(pkgName, new AppInfo(pkgName, newIdx,
                     info.loadLabel(mPm), info.loadIcon(mPm), ps));
-            adjustIndex();
-            notifyDataSetChanged();
+            // Add to list
+            if (notInList && (shouldBeInList(mFilterApps, info))) {
+                // Binary search returns a negative index (ie -index) of the position where
+                // this might be inserted. 
+                newIdx = Collections.binarySearch(mAppLocalList, info, 
+                        getAppComparator(mSortOrder));
+                if(newIdx >= 0) {
+                    Log.i(TAG, "Strange. Package:"+pkgName+" is not new");
+                    return;
+                }
+                // New entry
+                newIdx = -newIdx-1;
+                mAppLocalList.add(newIdx, info);
+                // Adjust index
+                adjustIndex();
+                notifyDataSetChanged();
+            }
         }
         
         public void removeFromList(List<String> pkgNames) {
@@ -1134,7 +1226,6 @@
         List<ApplicationInfo> appList = getInstalledApps(mSortOrder);
         mAppInfoAdapter = new AppInfoAdapter(this, appList);
         ListView lv= (ListView) findViewById(android.R.id.list);
-        //lv.setAdapter(mAppInfoAdapter);
         lv.setOnItemClickListener(this);
         lv.setSaveEnabled(true);
         lv.setItemsCanFocus(true);
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index cd26492..867bce3 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -45,8 +45,7 @@
     private static final String KEY_LOCK_ENABLED = "lockenabled";
     private static final String KEY_VISIBLE_PATTERN = "visiblepattern";
     private static final String KEY_TACTILE_FEEDBACK_ENABLED = "tactilefeedback";
-    private static final int CONFIRM_PATTERN_THEN_DISABLE_REQUEST_CODE = 55;
-    private static final int CONFIRM_PATTERN_THEN_ENABLE_REQUEST_CODE = 56;
+    private static final int CONFIRM_PATTERN_THEN_DISABLE_AND_CLEAR_REQUEST_CODE = 55;
 
     private LockPatternUtils mLockPatternUtils;
     private CheckBoxPreference mLockEnabled;
@@ -64,7 +63,7 @@
     private CheckBoxPreference mNetwork;
     private CheckBoxPreference mGps;
     private LocationManager mLocationManager;
-    
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -257,36 +256,26 @@
 
         @Override
         protected void onClick() {
-            if (mLockPatternUtils.savedPatternExists()) {
-                if (isChecked()) {
-                    confirmPatternThenDisable();
-                } else {
-                    confirmPatternThenEnable();
-                }
+            if (mLockPatternUtils.savedPatternExists() && isChecked()) {
+                confirmPatternThenDisableAndClear();
             } else {
                 super.onClick();
             }
         }
     }
 
-    private void confirmPatternThenEnable() {
-        final Intent intent = new Intent();
-        intent.setClassName("com.android.settings", "com.android.settings.ConfirmLockPattern");
-        startActivityForResult(intent, CONFIRM_PATTERN_THEN_ENABLE_REQUEST_CODE);
-    }
-
     /**
      * Launch screen to confirm the existing lock pattern.
      * @see #onActivityResult(int, int, android.content.Intent)
      */
-    private void confirmPatternThenDisable() {
+    private void confirmPatternThenDisableAndClear() {
         final Intent intent = new Intent();
         intent.setClassName("com.android.settings", "com.android.settings.ConfirmLockPattern");
-        startActivityForResult(intent, CONFIRM_PATTERN_THEN_DISABLE_REQUEST_CODE);
+        startActivityForResult(intent, CONFIRM_PATTERN_THEN_DISABLE_AND_CLEAR_REQUEST_CODE);
     }
 
     /**
-     * @see #confirmPatternThenDisable
+     * @see #confirmPatternThenDisableAndClear
      */
     @Override
     protected void onActivityResult(int requestCode, int resultCode,
@@ -295,10 +284,9 @@
 
         final boolean resultOk = resultCode == Activity.RESULT_OK;
 
-        if ((requestCode == CONFIRM_PATTERN_THEN_DISABLE_REQUEST_CODE) && resultOk) {
+        if ((requestCode == CONFIRM_PATTERN_THEN_DISABLE_AND_CLEAR_REQUEST_CODE) && resultOk) {
             mLockPatternUtils.setLockPatternEnabled(false);
-        } else if ((requestCode == CONFIRM_PATTERN_THEN_ENABLE_REQUEST_CODE) && resultOk) {
-            mLockPatternUtils.setLockPatternEnabled(true);
+            mLockPatternUtils.saveLockPattern(null);
         }
     }
 }
diff --git a/src/com/android/settings/SoundAndDisplaySettings.java b/src/com/android/settings/SoundAndDisplaySettings.java
index 2a4e133..8905b85 100644
--- a/src/com/android/settings/SoundAndDisplaySettings.java
+++ b/src/com/android/settings/SoundAndDisplaySettings.java
@@ -168,7 +168,9 @@
         } catch (RemoteException e) {
         }
         if (mAnimationScales != null) {
-            for (int i=0; i<mAnimationScales.length; i++) {
+            // We will leave the window animations alone (always set),
+            // and only use this to change the transition animations.
+            for (int i=1; i<mAnimationScales.length; i++) {
                 if (mAnimationScales[i] == 0) {
                     animations = false;
                     break;
@@ -224,7 +226,11 @@
                     mSoundEffects.isChecked() ? 1 : 0);
             
         } else if (preference == mAnimations) {
-            for (int i=0; i<mAnimationScales.length; i++) {
+            if (mAnimationScales.length > 0) {
+                // Window animations are always on.
+                mAnimationScales[0] = 1;
+            }
+            for (int i=1; i<mAnimationScales.length; i++) {
                 mAnimationScales[i] = mAnimations.isChecked() ? 1 : 0;
             }
             try {
diff --git a/src/com/android/settings/bluetooth/BluetoothPinDialog.java b/src/com/android/settings/bluetooth/BluetoothPinDialog.java
index 5e289f7..087fbb2 100644
--- a/src/com/android/settings/bluetooth/BluetoothPinDialog.java
+++ b/src/com/android/settings/bluetooth/BluetoothPinDialog.java
@@ -46,6 +46,7 @@
         TextWatcher {
     private static final String TAG = "BluetoothPinDialog";
 
+    private final int BLUETOOTH_PIN_MAX_LENGTH = 16;
     private LocalBluetoothManager mLocalManager;
     private String mAddress;
     private EditText mPinView;
@@ -138,8 +139,8 @@
         
         mPinView = (EditText) view.findViewById(R.id.text);
         mPinView.addTextChangedListener(this);
-        // Maximum of 10 characters in a PIN
-        mPinView.setFilters(new InputFilter[] { new LengthFilter(10) });
+        // Maximum of 16 characters in a PIN
+        mPinView.setFilters(new InputFilter[] { new LengthFilter(BLUETOOTH_PIN_MAX_LENGTH) });
         
         return view;
     }
diff --git a/src/com/android/settings/deviceinfo/Status.java b/src/com/android/settings/deviceinfo/Status.java
index 4132ed5..96366b8 100644
--- a/src/com/android/settings/deviceinfo/Status.java
+++ b/src/com/android/settings/deviceinfo/Status.java
@@ -30,7 +30,6 @@
 import android.os.Message;
 import android.os.SystemClock;
 import android.os.SystemProperties;
-import android.os.NetStat;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
 import android.telephony.PhoneStateListener;
@@ -64,7 +63,6 @@
 
     private static final String KEY_WIFI_MAC_ADDRESS = "wifi_mac_address";
     private static final String KEY_BT_ADDRESS = "bt_address";
-    private static final String KEY_NETWORK_TRAFFIC_STATS = "network_traffic_stats";
     private static final int EVENT_SIGNAL_STRENGTH_CHANGED = 200;
     private static final int EVENT_SERVICE_STATE_CHANGED = 300;
 
@@ -111,7 +109,6 @@
 
                 case EVENT_UPDATE_STATS:
                     status.updateTimes();
-                    status.setNetworkTrafficStats();
                     sendEmptyMessageDelayed(EVENT_UPDATE_STATS, 1000);
                     break;
             }
@@ -350,17 +347,6 @@
         }
     }
 
-    private void setNetworkTrafficStats() {
-        long txPkts = NetStat.getTotalTxPkts();
-        long txBytes = NetStat.getTotalTxBytes();
-        long rxPkts = NetStat.getTotalRxPkts();
-        long rxBytes = NetStat.getTotalRxBytes();
-
-        Preference netStatsPref = findPreference(KEY_NETWORK_TRAFFIC_STATS);
-        netStatsPref.setSummary(getString(R.string.status_network_traffic_summary,
-                txPkts, txBytes, rxPkts, rxBytes));
-    }
-
     void updateTimes() {
         long at = SystemClock.uptimeMillis() / 1000;
         long ut = SystemClock.elapsedRealtime() / 1000;
diff --git a/src/com/android/settings/wifi/AccessPointState.java b/src/com/android/settings/wifi/AccessPointState.java
index c224954..2569802 100644
--- a/src/com/android/settings/wifi/AccessPointState.java
+++ b/src/com/android/settings/wifi/AccessPointState.java
@@ -47,24 +47,7 @@
     private static final String ADHOC_CAPABILITY = "[IBSS]";
     /** String present in capabilities if the scan result is enterprise secured */
     private static final String ENTERPRISE_CAPABILITY = "-EAP-";
-    
-    // Localized strings for different security types
-    private static String LOCALIZED_WPA2;
-    private static String LOCALIZED_WPA;
-    private static String LOCALIZED_WEP;
-    private static String LOCALIZED_OPEN;
-    private static String LOCALIZED_UNKNOWN;
-    private static String LOCALIZED_VERBOSE_WPA2;
-    private static String LOCALIZED_VERBOSE_WPA;
-    private static String LOCALIZED_VERBOSE_WEP;
-    private static String LOCALIZED_VERBOSE_OPEN;
 
-    
-    // Localized strings for various messages
-    private static String SUMMARY_NOT_IN_RANGE;
-    private static String SUMMARY_REMEMBERED;
-    private static String SUMMARY_CONNECTION_FAILED;
-    
     public static final String BSSID_ANY = "any";
     public static final int NETWORK_ID_NOT_SET = -1;
     /** This should be used with care! */
@@ -147,31 +130,8 @@
 
     void setContext(Context context) {
         mContext = context;
-        setStrings();
     }
 
-    private void setStrings() {
-        final Context c = mContext;
-
-        if (SUMMARY_NOT_IN_RANGE == null && c != null) {
-            SUMMARY_NOT_IN_RANGE = c.getString(R.string.summary_not_in_range);
-            SUMMARY_REMEMBERED = c.getString(R.string.summary_remembered);
-            SUMMARY_CONNECTION_FAILED = c.getString(R.string.summary_connection_failed);
-            
-            LOCALIZED_OPEN = c.getString(R.string.wifi_security_open);
-            LOCALIZED_WEP = c.getString(R.string.wifi_security_wep);
-            LOCALIZED_WPA = c.getString(R.string.wifi_security_wpa);
-            LOCALIZED_WPA2 = c.getString(R.string.wifi_security_wpa2);
-
-            LOCALIZED_VERBOSE_OPEN = c.getString(R.string.wifi_security_verbose_open);
-            LOCALIZED_VERBOSE_WEP = c.getString(R.string.wifi_security_verbose_wep);
-            LOCALIZED_VERBOSE_WPA = c.getString(R.string.wifi_security_verbose_wpa);
-            LOCALIZED_VERBOSE_WPA2 = c.getString(R.string.wifi_security_verbose_wpa2);
-
-            LOCALIZED_UNKNOWN = c.getString(R.string.wifi_security_unknown);
-        }
-    }
-    
     public void setNetworkId(int networkId) {
         this.networkId = networkId;
     }
@@ -311,12 +271,12 @@
     }
     
     public String getHumanReadableSecurity() {
-        if (security.equals(OPEN)) return LOCALIZED_OPEN;
-        else if (security.equals(WEP)) return LOCALIZED_WEP;
-        else if (security.equals(WPA)) return LOCALIZED_WPA;
-        else if (security.equals(WPA2)) return LOCALIZED_WPA2;
+        if (security.equals(OPEN)) return mContext.getString(R.string.wifi_security_open);
+        else if (security.equals(WEP)) return mContext.getString(R.string.wifi_security_wep);
+        else if (security.equals(WPA)) return mContext.getString(R.string.wifi_security_wpa);
+        else if (security.equals(WPA2)) return mContext.getString(R.string.wifi_security_wpa2);
         
-        return LOCALIZED_UNKNOWN;
+        return mContext.getString(R.string.wifi_security_unknown);
     }
     
     public void updateFromScanResult(ScanResult scanResult) {
@@ -719,22 +679,22 @@
             buildSummary(sb, WifiStatus.getPrintable(mContext, status), true);
             
         } else if (!seen) {
-            buildSummary(sb, SUMMARY_NOT_IN_RANGE, true);
+            buildSummary(sb, mContext.getString(R.string.summary_not_in_range), true);
 
             // Remembered comes second in this case
             if (!primary && configured) {
-                buildSummary(sb, SUMMARY_REMEMBERED, true);
+                buildSummary(sb, mContext.getString(R.string.summary_remembered), true);
             }
             
         } else {
             if (configured && disabled) {
                 // The connection failure overrides all in this case
-                return SUMMARY_CONNECTION_FAILED;
+                return mContext.getString(R.string.summary_connection_failed);
             }
 
             // Remembered comes first in this case
             if (!primary && configured) {
-                buildSummary(sb, SUMMARY_REMEMBERED, true);
+                buildSummary(sb, mContext.getString(R.string.summary_remembered), true);
             }
             
             // If it is seen (and not the primary), show the security type
@@ -749,13 +709,13 @@
     
     private String getVerboseSecurity() {
         if (WEP.equals(security)) {
-            return LOCALIZED_VERBOSE_WEP;
+            return mContext.getString(R.string.wifi_security_verbose_wep);
         } else if (WPA.equals(security)) {
-            return LOCALIZED_VERBOSE_WPA;
+            return mContext.getString(R.string.wifi_security_verbose_wpa);
         } else if (WPA2.equals(security)) {
-            return LOCALIZED_VERBOSE_WPA2;
+            return mContext.getString(R.string.wifi_security_verbose_wpa2);
         } else if (OPEN.equals(security)) {
-            return LOCALIZED_VERBOSE_OPEN;
+            return mContext.getString(R.string.wifi_security_verbose_open);
         } else {
             return null;
         }
diff --git a/src/com/android/settings/wifi/WifiStatus.java b/src/com/android/settings/wifi/WifiStatus.java
index d4b6431..e10ab8d 100644
--- a/src/com/android/settings/wifi/WifiStatus.java
+++ b/src/com/android/settings/wifi/WifiStatus.java
@@ -20,51 +20,9 @@
 
 import android.content.Context;
 import android.net.NetworkInfo;
-import android.net.wifi.WifiInfo;
 import android.text.TextUtils;
 
 public class WifiStatus {
-
-    // e.g., "Connecting"
-    public static String sScanning;
-    public static String sConnecting;
-    public static String sAuthenticating;
-    public static String sObtainingIp;
-    public static String sConnected;
-    public static String sDisconnecting;
-    public static String sDisconnected;
-    public static String sFailed;    
-
-    // e.g., "Connecting to %1$s"
-    public static String sScanningFragment;
-    public static String sConnectingFragment;
-    public static String sAuthenticatingFragment;
-    public static String sObtainingIpFragment;
-    public static String sConnectedFragment;
-    public static String sDisconnectingFragment;
-    public static String sDisconnectedFragment;
-    public static String sFailedFragment;    
-
-    private static void fillStrings(Context context) {
-        sScanning = context.getString(R.string.status_scanning);
-        sConnecting = context.getString(R.string.status_connecting);
-        sAuthenticating = context.getString(R.string.status_authenticating);
-        sObtainingIp = context.getString(R.string.status_obtaining_ip);
-        sConnected = context.getString(R.string.status_connected);
-        sDisconnecting = context.getString(R.string.status_disconnecting);
-        sDisconnected = context.getString(R.string.status_disconnected);
-        sFailed = context.getString(R.string.status_failed);
-
-        sScanningFragment = context.getString(R.string.fragment_status_scanning);
-        sConnectingFragment = context.getString(R.string.fragment_status_connecting);
-        sAuthenticatingFragment = context.getString(R.string.fragment_status_authenticating);
-        sObtainingIpFragment = context.getString(R.string.fragment_status_obtaining_ip);
-        sConnectedFragment = context.getString(R.string.fragment_status_connected);
-        sDisconnectingFragment = context.getString(R.string.fragment_status_disconnecting);
-        sDisconnectedFragment = context.getString(R.string.fragment_status_disconnected);
-        sFailedFragment = context.getString(R.string.fragment_status_failed);
-    }
-    
     public static String getStatus(Context context, String ssid,
             NetworkInfo.DetailedState detailedState) {
         
@@ -85,27 +43,23 @@
     public static String getPrintable(Context context,
             NetworkInfo.DetailedState detailedState) {
         
-        if (sScanning == null) {
-            fillStrings(context);
-        }
-        
         switch (detailedState) {
             case AUTHENTICATING:
-                return sAuthenticating;
+                return context.getString(R.string.status_authenticating);
             case CONNECTED:
-                return sConnected;
+                return context.getString(R.string.status_connected);
             case CONNECTING:
-                return sConnecting;
+                return context.getString(R.string.status_connecting);
             case DISCONNECTED:
-                return sDisconnected;
+                return context.getString(R.string.status_disconnected);
             case DISCONNECTING:
-                return sDisconnecting;
+                return context.getString(R.string.status_disconnecting);
             case FAILED:
-                return sFailed;
+                return context.getString(R.string.status_failed);
             case OBTAINING_IPADDR:
-                return sObtainingIp;
+                return context.getString(R.string.status_obtaining_ip);
             case SCANNING:
-                return sScanning;
+                return context.getString(R.string.status_scanning);
             default:
                 return null;
         }
@@ -114,35 +68,31 @@
     public static String getPrintableFragment(Context context,
             NetworkInfo.DetailedState detailedState, String apName) {
         
-        if (sScanningFragment == null) {
-            fillStrings(context);
-        }
-
         String fragment = null;
         switch (detailedState) {
             case AUTHENTICATING:
-                fragment = sAuthenticatingFragment;
+                fragment = context.getString(R.string.fragment_status_authenticating);
                 break;
             case CONNECTED:
-                fragment = sConnectedFragment;
+                fragment = context.getString(R.string.fragment_status_connected);
                 break;
             case CONNECTING:
-                fragment = sConnectingFragment;
+                fragment = context.getString(R.string.fragment_status_connecting);
                 break;
             case DISCONNECTED:
-                fragment = sDisconnectedFragment;
+                fragment = context.getString(R.string.fragment_status_disconnected);
                 break;
             case DISCONNECTING:
-                fragment = sDisconnectingFragment;
+                fragment = context.getString(R.string.fragment_status_disconnecting);
                 break;
             case FAILED:
-                fragment = sFailedFragment;
+                fragment = context.getString(R.string.fragment_status_failed);
                 break;
             case OBTAINING_IPADDR:
-                fragment = sObtainingIpFragment;
+                fragment = context.getString(R.string.fragment_status_obtaining_ip);
                 break;
             case SCANNING:
-                fragment = sScanningFragment;
+                fragment = context.getString(R.string.fragment_status_scanning);
                 break;
         }