summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorMathias Agopian <>2009-03-27 16:10:37 -0700
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-27 16:10:37 -0700
commit66b8ec99c5fc505877b3711a52e284bbb451f836 (patch)
tree7551907d6083bcd455632f84f528cbd4d06ffd04 /libs
parent1e880dba106b14619c3eaf94c5dc2d1a943645bc (diff)
downloadframeworks_base-66b8ec99c5fc505877b3711a52e284bbb451f836.zip
frameworks_base-66b8ec99c5fc505877b3711a52e284bbb451f836.tar.gz
frameworks_base-66b8ec99c5fc505877b3711a52e284bbb451f836.tar.bz2
AI 143171: am: CL 142873 fix [1732012] Only show screen rotation animation when triggered by sensor
Original author: mathias Merged from: //branches/cupcake/... Automated import of CL 143171
Diffstat (limited to 'libs')
-rw-r--r--libs/surfaceflinger/OrientationAnimation.cpp31
-rw-r--r--libs/surfaceflinger/OrientationAnimation.h18
-rw-r--r--libs/surfaceflinger/SurfaceFlinger.cpp9
-rw-r--r--libs/surfaceflinger/SurfaceFlinger.h3
-rw-r--r--libs/ui/ISurfaceComposer.cpp6
-rw-r--r--libs/ui/SurfaceComposerClient.cpp5
6 files changed, 45 insertions, 27 deletions
diff --git a/libs/surfaceflinger/OrientationAnimation.cpp b/libs/surfaceflinger/OrientationAnimation.cpp
index e59688e..70eec8d 100644
--- a/libs/surfaceflinger/OrientationAnimation.cpp
+++ b/libs/surfaceflinger/OrientationAnimation.cpp
@@ -44,10 +44,14 @@ OrientationAnimation::~OrientationAnimation()
{
}
-void OrientationAnimation::onOrientationChanged()
+void OrientationAnimation::onOrientationChanged(uint32_t type)
{
- if (mState == DONE)
- mState = PREPARE;
+ if (mState == DONE) {
+ mType = type;
+ if (!(type & ISurfaceComposer::eOrientationAnimationDisable)) {
+ mState = PREPARE;
+ }
+ }
}
void OrientationAnimation::onAnimationFinished()
@@ -82,14 +86,7 @@ bool OrientationAnimation::run_impl()
bool OrientationAnimation::done()
{
- if (mFlinger->isFrozen()) {
- // we are not allowed to draw, but pause a bit to make sure
- // apps don't end up using the whole CPU, if they depend on
- // surfaceflinger for synchronization.
- usleep(8333); // 8.3ms ~ 120fps
- return true;
- }
- return false;
+ return done_impl();
}
bool OrientationAnimation::prepare()
@@ -115,11 +112,13 @@ bool OrientationAnimation::prepare()
LayerOrientationAnimBase* l;
- l = new LayerOrientationAnim(
- mFlinger.get(), 0, this, bitmap, bitmapIn);
-
- //l = new LayerOrientationAnimRotate(
- // mFlinger.get(), 0, this, bitmap, bitmapIn);
+ if (mType & 0x80) {
+ l = new LayerOrientationAnimRotate(
+ mFlinger.get(), 0, this, bitmap, bitmapIn);
+ } else {
+ l = new LayerOrientationAnim(
+ mFlinger.get(), 0, this, bitmap, bitmapIn);
+ }
l->initStates(w, h, 0);
l->setLayer(INT_MAX-1);
diff --git a/libs/surfaceflinger/OrientationAnimation.h b/libs/surfaceflinger/OrientationAnimation.h
index b170dcb..cafa38d 100644
--- a/libs/surfaceflinger/OrientationAnimation.h
+++ b/libs/surfaceflinger/OrientationAnimation.h
@@ -36,11 +36,11 @@ public:
OrientationAnimation(const sp<SurfaceFlinger>& flinger);
virtual ~OrientationAnimation();
- void onOrientationChanged();
+ void onOrientationChanged(uint32_t type);
void onAnimationFinished();
inline bool run() {
if (LIKELY(mState == DONE))
- return false;
+ return done_impl();
return run_impl();
}
@@ -54,7 +54,18 @@ private:
};
bool run_impl();
- bool done();
+ inline bool done_impl() {
+ if (mFlinger->isFrozen()) {
+ // we are not allowed to draw, but pause a bit to make sure
+ // apps don't end up using the whole CPU, if they depend on
+ // surfaceflinger for synchronization.
+ usleep(8333); // 8.3ms ~ 120fps
+ return true;
+ }
+ return false;
+ }
+
+ bool done();
bool prepare();
bool phase1();
bool phase2();
@@ -64,6 +75,7 @@ private:
sp<MemoryDealer> mTemporaryDealer;
LayerOrientationAnimBase* mLayerOrientationAnim;
int mState;
+ uint32_t mType;
};
// ---------------------------------------------------------------------------
diff --git a/libs/surfaceflinger/SurfaceFlinger.cpp b/libs/surfaceflinger/SurfaceFlinger.cpp
index 8499b67..de64f55 100644
--- a/libs/surfaceflinger/SurfaceFlinger.cpp
+++ b/libs/surfaceflinger/SurfaceFlinger.cpp
@@ -655,6 +655,7 @@ void SurfaceFlinger::handleTransaction(uint32_t transactionFlags)
const int dpy = 0;
const int orientation = mCurrentState.orientation;
+ const uint32_t type = mCurrentState.orientationType;
GraphicPlane& plane(graphicPlane(dpy));
plane.setOrientation(orientation);
@@ -673,8 +674,8 @@ void SurfaceFlinger::handleTransaction(uint32_t transactionFlags)
mVisibleRegionsDirty = true;
mDirtyRegion.set(hw.bounds());
-
- mOrientationAnimation->onOrientationChanged();
+ mFreezeDisplayTime = 0;
+ mOrientationAnimation->onOrientationChanged(type);
}
if (mCurrentState.freezeDisplay != mDrawingState.freezeDisplay) {
@@ -1201,7 +1202,8 @@ status_t SurfaceFlinger::unfreezeDisplay(DisplayID dpy, uint32_t flags)
return NO_ERROR;
}
-int SurfaceFlinger::setOrientation(DisplayID dpy, int orientation)
+int SurfaceFlinger::setOrientation(DisplayID dpy,
+ int orientation, uint32_t flags)
{
if (UNLIKELY(uint32_t(dpy) >= DISPLAY_COUNT))
return BAD_VALUE;
@@ -1209,6 +1211,7 @@ int SurfaceFlinger::setOrientation(DisplayID dpy, int orientation)
Mutex::Autolock _l(mStateLock);
if (mCurrentState.orientation != orientation) {
if (uint32_t(orientation)<=eOrientation270 || orientation==42) {
+ mCurrentState.orientationType = flags;
mCurrentState.orientation = orientation;
setTransactionFlags(eTransactionNeeded);
mTransactionCV.wait(mStateLock);
diff --git a/libs/surfaceflinger/SurfaceFlinger.h b/libs/surfaceflinger/SurfaceFlinger.h
index 3c10481..e023182 100644
--- a/libs/surfaceflinger/SurfaceFlinger.h
+++ b/libs/surfaceflinger/SurfaceFlinger.h
@@ -167,7 +167,7 @@ public:
virtual void closeGlobalTransaction();
virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags);
virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags);
- virtual int setOrientation(DisplayID dpy, int orientation);
+ virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags);
virtual void signal() const;
virtual status_t requestGPU(const sp<IGPUCallback>& callback,
gpu_info_t* gpu);
@@ -244,6 +244,7 @@ private:
}
LayerVector layersSortedByZ;
uint8_t orientation;
+ uint8_t orientationType;
uint8_t freezeDisplay;
};
diff --git a/libs/ui/ISurfaceComposer.cpp b/libs/ui/ISurfaceComposer.cpp
index 0fea6f9..76597e1 100644
--- a/libs/ui/ISurfaceComposer.cpp
+++ b/libs/ui/ISurfaceComposer.cpp
@@ -96,12 +96,13 @@ public:
return reply.readInt32();
}
- virtual int setOrientation(DisplayID dpy, int orientation)
+ virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags)
{
Parcel data, reply;
data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
data.writeInt32(dpy);
data.writeInt32(orientation);
+ data.writeInt32(flags);
remote()->transact(BnSurfaceComposer::SET_ORIENTATION, data, &reply);
return reply.readInt32();
}
@@ -184,7 +185,8 @@ status_t BnSurfaceComposer::onTransact(
case SET_ORIENTATION: {
DisplayID dpy = data.readInt32();
int orientation = data.readInt32();
- reply->writeInt32( setOrientation(dpy, orientation) );
+ uint32_t flags = data.readInt32();
+ reply->writeInt32( setOrientation(dpy, orientation, flags) );
} break;
case FREEZE_DISPLAY: {
DisplayID dpy = data.readInt32();
diff --git a/libs/ui/SurfaceComposerClient.cpp b/libs/ui/SurfaceComposerClient.cpp
index 9354a7a..fe803ff 100644
--- a/libs/ui/SurfaceComposerClient.cpp
+++ b/libs/ui/SurfaceComposerClient.cpp
@@ -813,10 +813,11 @@ status_t SurfaceComposerClient::unfreezeDisplay(DisplayID dpy, uint32_t flags)
return sm->unfreezeDisplay(dpy, flags);
}
-int SurfaceComposerClient::setOrientation(DisplayID dpy, int orientation)
+int SurfaceComposerClient::setOrientation(DisplayID dpy,
+ int orientation, uint32_t flags)
{
const sp<ISurfaceComposer>& sm(_get_surface_manager());
- return sm->setOrientation(dpy, orientation);
+ return sm->setOrientation(dpy, orientation, flags);
}
status_t SurfaceComposerClient::openTransaction()