diff options
author | Romain Guy <romainguy@android.com> | 2009-08-11 19:12:17 -0700 |
---|---|---|
committer | Romain Guy <romainguy@android.com> | 2009-08-11 19:12:17 -0700 |
commit | ef654bdd5bd957574abd4194d7b0585f3fc3fd34 (patch) | |
tree | 8f251f2ebe1121e73665fb2e963795c8dbbb30d0 /core | |
parent | 50cb54ff5cdb233d01e1dd94b355cbfe0a371520 (diff) | |
download | frameworks_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.java | 123 |
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(); + } + } } } |