/* * Copyright (C) 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settingslib.collapsingtoolbar; import android.os.Build; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.Toolbar; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.fragment.app.Fragment; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout; /** * A base fragment that has a collapsing toolbar layout for enabling the collapsing toolbar design. */ public abstract class CollapsingToolbarBaseFragment extends Fragment { private static final float TOOLBAR_LINE_SPACING_MULTIPLIER = 1.1f; @Nullable private CoordinatorLayout mCoordinatorLayout; @Nullable private CollapsingToolbarLayout mCollapsingToolbarLayout; @Nullable private AppBarLayout mAppBarLayout; @NonNull private Toolbar mToolbar; @NonNull private FrameLayout mContentFrameLayout; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { final View view = inflater.inflate(R.layout.collapsing_toolbar_base_layout, container, false); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { mCoordinatorLayout = view.findViewById(R.id.content_parent); } mCollapsingToolbarLayout = view.findViewById(R.id.collapsing_toolbar); mAppBarLayout = view.findViewById(R.id.app_bar); if (mCollapsingToolbarLayout != null) { mCollapsingToolbarLayout.setLineSpacingMultiplier(TOOLBAR_LINE_SPACING_MULTIPLIER); } disableCollapsingToolbarLayoutScrollingBehavior(); mToolbar = view.findViewById(R.id.action_bar); mContentFrameLayout = view.findViewById(R.id.content_frame); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); requireActivity().setActionBar(mToolbar); } /** * Return an instance of CoordinatorLayout. */ @Nullable public CoordinatorLayout getCoordinatorLayout() { return mCoordinatorLayout; } /** * Return an instance of app bar. */ @Nullable public AppBarLayout getAppBarLayout() { return mAppBarLayout; } /** * Return the collapsing toolbar layout. */ @Nullable public CollapsingToolbarLayout getCollapsingToolbarLayout() { return mCollapsingToolbarLayout; } /** * Return the content frame layout. */ @NonNull public FrameLayout getContentFrameLayout() { return mContentFrameLayout; } private void disableCollapsingToolbarLayoutScrollingBehavior() { if (mAppBarLayout == null) { return; } final CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams(); final AppBarLayout.Behavior behavior = new AppBarLayout.Behavior(); behavior.setDragCallback( new AppBarLayout.Behavior.DragCallback() { @Override public boolean canDrag(@NonNull AppBarLayout appBarLayout) { return false; } }); params.setBehavior(behavior); } }