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 com.example.android.support.design.R;
209a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
219a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport android.os.Bundle;
22aa0bf034fe33173410445bde8f64b220282d5b13Yuichi Arakiimport android.support.annotation.NonNull;
239a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport android.support.annotation.Nullable;
249a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport android.support.design.widget.BottomSheetBehavior;
259a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport android.view.View;
269a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport android.widget.Button;
279a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakiimport android.widget.TextView;
289a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
299a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
309a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki/**
319a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki * This demonstrates basic usage of hideable {@link BottomSheetBehavior}.
329a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki */
339a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Arakipublic class BottomSheetHideable extends BottomSheetUsageBase {
349a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
359a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    private TextView mTextSlideOffset;
369a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
379a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    private Button mToggle;
389a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
399a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    @Override
409a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    protected int getLayoutId() {
419a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki        return R.layout.design_bottom_sheet_hideable;
429a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    }
439a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
449a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    @Override
459a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    protected void onCreate(@Nullable Bundle savedInstanceState) {
469a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki        super.onCreate(savedInstanceState);
47fa2e2acf79d791a90410025daad438968550d18cAlan Viverette        mTextSlideOffset = findViewById(R.id.slide_offset);
48fa2e2acf79d791a90410025daad438968550d18cAlan Viverette        mToggle = findViewById(R.id.toggle);
499a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki        mToggle.setOnClickListener(mOnClickListener);
50fadea5f263e79d628f1bd9afae1f3098fb048b1eYuichi Araki        mBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
519a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki            @Override
52aa0bf034fe33173410445bde8f64b220282d5b13Yuichi Araki            public void onStateChanged(@NonNull View bottomSheet,
53aa0bf034fe33173410445bde8f64b220282d5b13Yuichi Araki                    @BottomSheetBehavior.State int newState) {
549a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                switch (newState) {
559a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                    case BottomSheetBehavior.STATE_HIDDEN:
569a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                        mToggle.setText(R.string.bottomsheet_show);
579a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                        mToggle.setEnabled(true);
589a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                        break;
599a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                    case BottomSheetBehavior.STATE_EXPANDED:
609a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                    case BottomSheetBehavior.STATE_COLLAPSED:
619a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                        mToggle.setText(R.string.bottomsheet_hide);
629a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                        mToggle.setEnabled(true);
639a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                        break;
649a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                }
659a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki            }
669a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
679a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki            @Override
68aa0bf034fe33173410445bde8f64b220282d5b13Yuichi Araki            public void onSlide(@NonNull View bottomSheet, float slideOffset) {
699a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                mTextSlideOffset.setText(String.valueOf(slideOffset));
709a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki            }
719a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki        });
729a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    }
739a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
749a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    private View.OnClickListener mOnClickListener = new View.OnClickListener() {
759a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki        @Override
769a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki        public void onClick(View v) {
779a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki            if (v.getId() == R.id.toggle && mBehavior != null) {
789a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                mToggle.setEnabled(false);
799a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                if (mBehavior.getState() == BottomSheetBehavior.STATE_HIDDEN) {
809a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                    mBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
819a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                } else {
829a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                    mBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
839a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki                }
849a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki            }
859a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki        }
869a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki    };
879a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki
889a6522f6c6fc607321a4aa1ea0cc4293c5c744d5Yuichi Araki}
89