Loading core/java/com/android/internal/service/wallpaper/ImageWallpaper.java +49 −74 Original line number Diff line number Diff line Loading @@ -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; WallpaperManager mWallpaperManager; ImageWallpaper.DrawableEngine mEngine; private WallpaperObserver mReceiver; static final int MSG_DRAW = 1; @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); } class MyEngine extends Engine { final Paint mTextPaint = new Paint(); float mDensity; Drawable mBackground; long mAnimStartTime; boolean mAnimLarger; @Override public void onDestroy() { super.onDestroy(); unregisterReceiver(mReceiver); } final Handler mHandler = new Handler() { public Engine onCreateEngine() { mEngine = new DrawableEngine(); return mEngine; } @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_DRAW: drawFrame(true); mHandler.sendEmptyMessage(MSG_DRAW); break; default: super.handleMessage(msg); 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; @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 Loading @@ -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); void updateWallpaper() { synchronized (mLock) { mBackground = mWallpaperManager.getDrawable(); } } public Engine onCreateEngine() { return new MyEngine(); } } Loading
core/java/com/android/internal/service/wallpaper/ImageWallpaper.java +49 −74 Original line number Diff line number Diff line Loading @@ -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; WallpaperManager mWallpaperManager; ImageWallpaper.DrawableEngine mEngine; private WallpaperObserver mReceiver; static final int MSG_DRAW = 1; @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); } class MyEngine extends Engine { final Paint mTextPaint = new Paint(); float mDensity; Drawable mBackground; long mAnimStartTime; boolean mAnimLarger; @Override public void onDestroy() { super.onDestroy(); unregisterReceiver(mReceiver); } final Handler mHandler = new Handler() { public Engine onCreateEngine() { mEngine = new DrawableEngine(); return mEngine; } @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_DRAW: drawFrame(true); mHandler.sendEmptyMessage(MSG_DRAW); break; default: super.handleMessage(msg); 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; @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 Loading @@ -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); void updateWallpaper() { synchronized (mLock) { mBackground = mWallpaperManager.getDrawable(); } } public Engine onCreateEngine() { return new MyEngine(); } }