PhoneStatusBarView.java revision b472b347b51f84489217bb5d9c3beeeda1e4e626
1/* 2 * Copyright (C) 2008 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 17package com.android.systemui.statusbar.phone; 18 19import android.content.Context; 20import android.content.res.Resources; 21import android.util.AttributeSet; 22import android.util.EventLog; 23import android.util.Log; 24import android.view.MotionEvent; 25import android.view.View; 26import android.view.accessibility.AccessibilityEvent; 27 28import com.android.systemui.EventLogTags; 29import com.android.systemui.R; 30 31public class PhoneStatusBarView extends PanelBar { 32 private static final String TAG = "PhoneStatusBarView"; 33 private static final boolean DEBUG = PhoneStatusBar.DEBUG; 34 private static final boolean DEBUG_GESTURES = true; 35 36 PhoneStatusBar mBar; 37 38 PanelView mLastFullyOpenedPanel = null; 39 PanelView mNotificationPanel; 40 private final PhoneStatusBarTransitions mBarTransitions; 41 private ScrimController mScrimController; 42 43 public PhoneStatusBarView(Context context, AttributeSet attrs) { 44 super(context, attrs); 45 46 Resources res = getContext().getResources(); 47 mBarTransitions = new PhoneStatusBarTransitions(this); 48 } 49 50 public BarTransitions getBarTransitions() { 51 return mBarTransitions; 52 } 53 54 public void setBar(PhoneStatusBar bar) { 55 mBar = bar; 56 } 57 58 public void setScrimController(ScrimController scrimController) { 59 mScrimController = scrimController; 60 } 61 62 @Override 63 public void onFinishInflate() { 64 mBarTransitions.init(); 65 } 66 67 @Override 68 public void addPanel(PanelView pv) { 69 super.addPanel(pv); 70 if (pv.getId() == R.id.notification_panel) { 71 mNotificationPanel = pv; 72 } 73 } 74 75 @Override 76 public boolean panelsEnabled() { 77 return mBar.panelsEnabled(); 78 } 79 80 @Override 81 public boolean onRequestSendAccessibilityEvent(View child, AccessibilityEvent event) { 82 if (super.onRequestSendAccessibilityEvent(child, event)) { 83 // The status bar is very small so augment the view that the user is touching 84 // with the content of the status bar a whole. This way an accessibility service 85 // may announce the current item as well as the entire content if appropriate. 86 AccessibilityEvent record = AccessibilityEvent.obtain(); 87 onInitializeAccessibilityEvent(record); 88 dispatchPopulateAccessibilityEvent(record); 89 event.appendRecord(record); 90 return true; 91 } 92 return false; 93 } 94 95 @Override 96 public PanelView selectPanelForTouch(MotionEvent touch) { 97 // No double swiping. If either panel is open, nothing else can be pulled down. 98 return mNotificationPanel.getExpandedHeight() > 0 99 ? null 100 : mNotificationPanel; 101 } 102 103 @Override 104 public void onPanelPeeked() { 105 super.onPanelPeeked(); 106 mBar.makeExpandedVisible(false); 107 } 108 109 @Override 110 public void onAllPanelsCollapsed() { 111 super.onAllPanelsCollapsed(); 112 113 // Close the status bar in the next frame so we can show the end of the animation. 114 postOnAnimation(new Runnable() { 115 @Override 116 public void run() { 117 mBar.makeExpandedInvisible(); 118 } 119 }); 120 mLastFullyOpenedPanel = null; 121 } 122 123 @Override 124 public void onPanelFullyOpened(PanelView openPanel) { 125 super.onPanelFullyOpened(openPanel); 126 if (openPanel != mLastFullyOpenedPanel) { 127 openPanel.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); 128 } 129 mLastFullyOpenedPanel = openPanel; 130 } 131 132 @Override 133 public boolean onTouchEvent(MotionEvent event) { 134 boolean barConsumedEvent = mBar.interceptTouchEvent(event); 135 136 if (DEBUG_GESTURES) { 137 if (event.getActionMasked() != MotionEvent.ACTION_MOVE) { 138 EventLog.writeEvent(EventLogTags.SYSUI_PANELBAR_TOUCH, 139 event.getActionMasked(), (int) event.getX(), (int) event.getY(), 140 barConsumedEvent ? 1 : 0); 141 } 142 } 143 144 return barConsumedEvent || super.onTouchEvent(event); 145 } 146 147 @Override 148 public void onTrackingStarted(PanelView panel) { 149 super.onTrackingStarted(panel); 150 mBar.onTrackingStarted(); 151 mScrimController.onTrackingStarted(); 152 } 153 154 @Override 155 public void onTrackingStopped(PanelView panel, boolean expand) { 156 super.onTrackingStopped(panel, expand); 157 mBar.onTrackingStopped(expand); 158 } 159 160 @Override 161 public void onExpandingFinished() { 162 super.onExpandingFinished(); 163 mScrimController.onExpandingFinished(); 164 } 165 166 @Override 167 public boolean onInterceptTouchEvent(MotionEvent event) { 168 return mBar.interceptTouchEvent(event) || super.onInterceptTouchEvent(event); 169 } 170 171 @Override 172 public void panelExpansionChanged(PanelView panel, float frac, boolean expanded) { 173 super.panelExpansionChanged(panel, frac, expanded); 174 mScrimController.setPanelExpansion(frac); 175 mBar.updateCarrierLabelVisibility(false); 176 mBar.userActivity(); 177 } 178} 179