| /* |
| * 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); |
| } |
| } |