summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmds/hdmid/Android.mk9
-rw-r--r--cmds/hdmid/HDMIDaemon.cpp119
-rw-r--r--cmds/hdmid/HDMIDaemon.h21
-rw-r--r--core/java/android/app/FragmentManager.java5
-rw-r--r--core/java/android/provider/Settings.java38
-rw-r--r--core/java/com/android/internal/util/weather/WeatherInfo.java46
-rw-r--r--core/java/com/android/internal/view/menu/ActionMenuPresenter.java2
-rw-r--r--core/res/res/drawable-hdpi/ic_lockscreen_podcast_activated.png (renamed from core/res/res/drawable-hdpi/ic_lockscreen_podcast_activted.png)bin7588 -> 7588 bytes
-rw-r--r--core/res/res/drawable-hdpi/weather_na_cid.pngbin4346 -> 0 bytes
-rw-r--r--core/res/res/drawable-mdpi/weather_na_cid.pngbin2938 -> 0 bytes
-rw-r--r--core/res/res/drawable-xhdpi/weather_na_cid.pngbin4124 -> 0 bytes
-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_status_land.xml1
-rw-r--r--core/res/res/layout-sw600dp/keyguard_screen_status_port.xml1
-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.xml4
-rw-r--r--core/res/res/layout/keyguard_screen_tab_unlock_land.xml3
-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-it/strings.xml58
-rw-r--r--core/res/res/values-iw/strings.xml58
-rw-r--r--core/res/res/values-nl/strings.xml162
-rw-r--r--core/res/res/values-pl/strings.xml62
-rwxr-xr-xcore/res/res/values-pt/strings.xml4
-rw-r--r--core/res/res/values-ru/strings.xml10
-rwxr-xr-xcore/res/res/values/config.xml13
-rwxr-xr-xcore/res/res/values/strings.xml2
-rw-r--r--include/media/stagefright/LPAPlayer.h2
-rw-r--r--libs/binder/Parcel.cpp3
-rw-r--r--media/libmedia/Android.mk5
-rw-r--r--media/libstagefright/LPAPlayer.cpp31
-rwxr-xr-xmedia/libstagefright/LPAPlayerALSA.cpp19
-rw-r--r--packages/SystemUI/res/drawable-hdpi/ic_notification_overlay.9.pngbin935 -> 784 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/ic_notification_overlay.9.pngbin469 -> 398 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/ic_notification_overlay.9.pngbin1751 -> 876 bytes
-rw-r--r--packages/SystemUI/res/layout-sw600dp/status_bar_settings_view.xml91
-rw-r--r--packages/SystemUI/res/values-es/strings.xml9
-rw-r--r--packages/SystemUI/res/values-large/config.xml2
-rw-r--r--packages/SystemUI/res/values-nl/strings.xml68
-rw-r--r--packages/SystemUI/res/values-pl/strings.xml14
-rw-r--r--packages/SystemUI/res/values/colors.xml2
-rw-r--r--packages/SystemUI/res/values/config.xml3
-rw-r--r--packages/SystemUI/res/values/strings.xml15
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java54
-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
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java2
-rw-r--r--policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java76
-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
-rwxr-xr-xpolicy/src/com/android/internal/policy/impl/PhoneWindowManager.java93
-rw-r--r--services/audioflinger/AudioFlinger.cpp2
-rw-r--r--services/audioflinger/AudioPolicyService.cpp31
-rw-r--r--services/input/InputReader.cpp20
-rw-r--r--services/input/InputReader.h11
-rw-r--r--services/java/com/android/server/ConnectivityService.java6
-rw-r--r--services/java/com/android/server/HDMIListener.java12
-rwxr-xr-x[-rw-r--r--]services/java/com/android/server/HDMIService.java97
-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--services/java/com/android/server/wm/InputManager.java36
-rw-r--r--services/jni/com_android_server_InputManager.cpp33
-rw-r--r--telephony/java/com/android/internal/telephony/Phone.java2
-rw-r--r--telephony/java/com/android/internal/telephony/QualcommSharedRIL.java2
82 files changed, 1631 insertions, 381 deletions
diff --git a/cmds/hdmid/Android.mk b/cmds/hdmid/Android.mk
index 3d31800..57659ab 100644
--- a/cmds/hdmid/Android.mk
+++ b/cmds/hdmid/Android.mk
@@ -35,10 +35,11 @@ ifeq ($(TARGET_QCOM_HDMI_RESOLUTION_AUTO),true)
endif
LOCAL_SHARED_LIBRARIES := \
- libcutils \
- libutils \
- libbinder \
- libgui \
+ libcutils \
+ libutils \
+ libbinder \
+ libgui \
+ libmedia \
LOCAL_C_INCLUDES := \
$(call include-path-for, corecg graphics)
diff --git a/cmds/hdmid/HDMIDaemon.cpp b/cmds/hdmid/HDMIDaemon.cpp
index acfa74b..bd740b1 100644
--- a/cmds/hdmid/HDMIDaemon.cpp
+++ b/cmds/hdmid/HDMIDaemon.cpp
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2007 The Android Open Source Project
- * Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
+ * Copyright (c) 2010-2012, Code Aurora Forum. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -26,6 +26,9 @@
#include <signal.h>
#include <binder/IPCThreadState.h>
+#include <binder/IServiceManager.h>
+#include <media/IAudioPolicyService.h>
+#include <media/AudioSystem.h>
#include <utils/threads.h>
#include <utils/Atomic.h>
#include <utils/Errors.h>
@@ -46,7 +49,7 @@ namespace android {
// ---------------------------------------------------------------------------
-#define DEVICE_ROOT "/sys/class/graphics"
+#define DEVICE_ROOT "/sys/devices/virtual/graphics"
#define DEVICE_NODE "fb1"
#define HDMI_SOCKET_NAME "hdmid"
@@ -55,7 +58,6 @@ namespace android {
#define HDMI_EVT_DISCONNECTED "hdmi_disconnected"
#define HDMI_EVT_AUDIO_ON "hdmi_audio_on"
#define HDMI_EVT_AUDIO_OFF "hdmi_audio_off"
-#define HDMI_EVT_NO_BROADCAST_ONLINE "hdmi_no_broadcast_online"
#define HDMI_CMD_ENABLE_HDMI "enable_hdmi"
#define HDMI_CMD_DISABLE_HDMI "disable_hdmi"
@@ -68,6 +70,7 @@ namespace android {
#define SYSFS_EDID_MODES DEVICE_ROOT "/" DEVICE_NODE "/edid_modes"
#define SYSFS_HPD DEVICE_ROOT "/" DEVICE_NODE "/hpd"
#define SYSFS_HDCP_PRESENT DEVICE_ROOT "/" DEVICE_NODE "/hdcp_present"
+#define SYSFS_HDMI_MODE DEVICE_ROOT "/" DEVICE_NODE "/hdmi_mode"
#ifdef QCOM_HARDWARE
//Should match to the external_display_type HDMI in QComUI
@@ -96,11 +99,6 @@ void HDMIDaemon::onFirstRef() {
run("HDMIDaemon", PRIORITY_AUDIO);
}
-sp<SurfaceComposerClient> HDMIDaemon::session() const {
- return mSession;
-}
-
-
void HDMIDaemon::binderDied(const wp<IBinder>& who)
{
requestExit();
@@ -133,7 +131,7 @@ status_t HDMIDaemon::readyToRun() {
}
int uevent_sz = 64 * 1024;
- if (setsockopt(mUeventSock, SOL_SOCKET, SO_RCVBUFFORCE, &uevent_sz,
+ if (setsockopt(mUeventSock, SOL_SOCKET, SO_RCVBUF, &uevent_sz,
sizeof(uevent_sz)) < 0) {
LOGE("Unable to set uevent socket options: %s", strerror(errno));
return -1;
@@ -204,13 +202,6 @@ bool HDMIDaemon::threadLoop()
strerror(errno));
}
else {
- // Check if HDCP Keys are present
- if(checkHDCPPresent()) {
- LOGD("threadLoop: HDCP keys are present, delay Broadcast.");
- sendCommandToFramework(action_no_broadcast_online);
- }
-
- mSession = new SurfaceComposerClient();
processUeventQueue();
if (!mDriverOnline) {
@@ -232,7 +223,7 @@ bool HDMIDaemon::threadLoop()
return true;
}
-bool HDMIDaemon::checkHDCPPresent() {
+bool HDMIDaemon::isHDCPPresent() {
char present = '0';
//Open the hdcp file - to know if HDCP is supported
int hdcpFile = open(SYSFS_HDCP_PRESENT, O_RDONLY, 0);
@@ -248,6 +239,63 @@ bool HDMIDaemon::checkHDCPPresent() {
close(hdcpFile);
return (present == '1') ? true : false;
}
+
+bool HDMIDaemon::isHDMIMode() {
+ bool ret = false;
+ char mode = '0';
+ int modeFile = open (SYSFS_HDMI_MODE, O_RDONLY, 0);
+ if(modeFile < 0) {
+ LOGE("%s:hdmi_mode_file '%s' not found", __func__, SYSFS_HDMI_MODE);
+ } else {
+ //Read from the hdmi_mode file
+ int r = read(modeFile, &mode, 1);
+ if (r <= 0) {
+ LOGE("%s: hdmi_mode file empty '%s'", __func__, SYSFS_HDMI_MODE);
+ }
+ }
+ close(modeFile);
+ return (mode == '1') ? true : false;
+}
+
+void HDMIDaemon::enableAudio() {
+ sp<IServiceManager> sm = defaultServiceManager();
+ sp<IAudioPolicyService> binder;
+ binder = interface_cast<IAudioPolicyService>(
+ sm->getService(String16("media.audio_policy")));
+ if(binder != 0) {
+ binder->setDeviceConnectionState(AUDIO_DEVICE_OUT_AUX_DIGITAL,
+ AUDIO_POLICY_DEVICE_STATE_AVAILABLE, "");
+ } else {
+ LOGE("%s: Failed to contact audio service", __FUNCTION__);
+ }
+}
+
+void HDMIDaemon::disableAudio() {
+ sp<IServiceManager> sm = defaultServiceManager();
+ sp<IAudioPolicyService> binder;
+ binder = interface_cast<IAudioPolicyService>(
+ sm->getService(String16("media.audio_policy")));
+ if(binder != 0) {
+ binder->setDeviceConnectionState(AUDIO_DEVICE_OUT_AUX_DIGITAL,
+ AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE, "");
+ } else {
+ LOGE("%s: Failed to contact audio service", __FUNCTION__);
+ }
+}
+
+bool isAudioEnabled() {
+ sp<IServiceManager> sm = defaultServiceManager();
+ sp<IAudioPolicyService> binder;
+ binder = interface_cast<IAudioPolicyService>(
+ sm->getService(String16("media.audio_policy")));
+ if(binder != 0) {
+ if(binder->getDeviceConnectionState(AUDIO_DEVICE_OUT_AUX_DIGITAL, "")
+ == AUDIO_POLICY_DEVICE_STATE_AVAILABLE)
+ return true;
+ }
+ return false;
+}
+
bool HDMIDaemon::cableConnected(bool defaultValue) const
{
int hdmiStateFile = open(SYSFS_CONNECTED, O_RDONLY, 0);
@@ -587,7 +635,16 @@ int HDMIDaemon::processFrameworkCommand()
LOGD(HDMI_CMD_ENABLE_HDMI);
if(mNxtMode != -1) {
LOGD("processFrameworkCommand: setResolution with =%d", mNxtMode);
- setResolution(mNxtMode);
+ if(isAudioEnabled()) {
+ //If Audio is enabled, turn it off because setResolution() will
+ //call power off. Also treat the following as a single
+ //transaction
+ disableAudio();
+ setResolution(mNxtMode);
+ enableAudio();
+ } else {
+ setResolution(mNxtMode);
+ }
}
} else if (!strcmp(buffer, HDMI_CMD_DISABLE_HDMI)) {
LOGD(HDMI_CMD_DISABLE_HDMI);
@@ -661,7 +718,16 @@ int HDMIDaemon::processFrameworkCommand()
}
// If we have a valid fd1 - setresolution
if(fd1 > 0) {
- setResolution(mode);
+ if(isAudioEnabled()) {
+ // Disable audio before changing resolution, since that calls
+ // a poweroff, which could time out audio output.
+ disableAudio();
+ setResolution(mode);
+ // Enable audio once we are done with resolution change.
+ enableAudio();
+ } else {
+ setResolution(mode);
+ }
} else {
// Store the mode
mNxtMode = mode;
@@ -678,30 +744,19 @@ bool HDMIDaemon::sendCommandToFramework(uevent_action action)
switch (action)
{
- //Disconnect
case action_offline:
strncpy(message, HDMI_EVT_DISCONNECTED, sizeof(message));
break;
- //Connect
case action_online:
readResolution();
snprintf(message, sizeof(message), "%s: %s", HDMI_EVT_CONNECTED, mEDIDs);
break;
- //action_audio_on
case action_audio_on:
- strncpy(message, HDMI_EVT_AUDIO_ON, sizeof(message));
- break;
- //action_audio_off
case action_audio_off:
- strncpy(message, HDMI_EVT_AUDIO_OFF, sizeof(message));
- break;
- //action_no_broadcast_online
- case action_no_broadcast_online:
- strncpy(message, HDMI_EVT_NO_BROADCAST_ONLINE, sizeof(message));
- break;
+ return true;
default:
LOGE("sendCommandToFramework: Unknown event received");
- break;
+ return false;
}
int result = write(mAcceptedConnection, message, strlen(message) + 1);
LOGD("sendCommandToFramework: '%s' %s", message, result >= 0 ? "successful" : "failed");
diff --git a/cmds/hdmid/HDMIDaemon.h b/cmds/hdmid/HDMIDaemon.h
index 6f63b95..a234ea0 100644
--- a/cmds/hdmid/HDMIDaemon.h
+++ b/cmds/hdmid/HDMIDaemon.h
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2007 The Android Open Source Project
- * Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
+ * Copyright (c) 2010-2012, Code Aurora Forum. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -53,7 +53,7 @@
namespace android {
enum uevent_action { action_add, action_remove, action_change,
- action_online, action_offline, action_audio_on, action_audio_off, action_no_broadcast_online };
+ action_online, action_offline, action_audio_on, action_audio_off };
const int ueventParamMax = 32;
struct uevent {
char *path;
@@ -83,10 +83,12 @@ struct HDMIUeventQueue {
class HDMIDaemon : public Thread, public IBinder::DeathRecipient
{
+ /*Overrides*/
virtual bool threadLoop();
virtual status_t readyToRun();
virtual void onFirstRef();
virtual void binderDied(const wp<IBinder>& who);
+
bool processUeventMessage(uevent& event);
void queueUevent();
void processUeventQueue();
@@ -98,14 +100,17 @@ class HDMIDaemon : public Thread, public IBinder::DeathRecipient
void setResolution(int ID);
bool openFramebuffer();
bool writeHPDOption(int userOption) const;
- inline bool isValidMode(int ID);
- bool checkHDCPPresent();
+ bool isValidMode(int ID);
+
+ static bool isHDCPPresent();
+ static bool isHDMIMode();
+ static void enableAudio();
+ static void disableAudio();
int mFrameworkSock;
int mAcceptedConnection;
int mUeventSock;
HDMIUeventQueue* mHDMIUeventQueueHead;
- sp<SurfaceComposerClient> mSession;
int fd1;
bool mDriverOnline;
int mCurrentID;
@@ -113,10 +118,8 @@ class HDMIDaemon : public Thread, public IBinder::DeathRecipient
char mEDIDs[128];
public:
- HDMIDaemon();
- virtual ~HDMIDaemon();
-
- sp<SurfaceComposerClient> session() const;
+ HDMIDaemon();
+ virtual ~HDMIDaemon();
};
// ---------------------------------------------------------------------------
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 7c72a1a..81ccf66 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -2010,6 +2010,11 @@ public final class Settings {
*/
public static final String NOTIFICATION_LIGHT_PULSE_CUSTOM_VALUES = "notification_light_pulse_custom_values";
+ /** Sprint MWI Quirk: Show message wait indicator notifications
+ * @hide
+ */
+ public static final String ENABLE_MWI_NOTIFICATION = "enable_mwi_notification";
+
/**
* Show pointer location on screen?
* 0 = no
@@ -2019,6 +2024,14 @@ public final class Settings {
public static final String POINTER_LOCATION = "pointer_location";
/**
+ * Show icon when stylus is used?
+ * 0 = no
+ * 1 = yes
+ * @hide
+ */
+ public static final String STYLUS_ICON_ENABLED = "stylus_icon_enabled";
+
+ /**
* Show touch positions on screen?
* 0 = no
* 1 = yes
@@ -2210,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
@@ -2419,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
*/
@@ -2503,6 +2529,12 @@ public final class Settings {
public static final String LOCKSCREEN_CALENDAR_REMINDERS_ONLY = "lockscreen_calendar_reminders_only";
/**
+ * Show the pending notification counts as overlays on the status bar
+ * @hide
+ */
+ public static final String STATUS_BAR_NOTIF_COUNT = "status_bar_notif_count";
+
+ /**
* Settings to backup. This is here so that it's in the same place as the settings
* keys and easy to update.
*
@@ -3088,6 +3120,12 @@ public final class Settings {
public static final String ADB_PORT = "adb_port";
/**
+ * The hostname for this device
+ * @hide
+ */
+ public static final String DEVICE_HOSTNAME = "device_hostname";
+
+ /**
* Setting to allow mock locations and location provider status to be injected into the
* LocationManager service for testing purposes during application development. These
* locations and status values override actual location and status information generated
diff --git a/core/java/com/android/internal/util/weather/WeatherInfo.java b/core/java/com/android/internal/util/weather/WeatherInfo.java
index 6a9707f..2b65785 100644
--- a/core/java/com/android/internal/util/weather/WeatherInfo.java
+++ b/core/java/com/android/internal/util/weather/WeatherInfo.java
@@ -80,28 +80,36 @@ public class WeatherInfo {
}
private String calcDirection(Context context, String degrees) {
- int deg = Integer.parseInt(degrees);
- if (deg >= 338 || deg <= 22)
- return context.getResources().getString(R.string.weather_N);
- else if (deg < 68)
- return context.getResources().getString(R.string.weather_NE);
- else if (deg < 113)
- return context.getResources().getString(R.string.weather_E);
- else if (deg < 158)
- return context.getResources().getString(R.string.weather_SE);
- else if (deg < 203)
- return context.getResources().getString(R.string.weather_S);
- else if (deg < 248)
- return context.getResources().getString(R.string.weather_SW);
- else if (deg < 293)
- return context.getResources().getString(R.string.weather_W);
- else if (deg < 338)
- return context.getResources().getString(R.string.weather_NW);
- else
+ try {
+ int deg = Integer.parseInt(degrees);
+ if (deg >= 338 || deg <= 22)
+ return context.getResources().getString(R.string.weather_N);
+ else if (deg < 68)
+ return context.getResources().getString(R.string.weather_NE);
+ else if (deg < 113)
+ return context.getResources().getString(R.string.weather_E);
+ else if (deg < 158)
+ return context.getResources().getString(R.string.weather_SE);
+ else if (deg < 203)
+ return context.getResources().getString(R.string.weather_S);
+ else if (deg < 248)
+ return context.getResources().getString(R.string.weather_SW);
+ else if (deg < 293)
+ return context.getResources().getString(R.string.weather_W);
+ else if (deg < 338)
+ return context.getResources().getString(R.string.weather_NW);
+ else
+ return "";
+ } catch (NumberFormatException e) {
return "";
+ }
}
private String trimSpeed(String speed) {
- return String.valueOf(Math.round(Float.parseFloat(speed)));
+ try {
+ return String.valueOf(Math.round(Float.parseFloat(speed)));
+ } catch (NumberFormatException e) {
+ return "";
+ }
}
}
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/drawable-hdpi/ic_lockscreen_podcast_activted.png b/core/res/res/drawable-hdpi/ic_lockscreen_podcast_activated.png
index 4884988..4884988 100644
--- a/core/res/res/drawable-hdpi/ic_lockscreen_podcast_activted.png
+++ b/core/res/res/drawable-hdpi/ic_lockscreen_podcast_activated.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/weather_na_cid.png b/core/res/res/drawable-hdpi/weather_na_cid.png
deleted file mode 100644
index 92759cb..0000000
--- a/core/res/res/drawable-hdpi/weather_na_cid.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/weather_na_cid.png b/core/res/res/drawable-mdpi/weather_na_cid.png
deleted file mode 100644
index 52f4e27..0000000
--- a/core/res/res/drawable-mdpi/weather_na_cid.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/weather_na_cid.png b/core/res/res/drawable-xhdpi/weather_na_cid.png
deleted file mode 100644
index daa2bfb..0000000
--- a/core/res/res/drawable-xhdpi/weather_na_cid.png
+++ /dev/null
Binary files differ
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_status_land.xml b/core/res/res/layout-sw600dp/keyguard_screen_status_land.xml
index c65d019..b8acc9c 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_status_land.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_status_land.xml
@@ -101,6 +101,7 @@
</RelativeLayout>
<RelativeLayout
+ android:id="@+id/weather_temps_panel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/weather_image"
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_status_port.xml b/core/res/res/layout-sw600dp/keyguard_screen_status_port.xml
index 6d313df..ea461d2 100644
--- a/core/res/res/layout-sw600dp/keyguard_screen_status_port.xml
+++ b/core/res/res/layout-sw600dp/keyguard_screen_status_port.xml
@@ -103,6 +103,7 @@
</RelativeLayout>
<RelativeLayout
+ android:id="@+id/weather_temps_panel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/weather_image"
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 4445588..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"
@@ -163,9 +164,10 @@
android:textSize="6sp"
android:textColor="?android:attr/textColorSecondary" />
- </RelativeLayout>
+ </RelativeLayout>
<RelativeLayout
+ android:id="@+id/weather_temps_panel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/weather_image"
diff --git a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml
index 8ea4f6b..b23a50c 100644
--- a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml
+++ b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml
@@ -163,6 +163,7 @@
</RelativeLayout>
<RelativeLayout
+ android:id="@+id/weather_temps_panel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/weather_image"
@@ -256,7 +257,7 @@
android:layout_row="0"
android:layout_column="0"
android:layout_rowSpan="5"
- android:layout_columnSpan="1"
+ android:layout_columnSpan="3"
android:layout_gravity="fill"
android:layout_width="0dip"
android:layout_height="0dip"
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-it/strings.xml b/core/res/res/values-it/strings.xml
index e88b150..b8666bb 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -1255,4 +1255,62 @@
<string name="launchBrowserDefault" msgid="2057951947297614725">"Avviare l\'applicazione Browser?"</string>
<string name="SetupCallDefault" msgid="6870275517518479651">"Accettare la chiamata?"</string>
<string name="app_killed_message">Applicazione terminata</string>
+ <string name="weather_0">Tornado</string>
+ <string name="weather_1">Tempesta Tropicale</string>
+ <string name="weather_2">Uragano</string>
+ <string name="weather_3">Temporali Violenti</string>
+ <string name="weather_4">Temporali</string>
+ <string name="weather_5">Pioggia e Neve</string>
+ <string name="weather_6">Pioggia e Nevischio</string>
+ <string name="weather_7">Neve e Nevischio</string>
+ <string name="weather_8">Pioviggine Gelata</string>
+ <string name="weather_9">Pioviggine/Bruma</string>
+ <string name="weather_10">Pioggia Gelata</string>
+ <string name="weather_11">Acquazzoni</string>
+ <string name="weather_12">Acquazzoni</string>
+ <string name="weather_13">Raffiche di Neve</string>
+ <string name="weather_14">Nevicate Leggere</string>
+ <string name="weather_15">Scaccianeve</string>
+ <string name="weather_16">Neve</string>
+ <string name="weather_17">Grandine</string>
+ <string name="weather_18">Nevischio</string>
+ <string name="weather_19">Pulviscolo</string>
+ <string name="weather_20">Nebbia</string>
+ <string name="weather_21">Foschia</string>
+ <string name="weather_22">Fumoso</string>
+ <string name="weather_23">Tempestoso</string>
+ <string name="weather_24">Ventoso</string>
+ <string name="weather_25">Freddo</string>
+ <string name="weather_26">Nuvoloso</string>
+ <string name="weather_27">Preval. Nuvoloso</string>
+ <string name="weather_28">Preval. Nuvoloso</string>
+ <string name="weather_29">Parz. Nuvoloso</string>
+ <string name="weather_30">Parz. Nuvoloso</string>
+ <string name="weather_31">Sereno</string>
+ <string name="weather_32">Sereno</string>
+ <string name="weather_33">Bel tempo</string>
+ <string name="weather_34">Bel tempo</string>
+ <string name="weather_35">Pioggia e Grandine</string>
+ <string name="weather_36">Caldo</string>
+ <string name="weather_37">Temporali Isolati</string>
+ <string name="weather_38">Temporali Sparsi</string>
+ <string name="weather_39">Temporali Sparsi</string>
+ <string name="weather_40">Rovesci Sparsi</string>
+ <string name="weather_41">Nevicate Intense</string>
+ <string name="weather_42">Nevicate Sparse</string>
+ <string name="weather_43">Nevicate Intense</string>
+ <string name="weather_44">Parz. Nuvoloso</string>
+ <string name="weather_45">Temporali</string>
+ <string name="weather_46">Nevicate</string>
+ <string name="weather_47">Temporali Sparsi</string>
+ <string name="weather_3200"></string>
+ <string name="weather_N">N</string>
+ <string name="weather_NE">NE</string>
+ <string name="weather_E">E</string>
+ <string name="weather_SE">SE</string>
+ <string name="weather_S">S</string>
+ <string name="weather_SW">SW</string>
+ <string name="weather_W">W</string>
+ <string name="weather_NW">NW</string>
+ <string name="weather_tap_to_refresh">Tocca per aggiornare</string>
</resources>
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-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 75e9ff4..a577c22 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -100,6 +100,7 @@
<string name="roamingText11" msgid="4154476854426920970">"Baner roamingu włączony"</string>
<string name="roamingText12" msgid="1189071119992726320">"Baner roamingu wyłączony"</string>
<string name="roamingTextSearching" msgid="8360141885972279963">"Wyszukiwanie usługi"</string>
+ <string name="roamingTextAirplaneMode">Tryb Samolotowy</string>
<string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: nieprzekierowane"</string>
<string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
<string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> po <xliff:g id="TIME_DELAY">{2}</xliff:g> sekundach"</string>
@@ -1284,4 +1285,65 @@
<!--Application killed toast -->
<string name="app_killed_message">Aplikacja zabita</string>
+ <!-- Lock screen Weather - Weather codes -->
+ <string name="weather_1">Tropikalna burza</string>
+ <string name="weather_2">Huragan</string>
+ <string name="weather_3">Silna burza z piorunami</string>
+ <string name="weather_4">Burza z piorunami</string>
+ <string name="weather_5">Deszcz ze śniegiem</string>
+ <string name="weather_6">Deszcz ze śniegiem</string>
+ <string name="weather_7">Deszcz ze śniegiem</string>
+ <string name="weather_8">Zamarzająca mżawka</string>
+ <string name="weather_9">Mżawka</string>
+ <string name="weather_10">Zamarzający deszcz</string>
+ <string name="weather_11">Przelotne opady deszczu</string>
+ <string name="weather_12">Przelotne opady deszczu</string>
+ <string name="weather_13">Przelotne opady śniegu</string>
+ <string name="weather_14">Lekkie opady śniegu</string>
+ <string name="weather_15">Zamieć</string>
+ <string name="weather_16">Śnieg</string>
+ <string name="weather_17">Gradobicie</string>
+ <string name="weather_18">Deszcz ze śniegiem</string>
+ <string name="weather_19">Pył</string>
+ <string name="weather_20">Mgła</string>
+ <string name="weather_21">Mgła</string>
+ <string name="weather_22">Mocna mgła</string>
+ <string name="weather_23">Porwisty wiatr</string>
+ <string name="weather_24">Wietrznie</string>
+ <string name="weather_25">Zimno</string>
+ <string name="weather_26">Pochmurnie</string>
+ <string name="weather_27">Zachmurzenie</string> <!-- Night -->
+ <string name="weather_28">Zachmurzenie</string> <!-- Day -->
+ <string name="weather_29">Częściowe zachmurzenie</string> <!-- Night -->
+ <string name="weather_30">Częściowe zachmurzenie</string> <!-- Day -->
+ <string name="weather_31">Pogodnie</string> <!-- Night -->
+ <string name="weather_32">Słonecznie</string>
+ <string name="weather_33">Ładna pogoda</string> <!-- Night -->
+ <string name="weather_34">Ładna pogoda</string> <!-- Day -->
+ <string name="weather_35">Deszcz z gradem</string>
+ <string name="weather_36">Gorąco</string>
+ <string name="weather_37">Pojedyncze burze z piorunami</string>
+ <string name="weather_38">Przelotne burze z piorunami</string>
+ <string name="weather_39">Przelotne burze z piorunami</string>
+ <string name="weather_40">Przelotne opady deszczu</string>
+ <string name="weather_41">Intensywne opady śniegu</string>
+ <string name="weather_42">Przelotne opady śniegu</string>
+ <string name="weather_43">Intensywne opady śniegu</string>
+ <string name="weather_44">Częściowe zachmurzenie</string>
+ <string name="weather_45">Deszcz i burza z piorunami</string>
+ <string name="weather_46">Przelotne opady śniegu</string>
+ <string name="weather_47">Przelotne burze z piorunami</string>
+
+ <!-- Lock screen Weather - Wind directions -->
+ <string name="weather_N">pn.</string>
+ <string name="weather_NE">pn.-wsch.</string>
+ <string name="weather_E">wsch.</string>
+ <string name="weather_SE">pd.-wsch.</string>
+ <string name="weather_S">pd.</string>
+ <string name="weather_SW">pd.-zach.</string>
+ <string name="weather_W">zach.</string>
+ <string name="weather_NW">pn.-zach.</string>
+
+ <!-- Lock screen Weather - error messages -->
+ <string name="weather_tap_to_refresh">Dotknij by odświeżyć</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/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 4fe356c..91e476a 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -1291,10 +1291,10 @@
<string name="weather_24">Ветренно</string>
<string name="weather_25">Холодно</string>
<string name="weather_26">Облачно</string>
- <string name="weather_27">Переменная облачность</string> <!-- Night -->
- <string name="weather_28">Переменная облачность</string> <!-- Day -->
- <string name="weather_29">Переменная облачность</string> <!-- Night -->
- <string name="weather_30">Переменная облачность</string> <!-- Day -->
+ <string name="weather_27">Малооблачно</string> <!-- Night -->
+ <string name="weather_28">Малооблачно</string> <!-- Day -->
+ <string name="weather_29">Малооблачно</string> <!-- Night -->
+ <string name="weather_30">Малооблачно</string> <!-- Day -->
<string name="weather_31">Ясно</string> <!-- Night -->
<string name="weather_32">Солнечно</string>
<string name="weather_33">Ясно</string> <!-- Night -->
@@ -1308,7 +1308,7 @@
<string name="weather_41">Сильный снег</string>
<string name="weather_42">Возможен снег</string>
<string name="weather_43">Сильный снег</string>
- <string name="weather_44">Переменная облачность</string>
+ <string name="weather_44">Малооблачно</string>
<string name="weather_45">Дождь с грозой</string>
<string name="weather_46">Дождь со снегом</string>
<string name="weather_47">Местами грозы</string>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 1a85e4c..c5f453d 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -809,4 +809,17 @@
<!-- True will enable the electron beam screen-off animation. -->
<bool name="config_screenOffAnimation">true</bool>
+
+ <!-- Hardware 'face' keys present on the device, stored as a bit field.
+ This integer should equal the sum of the corresponding value for each
+ of the following keys present:
+ 1 - Home
+ 2 - Back
+ 4 - Menu
+ 8 - Search
+ 16 - App switch
+ For example, a device with Home, Back and Menu keys would set this
+ config to 7. -->
+ <integer name="config_deviceHardwareKeys">15</integer>
+
</resources>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 537926b..7a49539 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -3507,6 +3507,8 @@
<string name="weather_NW">NW</string>
<!-- Lock screen Weather - error messages -->
+ <string name="weather_no_data">No data</string>
<string name="weather_tap_to_refresh">Tap to refresh</string>
+ <string name="weather_refreshing">Refreshing</string>
</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/libmedia/Android.mk b/media/libmedia/Android.mk
index f928c07..02138e4 100644
--- a/media/libmedia/Android.mk
+++ b/media/libmedia/Android.mk
@@ -47,6 +47,11 @@ LOCAL_SRC_FILES:= \
MemoryLeakTrackUtil.cpp \
fixedfft.cpp.arm
+ifeq ($(BOARD_USES_LIBMEDIA_WITH_AUDIOPARAMETER),true)
+ LOCAL_SRC_FILES+= \
+ AudioParameter.cpp
+endif
+
ifeq ($(BOARD_USES_AUDIO_LEGACY),true)
LOCAL_SRC_FILES+= \
AudioParameter.cpp
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/drawable-hdpi/ic_notification_overlay.9.png b/packages/SystemUI/res/drawable-hdpi/ic_notification_overlay.9.png
index fd33ef3..cf18e33 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_notification_overlay.9.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notification_overlay.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notification_overlay.9.png b/packages/SystemUI/res/drawable-mdpi/ic_notification_overlay.9.png
index 667b13d..8d0233f 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_notification_overlay.9.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_notification_overlay.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notification_overlay.9.png b/packages/SystemUI/res/drawable-xhdpi/ic_notification_overlay.9.png
index 8758b02..71c84ef 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_notification_overlay.9.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_notification_overlay.9.png
Binary files differ
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-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index f831aa4..c41667f 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -138,4 +138,13 @@
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Buscando GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Ubicación definida por GPS"</string>
<string name="accessibility_clear_all" msgid="5235938559247164925">"Borrar todas las notificaciones"</string>
+ <string name="navbar_dialog_title">Seleccionar acción a asignar</string>
+ <string name="navbar_home_button">Botón inicio</string>
+ <string name="navbar_recent_button">Botón recientes</string>
+ <string name="navbar_search_button">Botón búsqueda</string>
+ <string name="navbar_back_button">Botón atrás</string>
+ <string name="navbar_empty_button">Botón vacio</string>
+ <string name="navbar_menu_conditional_button">Botón menú (Auto Ocultar)</string>
+ <string name="navbar_menu_always_button">Botón menú (Mostrar Siempre) </string>
+ <string name="navbar_menu_big_button">Botón menú</string>
</resources>
diff --git a/packages/SystemUI/res/values-large/config.xml b/packages/SystemUI/res/values-large/config.xml
index 4014f8d..938a17d 100644
--- a/packages/SystemUI/res/values-large/config.xml
+++ b/packages/SystemUI/res/values-large/config.xml
@@ -20,7 +20,5 @@
<!-- These resources are around just to allow their values to be customized
for different hardware and product builds. -->
<resources>
- <!-- Whether or not we show the number in the bar. -->
- <bool name="config_statusBarShowNumber">false</bool>
</resources>
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-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index b658de0..98baef2 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -138,4 +138,18 @@
<string name="gps_notification_searching_text" msgid="8574247005642736060">"Wyszukiwanie sygnału GPS"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"Lokalizacja ustawiona według GPS"</string>
<string name="accessibility_clear_all" msgid="5235938559247164925">"Usuń wszystkie powiadomienia."</string>
+
+ <string name="notifications_off_title">Powiadomienia wyłączone</string>
+ <string name="notifications_off_text">Dotknij by włączyć powiadomienia.</string>
+
+ <!-- Dialog title for navigation bar button selection -->
+ <string name="navbar_dialog_title">Wybierz akcję do przypisania</string>
+ <string name="navbar_home_button">Przycisk Home</string>
+ <string name="navbar_recent_button">Przycisk Recent</string>
+ <string name="navbar_search_button">Przycisk Wyszukiwania</string>
+ <string name="navbar_back_button">Przycisk Wstecz</string>
+ <string name="navbar_empty_button">Pusty przycisk</string>
+ <string name="navbar_menu_conditional_button">Przycisk Menu (autoukrywany)</string>
+ <string name="navbar_menu_always_button">Przycisk Menu (zawsze widoczny)</string>
+ <string name="navbar_menu_big_button">Przycisk Menu</string>
</resources>
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index 3a2ea65..99d3c6e 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -17,7 +17,7 @@
*/
-->
<resources>
- <drawable name="notification_number_text_color">#ffffffff</drawable>
+ <drawable name="notification_number_text_color">#ff000000</drawable>
<drawable name="notification_item_background_color">#ff111111</drawable>
<drawable name="notification_item_background_color_pressed">#ff257390</drawable>
<drawable name="ticker_background_color">#ff1d1d1d</drawable>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 1f22507..8792fdf 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -41,9 +41,6 @@
interface. This name is in the ComponentName flattened format (package/class) -->
<string name="config_systemBarComponent" translatable="false">com.android.systemui.statusbar.tablet.TabletStatusBar</string>
- <!-- Whether or not we show the number in the bar. -->
- <bool name="config_statusBarShowNumber">false</bool>
-
<!-- How many icons may be shown at once in the system bar. Includes any
slots that may be reused for things like IME control. -->
<integer name="config_maxNotificationIcons">5</integer>
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/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
index 371af53..7ca1b22 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java
@@ -25,6 +25,7 @@ import android.graphics.PixelFormat;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.provider.Settings;
import android.util.Slog;
import android.util.Log;
import android.view.Display;
@@ -59,12 +60,17 @@ public abstract class StatusBar extends SystemUI implements CommandQueue.Callbac
private DoNotDisturb mDoNotDisturb;
+ private boolean mShowNotificationCounts;
+
public void start() {
// First set up our views and stuff.
View sb = makeStatusBarView();
mStatusBarContainer.addView(sb);
+ mShowNotificationCounts = Settings.System.getInt(mContext.getContentResolver(),
+ Settings.System.STATUS_BAR_NOTIF_COUNT, 0) == 1;
+
// Connect in to the status bar manager service
StatusBarIconList iconList = new StatusBarIconList();
ArrayList<IBinder> notificationKeys = new ArrayList<IBinder>();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
index 1f57bf7..a8a39cf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
@@ -20,10 +20,14 @@ import android.app.Notification;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.Resources;
+import android.database.ContentObserver;
import android.graphics.drawable.Drawable;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.os.Handler;
+import android.provider.Settings;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Slog;
@@ -49,18 +53,28 @@ public class StatusBarIconView extends AnimatedImageView {
private int mNumberY;
private String mNumberText;
private Notification mNotification;
+ private boolean mShowNotificationCount;
public StatusBarIconView(Context context, String slot, Notification notification) {
super(context);
final Resources res = context.getResources();
+ final float densityMultiplier = res.getDisplayMetrics().density;
+ final float scaledPx = 8 * densityMultiplier;
mSlot = slot;
mNumberPain = new Paint();
mNumberPain.setTextAlign(Paint.Align.CENTER);
mNumberPain.setColor(res.getColor(R.drawable.notification_number_text_color));
mNumberPain.setAntiAlias(true);
+ mNumberPain.setTypeface(Typeface.DEFAULT_BOLD);
+ mNumberPain.setTextSize(scaledPx);
mNotification = notification;
+ mShowNotificationCount = Settings.System.getInt(mContext.getContentResolver(),
+ Settings.System.STATUS_BAR_NOTIF_COUNT, 0) == 1;
setContentDescription(notification);
+ SettingsObserver observer = new SettingsObserver(new Handler());
+ observer.observe();
+
// We do not resize and scale system icons (on the right), only notification icons (on the
// left).
if (notification != null) {
@@ -101,10 +115,15 @@ public class StatusBarIconView extends AnimatedImageView {
return a.equals(b);
}
+
/**
* Returns whether the set succeeded.
*/
public boolean set(StatusBarIcon icon) {
+ return set(icon, false);
+ }
+
+ private boolean set(StatusBarIcon icon, boolean force) {
final boolean iconEquals = mIcon != null
&& streq(mIcon.iconPackage, icon.iconPackage)
&& mIcon.iconId == icon.iconId;
@@ -116,7 +135,7 @@ public class StatusBarIconView extends AnimatedImageView {
&& mIcon.number == icon.number;
mIcon = icon.clone();
setContentDescription(icon.contentDescription);
- if (!iconEquals) {
+ if (!iconEquals || force) {
Drawable drawable = getIcon(icon);
if (drawable == null) {
Slog.w(StatusBar.TAG, "No icon for slot " + mSlot);
@@ -124,13 +143,12 @@ public class StatusBarIconView extends AnimatedImageView {
}
setImageDrawable(drawable);
}
- if (!levelEquals) {
+ if (!levelEquals || force) {
setImageLevel(icon.iconLevel);
}
- if (!numberEquals) {
- if (icon.number > 0 && mContext.getResources().getBoolean(
- R.bool.config_statusBarShowNumber)) {
+ if (!numberEquals || force) {
+ if (icon.number > 0 && mShowNotificationCount) {
if (mNumberBackground == null) {
mNumberBackground = getContext().getResources().getDrawable(
R.drawable.ic_notification_overlay);
@@ -142,7 +160,7 @@ public class StatusBarIconView extends AnimatedImageView {
}
invalidate();
}
- if (!visibilityEquals) {
+ if (!visibilityEquals || force) {
setVisibility(icon.visible ? VISIBLE : GONE);
}
return true;
@@ -276,4 +294,28 @@ public class StatusBarIconView extends AnimatedImageView {
return "StatusBarIconView(slot=" + mSlot + " icon=" + mIcon
+ " notification=" + mNotification + ")";
}
+
+ class SettingsObserver extends ContentObserver {
+ SettingsObserver(Handler handler) {
+ super(handler);
+ }
+
+ void observe() {
+ mContext.getContentResolver().registerContentObserver(
+ Settings.System.getUriFor(Settings.System.STATUS_BAR_NOTIF_COUNT),
+ false, this);
+ }
+
+ void unobserve() {
+ mContext.getContentResolver().unregisterContentObserver(this);
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ mShowNotificationCount = Settings.System.getInt(
+ mContext.getContentResolver(),
+ Settings.System.STATUS_BAR_NOTIF_COUNT, 0) == 1;
+ set(mIcon, true);
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 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/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
index 1abbd39..5f7deae 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -236,6 +236,8 @@ public class TabletStatusBar extends StatusBar implements
mDockBatteryController.addIconView((ImageView)mNotificationPanel.findViewById(R.id.dock_battery));
mDockBatteryController.addLabelView(
(TextView)mNotificationPanel.findViewById(R.id.dock_battery_text));
+ } else {
+ mNotificationPanel.findViewById(R.id.dock_battery_text).setVisibility(View.GONE);
}
// Bt
mBluetoothController.addIconView(
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java b/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java
index 4623526..a9e61d6 100644
--- a/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java
+++ b/policy/src/com/android/internal/policy/impl/KeyguardStatusViewManager.java
@@ -89,8 +89,8 @@ class KeyguardStatusViewManager implements OnClickListener {
private TextView mOwnerInfoView;
private TextView mAlarmStatusView;
private TransportControlView mTransportView;
- private RelativeLayout mWeatherPanel;
- private TextView mWeatherCity, mWeatherCondition, mWeatherLowHigh, mWeatherTemp, mUpdateTime;
+ private RelativeLayout mWeatherPanel, mWeatherTempsPanel;
+ private TextView mWeatherCity, mWeatherCondition, mWeatherLowHigh, mWeatherTemp, mWeatherUpdateTime;
private ImageView mWeatherImage;
private LinearLayout mCalendarPanel;
private TextView mCalendarEventTitle, mCalendarEventDetails;
@@ -211,7 +211,8 @@ class KeyguardStatusViewManager implements OnClickListener {
mWeatherImage = (ImageView) findViewById(R.id.weather_image);
mWeatherTemp = (TextView) findViewById(R.id.weather_temp);
mWeatherLowHigh = (TextView) findViewById(R.id.weather_low_high);
- mUpdateTime = (TextView) findViewById(R.id.update_time);
+ mWeatherUpdateTime = (TextView) findViewById(R.id.update_time);
+ mWeatherTempsPanel = (RelativeLayout) findViewById(R.id.weather_temps_panel);
// Hide Weather panel view until we know we need to show it.
if (mWeatherPanel != null) {
@@ -361,6 +362,7 @@ class KeyguardStatusViewManager implements OnClickListener {
private void refreshWeather() {
final ContentResolver resolver = getContext().getContentResolver();
boolean showWeather = Settings.System.getInt(resolver,Settings.System.LOCKSCREEN_WEATHER, 0) == 1;
+
if (showWeather) {
final long interval = Settings.System.getLong(resolver,
Settings.System.WEATHER_UPDATE_INTERVAL, 60); // Default to hourly
@@ -395,27 +397,6 @@ class KeyguardStatusViewManager implements OnClickListener {
Settings.System.WEATHER_INVERT_LOWHIGH, 0) == 1;
if (mWeatherPanel != null) {
- if (mWeatherCity != null) {
- mWeatherCity.setText(w.city);
- mWeatherCity.setVisibility(showLocation ? View.VISIBLE : View.GONE);
- }
- if (mWeatherCondition != null) {
- mWeatherCondition.setText(w.condition);
- }
- if (mUpdateTime != null) {
- Date lastTime = new Date(mWeatherInfo.last_sync);
- String date = DateFormat.getDateFormat(getContext()).format(lastTime);
- String time = DateFormat.getTimeFormat(getContext()).format(lastTime);
- mUpdateTime.setText(date + " " + time);
- mUpdateTime.setVisibility(showTimestamp ? View.VISIBLE : View.GONE);
- }
- if (mWeatherTemp != null) {
- mWeatherTemp.setText(w.temp);
- }
- if (mWeatherLowHigh != null) {
- mWeatherLowHigh.setText(invertLowhigh ? w.high + " | " + w.low : w.low + " | " + w.high);
- }
-
if (mWeatherImage != null) {
String conditionCode = w.condition_code;
String condition_filename = "weather_" + conditionCode;
@@ -431,6 +412,26 @@ class KeyguardStatusViewManager implements OnClickListener {
mWeatherImage.setImageResource(R.drawable.weather_na);
}
}
+ if (mWeatherCity != null) {
+ mWeatherCity.setText(w.city);
+ mWeatherCity.setVisibility(showLocation ? View.VISIBLE : View.GONE);
+ }
+ if (mWeatherCondition != null) {
+ mWeatherCondition.setText(w.condition);
+ mWeatherCondition.setVisibility(View.VISIBLE);
+ }
+ if (mWeatherUpdateTime != null) {
+ Date lastTime = new Date(mWeatherInfo.last_sync);
+ String date = DateFormat.getDateFormat(getContext()).format(lastTime);
+ String time = DateFormat.getTimeFormat(getContext()).format(lastTime);
+ mWeatherUpdateTime.setText(date + " " + time);
+ mWeatherUpdateTime.setVisibility(showTimestamp ? View.VISIBLE : View.GONE);
+ }
+ if (mWeatherTempsPanel != null && mWeatherTemp != null && mWeatherLowHigh != null) {
+ mWeatherTemp.setText(w.temp);
+ mWeatherLowHigh.setText(invertLowhigh ? w.high + " | " + w.low : w.low + " | " + w.high);
+ mWeatherTempsPanel.setVisibility(View.VISIBLE);
+ }
// Show the Weather panel view
mWeatherPanel.setVisibility(View.VISIBLE);
@@ -442,29 +443,23 @@ class KeyguardStatusViewManager implements OnClickListener {
* 'Tap to reload' message
*/
private void setNoWeatherData() {
- final ContentResolver resolver = getContext().getContentResolver();
- boolean useMetric = Settings.System.getInt(resolver,
- Settings.System.WEATHER_USE_METRIC, 1) == 1;
if (mWeatherPanel != null) {
+ if (mWeatherImage != null) {
+ mWeatherImage.setImageResource(R.drawable.weather_na);
+ }
if (mWeatherCity != null) {
- mWeatherCity.setText("CM Weather"); //Hard coding this on purpose
+ mWeatherCity.setText(R.string.weather_no_data);
mWeatherCity.setVisibility(View.VISIBLE);
}
if (mWeatherCondition != null) {
mWeatherCondition.setText(R.string.weather_tap_to_refresh);
}
- if (mUpdateTime != null) {
- mUpdateTime.setVisibility(View.GONE);
- }
- if (mWeatherTemp != null) {
- mWeatherTemp.setText(useMetric ? "0°c" : "0°f");
+ if (mWeatherUpdateTime != null) {
+ mWeatherUpdateTime.setVisibility(View.GONE);
}
- if (mWeatherLowHigh != null) {
- mWeatherLowHigh.setText("0° | 0°");
- }
- if (mWeatherImage != null) {
- mWeatherImage.setImageResource(R.drawable.weather_na_cid);
+ if (mWeatherTempsPanel != null ) {
+ mWeatherTempsPanel.setVisibility(View.GONE);
}
// Show the Weather panel view
@@ -1016,6 +1011,11 @@ class KeyguardStatusViewManager implements OnClickListener {
if (v == mEmergencyCallButton) {
mCallback.takeEmergencyCallAction();
} else if (v == mWeatherPanel) {
+ // Indicate we are refreshing
+ if (mWeatherCondition != null) {
+ mWeatherCondition.setText(R.string.weather_refreshing);
+ }
+
mCallback.pokeWakelock();
if (!mHandler.hasMessages(QUERY_WEATHER)) {
mHandler.sendEmptyMessage(QUERY_WEATHER);
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/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 7a76728..cf06fbb 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -187,6 +187,17 @@ public class PhoneWindowManager implements WindowManagerPolicy {
static final int LONG_PRESS_HOME_RECENT_DIALOG = 1;
static final int LONG_PRESS_HOME_RECENT_SYSTEM_UI = 2;
+ static final int LONG_PRESS_MENU_NOTHING = 0;
+ static final int LONG_PRESS_MENU_SEARCH = 1;
+
+ // Masks for checking presence of hardware keys.
+ // Must match values in core/res/res/values/config.xml
+ private static final int KEY_MASK_HOME = 0x01;
+ private static final int KEY_MASK_BACK = 0x02;
+ private static final int KEY_MASK_MENU = 0x04;
+ private static final int KEY_MASK_SEARCH = 0x08;
+ private static final int KEY_MASK_APP_SWITCH = 0x10;
+
// wallpaper is at the bottom, though the window manager may move it.
static final int WALLPAPER_LAYER = 2;
static final int APPLICATION_LAYER = 2;
@@ -466,6 +477,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// What we do when the user long presses on home
private int mLongPressOnHomeBehavior = -1;
+ // What we do when the user long presses on menu
+ private int mLongPressOnMenuBehavior = -1;
+
// Screenshot trigger states
// Time to volume and power must be pressed within this interval of each other.
private static final long ACTION_CHORD_DEBOUNCE_DELAY_MILLIS = 150;
@@ -855,6 +869,37 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
}
+ private void handleLongPressOnMenu() {
+ if (mLongPressOnMenuBehavior < 0) {
+ if ((mContext.getResources().getInteger(
+ R.integer.config_deviceHardwareKeys) & KEY_MASK_SEARCH) == 0) {
+ // Hardware search key not present
+ mLongPressOnMenuBehavior = LONG_PRESS_MENU_SEARCH;
+ } else {
+ mLongPressOnMenuBehavior = LONG_PRESS_MENU_NOTHING;
+ }
+ }
+
+ if (mLongPressOnMenuBehavior == LONG_PRESS_MENU_SEARCH) {
+ performHapticFeedbackLw(null, HapticFeedbackConstants.LONG_PRESS, false);
+ triggerVirtualKeypress(KeyEvent.KEYCODE_SEARCH);
+ }
+ }
+
+ private void triggerVirtualKeypress(final int keyCode) {
+ new Thread(new Runnable() {
+ public void run() {
+ try {
+ mWindowManager.injectKeyEvent(
+ new KeyEvent(KeyEvent.ACTION_DOWN, keyCode), true);
+ mWindowManager.injectKeyEvent(
+ new KeyEvent(KeyEvent.ACTION_UP, keyCode), true);
+ } catch(RemoteException e) {
+ }
+ }
+ }).start();
+ }
+
/**
* Create (if necessary) and show or dismiss the recent apps dialog according
* according to the requested behavior.
@@ -1782,26 +1827,36 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// Hijack modified menu keys for debugging features
final int chordBug = KeyEvent.META_SHIFT_ON;
- if (down && repeatCount == 0) {
- if (mEnableShiftMenuBugReports && (metaState & chordBug) == chordBug) {
- Intent intent = new Intent(Intent.ACTION_BUG_REPORT);
- mContext.sendOrderedBroadcast(intent, null);
- return -1;
- } else if (SHOW_PROCESSES_ON_ALT_MENU &&
- (metaState & KeyEvent.META_ALT_ON) == KeyEvent.META_ALT_ON) {
- Intent service = new Intent();
- service.setClassName(mContext, "com.android.server.LoadAverageService");
- ContentResolver res = mContext.getContentResolver();
- boolean shown = Settings.System.getInt(
- res, Settings.System.SHOW_PROCESSES, 0) != 0;
- if (!shown) {
- mContext.startService(service);
- } else {
- mContext.stopService(service);
+ if (down) {
+ if (repeatCount == 0) {
+ if (mEnableShiftMenuBugReports && (metaState & chordBug) == chordBug) {
+ Intent intent = new Intent(Intent.ACTION_BUG_REPORT);
+ mContext.sendOrderedBroadcast(intent, null);
+ return -1;
+ } else if (SHOW_PROCESSES_ON_ALT_MENU &&
+ (metaState & KeyEvent.META_ALT_ON) == KeyEvent.META_ALT_ON) {
+ Intent service = new Intent();
+ service.setClassName(mContext, "com.android.server.LoadAverageService");
+ ContentResolver res = mContext.getContentResolver();
+ boolean shown = Settings.System.getInt(
+ res, Settings.System.SHOW_PROCESSES, 0) != 0;
+ if (!shown) {
+ mContext.startService(service);
+ } else {
+ mContext.stopService(service);
+ }
+ Settings.System.putInt(
+ res, Settings.System.SHOW_PROCESSES, shown ? 0 : 1);
+ return -1;
+ }
+ } else if ((event.getFlags() & KeyEvent.FLAG_LONG_PRESS) != 0) {
+ if (!keyguardOn) {
+ handleLongPressOnMenu();
+ if (mLongPressOnMenuBehavior != LONG_PRESS_MENU_NOTHING) {
+ // Do not open menu when key is released
+ return -1;
+ }
}
- Settings.System.putInt(
- res, Settings.System.SHOW_PROCESSES, shown ? 0 : 1);
- return -1;
}
}
} else if (keyCode == KeyEvent.KEYCODE_SEARCH) {
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/audioflinger/AudioPolicyService.cpp b/services/audioflinger/AudioPolicyService.cpp
index f4d99b3..b9a9115 100644
--- a/services/audioflinger/AudioPolicyService.cpp
+++ b/services/audioflinger/AudioPolicyService.cpp
@@ -23,6 +23,8 @@
#include <stdint.h>
#include <sys/time.h>
+#include <sys/types.h>
+#include <fcntl.h>
#include <binder/IServiceManager.h>
#include <utils/Log.h>
#include <cutils/properties.h>
@@ -57,6 +59,27 @@ static bool checkPermission() {
return ok;
}
+/* Returns true if HDMI mode, false if DVI or on errors */
+#ifdef QCOM_HARDWARE
+static bool isHDMIMode() {
+ char mode = '0';
+ const char* SYSFS_HDMI_MODE =
+ "/sys/devices/virtual/graphics/fb1/hdmi_mode";
+ int modeFile = open (SYSFS_HDMI_MODE, O_RDONLY, 0);
+ if(modeFile < 0) {
+ LOGE("%s: Node %s not found", __func__, SYSFS_HDMI_MODE);
+ } else {
+ //Read from the hdmi_mode file
+ int r = read(modeFile, &mode, 1);
+ if (r <= 0) {
+ LOGE("%s: hdmi_mode file empty '%s'", __func__, SYSFS_HDMI_MODE);
+ }
+ }
+ close(modeFile);
+ return (mode == '1') ? true : false;
+}
+#endif
+
namespace {
extern struct audio_policy_service_ops aps_ops;
};
@@ -168,7 +191,12 @@ status_t AudioPolicyService::setDeviceConnectionState(audio_devices_t device,
state != AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE) {
return BAD_VALUE;
}
-
+#ifdef QCOM_HARDWARE
+ /* On HDMI connection, return if we are not in HDMI mode */
+ if(device == AUDIO_DEVICE_OUT_AUX_DIGITAL && !isHDMIMode()) {
+ return NO_ERROR;
+ }
+#endif
LOGV("setDeviceConnectionState() tid %d", gettid());
Mutex::Autolock _l(mLock);
return mpAudioPolicy->set_device_connection_state(mpAudioPolicy, device,
@@ -182,6 +210,7 @@ audio_policy_dev_state_t AudioPolicyService::getDeviceConnectionState(
if (mpAudioPolicy == NULL) {
return AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE;
}
+ Mutex::Autolock _l(mLock);
return mpAudioPolicy->get_device_connection_state(mpAudioPolicy, device,
device_address);
}
diff --git a/services/input/InputReader.cpp b/services/input/InputReader.cpp
index fd5e079..c66e7a1 100644
--- a/services/input/InputReader.cpp
+++ b/services/input/InputReader.cpp
@@ -2528,7 +2528,8 @@ void TouchInputMapper::configure(nsecs_t when,
bool resetNeeded = false;
if (!changes || (changes & (InputReaderConfiguration::CHANGE_DISPLAY_INFO
| InputReaderConfiguration::CHANGE_POINTER_GESTURE_ENABLEMENT
- | InputReaderConfiguration::CHANGE_SHOW_TOUCHES))) {
+ | InputReaderConfiguration::CHANGE_SHOW_TOUCHES
+ | InputReaderConfiguration::CHANGE_STYLUS_ICON_ENABLED))) {
// Configure device sources, surface dimensions, orientation and
// scaling factors.
configureSurface(when, &resetNeeded);
@@ -2908,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;
@@ -4019,7 +4020,7 @@ void TouchInputMapper::dispatchPointerGestures(nsecs_t when, uint32_t policyFlag
&& (mPointerGesture.lastGestureMode == PointerGesture::SWIPE
|| mPointerGesture.lastGestureMode == PointerGesture::FREEFORM)) {
// Remind the user of where the pointer is after finishing a gesture with spots.
- mPointerController->unfade(PointerControllerInterface::TRANSITION_GRADUAL);
+ unfadePointer(PointerControllerInterface::TRANSITION_GRADUAL);
}
break;
case PointerGesture::TAP:
@@ -4029,7 +4030,7 @@ void TouchInputMapper::dispatchPointerGestures(nsecs_t when, uint32_t policyFlag
case PointerGesture::PRESS:
// Unfade the pointer when the current gesture manipulates the
// area directly under the pointer.
- mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE);
+ unfadePointer(PointerControllerInterface::TRANSITION_IMMEDIATE);
break;
case PointerGesture::SWIPE:
case PointerGesture::FREEFORM:
@@ -4038,7 +4039,7 @@ void TouchInputMapper::dispatchPointerGestures(nsecs_t when, uint32_t policyFlag
if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
} else {
- mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE);
+ unfadePointer(PointerControllerInterface::TRANSITION_IMMEDIATE);
}
break;
}
@@ -5066,7 +5067,7 @@ void TouchInputMapper::dispatchPointerSimple(nsecs_t when, uint32_t policyFlags,
mPointerController->setPresentation(PointerControllerInterface::PRESENTATION_POINTER);
mPointerController->clearSpots();
mPointerController->setButtonState(mCurrentButtonState);
- mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE);
+ unfadePointer(PointerControllerInterface::TRANSITION_IMMEDIATE);
} else if (!down && !hovering && (mPointerSimple.down || mPointerSimple.hovering)) {
mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
}
@@ -5254,6 +5255,13 @@ void TouchInputMapper::fadePointer() {
}
}
+void TouchInputMapper::unfadePointer(PointerControllerInterface::Transition transition) {
+ if (mPointerController != NULL &&
+ !(mPointerUsage == POINTER_USAGE_STYLUS && !mConfig.stylusIconEnabled)) {
+ mPointerController->unfade(transition);
+ }
+}
+
bool TouchInputMapper::isPointInsideSurface(int32_t x, int32_t y) {
return x >= mRawPointerAxes.x.minValue && x <= mRawPointerAxes.x.maxValue
&& y >= mRawPointerAxes.y.minValue && y <= mRawPointerAxes.y.maxValue;
diff --git a/services/input/InputReader.h b/services/input/InputReader.h
index 951197f..379229f 100644
--- a/services/input/InputReader.h
+++ b/services/input/InputReader.h
@@ -59,6 +59,9 @@ struct InputReaderConfiguration {
// The visible touches option changed.
CHANGE_SHOW_TOUCHES = 1 << 3,
+ // Stylus icon option changed.
+ CHANGE_STYLUS_ICON_ENABLED = 1 << 4,
+
// All devices must be reopened.
CHANGE_MUST_REOPEN = 1 << 31,
};
@@ -146,6 +149,9 @@ struct InputReaderConfiguration {
// True to show the location of touches on the touch screen as spots.
bool showTouches;
+ // True to show the pointer icon when a stylus is used.
+ bool stylusIconEnabled;
+
InputReaderConfiguration() :
virtualKeyQuietTime(0),
pointerVelocityControlParameters(1.0f, 500.0f, 3000.0f, 3.0f),
@@ -162,7 +168,8 @@ struct InputReaderConfiguration {
pointerGestureSwipeMaxWidthRatio(0.25f),
pointerGestureMovementSpeedRatio(0.8f),
pointerGestureZoomSpeedRatio(0.3f),
- showTouches(false) { }
+ showTouches(false),
+ stylusIconEnabled(false) { }
bool getDisplayInfo(int32_t displayId, bool external,
int32_t* width, int32_t* height, int32_t* orientation) const;
@@ -1525,6 +1532,8 @@ private:
const VirtualKey* findVirtualKeyHit(int32_t x, int32_t y);
void assignPointerIds();
+
+ void unfadePointer(PointerControllerInterface::Transition transition);
};
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 6133617..b56d22f 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -334,13 +334,17 @@ public class ConnectivityService extends IConnectivityManager.Stub {
mHandler = new MyHandler(handlerThread.getLooper());
// setup our unique device name
- if (TextUtils.isEmpty(SystemProperties.get("net.hostname"))) {
+ String hostname = Settings.Secure.getString(context.getContentResolver(),
+ Settings.Secure.DEVICE_HOSTNAME);
+ if (TextUtils.isEmpty(hostname) && TextUtils.isEmpty(SystemProperties.get("net.hostname"))) {
String id = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ANDROID_ID);
if (id != null && id.length() > 0) {
String name = new String("android-").concat(id);
SystemProperties.set("net.hostname", name);
}
+ } else {
+ SystemProperties.set("net.hostname", hostname);
}
// read our default dns server ip
diff --git a/services/java/com/android/server/HDMIListener.java b/services/java/com/android/server/HDMIListener.java
index cded8ad..da05f32 100644
--- a/services/java/com/android/server/HDMIListener.java
+++ b/services/java/com/android/server/HDMIListener.java
@@ -1,6 +1,6 @@
/*
* Copyright 2007, The Android Open Source Project
- * Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
+ * Copyright (c) 2010-2012, Code Aurora Forum. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -54,7 +54,6 @@ final class HDMIListener implements Runnable {
private static final String HDMI_EVT_CONNECTED = "hdmi_connected";
private static final String HDMI_EVT_DISCONNECTED = "hdmi_disconnected";
private static final String HDMI_EVT_START = "hdmi_listner_started";
- private static final String HDMI_EVT_NO_BROADCAST_ONLINE = "hdmi_no_broadcast_online";
private static final String HDMI_EVT_AUDIO_ON = "hdmi_audio_on";
private static final String HDMI_EVT_AUDIO_OFF = "hdmi_audio_off";
@@ -62,8 +61,6 @@ final class HDMIListener implements Runnable {
private DataOutputStream mOutputStream;
private boolean mHDMIConnected = false;
private boolean mHDMIEnabled = false;
- // Broadcast on HDMI connected
- private boolean mOnlineBroadCast = true;
private int[] mEDIDs = new int[0];
HDMIListener(HDMIService service) {
@@ -94,9 +91,6 @@ final class HDMIListener implements Runnable {
} else if (event.startsWith(HDMI_EVT_AUDIO_OFF)) {
// Notify HDMIAudio off
mService.notifyHDMIAudioOff();
- } else if (event.startsWith(HDMI_EVT_NO_BROADCAST_ONLINE)) {
- // do not broadcast on connect event
- mOnlineBroadCast = false;
}
}
@@ -202,10 +196,6 @@ final class HDMIListener implements Runnable {
boolean isHDMIConnected() {
return mHDMIConnected;
}
- // returns true if we need to broadcast for Audio on cable connect
- boolean getOnlineBroadcast() {
- return mOnlineBroadCast;
- }
public void enableHDMIOutput(boolean hdmiEnable) {
if (mHDMIEnabled == hdmiEnable) {
diff --git a/services/java/com/android/server/HDMIService.java b/services/java/com/android/server/HDMIService.java
index e5ac24c..03a31d6 100644..100755
--- a/services/java/com/android/server/HDMIService.java
+++ b/services/java/com/android/server/HDMIService.java
@@ -1,6 +1,6 @@
/*
* Copyright 2007, The Android Open Source Project
- * Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
+ * Copyright (c) 2010-2012, Code Aurora Forum. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -35,6 +35,7 @@ import android.os.UEventObserver;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
+import android.view.WindowManagerPolicy;
import java.io.File;
import java.io.FileReader;
@@ -52,10 +53,7 @@ class HDMIService extends IHDMIService.Stub {
private HDMIListener mListener;
private boolean mHDMIUserOption = false;
private int mHDMIModes[];
- public final String HDMICableConnectedEvent = "HDMI_CABLE_CONNECTED";
- public final String HDMICableDisconnectedEvent = "HDMI_CABLE_DISCONNECTED";
- public final String HDMIONEvent = "HDMI_CONNECTED";
- public final String HDMIOFFEvent = "HDMI_DISCONNECTED";
+ private int mCurrHDMIMode = -1;
final int m640x480p60_4_3 = 1;
final int m720x480p60_4_3 = 2;
@@ -80,30 +78,39 @@ class HDMIService extends IHDMIService.Stub {
switch (mode) {
default:
case m1440x480i60_4_3:
+ return 1; // 480i 4:3
case m1440x480i60_16_9:
- return 1; // 480i
+ return 2; // 480i 16:9
case m1440x576i50_4_3:
+ return 3; // i576i 4:3
case m1440x576i50_16_9:
- return 2; // 576i
+ return 4; // 576i 16:9
case m640x480p60_4_3:
- return 3; // 480p x640
+ return 5; // 640x480 4:3
case m720x480p60_4_3:
+ return 6; // 480p 4:3
case m720x480p60_16_9:
- return 4; // 480p x720
+ return 7; // 480p 16:9
case m720x576p50_4_3:
+ return 8; // 576p 4:3
case m720x576p50_16_9:
- return 5; // 576p
+ return 9; // 576p 16:9
case m1920x1080i60_16_9:
- return 6; // 1080i
- case m1280x720p60_16_9:
+ return 10; // 1080i 16:9
case m1280x720p50_16_9:
- return 7; // 720p
+ return 11; // 720p@50Hz
+ case m1280x720p60_16_9:
+ return 12; // 720p@60Hz
case m1920x1080p24_16_9:
+ return 13; //1080p@24Hz
case m1920x1080p25_16_9:
+ return 14; //108-p@25Hz
case m1920x1080p30_16_9:
+ return 15; //1080p@30Hz
case m1920x1080p50_16_9:
+ return 16; //1080p@50Hz
case m1920x1080p60_16_9:
- return 8;
+ return 17; //1080p@60Hz
}
}
@@ -127,6 +134,13 @@ class HDMIService extends IHDMIService.Stub {
// start processing events before we ought-to
mContext.registerReceiver(mBroadcastReceiver,
new IntentFilter(Intent.ACTION_BOOT_COMPLETED), null, null);
+ if(SystemProperties.getBoolean("ro.hdmi.enable", false)) {
+ //Stop and start the daemon if its already started
+ SystemProperties.set("ctl.stop", "hdmid");
+ SystemProperties.set("ctl.start", "hdmid");
+ //yield for the daemon to start
+ Thread.yield();
+ }
mListener = new HDMIListener(this);
String hdmiUserOption = Settings.System.getString(
mContext.getContentResolver(),
@@ -142,10 +156,7 @@ class HDMIService extends IHDMIService.Stub {
String action = intent.getAction();
if (action.equals(Intent.ACTION_BOOT_COMPLETED) &&
- (SystemProperties.getBoolean("ro.hdmi.enable", false))
-
-
- ) {
+ (SystemProperties.getBoolean("ro.hdmi.enable", false))) {
Thread thread = new Thread(mListener, HDMIListener.class.getName());
thread.start();
}
@@ -173,8 +184,8 @@ class HDMIService extends IHDMIService.Stub {
synchronized(mListener) {
if(enableHDMI == false) {
- broadcastEvent(HDMIOFFEvent);
- broadcastEvent(HDMICableDisconnectedEvent);
+ final boolean connected = false;
+ broadcastHDMIPluggedEvent(connected);
mListener.enableHDMIOutput(false);
}
mListener.setHPD(getHDMIUserOption());
@@ -193,42 +204,42 @@ class HDMIService extends IHDMIService.Stub {
return mHDMIUserOption;
}
- public void broadcastEvent(String eventName) {
- Intent intent = new Intent(eventName);
- intent.addCategory(Intent.CATEGORY_DEFAULT);
- mContext.sendBroadcast(intent);
- Log.e(TAG, "Broadcasting ... " + eventName);
+ public void setMode(int mode) {
+ mCurrHDMIMode = mode;
+ mListener.changeDisplayMode(mode);
}
- public void broadcastEvent(String eventName, int[] modes) {
- Intent intent = new Intent(eventName);
- intent.addCategory(Intent.CATEGORY_DEFAULT);
- intent.putExtra("EDID", modes);
- mContext.sendBroadcast(intent);
- Log.e(TAG, "Broadcasting ... " + eventName + ", modes: " + modes.length);
+ public int[] getModes() {
+ return mHDMIModes;
+ }
+
+ public void broadcastHDMIPluggedEvent(boolean connected) {
+ Intent intent = new Intent(WindowManagerPolicy.ACTION_HDMI_PLUGGED);
+ intent.putExtra(WindowManagerPolicy.EXTRA_HDMI_PLUGGED_STATE, connected);
+ if(connected)
+ intent.putExtra("EDID", mHDMIModes);
+ mContext.sendStickyBroadcast(intent);
+ Log.e(TAG, "Broadcasting Intent ACTION_HDMI_PLUGGED state = " + connected);
}
public void notifyHDMIConnected(int[] modes) {
mHDMIModes = modes;
- broadcastEvent(HDMICableConnectedEvent);
if(getHDMIUserOption()) {
synchronized(mListener) {
- mListener.changeDisplayMode(getBestMode());
+ if(mCurrHDMIMode == -1) {
+ mCurrHDMIMode = getBestMode();
+ }
+ mListener.changeDisplayMode(mCurrHDMIMode);
mListener.enableHDMIOutput(true);
}
- if((mListener.getOnlineBroadcast())) {
- Log.d(TAG, "Broadcast HDMI connected");
- broadcastEvent(HDMIONEvent, mHDMIModes);
- }
}
}
public void notifyHDMIDisconnected() {
mHDMIModes = null;
- broadcastEvent(HDMICableDisconnectedEvent);
+ mCurrHDMIMode = -1;
if(getHDMIUserOption()) {
- broadcastEvent(HDMIOFFEvent);
- synchronized(mListener) {
+ synchronized(mListener) {
mListener.enableHDMIOutput(false);
mListener.setHPD(getHDMIUserOption());
}
@@ -236,14 +247,16 @@ class HDMIService extends IHDMIService.Stub {
}
public void notifyHDMIAudioOn() {
+ boolean connected = true;
if(getHDMIUserOption()) {
- broadcastEvent(HDMIONEvent, mHDMIModes);
+ broadcastHDMIPluggedEvent(connected);
}
}
public void notifyHDMIAudioOff() {
+ boolean connected = false;
if(getHDMIUserOption()) {
- broadcastEvent(HDMIOFFEvent);
+ broadcastHDMIPluggedEvent(connected);
}
}
}
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/services/java/com/android/server/wm/InputManager.java b/services/java/com/android/server/wm/InputManager.java
index 587656c..f807c6b 100644
--- a/services/java/com/android/server/wm/InputManager.java
+++ b/services/java/com/android/server/wm/InputManager.java
@@ -98,7 +98,8 @@ public class InputManager implements Watchdog.Monitor {
private static native String nativeDump();
private static native void nativeMonitor();
private static native void nativeSetKeyLayout(String deviceName, String keyLayout);
-
+ private static native void nativeSetStylusIconEnabled(boolean enabled);
+
// Input event injection constants defined in InputDispatcher.h.
static final int INPUT_EVENT_INJECTION_SUCCEEDED = 0;
static final int INPUT_EVENT_INJECTION_PERMISSION_DENIED = 1;
@@ -151,12 +152,14 @@ public class InputManager implements Watchdog.Monitor {
registerPointerSpeedSettingObserver();
registerShowTouchesSettingObserver();
registerKeyLayoutSettingObserver();
+ registerStylusIconEnabledSettingObserver();
updatePointerSpeedFromSettings();
updateShowTouchesFromSettings();
updateKeyLayoutFromSettings();
+ updateStylusIconEnabledFromSettings();
}
-
+
public void setDisplaySize(int displayId, int width, int height,
int externalWidth, int externalHeight) {
if (width <= 0 || height <= 0 || externalWidth <= 0 || externalHeight <= 0) {
@@ -461,6 +464,35 @@ public class InputManager implements Watchdog.Monitor {
return speed;
}
+ /**
+ * Show the pointer icon when a stylus is used
+ * @param enabled
+ */
+ public void setStylusIconEnabled(boolean enabled) {
+ nativeSetStylusIconEnabled(enabled);
+ }
+
+ public void updateStylusIconEnabledFromSettings() {
+ boolean enabled = getStylusIconEnabled();
+ setStylusIconEnabled(enabled);
+ }
+
+ private void registerStylusIconEnabledSettingObserver() {
+ mContext.getContentResolver().registerContentObserver(
+ Settings.System.getUriFor(Settings.System.STYLUS_ICON_ENABLED), false,
+ new ContentObserver(mWindowManagerService.mH) {
+ @Override
+ public void onChange(boolean selfChange) {
+ updateStylusIconEnabledFromSettings();
+ }
+ });
+ }
+
+ private boolean getStylusIconEnabled() {
+ return Settings.System.getInt(mContext.getContentResolver(),
+ Settings.System.STYLUS_ICON_ENABLED, 0) == 1;
+ }
+
public void updateShowTouchesFromSettings() {
int setting = getShowTouchesSetting(0);
nativeSetShowTouches(setting != 0);
diff --git a/services/jni/com_android_server_InputManager.cpp b/services/jni/com_android_server_InputManager.cpp
index 62eafee..09ea215 100644
--- a/services/jni/com_android_server_InputManager.cpp
+++ b/services/jni/com_android_server_InputManager.cpp
@@ -188,6 +188,7 @@ public:
void setPointerSpeed(int32_t speed);
void setShowTouches(bool enabled);
void setKeyLayout(const char* deviceName, const char* keyLayout);
+ void setStylusIconEnabled(bool enabled);
/* --- InputReaderPolicyInterface implementation --- */
@@ -246,6 +247,9 @@ private:
// Show touches feature enable/disable.
bool showTouches;
+ // Show icon when stylus is used
+ bool stylusIconEnabled;
+
// Sprite controller singleton, created on first use.
sp<SpriteController> spriteController;
@@ -290,6 +294,7 @@ NativeInputManager::NativeInputManager(jobject contextObj,
mLocked.pointerSpeed = 0;
mLocked.pointerGesturesEnabled = true;
mLocked.showTouches = false;
+ mLocked.stylusIconEnabled = false;
}
sp<EventHub> eventHub = new EventHub();
@@ -447,6 +452,8 @@ void NativeInputManager::getReaderConfiguration(InputReaderConfiguration* outCon
outConfig->showTouches = mLocked.showTouches;
+ outConfig->stylusIconEnabled = mLocked.stylusIconEnabled;
+
outConfig->setDisplayInfo(0, false /*external*/,
mLocked.displayWidth, mLocked.displayHeight, mLocked.displayOrientation);
outConfig->setDisplayInfo(0, true /*external*/,
@@ -711,6 +718,22 @@ void NativeInputManager::setShowTouches(bool enabled) {
InputReaderConfiguration::CHANGE_SHOW_TOUCHES);
}
+void NativeInputManager::setStylusIconEnabled(bool enabled) {
+ { // acquire lock
+ AutoMutex _l(mLock);
+
+ if (mLocked.stylusIconEnabled == enabled) {
+ return;
+ }
+
+ LOGI("Setting stylus icon enabled to %s.", enabled ? "enabled" : "disabled");
+ mLocked.stylusIconEnabled = enabled;
+ } // release lock
+
+ mInputManager->getReader()->requestRefreshConfiguration(
+ InputReaderConfiguration::CHANGE_STYLUS_ICON_ENABLED);
+}
+
void NativeInputManager::setKeyLayout(const char* deviceName, const char* keyLayout) {
mInputManager->getReader()->setKeyLayout(deviceName, keyLayout);
mInputManager->getReader()->requestRefreshConfiguration(
@@ -1366,6 +1389,14 @@ static void android_server_InputManager_nativeSetKeyLayout(JNIEnv* env,
env->ReleaseStringUTFChars(keyLayout, cKeyLayout);
}
+static void android_server_InputManager_nativeSetStylusIconEnabled(JNIEnv* env,
+ jclass clazz, jboolean enabled) {
+ if (checkInputManagerUnitialized(env)) {
+ return;
+ }
+
+ gNativeInputManager->setStylusIconEnabled(enabled);
+}
// ----------------------------------------------------------------------------
static JNINativeMethod gInputManagerMethods[] = {
@@ -1422,6 +1453,8 @@ static JNINativeMethod gInputManagerMethods[] = {
(void*) android_server_InputManager_nativeMonitor },
{ "nativeSetKeyLayout", "(Ljava/lang/String;Ljava/lang/String;)V",
(void*) android_server_InputManager_nativeSetKeyLayout },
+ { "nativeSetStylusIconEnabled", "(Z)V",
+ (void*) android_server_InputManager_nativeSetStylusIconEnabled },
};
#define FIND_CLASS(var, className) \
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;
diff --git a/telephony/java/com/android/internal/telephony/QualcommSharedRIL.java b/telephony/java/com/android/internal/telephony/QualcommSharedRIL.java
index 19ae1ae..811919d 100644
--- a/telephony/java/com/android/internal/telephony/QualcommSharedRIL.java
+++ b/telephony/java/com/android/internal/telephony/QualcommSharedRIL.java
@@ -364,7 +364,7 @@ public class QualcommSharedRIL extends RIL implements CommandsInterface {
response[i] = -1;
noLte = true;
}
- if (i == 8 && !noLte) {
+ if (i == 8 && !(noLte || oldRil)) {
response[i] *= -1;
}
}