141c3dc66312394771e0cb147713e124ecd445055Chris Banes/*
241c3dc66312394771e0cb147713e124ecd445055Chris Banes * Copyright (C) 2015 The Android Open Source Project
341c3dc66312394771e0cb147713e124ecd445055Chris Banes *
441c3dc66312394771e0cb147713e124ecd445055Chris Banes * Licensed under the Apache License, Version 2.0 (the "License");
541c3dc66312394771e0cb147713e124ecd445055Chris Banes * you may not use this file except in compliance with the License.
641c3dc66312394771e0cb147713e124ecd445055Chris Banes * You may obtain a copy of the License at
741c3dc66312394771e0cb147713e124ecd445055Chris Banes *
841c3dc66312394771e0cb147713e124ecd445055Chris Banes *      http://www.apache.org/licenses/LICENSE-2.0
941c3dc66312394771e0cb147713e124ecd445055Chris Banes *
1041c3dc66312394771e0cb147713e124ecd445055Chris Banes * Unless required by applicable law or agreed to in writing, software
1141c3dc66312394771e0cb147713e124ecd445055Chris Banes * distributed under the License is distributed on an "AS IS" BASIS,
1241c3dc66312394771e0cb147713e124ecd445055Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1341c3dc66312394771e0cb147713e124ecd445055Chris Banes * See the License for the specific language governing permissions and
1441c3dc66312394771e0cb147713e124ecd445055Chris Banes * limitations under the License.
1541c3dc66312394771e0cb147713e124ecd445055Chris Banes */
1641c3dc66312394771e0cb147713e124ecd445055Chris Banes
1741c3dc66312394771e0cb147713e124ecd445055Chris Banespackage android.support.v4.widget;
1841c3dc66312394771e0cb147713e124ecd445055Chris Banes
1941c3dc66312394771e0cb147713e124ecd445055Chris Banesimport android.content.Context;
2041c3dc66312394771e0cb147713e124ecd445055Chris Banesimport android.graphics.Canvas;
2141c3dc66312394771e0cb147713e124ecd445055Chris Banesimport android.util.AttributeSet;
2241c3dc66312394771e0cb147713e124ecd445055Chris Banesimport android.view.View;
2341c3dc66312394771e0cb147713e124ecd445055Chris Banes
2441c3dc66312394771e0cb147713e124ecd445055Chris Banes/**
2541c3dc66312394771e0cb147713e124ecd445055Chris Banes * Space is a lightweight {@link View} subclass that may be used to create gaps between components
2641c3dc66312394771e0cb147713e124ecd445055Chris Banes * in general purpose layouts.
2741c3dc66312394771e0cb147713e124ecd445055Chris Banes */
2841c3dc66312394771e0cb147713e124ecd445055Chris Banespublic class Space extends View {
2941c3dc66312394771e0cb147713e124ecd445055Chris Banes
3041c3dc66312394771e0cb147713e124ecd445055Chris Banes    public Space(Context context, AttributeSet attrs, int defStyle) {
3141c3dc66312394771e0cb147713e124ecd445055Chris Banes        super(context, attrs, defStyle);
3241c3dc66312394771e0cb147713e124ecd445055Chris Banes        if (getVisibility() == VISIBLE) {
3341c3dc66312394771e0cb147713e124ecd445055Chris Banes            setVisibility(INVISIBLE);
3441c3dc66312394771e0cb147713e124ecd445055Chris Banes        }
3541c3dc66312394771e0cb147713e124ecd445055Chris Banes    }
3641c3dc66312394771e0cb147713e124ecd445055Chris Banes
3741c3dc66312394771e0cb147713e124ecd445055Chris Banes    public Space(Context context, AttributeSet attrs) {
3841c3dc66312394771e0cb147713e124ecd445055Chris Banes        this(context, attrs, 0);
3941c3dc66312394771e0cb147713e124ecd445055Chris Banes    }
4041c3dc66312394771e0cb147713e124ecd445055Chris Banes
4141c3dc66312394771e0cb147713e124ecd445055Chris Banes    public Space(Context context) {
4241c3dc66312394771e0cb147713e124ecd445055Chris Banes        this(context, null);
4341c3dc66312394771e0cb147713e124ecd445055Chris Banes    }
4441c3dc66312394771e0cb147713e124ecd445055Chris Banes
4541c3dc66312394771e0cb147713e124ecd445055Chris Banes    /**
4641c3dc66312394771e0cb147713e124ecd445055Chris Banes     * Draw nothing.
4741c3dc66312394771e0cb147713e124ecd445055Chris Banes     *
4841c3dc66312394771e0cb147713e124ecd445055Chris Banes     * @param canvas an unused parameter.
4941c3dc66312394771e0cb147713e124ecd445055Chris Banes     */
5041c3dc66312394771e0cb147713e124ecd445055Chris Banes    @Override
5141c3dc66312394771e0cb147713e124ecd445055Chris Banes    public void draw(Canvas canvas) {
5241c3dc66312394771e0cb147713e124ecd445055Chris Banes    }
5341c3dc66312394771e0cb147713e124ecd445055Chris Banes
5441c3dc66312394771e0cb147713e124ecd445055Chris Banes    /**
5541c3dc66312394771e0cb147713e124ecd445055Chris Banes     * Compare to: {@link View#getDefaultSize(int, int)}
5641c3dc66312394771e0cb147713e124ecd445055Chris Banes     * If mode is AT_MOST, return the child size instead of the parent size
5741c3dc66312394771e0cb147713e124ecd445055Chris Banes     * (unless it is too big).
5841c3dc66312394771e0cb147713e124ecd445055Chris Banes     */
5941c3dc66312394771e0cb147713e124ecd445055Chris Banes    private static int getDefaultSize2(int size, int measureSpec) {
6041c3dc66312394771e0cb147713e124ecd445055Chris Banes        int result = size;
6141c3dc66312394771e0cb147713e124ecd445055Chris Banes        int specMode = MeasureSpec.getMode(measureSpec);
6241c3dc66312394771e0cb147713e124ecd445055Chris Banes        int specSize = MeasureSpec.getSize(measureSpec);
6341c3dc66312394771e0cb147713e124ecd445055Chris Banes
6441c3dc66312394771e0cb147713e124ecd445055Chris Banes        switch (specMode) {
6541c3dc66312394771e0cb147713e124ecd445055Chris Banes            case MeasureSpec.UNSPECIFIED:
6641c3dc66312394771e0cb147713e124ecd445055Chris Banes                result = size;
6741c3dc66312394771e0cb147713e124ecd445055Chris Banes                break;
6841c3dc66312394771e0cb147713e124ecd445055Chris Banes            case MeasureSpec.AT_MOST:
6941c3dc66312394771e0cb147713e124ecd445055Chris Banes                result = Math.min(size, specSize);
7041c3dc66312394771e0cb147713e124ecd445055Chris Banes                break;
7141c3dc66312394771e0cb147713e124ecd445055Chris Banes            case MeasureSpec.EXACTLY:
7241c3dc66312394771e0cb147713e124ecd445055Chris Banes                result = specSize;
7341c3dc66312394771e0cb147713e124ecd445055Chris Banes                break;
7441c3dc66312394771e0cb147713e124ecd445055Chris Banes        }
7541c3dc66312394771e0cb147713e124ecd445055Chris Banes        return result;
7641c3dc66312394771e0cb147713e124ecd445055Chris Banes    }
7741c3dc66312394771e0cb147713e124ecd445055Chris Banes
7841c3dc66312394771e0cb147713e124ecd445055Chris Banes    @Override
7941c3dc66312394771e0cb147713e124ecd445055Chris Banes    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
8041c3dc66312394771e0cb147713e124ecd445055Chris Banes        setMeasuredDimension(
8141c3dc66312394771e0cb147713e124ecd445055Chris Banes                getDefaultSize2(getSuggestedMinimumWidth(), widthMeasureSpec),
8241c3dc66312394771e0cb147713e124ecd445055Chris Banes                getDefaultSize2(getSuggestedMinimumHeight(), heightMeasureSpec));
8341c3dc66312394771e0cb147713e124ecd445055Chris Banes    }
8441c3dc66312394771e0cb147713e124ecd445055Chris Banes}