diff options
Diffstat (limited to 'tests/WallpaperTest/src')
-rw-r--r-- | tests/WallpaperTest/src/com/example/wallpapertest/MainActivity.java | 176 | ||||
-rw-r--r-- | tests/WallpaperTest/src/com/example/wallpapertest/TestWallpaper.java | 251 |
2 files changed, 427 insertions, 0 deletions
diff --git a/tests/WallpaperTest/src/com/example/wallpapertest/MainActivity.java b/tests/WallpaperTest/src/com/example/wallpapertest/MainActivity.java new file mode 100644 index 0000000..7880f67 --- /dev/null +++ b/tests/WallpaperTest/src/com/example/wallpapertest/MainActivity.java @@ -0,0 +1,176 @@ +/* + * Copyright 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.wallpapertest; + +import android.app.Activity; +import android.app.WallpaperManager; +import android.content.Context; +import android.graphics.Point; +import android.graphics.Rect; +import android.os.Bundle; +import android.os.IBinder; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.WindowManager; +import android.widget.TextView; + +public class MainActivity extends Activity { + private static final String TAG = "MainActivity"; + + WallpaperManager mWallpaperManager; + WindowManager mWindowManager; + + TextView mDimenWidthView; + TextView mDimenHeightView; + + TextView mWallOffXView; + TextView mWallOffYView; + + TextView mPaddingLeftView; + TextView mPaddingRightView; + TextView mPaddingTopView; + TextView mPaddingBottomView; + + TextView mDispOffXView; + TextView mDispOffYView; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + mWallpaperManager = (WallpaperManager)getSystemService(Context.WALLPAPER_SERVICE); + mWindowManager = (WindowManager)getSystemService(Context.WINDOW_SERVICE); + + mDimenWidthView = (TextView) findViewById(R.id.dimen_width); + mDimenWidthView.addTextChangedListener(mTextWatcher); + mDimenHeightView = (TextView) findViewById(R.id.dimen_height); + mDimenHeightView.addTextChangedListener(mTextWatcher); + + mWallOffXView = (TextView) findViewById(R.id.walloff_x); + mWallOffXView.addTextChangedListener(mTextWatcher); + mWallOffYView = (TextView) findViewById(R.id.walloff_y); + mWallOffYView.addTextChangedListener(mTextWatcher); + + mPaddingLeftView = (TextView) findViewById(R.id.padding_left); + mPaddingLeftView.addTextChangedListener(mTextWatcher); + mPaddingRightView = (TextView) findViewById(R.id.padding_right); + mPaddingRightView.addTextChangedListener(mTextWatcher); + mPaddingTopView = (TextView) findViewById(R.id.padding_top); + mPaddingTopView.addTextChangedListener(mTextWatcher); + mPaddingBottomView = (TextView) findViewById(R.id.padding_bottom); + mPaddingBottomView.addTextChangedListener(mTextWatcher); + + mDispOffXView = (TextView) findViewById(R.id.dispoff_x); + mDispOffXView.addTextChangedListener(mTextWatcher); + mDispOffYView = (TextView) findViewById(R.id.dispoff_y); + mDispOffYView.addTextChangedListener(mTextWatcher); + + updateDimens(); + updateWallOff(); + updatePadding(); + updateDispOff(); + } + + private int loadPropIntText(TextView view, int baseVal) { + String str = view.getText().toString(); + if (str != null && !TextUtils.isEmpty(str)) { + try { + float fval = Float.parseFloat(str); + return (int)(fval*baseVal); + } catch (NumberFormatException e) { + Log.i(TAG, "Bad number: " + str, e); + } + } + return baseVal; + } + + private float loadFloatText(TextView view) { + String str = view.getText().toString(); + if (str != null && !TextUtils.isEmpty(str)) { + try { + return Float.parseFloat(str); + } catch (NumberFormatException e) { + Log.i(TAG, "Bad number: " + str, e); + } + } + return 0; + } + + private int loadIntText(TextView view) { + String str = view.getText().toString(); + if (str != null && !TextUtils.isEmpty(str)) { + try { + return Integer.parseInt(str); + } catch (NumberFormatException e) { + Log.i(TAG, "Bad number: " + str, e); + } + } + return 0; + } + + public void updateDimens() { + Point minDims = new Point(); + Point maxDims = new Point(); + mWindowManager.getDefaultDisplay().getCurrentSizeRange(minDims, maxDims); + mWallpaperManager.suggestDesiredDimensions( + loadPropIntText(mDimenWidthView, maxDims.x), + loadPropIntText(mDimenHeightView, maxDims.y)); + } + + public void updateWallOff() { + IBinder token = getWindow().getDecorView().getWindowToken(); + if (token != null) { + mWallpaperManager.setWallpaperOffsets(token, loadFloatText(mWallOffXView), + loadFloatText(mWallOffYView)); + } + } + + public void updatePadding() { + Rect padding = new Rect(); + padding.left = loadIntText(mPaddingLeftView); + padding.top = loadIntText(mPaddingTopView); + padding.right = loadIntText(mPaddingRightView); + padding.bottom = loadIntText(mPaddingBottomView); + mWallpaperManager.setDisplayPadding(padding); + } + + public void updateDispOff() { + IBinder token = getWindow().getDecorView().getWindowToken(); + if (token != null) { + mWallpaperManager.setDisplayOffset(token, loadIntText(mDispOffXView), + loadIntText(mDispOffYView)); + } + } + + final TextWatcher mTextWatcher = new TextWatcher() { + @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override public void onTextChanged(CharSequence s, int start, int before, int count) { + updateDimens(); + updateWallOff(); + updatePadding(); + updateDispOff(); + } + + @Override public void afterTextChanged(Editable s) { + } + }; +} diff --git a/tests/WallpaperTest/src/com/example/wallpapertest/TestWallpaper.java b/tests/WallpaperTest/src/com/example/wallpapertest/TestWallpaper.java new file mode 100644 index 0000000..95db6d1 --- /dev/null +++ b/tests/WallpaperTest/src/com/example/wallpapertest/TestWallpaper.java @@ -0,0 +1,251 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.wallpapertest; + +import android.service.wallpaper.WallpaperService; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.Paint; +import android.graphics.Color; +import android.graphics.RectF; +import android.text.TextPaint; +import android.view.SurfaceHolder; +import android.content.res.XmlResourceParser; + +import android.os.Handler; +import android.util.Log; + +import android.view.WindowInsets; + +public class TestWallpaper extends WallpaperService { + private static final String LOG_TAG = "PolarClock"; + + private final Handler mHandler = new Handler(); + + @Override + public void onCreate() { + super.onCreate(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + } + + public Engine onCreateEngine() { + return new ClockEngine(); + } + + class ClockEngine extends Engine { + private static final int OUTER_COLOR = 0xffff0000; + private static final int INNER_COLOR = 0xff000080; + private static final int STABLE_COLOR = 0xa000ff00; + private static final int TEXT_COLOR = 0xa0ffffff; + + private final Paint.FontMetrics mTextMetrics = new Paint.FontMetrics(); + + private int mPadding; + + private final Rect mMainInsets = new Rect(); + private final Rect mStableInsets = new Rect(); + private boolean mRound = false; + + private int mDesiredWidth; + private int mDesiredHeight; + + private float mOffsetX; + private float mOffsetY; + private float mOffsetXStep; + private float mOffsetYStep; + private int mOffsetXPixels; + private int mOffsetYPixels; + + private final Paint mFillPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final Paint mStrokePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + private final TextPaint mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); + + private final Runnable mDrawClock = new Runnable() { + public void run() { + drawFrame(); + } + }; + private boolean mVisible; + + ClockEngine() { + } + + @Override + public void onCreate(SurfaceHolder surfaceHolder) { + super.onCreate(surfaceHolder); + + mDesiredWidth = getDesiredMinimumWidth(); + mDesiredHeight = getDesiredMinimumHeight(); + + Paint paint = mFillPaint; + paint.setStyle(Paint.Style.FILL); + + paint = mStrokePaint; + paint.setStrokeWidth(3); + paint.setStrokeCap(Paint.Cap.ROUND); + paint.setStyle(Paint.Style.STROKE); + + TextPaint tpaint = mTextPaint; + tpaint.density = getResources().getDisplayMetrics().density; + tpaint.setCompatibilityScaling(getResources().getCompatibilityInfo().applicationScale); + tpaint.setColor(TEXT_COLOR); + tpaint.setTextSize(18 * getResources().getDisplayMetrics().scaledDensity); + tpaint.setShadowLayer(4 * getResources().getDisplayMetrics().density, 0, 0, 0xff000000); + + mTextPaint.getFontMetrics(mTextMetrics); + + mPadding = (int)(16 * getResources().getDisplayMetrics().density); + + if (isPreview()) { + mOffsetX = 0.5f; + mOffsetY = 0.5f; + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + mHandler.removeCallbacks(mDrawClock); + } + + @Override + public void onVisibilityChanged(boolean visible) { + mVisible = visible; + if (!visible) { + mHandler.removeCallbacks(mDrawClock); + } + drawFrame(); + } + + @Override + public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) { + super.onSurfaceChanged(holder, format, width, height); + drawFrame(); + } + + @Override + public void onSurfaceCreated(SurfaceHolder holder) { + super.onSurfaceCreated(holder); + } + + @Override + public void onSurfaceDestroyed(SurfaceHolder holder) { + super.onSurfaceDestroyed(holder); + mVisible = false; + mHandler.removeCallbacks(mDrawClock); + } + + @Override + public void onApplyWindowInsets(WindowInsets insets) { + super.onApplyWindowInsets(insets); + mMainInsets.set(insets.getSystemWindowInsetLeft(), insets.getSystemWindowInsetTop(), + insets.getSystemWindowInsetRight(), insets.getSystemWindowInsetBottom()); + mStableInsets.set(insets.getStableInsetLeft(), insets.getStableInsetTop(), + insets.getStableInsetRight(), insets.getStableInsetBottom()); + mRound = insets.isRound(); + drawFrame(); + } + + @Override + public void onDesiredSizeChanged(int desiredWidth, int desiredHeight) { + super.onDesiredSizeChanged(desiredWidth, desiredHeight); + mDesiredWidth = desiredWidth; + mDesiredHeight = desiredHeight; + drawFrame(); + } + + @Override + public void onOffsetsChanged(float xOffset, float yOffset, + float xStep, float yStep, int xPixels, int yPixels) { + super.onOffsetsChanged(xOffset, yOffset, xStep, yStep, xPixels, yPixels); + + if (isPreview()) return; + + mOffsetX = xOffset; + mOffsetY = yOffset; + mOffsetXStep = xStep; + mOffsetYStep = yStep; + mOffsetXPixels = xPixels; + mOffsetYPixels = yPixels; + + drawFrame(); + } + + void drawFrame() { + final SurfaceHolder holder = getSurfaceHolder(); + final Rect frame = holder.getSurfaceFrame(); + final int width = frame.width(); + final int height = frame.height(); + + Canvas c = null; + try { + c = holder.lockCanvas(); + if (c != null) { + final Paint paint = mFillPaint; + + paint.setColor(OUTER_COLOR); + c.drawRect(0, 0, width, height, paint); + + paint.setColor(INNER_COLOR); + c.drawRect(0+mMainInsets.left, 0+mMainInsets.top, + width-mMainInsets.right, height-mMainInsets.bottom, paint); + + mStrokePaint.setColor(STABLE_COLOR); + c.drawRect(0 + mStableInsets.left, 0 + mStableInsets.top, + width - mStableInsets.right, height - mStableInsets.bottom, + mStrokePaint); + + final int ascdesc = (int)(-mTextMetrics.ascent + mTextMetrics.descent); + final int linegap = (int)(-mTextMetrics.ascent + mTextMetrics.descent + + mTextMetrics.leading); + + int x = mStableInsets.left + mPadding; + int y = height - mStableInsets.bottom - mPadding - ascdesc; + c.drawText("Surface Size: " + width + " x " + height, + x, y, mTextPaint); + y -= linegap; + c.drawText("Desired Size: " + mDesiredWidth + " x " + mDesiredHeight, + x, y, mTextPaint); + y -= linegap; + c.drawText("Cur Offset Raw: " + mOffsetX + ", " + mOffsetY, + x, y, mTextPaint); + y -= linegap; + c.drawText("Cur Offset Step: " + mOffsetXStep + ", " + mOffsetYStep, + x, y, mTextPaint); + y -= linegap; + c.drawText("Cur Offset Pixels: " + mOffsetXPixels + ", " + mOffsetYPixels, + x, y, mTextPaint); + y -= linegap; + c.drawText("Stable Insets: (" + mStableInsets.left + ", " + mStableInsets.top + + ") - (" + mStableInsets.right + ", " + mStableInsets.bottom + ")", + x, y, mTextPaint); + y -= linegap; + c.drawText("System Insets: (" + mMainInsets.left + ", " + mMainInsets.top + + ") - (" + mMainInsets.right + ", " + mMainInsets.bottom + ")", + x, y, mTextPaint); + + } + } finally { + if (c != null) holder.unlockCanvasAndPost(c); + } + } + } +} |