1 /*
2  * Copyright 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package androidx.constraintlayout.core.state.helpers;
18 
19 import androidx.constraintlayout.core.state.Reference;
20 import androidx.constraintlayout.core.state.State;
21 import androidx.constraintlayout.core.widgets.ConstraintWidget;
22 import androidx.constraintlayout.core.widgets.Guideline;
23 
24 public class GuidelineReference implements Facade, Reference {
25 
26     final State mState;
27     private int mOrientation;
28     private Guideline mGuidelineWidget;
29     private int mStart = -1;
30     private int mEnd = -1;
31     private float mPercent = 0;
32 
33     private Object mKey;
34 
35     @Override
setKey(Object key)36     public void setKey(Object key) {
37         this.mKey = key;
38     }
39 
40     @Override
getKey()41     public Object getKey() {
42         return mKey;
43     }
44 
GuidelineReference(State state)45     public GuidelineReference(State state) {
46         mState = state;
47     }
48 
49     // @TODO: add description
start(Object margin)50     public GuidelineReference start(Object margin) {
51         mStart = mState.convertDimension(margin);
52         mEnd = -1;
53         mPercent = 0;
54         return this;
55     }
56 
57     // @TODO: add description
end(Object margin)58     public GuidelineReference end(Object margin) {
59         mStart = -1;
60         mEnd = mState.convertDimension(margin);
61         mPercent = 0;
62         return this;
63     }
64 
65     // @TODO: add description
percent(float percent)66     public GuidelineReference percent(float percent) {
67         mStart = -1;
68         mEnd = -1;
69         mPercent = percent;
70         return this;
71     }
72 
setOrientation(int orientation)73     public void setOrientation(int orientation) {
74         mOrientation = orientation;
75     }
76 
getOrientation()77     public int getOrientation() {
78         return mOrientation;
79     }
80 
81     // @TODO: add description
82     @Override
apply()83     public void apply() {
84         mGuidelineWidget.setOrientation(mOrientation);
85         if (mStart != -1) {
86             mGuidelineWidget.setGuideBegin(mStart);
87         } else if (mEnd != -1) {
88             mGuidelineWidget.setGuideEnd(mEnd);
89         } else {
90             mGuidelineWidget.setGuidePercent(mPercent);
91         }
92     }
93 
94     @Override
getFacade()95     public Facade getFacade() {
96         return null;
97     }
98 
99     @Override
getConstraintWidget()100     public ConstraintWidget getConstraintWidget() {
101         if (mGuidelineWidget == null) {
102             mGuidelineWidget = new Guideline();
103         }
104         return mGuidelineWidget;
105     }
106 
107     @Override
setConstraintWidget(ConstraintWidget widget)108     public void setConstraintWidget(ConstraintWidget widget) {
109         if (widget instanceof Guideline) {
110             mGuidelineWidget = (Guideline) widget;
111         } else {
112             mGuidelineWidget = null;
113         }
114     }
115 }
116