1a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki/*
2a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki * Copyright (C) 2016 The Android Open Source Project
3a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki *
4a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki * Licensed under the Apache License, Version 2.0 (the "License");
5a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki * you may not use this file except in compliance with the License.
6a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki * You may obtain a copy of the License at
7a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki *
8a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki *      http://www.apache.org/licenses/LICENSE-2.0
9a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki *
10a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki * Unless required by applicable law or agreed to in writing, software
11a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki * distributed under the License is distributed on an "AS IS" BASIS,
12a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki * See the License for the specific language governing permissions and
14a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki * limitations under the License.
15a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki */
16a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki
17a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Arakipackage com.example.android.support.design.widget;
18a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki
19a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Arakiimport android.content.Context;
20a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Arakiimport android.os.Bundle;
21a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Arakiimport android.support.annotation.Nullable;
22a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Arakiimport android.support.design.widget.BottomSheetDialogFragment;
23a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Arakiimport android.support.v7.app.AppCompatActivity;
24a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Arakiimport android.support.v7.widget.LinearLayoutManager;
25a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Arakiimport android.support.v7.widget.RecyclerView;
26a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Arakiimport android.view.LayoutInflater;
27a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Arakiimport android.view.View;
28a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Arakiimport android.view.ViewGroup;
29a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki
30a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Arakiimport com.example.android.support.design.Cheeses;
31a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Arakiimport com.example.android.support.design.R;
32a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki
33a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Arakiabstract class BottomSheetModalBase extends AppCompatActivity {
34a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki
35a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki    private static final String FRAGMENT_MODAL = "modal";
36a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki
37a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki    @Override
38a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki    protected void onCreate(@Nullable Bundle savedInstanceState) {
39a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki        super.onCreate(savedInstanceState);
40a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki        setContentView(R.layout.design_bottom_sheet_modal);
4101ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki        findViewById(R.id.show_short).setOnClickListener(mOnClickListener);
4201ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki        findViewById(R.id.show_long).setOnClickListener(mOnClickListener);
43a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki    }
44a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki
45a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki    private View.OnClickListener mOnClickListener = new View.OnClickListener() {
46a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki        @Override
47a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki        public void onClick(View v) {
48a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki            switch (v.getId()) {
4901ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki                case R.id.show_short:
5001ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki                    ModalFragment.newInstance(5)
5101ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki                            .show(getSupportFragmentManager(), FRAGMENT_MODAL);
5201ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki                    break;
5301ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki                case R.id.show_long:
5401ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki                    ModalFragment.newInstance(ModalFragment.LENGTH_ALL)
5501ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki                            .show(getSupportFragmentManager(), FRAGMENT_MODAL);
56a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki                    break;
57a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki            }
58a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki        }
59a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki    };
60a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki
61a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki    /**
62a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki     * This is the bottom sheet.
63a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki     */
64a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki    public static class ModalFragment extends BottomSheetDialogFragment {
65a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki
6601ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki        private static final String ARG_LENGTH = "length";
6701ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki
6801ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki        public static final int LENGTH_ALL = Cheeses.sCheeseStrings.length;
6901ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki
7001ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki        public static ModalFragment newInstance(int length) {
7101ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki            ModalFragment fragment = new ModalFragment();
7201ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki            Bundle args = new Bundle();
7301ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki            args.putInt(ARG_LENGTH, Math.min(LENGTH_ALL, length));
7401ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki            fragment.setArguments(args);
7501ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki            return fragment;
7601ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki        }
7701ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki
78a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki        @Nullable
79a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki        @Override
80a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
81a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki                @Nullable Bundle savedInstanceState) {
82a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki            return inflater.inflate(R.layout.design_bottom_sheet_recyclerview, container, false);
83a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki        }
84a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki
85a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki        @Override
86a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki        public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
87a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki            // For the scrolling content, you can use RecyclerView, NestedScrollView or any other
88a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki            // View that inherits NestedScrollingChild
89a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki            RecyclerView recyclerView =
90a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki                    (RecyclerView) view.findViewById(R.id.bottom_sheet_recyclerview);
91a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki            Context context = recyclerView.getContext();
92a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki            recyclerView.setLayoutManager(new LinearLayoutManager(context));
9301ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki            int length = getArguments().getInt(ARG_LENGTH);
9401ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki            String[] array = new String[length];
9501ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki            System.arraycopy(Cheeses.sCheeseStrings, 0, array, 0, length);
9601ca48bfc8ad80dae2e2809420af1e4b80dd4ae5Yuichi Araki            recyclerView.setAdapter(new SimpleStringRecyclerViewAdapter(context, array));
97a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki        }
98a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki
99a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki    }
100a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki
101a80c3794138d9bc3c49577ac01998a9da4dcfbb2Yuichi Araki}
102