149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes/*
249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * Copyright (C) 2014 The Android Open Source Project
349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes *
449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * Licensed under the Apache License, Version 2.0 (the "License");
549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * you may not use this file except in compliance with the License.
649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * You may obtain a copy of the License at
749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes *
849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes *      http://www.apache.org/licenses/LICENSE-2.0
949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes *
1049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * Unless required by applicable law or agreed to in writing, software
1149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * distributed under the License is distributed on an "AS IS" BASIS,
1249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * See the License for the specific language governing permissions and
1449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * limitations under the License.
1549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes */
1649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
1749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
1849c78900da0d43140fb602431fb93212bd7f6c70Chris Banespackage android.support.v7.internal.widget;
1949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
2049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes/**
2149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * RtlSpacingHelper manages the relationship between left/right and start/end for views
2249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * that need to maintain both absolute and relative settings for a form of spacing similar
2349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * to view padding.
2449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes *
2549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes * @hide
2649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes */
2749c78900da0d43140fb602431fb93212bd7f6c70Chris Banespublic class RtlSpacingHelper {
2849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    public static final int UNDEFINED = Integer.MIN_VALUE;
2949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
3049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    private int mLeft = 0;
3149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    private int mRight = 0;
3249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    private int mStart = UNDEFINED;
3349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    private int mEnd = UNDEFINED;
3449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    private int mExplicitLeft = 0;
3549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    private int mExplicitRight = 0;
3649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
3749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    private boolean mIsRtl = false;
3849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    private boolean mIsRelative = false;
3949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
4049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    public int getLeft() {
4149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        return mLeft;
4249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    }
4349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
4449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    public int getRight() {
4549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        return mRight;
4649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    }
4749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
4849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    public int getStart() {
4949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        return mIsRtl ? mRight : mLeft;
5049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    }
5149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
5249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    public int getEnd() {
5349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        return mIsRtl ? mLeft : mRight;
5449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    }
5549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
5649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    public void setRelative(int start, int end) {
5749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        mStart = start;
5849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        mEnd = end;
5949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        mIsRelative = true;
6049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        if (mIsRtl) {
6149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            if (end != UNDEFINED) mLeft = end;
6249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            if (start != UNDEFINED) mRight = start;
6349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        } else {
6449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            if (start != UNDEFINED) mLeft = start;
6549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            if (end != UNDEFINED) mRight = end;
6649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        }
6749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    }
6849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
6949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    public void setAbsolute(int left, int right) {
7049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        mIsRelative = false;
7149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        if (left != UNDEFINED) mLeft = mExplicitLeft = left;
7249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        if (right != UNDEFINED) mRight = mExplicitRight = right;
7349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    }
7449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes
7549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    public void setDirection(boolean isRtl) {
7649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        if (isRtl == mIsRtl) {
7749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            return;
7849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        }
7949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        mIsRtl = isRtl;
8049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        if (mIsRelative) {
8149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            if (isRtl) {
8249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes                mLeft = mEnd != UNDEFINED ? mEnd : mExplicitLeft;
8349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes                mRight = mStart != UNDEFINED ? mStart : mExplicitRight;
8449c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            } else {
8549c78900da0d43140fb602431fb93212bd7f6c70Chris Banes                mLeft = mStart != UNDEFINED ? mStart : mExplicitLeft;
8649c78900da0d43140fb602431fb93212bd7f6c70Chris Banes                mRight = mEnd != UNDEFINED ? mEnd : mExplicitRight;
8749c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            }
8849c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        } else {
8949c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            mLeft = mExplicitLeft;
9049c78900da0d43140fb602431fb93212bd7f6c70Chris Banes            mRight = mExplicitRight;
9149c78900da0d43140fb602431fb93212bd7f6c70Chris Banes        }
9249c78900da0d43140fb602431fb93212bd7f6c70Chris Banes    }
9349c78900da0d43140fb602431fb93212bd7f6c70Chris Banes}