1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.systemui.qs; 18 19 import static com.android.systemui.qs.dagger.QSFragmentModule.QS_FOOTER; 20 21 import android.content.ClipData; 22 import android.content.ClipboardManager; 23 import android.text.TextUtils; 24 import android.view.View; 25 import android.widget.TextView; 26 import android.widget.Toast; 27 28 import com.android.systemui.R; 29 import com.android.systemui.qs.dagger.QSScope; 30 import com.android.systemui.settings.UserTracker; 31 import com.android.systemui.util.ViewController; 32 33 import javax.inject.Inject; 34 import javax.inject.Named; 35 36 /** 37 * Controller for {@link QSFooterView}. 38 */ 39 @QSScope 40 public class QSFooterViewController extends ViewController<QSFooterView> implements QSFooter { 41 42 private final UserTracker mUserTracker; 43 private final QSPanelController mQsPanelController; 44 private final QuickQSPanelController mQuickQSPanelController; 45 private final FooterActionsController mFooterActionsController; 46 private final TextView mBuildText; 47 private final PageIndicator mPageIndicator; 48 49 @Inject QSFooterViewController(QSFooterView view, UserTracker userTracker, QSPanelController qsPanelController, QuickQSPanelController quickQSPanelController, @Named(QS_FOOTER) FooterActionsController footerActionsController)50 QSFooterViewController(QSFooterView view, 51 UserTracker userTracker, 52 QSPanelController qsPanelController, 53 QuickQSPanelController quickQSPanelController, 54 @Named(QS_FOOTER) FooterActionsController footerActionsController) { 55 super(view); 56 mUserTracker = userTracker; 57 mQsPanelController = qsPanelController; 58 mQuickQSPanelController = quickQSPanelController; 59 mFooterActionsController = footerActionsController; 60 61 mBuildText = mView.findViewById(R.id.build); 62 mPageIndicator = mView.findViewById(R.id.footer_page_indicator); 63 } 64 65 @Override onInit()66 protected void onInit() { 67 super.onInit(); 68 mFooterActionsController.init(); 69 } 70 71 @Override onViewAttached()72 protected void onViewAttached() { 73 mView.addOnLayoutChangeListener( 74 (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { 75 mView.updateExpansion(); 76 mFooterActionsController.updateAnimator(right - left, 77 mQuickQSPanelController.getNumQuickTiles()); 78 } 79 ); 80 81 mBuildText.setOnLongClickListener(view -> { 82 CharSequence buildText = mBuildText.getText(); 83 if (!TextUtils.isEmpty(buildText)) { 84 ClipboardManager service = 85 mUserTracker.getUserContext().getSystemService(ClipboardManager.class); 86 String label = getResources().getString(R.string.build_number_clip_data_label); 87 service.setPrimaryClip(ClipData.newPlainText(label, buildText)); 88 Toast.makeText(getContext(), R.string.build_number_copy_toast, Toast.LENGTH_SHORT) 89 .show(); 90 return true; 91 } 92 return false; 93 }); 94 mQsPanelController.setFooterPageIndicator(mPageIndicator); 95 mView.updateEverything(); 96 } 97 98 @Override onViewDetached()99 protected void onViewDetached() { 100 setListening(false); 101 } 102 103 @Override setVisibility(int visibility)104 public void setVisibility(int visibility) { 105 mView.setVisibility(visibility); 106 } 107 108 @Override setExpanded(boolean expanded)109 public void setExpanded(boolean expanded) { 110 mFooterActionsController.setExpanded(expanded); 111 mView.setExpanded(expanded); 112 } 113 114 @Override setExpansion(float expansion)115 public void setExpansion(float expansion) { 116 mView.setExpansion(expansion); 117 mFooterActionsController.setExpansion(expansion); 118 } 119 120 @Override setListening(boolean listening)121 public void setListening(boolean listening) { 122 mFooterActionsController.setListening(listening); 123 } 124 125 @Override setKeyguardShowing(boolean keyguardShowing)126 public void setKeyguardShowing(boolean keyguardShowing) { 127 mView.setKeyguardShowing(); 128 mFooterActionsController.setKeyguardShowing(); 129 } 130 131 /** */ 132 @Override setExpandClickListener(View.OnClickListener onClickListener)133 public void setExpandClickListener(View.OnClickListener onClickListener) { 134 mView.setExpandClickListener(onClickListener); 135 } 136 137 @Override disable(int state1, int state2, boolean animate)138 public void disable(int state1, int state2, boolean animate) { 139 mView.disable(state2); 140 mFooterActionsController.disable(state2); 141 } 142 } 143