blob: aec60963c389a9a287c793bb0f5b5b6a3d6e222e [file] [log] [blame]
/*
* Copyright (C) 2019 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 android.widget;
import static android.view.View.MeasureSpec.EXACTLY;
import static android.view.View.MeasureSpec.makeMeasureSpec;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import android.content.Context;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.RectShape;
import android.platform.test.annotations.Presubmit;
import android.view.View;
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.Arrays;
import java.util.List;
@RunWith(AndroidJUnit4.class)
@SmallTest
@Presubmit
public class AbsSeekBarTest {
private Context mContext;
private AbsSeekBar mBar;
@Before
public void setUp() throws Exception {
mContext = InstrumentationRegistry.getInstrumentation().getContext();
mBar = new SeekBar(mContext);
}
@Test
public void testExclusionForThumb_limitedTo48dp() {
mBar.setPadding(10, 10, 10, 10);
mBar.setThumb(newThumb(dpToPx(20)));
mBar.setMin(0);
mBar.setMax(100);
mBar.setProgress(50);
measureAndLayout(dpToPx(200), dpToPx(100));
List<Rect> exclusions = mBar.getSystemGestureExclusionRects();
assertEquals("exclusions should be size 1, but was " + exclusions, 1, exclusions.size());
assertEquals("exclusion should be centered on thumb",
center(mBar), center(exclusions.get(0)));
assertEquals("exclusion should be 48dp high", dpToPx(48), exclusions.get(0).height());
assertEquals("exclusion should be 48dp wide", dpToPx(48), exclusions.get(0).width());
}
@Test
public void testExclusionForThumb_limitedToHeight() {
mBar.setPadding(10, 10, 10, 10);
mBar.setThumb(newThumb(dpToPx(20)));
mBar.setMin(0);
mBar.setMax(100);
mBar.setProgress(50);
measureAndLayout(dpToPx(200), dpToPx(32));
List<Rect> exclusions = mBar.getSystemGestureExclusionRects();
assertEquals("exclusions should be size 1, but was " + exclusions, 1, exclusions.size());
assertEquals("exclusion should be centered on thumb",
center(mBar), center(exclusions.get(0)));
assertEquals("exclusion should be 32dp high", dpToPx(32), exclusions.get(0).height());
assertEquals("exclusion should be 32dp wide", dpToPx(32), exclusions.get(0).width());
}
@Test
public void testExclusionForThumb_passesThroughUserExclusions() {
mBar.setSystemGestureExclusionRects(Arrays.asList(new Rect(1, 2, 3, 4)));
mBar.setPadding(10, 10, 10, 10);
mBar.setThumb(newThumb(dpToPx(20)));
mBar.setMin(0);
mBar.setMax(100);
mBar.setProgress(50);
measureAndLayout(dpToPx(200), dpToPx(32));
assertThat(mBar.getSystemGestureExclusionRects(), hasItem(new Rect(1, 2, 3, 4)));
assertThat(mBar.getSystemGestureExclusionRects(), hasSize(2));
mBar.setSystemGestureExclusionRects(Arrays.asList(new Rect(3, 4, 5, 6)));
assertThat(mBar.getSystemGestureExclusionRects(), hasItem(new Rect(3, 4, 5, 6)));
assertThat(mBar.getSystemGestureExclusionRects(), hasSize(2));
}
private Point center(Rect rect) {
return new Point(rect.centerX(), rect.centerY());
}
private Point center(View view) {
return center(new Rect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom()));
}
private ShapeDrawable newThumb(int size) {
final ShapeDrawable thumb = new ShapeDrawable(new RectShape());
thumb.setIntrinsicWidth(size);
thumb.setIntrinsicHeight(size);
return thumb;
}
private void measureAndLayout(int wPx, int hPx) {
mBar.measure(makeMeasureSpec(wPx, EXACTLY), makeMeasureSpec(hPx, EXACTLY));
mBar.layout(0, 0, wPx, hPx);
}
private int dpToPx(int dp) {
return (int) (mContext.getResources().getDisplayMetrics().density * dp);
}
}