diff --git a/res/values/attrs.xml b/res/values/attrs.xml index 4b607bedb06..a08b2e88161 100644 --- a/res/values/attrs.xml +++ b/res/values/attrs.xml @@ -22,10 +22,6 @@ - - - - diff --git a/src/com/android/settings/widget/SetupWizardIllustration.java b/src/com/android/settings/widget/SetupWizardIllustration.java deleted file mode 100644 index 717ec352c12..00000000000 --- a/src/com/android/settings/widget/SetupWizardIllustration.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * 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.android.settings.widget; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; -import android.view.Gravity; -import android.view.ViewOutlineProvider; -import android.widget.FrameLayout; - -import com.android.settings.R; - -/** - * Class to draw the illustration of setup wizard. The aspectRatio attribute determines the aspect - * ratio of the top padding, which is leaving space for the illustration. Draws an illustration - * (foreground) to fit the width of the view and fills the rest with the background. - * - * Copied from com.google.android.setupwizard.util.SetupWizardIllustration - */ -public class SetupWizardIllustration extends FrameLayout { - - private static final String TAG = "SetupWizardIllustration"; - - // Size of the baseline grid in pixels - private float mBaselineGridSize; - private Drawable mBackground; - private Drawable mForeground; - private final Rect mViewBounds = new Rect(); - private final Rect mForegroundBounds = new Rect(); - private float mScale = 1.0f; - private float mAspectRatio = 0.0f; - - public SetupWizardIllustration(Context context) { - this(context, null); - } - - public SetupWizardIllustration(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public SetupWizardIllustration(Context context, AttributeSet attrs, int defStyleAttr) { - this(context, attrs, defStyleAttr, 0); - } - - public SetupWizardIllustration(Context context, AttributeSet attrs, int defStyleAttr, - int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - if (attrs != null) { - TypedArray a = context.obtainStyledAttributes(attrs, - R.styleable.SetupWizardIllustration, 0, 0); - mAspectRatio = a.getFloat(R.styleable.SetupWizardIllustration_aspectRatio, 0.0f); - a.recycle(); - } - // Number of pixels of the 8dp baseline grid as defined in material design specs - mBaselineGridSize = getResources().getDisplayMetrics().density * 8; - setWillNotDraw(false); - } - - /** - * The background will be drawn to fill up the rest of the view. It will also be scaled by the - * same amount as the foreground so their textures look the same. - */ - @Override - public void setBackground(Drawable background) { - mBackground = background; - } - - /** - * Sets the drawable used as the illustration. THe drawable is expected to have intrinsic - * width and height defined and will be scaled to fit the width of the view. - */ - @Override - public void setForeground(Drawable foreground) { - mForeground = foreground; - } - - @Override - public void onResolveDrawables(int layoutDirection) { - mBackground.setLayoutDirection(layoutDirection); - mForeground.setLayoutDirection(layoutDirection); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - if (mAspectRatio != 0.0f) { - int parentWidth = MeasureSpec.getSize(widthMeasureSpec); - int illustrationHeight = (int) (parentWidth / mAspectRatio); - illustrationHeight -= illustrationHeight % mBaselineGridSize; - setPaddingRelative(0, illustrationHeight, 0, 0); - } - setOutlineProvider(ViewOutlineProvider.BOUNDS); - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } - - @Override - protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - final int layoutWidth = right - left; - final int layoutHeight = bottom - top; - if (mForeground != null) { - int intrinsicWidth = mForeground.getIntrinsicWidth(); - int intrinsicHeight = mForeground.getIntrinsicHeight(); - final int layoutDirection = getLayoutDirection(); - - mViewBounds.set(0, 0, layoutWidth, layoutHeight); - if (mAspectRatio != 0f) { - mScale = layoutWidth / (float) intrinsicWidth; - intrinsicWidth = layoutWidth; - intrinsicHeight = (int) (intrinsicHeight * mScale); - } - Gravity.apply(Gravity.FILL_HORIZONTAL | Gravity.TOP, intrinsicWidth, intrinsicHeight, - mViewBounds, mForegroundBounds, layoutDirection); - mForeground.setBounds(mForegroundBounds); - } - if (mBackground != null) { - // Scale the bounds by mScale to compensate for the scale done to the canvas before - // drawing. - mBackground.setBounds(0, 0, (int) Math.ceil(layoutWidth / mScale), - (int) Math.ceil((layoutHeight - mForegroundBounds.height()) / mScale)); - } - super.onLayout(changed, left, top, right, bottom); - } - - @Override - public void onDraw(Canvas canvas) { - if (mBackground != null) { - canvas.save(); - // Draw the background filling parts not covered by the illustration - canvas.translate(0, mForegroundBounds.height()); - // Scale the background so its size matches the foreground - canvas.scale(mScale, mScale, 0, 0); - mBackground.draw(canvas); - canvas.restore(); - } - if (mForeground != null) { - canvas.save(); - // Draw the illustration - mForeground.draw(canvas); - canvas.restore(); - } - super.onDraw(canvas); - } -} diff --git a/src/com/android/settings/widget/StickyHeaderListView.java b/src/com/android/settings/widget/StickyHeaderListView.java deleted file mode 100644 index a2ff51b4d80..00000000000 --- a/src/com/android/settings/widget/StickyHeaderListView.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * 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.android.settings.widget; - -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.RectF; -import android.util.AttributeSet; -import android.view.MotionEvent; -import android.view.View; -import android.view.WindowInsets; -import android.widget.ListView; - -/** - * This class provides sticky header functionality in a list view, to use with - * SetupWizardIllustration. To use this, add a header tagged with "sticky", or a header tagged with - * "stickyContainer" and one of its child tagged as "sticky". The sticky container will be drawn - * when the sticky element hits the top of the view. - * - * There are a few things to note: - * 1. The two supported scenarios are StickyHeaderListView -> Header (stickyContainer) -> sticky, - * and StickyHeaderListView -> Header (sticky). The arrow (->) represents parent/child - * relationship and must be immediate child. - * 2. The view does not work well with padding. b/16190933 - * 3. If fitsSystemWindows is true, then this will offset the sticking position by the height of - * the system decorations at the top of the screen. - * - * @see SetupWizardIllustration - * @see com.google.android.setupwizard.util.StickyHeaderScrollView - * - * Copied from com.google.android.setupwizard.util.StickyHeaderListView - */ -public class StickyHeaderListView extends ListView { - - private View mSticky; - private View mStickyContainer; - private boolean mDrawScrollBar; - private int mStatusBarInset = 0; - private RectF mStickyRect = new RectF(); - - public StickyHeaderListView(Context context) { - super(context); - } - - public StickyHeaderListView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public StickyHeaderListView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - public StickyHeaderListView(Context context, AttributeSet attrs, int defStyleAttr, - int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - } - - @Override - protected void onLayout(boolean changed, int l, int t, int r, int b) { - super.onLayout(changed, l, t, r, b); - if (mSticky == null) { - updateStickyView(); - } - } - - public void updateStickyView() { - mSticky = findViewWithTag("sticky"); - mStickyContainer = findViewWithTag("stickyContainer"); - } - - @Override - public boolean dispatchTouchEvent(MotionEvent ev) { - if (mStickyRect.contains(ev.getX(), ev.getY())) { - ev.offsetLocation(-mStickyRect.left, -mStickyRect.top); - return mStickyContainer.dispatchTouchEvent(ev); - } else { - return super.dispatchTouchEvent(ev); - } - } - - @Override - public void draw(Canvas canvas) { - mDrawScrollBar = false; - super.draw(canvas); - if (mSticky != null) { - final int saveCount = canvas.save(); - // The view to draw when sticking to the top - final View drawTarget = mStickyContainer != null ? mStickyContainer : mSticky; - // The offset to draw the view at when sticky - final int drawOffset = mStickyContainer != null ? mSticky.getTop() : 0; - // Position of the draw target, relative to the outside of the scrollView - final int drawTop = drawTarget.getTop(); - if (drawTop + drawOffset < mStatusBarInset || !drawTarget.isShown()) { - // ListView does not translate the canvas, so we can simply draw at the top - canvas.translate(0, -drawOffset + mStatusBarInset); - canvas.clipRect(0, 0, drawTarget.getWidth(), drawTarget.getHeight()); - drawTarget.draw(canvas); - mStickyRect.set(0, -drawOffset + mStatusBarInset, drawTarget.getWidth(), - drawTarget.getHeight() - drawOffset + mStatusBarInset); - } else { - mStickyRect.setEmpty(); - } - canvas.restoreToCount(saveCount); - } - // Draw the scrollbars last so they are on top of the header - mDrawScrollBar = true; - onDrawScrollBars(canvas); - } - - @Override - protected boolean isVerticalScrollBarHidden() { - return super.isVerticalScrollBarHidden() || !mDrawScrollBar; - } - - @Override - public WindowInsets onApplyWindowInsets(WindowInsets insets) { - if (getFitsSystemWindows()) { - mStatusBarInset = insets.getSystemWindowInsetTop(); - insets.consumeSystemWindowInsets(false, true, false, false); - } - return insets; - } -}