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;
259b2cd15f0fed990f532f35590c2a2896b90dc7fcChris Wrenimport android.widget.ScrollView;
26c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandlerimport android.widget.TextSwitcher;
27c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
285de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wrenimport com.android.systemui.ExpandHelper;
295de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wrenimport com.android.systemui.R;
305de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wrenimport com.android.systemui.statusbar.policy.NotificationRowLayout;
315de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
32c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
33c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandlerpublic class StatusBarWindowView extends FrameLayout
34c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler{
355de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    private static final String TAG = "StatusBarWindowView";
365de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
375de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    private ExpandHelper mExpandHelper;
385de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    private NotificationRowLayout latestItems;
395de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
40c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    PhoneStatusBar mService;
41c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
42c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    public StatusBarWindowView(Context context, AttributeSet attrs) {
43c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler        super(context, attrs);
445de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        setMotionEventSplittingEnabled(false);
455de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    }
465de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
475de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    @Override
485de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    protected void onAttachedToWindow () {
495de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        super.onAttachedToWindow();
505de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        latestItems = (NotificationRowLayout) findViewById(R.id.latestItems);
519b2cd15f0fed990f532f35590c2a2896b90dc7fcChris Wren        ScrollView scroller = (ScrollView) findViewById(R.id.scroll);
525de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        int minHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_min_height);
535de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        int maxHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_max_height);
545de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        mExpandHelper = new ExpandHelper(mContext, latestItems, minHeight, maxHeight);
555de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        mExpandHelper.setEventSource(this);
56c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    }
57c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
58c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    @Override
59c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    public boolean dispatchKeyEvent(KeyEvent event) {
60c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler        boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
61c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler        switch (event.getKeyCode()) {
62c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler        case KeyEvent.KEYCODE_BACK:
63c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler            if (!down) {
64c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler                mService.animateCollapse();
65c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler            }
66c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler            return true;
67c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler        }
68c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler        return super.dispatchKeyEvent(event);
69c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler    }
705de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
715de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    @Override
725de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    public boolean onInterceptTouchEvent(MotionEvent ev) {
735de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        MotionEvent cancellation = MotionEvent.obtain(ev);
745de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        cancellation.setAction(MotionEvent.ACTION_CANCEL);
755de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
765de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        boolean intercept = mExpandHelper.onInterceptTouchEvent(ev) ||
775de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren                super.onInterceptTouchEvent(ev);
785de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        if (intercept) {
795de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren            latestItems.onInterceptTouchEvent(cancellation);
805de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        }
815de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        return intercept;
825de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    }
835de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren
845de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    @Override
855de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    public boolean onTouchEvent(MotionEvent ev) {
865de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        boolean handled = mExpandHelper.onTouchEvent(ev) ||
875de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren                super.onTouchEvent(ev);
885de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren        return handled;
895de6e94e36e2adbdd4ebfb5c1903c23c9ea3c388Chris Wren    }
90c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler}
91c4f2a5652dd42fdb43a94e341b7a2034b0211a21Daniel Sandler
92