StatusBarWindowView.java revision 5de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388
1c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler/*
2c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * Copyright (C) 2012 The Android Open Source Project
3c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler *
4c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * Licensed under the Apache License, Version 2.0 (the "License");
5c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * you may not use this file except in compliance with the License.
6c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * You may obtain a copy of the License at
7c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler *
8c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler *      http://www.apache.org/licenses/LICENSE-2.0
9c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler *
10c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * Unless required by applicable law or agreed to in writing, software
11c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * distributed under the License is distributed on an "AS IS" BASIS,
12c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * See the License for the specific language governing permissions and
14c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler * limitations under the License.
15c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler */
16c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
17c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandlerpackage com.android.systemui.statusbar.phone;
18c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
19c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandlerimport android.content.Context;
20c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandlerimport android.util.AttributeSet;
215de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wrenimport android.util.Log;
22c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandlerimport android.view.KeyEvent;
235de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wrenimport android.view.MotionEvent;
24c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandlerimport android.widget.FrameLayout;
25c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandlerimport android.widget.TextSwitcher;
26c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
275de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wrenimport com.android.systemui.ExpandHelper;
285de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wrenimport com.android.systemui.R;
295de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wrenimport com.android.systemui.statusbar.policy.NotificationRowLayout;
305de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
31c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
32c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandlerpublic class StatusBarWindowView extends FrameLayout
33c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler{
345de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    private static final String TAG = "StatusBarWindowView";
355de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
365de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    private ExpandHelper mExpandHelper;
375de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    private NotificationRowLayout latestItems;
385de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
39c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    PhoneStatusBar mService;
40c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
41c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    public StatusBarWindowView(Context context, AttributeSet attrs) {
42c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler        super(context, attrs);
435de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        setMotionEventSplittingEnabled(false);
445de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    }
455de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
465de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    @Override
475de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    protected void onAttachedToWindow () {
485de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        super.onAttachedToWindow();
495de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        latestItems = (NotificationRowLayout) findViewById(R.id.latestItems);
505de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        int minHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_min_height);
515de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        int maxHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_max_height);
525de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        mExpandHelper = new ExpandHelper(mContext, latestItems, minHeight, maxHeight);
535de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        mExpandHelper.setEventSource(this);
54c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    }
55c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
56c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    @Override
57c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    public boolean dispatchKeyEvent(KeyEvent event) {
58c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler        boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
59c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler        switch (event.getKeyCode()) {
60c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler        case KeyEvent.KEYCODE_BACK:
61c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler            if (!down) {
62c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler                mService.animateCollapse();
63c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler            }
64c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler            return true;
65c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler        }
66c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler        return super.dispatchKeyEvent(event);
67c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    }
685de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
695de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    @Override
705de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    public boolean onInterceptTouchEvent(MotionEvent ev) {
715de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        MotionEvent cancellation = MotionEvent.obtain(ev);
725de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        cancellation.setAction(MotionEvent.ACTION_CANCEL);
735de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
745de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        boolean intercept = mExpandHelper.onInterceptTouchEvent(ev) ||
755de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren                super.onInterceptTouchEvent(ev);
765de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        if (intercept) {
775de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren            latestItems.onInterceptTouchEvent(cancellation);
785de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        }
795de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        return intercept;
805de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    }
815de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
825de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    @Override
835de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    public boolean onTouchEvent(MotionEvent ev) {
845de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        boolean handled = mExpandHelper.onTouchEvent(ev) ||
855de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren                super.onTouchEvent(ev);
865de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        return handled;
875de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    }
88c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler}
89c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
90