1e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar/*
2e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * Copyright (C) 2014 The Android Open Source Project
3e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar *
4e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License");
5e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * you may not use this file except in compliance with the License.
6e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * You may obtain a copy of the License at
7e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar *
8e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar *      http://www.apache.org/licenses/LICENSE-2.0
9e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar *
10e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * Unless required by applicable law or agreed to in writing, software
11e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS,
12e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * See the License for the specific language governing permissions and
14e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * limitations under the License.
15e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar */
16e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar
17e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyarpackage com.example.android.supportv7.widget;
18e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar
19e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyarimport android.support.v4.view.ViewCompat;
207febb12feeade9937fc0bd1a8e5967251c4aad24Aurimas Liutikasimport android.support.v7.widget.DividerItemDecoration;
21e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyarimport android.support.v7.widget.LinearLayoutManager;
22849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikasimport android.support.v7.widget.LinearSnapHelper;
23e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyarimport android.support.v7.widget.RecyclerView;
247febb12feeade9937fc0bd1a8e5967251c4aad24Aurimas Liutikas
25e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyarimport com.example.android.supportv7.R;
265b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport com.example.android.supportv7.widget.util.ConfigToggle;
27e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar
28e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar/**
291f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar * A sample activity that uses {@link LinearLayoutManager}.
30e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar */
311f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyarpublic class LinearLayoutManagerActivity extends BaseLayoutManagerActivity<LinearLayoutManager> {
32e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar    private DividerItemDecoration mDividerItemDecoration;
33849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas    private LinearSnapHelper mLinearSnapHelper;
34849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas    private boolean mSnapHelperAttached;
35e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar
36e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar    @Override
371f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar    protected LinearLayoutManager createLayoutManager() {
381f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar        return new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
39e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar    }
40e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar
411f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar    @Override
421f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar    protected void onRecyclerViewInit(RecyclerView recyclerView) {
431f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar        mDividerItemDecoration = new DividerItemDecoration(this, mLayoutManager.getOrientation());
441f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar        recyclerView.addItemDecoration(mDividerItemDecoration);
45849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas        mLinearSnapHelper = new LinearSnapHelper();
46e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar    }
47e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar
481f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar    @Override
498faffcd819c6272f9e6537d563c8492854787968Chris Craik    protected ConfigToggle[] createConfigToggles() {
501f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar        return new ConfigToggle[]{
511f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar                new ConfigToggle(this, R.string.checkbox_orientation) {
52e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    @Override
53e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    public boolean isChecked() {
541f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar                        return mLayoutManager.getOrientation() == LinearLayoutManager.HORIZONTAL;
55e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    }
56e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar
57e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    @Override
58e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    public void onChange(boolean newValue) {
591f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar                        mLayoutManager.setOrientation(newValue ? LinearLayoutManager.HORIZONTAL
60e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                                : LinearLayoutManager.VERTICAL);
611244264d8066e64e90fa0b8088ffa50ae4624ca4Yigit Boyar                        if (mDividerItemDecoration != null) {
621f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar                            mDividerItemDecoration.setOrientation(mLayoutManager.getOrientation());
631244264d8066e64e90fa0b8088ffa50ae4624ca4Yigit Boyar                        }
641244264d8066e64e90fa0b8088ffa50ae4624ca4Yigit Boyar
65e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    }
66e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                },
671f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar                new ConfigToggle(this, R.string.checkbox_reverse) {
68e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    @Override
69e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    public boolean isChecked() {
701f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar                        return mLayoutManager.getReverseLayout();
71e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    }
72e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar
73e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    @Override
74e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    public void onChange(boolean newValue) {
751f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar                        mLayoutManager.setReverseLayout(newValue);
76e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    }
77e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                },
781f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar                new ConfigToggle(this, R.string.checkbox_layout_dir) {
79e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    @Override
80e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    public boolean isChecked() {
81e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                        return ViewCompat.getLayoutDirection(mRecyclerView) ==
82e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                                ViewCompat.LAYOUT_DIRECTION_RTL;
83e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    }
84e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar
85e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    @Override
86e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    public void onChange(boolean newValue) {
87e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                        ViewCompat.setLayoutDirection(mRecyclerView, newValue ?
88e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                                ViewCompat.LAYOUT_DIRECTION_RTL : ViewCompat.LAYOUT_DIRECTION_LTR);
89e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    }
90e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                },
911f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar                new ConfigToggle(this, R.string.checkbox_stack_from_end) {
92e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    @Override
93e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    public boolean isChecked() {
941f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar                        return mLayoutManager.getStackFromEnd();
95e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    }
96e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar
97e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    @Override
98e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    public void onChange(boolean newValue) {
991f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar                        mLayoutManager.setStackFromEnd(newValue);
100e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                    }
101849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas                },
102849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas                new ConfigToggle(this, R.string.checkbox_snap) {
103849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas                    @Override
104849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas                    public boolean isChecked() {
105849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas                        return mSnapHelperAttached;
106849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas                    }
107849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas
108849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas                    @Override
109849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas                    public void onChange(boolean newValue) {
110849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas                        mLinearSnapHelper.attachToRecyclerView(newValue ? mRecyclerView : null);
111849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas                        mSnapHelperAttached = newValue;
112849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas                    }
113e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar                }
114e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar        };
115e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar    }
116e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar}
117