1cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler/* 2cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler * Copyright (C) 2012 The Android Open Source Project 3cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler * 4cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler * Licensed under the Apache License, Version 2.0 (the "License"); 5cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler * you may not use this file except in compliance with the License. 6cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler * You may obtain a copy of the License at 7cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler * 8cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler * http://www.apache.org/licenses/LICENSE-2.0 9cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler * 10cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler * Unless required by applicable law or agreed to in writing, software 11cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler * distributed under the License is distributed on an "AS IS" BASIS, 12cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler * See the License for the specific language governing permissions and 14cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler * limitations under the License. 15cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler */ 16cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler 17cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandlerpackage com.android.systemui.statusbar.phone; 18cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler 19d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chungimport android.animation.LayoutTransition; 20cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandlerimport android.content.Context; 21d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chungimport android.content.Intent; 22d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chungimport android.content.res.Resources; 2313522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandlerimport android.graphics.Canvas; 2413522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandlerimport android.graphics.drawable.Drawable; 25cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandlerimport android.util.AttributeSet; 26d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chungimport android.view.LayoutInflater; 27d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chungimport android.view.View; 28d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chungimport android.view.ViewGroup; 29d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung 30d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chungimport com.android.systemui.R; 31d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chungimport com.android.systemui.statusbar.BaseStatusBar; 32151f00d8f06e207038125f227b42f06a25d5e0a0Daniel Sandlerimport com.android.systemui.statusbar.GestureRecorder; 33d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chungimport com.android.systemui.statusbar.policy.BatteryController; 34d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chungimport com.android.systemui.statusbar.policy.BluetoothController; 35d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chungimport com.android.systemui.statusbar.policy.LocationController; 36d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chungimport com.android.systemui.statusbar.policy.NetworkController; 37cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler 38cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandlerpublic class SettingsPanelView extends PanelView { 39d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung 40d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung private QuickSettings mQS; 41d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung private QuickSettingsContainerView mQSContainer; 42d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung 4313522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler Drawable mHandleBar; 44076324ae191469737afa5bbec577a718f3a31886Daniel Sandler int mHandleBarHeight; 4513522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler View mHandleView; 4613522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler 47cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler public SettingsPanelView(Context context, AttributeSet attrs) { 48cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler super(context, attrs); 49cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler } 50cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler 51cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler @Override 52d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung protected void onFinishInflate() { 53d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung super.onFinishInflate(); 54d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung 55d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung mQSContainer = (QuickSettingsContainerView) findViewById(R.id.quick_settings_container); 5613522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler 5713522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler Resources resources = getContext().getResources(); 5813522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler mHandleBar = resources.getDrawable(R.drawable.status_bar_close); 59076324ae191469737afa5bbec577a718f3a31886Daniel Sandler mHandleBarHeight = resources.getDimensionPixelSize(R.dimen.close_handle_height); 6013522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler mHandleView = findViewById(R.id.handle); 61bac221ff0b9e1406f95f23c9a5c3b580ece10eabCasey Burkhardt 62bac221ff0b9e1406f95f23c9a5c3b580ece10eabCasey Burkhardt setContentDescription(resources.getString(R.string.accessibility_desc_quick_settings)); 63d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung } 64101784e5605338f22e32f587ffcaa09b582d556cDaniel Sandler 65101784e5605338f22e32f587ffcaa09b582d556cDaniel Sandler public void setQuickSettings(QuickSettings qs) { 66101784e5605338f22e32f587ffcaa09b582d556cDaniel Sandler mQS = qs; 67101784e5605338f22e32f587ffcaa09b582d556cDaniel Sandler } 68d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung 69d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung @Override 70d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung public void setBar(PanelBar panelBar) { 71d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung super.setBar(panelBar); 72d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung 73d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung if (mQS != null) { 74d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung mQS.setBar(panelBar); 75d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung } 76d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung } 77d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung 7843229d707515ce51c52f63e15257960c6d29162cWinson Chung public void setImeWindowStatus(boolean visible) { 7943229d707515ce51c52f63e15257960c6d29162cWinson Chung if (mQS != null) { 8043229d707515ce51c52f63e15257960c6d29162cWinson Chung mQS.setImeWindowStatus(visible); 8143229d707515ce51c52f63e15257960c6d29162cWinson Chung } 8243229d707515ce51c52f63e15257960c6d29162cWinson Chung } 8343229d707515ce51c52f63e15257960c6d29162cWinson Chung 84d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung public void setup(NetworkController networkController, BluetoothController bluetoothController, 85d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung BatteryController batteryController, LocationController locationController) { 86d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung if (mQS != null) { 87d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung mQS.setup(networkController, bluetoothController, batteryController, 88d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung locationController); 89d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung } 90d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung } 91d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung 92d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung void updateResources() { 93d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung if (mQS != null) { 94d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung mQS.updateResources(); 95d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung } 96d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung if (mQSContainer != null) { 97d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung mQSContainer.updateResources(); 98d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung } 99d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung requestLayout(); 100d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung } 101d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung 102d63c59786509aadd6a8d0c5cb45ed696339f16b7Winson Chung @Override 103cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler public void fling(float vel, boolean always) { 104151f00d8f06e207038125f227b42f06a25d5e0a0Daniel Sandler GestureRecorder gr = ((PhoneStatusBarView) mBar).mBar.getGestureRecorder(); 105151f00d8f06e207038125f227b42f06a25d5e0a0Daniel Sandler if (gr != null) { 106151f00d8f06e207038125f227b42f06a25d5e0a0Daniel Sandler gr.tag( 107151f00d8f06e207038125f227b42f06a25d5e0a0Daniel Sandler "fling " + ((vel > 0) ? "open" : "closed"), 108151f00d8f06e207038125f227b42f06a25d5e0a0Daniel Sandler "settings,v=" + vel); 109151f00d8f06e207038125f227b42f06a25d5e0a0Daniel Sandler } 110cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler super.fling(vel, always); 111cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler } 1123ffdcc70c28d7a2abbb4f248d32d70d45d61fd44Daniel Sandler 1133ffdcc70c28d7a2abbb4f248d32d70d45d61fd44Daniel Sandler public void setService(PhoneStatusBar phoneStatusBar) { 1143ffdcc70c28d7a2abbb4f248d32d70d45d61fd44Daniel Sandler if (mQS != null) { 1153ffdcc70c28d7a2abbb4f248d32d70d45d61fd44Daniel Sandler mQS.setService(phoneStatusBar); 1163ffdcc70c28d7a2abbb4f248d32d70d45d61fd44Daniel Sandler } 1173ffdcc70c28d7a2abbb4f248d32d70d45d61fd44Daniel Sandler } 11813522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler 11913522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler // We draw the handle ourselves so that it's always glued to the bottom of the window. 12013522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler @Override 12113522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 12213522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler super.onLayout(changed, left, top, right, bottom); 12313522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler if (changed) { 12413522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler final int pl = getPaddingLeft(); 12513522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler final int pr = getPaddingRight(); 12613522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler mHandleBar.setBounds(pl, 0, getWidth() - pr, (int) mHandleBarHeight); 12713522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler } 12813522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler } 12913522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler 13013522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler @Override 13113522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler public void draw(Canvas canvas) { 13213522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler super.draw(canvas); 13313522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler final int off = (int) (getHeight() - mHandleBarHeight - getPaddingBottom()); 13413522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler canvas.translate(0, off); 13513522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler mHandleBar.setState(mHandleView.getDrawableState()); 13613522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler mHandleBar.draw(canvas); 13713522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler canvas.translate(0, -off); 13813522a2e40730a0703fd7f185b7fb9be8ae37ab6Daniel Sandler } 139cf591db04914d8ceadd982451b325bd8c4817086Daniel Sandler} 140