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}