19a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki/*
29a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * Copyright (C) 2015 The Android Open Source Project
39a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki *
49a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * Licensed under the Apache License, Version 2.0 (the "License");
59a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * you may not use this file except in compliance with the License.
69a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * You may obtain a copy of the License at
79a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki *
89a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki *      http://www.apache.org/licenses/LICENSE-2.0
99a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki *
109a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * Unless required by applicable law or agreed to in writing, software
119a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * distributed under the License is distributed on an "AS IS" BASIS,
129a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * See the License for the specific language governing permissions and
149a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * limitations under the License.
159a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki */
169a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
179a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakipackage com.example.android.support.design.widget;
189a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
199a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport android.os.Bundle;
209a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport android.view.View;
219a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport android.widget.Button;
229a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport android.widget.TextView;
239a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
24def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.annotation.NonNull;
25def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport androidx.annotation.Nullable;
26def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas
27def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikasimport com.example.android.support.design.R;
28f87e4dfc7bcd2583e7908ca3cda65cec6c697080Aurimas Liutikasimport com.google.android.material.bottomsheet.BottomSheetBehavior;
29def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas
309a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
319a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki/**
329a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * This demonstrates basic usage of hideable {@link BottomSheetBehavior}.
339a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki */
349a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakipublic class BottomSheetHideable extends BottomSheetUsageBase {
359a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
369a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    private TextView mTextSlideOffset;
379a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
389a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    private Button mToggle;
399a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
409a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    @Override
419a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    protected int getLayoutId() {
429a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki        return R.layout.design_bottom_sheet_hideable;
439a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    }
449a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
459a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    @Override
469a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    protected void onCreate(@Nullable Bundle savedInstanceState) {
479a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki        super.onCreate(savedInstanceState);
48fa2e2acf79d791a90410025daad438968550d18cAlan Viverette        mTextSlideOffset = findViewById(R.id.slide_offset);
49fa2e2acf79d791a90410025daad438968550d18cAlan Viverette        mToggle = findViewById(R.id.toggle);
509a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki        mToggle.setOnClickListener(mOnClickListener);
51fadea5f263e79d628f1bd9afae1f3098fb048b1eYuichi Araki        mBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
529a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki            @Override
53aa0bf034fe33173410445bde8f64b220282d5b13Yuichi Araki            public void onStateChanged(@NonNull View bottomSheet,
54aa0bf034fe33173410445bde8f64b220282d5b13Yuichi Araki                    @BottomSheetBehavior.State int newState) {
559a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                switch (newState) {
569a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                    case BottomSheetBehavior.STATE_HIDDEN:
579a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                        mToggle.setText(R.string.bottomsheet_show);
589a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                        mToggle.setEnabled(true);
599a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                        break;
609a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                    case BottomSheetBehavior.STATE_EXPANDED:
619a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                    case BottomSheetBehavior.STATE_COLLAPSED:
629a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                        mToggle.setText(R.string.bottomsheet_hide);
639a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                        mToggle.setEnabled(true);
649a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                        break;
659a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                }
669a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki            }
679a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
689a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki            @Override
69aa0bf034fe33173410445bde8f64b220282d5b13Yuichi Araki            public void onSlide(@NonNull View bottomSheet, float slideOffset) {
709a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                mTextSlideOffset.setText(String.valueOf(slideOffset));
719a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki            }
729a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki        });
739a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    }
749a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
759a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    private View.OnClickListener mOnClickListener = new View.OnClickListener() {
769a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki        @Override
779a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki        public void onClick(View v) {
789a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki            if (v.getId() == R.id.toggle && mBehavior != null) {
799a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                mToggle.setEnabled(false);
809a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                if (mBehavior.getState() == BottomSheetBehavior.STATE_HIDDEN) {
819a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                    mBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
829a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                } else {
839a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                    mBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
849a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                }
859a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki            }
869a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki        }
879a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    };
889a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
899a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki}
90