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