---
core/java/android/hardware/Sensor.java | 12 ++++++++++--
core/java/android/hardware/SensorEvent.java | 15 +++++++++++++--
2 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/core/java/android/hardware/Sensor.java b/core/java/android/hardware/Sensor.java
index 0ce2f7bc84784..f5fed4f9031dd 100644
--- a/core/java/android/hardware/Sensor.java
+++ b/core/java/android/hardware/Sensor.java
@@ -46,13 +46,21 @@ public class Sensor {
/** A constant describing a gyroscope sensor type */
public static final int TYPE_GYROSCOPE = 4;
- /** A constant describing a light sensor type */
+ /**
+ * A constant describing an light sensor type.
+ * See {@link android.hardware.SensorEvent SensorEvent}
+ * for more details.
+ */
public static final int TYPE_LIGHT = 5;
/** A constant describing a pressure sensor type */
public static final int TYPE_PRESSURE = 6;
/** A constant describing a temperature sensor type */
public static final int TYPE_TEMPERATURE = 7;
- /** A constant describing a proximity sensor type */
+ /**
+ * A constant describing an proximity sensor type.
+ * See {@link android.hardware.SensorEvent SensorEvent}
+ * for more details.
+ */
public static final int TYPE_PROXIMITY = 8;
diff --git a/core/java/android/hardware/SensorEvent.java b/core/java/android/hardware/SensorEvent.java
index cf939c52a5e3e..32d56910c3659 100644
--- a/core/java/android/hardware/SensorEvent.java
+++ b/core/java/android/hardware/SensorEvent.java
@@ -115,8 +115,19 @@ public class SensorEvent {
* {@link android.hardware.Sensor#TYPE_MAGNETIC_FIELD Sensor.TYPE_MAGNETIC_FIELD}:
* All values are in micro-Tesla (uT) and measure the ambient magnetic
* field in the X, Y and Z axis.
- *
- */
+ *
+ *
{@link android.hardware.Sensor#TYPE_LIGHT Sensor.TYPE_LIGHT}:
+ *
+ *
values[0]: Ambient light level in SI lux units
+ *
+ *
{@link android.hardware.Sensor#TYPE_PROXIMITY Sensor.TYPE_PROXIMITY}:
+ *
+ *
values[0]: Proximity sensor distance measured in centimeters
+ *
+ *
Note that some proximity sensors only support a binary "close" or "far" measurement.
+ * In this case, the sensor should report its maxRange value in the "far" state and a value
+ * less than maxRange in the "near" state.
+ */
public final float[] values;
/**
From f90ffcc639fe979f346f062d620d34c28e57c885 Mon Sep 17 00:00:00 2001
From: Mike Lockwood
Date: Tue, 3 Nov 2009 11:41:27 -0500
Subject: [PATCH 09/17] Remove obsolete hardware auto-brightness support.
Change-Id: Ibd0ef67f887254f26ce19faf0627f8b246ec0a18
Signed-off-by: Mike Lockwood
---
core/res/res/values/config.xml | 5 ----
.../com/android/server/HardwareService.java | 12 --------
.../android/server/PowerManagerService.java | 29 ++-----------------
.../com_android_server_HardwareService.cpp | 13 ---------
4 files changed, 2 insertions(+), 57 deletions(-)
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index bd6e7b4096ad9..90582214bfecb 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -71,11 +71,6 @@
the slider can be opened (for example, in a pocket or purse). -->
true
-
- false
-
false
diff --git a/services/java/com/android/server/HardwareService.java b/services/java/com/android/server/HardwareService.java
index 7c56a30804e81..b1d58ce8d1b01 100755
--- a/services/java/com/android/server/HardwareService.java
+++ b/services/java/com/android/server/HardwareService.java
@@ -59,8 +59,6 @@ public class HardwareService extends IHardwareService.Stub {
private boolean mAttentionLightOn;
private boolean mPulsing;
- private boolean mAutoBrightnessAvailable;
-
private class Vibration implements IBinder.DeathRecipient {
private final IBinder mToken;
private final long mTimeout;
@@ -131,9 +129,6 @@ public class HardwareService extends IHardwareService.Stub {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
context.registerReceiver(mIntentReceiver, filter);
-
- mAutoBrightnessAvailable = context.getResources().getBoolean(
- com.android.internal.R.bool.config_hardware_automatic_brightness_available);
}
protected void finalize() throws Throwable {
@@ -287,12 +282,6 @@ public class HardwareService extends IHardwareService.Stub {
setLight_native(mNativePointer, light, color, mode, onMS, offMS);
}
- void setAutoBrightness_UNCHECKED(boolean on) {
- if (mAutoBrightnessAvailable) {
- setAutoBrightness_native(mNativePointer, on);
- }
- }
-
public void setAttentionLight(boolean on) {
// Not worthy of a permission. We shouldn't have a flashlight permission.
synchronized (this) {
@@ -493,7 +482,6 @@ public class HardwareService extends IHardwareService.Stub {
private static native int init_native();
private static native void finalize_native(int ptr);
- private static native void setAutoBrightness_native(int ptr, boolean automatic);
private static native void setLight_native(int ptr, int light, int color, int mode,
int onMS, int offMS);
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index 8a7c28fc1fc17..f75f7195be0a4 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -218,12 +218,6 @@ class PowerManagerService extends IPowerManager.Stub
private int[] mButtonBacklightValues;
private int[] mKeyboardBacklightValues;
- /*
- * WARNING - DO NOT USE THE HARDWARE AUTO-BRIGHTNESS FEATURE
- * Hardware auto brightness support is deprecated and will be removed in the next release.
- */
- private boolean mUseHardwareAutoBrightness;
-
// Used when logging number and duration of touch-down cycles
private long mTotalTouchDownTime;
private long mLastTouchDown;
@@ -448,17 +442,6 @@ class PowerManagerService extends IPowerManager.Stub
// read settings for auto-brightness
mUseSoftwareAutoBrightness = resources.getBoolean(
com.android.internal.R.bool.config_automatic_brightness_available);
-
- /*
- * WARNING - DO NOT USE THE HARDWARE AUTO-BRIGHTNESS FEATURE
- * Hardware auto brightness support is deprecated and will be removed in the next release.
- */
- mUseHardwareAutoBrightness = resources.getBoolean(
- com.android.internal.R.bool.config_hardware_automatic_brightness_available);
- if (mUseHardwareAutoBrightness) {
- mUseSoftwareAutoBrightness = false;
- }
-
if (mUseSoftwareAutoBrightness) {
mAutoBrightnessLevels = resources.getIntArray(
com.android.internal.R.array.config_autoBrightnessLevels);
@@ -906,7 +889,6 @@ class PowerManagerService extends IPowerManager.Stub
pw.println(" mLightSensorEnabled=" + mLightSensorEnabled);
pw.println(" mLightSensorValue=" + mLightSensorValue);
pw.println(" mLightSensorPendingValue=" + mLightSensorPendingValue);
- pw.println(" mUseHardwareAutoBrightness=" + mUseHardwareAutoBrightness);
pw.println(" mUseSoftwareAutoBrightness=" + mUseSoftwareAutoBrightness);
pw.println(" mAutoBrightessEnabled=" + mAutoBrightessEnabled);
mScreenBrightness.dump(pw, " mScreenBrightness: ");
@@ -2086,16 +2068,9 @@ class PowerManagerService extends IPowerManager.Stub
private void setScreenBrightnessMode(int mode) {
boolean enabled = (mode == SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
- if (mAutoBrightessEnabled != enabled) {
+ if (mUseSoftwareAutoBrightness && mAutoBrightessEnabled != enabled) {
mAutoBrightessEnabled = enabled;
-
- if (mUseHardwareAutoBrightness) {
- // When setting auto-brightness, must reset the brightness afterwards
- mHardware.setAutoBrightness_UNCHECKED(enabled);
- if (screenIsOn()) {
- setBacklightBrightness((int)mScreenBrightness.curValue);
- }
- } else if (mUseSoftwareAutoBrightness && screenIsOn()) {
+ if (screenIsOn()) {
// force recompute of backlight values
if (mLightSensorValue >= 0) {
int value = (int)mLightSensorValue;
diff --git a/services/jni/com_android_server_HardwareService.cpp b/services/jni/com_android_server_HardwareService.cpp
index a17e29fbf60d5..22d4bd8766e89 100644
--- a/services/jni/com_android_server_HardwareService.cpp
+++ b/services/jni/com_android_server_HardwareService.cpp
@@ -100,18 +100,6 @@ static void finalize_native(JNIEnv *env, jobject clazz, int ptr)
free(devices);
}
-static void setAutoBrightness_native(JNIEnv *env, jobject clazz, int ptr,
- jboolean automatic)
-{
- Devices* devices = (Devices*)ptr;
-
- if (devices->lights[LIGHT_INDEX_BACKLIGHT] == NULL) {
- return;
- }
-
- devices->lights[LIGHT_INDEX_BACKLIGHT]->set_als_mode(automatic ? 0 : 1);
-}
-
static void setLight_native(JNIEnv *env, jobject clazz, int ptr,
int light, int colorARGB, int flashMode, int onMS, int offMS)
{
@@ -146,7 +134,6 @@ static void vibratorOff(JNIEnv *env, jobject clazz)
static JNINativeMethod method_table[] = {
{ "init_native", "()I", (void*)init_native },
{ "finalize_native", "(I)V", (void*)finalize_native },
- { "setAutoBrightness_native", "(IZ)V", (void*)setAutoBrightness_native },
{ "setLight_native", "(IIIIII)V", (void*)setLight_native },
{ "vibratorOn", "(J)V", (void*)vibratorOn },
{ "vibratorOff", "()V", (void*)vibratorOff }
From 6a7899a8d6444989657d1058666269263b5b50c0 Mon Sep 17 00:00:00 2001
From: Joe Onorato
Date: Tue, 3 Nov 2009 12:22:33 -0500
Subject: [PATCH 10/17] fix 2233092 - Notification shade gets stuck half-open
Follow up to bug 2195678. This was one of the reprocussions that
I was worried about with respect to that bug, so I'm counting
Dr. No on that change as the one for this one.
---
.../server/status/StatusBarService.java | 26 +++++++++++++------
1 file changed, 18 insertions(+), 8 deletions(-)
diff --git a/services/java/com/android/server/status/StatusBarService.java b/services/java/com/android/server/status/StatusBarService.java
index 8dded1a8a6e84..bd7b471c9fe29 100644
--- a/services/java/com/android/server/status/StatusBarService.java
+++ b/services/java/com/android/server/status/StatusBarService.java
@@ -692,6 +692,7 @@ public class StatusBarService extends IStatusBar.Stub
mTicker.addEntry(n, StatusBarIcon.getIcon(mContext, data), n.tickerText);
}
}
+ updateExpandedViewPos(EXPANDED_LEAVE_ALONE);
}
// icon
@@ -1562,15 +1563,24 @@ public class StatusBarService extends IStatusBar.Stub
+ " mTrackingPosition=" + mTrackingPosition);
}
- // If the expanded view is not visible, there is no reason to do
- // any work.
- if (!mExpandedVisible) {
- return;
- }
-
- // tracking view...
int h = mStatusBarView.getHeight();
int disph = mDisplay.getHeight();
+
+ // If the expanded view is not visible, make sure they're still off screen.
+ // Maybe the view was resized.
+ if (!mExpandedVisible) {
+ if (mTrackingView != null) {
+ mTrackingPosition = mTrackingParams.y = -disph;
+ WindowManagerImpl.getDefault().updateViewLayout(mTrackingView, mTrackingParams);
+ }
+ if (mExpandedParams != null) {
+ mExpandedParams.y = -disph;
+ mExpandedDialog.getWindow().setAttributes(mExpandedParams);
+ }
+ return;
+ }
+
+ // tracking view...
int pos;
if (expandedPosition == EXPANDED_FULL_OPEN) {
pos = h;
@@ -1681,7 +1691,7 @@ public class StatusBarService extends IStatusBar.Stub
private View.OnClickListener mClearButtonListener = new View.OnClickListener() {
public void onClick(View v) {
mNotificationCallbacks.onClearAll();
- performCollapse();
+ addPendingOp(OP_EXPAND, null, false);
}
};
From f4ee40e26ec43e17359ff5788565349a9aa71908 Mon Sep 17 00:00:00 2001
From: Eric Laurent
Date: Mon, 2 Nov 2009 10:29:02 -0800
Subject: [PATCH 11/17] Log for issue 2203561.
Implemented AudioPolicyService dump().
Added detailed dump for AudioPolicyManageriGeneric when AudioPolicyService is dumped.
---
.../AudioPolicyManagerGeneric.cpp | 119 ++++++++++++++++++
libs/audioflinger/AudioPolicyManagerGeneric.h | 7 ++
libs/audioflinger/AudioPolicyService.cpp | 99 ++++++++++++++-
libs/audioflinger/AudioPolicyService.h | 8 +-
4 files changed, 230 insertions(+), 3 deletions(-)
diff --git a/libs/audioflinger/AudioPolicyManagerGeneric.cpp b/libs/audioflinger/AudioPolicyManagerGeneric.cpp
index 632385915a32c..8cfc20433a354 100644
--- a/libs/audioflinger/AudioPolicyManagerGeneric.cpp
+++ b/libs/audioflinger/AudioPolicyManagerGeneric.cpp
@@ -459,6 +459,61 @@ status_t AudioPolicyManagerGeneric::getStreamVolumeIndex(AudioSystem::stream_typ
return NO_ERROR;
}
+status_t AudioPolicyManagerGeneric::dump(int fd)
+{
+ const size_t SIZE = 256;
+ char buffer[SIZE];
+ String8 result;
+
+ snprintf(buffer, SIZE, "\nAudioPolicyManager Dump: %p\n", this);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Hardware Output: %d\n", mHardwareOutput);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Output devices: %08x\n", mAvailableOutputDevices);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Input devices: %08x\n", mAvailableInputDevices);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Phone state: %d\n", mPhoneState);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Ringer mode: %d\n", mRingerMode);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Force use for communications %d\n", mForceUse[AudioSystem::FOR_COMMUNICATION]);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Force use for media %d\n", mForceUse[AudioSystem::FOR_MEDIA]);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Force use for record %d\n", mForceUse[AudioSystem::FOR_RECORD]);
+ result.append(buffer);
+ write(fd, result.string(), result.size());
+
+ snprintf(buffer, SIZE, "\nOutputs dump:\n");
+ write(fd, buffer, strlen(buffer));
+ for (size_t i = 0; i < mOutputs.size(); i++) {
+ snprintf(buffer, SIZE, "- Output %d dump:\n", mOutputs.keyAt(i));
+ write(fd, buffer, strlen(buffer));
+ mOutputs.valueAt(i)->dump(fd);
+ }
+
+ snprintf(buffer, SIZE, "\nInputs dump:\n");
+ write(fd, buffer, strlen(buffer));
+ for (size_t i = 0; i < mInputs.size(); i++) {
+ snprintf(buffer, SIZE, "- Input %d dump:\n", mInputs.keyAt(i));
+ write(fd, buffer, strlen(buffer));
+ mInputs.valueAt(i)->dump(fd);
+ }
+
+ snprintf(buffer, SIZE, "\nStreams dump:\n");
+ write(fd, buffer, strlen(buffer));
+ snprintf(buffer, SIZE, " Stream Index Min Index Max Index Cur Mute Count Can be muted\n");
+ write(fd, buffer, strlen(buffer));
+ for (size_t i = 0; i < AudioSystem::NUM_STREAM_TYPES; i++) {
+ snprintf(buffer, SIZE, " %02d", i);
+ mStreams[i].dump(buffer + 3, SIZE);
+ write(fd, buffer, strlen(buffer));
+ }
+
+ return NO_ERROR;
+}
+
// ----------------------------------------------------------------------------
// AudioPolicyManagerGeneric
// ----------------------------------------------------------------------------
@@ -815,6 +870,35 @@ uint32_t AudioPolicyManagerGeneric::AudioOutputDescriptor::refCount()
return refcount;
}
+status_t AudioPolicyManagerGeneric::AudioOutputDescriptor::dump(int fd)
+{
+ const size_t SIZE = 256;
+ char buffer[SIZE];
+ String8 result;
+
+ snprintf(buffer, SIZE, " Sampling rate: %d\n", mSamplingRate);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Format: %d\n", mFormat);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Channels: %08x\n", mChannels);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Latency: %d\n", mLatency);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Flags %08x\n", mFlags);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Devices %08x\n", mDevice);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Stream refCount\n");
+ result.append(buffer);
+ for (int i = 0; i < AudioSystem::NUM_STREAM_TYPES; i++) {
+ snprintf(buffer, SIZE, " %02d %d\n", i, mRefCount[i]);
+ result.append(buffer);
+ }
+ write(fd, result.string(), result.size());
+
+ return NO_ERROR;
+}
+
// --- AudioInputDescriptor class implementation
AudioPolicyManagerGeneric::AudioInputDescriptor::AudioInputDescriptor()
@@ -823,4 +907,39 @@ AudioPolicyManagerGeneric::AudioInputDescriptor::AudioInputDescriptor()
{
}
+status_t AudioPolicyManagerGeneric::AudioInputDescriptor::dump(int fd)
+{
+ const size_t SIZE = 256;
+ char buffer[SIZE];
+ String8 result;
+
+ snprintf(buffer, SIZE, " Sampling rate: %d\n", mSamplingRate);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Format: %d\n", mFormat);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Channels: %08x\n", mChannels);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Acoustics %08x\n", mAcoustics);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Devices %08x\n", mDevice);
+ result.append(buffer);
+ snprintf(buffer, SIZE, " Ref Count %d\n", mRefCount);
+ result.append(buffer);
+ write(fd, result.string(), result.size());
+
+ return NO_ERROR;
+}
+
+// --- StreamDescriptor class implementation
+
+void AudioPolicyManagerGeneric::StreamDescriptor::dump(char* buffer, size_t size)
+{
+ snprintf(buffer, size, " %02d %02d %02d %02d %d\n",
+ mIndexMin,
+ mIndexMax,
+ mIndexCur,
+ mMuteCount,
+ mCanBeMuted);
+}
+
}; // namespace android
diff --git a/libs/audioflinger/AudioPolicyManagerGeneric.h b/libs/audioflinger/AudioPolicyManagerGeneric.h
index d904520cbca13..4997cdf1499bc 100644
--- a/libs/audioflinger/AudioPolicyManagerGeneric.h
+++ b/libs/audioflinger/AudioPolicyManagerGeneric.h
@@ -76,6 +76,8 @@ public:
virtual status_t setStreamVolumeIndex(AudioSystem::stream_type stream, int index);
virtual status_t getStreamVolumeIndex(AudioSystem::stream_type stream, int *index);
+ virtual status_t dump(int fd);
+
private:
enum routing_strategy {
@@ -93,6 +95,7 @@ private:
public:
AudioOutputDescriptor();
+ status_t dump(int fd);
uint32_t device();
void changeRefCount(AudioSystem::stream_type, int delta);
@@ -115,6 +118,8 @@ private:
public:
AudioInputDescriptor();
+ status_t dump(int fd);
+
uint32_t mSamplingRate; //
uint32_t mFormat; // input configuration
uint32_t mChannels; //
@@ -130,6 +135,8 @@ private:
StreamDescriptor()
: mIndexMin(0), mIndexMax(1), mIndexCur(1), mMuteCount(0), mCanBeMuted(true) {}
+ void dump(char* buffer, size_t size);
+
int mIndexMin; // min volume index
int mIndexMax; // max volume index
int mIndexCur; // current volume index
diff --git a/libs/audioflinger/AudioPolicyService.cpp b/libs/audioflinger/AudioPolicyService.cpp
index f71c99c0c4ae0..97236973e6402 100644
--- a/libs/audioflinger/AudioPolicyService.cpp
+++ b/libs/audioflinger/AudioPolicyService.cpp
@@ -43,6 +43,12 @@
namespace android {
+static const char* kDeadlockedString = "AudioPolicyService may be deadlocked\n";
+static const char* kCmdDeadlockedString = "AudioPolicyService command thread may be deadlocked\n";
+
+static const int kDumpLockRetries = 50;
+static const int kDumpLockSleep = 20000;
+
static bool checkPermission() {
#ifndef HAVE_ANDROID_OS
return true;
@@ -335,17 +341,65 @@ void AudioPolicyService::binderDied(const wp& who) {
LOGW("binderDied() %p, tid %d, calling tid %d", who.unsafe_get(), gettid(), IPCThreadState::self()->getCallingPid());
}
+static bool tryLock(Mutex& mutex)
+{
+ bool locked = false;
+ for (int i = 0; i < kDumpLockRetries; ++i) {
+ if (mutex.tryLock() == NO_ERROR) {
+ locked = true;
+ break;
+ }
+ usleep(kDumpLockSleep);
+ }
+ return locked;
+}
+
+status_t AudioPolicyService::dumpInternals(int fd)
+{
+ const size_t SIZE = 256;
+ char buffer[SIZE];
+ String8 result;
+
+ snprintf(buffer, SIZE, "PolicyManager Interface: %p\n", mpPolicyManager);
+ result.append(buffer);
+ snprintf(buffer, SIZE, "Command Thread: %p\n", mAudioCommandThread.get());
+ result.append(buffer);
+ snprintf(buffer, SIZE, "Tones Thread: %p\n", mTonePlaybackThread.get());
+ result.append(buffer);
+
+ write(fd, result.string(), result.size());
+ return NO_ERROR;
+}
+
status_t AudioPolicyService::dump(int fd, const Vector& args)
{
if (checkCallingPermission(String16("android.permission.DUMP")) == false) {
- dumpPermissionDenial(fd, args);
+ dumpPermissionDenial(fd);
} else {
+ bool locked = tryLock(mLock);
+ if (!locked) {
+ String8 result(kDeadlockedString);
+ write(fd, result.string(), result.size());
+ }
+ dumpInternals(fd);
+ if (mAudioCommandThread != NULL) {
+ mAudioCommandThread->dump(fd);
+ }
+ if (mTonePlaybackThread != NULL) {
+ mTonePlaybackThread->dump(fd);
+ }
+
+ if (mpPolicyManager) {
+ mpPolicyManager->dump(fd);
+ }
+
+ if (locked) mLock.unlock();
}
return NO_ERROR;
}
-status_t AudioPolicyService::dumpPermissionDenial(int fd, const Vector& args)
+status_t AudioPolicyService::dumpPermissionDenial(int fd)
{
const size_t SIZE = 256;
char buffer[SIZE];
@@ -609,6 +663,36 @@ bool AudioPolicyService::AudioCommandThread::threadLoop()
return false;
}
+status_t AudioPolicyService::AudioCommandThread::dump(int fd)
+{
+ const size_t SIZE = 256;
+ char buffer[SIZE];
+ String8 result;
+
+ snprintf(buffer, SIZE, "AudioCommandThread %p Dump\n", this);
+ result.append(buffer);
+ write(fd, result.string(), result.size());
+
+ bool locked = tryLock(mLock);
+ if (!locked) {
+ String8 result2(kCmdDeadlockedString);
+ write(fd, result2.string(), result2.size());
+ }
+
+ snprintf(buffer, SIZE, "- Commands:\n");
+ result = String8(buffer);
+ result.append(" Command Time Status Wait pParam\n");
+ for (int i = 0; i < (int)mAudioCommands.size(); i++) {
+ mAudioCommands[i]->dump(buffer, SIZE);
+ result.append(buffer);
+ }
+ write(fd, result.string(), result.size());
+
+ if (locked) mLock.unlock();
+
+ return NO_ERROR;
+}
+
void AudioPolicyService::AudioCommandThread::startToneCommand(int type, int stream)
{
AudioCommand *command = new AudioCommand();
@@ -808,4 +892,15 @@ void AudioPolicyService::AudioCommandThread::exit()
requestExitAndWait();
}
+void AudioPolicyService::AudioCommandThread::AudioCommand::dump(char* buffer, size_t size)
+{
+ snprintf(buffer, size, " %02d %06d.%03d %03d %01u %p\n",
+ mCommand,
+ (int)ns2s(mTime),
+ (int)ns2ms(mTime)%1000,
+ mStatus,
+ mWaitStatus,
+ mParam);
+}
+
}; // namespace android
diff --git a/libs/audioflinger/AudioPolicyService.h b/libs/audioflinger/AudioPolicyService.h
index 11a1214489065..7c1bb85993ca9 100644
--- a/libs/audioflinger/AudioPolicyService.h
+++ b/libs/audioflinger/AudioPolicyService.h
@@ -111,6 +111,8 @@ private:
AudioPolicyService();
virtual ~AudioPolicyService();
+ status_t dumpInternals(int fd);
+
// Thread used for tone playback and to send audio config commands to audio flinger
// For tone playback, using a separate thread is necessary to avoid deadlock with mLock because startTone()
// and stopTone() are normally called with mLock locked and requesting a tone start or stop will cause
@@ -133,6 +135,8 @@ private:
AudioCommandThread ();
virtual ~AudioCommandThread();
+ status_t dump(int fd);
+
// Thread virtuals
virtual void onFirstRef();
virtual bool threadLoop();
@@ -149,6 +153,8 @@ private:
// descriptor for requested tone playback event
class AudioCommand {
public:
+ void dump(char* buffer, size_t size);
+
int mCommand; // START_TONE, STOP_TONE ...
nsecs_t mTime; // time stamp
Condition mCond; // condition for status return
@@ -188,7 +194,7 @@ private:
};
// Internal dump utilities.
- status_t dumpPermissionDenial(int fd, const Vector& args);
+ status_t dumpPermissionDenial(int fd);
Mutex mLock; // prevents concurrent access to AudioPolicy manager functions changing device
From 0fae86b80f7d1a8fc92552c4ce76f5fe7cf43fb4 Mon Sep 17 00:00:00 2001
From: Evan Millar
Date: Tue, 3 Nov 2009 09:49:43 -0800
Subject: [PATCH 12/17] Make QuickContact styles public.
This should have been done for the 2.0 sdk, but fell through the cracks.
Fortunately this will make it into the 2.1 sdk.
---
api/current.xml | 66 ++++++++++++++++++++++++++++++++++
core/res/res/values/public.xml | 8 +++++
2 files changed, 74 insertions(+)
diff --git a/api/current.xml b/api/current.xml
index b4161ae2381e2..e9d620675741e 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -6389,6 +6389,72 @@
visibility="public"
>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From d2906ad8350017e6a58564a3c827ef0286d75894 Mon Sep 17 00:00:00 2001
From: Andreas Huber
Date: Tue, 3 Nov 2009 10:26:34 -0800
Subject: [PATCH 13/17] Fix video flickering by propagating the NO_CACHING flag
from the master to MemoryHeapPMem.
---
media/libstagefright/omx/QComHardwareRenderer.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/media/libstagefright/omx/QComHardwareRenderer.cpp b/media/libstagefright/omx/QComHardwareRenderer.cpp
index 7dc368f16520e..c65d1f3bebc40 100644
--- a/media/libstagefright/omx/QComHardwareRenderer.cpp
+++ b/media/libstagefright/omx/QComHardwareRenderer.cpp
@@ -126,7 +126,8 @@ void QComHardwareRenderer::publishBuffers(uint32_t pmem_fd) {
master->setDevice("/dev/pmem");
- mMemoryHeap = new MemoryHeapPmem(master, 0);
+ uint32_t heap_flags = master->getFlags() & MemoryHeapBase::NO_CACHING;
+ mMemoryHeap = new MemoryHeapPmem(master, heap_flags);
mMemoryHeap->slap();
ISurface::BufferHeap bufferHeap(
From a86f28494c526ef14c736a977d746b3e5d9ab49e Mon Sep 17 00:00:00 2001
From: Brett Chabot
Date: Tue, 3 Nov 2009 10:31:31 -0800
Subject: [PATCH 14/17] Fix layoutlib tests so they pas when run from Eclipse
workbench.
Bug 2222616
---
.../com/android/layoutlib/bridge/BridgeXmlBlockParserTest.java | 2 +-
.../tests/com/android/layoutlib/bridge/NinePatchTest.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/BridgeXmlBlockParserTest.java b/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/BridgeXmlBlockParserTest.java
index 9e2987a4d33e8..db1262f8b19b5 100644
--- a/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/BridgeXmlBlockParserTest.java
+++ b/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/BridgeXmlBlockParserTest.java
@@ -41,7 +41,7 @@ public class BridgeXmlBlockParserTest extends TestCase {
parser = new BridgeXmlBlockParser(parser, null, false /* platformResourceFlag */);
InputStream input = this.getClass().getClassLoader().getResourceAsStream(
- "/com/android/layoutlib/testdata/layout1.xml");
+ "com/android/layoutlib/testdata/layout1.xml");
parser.setInput(input, null /*encoding*/);
assertEquals(XmlPullParser.START_DOCUMENT, parser.next());
diff --git a/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/NinePatchTest.java b/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/NinePatchTest.java
index 5314976ff89a7..d5993dbb7f378 100644
--- a/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/NinePatchTest.java
+++ b/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/NinePatchTest.java
@@ -13,7 +13,7 @@ public class NinePatchTest extends TestCase {
@Override
protected void setUp() throws Exception {
URL url = this.getClass().getClassLoader().getResource(
- "/com/android/layoutlib/testdata/button.9.png");
+ "com/android/layoutlib/testdata/button.9.png");
mPatch = NinePatch.load(url, false /* convert */);
}
From 732046f87412dc5da4e7290c9f7c4bd7fa3071e1 Mon Sep 17 00:00:00 2001
From: Romain Guy
Date: Tue, 3 Nov 2009 11:57:22 -0800
Subject: [PATCH 15/17] Unhide View.isOpaque().
Change-Id: I96444af2a7e66a330a2c4b3fa0a173ec5ab4ed40
---
api/current.xml | 11 +++++++++++
core/java/android/view/View.java | 2 --
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/api/current.xml b/api/current.xml
index e9d620675741e..3abd38b6a16ed 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -158108,6 +158108,17 @@
visibility="public"
>
+
+
Date: Tue, 3 Nov 2009 12:26:15 -0800
Subject: [PATCH 16/17] Revert "Fix notification bar performance."
As per Dr. No; revert commit 0d7dc3b800d0489c43ad9071615b2b4ebec80443.
---
.../android/server/status/StatusBarService.java | 14 +++++---------
.../android/server/status/TrackingPatternView.java | 2 ++
2 files changed, 7 insertions(+), 9 deletions(-)
diff --git a/services/java/com/android/server/status/StatusBarService.java b/services/java/com/android/server/status/StatusBarService.java
index bd7b471c9fe29..31ee1d3845866 100644
--- a/services/java/com/android/server/status/StatusBarService.java
+++ b/services/java/com/android/server/status/StatusBarService.java
@@ -951,8 +951,7 @@ public class StatusBarService extends IStatusBar.Stub
panelSlightlyVisible(true);
updateExpandedViewPos(EXPANDED_LEAVE_ALONE);
- mExpandedParams.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
- mExpandedDialog.getWindow().setAttributes(mExpandedParams);
+ mExpandedDialog.show();
mExpandedView.requestFocus(View.FOCUS_FORWARD);
mTrackingView.setVisibility(View.VISIBLE);
@@ -1029,8 +1028,7 @@ public class StatusBarService extends IStatusBar.Stub
}
mExpandedVisible = false;
panelSlightlyVisible(false);
- mExpandedParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
- mExpandedDialog.getWindow().setAttributes(mExpandedParams);
+ mExpandedDialog.hide();
mTrackingView.setVisibility(View.GONE);
if ((mDisabled & StatusBarManager.DISABLE_NOTIFICATION_ICONS) == 0) {
@@ -1059,7 +1057,6 @@ public class StatusBarService extends IStatusBar.Stub
else if (mAnimY < mStatusBarView.getHeight()) {
if (SPEW) Log.d(TAG, "Animation completed to collapsed state.");
mAnimating = false;
- updateExpandedViewPos(0);
performCollapse();
}
else {
@@ -1512,19 +1509,17 @@ public class StatusBarService extends IStatusBar.Stub
}
}
- final int disph = mDisplay.getHeight();
lp = mExpandedDialog.getWindow().getAttributes();
lp.width = ViewGroup.LayoutParams.FILL_PARENT;
lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
lp.x = 0;
- mTrackingPosition = lp.y = -disph; // sufficiently large negative
+ lp.y = 0;
lp.type = WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL;
lp.flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
- | WindowManager.LayoutParams.FLAG_DITHER
- | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
+ | WindowManager.LayoutParams.FLAG_DITHER;
lp.format = pixelFormat;
lp.gravity = Gravity.TOP | Gravity.FILL_HORIZONTAL;
lp.setTitle("StatusBarExpanded");
@@ -1537,6 +1532,7 @@ public class StatusBarService extends IStatusBar.Stub
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
mExpandedDialog.show();
+ mExpandedDialog.hide();
FrameLayout hack = (FrameLayout)mExpandedView.getParent();
hack.setForeground(null);
}
diff --git a/services/java/com/android/server/status/TrackingPatternView.java b/services/java/com/android/server/status/TrackingPatternView.java
index 4cb8eff5043a7..0ae9984cb348c 100644
--- a/services/java/com/android/server/status/TrackingPatternView.java
+++ b/services/java/com/android/server/status/TrackingPatternView.java
@@ -55,6 +55,8 @@ public class TrackingPatternView extends View {
final int textureWidth = mTextureWidth;
final int textureHeight = mTextureHeight;
+ Log.d("TrackingPatternView", "width=" + width + " textureWidth=" + textureWidth);
+
int x = 0;
int y;
From b96a9d9296925fef6a1c0e5ad4d847d96bf9acb5 Mon Sep 17 00:00:00 2001
From: Android Git Automerger
Date: Tue, 3 Nov 2009 12:29:46 -0800
Subject: [PATCH 17/17] Revert "fix 2233092 - Notification shade gets stuck
half-open"
As per Dr. No; revert commit 6a7899a8d6444989657d1058666269263b5b50c0.
---
.../server/status/StatusBarService.java | 22 +++++--------------
1 file changed, 6 insertions(+), 16 deletions(-)
diff --git a/services/java/com/android/server/status/StatusBarService.java b/services/java/com/android/server/status/StatusBarService.java
index 31ee1d3845866..59e9832c18fe6 100644
--- a/services/java/com/android/server/status/StatusBarService.java
+++ b/services/java/com/android/server/status/StatusBarService.java
@@ -692,7 +692,6 @@ public class StatusBarService extends IStatusBar.Stub
mTicker.addEntry(n, StatusBarIcon.getIcon(mContext, data), n.tickerText);
}
}
- updateExpandedViewPos(EXPANDED_LEAVE_ALONE);
}
// icon
@@ -1559,24 +1558,15 @@ public class StatusBarService extends IStatusBar.Stub
+ " mTrackingPosition=" + mTrackingPosition);
}
- int h = mStatusBarView.getHeight();
- int disph = mDisplay.getHeight();
-
- // If the expanded view is not visible, make sure they're still off screen.
- // Maybe the view was resized.
+ // If the expanded view is not visible, there is no reason to do
+ // any work.
if (!mExpandedVisible) {
- if (mTrackingView != null) {
- mTrackingPosition = mTrackingParams.y = -disph;
- WindowManagerImpl.getDefault().updateViewLayout(mTrackingView, mTrackingParams);
- }
- if (mExpandedParams != null) {
- mExpandedParams.y = -disph;
- mExpandedDialog.getWindow().setAttributes(mExpandedParams);
- }
return;
}
-
+
// tracking view...
+ int h = mStatusBarView.getHeight();
+ int disph = mDisplay.getHeight();
int pos;
if (expandedPosition == EXPANDED_FULL_OPEN) {
pos = h;
@@ -1687,7 +1677,7 @@ public class StatusBarService extends IStatusBar.Stub
private View.OnClickListener mClearButtonListener = new View.OnClickListener() {
public void onClick(View v) {
mNotificationCallbacks.onClearAll();
- addPendingOp(OP_EXPAND, null, false);
+ performCollapse();
}
};