150a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler/* 250a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * Copyright (C) 2012 The Android Open Source Project 350a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * 450a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * Licensed under the Apache License, Version 2.0 (the "License"); 550a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * you may not use this file except in compliance with the License. 650a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * You may obtain a copy of the License at 750a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * 850a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * http://www.apache.org/licenses/LICENSE-2.0 950a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * 1050a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * Unless required by applicable law or agreed to in writing, software 1150a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * distributed under the License is distributed on an "AS IS" BASIS, 1250a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1350a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * See the License for the specific language governing permissions and 1450a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler * limitations under the License. 1550a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler */ 1650a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler 1708d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandlerpackage com.android.systemui.statusbar.phone; 1808d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 1908d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandlerimport android.content.Context; 2008d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandlerimport android.util.AttributeSet; 2164161ccb2f3341ebe1675e38a999250c7967d0adChris Wrenimport android.util.EventLog; 2208d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandlerimport android.view.MotionEvent; 2308d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandlerimport android.widget.FrameLayout; 2408d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 2564161ccb2f3341ebe1675e38a999250c7967d0adChris Wrenimport com.android.systemui.EventLogTags; 2664161ccb2f3341ebe1675e38a999250c7967d0adChris Wren 2708d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandlerpublic class PanelHolder extends FrameLayout { 2864161ccb2f3341ebe1675e38a999250c7967d0adChris Wren public static final boolean DEBUG_GESTURES = true; 2908d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 3067eab79051eea2d4f8fda4a2a698900ffacfb557Daniel Sandler private int mSelectedPanelIndex = -1; 3108d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler private PanelBar mBar; 3208d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 3308d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler public PanelHolder(Context context, AttributeSet attrs) { 3408d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler super(context, attrs); 3508d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler setChildrenDrawingOrderEnabled(true); 3608d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 3708d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 3808d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler @Override 3908d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler protected void onFinishInflate() { 4008d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler super.onFinishInflate(); 4108d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler setChildrenDrawingOrderEnabled(true); 4208d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 4308d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 4408d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler public int getPanelIndex(PanelView pv) { 4508d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler final int N = getChildCount(); 4608d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler for (int i=0; i<N; i++) { 4708d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler final PanelView v = (PanelView) getChildAt(i); 4808d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler if (pv == v) return i; 4908d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 5008d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler return -1; 5108d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 5208d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 5308d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler public void setSelectedPanel(PanelView pv) { 5408d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler mSelectedPanelIndex = getPanelIndex(pv); 5508d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 5608d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 5708d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler @Override 5808d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler protected int getChildDrawingOrder(int childCount, int i) { 5908d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler if (mSelectedPanelIndex == -1) { 6008d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler return i; 6108d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } else { 6208d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler if (i == childCount - 1) { 6308d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler return mSelectedPanelIndex; 6408d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } else if (i >= mSelectedPanelIndex) { 6508d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler return i + 1; 6608d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } else { 6708d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler return i; 6808d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 6908d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 7008d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 7108d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 7208d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler @Override 7308d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler public boolean onTouchEvent(MotionEvent event) { 7464161ccb2f3341ebe1675e38a999250c7967d0adChris Wren if (DEBUG_GESTURES) { 7564161ccb2f3341ebe1675e38a999250c7967d0adChris Wren if (event.getActionMasked() != MotionEvent.ACTION_MOVE) { 7664161ccb2f3341ebe1675e38a999250c7967d0adChris Wren EventLog.writeEvent(EventLogTags.SYSUI_PANELHOLDER_TOUCH, 7764161ccb2f3341ebe1675e38a999250c7967d0adChris Wren event.getActionMasked(), (int) event.getX(), (int) event.getY()); 7864161ccb2f3341ebe1675e38a999250c7967d0adChris Wren } 7964161ccb2f3341ebe1675e38a999250c7967d0adChris Wren } 8008d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler return false; 8108d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 8208d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler 8308d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler public void setBar(PanelBar panelBar) { 8408d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler mBar = panelBar; 8508d05e3d1d6ade6924266296033981a96b47d5fbDaniel Sandler } 8650a531337e7d6d49b40a1c96636962507ccf6c61Daniel Sandler} 87