From 5d70679c02a57416eac46581d7242e2382e4b973 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Thu, 8 Sep 2011 18:57:17 -0700 Subject: Larger touch targets, snap to persisted value. Extend ListView content to screen edges, and use InsetBoundsDrawable to draw separator and divider with expected padding. Sweep touch targets are now much larger. Snap sweep to persisted value, and fix NFE when parsing label value. Bug: 5274249 Bug: 5262865 Bug: 5242857 Change-Id: Ifa0f3e622767d5b4dc85a73d6340207e6038a429 --- .../android/settings/drawable/DrawableWrapper.java | 162 +++++++++++++++++++++ .../settings/drawable/InsetBoundsDrawable.java | 37 +++++ 2 files changed, 199 insertions(+) create mode 100644 src/com/android/settings/drawable/DrawableWrapper.java create mode 100644 src/com/android/settings/drawable/InsetBoundsDrawable.java (limited to 'src/com/android/settings/drawable') diff --git a/src/com/android/settings/drawable/DrawableWrapper.java b/src/com/android/settings/drawable/DrawableWrapper.java new file mode 100644 index 0000000..0ac4f7c --- /dev/null +++ b/src/com/android/settings/drawable/DrawableWrapper.java @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2011 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.drawable; + +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.Rect; +import android.graphics.Region; +import android.graphics.drawable.Drawable; +import android.view.View; + +import com.android.internal.util.Preconditions; + +/** + * Base wrapper that delegates all calls to another {@link Drawable}. The + * wrapped {@link Drawable} must be fully released from any + * {@link View} before wrapping, otherwise internal {@link Drawable.Callback} + * may be dropped. + */ +public class DrawableWrapper extends Drawable implements Drawable.Callback { + private final Drawable mDrawable; + + public DrawableWrapper(Drawable drawable) { + mDrawable = Preconditions.checkNotNull(drawable); + mDrawable.setCallback(this); + } + + @Override + public void draw(Canvas canvas) { + mDrawable.draw(canvas); + } + + @Override + public void setBounds(int left, int top, int right, int bottom) { + super.setBounds(left, top, right, bottom); + mDrawable.setBounds(left, top, right, bottom); + } + + @Override + public void setChangingConfigurations(int configs) { + mDrawable.setChangingConfigurations(configs); + } + + @Override + public int getChangingConfigurations() { + return mDrawable.getChangingConfigurations(); + } + + @Override + public void setDither(boolean dither) { + mDrawable.setDither(dither); + } + + @Override + public void setFilterBitmap(boolean filter) { + mDrawable.setFilterBitmap(filter); + } + + @Override + public void setAlpha(int alpha) { + mDrawable.setAlpha(alpha); + } + + @Override + public void setColorFilter(ColorFilter cf) { + mDrawable.setColorFilter(cf); + } + + @Override + public boolean isStateful() { + return mDrawable.isStateful(); + } + + @Override + public boolean setState(final int[] stateSet) { + return mDrawable.setState(stateSet); + } + + @Override + public int[] getState() { + return mDrawable.getState(); + } + + @Override + public void jumpToCurrentState() { + mDrawable.jumpToCurrentState(); + } + + @Override + public Drawable getCurrent() { + return mDrawable.getCurrent(); + } + + @Override + public boolean setVisible(boolean visible, boolean restart) { + return super.setVisible(visible, restart) || mDrawable.setVisible(visible, restart); + } + + @Override + public int getOpacity() { + return mDrawable.getOpacity(); + } + + @Override + public Region getTransparentRegion() { + return mDrawable.getTransparentRegion(); + } + + @Override + public int getIntrinsicWidth() { + return mDrawable.getIntrinsicWidth(); + } + + @Override + public int getIntrinsicHeight() { + return mDrawable.getIntrinsicHeight(); + } + + @Override + public int getMinimumWidth() { + return mDrawable.getMinimumWidth(); + } + + @Override + public int getMinimumHeight() { + return mDrawable.getMinimumHeight(); + } + + @Override + public boolean getPadding(Rect padding) { + return mDrawable.getPadding(padding); + } + + /** {@inheritDoc} */ + public void invalidateDrawable(Drawable who) { + invalidateSelf(); + } + + /** {@inheritDoc} */ + public void scheduleDrawable(Drawable who, Runnable what, long when) { + scheduleSelf(what, when); + } + + /** {@inheritDoc} */ + public void unscheduleDrawable(Drawable who, Runnable what) { + unscheduleSelf(what); + } +} diff --git a/src/com/android/settings/drawable/InsetBoundsDrawable.java b/src/com/android/settings/drawable/InsetBoundsDrawable.java new file mode 100644 index 0000000..50ef9f3 --- /dev/null +++ b/src/com/android/settings/drawable/InsetBoundsDrawable.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2011 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.drawable; + +import android.graphics.drawable.Drawable; + +/** + * Wrapper around another {@link Drawable} that insets requested bounds by a + * specific amount. + */ +public class InsetBoundsDrawable extends DrawableWrapper { + private final int mInsetBoundsSides; + + public InsetBoundsDrawable(Drawable drawable, int insetBoundsSides) { + super(drawable); + mInsetBoundsSides = insetBoundsSides; + } + + @Override + public void setBounds(int left, int top, int right, int bottom) { + super.setBounds(left + mInsetBoundsSides, top, right - mInsetBoundsSides, bottom); + } +} -- cgit v1.1