1 /*
2  * Copyright (C) 2014 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 com.example.androidx.widget;
18 
19 import android.view.View;
20 
21 import androidx.recyclerview.widget.DividerItemDecoration;
22 import androidx.recyclerview.widget.LinearLayoutManager;
23 import androidx.recyclerview.widget.LinearSnapHelper;
24 import androidx.recyclerview.widget.RecyclerView;
25 
26 import com.example.androidx.R;
27 import com.example.androidx.widget.util.ConfigToggle;
28 
29 /**
30  * A sample activity that uses {@link LinearLayoutManager}.
31  */
32 public class LinearLayoutManagerActivity extends BaseLayoutManagerActivity<LinearLayoutManager> {
33     private DividerItemDecoration mDividerItemDecoration;
34     private LinearSnapHelper mLinearSnapHelper;
35     private boolean mSnapHelperAttached;
36 
37     @Override
createLayoutManager()38     protected LinearLayoutManager createLayoutManager() {
39         return new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
40     }
41 
42     @Override
onRecyclerViewInit(RecyclerView recyclerView)43     protected void onRecyclerViewInit(RecyclerView recyclerView) {
44         mDividerItemDecoration = new DividerItemDecoration(this, mLayoutManager.getOrientation());
45         recyclerView.addItemDecoration(mDividerItemDecoration);
46         mLinearSnapHelper = new LinearSnapHelper();
47     }
48 
49     @Override
createConfigToggles()50     protected ConfigToggle[] createConfigToggles() {
51         return new ConfigToggle[]{
52                 new ConfigToggle(this, R.string.checkbox_orientation) {
53                     @Override
54                     public boolean isChecked() {
55                         return mLayoutManager.getOrientation() == LinearLayoutManager.HORIZONTAL;
56                     }
57 
58                     @Override
59                     public void onChange(boolean newValue) {
60                         mLayoutManager.setOrientation(newValue ? LinearLayoutManager.HORIZONTAL
61                                 : LinearLayoutManager.VERTICAL);
62                         if (mDividerItemDecoration != null) {
63                             mDividerItemDecoration.setOrientation(mLayoutManager.getOrientation());
64                         }
65 
66                     }
67                 },
68                 new ConfigToggle(this, R.string.checkbox_reverse) {
69                     @Override
70                     public boolean isChecked() {
71                         return mLayoutManager.getReverseLayout();
72                     }
73 
74                     @Override
75                     public void onChange(boolean newValue) {
76                         mLayoutManager.setReverseLayout(newValue);
77                     }
78                 },
79                 new ConfigToggle(this, R.string.checkbox_layout_dir) {
80                     @Override
81                     public boolean isChecked() {
82                         return mRecyclerView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
83                     }
84 
85                     @Override
86                     public void onChange(boolean newValue) {
87                         mRecyclerView.setLayoutDirection(newValue
88                                 ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR);
89                     }
90                 },
91                 new ConfigToggle(this, R.string.checkbox_stack_from_end) {
92                     @Override
93                     public boolean isChecked() {
94                         return mLayoutManager.getStackFromEnd();
95                     }
96 
97                     @Override
98                     public void onChange(boolean newValue) {
99                         mLayoutManager.setStackFromEnd(newValue);
100                     }
101                 },
102                 new ConfigToggle(this, R.string.checkbox_snap) {
103                     @Override
104                     public boolean isChecked() {
105                         return mSnapHelperAttached;
106                     }
107 
108                     @Override
109                     public void onChange(boolean newValue) {
110                         mLinearSnapHelper.attachToRecyclerView(newValue ? mRecyclerView : null);
111                         mSnapHelperAttached = newValue;
112                     }
113                 }
114         };
115     }
116 }
117