1067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn/* 2067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * Copyright (C) 2014 The Android Open Source Project 3067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * 4067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 5067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * you may not use this file except in compliance with the License. 6067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * You may obtain a copy of the License at 7067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * 8067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 9067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * 10067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * Unless required by applicable law or agreed to in writing, software 11067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 12067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * See the License for the specific language governing permissions and 14067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn * limitations under the License. 15067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn */ 16067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 17067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornpackage com.example.wallpapertest; 18067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 19067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.service.wallpaper.WallpaperService; 20067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.graphics.Canvas; 21067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.graphics.Rect; 22067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.graphics.Paint; 23067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.graphics.Color; 24067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.graphics.RectF; 25067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.text.TextPaint; 26067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.view.SurfaceHolder; 27067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.content.res.XmlResourceParser; 28067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 29067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.os.Handler; 30067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.util.Log; 31067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 32067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornimport android.view.WindowInsets; 33067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 34067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackbornpublic class TestWallpaper extends WallpaperService { 35067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private static final String LOG_TAG = "PolarClock"; 36067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 37067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private final Handler mHandler = new Handler(); 38067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 39067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn @Override 40067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn public void onCreate() { 41067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn super.onCreate(); 42067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 43067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 44067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn @Override 45067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn public void onDestroy() { 46067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn super.onDestroy(); 47067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 48067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 49067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn public Engine onCreateEngine() { 50067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn return new ClockEngine(); 51067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 52067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 53067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn class ClockEngine extends Engine { 54067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private static final int OUTER_COLOR = 0xffff0000; 55067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private static final int INNER_COLOR = 0xff000080; 56067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private static final int STABLE_COLOR = 0xa000ff00; 57067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private static final int TEXT_COLOR = 0xa0ffffff; 58067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 59067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private final Paint.FontMetrics mTextMetrics = new Paint.FontMetrics(); 60067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 61067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private int mPadding; 62067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 63067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private final Rect mMainInsets = new Rect(); 64067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private final Rect mStableInsets = new Rect(); 65067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private boolean mRound = false; 66067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 67067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private int mDesiredWidth; 68067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private int mDesiredHeight; 69067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 70067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private float mOffsetX; 71067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private float mOffsetY; 72067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private float mOffsetXStep; 73067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private float mOffsetYStep; 74067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private int mOffsetXPixels; 75067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private int mOffsetYPixels; 76067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 77067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private final Paint mFillPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 78067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private final Paint mStrokePaint = new Paint(Paint.ANTI_ALIAS_FLAG); 79067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private final TextPaint mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); 80067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 81067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private final Runnable mDrawClock = new Runnable() { 82067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn public void run() { 83067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn drawFrame(); 84067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 85067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn }; 86067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn private boolean mVisible; 87067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 88067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn ClockEngine() { 89067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 90067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 91067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn @Override 92067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn public void onCreate(SurfaceHolder surfaceHolder) { 93067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn super.onCreate(surfaceHolder); 94067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 95067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mDesiredWidth = getDesiredMinimumWidth(); 96067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mDesiredHeight = getDesiredMinimumHeight(); 97067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 98067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn Paint paint = mFillPaint; 99067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn paint.setStyle(Paint.Style.FILL); 100067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 101067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn paint = mStrokePaint; 102067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn paint.setStrokeWidth(3); 103067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn paint.setStrokeCap(Paint.Cap.ROUND); 104067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn paint.setStyle(Paint.Style.STROKE); 105067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 106067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn TextPaint tpaint = mTextPaint; 107067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn tpaint.density = getResources().getDisplayMetrics().density; 108067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn tpaint.setCompatibilityScaling(getResources().getCompatibilityInfo().applicationScale); 109067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn tpaint.setColor(TEXT_COLOR); 110067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn tpaint.setTextSize(18 * getResources().getDisplayMetrics().scaledDensity); 111067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn tpaint.setShadowLayer(4 * getResources().getDisplayMetrics().density, 0, 0, 0xff000000); 112067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 113067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mTextPaint.getFontMetrics(mTextMetrics); 114067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 115067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mPadding = (int)(16 * getResources().getDisplayMetrics().density); 116067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 117067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn if (isPreview()) { 118067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mOffsetX = 0.5f; 119067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mOffsetY = 0.5f; 120067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 121067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 122067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 123067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn @Override 124067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn public void onDestroy() { 125067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn super.onDestroy(); 126067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mHandler.removeCallbacks(mDrawClock); 127067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 128067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 129067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn @Override 130067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn public void onVisibilityChanged(boolean visible) { 131067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mVisible = visible; 132067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn if (!visible) { 133067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mHandler.removeCallbacks(mDrawClock); 134067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 135067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn drawFrame(); 136067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 137067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 138067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn @Override 139067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) { 140067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn super.onSurfaceChanged(holder, format, width, height); 141067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn drawFrame(); 142067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 143067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 144067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn @Override 145067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn public void onSurfaceCreated(SurfaceHolder holder) { 146067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn super.onSurfaceCreated(holder); 147067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 148067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 149067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn @Override 150067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn public void onSurfaceDestroyed(SurfaceHolder holder) { 151067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn super.onSurfaceDestroyed(holder); 152067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mVisible = false; 153067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mHandler.removeCallbacks(mDrawClock); 154067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 155067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 156067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn @Override 157067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn public void onApplyWindowInsets(WindowInsets insets) { 158067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn super.onApplyWindowInsets(insets); 159067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mMainInsets.set(insets.getSystemWindowInsetLeft(), insets.getSystemWindowInsetTop(), 160067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn insets.getSystemWindowInsetRight(), insets.getSystemWindowInsetBottom()); 161067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mStableInsets.set(insets.getStableInsetLeft(), insets.getStableInsetTop(), 162067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn insets.getStableInsetRight(), insets.getStableInsetBottom()); 163067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mRound = insets.isRound(); 164067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn drawFrame(); 165067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 166067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 167067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn @Override 168067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn public void onDesiredSizeChanged(int desiredWidth, int desiredHeight) { 169067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn super.onDesiredSizeChanged(desiredWidth, desiredHeight); 170067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mDesiredWidth = desiredWidth; 171067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mDesiredHeight = desiredHeight; 172067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn drawFrame(); 173067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 174067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 175067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn @Override 176067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn public void onOffsetsChanged(float xOffset, float yOffset, 177067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn float xStep, float yStep, int xPixels, int yPixels) { 178067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn super.onOffsetsChanged(xOffset, yOffset, xStep, yStep, xPixels, yPixels); 179067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 180067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn if (isPreview()) return; 181067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 182067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mOffsetX = xOffset; 183067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mOffsetY = yOffset; 184067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mOffsetXStep = xStep; 185067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mOffsetYStep = yStep; 186067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mOffsetXPixels = xPixels; 187067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mOffsetYPixels = yPixels; 188067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 189067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn drawFrame(); 190067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 191067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 192067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn void drawFrame() { 193067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn final SurfaceHolder holder = getSurfaceHolder(); 194067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn final Rect frame = holder.getSurfaceFrame(); 195067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn final int width = frame.width(); 196067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn final int height = frame.height(); 197067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 198067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn Canvas c = null; 199067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn try { 200067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn c = holder.lockCanvas(); 201067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn if (c != null) { 202067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn final Paint paint = mFillPaint; 203067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 204067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn paint.setColor(OUTER_COLOR); 205067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn c.drawRect(0, 0, width, height, paint); 206067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 207067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn paint.setColor(INNER_COLOR); 208067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn c.drawRect(0+mMainInsets.left, 0+mMainInsets.top, 209067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn width-mMainInsets.right, height-mMainInsets.bottom, paint); 210067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 211067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mStrokePaint.setColor(STABLE_COLOR); 212067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn c.drawRect(0 + mStableInsets.left, 0 + mStableInsets.top, 213067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn width - mStableInsets.right, height - mStableInsets.bottom, 214067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn mStrokePaint); 215067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 216067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn final int ascdesc = (int)(-mTextMetrics.ascent + mTextMetrics.descent); 217067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn final int linegap = (int)(-mTextMetrics.ascent + mTextMetrics.descent 218067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn + mTextMetrics.leading); 219067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 220067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn int x = mStableInsets.left + mPadding; 221067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn int y = height - mStableInsets.bottom - mPadding - ascdesc; 222067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn c.drawText("Surface Size: " + width + " x " + height, 223067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn x, y, mTextPaint); 224067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn y -= linegap; 225067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn c.drawText("Desired Size: " + mDesiredWidth + " x " + mDesiredHeight, 226067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn x, y, mTextPaint); 227067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn y -= linegap; 228067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn c.drawText("Cur Offset Raw: " + mOffsetX + ", " + mOffsetY, 229067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn x, y, mTextPaint); 230067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn y -= linegap; 231067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn c.drawText("Cur Offset Step: " + mOffsetXStep + ", " + mOffsetYStep, 232067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn x, y, mTextPaint); 233067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn y -= linegap; 234067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn c.drawText("Cur Offset Pixels: " + mOffsetXPixels + ", " + mOffsetYPixels, 235067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn x, y, mTextPaint); 236067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn y -= linegap; 237067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn c.drawText("Stable Insets: (" + mStableInsets.left + ", " + mStableInsets.top 238067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn + ") - (" + mStableInsets.right + ", " + mStableInsets.bottom + ")", 239067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn x, y, mTextPaint); 240067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn y -= linegap; 241067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn c.drawText("System Insets: (" + mMainInsets.left + ", " + mMainInsets.top 242067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn + ") - (" + mMainInsets.right + ", " + mMainInsets.bottom + ")", 243067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn x, y, mTextPaint); 244067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn 245067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 246067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } finally { 247067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn if (c != null) holder.unlockCanvasAndPost(c); 248067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 249067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 250067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn } 251067e5f68b9216b233df1c6529db182ff9b2887abDianne Hackborn} 252