summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/FragmentManager.java5
-rw-r--r--core/java/android/provider/Settings.java13
-rw-r--r--core/java/com/android/internal/view/menu/ActionMenuPresenter.java2
-rw-r--r--core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml3
-rw-r--r--core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml3
-rw-r--r--core/res/res/layout-sw600dp/keyguard_screen_unlock_landscape.xml3
-rw-r--r--core/res/res/layout-sw600dp/keyguard_screen_unlock_portrait.xml1
-rw-r--r--core/res/res/layout/keyguard_screen_password_portrait.xml1
-rw-r--r--core/res/res/layout/keyguard_screen_tab_unlock.xml1
-rw-r--r--core/res/res/layout/keyguard_screen_unlock_portrait.xml1
-rw-r--r--core/res/res/values-de/strings.xml2
-rw-r--r--core/res/res/values-fi/strings.xml2
-rw-r--r--core/res/res/values-fr/strings.xml14
-rw-r--r--core/res/res/values-iw/strings.xml58
-rw-r--r--core/res/res/values-nl/strings.xml162
-rwxr-xr-xcore/res/res/values-pt/strings.xml4
-rw-r--r--include/media/stagefright/LPAPlayer.h2
-rw-r--r--libs/binder/Parcel.cpp3
-rw-r--r--media/libstagefright/LPAPlayer.cpp31
-rwxr-xr-xmedia/libstagefright/LPAPlayerALSA.cpp19
-rw-r--r--packages/SystemUI/res/layout-sw600dp/status_bar_settings_view.xml91
-rw-r--r--packages/SystemUI/res/values-nl/strings.xml68
-rw-r--r--packages/SystemUI/res/values/strings.xml15
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java55
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java29
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileDataController.java38
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkModeController.java71
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/SoundController.java82
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/ToggleSlider.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsView.java262
-rwxr-xr-xpolicy/src/com/android/internal/policy/impl/LockScreen.java25
-rw-r--r--policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java3
-rw-r--r--policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java3
-rw-r--r--services/audioflinger/AudioFlinger.cpp2
-rw-r--r--services/input/InputDispatcher.cpp39
-rw-r--r--services/input/InputReader.cpp2
-rw-r--r--services/java/com/android/server/InputMethodManagerService.java2
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java4
-rw-r--r--services/java/com/android/server/am/ActivityStack.java5
-rw-r--r--services/java/com/android/server/location/NMEAParser.java12
-rw-r--r--services/java/com/android/server/pm/PackageManagerService.java4
-rw-r--r--services/java/com/android/server/pm/Settings.java2
-rw-r--r--telephony/java/com/android/internal/telephony/Phone.java2
45 files changed, 973 insertions, 193 deletions
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index 1abb7de..7e1daa4 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -1538,6 +1538,9 @@ final class FragmentManagerImpl extends FragmentManager {
FragmentManagerImpl.VIEW_STATE_TAG, f.mSavedViewState);
}
if (!f.mUserVisibleHint) {
+ if (result == null) {
+ result = new Bundle();
+ }
// Only add this if it's not the default value
result.putBoolean(FragmentManagerImpl.USER_VISIBLE_HINT_TAG, f.mUserVisibleHint);
}
@@ -1887,7 +1890,7 @@ final class FragmentManagerImpl extends FragmentManager {
if (mActive != null) {
for (int i=0; i<mAdded.size(); i++) {
Fragment f = mAdded.get(i);
- if (f != null && !f.mHidden) {
+ if (f != null && !f.mHidden && f.mUserVisibleHint) {
if (f.onContextItemSelected(item)) {
return true;
}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 5deaf1a..81ccf66 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -2223,6 +2223,13 @@ public final class Settings {
public static final String WIDGET_BUTTONS = "expanded_widget_buttons";
/**
+ * Widget Buttons to Use - Tablet
+ *
+ * @hide
+ */
+ public static final String WIDGET_BUTTONS_TABLET = "expanded_widget_buttons_tablet";
+
+ /**
* Navigation controls to Use
*
* @hide
@@ -2432,6 +2439,12 @@ public final class Settings {
public static final String QUIET_HOURS_DIM = "quiet_hours_dim";
/**
+ * Sets the lockscreen background style
+ * @hide
+ */
+ public static final String LOCKSCREEN_BACKGROUND = "lockscreen_background";
+
+ /**
* Show the weather on the lock screen
* @hide
*/
diff --git a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
index 530809b..97911dd 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
@@ -277,7 +277,7 @@ public class ActionMenuPresenter extends BaseMenuPresenter
*/
public boolean showOverflowMenu() {
if (mReserveOverflow && !isOverflowMenuShowing() && mMenu != null && mMenuView != null &&
- mPostedOpenRunnable == null) {
+ mPostedOpenRunnable == null && !mMenu.getNonActionItems().isEmpty()) {
OverflowPopup popup = new OverflowPopup(mContext, mMenu, mOverflowButton, true);
mPostedOpenRunnable = new OpenOverflowRunnable(popup);
// Post this for later; we might still need a layout for the anchor to be right.
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml b/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml
index 568933c..b8deb4b 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml
@@ -21,7 +21,8 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ android:id="@+id/root">
<!-- left side: status and music -->
<RelativeLayout
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml b/core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml
index 335a641..2594873 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml
@@ -20,7 +20,8 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ android:id="@+id/root">
<!-- top: status and emergency/forgot pattern buttons -->
<RelativeLayout
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_unlock_landscape.xml b/core/res/res/layout-sw600dp/keyguard_screen_unlock_landscape.xml
index 802ef82..e13495a 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_unlock_landscape.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_unlock_landscape.xml
@@ -25,7 +25,8 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ android:id="@+id/root">
<!-- left side: status and music -->
<RelativeLayout
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_unlock_portrait.xml b/core/res/res/layout-sw600dp/keyguard_screen_unlock_portrait.xml
index 47a9953..18489af 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_unlock_portrait.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_unlock_portrait.xml
@@ -20,6 +20,7 @@
<com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
+ android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent">
diff --git a/core/res/res/layout/keyguard_screen_password_portrait.xml b/core/res/res/layout/keyguard_screen_password_portrait.xml
index 053acb2..3a1ad48 100644
--- a/core/res/res/layout/keyguard_screen_password_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_password_portrait.xml
@@ -21,6 +21,7 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:id="@+id/root"
android:gravity="center_horizontal">
<com.android.internal.widget.DigitalClock android:id="@+id/time"
diff --git a/core/res/res/layout/keyguard_screen_tab_unlock.xml b/core/res/res/layout/keyguard_screen_tab_unlock.xml
index 535188e..51bacea 100644
--- a/core/res/res/layout/keyguard_screen_tab_unlock.xml
+++ b/core/res/res/layout/keyguard_screen_tab_unlock.xml
@@ -27,6 +27,7 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:id="@+id/root"
android:gravity="center_horizontal">
<com.android.internal.widget.DigitalClock android:id="@+id/time"
diff --git a/core/res/res/layout/keyguard_screen_unlock_portrait.xml b/core/res/res/layout/keyguard_screen_unlock_portrait.xml
index 336faa1..0ea680b 100644
--- a/core/res/res/layout/keyguard_screen_unlock_portrait.xml
+++ b/core/res/res/layout/keyguard_screen_unlock_portrait.xml
@@ -25,6 +25,7 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:id="@+id/root"
android:gravity="center_horizontal">
<com.android.internal.widget.DigitalClock android:id="@+id/time"
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 9baf842..2d1ab12 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -1319,6 +1319,8 @@
<string name="weather_NW">NW</string>
<!-- Lock screen Weather - error messages -->
+ <string name="weather_no_data">Keine Daten</string>
<string name="weather_tap_to_refresh">Zum Aktualisieren berühren</string>
+ <string name="weather_refreshing">Aktualisiere\u2026</string>
</resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 392baa1..fed8079 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -665,7 +665,7 @@
<string name="lockscreen_pattern_wrong" msgid="4817583279053112312">"Yritä uudelleen"</string>
<string name="lockscreen_password_wrong" msgid="6237443657358168819">"Yritä uudelleen"</string>
<string name="lockscreen_plugged_in" msgid="8057762828355572315">"Ladataan (<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>)"</string>
- <string name="lockscreen_charged" msgid="4938930459620989972">"Muutettu."</string>
+ <string name="lockscreen_charged" msgid="4938930459620989972">"Ladattu."</string>
<string name="lockscreen_battery_short" msgid="3617549178603354656">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="lockscreen_low_battery" msgid="1482873981919249740">"Kytke laturi."</string>
<string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Ei SIM-korttia."</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 49c38c5..cf6fe05 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -50,7 +50,7 @@
<string name="weather_8">Brouillard givrant</string>
<string name="weather_9">Bruine</string>
<string name="weather_10">Pluie givrante</string>
- <string name="weather_11">Pluie verglaçante</string>
+ <string name="weather_11">Pluie</string>
<string name="weather_12">Averses</string>
<string name="weather_13">Chûtes de neige</string>
<string name="weather_14">Neige légère</string>
@@ -65,15 +65,15 @@
<string name="weather_23">Vent</string>
<string name="weather_24">Venteux</string>
<string name="weather_25">Froid</string>
- <string name="weather_26">Nuageux</string>
- <string name="weather_27">Très nuageux</string> <!-- Night -->
- <string name="weather_28">Très nuageux</string> <!-- Day -->
- <string name="weather_29">Peu nuageux</string> <!-- Night -->
- <string name="weather_30">Peu nuageux</string> <!-- Day -->
+ <string name="weather_26">Couvert</string>
+ <string name="weather_27">Ciel couvert</string> <!-- Night -->
+ <string name="weather_28">Nuageux</string> <!-- Day -->
+ <string name="weather_29">Quelques nuages</string> <!-- Night -->
+ <string name="weather_30">Quelques nuages</string> <!-- Day -->
<string name="weather_31">Ciel dégagé</string> <!-- Night -->
<string name="weather_32">Ensoleillé</string>
<string name="weather_33">Plutôt dégagé</string> <!-- Fair, Night -->
- <string name="weather_34">Plutôt ensoleillé</string> <!-- Fair, Day -->
+ <string name="weather_34">Beau temps</string> <!-- Fair, Day -->
<string name="weather_35">Pluie et grêle</string>
<string name="weather_36">Chaud</string>
<string name="weather_37">Orages isolés</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 3eb327f..794e0a4 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -1247,4 +1247,62 @@
<string name="permlab_preventpower">"מניעת לחצן power"</string>
<string name="permdesc_preventpower">"מאפשר לאפליקציה לעקוף את כפתור ה-power"</string>
<string name="app_killed_message">האפליקציה נסגרה</string>
+ <string name="roamingTextAirplaneMode">מצב טיסה</string>
+ <string name="weather_0">טורנדו</string>
+ <string name="weather_1">סופה טרופית</string>
+ <string name="weather_2">הוריקן</string>
+ <string name="weather_3">סופות רעמים קשות</string>
+ <string name="weather_4">סופות רעמים</string>
+ <string name="weather_5">גשם ושלג</string>
+ <string name="weather_6">גשם וגשם-שלג</string>
+ <string name="weather_7">שלג וגשם-שלג</string>
+ <string name="weather_8">גשם דק קופא</string>
+ <string name="weather_9">גשם דק</string>
+ <string name="weather_10">גשם קופא</string>
+ <string name="weather_11">ממטרים</string>
+ <string name="weather_12">ממטרים</string>
+ <string name="weather_13">פתיתי שלג</string>
+ <string name="weather_14">פתיתי שלג קלים</string>
+ <string name="weather_15">סופת שלג</string>
+ <string name="weather_16">שלג</string>
+ <string name="weather_17">ברד</string>
+ <string name="weather_18">גשם-שלג</string>
+ <string name="weather_19">אבק</string>
+ <string name="weather_20">ערפילי</string>
+ <string name="weather_21">אובך</string>
+ <string name="weather_22">מעושן</string>
+ <string name="weather_23">רוחות עזות</string>
+ <string name="weather_24">סוער</string>
+ <string name="weather_25">קר</string>
+ <string name="weather_26">מעונן</string>
+ <string name="weather_29">מעונן חלקית</string>
+ <string name="weather_30">מעונן חלקית</string>
+ <string name="weather_31">בהיר</string>
+ <string name="weather_27">מעונן בדרך כלל</string>
+ <string name="weather_28">מעונן בדרך כלל</string>
+ <string name="weather_32">בהיר</string>
+ <string name="weather_35">גשם וברד</string>
+ <string name="weather_36">חם</string>
+ <string name="weather_37">סופות רעמים בודדות</string>
+ <string name="weather_38">סופות רעמים מפוזרות</string>
+ <string name="weather_39">סופות רעמים מפוזרות</string>
+ <string name="weather_40">ממטרים מפוזרים</string>
+ <string name="weather_41">שלג כבד</string>
+ <string name="weather_42">ממטרי שלג מפוזרים</string>
+ <string name="weather_43">שלג כבד</string>
+ <string name="weather_44">מעונן חלקית</string>
+ <string name="weather_45">סופות רעמים</string>
+ <string name="weather_46">ממטרי שלג</string>
+ <string name="weather_47">סופות רעמים בודדות</string>
+ <string name="weather_N">צ</string>
+ <string name="weather_NE">צ.מ.</string>
+ <string name="weather_E">מ</string>
+ <string name="weather_SE">ד.מ.</string>
+ <string name="weather_S">ד</string>
+ <string name="weather_SW">ד.מ.</string>
+ <string name="weather_W">מ</string>
+ <string name="weather_NW">צ.מ.</string>
+ <string name="weather_tap_to_refresh">לחץ כדי לרענן</string>
+ <string name="weather_33">נאה</string>
+ <string name="weather_34">נאה</string>
</resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index f4fe281..381378b 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -13,7 +13,6 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<!-- //device/apps/common/assets/res/any/strings.xml -->
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="byteShort" msgid="8340973892742019101">"B"</string>
@@ -44,8 +43,8 @@
<string name="mismatchPin" msgid="3695902225843339274">"De PIN-codes die u heeft ingevoerd, komen niet overeen."</string>
<string name="invalidPin" msgid="3850018445187475377">"Voer een PIN-code van 4 tot 8 cijfers in."</string>
<string name="invalidPuk" msgid="8761456210898036513">"Typ een PUK-code die 8 cijfers of langer is."</string>
- <string name="needPuk" msgid="919668385956251611">"Uw SIM-kaart is vergrendeld met de PUK-code. Typ de PUK-code om te ontgrendelen."</string>
- <string name="needPuk2" msgid="4526033371987193070">"Voer de PUK2-code in om de SIM-kaart te ontgrendelen."</string>
+ <string name="needPuk" msgid="919668385956251611">"Uw simkaart is vergrendeld met de PUK-code. Typ de PUK-code om te ontgrendelen."</string>
+ <string name="needPuk2" msgid="4526033371987193070">"Voer de PUK2-code in om de simkaart te ontgrendelen."</string>
<string name="ClipMmi" msgid="6952821216480289285">"Inkomende beller-id"</string>
<string name="ClirMmi" msgid="7784673673446833091">"Uitgaande beller-id"</string>
<string name="CfMmi" msgid="5123218989141573515">"Oproep doorschakelen"</string>
@@ -70,14 +69,14 @@
<string name="RestrictedOnEmergency" msgid="6581163779072833665">"Alarmservice is geblokkeerd."</string>
<string name="RestrictedOnNormal" msgid="4953867011389750673">"Spraakservice is geblokkeerd."</string>
<string name="RestrictedOnAllVoice" msgid="1459318899842232234">"Alle spraakservices zijn geblokkeerd."</string>
- <string name="RestrictedOnSms" msgid="8314352327461638897">"SMS-service is geblokkeerd."</string>
+ <string name="RestrictedOnSms" msgid="8314352327461638897">"Sms-service is geblokkeerd."</string>
<string name="RestrictedOnVoiceData" msgid="8244438624660371717">"Spraak-/gegevensservices zijn geblokkeerd."</string>
- <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"Spraak-/SMS-services zijn geblokkeerd."</string>
- <string name="RestrictedOnAll" msgid="2714924667937117304">"Alle spraak-/gegevens-/SMS-services zijn geblokkeerd."</string>
+ <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"Spraak-/sms-services zijn geblokkeerd."</string>
+ <string name="RestrictedOnAll" msgid="2714924667937117304">"Alle spraak-/gegevens-/sms-services zijn geblokkeerd."</string>
<string name="serviceClassVoice" msgid="1258393812335258019">"Spraak"</string>
<string name="serviceClassData" msgid="872456782077937893">"Gegevens"</string>
<string name="serviceClassFAX" msgid="5566624998840486475">"FAX"</string>
- <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
+ <string name="serviceClassSMS" msgid="2015460373701527489">"Sms"</string>
<string name="serviceClassDataAsync" msgid="4523454783498551468">"Asynchroon"</string>
<string name="serviceClassDataSync" msgid="7530000519646054776">"Synchroniseren"</string>
<string name="serviceClassPacket" msgid="6991006557993423453">"Pakket"</string>
@@ -149,16 +148,16 @@
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Stille modus"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Geluid is UIT"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Geluid is AAN"</string>
- <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Vliegmodus"</string>
- <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Vliegmodus is AAN"</string>
- <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Vliegmodus is UIT"</string>
+ <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Vliegtuigmodus"</string>
+ <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Vliegtuigmodus is AAN"</string>
+ <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Vliegtuigmodus is UIT"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999 +"</string>
<string name="safeMode" msgid="2788228061547930246">"Veilige modus"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android-systeem"</string>
<string name="permgrouplab_costMoney" msgid="5429808217861460401">"Services waarvoor u moet betalen"</string>
<string name="permgroupdesc_costMoney" msgid="8193824940620517189">"Toepassingen toestaan activiteiten uit te voeren waarvoor mogelijk kosten in rekening worden gebracht."</string>
<string name="permgrouplab_messages" msgid="7521249148445456662">"Uw berichten"</string>
- <string name="permgroupdesc_messages" msgid="7045736972019211994">"SMS, e-mail en andere berichten lezen en schrijven."</string>
+ <string name="permgroupdesc_messages" msgid="7045736972019211994">"Sms, e-mail en andere berichten lezen en schrijven."</string>
<string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Uw persoonlijke informatie"</string>
<string name="permgroupdesc_personalInfo" product="tablet" msgid="6975389054186265786">"Rechtstreekse toegang tot de op uw tablet opgeslagen contacten en agenda."</string>
<string name="permgroupdesc_personalInfo" product="default" msgid="5488050357388806068">"Rechtstreekse toegang tot de op uw telefoon opgeslagen contacten en agenda."</string>
@@ -187,22 +186,22 @@
<string name="permdesc_expandStatusBar" msgid="7088604400110768665">"Hiermee kan de app de statusbalk uitvouwen of samenvouwen."</string>
<string name="permlab_processOutgoingCalls" msgid="1136262550878335980">"uitgaande oproepen onderscheppen"</string>
<string name="permdesc_processOutgoingCalls" msgid="2228988201852654461">"Hiermee kan een app uitgaande oproepen verwerken en het nummer wijzigen dat wordt gebeld. Schadelijke apps kunnen uitgaande oproepen bijhouden, omleiden of tegenhouden."</string>
- <string name="permlab_receiveSms" msgid="2697628268086208535">"SMS ontvangen"</string>
- <string name="permdesc_receiveSms" msgid="6298292335965966117">"Hiermee kan een app SMS-berichten ontvangen en verwerken. Schadelijke apps kunnen uw berichten bijhouden of deze verwijderen zonder dat u ze te zien krijgt."</string>
- <string name="permlab_receiveMms" msgid="8894700916188083287">"MMS ontvangen"</string>
- <string name="permdesc_receiveMms" msgid="4563346832000174373">"Hiermee kan een app MMS-berichten ontvangen en verwerken. Schadelijke apps kunnen uw berichten bijhouden of deze verwijderen zonder dat u ze te zien krijgt."</string>
+ <string name="permlab_receiveSms" msgid="2697628268086208535">"Sms ontvangen"</string>
+ <string name="permdesc_receiveSms" msgid="6298292335965966117">"Hiermee kan een app sms-berichten ontvangen en verwerken. Schadelijke apps kunnen uw berichten bijhouden of deze verwijderen zonder dat u ze te zien krijgt."</string>
+ <string name="permlab_receiveMms" msgid="8894700916188083287">"Mms ontvangen"</string>
+ <string name="permdesc_receiveMms" msgid="4563346832000174373">"Hiermee kan een app mms-berichten ontvangen en verwerken. Schadelijke apps kunnen uw berichten bijhouden of deze verwijderen zonder dat u ze te zien krijgt."</string>
<string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"noodberichten ontvangen"</string>
<string name="permdesc_receiveEmergencyBroadcast" msgid="7118393393716546131">"Hiermee kan een app noodberichten ontvangen en verwerken. Deze toestemming is alleen beschikbaar voor systeemapps."</string>
- <string name="permlab_sendSms" msgid="5600830612147671529">"SMS-berichten verzenden"</string>
- <string name="permdesc_sendSms" msgid="1946540351763502120">"Hiermee kan de app SMS-berichten verzenden. Schadelijke apps kunnen u geld kosten door berichten te verzenden zonder uw toestemming."</string>
+ <string name="permlab_sendSms" msgid="5600830612147671529">"Sms-berichten verzenden"</string>
+ <string name="permdesc_sendSms" msgid="1946540351763502120">"Hiermee kan de app sms-berichten verzenden. Schadelijke apps kunnen u geld kosten door berichten te verzenden zonder uw toestemming."</string>
<string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"zonder toestemming sms\'jes verzenden"</string>
<string name="permdesc_sendSmsNoConfirmation" msgid="4477752891276276168">"Hiermee kan de app sms\'jes verzenden. Schadelijke apps kunnen u geld kosten door zonder uw toestemming berichten te verzenden."</string>
- <string name="permlab_readSms" msgid="4085333708122372256">"SMS of MMS lezen"</string>
- <string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Hiermee kan een app de op uw tablet of SIM-kaart opgeslagen SMS-berichten lezen. Schadelijke apps kunnen uw vertrouwelijke berichten mogelijk lezen."</string>
- <string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Hiermee kan een app de op uw telefoon of SIM-kaart opgeslagen SMS-berichten lezen. Schadelijke apps kunnen uw vertrouwelijke berichten mogelijk lezen."</string>
- <string name="permlab_writeSms" msgid="6881122575154940744">"SMS of MMS bewerken"</string>
- <string name="permdesc_writeSms" product="tablet" msgid="5332124772918835437">"Hiermee kan een app naar de op uw tablet of SIM-kaart opgeslagen SMS-berichten schrijven. Schadelijke apps kunnen uw berichten mogelijk verwijderen."</string>
- <string name="permdesc_writeSms" product="default" msgid="6299398896177548095">"Hiermee kan een app naar de op uw telefoon of SIM-kaart opgeslagen SMS-berichten schrijven. Schadelijke apps kunnen uw berichten mogelijk verwijderen."</string>
+ <string name="permlab_readSms" msgid="4085333708122372256">"Sms of mms lezen"</string>
+ <string name="permdesc_readSms" product="tablet" msgid="5836710350295631545">"Hiermee kan een app de op uw tablet of simkaart opgeslagen sms-berichten lezen. Schadelijke apps kunnen uw vertrouwelijke berichten mogelijk lezen."</string>
+ <string name="permdesc_readSms" product="default" msgid="3002170087197294591">"Hiermee kan een app de op uw telefoon of simkaart opgeslagen sms-berichten lezen. Schadelijke apps kunnen uw vertrouwelijke berichten mogelijk lezen."</string>
+ <string name="permlab_writeSms" msgid="6881122575154940744">"Sms of mms bewerken"</string>
+ <string name="permdesc_writeSms" product="tablet" msgid="5332124772918835437">"Hiermee kan een app naar de op uw tablet of simkaart opgeslagen sms-berichten schrijven. Schadelijke apps kunnen uw berichten mogelijk verwijderen."</string>
+ <string name="permdesc_writeSms" product="default" msgid="6299398896177548095">"Hiermee kan een app naar de op uw telefoon of simkaart opgeslagen sms-berichten schrijven. Schadelijke apps kunnen uw berichten mogelijk verwijderen."</string>
<string name="permlab_receiveWapPush" msgid="8258226427716551388">"WAP ontvangen"</string>
<string name="permdesc_receiveWapPush" msgid="5979623826128082171">"Hiermee kan een app WAP-berichten ontvangen en verwerken. Schadelijke apps kunnen uw berichten bijhouden of deze verwijderen zonder dat u ze te zien krijgt."</string>
<string name="permlab_getTasks" msgid="5005277531132573353">"actieve apps ophalen"</string>
@@ -235,10 +234,10 @@
<string name="permdesc_runSetActivityWatcher" msgid="2149363027173451218">"Hiermee kan een app de manier waarop het systeem activiteiten start, bijhouden en beheren. Schadelijke apps kunnen het systeem volledig in gevaar brengen. Deze machtiging is alleen voor ontwikkeling vereist, nooit voor normaal gebruik."</string>
<string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"melding verzenden dat pakket is verwijderd"</string>
<string name="permdesc_broadcastPackageRemoved" msgid="3453286591439891260">"Hiermee kan een app een melding verzenden dat een app-pakket (APK) is verwijderd. Schadelijke apps kunnen hiervan gebruik maken om alle andere actieve apps af te sluiten."</string>
- <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"melding over ontvangen SMS-bericht verzenden"</string>
- <string name="permdesc_broadcastSmsReceived" msgid="9122419277306740155">"Hiermee kan een app een melding verzenden dat een SMS-bericht is ontvangen. Schadelijke apps kunnen hiervan gebruik maken om inkomende SMS-berichten te vervalsen."</string>
+ <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"melding over ontvangen sms-bericht verzenden"</string>
+ <string name="permdesc_broadcastSmsReceived" msgid="9122419277306740155">"Hiermee kan een app een melding verzenden dat een sms-bericht is ontvangen. Schadelijke apps kunnen hiervan gebruik maken om inkomende sms-berichten te vervalsen."</string>
<string name="permlab_broadcastWapPush" msgid="3145347413028582371">"melding over ontvangen WAP-PUSH-bericht verzenden"</string>
- <string name="permdesc_broadcastWapPush" msgid="3955303669461378091">"Hiermee kan een app een melding verzenden dat een WAP PUSH-bericht is ontvangen. Schadelijke apps kunnen hiervan gebruik maken om een valse MMS-ontvangst te melden of de inhoud van willekeurige webpagina\'s door schadelijke varianten te vervangen."</string>
+ <string name="permdesc_broadcastWapPush" msgid="3955303669461378091">"Hiermee kan een app een melding verzenden dat een WAP PUSH-bericht is ontvangen. Schadelijke apps kunnen hiervan gebruik maken om een valse mms-ontvangst te melden of de inhoud van willekeurige webpagina\'s door schadelijke varianten te vervangen."</string>
<string name="permlab_setProcessLimit" msgid="2451873664363662666">"aantal actieve processen beperken"</string>
<string name="permdesc_setProcessLimit" msgid="7824786028557379539">"Hiermee kan een app het maximum aantal processen bepalen dat wordt uitgevoerd. Nooit vereist voor normale apps."</string>
<string name="permlab_setAlwaysFinish" msgid="5342837862439543783">"alle achtergrondapps sluiten"</string>
@@ -590,7 +589,7 @@
<string name="phoneTypeWorkMobile" msgid="1311426989184065709">"Mobiel werk"</string>
<string name="phoneTypeWorkPager" msgid="649938731231157056">"Pager werk"</string>
<string name="phoneTypeAssistant" msgid="5596772636128562884">"Assistent"</string>
- <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
+ <string name="phoneTypeMms" msgid="7254492275502768992">"Mms"</string>
<string name="eventTypeCustom" msgid="7837586198458073404">"Aangepast"</string>
<string name="eventTypeBirthday" msgid="2813379844211390740">"Verjaardag"</string>
<string name="eventTypeAnniversary" msgid="3876779744518284000">"Jubileum"</string>
@@ -664,10 +663,10 @@
<string name="lockscreen_charged" msgid="4938930459620989972">"Opgeladen."</string>
<string name="lockscreen_battery_short" msgid="3617549178603354656">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="lockscreen_low_battery" msgid="1482873981919249740">"Sluit de oplader aan."</string>
- <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Geen SIM-kaart."</string>
- <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Geen SIM-kaart in tablet."</string>
- <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Geen SIM-kaart in telefoon."</string>
- <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Plaats een SIM-kaart."</string>
+ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Geen simkaart."</string>
+ <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Geen simkaart in tablet."</string>
+ <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Geen simkaart in telefoon."</string>
+ <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Plaats een simkaart."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="7138450788301444298">"De simkaart ontbreekt of kan niet worden gelezen. Plaats een simkaart."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="1631853574702335453">"Uw simkaart is permanent uitgeschakeld."\n" Neem contact op met uw draadloze serviceprovider voor een nieuwe simkaart."</string>
<string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Knop voor vorig nummer"</string>
@@ -677,10 +676,10 @@
<string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Knop voor stoppen"</string>
<string name="emergency_calls_only" msgid="6733978304386365407">"Alleen noodoproepen"</string>
<string name="lockscreen_network_locked_message" msgid="143389224986028501">"Netwerk vergrendeld"</string>
- <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-kaart is vergrendeld met PUK-code."</string>
+ <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Simkaart is vergrendeld met PUK-code."</string>
<string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Raadpleeg de gebruikershandleiding of neem contact op met de klantenservice."</string>
- <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIM-kaart is vergrendeld."</string>
- <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"SIM-kaart ontgrendelen\u2026"</string>
+ <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"Simkaart is vergrendeld."</string>
+ <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"Simkaart ontgrendelen\u2026"</string>
<string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="3514742106066877476">"U heeft uw ontgrendelingspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. "\n\n"Probeer het over <xliff:g id="NUMBER_1">%d</xliff:g> seconden opnieuw."</string>
<string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="4906034376425175381">"U heeft uw wachtwoord <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist ingevoerd. "\n\n"Probeer het over <xliff:g id="NUMBER_1">%d</xliff:g> seconden opnieuw."</string>
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6827749231465145590">"U heeft uw PIN-code <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist ingevoerd. "\n\n"Probeer het over <xliff:g id="NUMBER_1">%d</xliff:g> seconden opnieuw."</string>
@@ -958,9 +957,7 @@
<item quantity="one" msgid="1634101450343277345">"Open Wi-Fi-netwerk beschikbaar"</item>
<item quantity="other" msgid="7915895323644292768">"Open Wi-Fi-netwerken beschikbaar"</item>
</plurals>
- <string name="wifi_available_sign_in" msgid="9157196203958866662">"Aanmelden bij wifi-netwerk"</string>
- <!-- no translation found for wifi_available_sign_in_detailed (6797764740339907572) -->
- <skip />
+ <string name="wifi_available_sign_in" msgid="9157196203958866662">"Aanmelden bij Wi-Fi-netwerk"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Kan geen verbinding maken met Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="4917472096696322767">" heeft een slechte internetverbinding."</string>
<string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
@@ -973,8 +970,8 @@
<string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Aanraken voor instellingen"</string>
<string name="select_character" msgid="3365550120617701745">"Teken invoegen"</string>
<string name="sms_control_default_app_name" msgid="7630529934366549163">"Onbekende app"</string>
- <string name="sms_control_title" msgid="7296612781128917719">"SMS-berichten verzenden"</string>
- <string name="sms_control_message" msgid="1289331457999236205">"Er wordt een groot aantal SMS-berichten verzonden. Selecteer \'OK\' om door te gaan of \'Annuleren\' om de verzending te stoppen."</string>
+ <string name="sms_control_title" msgid="7296612781128917719">"Sms-berichten verzenden"</string>
+ <string name="sms_control_message" msgid="1289331457999236205">"Er wordt een groot aantal sms-berichten verzonden. Selecteer \'OK\' om door te gaan of \'Annuleren\' om de verzending te stoppen."</string>
<string name="sms_control_yes" msgid="2532062172402615953">"OK"</string>
<string name="sms_control_no" msgid="1715320703137199869">"Annuleren"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Simkaart verwijderd"</string>
@@ -1224,7 +1221,8 @@
<string name="launchBrowserDefault" msgid="2057951947297614725">"Browser starten?"</string>
<string name="SetupCallDefault" msgid="6870275517518479651">"Oproep accepteren?"</string>
- <!-- CyanogenMod additions -->
+ <!-- CYANOGENMOD EDITS -->
+
<string name="reboot_system" product="tablet">Tablet herstarten</string>
<string name="reboot_system" product="default">Telefoon herstarten</string>
<string name="global_action_screenshot">Beeldschermafdruk</string>
@@ -1233,4 +1231,88 @@
<string name="reboot_confirm">Uw telefoon zal worden herstart.</string>
<string name="global_action_reboot">Herstarten</string>
<string name="app_killed_message">App geforceerd afgesloten</string>
+ <string name="roamingTextAirplaneMode">Vliegtuigmodus</string>
+ <string name="global_action_choose_profile">Profiel</string>
+ <string name="permlab_preventpower">Aan-/uitknop wijzigen</string>
+ <string name="permdesc_preventpower">Staat een app toe het gedrag van de aan-/uitknop te wijzigen</string>
+
+ <!-- Names of default profiles. -->
+ <string name="profileNameDefault">Standaard</string>
+ <string name="profileNameWork">Werk</string>
+ <string name="profileNameHome">Thuis</string>
+ <string name="profileNameSilent">Stil</string>
+ <string name="profileNameNight">Nacht</string>
+
+ <!-- Names of application groups. -->
+ <string name="profileGroupPhone">Telefoon</string>
+ <string name="profileGroupCalendar">Agenda</string>
+ <string name="profileGroupGmail">Gmail</string>
+ <string name="profileGroupEmail">E-mail</string>
+ <string name="profileGroupSMS">Sms</string>
+
+ <!-- Name of wildcard profile. -->
+ <string name="wildcardProfile">Anders</string>
+
+ <!-- Lock screen Weather - Weather codes -->
+ <string name="weather_0">Tornado</string>
+ <string name="weather_1">Tropische storm</string>
+ <string name="weather_2">Tropische cycloon</string>
+ <string name="weather_3">Zwaar onweer</string>
+ <string name="weather_4">Onweer</string>
+ <string name="weather_5">Regen en sneeuw</string>
+ <string name="weather_6">Regen en natte sneeuw</string>
+ <string name="weather_7">Sneeuw en natte sneeuw</string>
+ <string name="weather_8">IJzel</string>
+ <string name="weather_9">Motregen</string>
+ <string name="weather_10">Aanvriezende regen</string>
+ <string name="weather_11">Buien</string>
+ <string name="weather_12">Buien</string>
+ <string name="weather_13">Sneeuwjacht</string>
+ <string name="weather_14">Lichte sneeuwbuien</string>
+ <string name="weather_15">Sneeuwstorm</string>
+ <string name="weather_16">Sneeuw</string>
+ <string name="weather_17">Hagel</string>
+ <string name="weather_18">Natte sneeuw</string>
+ <string name="weather_19">Stof</string>
+ <string name="weather_20">Mistig</string>
+ <string name="weather_21">Heiig</string>
+ <string name="weather_22">Walmend</string>
+ <string name="weather_23">Stormachtig</string>
+ <string name="weather_24">Waaierig</string>
+ <string name="weather_25">Koud</string>
+ <string name="weather_26">Bewolkt</string>
+ <string name="weather_27">Overwegend bewolkt</string>
+ <string name="weather_28">Overwegend bewolkt</string>
+ <string name="weather_29">Deels bewolkt</string>
+ <string name="weather_30">Deels bewolkt</string>
+ <string name="weather_31">Helder</string>
+ <string name="weather_32">Zonnig</string>
+ <string name="weather_33">Mooi</string>
+ <string name="weather_34">Mooi</string>
+ <string name="weather_35">Regen en hagel</string>
+ <string name="weather_36">Heet</string>
+ <string name="weather_37">Geïsoleerde onweersbuien</string>
+ <string name="weather_38">Verspreide onweersbuien</string>
+ <string name="weather_39">Verspreide onweersbuien</string>
+ <string name="weather_40">Verspreide buien</string>
+ <string name="weather_41">Hevige sneeuwbuien</string>
+ <string name="weather_42">Verspreide sneeuwbuien</string>
+ <string name="weather_43">Hevige sneeuwbuien</string>
+ <string name="weather_44">Deels bewolkt</string>
+ <string name="weather_45">Onweersbuien</string>
+ <string name="weather_46">Sneeuwstormen</string>
+ <string name="weather_47">Geïsoleerde onweersbuien</string>
+
+ <!-- Lock screen Weather - Wind directions -->
+ <string name="weather_N">N</string>
+ <string name="weather_NE">NO</string>
+ <string name="weather_E">O</string>
+ <string name="weather_SE">ZO</string>
+ <string name="weather_S">Z</string>
+ <string name="weather_SW">ZW</string>
+ <string name="weather_W">W</string>
+ <string name="weather_NW">NW</string>
+
+ <!-- Lock screen Weather - error messages -->
+ <string name="weather_tap_to_refresh">Vernieuwen</string>
</resources>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index a99ff72..1f046e2 100755
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1286,7 +1286,7 @@
<string name="weather_3">Tempestades Fortes</string>
<string name="weather_4">Tempestades</string>
<string name="weather_5">Chuva e Neve Misturados</string>
- <string name="weather_6">Chuva e Geada Mistulados</string>
+ <string name="weather_6">Chuva e Geada Misturados</string>
<string name="weather_7">Neve e Geada Misturados</string>
<string name="weather_8">Chuvisco Congelante</string>
<string name="weather_9">Chuvisco</string>
@@ -1338,4 +1338,4 @@
<string name="weather_W">O</string>
<string name="weather_NW">NO</string>
<string name="weather_tap_to_refresh">Aperte para atualizar</string>
-</resources> \ No newline at end of file
+</resources>
diff --git a/include/media/stagefright/LPAPlayer.h b/include/media/stagefright/LPAPlayer.h
index 0326d97..2db4b10 100644
--- a/include/media/stagefright/LPAPlayer.h
+++ b/include/media/stagefright/LPAPlayer.h
@@ -88,6 +88,7 @@ private:
bool isPaused;
bool mSeeked;
bool a2dpDisconnectPause;
+ bool a2dpResumeAfterReConnect;
bool a2dpThreadStarted;
volatile bool asyncReset;
bool eventThreadCreated;
@@ -270,6 +271,7 @@ private:
bool mSeeking;
bool mInternalSeeking;
bool mReachedEOS;
+ bool mReachedOutputEOS;
status_t mFinalStatus;
int64_t mSeekTimeUs;
int64_t mPauseTime;
diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp
index a95d00f..47db263 100644
--- a/libs/binder/Parcel.cpp
+++ b/libs/binder/Parcel.cpp
@@ -1060,10 +1060,11 @@ int32_t Parcel::readExceptionCode() const
{
int32_t exception_code = readAligned<int32_t>();
if (exception_code == EX_HAS_REPLY_HEADER) {
+ int32_t header_start = dataPosition();
int32_t header_size = readAligned<int32_t>();
// Skip over fat responses headers. Not used (or propagated) in
// native code
- setDataPosition(dataPosition() + header_size);
+ setDataPosition(header_start + header_size);
// And fat response headers are currently only used when there are no
// exceptions, so return no error:
return 0;
diff --git a/media/libstagefright/LPAPlayer.cpp b/media/libstagefright/LPAPlayer.cpp
index 2167fde..752667d 100644
--- a/media/libstagefright/LPAPlayer.cpp
+++ b/media/libstagefright/LPAPlayer.cpp
@@ -70,6 +70,7 @@ mObserver(observer),
AudioPlayer(audioSink,observer) {
LOGV("LPAPlayer::LPAPlayer() ctor");
a2dpDisconnectPause = false;
+ a2dpResumeAfterReConnect = false;
mSeeked = false;
objectsAlive++;
timeStarted = 0;
@@ -507,6 +508,7 @@ void LPAPlayer::resume() {
mReachedEOS = false;
mSeekTimeUs = timePlayed;
a2dpDisconnectPause = false;
+ a2dpResumeAfterReConnect = true;
mAudioSink->start();
pthread_cond_signal(&decoder_cv);
pthread_cond_signal(&a2dp_cv);
@@ -776,6 +778,13 @@ void LPAPlayer::decoderThreadEntry() {
//Queue up the buffers for writing either for A2DP or LPA Driver
else {
struct msm_audio_aio_buf aio_buf_local;
+ if(bIsA2DPEnabled && isPaused){
+ pthread_mutex_lock(&mem_response_mutex);
+ buf.bytesToWrite = 0;
+ memBuffersResponseQueue.push_back(buf);
+ pthread_mutex_unlock(&mem_response_mutex);
+ continue;
+ }
int numOfBytes = 0;
if (bIsA2DPEnabled)
@@ -1142,6 +1151,19 @@ void LPAPlayer::A2DPThreadEntry() {
//Seeked: break out of loop, flush old buffers and write new buffers
LOGV("@_@bytes To write1:%d",bytesToWrite);
}
+ /* Incase of A2DP disconnect and connects back flushing all the buffers
+ which are decoded by fillbuffer and not sent to A2DP */
+ if( a2dpResumeAfterReConnect == true )
+ {
+ a2dpResumeAfterReConnect = false;
+ while (!memBuffersResponseQueue.empty()) {
+ List<BuffersAllocated>::iterator it = memBuffersResponseQueue.begin();
+ BuffersAllocated buf = *it;
+ memBuffersRequestQueue.push_back(buf);
+ memBuffersResponseQueue.erase(it);
+ }
+ break;
+ }
if (mSeeked) {
LOGV("Seeking A2DP Playback");
break;
@@ -1497,7 +1519,14 @@ realTimeOffset = 0;
return mPositionTimeMediaUs + realTimeOffset;
*/
- LOGV("getMediaTimeUs() isPaused %d timeStarted %d timePlayed %d", isPaused, timeStarted, timePlayed);
+ /* When A2DP connects in the middile timePlayed will be updated to the
+ number of buffer played from zero which will be non-zero value
+ incase if user does not perform any seek operation timePlayed will be
+ willbe non-zero and which will effect the seekbar after playback
+ to resolve this sending zero when the EOS reached and A2DP enable */
+ if( isPaused && bIsA2DPEnabled && mReachedEOS )
+ return 0;
+ LOGV("getMediaTimeUs() isPaused %d timeStarted %lld timePlayed %lld", isPaused, timeStarted, timePlayed);
if (isPaused || timeStarted == 0) {
return timePlayed;
} else {
diff --git a/media/libstagefright/LPAPlayerALSA.cpp b/media/libstagefright/LPAPlayerALSA.cpp
index 30d13dd..8965cd3 100755
--- a/media/libstagefright/LPAPlayerALSA.cpp
+++ b/media/libstagefright/LPAPlayerALSA.cpp
@@ -61,6 +61,7 @@ static const char mName[] = "LPAPlayer";
#define SIGNAL_EVENT_THREAD 2
#define PCM_FORMAT 2
#define NUM_FDS 2
+#define LPA_SESSION_ID 1
namespace android {
int LPAPlayer::objectsAlive = 0;
@@ -80,6 +81,7 @@ mNumA2DPBytesPlayed(0),
mSeeking(false),
mInternalSeeking(false),
mReachedEOS(false),
+mReachedOutputEOS(false),
mFinalStatus(OK),
mStarted(false),
mIsFirstBuffer(false),
@@ -115,6 +117,7 @@ AudioPlayer(audioSink,observer) {
a2dpThreadStarted = true;
asyncReset = false;
+ sessionId = LPA_SESSION_ID;
bEffectConfigChanged = false;
initCheck = true;
@@ -302,6 +305,7 @@ void LPAPlayer::handleA2DPSwitch() {
mInternalSeeking = true;
mNumA2DPBytesPlayed = 0;
mReachedEOS = false;
+ mReachedOutputEOS = false;
pthread_cond_signal(&a2dp_notification_cv);
} else {
if (isPaused)
@@ -378,7 +382,7 @@ status_t LPAPlayer::start(bool sourceAlreadyStarted) {
if (!bIsA2DPEnabled) {
LOGV("Opening a routing session for audio playback: sessionId = %d mSampleRate %d numChannels %d",
sessionId, mSampleRate, numChannels);
- status_t err = mAudioSink->openSession(AUDIO_FORMAT_PCM_16_BIT, 1, mSampleRate, numChannels);
+ status_t err = mAudioSink->openSession(AUDIO_FORMAT_PCM_16_BIT, sessionId, mSampleRate, numChannels);
if (err != OK) {
if (mFirstBuffer != NULL) {
mFirstBuffer->release();
@@ -483,6 +487,7 @@ status_t LPAPlayer::seekTo(int64_t time_us) {
LOGV("seekTo: time_us %ld", time_us);
if ( mReachedEOS ) {
mReachedEOS = false;
+ mReachedOutputEOS = false;
}
mSeeking = true;
@@ -765,6 +770,7 @@ void LPAPlayer::reset() {
mSeeking = false;
mInternalSeeking = false;
mReachedEOS = false;
+ mReachedOutputEOS = false;
mFinalStatus = OK;
mStarted = false;
}
@@ -777,10 +783,9 @@ bool LPAPlayer::isSeeking() {
bool LPAPlayer::reachedEOS(status_t *finalStatus) {
*finalStatus = OK;
-
Mutex::Autolock autoLock(mLock);
*finalStatus = mFinalStatus;
- return mReachedEOS;
+ return mReachedOutputEOS;
}
@@ -870,6 +875,7 @@ void LPAPlayer::decoderThreadEntry() {
all input buffers have been decoded and response queue is empty*/
if(mObserver && mReachedEOS && memBuffersResponseQueue.empty()) {
LOGV("Posting EOS event..zero byte buffer and response queue is empty");
+ mReachedOutputEOS = true;
mObserver->postAudioEOS();
}
continue;
@@ -1004,6 +1010,7 @@ void LPAPlayer::eventThreadEntry() {
LOGV("Timeout %d: Posting EOS event to AwesomePlayer",timeout);
isPaused = true;
mPauseTime = mSeekTimeUs + getTimeStamp(A2DP_DISABLED);
+ mReachedOutputEOS = true;
mObserver->postAudioEOS();
audioEOSPosted = true;
timeout = -1;
@@ -1080,7 +1087,8 @@ void LPAPlayer::A2DPThreadEntry() {
//TODO: Remove this
pthread_mutex_lock(&mem_response_mutex);
- if (memBuffersResponseQueue.empty() || !mAudioSinkOpen || isPaused || !bIsA2DPEnabled) {
+ if (memBuffersResponseQueue.empty() || !mAudioSinkOpen || isPaused
+ || !bIsA2DPEnabled || mReachedOutputEOS) {
LOGV("A2DPThreadEntry:: responseQ empty %d mAudioSinkOpen %d isPaused %d bIsA2DPEnabled %d",
memBuffersResponseQueue.empty(), mAudioSinkOpen, isPaused, bIsA2DPEnabled);
LOGV("A2DPThreadEntry:: Waiting on a2dp_cv");
@@ -1152,6 +1160,7 @@ void LPAPlayer::A2DPThreadEntry() {
}
if (mObserver && !asyncReset && mReachedEOS && memBuffersResponseQueue.empty()) {
LOGV("Posting EOS event to AwesomePlayer");
+ mReachedOutputEOS = true;
mObserver->postAudioEOS();
}
pthread_mutex_lock(&mem_request_mutex);
@@ -1318,6 +1327,7 @@ void LPAPlayer::A2DPNotificationThreadEntry() {
else {
mInternalSeeking = true;
mReachedEOS = false;
+ mReachedOutputEOS = false;
mSeekTimeUs += getTimeStamp(A2DP_DISCONNECT);
mNumA2DPBytesPlayed = 0;
pthread_cond_signal(&a2dp_cv);
@@ -1700,6 +1710,7 @@ void LPAPlayer::onPauseTimeOut() {
// 1.) Set seek flags
mInternalSeeking = true;
mReachedEOS = false;
+ mReachedOutputEOS = false;
mSeekTimeUs += getTimeStamp(A2DP_DISABLED);
// 2.) Flush the buffers and transfer everything to request queue
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_settings_view.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_settings_view.xml
index abe01ee..b315432 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_settings_view.xml
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar_settings_view.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
* Copyright (C) 2010 The Android Open Source Project
+ * This code has been modified. Portions copyright (C) 2012 ParanoidAndroid Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -28,23 +29,23 @@
android:orientation="vertical"
>
- <!-- Airplane mode -->
+ <!-- Toggle 1 -->
<LinearLayout
- android:id="@+id/airplane"
+ android:id="@+id/toggle_1"
style="@style/StatusBarPanelSettingsRow"
>
<ImageView
- android:id="@+id/airplane_icon"
+ android:id="@+id/toggle_1_icon"
style="@style/StatusBarPanelSettingsIcon"
android:src="@drawable/ic_sysbar_airplane_on"
/>
<TextView
- android:id="@+id/airplane_label"
+ android:id="@+id/toggle_1_label"
style="@style/StatusBarPanelSettingsContents"
android:text="@string/status_bar_settings_airplane"
/>
<Switch
- android:id="@+id/airplane_checkbox"
+ android:id="@+id/toggle_1_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
@@ -53,23 +54,23 @@
</LinearLayout>
<View style="@style/StatusBarPanelSettingsPanelSeparator" />
- <!-- Network -->
+ <!-- Toggle 2 -->
<LinearLayout
- android:id="@+id/network"
+ android:id="@+id/toggle_2"
style="@style/StatusBarPanelSettingsRow"
>
<ImageView
- android:id="@+id/network_icon"
+ android:id="@+id/toggle_2_icon"
style="@style/StatusBarPanelSettingsIcon"
android:src="@drawable/ic_sysbar_wifi_on"
/>
<TextView
- android:id="@+id/network_label"
+ android:id="@+id/toggle_2_label"
style="@style/StatusBarPanelSettingsContents"
android:text="@string/status_bar_settings_wifi_button"
/>
<Switch
- android:id="@+id/wifi_checkbox"
+ android:id="@+id/toggle_2_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
@@ -78,23 +79,23 @@
</LinearLayout>
<View style="@style/StatusBarPanelSettingsPanelSeparator" />
- <!-- Bluetooth -->
+ <!-- Toggle 3 -->
<LinearLayout
- android:id="@+id/bluetooth"
+ android:id="@+id/toggle_3"
style="@style/StatusBarPanelSettingsRow"
>
<ImageView
- android:id="@+id/bluetooth_icon"
+ android:id="@+id/toggle_3_icon"
style="@style/StatusBarPanelSettingsIcon"
android:src="@drawable/stat_sys_data_bluetooth"
/>
<TextView
- android:id="@+id/bluetooth_label"
+ android:id="@+id/toggle_3_label"
style="@style/StatusBarPanelSettingsContents"
android:text="@string/status_bar_settings_bluetooth_button"
/>
<Switch
- android:id="@+id/bluetooth_checkbox"
+ android:id="@+id/toggle_3_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
@@ -103,23 +104,73 @@
</LinearLayout>
<View style="@style/StatusBarPanelSettingsPanelSeparator" />
- <!-- Rotation lock -->
+ <!-- Toggle 4 -->
<LinearLayout
- android:id="@+id/rotate"
+ android:id="@+id/toggle_4"
style="@style/StatusBarPanelSettingsRow"
>
<ImageView
- android:id="@+id/rotate_icon"
+ android:id="@+id/toggle_4_icon"
style="@style/StatusBarPanelSettingsIcon"
android:src="@drawable/ic_sysbar_rotate_on"
/>
<TextView
- android:id="@+id/rotate_label"
+ android:id="@+id/toggle_4_label"
style="@style/StatusBarPanelSettingsContents"
android:text="@string/status_bar_settings_auto_rotation"
/>
<Switch
- android:id="@+id/rotate_checkbox"
+ android:id="@+id/toggle_4_checkbox"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:layout_marginRight="5dp"
+ />
+ </LinearLayout>
+ <View style="@style/StatusBarPanelSettingsPanelSeparator" />
+
+ <!-- Toggle 5 -->
+ <LinearLayout
+ android:id="@+id/toggle_5"
+ style="@style/StatusBarPanelSettingsRow"
+ >
+ <ImageView
+ android:id="@+id/toggle_5_icon"
+ style="@style/StatusBarPanelSettingsIcon"
+ android:src="@drawable/stat_gps_on"
+ />
+ <TextView
+ android:id="@+id/toggle_5_label"
+ style="@style/StatusBarPanelSettingsContents"
+ android:text="@string/status_bar_settings_location"
+ />
+ <Switch
+ android:id="@+id/toggle_5_checkbox"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:layout_marginRight="5dp"
+ />
+ </LinearLayout>
+ <View style="@style/StatusBarPanelSettingsPanelSeparator" />
+
+ <!-- Toggle 6 -->
+ <LinearLayout
+ android:id="@+id/toggle_6"
+ style="@style/StatusBarPanelSettingsRow"
+ >
+ <ImageView
+ android:id="@+id/toggle_6_icon"
+ style="@style/StatusBarPanelSettingsIcon"
+ android:src="@drawable/stat_flashlight_on"
+ />
+ <TextView
+ android:id="@+id/toggle_6_label"
+ style="@style/StatusBarPanelSettingsContents"
+ android:text="@string/status_bar_settings_flashlight"
+ />
+ <Switch
+ android:id="@+id/toggle_6_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 3cef79e..d3e573d 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -1,28 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright (c) 2009, The Android Open Source 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.
- */
- -->
+<!-- Copyright (C) 2009 The Android Open Source Project
+ Copyright (C) 2012 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 xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="7164937344850004466">"Systeem-UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"Wissen"</string>
<string name="status_bar_do_not_disturb_button" msgid="5812628897510997853">"Niet storen"</string>
- <string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Meldingen weergeven"</string>
+ <string name="status_bar_please_disturb_button" msgid="3345398298841572813">"Meldingen tonen"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Verwijderen uit lijst"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App-info"</string>
<string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Geen recente apps"</string>
@@ -41,7 +38,7 @@
<string name="battery_low_why" msgid="7279169609518386372">"Accugebruik"</string>
<string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Instellingen"</string>
<string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
- <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Vliegmodus"</string>
+ <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Vliegtuigmodus"</string>
<string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Scherm automatisch draaien"</string>
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"DEMPEN"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
@@ -55,15 +52,15 @@
<string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"<xliff:g id="ACTIVITY">%1$s</xliff:g> openen wanneer dit USB-accessoire wordt aangesloten?"</string>
<string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Er werken geen geïnstalleerde apps met dit USB-accessoire. Meer informatie op: <xliff:g id="URL">%1$s</xliff:g>"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"USB-accessoire"</string>
- <string name="label_view" msgid="6304565553218192990">"Weergeven"</string>
+ <string name="label_view" msgid="6304565553218192990">"Tonen"</string>
<string name="always_use_device" msgid="1450287437017315906">"Standaard gebruiken voor dit USB-apparaat"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Standaard gebruiken voor dit USB-accessoire"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Zoom om scherm te vullen"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Rek uit v. schermvulling"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"Compatibiliteitszoom"</string>
- <string name="compat_mode_help_body" msgid="4946726776359270040">"Wanneer een app is ontworpen voor een kleiner scherm, wordt naast de klok een zoomknop weergegeven."</string>
- <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Schermafbeelding opslaan..."</string>
- <string name="screenshot_saving_title" msgid="8242282144535555697">"Schermafbeelding opslaan..."</string>
+ <string name="compat_mode_help_body" msgid="4946726776359270040">"Wanneer een app is ontworpen voor een kleiner scherm, wordt naast de klok een zoomknop getoond."</string>
+ <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Schermafbeelding opslaan\u2026"</string>
+ <string name="screenshot_saving_title" msgid="8242282144535555697">"Schermafbeelding opslaan\u2026"</string>
<string name="screenshot_saving_text" msgid="2419718443411738818">"Schermafbeelding wordt opgeslagen."</string>
<string name="screenshot_saved_title" msgid="6461865960961414961">"Schermafbeelding gemaakt."</string>
<string name="screenshot_saved_text" msgid="1152839647677558815">"Raak aan om uw schermafbeelding te bekijken."</string>
@@ -97,10 +94,10 @@
<string name="accessibility_data_two_bars" msgid="6166018492360432091">"Gegevens: twee streepjes."</string>
<string name="accessibility_data_three_bars" msgid="9167670452395038520">"Gegevens: drie streepjes."</string>
<string name="accessibility_data_signal_full" msgid="2708384608124519369">"Gegevenssignaal is op volle sterkte."</string>
- <string name="accessibility_no_wifi" msgid="7455607460517331976">"Geen wifi."</string>
- <string name="accessibility_wifi_one_bar" msgid="6854947280074467207">"Wifi: één streepje."</string>
- <string name="accessibility_wifi_two_bars" msgid="3344340012058984348">"Wifi: twee streepjes."</string>
- <string name="accessibility_wifi_three_bars" msgid="928322805193265041">"Wifi: drie streepjes."</string>
+ <string name="accessibility_no_wifi" msgid="7455607460517331976">"Geen Wi-Fi."</string>
+ <string name="accessibility_wifi_one_bar" msgid="6854947280074467207">"Wi-Fi: één streepje."</string>
+ <string name="accessibility_wifi_two_bars" msgid="3344340012058984348">"Wi-Fi: twee streepjes."</string>
+ <string name="accessibility_wifi_three_bars" msgid="928322805193265041">"Wi-Fi: drie streepjes."</string>
<string name="accessibility_wifi_signal_full" msgid="1275764416228473932">"Wi-Fi-signaal is op volledige sterkte."</string>
<string name="accessibility_no_wimax" msgid="4329180129727630368">"Geen WiMAX."</string>
<string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX: één streepje."</string>
@@ -113,10 +110,10 @@
<string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
<string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
- <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wifi"</string>
+ <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"Geen simkaart."</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-tethering."</string>
- <string name="accessibility_airplane_mode" msgid="834748999790763092">"Vliegmodus."</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Vliegtuigmodus."</string>
<string name="accessibility_battery_level" msgid="7451474187113371965">"Accu: <xliff:g id="NUMBER">%d</xliff:g> procent."</string>
<string name="accessibility_settings_button" msgid="799583911231893380">"Systeeminstellingen."</string>
<string name="accessibility_notifications_button" msgid="4498000369779421892">"Meldingen."</string>
@@ -138,4 +135,17 @@
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Zoeken naar GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Locatie bepaald met GPS"</string>
<string name="accessibility_clear_all" msgid="5235938559247164925">"Alle meldingen wissen."</string>
+
+ <!-- CYANOGENMOD EDITS -->
+
+ <!-- Dialog title for navigation bar button selection -->
+ <string name="navbar_dialog_title">Kies de toe te wijzen functie</string>
+ <string name="navbar_home_button">Thuisknop</string>
+ <string name="navbar_recent_button">Recentknop</string>
+ <string name="navbar_search_button">Zoekknop</string>
+ <string name="navbar_back_button">Terugknop</string>
+ <string name="navbar_empty_button">Functieloze knop</string>
+ <string name="navbar_menu_conditional_button">Menuknop (altijd verbergen)</string>
+ <string name="navbar_menu_always_button">Menuknop (altijd tonen)</string>
+ <string name="navbar_menu_big_button">Menuknop</string>
</resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 4f8cc6b..664bfb1 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -109,6 +109,21 @@
<!-- Label in the system panel for airplane mode (all radios are turned off)[CHAR LIMIT=30] -->
<string name="status_bar_settings_airplane">Airplane mode</string>
+ <!-- Label in the system panel for gps state [CHAR LIMIT=30] -->
+ <string name="status_bar_settings_location">GPS</string>
+
+ <!-- Label in the system panel for flashlight state [CHAR LIMIT=30] -->
+ <string name="status_bar_settings_flashlight">LED flashlight</string>
+
+ <!-- Label in the system panel for mobile data state [CHAR LIMIT=30] -->
+ <string name="status_bar_settings_mobile_data">Mobile data</string>
+
+ <!-- Label in the system panel for network mode [CHAR LIMIT=30] -->
+ <string name="status_bar_settings_network_mode">2G/3G</string>
+
+ <!-- Label in the system panel for sound [CHAR LIMIT=30] -->
+ <string name="status_bar_settings_sound_mode">Sound</string>
+
<!-- Label in system panel saying the device will use the orientation sensor to rotate [CHAR LIMIT=30] -->
<string name="status_bar_settings_auto_rotation">Auto-rotate screen</string>
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 761808c..8708104 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -1610,8 +1610,6 @@ public class PhoneStatusBar extends StatusBar {
} else {
mLinger++;
}
- } else {
- mLinger = 0;
}
}
} else {
@@ -1620,6 +1618,7 @@ public class PhoneStatusBar extends StatusBar {
}
} else if (action == MotionEvent.ACTION_UP
|| action == MotionEvent.ACTION_CANCEL) {
+ mLinger = 0;
mVelocityTracker.computeCurrentVelocity(1000);
float yVel = mVelocityTracker.getYVelocity();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java
index b794826..011990c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BrightnessController.java
@@ -58,8 +58,7 @@ public class BrightnessController implements ToggleSlider.Listener {
}
control.setChecked(automatic != 0);
} else {
- control.setChecked(false);
- //control.hideToggle();
+ control.hideToggle();
}
int value;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java
new file mode 100644
index 0000000..a7ef2f0
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightController.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2011 The CyanogenMod Project
+ * This code has been modified. Portions copyright (C) 2012 ParanoidAndroid 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.
+ */
+
+package com.android.systemui.statusbar.policy;
+
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.provider.Settings;
+import android.widget.CompoundButton;
+
+import com.android.systemui.R;
+
+public class FlashlightController implements CompoundButton.OnCheckedChangeListener {
+ private static final String TAG = "StatusBar.FlashlightController";
+
+ private Context mContext;
+ private CompoundButton mCheckBox;
+
+ private boolean mFlashLight;
+
+ public FlashlightController(Context context, CompoundButton checkbox) {
+ mContext = context;
+ mFlashLight = getFlashLight();
+ mCheckBox = checkbox;
+ checkbox.setChecked(mFlashLight);
+ checkbox.setOnCheckedChangeListener(this);
+ }
+
+ public void onCheckedChanged(CompoundButton view, boolean checked) {
+ Intent i = new Intent("net.cactii.flash2.TOGGLE_FLASHLIGHT");
+ i.putExtra("bright", !checked);
+ mContext.sendBroadcast(i);
+ }
+
+ private boolean getFlashLight() {
+ ContentResolver cr = mContext.getContentResolver();
+ return Settings.System.getInt(cr, Settings.System.TORCH_STATE, 0) == 1;
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java
index bb326fe..eb51188 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java
@@ -22,6 +22,7 @@ import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -29,6 +30,7 @@ import android.location.LocationManager;
import android.provider.Settings;
import android.util.Slog;
import android.view.View;
+import android.widget.CompoundButton;
import android.widget.ImageView;
// private NM API
@@ -37,15 +39,31 @@ import com.android.internal.statusbar.StatusBarNotification;
import com.android.systemui.R;
-public class LocationController extends BroadcastReceiver {
+public class LocationController extends BroadcastReceiver implements CompoundButton.OnCheckedChangeListener {
private static final String TAG = "StatusBar.LocationController";
private static final int GPS_NOTIFICATION_ID = 374203-122084;
private Context mContext;
+ private CompoundButton mCheckBox;
private INotificationManager mNotificationService;
+ private boolean mGps;
+
+ public LocationController(Context context, CompoundButton checkbox) {
+ this(context);
+ mContext = context;
+ mGps = getGps();
+ mCheckBox = checkbox;
+ checkbox.setChecked(mGps);
+ checkbox.setOnCheckedChangeListener(this);
+ }
+
+ public void onCheckedChanged(CompoundButton view, boolean checked) {
+ Settings.Secure.setLocationProviderEnabled(mContext.getContentResolver(), LocationManager.GPS_PROVIDER, checked);
+ }
+
public LocationController(Context context) {
mContext = context;
@@ -59,6 +77,15 @@ public class LocationController extends BroadcastReceiver {
mNotificationService = nm.getService();
}
+ private boolean getGps() {
+ ContentResolver cr = mContext.getContentResolver();
+ return Settings.Secure.isLocationProviderEnabled(cr, LocationManager.GPS_PROVIDER);
+ }
+
+ public void release() {
+ mContext.unregisterReceiver(this);
+ }
+
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileDataController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileDataController.java
new file mode 100644
index 0000000..d2122e9
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileDataController.java
@@ -0,0 +1,38 @@
+package com.android.systemui.statusbar.policy;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.provider.Settings;
+import android.widget.CompoundButton;
+import android.net.ConnectivityManager;
+
+import com.android.systemui.R;
+
+public class MobileDataController implements CompoundButton.OnCheckedChangeListener {
+ private static final String TAG = "StatusBar.MobileDataController";
+
+ private Context mContext;
+ private CompoundButton mCheckBox;
+
+ private boolean mMobileData;
+
+ public MobileDataController(Context context, CompoundButton checkbox) {
+ mContext = context;
+ mMobileData = getMobileData();
+ mCheckBox = checkbox;
+ checkbox.setChecked(mMobileData);
+ checkbox.setOnCheckedChangeListener(this);
+ }
+
+ public void onCheckedChanged(CompoundButton view, boolean checked) {
+ ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
+ cm.setMobileDataEnabled(checked);
+ }
+
+ private boolean getMobileData() {
+ ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
+ return cm.getMobileDataEnabled();
+ }
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkModeController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkModeController.java
new file mode 100644
index 0000000..d44f11f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkModeController.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2011 The CyanogenMod Project
+ * This code has been modified. Portions copyright (C) 2012 ParanoidAndroid 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.
+ */
+
+package com.android.systemui.statusbar.policy;
+
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.provider.Settings;
+import android.view.View;
+import android.widget.CompoundButton;
+import com.android.internal.telephony.Phone;
+
+import com.android.systemui.R;
+
+public class NetworkModeController implements CompoundButton.OnCheckedChangeListener {
+ private static final String TAG = "StatusBar.NetworkModeController";
+
+ private Context mContext;
+ private CompoundButton mCheckBox;
+
+ private boolean mNetworkMode;
+
+ public NetworkModeController(Context context, CompoundButton checkbox) {
+ mContext = context;
+ mNetworkMode = getNetworkMode();
+ mCheckBox = checkbox;
+ checkbox.setChecked(mNetworkMode);
+ checkbox.setOnCheckedChangeListener(this);
+ }
+
+ public void onCheckedChanged(CompoundButton view, boolean checked) {
+ int networkType = checked ? Phone.NT_MODE_WCDMA_PREF : Phone.NT_MODE_GSM_ONLY;
+ Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.PREFERRED_NETWORK_MODE, networkType);
+ }
+
+ private boolean getNetworkMode() {
+ int state = 99;
+ try {
+ state = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.PREFERRED_NETWORK_MODE);
+ } catch (Exception e) {}
+ return networkModeToState(state);
+ }
+
+ private static boolean networkModeToState(int state) {
+ switch(state) {
+ case Phone.NT_MODE_WCDMA_PREF:
+ return true;
+ case Phone.NT_MODE_GSM_ONLY:
+ return false;
+ }
+ return false;
+ }
+}
+
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SoundController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SoundController.java
new file mode 100644
index 0000000..3d89f7b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SoundController.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2012 ParanoidAndroid 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.
+ */
+
+package com.android.systemui.statusbar.policy;
+
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.provider.Settings;
+import android.widget.CompoundButton;
+import android.media.AudioManager;
+import android.content.IntentFilter;
+
+import com.android.systemui.R;
+
+public class SoundController extends BroadcastReceiver implements CompoundButton.OnCheckedChangeListener {
+ private static final String TAG = "StatusBar.SoundController";
+
+ private Context mContext;
+ private CompoundButton mCheckBox;
+
+ private boolean mSoundMode;
+
+ public SoundController(Context context, CompoundButton checkbox) {
+ this(context);
+ mContext = context;
+ mSoundMode = getSoundMode();
+ mCheckBox = checkbox;
+ checkbox.setChecked(mSoundMode);
+ checkbox.setOnCheckedChangeListener(this);
+ }
+
+ public SoundController(Context context) {
+ mContext = context;
+
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);
+ context.registerReceiver(this, filter);
+ }
+
+ public void release() {
+ mContext.unregisterReceiver(this);
+ }
+
+ public void onCheckedChanged(CompoundButton view, boolean checked) {
+ AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+ am.setRingerMode(checked ? AudioManager.RINGER_MODE_NORMAL : AudioManager.RINGER_MODE_SILENT);
+ }
+
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (AudioManager.RINGER_MODE_CHANGED_ACTION.equals(action)) {
+ mCheckBox.setChecked(getSoundMode());
+ }
+ }
+
+ private boolean getSoundMode() {
+ AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+ switch (am.getRingerMode()) {
+ case AudioManager.RINGER_MODE_SILENT:
+ return false;
+ case AudioManager.RINGER_MODE_NORMAL:
+ return true;
+ }
+ return false;
+ }
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ToggleSlider.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ToggleSlider.java
index fe2ec69..2700739 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ToggleSlider.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ToggleSlider.java
@@ -23,6 +23,7 @@ import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Slog;
import android.view.View;
+import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
@@ -75,6 +76,19 @@ public class ToggleSlider extends RelativeLayout
a.recycle();
}
+ /* @hide */
+ public void hideToggle() {
+ /* Using View.GONE makes the slider disappear */
+ ViewGroup.LayoutParams params = mToggle.getLayoutParams();
+ params.width = 0;
+ params.height = 0;
+ mToggle.setLayoutParams(params);
+ mToggle.setVisibility(View.INVISIBLE);
+
+ /* We can use GONE on the label though */
+ mLabel.setVisibility(View.GONE);
+ }
+
public void onCheckedChanged(CompoundButton toggle, boolean checked) {
Drawable thumb;
Drawable slider;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsView.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsView.java
index 3372333..d0f9449 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/SettingsView.java
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2010 The Android Open Source Project
+ * This code has been modified. Portions copyright (C) 2012 ParanoidAndroid Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,13 +18,16 @@
package com.android.systemui.statusbar.tablet;
import android.app.StatusBarManager;
+import android.database.ContentObserver;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
+import android.os.Handler;
import android.provider.Settings;
import android.util.AttributeSet;
import android.util.Slog;
-import android.widget.LinearLayout;
import android.view.View;
+import android.widget.LinearLayout;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
@@ -37,63 +41,220 @@ import com.android.systemui.statusbar.policy.DoNotDisturbController;
import com.android.systemui.statusbar.policy.ToggleSlider;
import com.android.systemui.statusbar.policy.VolumeController;
import com.android.systemui.statusbar.policy.WifiController;
-
+import com.android.systemui.statusbar.policy.LocationController;
+import com.android.systemui.statusbar.policy.FlashlightController;
+import com.android.systemui.statusbar.policy.MobileDataController;
+import com.android.systemui.statusbar.policy.NetworkModeController;
+import com.android.systemui.statusbar.policy.SoundController;
public class SettingsView extends LinearLayout implements View.OnClickListener {
static final String TAG = "SettingsView";
+ private static final String NO_TOGGLES = "no_toggles";
+ private static final int[] TOGGLE_ID_ARRAY = new int[6];
+ private static final int AIRPLANE_ID = 0;
+ private static final int ROTATE_ID = 1;
+ private static final int BLUETOOTH_ID = 2;
+ private static final int GPS_ID = 3;
+ private static final int WIFI_ID = 4;
+ private static final int FLASHLIGHT_ID = 5;
+ private static final int MOBILE_DATA_ID = 6;
+ private static final int NETWORK_MODE_ID = 7;
+ private static final int SOUND_ID = 8;
+
+ private static final int[] mToggleIds = new int[]{
+ R.id.toggle_1, R.id.toggle_2, R.id.toggle_3, R.id.toggle_4, R.id.toggle_5, R.id.toggle_6};
+ private static final int[] mToggleIcons = new int[]{
+ R.id.toggle_1_icon, R.id.toggle_2_icon, R.id.toggle_3_icon, R.id.toggle_4_icon, R.id.toggle_5_icon, R.id.toggle_6_icon};
+ private static final int[] mToggleLabels = new int[]{
+ R.id.toggle_1_label, R.id.toggle_2_label, R.id.toggle_3_label, R.id.toggle_4_label, R.id.toggle_5_label, R.id.toggle_6_label};
+ private static final int[] mToggleCheckBoxes = new int[]{
+ R.id.toggle_1_checkbox, R.id.toggle_2_checkbox, R.id.toggle_3_checkbox, R.id.toggle_4_checkbox, R.id.toggle_5_checkbox, R.id.toggle_6_checkbox};
+
+ private static final String[] KEY_TOGGLES = new String[]{"pref_airplane_toggle", "pref_rotate_toggle", "pref_bluetooth_toggle", "pref_gps_toggle", "pref_wifi_toggle", "pref_flashlight_toggle", "pref_mobile_data_toggle", "pref_network_mode_toggle", "pref_sound_toggle"};
+
+ private static final String BUTTON_DELIMITER = "\\|";
+ private static final String BUTTONS_DEFAULT = KEY_TOGGLES[0]
+ + BUTTON_DELIMITER + KEY_TOGGLES[4]
+ + BUTTON_DELIMITER + KEY_TOGGLES[2]
+ + BUTTON_DELIMITER + KEY_TOGGLES[1];
+
AirplaneModeController mAirplane;
AutoRotateController mRotate;
+ BluetoothController mBluetooth;
BrightnessController mBrightness;
DoNotDisturbController mDoNotDisturb;
- BluetoothController mBluetooth;
+ FlashlightController mFlashLight;
+ LocationController mGps;
+ MobileDataController mMobileData;
+ NetworkModeController mNetworkMode;
+ SoundController mSound;
WifiController mWifi;
+ private Context mContext;
+ private Handler mHandler;
+ private String mToggleContainer;
+ private String[] mToggles;
+
+ private final class SettingsObserver extends ContentObserver {
+ SettingsObserver(Handler handler) {
+ super(handler);
+ }
+
+ void observe() {
+ ContentResolver resolver = getContext().getContentResolver();
+ resolver.registerContentObserver(Settings.System.getUriFor(
+ Settings.System.WIDGET_BUTTONS_TABLET), false, this);
+ updateToggleContainer();
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ updateToggleContainer();
+ }
+
+ void updateToggleContainer(){
+ mToggleContainer = Settings.System.getString(getContext().getContentResolver(), Settings.System.WIDGET_BUTTONS_TABLET);
+ }
+ }
+
public SettingsView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public SettingsView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
+ mContext = getContext();
+ mHandler = new Handler();
+ SettingsObserver settingsObserver = new SettingsObserver(mHandler);
+ settingsObserver.observe();
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- final Context context = getContext();
-
- mAirplane = new AirplaneModeController(context,
- (CompoundButton)findViewById(R.id.airplane_checkbox));
- findViewById(R.id.network).setOnClickListener(this);
- findViewById(R.id.bluetooth).setOnClickListener(this);
- mBluetooth = new BluetoothController(context,
- (CompoundButton)findViewById(R.id.bluetooth_checkbox));
- mWifi = new WifiController(context,
- (CompoundButton)findViewById(R.id.wifi_checkbox));
- mRotate = new AutoRotateController(context,
- (CompoundButton)findViewById(R.id.rotate_checkbox));
- mBrightness = new BrightnessController(context,
- (ToggleSlider)findViewById(R.id.brightness));
- mDoNotDisturb = new DoNotDisturbController(context,
- (CompoundButton)findViewById(R.id.do_not_disturb_checkbox));
+ mBrightness = new BrightnessController(mContext, (ToggleSlider)findViewById(R.id.brightness));
+ mDoNotDisturb = new DoNotDisturbController(mContext, (CompoundButton)findViewById(R.id.do_not_disturb_checkbox));
+
+ if(mToggleContainer == null)
+ mToggleContainer = BUTTONS_DEFAULT;
+ if(!mToggleContainer.equals(NO_TOGGLES)){
+ updateToggles();
+
+ int mLastVisible = mToggles.length;
+ for(int i=0; i<mToggleIds.length; i++){
+ if(i<mLastVisible)
+ findViewById(mToggleIds[i]).setOnClickListener(this);
+ else
+ findViewById(mToggleIds[i]).setVisibility(View.GONE);
+ }
+ } else {
+ for(int i=0; i<mToggleIds.length; i++){
+ findViewById(mToggleIds[i]).setVisibility(View.GONE);
+ }
+ }
findViewById(R.id.settings).setOnClickListener(this);
}
+ private void updateToggles(){
+ mToggles = mToggleContainer.split("\\|");
+ for(int i=0; i<mToggles.length; i++){
+ String mToggleName = mToggles[i].replace("\\", "");
+ int[] resources = getResourcesById(mToggleName);
+ setToggleResources(mToggleIds[i], mToggleIcons[i], mToggleLabels[i], resources[0], resources[1]);
+ TOGGLE_ID_ARRAY[i] = resources[2];
+ setToggleController(mToggleName, mToggleCheckBoxes[i]);
+ }
+ }
+
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
- mAirplane.release();
+ if(mAirplane != null)
+ mAirplane.release();
+ if(mGps != null)
+ mGps.release();
+ if(mSound != null)
+ mSound.release();
mDoNotDisturb.release();
}
+ private void setToggleController(String id, int mCheckbox){
+ if(id.equals(KEY_TOGGLES[0]))
+ mAirplane = new AirplaneModeController(mContext, (CompoundButton)findViewById(mCheckbox));
+ else if(id.equals(KEY_TOGGLES[1]))
+ mRotate = new AutoRotateController(mContext, (CompoundButton)findViewById(mCheckbox));
+ else if(id.equals(KEY_TOGGLES[2]))
+ mBluetooth = new BluetoothController(mContext, (CompoundButton)findViewById(mCheckbox));
+ else if(id.equals(KEY_TOGGLES[3]))
+ mGps = new LocationController(mContext, (CompoundButton)findViewById(mCheckbox));
+ else if(id.equals(KEY_TOGGLES[4]))
+ mWifi = new WifiController(mContext, (CompoundButton)findViewById(mCheckbox));
+ else if(id.equals(KEY_TOGGLES[5]))
+ mFlashLight = new FlashlightController(mContext, (CompoundButton)findViewById(mCheckbox));
+ else if(id.equals(KEY_TOGGLES[6]))
+ mMobileData = new MobileDataController(mContext, (CompoundButton)findViewById(mCheckbox));
+ else if(id.equals(KEY_TOGGLES[7]))
+ mNetworkMode = new NetworkModeController(mContext, (CompoundButton)findViewById(mCheckbox));
+ else if(id.equals(KEY_TOGGLES[8]))
+ mSound = new SoundController(mContext, (CompoundButton)findViewById(mCheckbox));
+ }
+
+ private int[] getResourcesById(String id){
+ if(id.equals(KEY_TOGGLES[0]))
+ return new int[]{R.drawable.ic_sysbar_airplane_on, R.string.status_bar_settings_airplane, AIRPLANE_ID};
+ else if(id.equals(KEY_TOGGLES[1]))
+ return new int[]{R.drawable.ic_sysbar_rotate_on, R.string.status_bar_settings_auto_rotation, ROTATE_ID};
+ else if(id.equals(KEY_TOGGLES[2]))
+ return new int[]{R.drawable.stat_sys_data_bluetooth, R.string.status_bar_settings_bluetooth_button, BLUETOOTH_ID};
+ else if(id.equals(KEY_TOGGLES[3]))
+ return new int[]{R.drawable.stat_gps_on, R.string.status_bar_settings_location, GPS_ID};
+ else if(id.equals(KEY_TOGGLES[4]))
+ return new int[]{R.drawable.ic_sysbar_wifi_on, R.string.status_bar_settings_wifi_button, WIFI_ID};
+ else if(id.equals(KEY_TOGGLES[5]))
+ return new int[]{R.drawable.stat_flashlight_on, R.string.status_bar_settings_flashlight, FLASHLIGHT_ID};
+ else if(id.equals(KEY_TOGGLES[6]))
+ return new int[]{R.drawable.stat_data_on, R.string.status_bar_settings_mobile_data, MOBILE_DATA_ID};
+ else if(id.equals(KEY_TOGGLES[7]))
+ return new int[]{R.drawable.stat_2g3g_on, R.string.status_bar_settings_network_mode, NETWORK_MODE_ID};
+ else if(id.equals(KEY_TOGGLES[8]))
+ return new int[]{R.drawable.stat_ring_on, R.string.status_bar_settings_sound_mode, SOUND_ID};
+ else
+ return new int[]{0, 0};
+ }
+
+ private void setToggleResources(int resourceId, int resourceIcon, int resourceLabel, int newResourceIcon, int newResourceLabel){
+ LinearLayout mToggle = (LinearLayout) findViewById(resourceId);
+ ImageView mToggleImageView = (ImageView) mToggle.findViewById(resourceIcon);
+ mToggleImageView.setImageResource(newResourceIcon);
+ TextView mToggleTextView = (TextView) mToggle.findViewById(resourceLabel);
+ mToggleTextView.setText(newResourceLabel);
+ }
+
+ private StatusBarManager getStatusBarManager() {
+ return (StatusBarManager)getContext().getSystemService(Context.STATUS_BAR_SERVICE);
+ }
+
public void onClick(View v) {
switch (v.getId()) {
- case R.id.network:
- onClickNetwork();
+ case R.id.toggle_1:
+ onClickToggle(TOGGLE_ID_ARRAY[0]);
+ break;
+ case R.id.toggle_2:
+ onClickToggle(TOGGLE_ID_ARRAY[1]);
+ break;
+ case R.id.toggle_3:
+ onClickToggle(TOGGLE_ID_ARRAY[2]);
break;
- case R.id.bluetooth:
- onClickBluetooth();
+ case R.id.toggle_4:
+ onClickToggle(TOGGLE_ID_ARRAY[3]);
+ break;
+ case R.id.toggle_5:
+ onClickToggle(TOGGLE_ID_ARRAY[4]);
+ break;
+ case R.id.toggle_6:
+ onClickToggle(TOGGLE_ID_ARRAY[5]);
break;
case R.id.settings:
onClickSettings();
@@ -101,23 +262,42 @@ public class SettingsView extends LinearLayout implements View.OnClickListener {
}
}
- private StatusBarManager getStatusBarManager() {
- return (StatusBarManager)getContext().getSystemService(Context.STATUS_BAR_SERVICE);
- }
-
- // Network
- // ----------------------------
- private void onClickNetwork() {
- getContext().startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)
- .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
- getStatusBarManager().collapse();
- }
-
-// Bluetooth
- // ----------------------------
- private void onClickBluetooth() {
- getContext().startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS)
- .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+ /*
+ * OnClickListener for custom toggles
+ */
+ private void onClickToggle(int id) {
+ switch(id){
+ case WIFI_ID:
+ getContext().startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)
+ .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+ break;
+ case BLUETOOTH_ID:
+ getContext().startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS)
+ .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+ break;
+ case GPS_ID:
+ getContext().startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
+ .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+ break;
+ case FLASHLIGHT_ID:
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.setClassName("net.cactii.flash2", "net.cactii.flash2.MainActivity");
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ getContext().startActivity(intent);
+ break;
+ case MOBILE_DATA_ID:
+ getContext().startActivity(new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS)
+ .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+ break;
+ case NETWORK_MODE_ID:
+ getContext().startActivity(new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS)
+ .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+ break;
+ case SOUND_ID:
+ getContext().startActivity(new Intent(Settings.ACTION_SOUND_SETTINGS)
+ .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+ break;
+ }
getStatusBarManager().collapse();
}
diff --git a/policy/src/com/android/internal/policy/impl/LockScreen.java b/policy/src/com/android/internal/policy/impl/LockScreen.java
index 5ee84d3..410fb9e 100755
--- a/policy/src/com/android/internal/policy/impl/LockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/LockScreen.java
@@ -33,7 +33,9 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.Resources.NotFoundException;
+import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.InsetDrawable;
@@ -493,6 +495,8 @@ class LockScreen extends LinearLayout implements KeyguardScreen {
inflater.inflate(R.layout.keyguard_screen_tab_unlock_land, this, true);
}
+ setBackground(mContext, (ViewGroup) findViewById(R.id.root));
+
mStatusViewManager = new KeyguardStatusViewManager(this, mUpdateMonitor, mLockPatternUtils,
mCallback, false);
@@ -537,6 +541,27 @@ class LockScreen extends LinearLayout implements KeyguardScreen {
+ (mUnlockWidget.isHardwareAccelerated() ? "on":"off"));
}
+ static void setBackground(Context context, ViewGroup layout) {
+ String lockBack = Settings.System.getString(context.getContentResolver(), Settings.System.LOCKSCREEN_BACKGROUND);
+ if (lockBack != null) {
+ if (!lockBack.isEmpty()) {
+ try {
+ layout.setBackgroundColor(Integer.parseInt(lockBack));
+ } catch(NumberFormatException e) {
+ e.printStackTrace();
+ }
+ } else {
+ try {
+ Context settingsContext = context.createPackageContext("com.android.settings", 0);
+ String wallpaperFile = settingsContext.getFilesDir() + "/lockwallpaper";
+ Bitmap background = BitmapFactory.decodeFile(wallpaperFile);
+ layout.setBackgroundDrawable(new BitmapDrawable(background));
+ } catch (NameNotFoundException e) {
+ }
+ }
+ }
+ }
+
private boolean isSilentMode() {
return mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL;
}
diff --git a/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java b/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
index dcfdb39..6b89711 100644
--- a/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java
@@ -38,6 +38,7 @@ import android.text.method.TextKeyListener;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
@@ -97,7 +98,7 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen
} else {
layoutInflater.inflate(R.layout.keyguard_screen_password_landscape, this, true);
}
-
+ LockScreen.setBackground(context, (ViewGroup) findViewById(R.id.root));
mStatusViewManager = new KeyguardStatusViewManager(this, mUpdateMonitor, mLockPatternUtils,
mCallback, true);
diff --git a/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java b/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java
index 9a6d2cc..e366f23 100644
--- a/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java
+++ b/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java
@@ -24,6 +24,7 @@ import android.security.KeyStore;
import android.view.LayoutInflater;
import android.view.View;
import android.view.MotionEvent;
+import android.view.ViewGroup;
import android.widget.Button;
import android.util.Log;
import com.android.internal.R;
@@ -169,7 +170,7 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient
Log.d(TAG, "landscape mode");
inflater.inflate(R.layout.keyguard_screen_unlock_landscape, this, true);
}
-
+ LockScreen.setBackground(context, (ViewGroup) findViewById(R.id.root));
mKeyguardStatusViewManager = new KeyguardStatusViewManager(this, mUpdateMonitor,
mLockPatternUtils, mCallback, true);
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index df8792d..0faf367 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -868,6 +868,8 @@ bool AudioFlinger::masterMute() const
#ifdef WITH_QCOM_LPA
status_t AudioFlinger::setSessionVolume(int stream, float left, float right)
{
+ AutoMutex lock(mLock);
+
mLPALeftVol = left;
mLPARightVol = right;
if( (mLPAOutput != NULL) && (mLPAStreamType == stream) ) {
diff --git a/services/input/InputDispatcher.cpp b/services/input/InputDispatcher.cpp
index 7303392..652166d 100644
--- a/services/input/InputDispatcher.cpp
+++ b/services/input/InputDispatcher.cpp
@@ -1390,28 +1390,35 @@ int32_t InputDispatcher::findTouchedWindowTargetsLocked(nsecs_t currentTime,
// New window supports splitting.
isSplit = true;
} else if (isSplit) {
- // New window does not support splitting but we have already split events.
- // Assign the pointer to the first foreground window we find.
- // (May be NULL which is why we put this code block before the next check.)
- newTouchedWindowHandle = mTempTouchState.getFirstForegroundWindowHandle();
+ // Ignore the new window.
+ newTouchedWindowHandle = NULL;
}
- // If we did not find a touched window then fail.
+ // Handle the case where we did not find a window.
if (newTouchedWindowHandle == NULL) {
- if (mFocusedApplicationHandle != NULL) {
+ // Try to assign the pointer to the first foreground window we find, if there is one.
+ newTouchedWindowHandle = mTempTouchState.getFirstForegroundWindowHandle();
+ if (newTouchedWindowHandle == NULL) {
+ // There is no touched window. If this is an initial down event
+ // then wait for a window to appear that will handle the touch. This is
+ // to ensure that we report an ANR in the case where an application has started
+ // but not yet put up a window and the user is starting to get impatient.
+ if (maskedAction == AMOTION_EVENT_ACTION_DOWN
+ && mFocusedApplicationHandle != NULL) {
#if DEBUG_FOCUS
- LOGD("Waiting because there is no touched window but there is a "
- "focused application that may eventually add a new window: %s.",
- getApplicationWindowLabelLocked(mFocusedApplicationHandle, NULL).string());
+ LOGD("Waiting because there is no touched window but there is a "
+ "focused application that may eventually add a new window: %s.",
+ getApplicationWindowLabelLocked(
+ mFocusedApplicationHandle, NULL).string());
#endif
- injectionResult = handleTargetsNotReadyLocked(currentTime, entry,
- mFocusedApplicationHandle, NULL, nextWakeupTime);
- goto Unresponsive;
+ injectionResult = handleTargetsNotReadyLocked(currentTime, entry,
+ mFocusedApplicationHandle, NULL, nextWakeupTime);
+ goto Unresponsive;
+ }
+ LOGI("Dropping event because there is no touched window.");
+ injectionResult = INPUT_EVENT_INJECTION_FAILED;
+ goto Failed;
}
-
- LOGI("Dropping event because there is no touched window or focused application.");
- injectionResult = INPUT_EVENT_INJECTION_FAILED;
- goto Failed;
}
// Set target flags.
diff --git a/services/input/InputReader.cpp b/services/input/InputReader.cpp
index a04c585..c66e7a1 100644
--- a/services/input/InputReader.cpp
+++ b/services/input/InputReader.cpp
@@ -2909,7 +2909,7 @@ void TouchInputMapper::configureSurface(nsecs_t when, bool* outResetNeeded) {
mOrientedRanges.distance.min =
mRawPointerAxes.distance.minValue * mDistanceScale;
mOrientedRanges.distance.max =
- mRawPointerAxes.distance.minValue * mDistanceScale;
+ mRawPointerAxes.distance.maxValue * mDistanceScale;
mOrientedRanges.distance.flat = 0;
mOrientedRanges.distance.fuzz =
mRawPointerAxes.distance.fuzz * mDistanceScale;
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 058cc7c..25b520b 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -371,7 +371,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
Settings.Secure.ENABLED_INPUT_METHODS), false, this);
resolver.registerContentObserver(Settings.Secure.getUriFor(
Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE), false, this);
- resolver.registerContentObserver(Settings.Secure.getUriFor(
+ resolver.registerContentObserver(Settings.System.getUriFor(
Settings.System.STATUS_BAR_IME_SWITCHER),
false, new ContentObserver(null) {
public void onChange(boolean selfChange) {
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 6510636..3bed489 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -1771,7 +1771,7 @@ public final class ActivityManagerService extends ActivityManagerNative
if (cr.binding != null && cr.binding.service != null
&& cr.binding.service.app != null
&& cr.binding.service.app.lruSeq != mLruSeq) {
- updateLruProcessInternalLocked(cr.binding.service.app, oomAdj,
+ updateLruProcessInternalLocked(cr.binding.service.app, false,
updateActivityTime, i+1);
}
}
@@ -1779,7 +1779,7 @@ public final class ActivityManagerService extends ActivityManagerNative
if (app.conProviders.size() > 0) {
for (ContentProviderRecord cpr : app.conProviders.keySet()) {
if (cpr.proc != null && cpr.proc.lruSeq != mLruSeq) {
- updateLruProcessInternalLocked(cpr.proc, oomAdj,
+ updateLruProcessInternalLocked(cpr.proc, false,
updateActivityTime, i+1);
}
}
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index 351dbb8..86d3a1a 100644
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -1314,7 +1314,10 @@ final class ActivityStack {
// If we are sleeping, and there is no resumed activity, and the top
// activity is paused, well that is the state we want.
if ((mService.mSleeping || mService.mShuttingDown)
- && mLastPausedActivity == next && next.state == ActivityState.PAUSED) {
+ && mLastPausedActivity == next
+ && (next.state == ActivityState.PAUSED
+ || next.state == ActivityState.STOPPED
+ || next.state == ActivityState.STOPPING)) {
// Make sure we have executed any pending transitions, since there
// should be nothing left to do at this point.
mService.mWindowManager.executeAppTransition();
diff --git a/services/java/com/android/server/location/NMEAParser.java b/services/java/com/android/server/location/NMEAParser.java
index 90bbe84..4acbf26 100644
--- a/services/java/com/android/server/location/NMEAParser.java
+++ b/services/java/com/android/server/location/NMEAParser.java
@@ -18,9 +18,7 @@ package com.android.server.location;
import java.text.ParseException;
import java.text.SimpleDateFormat;
-import java.util.Calendar;
import java.util.Date;
-import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.TimeZone;
import java.util.regex.Matcher;
@@ -37,7 +35,6 @@ public class NMEAParser {
// NMEA sentence pattern
private final Pattern sentencePattern = Pattern.compile("\\$([^*$]{5,})(\\*\\w{2})?");
private final SimpleDateFormat timeFormatter = new SimpleDateFormat("HHmmss.S");
- private final TimeZone mLocalTZ = TimeZone.getDefault();
private HashMap<String,ParseInterface> parseMap = new HashMap<String,ParseInterface>();
private String provider;
@@ -80,7 +77,6 @@ public class NMEAParser {
private boolean mSatsReady = true;
private Location loc = new Location(provider);
- private GregorianCalendar currCalendar = new GregorianCalendar();
/**
* @param prov Location provider name
@@ -163,13 +159,7 @@ public class NMEAParser {
private long parseTimeToDate(String time) {
try {
Date btTime = timeFormatter.parse(time);
- //System.currentTimeMillis()
- GregorianCalendar cc = new GregorianCalendar();
- cc.setTimeInMillis(System.currentTimeMillis());
- currCalendar.setTimeInMillis(btTime.getTime() + mLocalTZ.getRawOffset());
- currCalendar.set(cc.get(Calendar.YEAR), cc.get(Calendar.MONTH),
- cc.get(Calendar.DAY_OF_WEEK));
- return currCalendar.getTimeInMillis();
+ return btTime.getTime();
} catch (ParseException e) {
Log.e(TAG, "Could not parse: " + time);
return 0;
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index 8719e8e..978eb69 100644
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -2586,7 +2586,7 @@ public class PackageManagerService extends IPackageManager.Stub {
}
}
- if (pi != null && !list.append(pi)) {
+ if (pi != null && list.append(pi)) {
break;
}
}
@@ -2647,7 +2647,7 @@ public class PackageManagerService extends IPackageManager.Stub {
}
}
- if (ai != null && !list.append(ai)) {
+ if (ai != null && list.append(ai)) {
break;
}
}
diff --git a/services/java/com/android/server/pm/Settings.java b/services/java/com/android/server/pm/Settings.java
index 46f10d2..d44a91e 100644
--- a/services/java/com/android/server/pm/Settings.java
+++ b/services/java/com/android/server/pm/Settings.java
@@ -971,7 +971,7 @@ final class Settings {
// Avoid any application that has a space in its path
// or that is handled by the system.
- if (dataPath.indexOf(" ") >= 0 || ai.uid <= Process.FIRST_APPLICATION_UID)
+ if (dataPath.indexOf(" ") >= 0 || ai.uid < Process.FIRST_APPLICATION_UID)
continue;
// we store on each line the following information for now:
diff --git a/telephony/java/com/android/internal/telephony/Phone.java b/telephony/java/com/android/internal/telephony/Phone.java
index 3022db9..fa8d245 100644
--- a/telephony/java/com/android/internal/telephony/Phone.java
+++ b/telephony/java/com/android/internal/telephony/Phone.java
@@ -216,6 +216,8 @@ public interface Phone {
int NT_MODE_CDMA_NO_EVDO = RILConstants.NETWORK_MODE_CDMA_NO_EVDO;
int NT_MODE_EVDO_NO_CDMA = RILConstants.NETWORK_MODE_EVDO_NO_CDMA;
int NT_MODE_GLOBAL = RILConstants.NETWORK_MODE_GLOBAL;
+ int NT_MODE_LTE_CDMA_EVDO = RILConstants.NETWORK_MODE_LTE_CDMA_EVDO;
+ int NT_MODE_LTE_CMDA_EVDO_GSM_WCDMA = RILConstants.NETWORK_MODE_LTE_CMDA_EVDO_GSM_WCDMA;
int NT_MODE_LTE_ONLY = RILConstants.NETWORK_MODE_LTE_ONLY;
int PREFERRED_NT_MODE = RILConstants.PREFERRED_NETWORK_MODE;