summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/service/wallpaper/WallpaperService.java3
-rw-r--r--core/java/android/view/SurfaceView.java12
-rw-r--r--core/java/android/view/ViewRoot.java1
-rw-r--r--core/java/com/android/internal/service/wallpaper/ImageWallpaper.java58
-rw-r--r--core/java/com/android/internal/view/BaseSurfaceHolder.java19
-rw-r--r--policy/src/com/android/internal/policy/impl/PhoneWindow.java1
6 files changed, 66 insertions, 28 deletions
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index 52b0643..44887ed 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -546,7 +546,8 @@ public abstract class WallpaperService extends Service {
sizeChanged = true;
mCurHeight = h;
}
-
+
+ mSurfaceHolder.setSurfaceFrameSize(w, h);
mSurfaceHolder.mSurfaceLock.unlock();
if (!mSurfaceHolder.mSurface.isValid()) {
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 6451d47..8a95664 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -158,6 +158,7 @@ public class SurfaceView extends View {
int mHeight = -1;
int mFormat = -1;
final Rect mSurfaceFrame = new Rect();
+ Rect mTmpDirty;
int mLastSurfaceWidth = -1, mLastSurfaceHeight = -1;
boolean mUpdateWindowNeeded;
boolean mReportDrawNeeded;
@@ -739,9 +740,16 @@ public class SurfaceView extends View {
Canvas c = null;
if (!mDrawingStopped && mWindow != null) {
- Rect frame = dirty != null ? dirty : mSurfaceFrame;
+ if (dirty == null) {
+ if (mTmpDirty == null) {
+ mTmpDirty = new Rect();
+ }
+ mTmpDirty.set(mSurfaceFrame);
+ dirty = mTmpDirty;
+ }
+
try {
- c = mSurface.lockCanvas(frame);
+ c = mSurface.lockCanvas(dirty);
} catch (Exception e) {
Log.e(LOG_TAG, "Exception locking surface", e);
}
diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java
index 19d7811..44aca7d 100644
--- a/core/java/android/view/ViewRoot.java
+++ b/core/java/android/view/ViewRoot.java
@@ -1082,6 +1082,7 @@ public final class ViewRoot extends Handler implements ViewParent,
//mSurfaceHolder.mSurface.copyFrom(mSurface);
mSurfaceHolder.mSurface = mSurface;
}
+ mSurfaceHolder.setSurfaceFrameSize(mWidth, mHeight);
mSurfaceHolder.mSurfaceLock.unlock();
if (mSurface.isValid()) {
if (!hadSurface) {
diff --git a/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java b/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java
index 78688ee..595c634 100644
--- a/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java
+++ b/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java
@@ -88,9 +88,13 @@ public class ImageWallpaper extends WallpaperService {
class WallpaperObserver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
+ if (DEBUG) {
+ Log.d(TAG, "onReceive");
+ }
+
synchronized (mLock) {
updateWallpaperLocked();
- drawFrameLocked(true, false);
+ drawFrameLocked();
}
// Assume we are the only one using the wallpaper in this
@@ -101,6 +105,10 @@ public class ImageWallpaper extends WallpaperService {
@Override
public void onCreate(SurfaceHolder surfaceHolder) {
+ if (DEBUG) {
+ Log.d(TAG, "onCreate");
+ }
+
super.onCreate(surfaceHolder);
IntentFilter filter = new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED);
mReceiver = new WallpaperObserver();
@@ -120,9 +128,18 @@ public class ImageWallpaper extends WallpaperService {
@Override
public void onVisibilityChanged(boolean visible) {
+ if (DEBUG) {
+ Log.d(TAG, "onVisibilityChanged: visible=" + visible);
+ }
+
synchronized (mLock) {
- mVisible = visible;
- drawFrameLocked(false, false);
+ if (mVisible != visible) {
+ if (DEBUG) {
+ Log.d(TAG, "Visibility changed to visible=" + visible);
+ }
+ mVisible = visible;
+ drawFrameLocked();
+ }
}
}
@@ -135,6 +152,12 @@ public class ImageWallpaper extends WallpaperService {
public void onOffsetsChanged(float xOffset, float yOffset,
float xOffsetStep, float yOffsetStep,
int xPixels, int yPixels) {
+ if (DEBUG) {
+ Log.d(TAG, "onOffsetsChanged: xOffset=" + xOffset + ", yOffset=" + yOffset
+ + ", xOffsetStep=" + xOffsetStep + ", yOffsetStep=" + yOffsetStep
+ + ", xPixels=" + xPixels + ", yPixels=" + yPixels);
+ }
+
synchronized (mLock) {
if (mXOffset != xOffset || mYOffset != yOffset) {
if (DEBUG) {
@@ -142,36 +165,27 @@ public class ImageWallpaper extends WallpaperService {
}
mXOffset = xOffset;
mYOffset = yOffset;
- drawFrameLocked(false, true);
- } else {
- drawFrameLocked(false, false);
+ mOffsetsChanged = true;
}
+ drawFrameLocked();
}
}
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
- super.onSurfaceChanged(holder, format, width, height);
-
- synchronized (mLock) {
- drawFrameLocked(true, false);
+ if (DEBUG) {
+ Log.d(TAG, "onSurfaceChanged: width=" + width + ", height=" + height);
}
- }
- @Override
- public void onSurfaceCreated(SurfaceHolder holder) {
- super.onSurfaceCreated(holder);
- }
+ super.onSurfaceChanged(holder, format, width, height);
- @Override
- public void onSurfaceDestroyed(SurfaceHolder holder) {
- super.onSurfaceDestroyed(holder);
+ synchronized (mLock) {
+ mRedrawNeeded = true;
+ drawFrameLocked();
+ }
}
- void drawFrameLocked(boolean redrawNeeded, boolean offsetsChanged) {
- mRedrawNeeded |= redrawNeeded;
- mOffsetsChanged |= offsetsChanged;
-
+ void drawFrameLocked() {
if (!mVisible) {
if (DEBUG) {
Log.d(TAG, "Suppressed drawFrame since wallpaper is not visible.");
diff --git a/core/java/com/android/internal/view/BaseSurfaceHolder.java b/core/java/com/android/internal/view/BaseSurfaceHolder.java
index 1e97cd6..f9f94be 100644
--- a/core/java/com/android/internal/view/BaseSurfaceHolder.java
+++ b/core/java/com/android/internal/view/BaseSurfaceHolder.java
@@ -49,6 +49,7 @@ public abstract class BaseSurfaceHolder implements SurfaceHolder {
int mType = -1;
final Rect mSurfaceFrame = new Rect();
+ Rect mTmpDirty;
public abstract void onUpdateSurface();
public abstract void onRelayoutContainer();
@@ -171,9 +172,16 @@ public abstract class BaseSurfaceHolder implements SurfaceHolder {
Canvas c = null;
if (onAllowLockCanvas()) {
- Rect frame = dirty != null ? dirty : mSurfaceFrame;
+ if (dirty == null) {
+ if (mTmpDirty == null) {
+ mTmpDirty = new Rect();
+ }
+ mTmpDirty.set(mSurfaceFrame);
+ dirty = mTmpDirty;
+ }
+
try {
- c = mSurface.lockCanvas(frame);
+ c = mSurface.lockCanvas(dirty);
} catch (Exception e) {
Log.e(TAG, "Exception locking surface", e);
}
@@ -215,4 +223,11 @@ public abstract class BaseSurfaceHolder implements SurfaceHolder {
public Rect getSurfaceFrame() {
return mSurfaceFrame;
}
+
+ public void setSurfaceFrameSize(int width, int height) {
+ mSurfaceFrame.top = 0;
+ mSurfaceFrame.left = 0;
+ mSurfaceFrame.right = width;
+ mSurfaceFrame.bottom = height;
+ }
};
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index 6a1d199..88f30ed 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -116,7 +116,6 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
private ViewGroup mContentParent;
SurfaceHolder.Callback2 mTakeSurfaceCallback;
- BaseSurfaceHolder mSurfaceHolder;
InputQueue.Callback mTakeInputQueueCallback;