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
This commit is contained in:
Jeff Sharkey
2011-09-08 18:57:17 -07:00
parent 9b9db3f966
commit 5d70679c02
12 changed files with 305 additions and 35 deletions

View File

@@ -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} <em>must</em> 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);
}
}

View File

@@ -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);
}
}