Large-screen notification panel size + positioning.
On sw600 devices we show the notification panel in a smaller rectangle, centered in portrait and left-aligned in landscape. Also remove a bunch of -large resources that shouldn't be used anymore. Bug: 6297838 Change-Id: I8ed3445ccb7df16e30870a4322d89786467c54df
This commit is contained in:
38
packages/SystemUI/res/layout-sw600dp/super_status_bar.xml
Normal file
38
packages/SystemUI/res/layout-sw600dp/super_status_bar.xml
Normal file
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
**
|
||||
** Copyright 2012, The Android Open Source Project
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
-->
|
||||
|
||||
<!-- This is the combined status bar / notification panel window. -->
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
|
||||
android:fitsSystemWindows="true"
|
||||
>
|
||||
|
||||
<include layout="@layout/status_bar_expanded"
|
||||
android:layout_width="@dimen/notification_panel_width"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center_horizontal|top"
|
||||
/>
|
||||
|
||||
<include layout="@layout/status_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@*android:dimen/status_bar_height"
|
||||
/>
|
||||
|
||||
</FrameLayout>
|
||||
@@ -21,120 +21,114 @@
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
|
||||
android:focusable="true"
|
||||
android:descendantFocusability="afterDescendants"
|
||||
android:id="@+id/notification_panel"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:background="@drawable/notification_tracking_bg"
|
||||
android:paddingTop="@*android:dimen/status_bar_height"
|
||||
android:layout_marginLeft="@dimen/notification_panel_margin_left"
|
||||
>
|
||||
|
||||
<FrameLayout
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:id="@+id/notification_panel"
|
||||
android:background="@drawable/notification_tracking_bg"
|
||||
android:paddingTop="@*android:dimen/status_bar_height"
|
||||
android:layout_height="52dp"
|
||||
android:paddingTop="3dp"
|
||||
android:paddingBottom="5dp"
|
||||
android:paddingRight="3dp"
|
||||
android:background="@drawable/notification_header_bg"
|
||||
>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="52dp"
|
||||
android:paddingTop="3dp"
|
||||
android:paddingBottom="5dp"
|
||||
android:paddingRight="3dp"
|
||||
android:background="@drawable/notification_header_bg"
|
||||
>
|
||||
<com.android.systemui.statusbar.policy.DateView android:id="@+id/date"
|
||||
android:textAppearance="@style/TextAppearance.StatusBar.Date"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:singleLine="true"
|
||||
android:gravity="center_vertical|left"
|
||||
android:paddingLeft="16dp"
|
||||
/>
|
||||
<!--
|
||||
<com.android.systemui.statusbar.phone.CarrierLabel
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginTop="1dp"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:paddingBottom="1dp"
|
||||
android:paddingLeft="4dp"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:textColor="?android:attr/textColorSecondary"
|
||||
/>
|
||||
-->
|
||||
|
||||
<ImageView android:id="@+id/settings_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_toRightOf="@id/date"
|
||||
android:paddingLeft="8dp"
|
||||
android:paddingRight="8dp"
|
||||
android:src="@drawable/ic_notify_quicksettings"
|
||||
android:contentDescription="@string/accessibility_settings_button"
|
||||
/>
|
||||
|
||||
<ImageView android:id="@+id/clear_all_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentRight="true"
|
||||
android:paddingLeft="8dp"
|
||||
android:paddingRight="8dp"
|
||||
android:src="@drawable/ic_notify_clear"
|
||||
android:contentDescription="@string/accessibility_clear_all"
|
||||
/>
|
||||
</RelativeLayout>
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="2dp"
|
||||
android:layout_marginTop="52dp"
|
||||
android:background="@drawable/status_bar_hr"
|
||||
/>
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/scroll"
|
||||
android:layout_width="match_parent"
|
||||
<com.android.systemui.statusbar.policy.DateView android:id="@+id/date"
|
||||
android:textAppearance="@style/TextAppearance.StatusBar.Date"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:fadingEdge="none"
|
||||
android:overScrollMode="ifContentScrolls"
|
||||
android:layout_marginTop="54dp"
|
||||
android:layout_marginBottom="34dp"
|
||||
>
|
||||
<com.android.systemui.statusbar.policy.NotificationRowLayout
|
||||
android:id="@+id/latestItems"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
systemui:rowHeight="@dimen/notification_height"
|
||||
/>
|
||||
</ScrollView>
|
||||
|
||||
<ImageView
|
||||
android:layout_alignParentLeft="true"
|
||||
android:singleLine="true"
|
||||
android:gravity="center_vertical|left"
|
||||
android:paddingLeft="16dp"
|
||||
/>
|
||||
<!--
|
||||
<com.android.systemui.statusbar.phone.CarrierLabel
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginTop="1dp"
|
||||
android:layout_marginLeft="5dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:paddingBottom="1dp"
|
||||
android:paddingLeft="4dp"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:textColor="?android:attr/textColorSecondary"
|
||||
/>
|
||||
-->
|
||||
|
||||
<ImageView android:id="@+id/settings_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_toRightOf="@id/date"
|
||||
android:paddingLeft="8dp"
|
||||
android:paddingRight="8dp"
|
||||
android:src="@drawable/ic_notify_quicksettings"
|
||||
android:contentDescription="@string/accessibility_settings_button"
|
||||
/>
|
||||
|
||||
<ImageView android:id="@+id/clear_all_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentRight="true"
|
||||
android:paddingLeft="8dp"
|
||||
android:paddingRight="8dp"
|
||||
android:src="@drawable/ic_notify_clear"
|
||||
android:contentDescription="@string/accessibility_clear_all"
|
||||
/>
|
||||
</RelativeLayout>
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="2dp"
|
||||
android:layout_marginTop="52dp"
|
||||
android:background="@drawable/status_bar_hr"
|
||||
/>
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/scroll"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fadingEdge="none"
|
||||
android:overScrollMode="ifContentScrolls"
|
||||
android:layout_marginTop="54dp"
|
||||
android:layout_marginBottom="34dp"
|
||||
>
|
||||
<com.android.systemui.statusbar.policy.NotificationRowLayout
|
||||
android:id="@+id/latestItems"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/title_bar_shadow"
|
||||
android:layout_marginTop="54dp"
|
||||
android:scaleType="fitXY"
|
||||
/>
|
||||
|
||||
<com.android.systemui.statusbar.phone.CloseDragHandle android:id="@+id/close"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/close_handle_height"
|
||||
android:layout_gravity="bottom"
|
||||
android:orientation="vertical"
|
||||
>
|
||||
<ImageView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="34dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:scaleType="fitXY"
|
||||
android:src="@drawable/status_bar_close_on"
|
||||
/>
|
||||
|
||||
</com.android.systemui.statusbar.phone.CloseDragHandle>
|
||||
|
||||
</FrameLayout><!-- end of sliding panel -->
|
||||
systemui:rowHeight="@dimen/notification_height"
|
||||
/>
|
||||
</ScrollView>
|
||||
|
||||
</FrameLayout><!-- end of window -->
|
||||
<ImageView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/title_bar_shadow"
|
||||
android:layout_marginTop="54dp"
|
||||
android:scaleType="fitXY"
|
||||
/>
|
||||
|
||||
<com.android.systemui.statusbar.phone.CloseDragHandle android:id="@+id/close"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/close_handle_height"
|
||||
android:layout_gravity="bottom"
|
||||
android:orientation="vertical"
|
||||
>
|
||||
<ImageView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="34dp"
|
||||
android:layout_gravity="bottom"
|
||||
android:scaleType="fitXY"
|
||||
android:src="@drawable/status_bar_close_on"
|
||||
/>
|
||||
|
||||
</com.android.systemui.statusbar.phone.CloseDragHandle>
|
||||
|
||||
</FrameLayout><!-- end of sliding panel -->
|
||||
@@ -1,24 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
* Copyright (c) 2010, The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
-->
|
||||
<resources>
|
||||
<!-- gap on either side of status bar notification icons -->
|
||||
<dimen name="status_bar_icon_padding">2dp</dimen>
|
||||
</resources>
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<drawable name="status_bar_background">#000000</drawable>
|
||||
<drawable name="notification_icon_area_smoke">#aa000000</drawable>
|
||||
</resources>
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
/*
|
||||
** Copyright 2010, The Android Open Source Project
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
-->
|
||||
|
||||
<!-- These resources are around just to allow their values to be customized
|
||||
for different hardware and product builds. -->
|
||||
<resources>
|
||||
<!-- Whether or not we show the number in the bar. -->
|
||||
<bool name="config_statusBarShowNumber">false</bool>
|
||||
</resources>
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
* Copyright (c) 2010, The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
-->
|
||||
<resources>
|
||||
<!-- The width of the ticker, including the icon -->
|
||||
<dimen name="notification_ticker_width">360dp</dimen>
|
||||
<!-- Status bar panel bottom offset (height of status bar - overlap) -->
|
||||
<dimen name="status_bar_panel_bottom_offset">36dp</dimen>
|
||||
<!-- gap on either side of status bar notification icons -->
|
||||
<dimen name="status_bar_icon_padding">8dp</dimen>
|
||||
</resources>
|
||||
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
/**
|
||||
* Copyright (c) 2010, The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
-->
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<!-- The text for the button in the notification window-shade that clears
|
||||
all of the currently visible notifications. [CHAR LIMIT=10]-->
|
||||
<string name="status_bar_clear_all_button">Clear all</string>
|
||||
|
||||
<!-- Separator for PLMN and SPN in network name. -->
|
||||
<string name="status_bar_network_name_separator" translatable="false">" – "</string>
|
||||
|
||||
<!-- Title for the pseudo-notification shown when notifications are disabled (do-not-disturb
|
||||
mode) -->
|
||||
<string name="notifications_off_title">Notifications off</string>
|
||||
|
||||
<!-- Content text for do-not-disturb mode notification -->
|
||||
<string name="notifications_off_text">Tap here to turn notifications back on.</string>
|
||||
</resources>
|
||||
26
packages/SystemUI/res/values-sw600dp-land/dimens.xml
Normal file
26
packages/SystemUI/res/values-sw600dp-land/dimens.xml
Normal file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
* Copyright (c) 2012, The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
-->
|
||||
<resources>
|
||||
<!-- Layout parameters for the notification panel -->
|
||||
<dimen name="notification_panel_margin_bottom">0dp</dimen>
|
||||
<dimen name="notification_panel_margin_left">32dp</dimen>
|
||||
|
||||
<!-- Gravity for the notification panel -->
|
||||
<!-- 0x33 = left|top -->
|
||||
<integer name="notification_panel_layout_gravity">0x33</integer>
|
||||
</resources>
|
||||
@@ -1,25 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
/*
|
||||
** Copyright 2011, The Android Open Source Project
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
-->
|
||||
|
||||
<!-- These resources are around just to allow their values to be customized
|
||||
for different hardware and product builds. -->
|
||||
<resources>
|
||||
<integer name="config_maxNotificationIcons">3</integer>
|
||||
</resources>
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
* Copyright (c) 2011, The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
-->
|
||||
<resources>
|
||||
<!-- gap on either side of status bar notification icons -->
|
||||
<dimen name="status_bar_icon_padding">0dp</dimen>
|
||||
|
||||
<!-- The width of the view containing non-menu status bar icons -->
|
||||
<dimen name="navigation_key_width">70dip</dimen>
|
||||
|
||||
<!-- The width of the view containing the menu status bar icon -->
|
||||
<dimen name="navigation_menu_key_width">40dip</dimen>
|
||||
</resources>
|
||||
|
||||
29
packages/SystemUI/res/values-sw600dp/dimens.xml
Normal file
29
packages/SystemUI/res/values-sw600dp/dimens.xml
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
* Copyright (c) 2012, The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
-->
|
||||
<resources>
|
||||
<!-- The width of the notification panel window -->
|
||||
<dimen name="notification_panel_width">446dp</dimen>
|
||||
|
||||
<!-- Layout parameters for the notification panel -->
|
||||
<dimen name="notification_panel_margin_bottom">192dp</dimen>
|
||||
<dimen name="notification_panel_margin_left">0dp</dimen>
|
||||
|
||||
<!-- Gravity for the notification panel -->
|
||||
<!-- 0x33 = center_horizontal|top -->
|
||||
<integer name="notification_panel_layout_gravity">0x31</integer>
|
||||
</resources>
|
||||
@@ -120,4 +120,12 @@
|
||||
|
||||
<!-- Height of the draggable handle at the bottom of the phone notification panel -->
|
||||
<dimen name="close_handle_height">34dp</dimen>
|
||||
|
||||
<!-- Layout parameters for the notification panel -->
|
||||
<dimen name="notification_panel_margin_bottom">0dp</dimen>
|
||||
<dimen name="notification_panel_margin_left">0dp</dimen>
|
||||
|
||||
<!-- Gravity for the notification panel -->
|
||||
<!-- 0x37 = fill_horizontal|top -->
|
||||
<integer name="notification_panel_layout_gravity">0x37</integer>
|
||||
</resources>
|
||||
|
||||
@@ -46,6 +46,7 @@ import android.text.TextUtils;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.util.Slog;
|
||||
import android.util.TypedValue;
|
||||
import android.view.Display;
|
||||
import android.view.Gravity;
|
||||
import android.view.IWindowManager;
|
||||
@@ -61,6 +62,7 @@ import android.view.WindowManagerImpl;
|
||||
import android.view.animation.AccelerateInterpolator;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.AnimationUtils;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.RemoteViews;
|
||||
@@ -158,6 +160,9 @@ public class PhoneStatusBar extends BaseStatusBar {
|
||||
View mNotificationPanel; // the sliding/resizing panel within the notification window
|
||||
ScrollView mScrollView;
|
||||
View mExpandedContents;
|
||||
int mNotificationPanelMarginBottomPx, mNotificationPanelMarginLeftPx;
|
||||
int mNotificationPanelGravity;
|
||||
|
||||
// top bar
|
||||
View mClearButton;
|
||||
View mSettingsButton;
|
||||
@@ -279,6 +284,17 @@ public class PhoneStatusBar extends BaseStatusBar {
|
||||
if (DEBUG) {
|
||||
mStatusBarWindow.setBackgroundColor(0x6000FF80);
|
||||
}
|
||||
mStatusBarWindow.setOnTouchListener(new View.OnTouchListener() {
|
||||
@Override
|
||||
public boolean onTouch(View v, MotionEvent event) {
|
||||
if (event.getAction() == MotionEvent.ACTION_DOWN) {
|
||||
if (mExpanded && !mAnimating) {
|
||||
animateCollapse();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}});
|
||||
|
||||
mStatusBarView = (PhoneStatusBarView) mStatusBarWindow.findViewById(R.id.status_bar);
|
||||
mNotificationPanel = mStatusBarWindow.findViewById(R.id.notification_panel);
|
||||
|
||||
@@ -1111,7 +1127,7 @@ public class PhoneStatusBar extends BaseStatusBar {
|
||||
// Expand the window to encompass the full screen in anticipation of the drag.
|
||||
// This is only possible to do atomically because the status bar is at the top of the screen!
|
||||
WindowManager.LayoutParams lp = (WindowManager.LayoutParams) mStatusBarWindow.getLayoutParams();
|
||||
lp.height = mDisplayMetrics.heightPixels;
|
||||
lp.height = ViewGroup.LayoutParams.MATCH_PARENT;
|
||||
final WindowManager wm = WindowManagerImpl.getDefault();
|
||||
wm.updateViewLayout(mStatusBarWindow, lp);
|
||||
|
||||
@@ -1162,7 +1178,7 @@ public class PhoneStatusBar extends BaseStatusBar {
|
||||
if (mAnimating) {
|
||||
y = (int)mAnimY;
|
||||
} else {
|
||||
y = mDisplayMetrics.heightPixels-1;
|
||||
y = getExpandedViewMaxHeight()-1;
|
||||
}
|
||||
// Let the fling think that we're open so it goes in the right direction
|
||||
// and doesn't try to re-open the windowshade.
|
||||
@@ -1224,7 +1240,7 @@ public class PhoneStatusBar extends BaseStatusBar {
|
||||
if (SPEW) Slog.d(TAG, "doAnimation before mAnimY=" + mAnimY);
|
||||
incrementAnim();
|
||||
if (SPEW) Slog.d(TAG, "doAnimation after mAnimY=" + mAnimY);
|
||||
if (mAnimY >= mDisplayMetrics.heightPixels-1) {
|
||||
if (mAnimY >= getExpandedViewMaxHeight()-1) {
|
||||
if (SPEW) Slog.d(TAG, "Animation completed to expanded state.");
|
||||
mAnimating = false;
|
||||
updateExpandedViewPos(EXPANDED_FULL_OPEN);
|
||||
@@ -1329,7 +1345,7 @@ public class PhoneStatusBar extends BaseStatusBar {
|
||||
if (mExpanded) {
|
||||
if (!always && (
|
||||
vel > mFlingCollapseMinVelocityPx
|
||||
|| (y > (mDisplayMetrics.heightPixels*(1f-mCollapseMinDisplayFraction)) &&
|
||||
|| (y > (getExpandedViewMaxHeight()*(1f-mCollapseMinDisplayFraction)) &&
|
||||
vel > -mFlingExpandMinVelocityPx))) {
|
||||
// We are expanded, but they didn't move sufficiently to cause
|
||||
// us to retract. Animate back to the expanded position.
|
||||
@@ -1348,7 +1364,7 @@ public class PhoneStatusBar extends BaseStatusBar {
|
||||
} else {
|
||||
if (always || (
|
||||
vel > mFlingExpandMinVelocityPx
|
||||
|| (y > (mDisplayMetrics.heightPixels*(1f-mExpandMinDisplayFraction)) &&
|
||||
|| (y > (getExpandedViewMaxHeight()*(1f-mExpandMinDisplayFraction)) &&
|
||||
vel > -mFlingCollapseMinVelocityPx))) {
|
||||
// We are collapsed, and they moved enough to allow us to
|
||||
// expand. Animate in the notifications.
|
||||
@@ -1412,7 +1428,8 @@ public class PhoneStatusBar extends BaseStatusBar {
|
||||
// mViewDelta = mAbsPos[1] + mTrackingView.getHeight() - y;
|
||||
}
|
||||
if ((!mExpanded && y < hitSize) ||
|
||||
(mExpanded && y > (mDisplayMetrics.heightPixels-hitSize))) {
|
||||
// @@ add taps outside the panel if it's not full-screen
|
||||
(mExpanded && y > (getExpandedViewMaxHeight()-hitSize))) {
|
||||
|
||||
// We drop events at the edge of the screen to make the windowshade come
|
||||
// down by accident less, especially when pushing open a device with a keyboard
|
||||
@@ -1864,15 +1881,22 @@ public class PhoneStatusBar extends BaseStatusBar {
|
||||
return a < 0f ? 0f : (a > 1f ? 1f : a);
|
||||
}
|
||||
|
||||
int getExpandedViewMaxHeight() {
|
||||
return mDisplayMetrics.heightPixels - mNotificationPanelMarginBottomPx;
|
||||
}
|
||||
|
||||
void updateExpandedViewPos(int expandedPosition) {
|
||||
if (SPEW) {
|
||||
Slog.d(TAG, "updateExpandedViewPos before expandedPosition=" + expandedPosition
|
||||
//+ " mTrackingParams.y=" + ((mTrackingParams == null) ? "?" : mTrackingParams.y)
|
||||
+ " mTrackingPosition=" + mTrackingPosition);
|
||||
+ " mTrackingPosition=" + mTrackingPosition
|
||||
+ " gravity=" + mNotificationPanelGravity);
|
||||
}
|
||||
|
||||
int panelh = 0;
|
||||
final int disph = mDisplayMetrics.heightPixels;
|
||||
final boolean portrait = mDisplayMetrics.heightPixels > mDisplayMetrics.widthPixels;
|
||||
|
||||
final int disph = getExpandedViewMaxHeight();
|
||||
|
||||
// If the expanded view is not visible, make sure they're still off screen.
|
||||
// Maybe the view was resized.
|
||||
@@ -1906,113 +1930,25 @@ public class PhoneStatusBar extends BaseStatusBar {
|
||||
|
||||
mTrackingPosition = panelh;
|
||||
|
||||
final View cropView = mNotificationPanel;
|
||||
ViewGroup.LayoutParams lp = cropView.getLayoutParams();
|
||||
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mNotificationPanel.getLayoutParams();
|
||||
lp.height = panelh;
|
||||
lp.gravity = mNotificationPanelGravity;
|
||||
lp.leftMargin = mNotificationPanelMarginLeftPx;
|
||||
if (SPEW) {
|
||||
Slog.v(TAG, "updated cropView height=" + panelh);
|
||||
Slog.v(TAG, "updated cropView height=" + panelh + " grav=" + lp.gravity);
|
||||
}
|
||||
cropView.setLayoutParams(lp);
|
||||
mNotificationPanel.setLayoutParams(lp);
|
||||
// woo, special effects
|
||||
final int barh = getCloseViewHeight() + getStatusBarHeight();
|
||||
final float frac = saturate((float)(panelh - barh) / (disph - barh));
|
||||
final int color = ((int)(0xB0 * Math.sin(frac * 1.57f))) << 24;
|
||||
mStatusBarWindow.setBackgroundColor(color);
|
||||
|
||||
// Slog.d(TAG, String.format("updateExpanded: pos=%d frac=%.2f col=0x%08x", pos, frac, color));
|
||||
|
||||
// if (mExpandedParams != null) {
|
||||
// if (mCloseView.getWindowVisibility() == View.VISIBLE) {
|
||||
// mCloseView.getLocationInWindow(mPositionTmp);
|
||||
// final int closePos = mPositionTmp[1];
|
||||
//
|
||||
// mExpandedContents.getLocationInWindow(mPositionTmp);
|
||||
// final int contentsBottom = mPositionTmp[1] + mExpandedContents.getHeight();
|
||||
//
|
||||
// mExpandedParams.y = pos + mTrackingView.getHeight()
|
||||
// - (mTrackingParams.height-closePos) - contentsBottom;
|
||||
//
|
||||
// if (SPEW) {
|
||||
// Slog.d(PhoneStatusBar.TAG,
|
||||
// "pos=" + pos +
|
||||
// " trackingHeight=" + mTrackingView.getHeight() +
|
||||
// " (trackingParams.height - closePos)=" +
|
||||
// (mTrackingParams.height - closePos) +
|
||||
// " contentsBottom=" + contentsBottom);
|
||||
// }
|
||||
//
|
||||
// } else {
|
||||
// // If the tracking view is not yet visible, then we can't have
|
||||
// // a good value of the close view location. We need to wait for
|
||||
// // it to be visible to do a layout.
|
||||
// mExpandedParams.y = -mDisplayMetrics.heightPixels;
|
||||
// }
|
||||
// int max = h;
|
||||
// if (mExpandedParams.y > max) {
|
||||
// mExpandedParams.y = max;
|
||||
// }
|
||||
// int min = mTrackingPosition;
|
||||
// if (mExpandedParams.y < min) {
|
||||
// mExpandedParams.y = min;
|
||||
// }
|
||||
//
|
||||
// boolean visible = (mTrackingPosition + mTrackingView.getHeight()) > h;
|
||||
// if (!visible) {
|
||||
// // if the contents aren't visible, move the expanded view way off screen
|
||||
// // because the window itself extends below the content view.
|
||||
// mExpandedParams.y = -disph;
|
||||
// }
|
||||
// mExpandedDialog.getWindow().setAttributes(mExpandedParams);
|
||||
//
|
||||
// // As long as this isn't just a repositioning that's not supposed to affect
|
||||
// // the user's perception of what's showing, call to say that the visibility
|
||||
// // has changed. (Otherwise, someone else will call to do that).
|
||||
// if (expandedPosition != EXPANDED_LEAVE_ALONE) {
|
||||
// if (SPEW) Slog.d(TAG, "updateExpandedViewPos visibilityChanged(" + visible + ")");
|
||||
// visibilityChanged(visible);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (SPEW) {
|
||||
// Slog.d(TAG, "updateExpandedViewPos after expandedPosition=" + expandedPosition
|
||||
// + " mTrackingParams.y=" + mTrackingParams.y
|
||||
// + " mTrackingPosition=" + mTrackingPosition
|
||||
// + " mExpandedParams.y=" + mExpandedParams.y
|
||||
// + " mExpandedParams.height=" + mExpandedParams.height);
|
||||
// }
|
||||
}
|
||||
|
||||
int getExpandedHeight() {
|
||||
return mDisplayMetrics.heightPixels;
|
||||
}
|
||||
|
||||
void updateDisplaySize() {
|
||||
mDisplay.getMetrics(mDisplayMetrics);
|
||||
// if (DEBUG) {
|
||||
// Slog.d(TAG, "updateDisplaySize: " + mDisplayMetrics);
|
||||
// }
|
||||
// updateExpandedSize();
|
||||
}
|
||||
|
||||
// void updateExpandedSize() {
|
||||
// if (DEBUG) {
|
||||
// Slog.d(TAG, "updateExpandedSize()");
|
||||
// }
|
||||
// if (mStatusBarWindow != null && mDisplayMetrics != null) {
|
||||
// mExpandedParams.width = mDisplayMetrics.widthPixels;
|
||||
// mExpandedParams.height = getExpandedHeight();
|
||||
// if (!mExpandedVisible) {
|
||||
// updateExpandedInvisiblePosition();
|
||||
// } else {
|
||||
// mExpandedDialog.getWindow().setAttributes(mExpandedParams);
|
||||
// }
|
||||
// if (DEBUG) {
|
||||
// Slog.d(TAG, "updateExpandedSize: height=" + mExpandedParams.height + " " +
|
||||
// (mExpandedVisible ? "VISIBLE":"INVISIBLE"));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
void performDisableActions(int net) {
|
||||
int old = mDisabled;
|
||||
int diff = net ^ old;
|
||||
@@ -2152,8 +2088,9 @@ public class PhoneStatusBar extends BaseStatusBar {
|
||||
animateCollapse(excludeRecents);
|
||||
}
|
||||
else if (Intent.ACTION_CONFIGURATION_CHANGED.equals(action)) {
|
||||
repositionNavigationBar();
|
||||
updateResources();
|
||||
repositionNavigationBar();
|
||||
updateExpandedViewPos(EXPANDED_LEAVE_ALONE);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -2228,6 +2165,15 @@ public class PhoneStatusBar extends BaseStatusBar {
|
||||
mCollapseAccelPx = res.getDimension(R.dimen.collapse_accel);
|
||||
|
||||
mFlingGestureMaxXVelocityPx = res.getDimension(R.dimen.fling_gesture_max_x_velocity);
|
||||
|
||||
mNotificationPanelMarginBottomPx
|
||||
= (int) res.getDimension(R.dimen.notification_panel_margin_bottom);
|
||||
mNotificationPanelMarginLeftPx
|
||||
= (int) res.getDimension(R.dimen.notification_panel_margin_left);
|
||||
mNotificationPanelGravity = res.getInteger(R.integer.notification_panel_layout_gravity);
|
||||
if (mNotificationPanelGravity <= 0) {
|
||||
mNotificationPanelGravity = Gravity.CENTER_VERTICAL | Gravity.TOP;
|
||||
}
|
||||
|
||||
if (false) Slog.v(TAG, "updateResources");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user