18f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki/*
28f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki * Copyright (C) 2016 The Android Open Source Project
38f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki *
48f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki * Licensed under the Apache License, Version 2.0 (the "License");
58f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki * you may not use this file except in compliance with the License.
68f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki * You may obtain a copy of the License at
78f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki *
88f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki *      http://www.apache.org/licenses/LICENSE-2.0
98f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki *
108f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki * Unless required by applicable law or agreed to in writing, software
118f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki * distributed under the License is distributed on an "AS IS" BASIS,
128f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki * See the License for the specific language governing permissions and
148f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki * limitations under the License.
158f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki */
168f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki
178f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Arakipackage com.example.android.support.design.widget;
188f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki
198f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki
208f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Arakiimport android.os.Bundle;
218f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Arakiimport android.view.View;
228f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Arakiimport android.widget.Button;
238f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki
24def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.annotation.NonNull;
25def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.annotation.Nullable;
26def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas
278f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Arakiimport com.example.android.support.design.R;
28f87e4dfc7bcd2583e7908ca3cda65cec6c697080Aurimas Liutikasimport com.google.android.material.bottomsheet.BottomSheetBehavior;
298f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki
308f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki
318f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki/**
328f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki * This demonstrates usage of {@link BottomSheetBehavior} with a FAB anchored to it.
338f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki */
348f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Arakipublic class BottomSheetWithFab extends BottomSheetUsageBase {
358f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki
368f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki    private Button mToggle;
378f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki
388f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki    private View.OnClickListener mOnClickListener = new View.OnClickListener() {
398f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki        @Override
408f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki        public void onClick(View v) {
418f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki            if (v.getId() == R.id.toggle && mBehavior != null) {
428f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                mToggle.setEnabled(false);
438f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                if (mBehavior.getState() == BottomSheetBehavior.STATE_HIDDEN) {
448f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                    mBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
458f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                } else {
468f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                    mBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
478f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                }
488f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki            }
498f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki        }
508f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki    };
518f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki
528f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki    @Override
538f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki    protected int getLayoutId() {
548f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki        return R.layout.design_bottom_sheet_with_fab;
558f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki    }
568f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki
578f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki    @Override
588f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki    protected void onCreate(@Nullable Bundle savedInstanceState) {
598f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki        super.onCreate(savedInstanceState);
60fa2e2acf79d791a90410025daad438968550d18cAlan Viverette        mToggle = findViewById(R.id.toggle);
618f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki        mToggle.setOnClickListener(mOnClickListener);
628f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki        mBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
638f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki            @Override
648f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki            public void onStateChanged(@NonNull View bottomSheet,
658f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                    @BottomSheetBehavior.State int newState) {
668f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                switch (newState) {
678f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                    case BottomSheetBehavior.STATE_HIDDEN:
688f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                        mToggle.setText(R.string.bottomsheet_show);
698f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                        mToggle.setEnabled(true);
708f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                        break;
718f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                    case BottomSheetBehavior.STATE_EXPANDED:
728f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                    case BottomSheetBehavior.STATE_COLLAPSED:
738f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                        mToggle.setText(R.string.bottomsheet_hide);
748f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                        mToggle.setEnabled(true);
758f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                        break;
768f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki                }
778f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki            }
788f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki
798f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki            @Override
808f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki            public void onSlide(@NonNull View bottomSheet, float slideOffset) {
818f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki            }
828f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki        });
838f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki    }
848f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki
858f8034a4204fc10c4805758051f0cec2159c0e40Yuichi Araki}
86