summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorRomain Guy <romainguy@android.com>2009-08-11 19:12:17 -0700
committerRomain Guy <romainguy@android.com>2009-08-11 19:12:17 -0700
commitef654bdd5bd957574abd4194d7b0585f3fc3fd34 (patch)
tree8f251f2ebe1121e73665fb2e963795c8dbbb30d0 /core
parent50cb54ff5cdb233d01e1dd94b355cbfe0a371520 (diff)
downloadframeworks_base-ef654bdd5bd957574abd4194d7b0585f3fc3fd34.zip
frameworks_base-ef654bdd5bd957574abd4194d7b0585f3fc3fd34.tar.gz
frameworks_base-ef654bdd5bd957574abd4194d7b0585f3fc3fd34.tar.bz2
Draw the wallpaper chosen by the user
Diffstat (limited to 'core')
-rw-r--r--core/java/com/android/internal/service/wallpaper/ImageWallpaper.java123
1 files changed, 49 insertions, 74 deletions
diff --git a/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java b/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java
index b9b07a8..6d50840 100644
--- a/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java
+++ b/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java
@@ -18,73 +18,68 @@ package com.android.internal.service.wallpaper;
import android.app.WallpaperManager;
import android.graphics.Canvas;
-import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
-import android.os.Handler;
-import android.os.Message;
-import android.os.SystemClock;
import android.service.wallpaper.WallpaperService;
import android.view.SurfaceHolder;
+import android.content.Context;
+import android.content.IntentFilter;
+import android.content.Intent;
+import android.content.BroadcastReceiver;
/**
* Default built-in wallpaper that simply shows a static image.
*/
public class ImageWallpaper extends WallpaperService {
- public WallpaperManager mWallpaperManager;
-
- static final int MSG_DRAW = 1;
-
- class MyEngine extends Engine {
- final Paint mTextPaint = new Paint();
- float mDensity;
+ WallpaperManager mWallpaperManager;
+ ImageWallpaper.DrawableEngine mEngine;
+ private WallpaperObserver mReceiver;
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ mWallpaperManager = (WallpaperManager) getSystemService(WALLPAPER_SERVICE);
+ IntentFilter filter = new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED);
+ mReceiver = new WallpaperObserver();
+ registerReceiver(mReceiver, filter);
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ unregisterReceiver(mReceiver);
+ }
+
+ public Engine onCreateEngine() {
+ mEngine = new DrawableEngine();
+ return mEngine;
+ }
+
+ class WallpaperObserver extends BroadcastReceiver {
+ public void onReceive(Context context, Intent intent) {
+ mEngine.updateWallpaper();
+ }
+ }
+
+ class DrawableEngine extends Engine {
+ private final Object mLock = new Object();
Drawable mBackground;
- long mAnimStartTime;
- boolean mAnimLarger;
-
- final Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_DRAW:
- drawFrame(true);
- mHandler.sendEmptyMessage(MSG_DRAW);
- break;
- default:
- super.handleMessage(msg);
- }
- }
- };
-
@Override
public void onCreate(SurfaceHolder surfaceHolder) {
super.onCreate(surfaceHolder);
mBackground = mWallpaperManager.getDrawable();
- mTextPaint.setAntiAlias(true);
- mDensity = getResources().getDisplayMetrics().density;
- mTextPaint.setTextSize(30 * mDensity);
- mTextPaint.setShadowLayer(5*mDensity, 3*mDensity, 3*mDensity, 0xff000000);
- mTextPaint.setARGB(255, 255, 255, 255);
- mTextPaint.setTextAlign(Paint.Align.CENTER);
}
@Override
public void onVisibilityChanged(boolean visible) {
- mHandler.removeMessages(MSG_DRAW);
- if (visible) {
- mHandler.sendEmptyMessage(MSG_DRAW);
- mAnimStartTime = SystemClock.uptimeMillis();
- mAnimLarger = true;
- } else {
- drawFrame(false);
- }
+ drawFrame();
}
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
super.onSurfaceChanged(holder, format, width, height);
- drawFrame(false);
+ drawFrame();
}
@Override
@@ -97,48 +92,28 @@ public class ImageWallpaper extends WallpaperService {
super.onSurfaceDestroyed(holder);
}
- void drawFrame(boolean drawText) {
+ void drawFrame() {
SurfaceHolder sh = getSurfaceHolder();
Canvas c = null;
try {
c = sh.lockCanvas();
if (c != null) {
final Rect frame = sh.getSurfaceFrame();
- mBackground.setBounds(frame);
- mBackground.draw(c);
-
- if (drawText) {
- // Figure out animation.
- long now = SystemClock.uptimeMillis();
- while (mAnimStartTime < (now-1000)) {
- mAnimStartTime += 1000;
- mAnimLarger = !mAnimLarger;
- }
- float size = (now-mAnimStartTime) / (float)1000;
- if (!mAnimLarger) size = 1-size;
- int alpha = (int)(255*(size*size));
- mTextPaint.setARGB(alpha, 255, 255, 255);
- mTextPaint.setShadowLayer(5*mDensity, 3*mDensity, 3*mDensity,
- alpha<<24);
- mTextPaint.setTextSize(100 * mDensity * size);
- c.drawText("Am I live?",
- frame.left + (frame.right-frame.left)/2,
- frame.top + (frame.bottom-frame.top)/2, mTextPaint);
+ synchronized (mLock) {
+ final Drawable background = mBackground;
+ background.setBounds(frame);
+ background.draw(c);
}
}
} finally {
if (c != null) sh.unlockCanvasAndPost(c);
}
}
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
- mWallpaperManager = (WallpaperManager)getSystemService(WALLPAPER_SERVICE);
- }
-
- public Engine onCreateEngine() {
- return new MyEngine();
+
+ void updateWallpaper() {
+ synchronized (mLock) {
+ mBackground = mWallpaperManager.getDrawable();
+ }
+ }
}
}