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