Merge "Back from the dead: Carrier name, background dimming." into jb-dev

This commit is contained in:
Chris Wren
2012-06-07 09:44:54 -07:00
committed by Android (Google) Code Review
7 changed files with 152 additions and 10 deletions

View File

@ -29,6 +29,17 @@
android:layout_marginLeft="@dimen/notification_panel_margin_left"
>
<TextView
android:id="@+id/carrier_label"
android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Network"
android:layout_height="@dimen/carrier_label_height"
android:layout_width="match_parent"
android:layout_gravity="bottom"
android:layout_marginBottom="@dimen/close_handle_height"
android:gravity="center"
android:visibility="invisible"
/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"

View File

@ -133,7 +133,7 @@
<dimen name="notification_panel_header_height">48dp</dimen>
<!-- Extra space above the panel -->
<dimen name="notification_panel_padding_top">4dp</dimen>
<dimen name="notification_panel_padding_top">0dp</dimen>
<!-- Extra space above the clock in the panel -->
<dimen name="notification_panel_header_padding_top">0dp</dimen>
@ -145,4 +145,7 @@
<!-- Gravity for the notification panel -->
<!-- 0x37 = fill_horizontal|top -->
<integer name="notification_panel_layout_gravity">0x37</integer>
<!-- Height of the carrier/wifi name label -->
<dimen name="carrier_label_height">24dp</dimen>
</resources>

View File

@ -63,6 +63,10 @@
<item name="android:textAllCaps">true</item>
</style>
<style name="TextAppearance.StatusBar.Expanded.Network" parent="@style/TextAppearance.StatusBar.Expanded.Date">
<item name="android:textColor">#999999</item>
</style>
<style name="Animation" />
<style name="Animation.ShirtPocketPanel">

View File

@ -17,6 +17,7 @@
package com.android.systemui.statusbar.phone;
import android.animation.Animator;
import android.animation.Animator.AnimatorListener;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
@ -86,6 +87,7 @@ import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.DateView;
import com.android.systemui.statusbar.policy.IntruderAlertView;
import com.android.systemui.statusbar.policy.LocationController;
import com.android.systemui.statusbar.policy.OnSizeChangedListener;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.NotificationRowLayout;
@ -105,7 +107,8 @@ public class PhoneStatusBar extends BaseStatusBar {
public static final String ACTION_STATUSBAR_START
= "com.android.internal.policy.statusbar.START";
private static final boolean DIM_BEHIND_EXPANDED_PANEL = false;
private static final boolean DIM_BEHIND_EXPANDED_PANEL = true;
private static final boolean SHOW_CARRIER_LABEL = true;
private static final int MSG_OPEN_NOTIFICATION_PANEL = 1000;
private static final int MSG_CLOSE_NOTIFICATION_PANEL = 1001;
@ -170,6 +173,11 @@ public class PhoneStatusBar extends BaseStatusBar {
View mSettingsButton;
RotationToggle mRotationButton;
// carrier/wifi label
private TextView mCarrierLabel;
private boolean mCarrierLabelVisible = false;
private int mCarrierLabelHeight;
// drag bar
CloseDragHandle mCloseView;
private int mCloseViewHeight;
@ -385,6 +393,14 @@ public class PhoneStatusBar extends BaseStatusBar {
mPile = (NotificationRowLayout)mStatusBarWindow.findViewById(R.id.latestItems);
mPile.setLongPressListener(getNotificationLongClicker());
if (SHOW_CARRIER_LABEL) {
mPile.setOnSizeChangedListener(new OnSizeChangedListener() {
@Override
public void onSizeChanged(View view, int w, int h, int oldw, int oldh) {
updateCarrierLabelVisibility();
}
});
}
mExpandedContents = mPile; // was: expanded.findViewById(R.id.notificationLinearLayout);
mClearButton = mStatusBarWindow.findViewById(R.id.clear_all_button);
@ -397,6 +413,9 @@ public class PhoneStatusBar extends BaseStatusBar {
mSettingsButton.setOnClickListener(mSettingsButtonListener);
mRotationButton = (RotationToggle) mStatusBarWindow.findViewById(R.id.rotation_lock_button);
mCarrierLabel = (TextView)mStatusBarWindow.findViewById(R.id.carrier_label);
mCarrierLabel.setVisibility(mCarrierLabelVisible ? View.VISIBLE : View.INVISIBLE);
mScrollView = (ScrollView)mStatusBarWindow.findViewById(R.id.scroll);
mScrollView.setVerticalScrollBarEnabled(false); // less drawing during pulldowns
@ -421,8 +440,17 @@ public class PhoneStatusBar extends BaseStatusBar {
mNetworkController = new NetworkController(mContext);
final SignalClusterView signalCluster =
(SignalClusterView)mStatusBarView.findViewById(R.id.signal_cluster);
mNetworkController.addSignalCluster(signalCluster);
signalCluster.setNetworkController(mNetworkController);
// for wifi-only devices, we show SSID; otherwise, we show PLMN
if (mNetworkController.hasMobileDataFeature()) {
mNetworkController.addMobileLabelView(mCarrierLabel);
} else {
mNetworkController.addWifiLabelView(mCarrierLabel);
}
// final ImageView wimaxRSSI =
// (ImageView)sb.findViewById(R.id.wimax_signal);
// if (wimaxRSSI != null) {
@ -861,6 +889,45 @@ public class PhoneStatusBar extends BaseStatusBar {
}
}
protected void updateCarrierLabelVisibility() {
if (!SHOW_CARRIER_LABEL) return;
// The idea here is to only show the carrier label when there is enough room to see it,
// i.e. when there aren't enough notifications to fill the panel.
if (DEBUG) {
Slog.d(TAG, String.format("pileh=%d scrollh=%d carrierh=%d",
mPile.getHeight(), mScrollView.getHeight(), mCarrierLabelHeight));
}
final boolean makeVisible =
mPile.getHeight() < (mScrollView.getHeight() - mCarrierLabelHeight);
if (mCarrierLabelVisible != makeVisible) {
mCarrierLabelVisible = makeVisible;
if (DEBUG) {
Slog.d(TAG, "making carrier label " + (makeVisible?"visible":"invisible"));
}
mCarrierLabel.animate().cancel();
if (makeVisible) {
mCarrierLabel.setVisibility(View.VISIBLE);
}
mCarrierLabel.animate()
.alpha(makeVisible ? 1f : 0f)
//.setStartDelay(makeVisible ? 500 : 0)
//.setDuration(makeVisible ? 750 : 100)
.setDuration(150)
.setListener(makeVisible ? null : new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
if (!mCarrierLabelVisible) { // race
mCarrierLabel.setVisibility(View.INVISIBLE);
mCarrierLabel.setAlpha(0f);
}
}
})
.start();
}
}
@Override
protected void setAreThereNotifications() {
final boolean any = mNotificationData.size() > 0;
@ -918,6 +985,8 @@ public class PhoneStatusBar extends BaseStatusBar {
})
.start();
}
updateCarrierLabelVisibility();
}
public void showClock(boolean show) {
@ -1092,6 +1161,8 @@ public class PhoneStatusBar extends BaseStatusBar {
mExpandedVisible = true;
makeSlippery(mNavigationBarView, true);
updateCarrierLabelVisibility();
updateExpandedViewPos(EXPANDED_LEAVE_ALONE);
// Expand the window to encompass the full screen in anticipation of the drag.
@ -1947,6 +2018,8 @@ public class PhoneStatusBar extends BaseStatusBar {
panelh = 0;
}
if (panelh == mTrackingPosition) return;
mTrackingPosition = panelh;
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mNotificationPanel.getLayoutParams();
@ -1958,13 +2031,17 @@ public class PhoneStatusBar extends BaseStatusBar {
}
mNotificationPanel.setLayoutParams(lp);
if (DIM_BEHIND_EXPANDED_PANEL && ActivityManager.isHighEndGfx(mDisplay)) {
// 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;
if (DIM_BEHIND_EXPANDED_PANEL && ActivityManager.isHighEndGfx(mDisplay)) {
// woo, special effects
final float k = (float)(1f-0.5f*(1f-Math.cos(3.14159f * Math.pow(1f-frac, 2.2f))));
final int color = ((int)(0xB0 * k)) << 24;
mStatusBarWindow.setBackgroundColor(color);
}
updateCarrierLabelVisibility();
}
void updateDisplaySize() {
@ -2199,11 +2276,15 @@ public class PhoneStatusBar extends BaseStatusBar {
if (mNotificationPanelGravity <= 0) {
mNotificationPanelGravity = Gravity.CENTER_VERTICAL | Gravity.TOP;
}
mNotificationPanelMinHeight =
final int notificationPanelDecorationHeight =
res.getDimensionPixelSize(R.dimen.notification_panel_padding_top)
+ res.getDimensionPixelSize(R.dimen.notification_panel_header_height)
+ res.getDimensionPixelSize(R.dimen.close_handle_underlap)
+ getNinePatchPadding(res.getDrawable(R.drawable.notification_panel_bg)).bottom;
mNotificationPanelMinHeight =
notificationPanelDecorationHeight
+ res.getDimensionPixelSize(R.dimen.close_handle_underlap);
mCarrierLabelHeight = res.getDimensionPixelSize(R.dimen.carrier_label_height);
if (false) Slog.v(TAG, "updateResources");
}

View File

@ -237,6 +237,10 @@ public class NetworkController extends BroadcastReceiver {
mBatteryStats = BatteryStatsService.getService();
}
public boolean hasMobileDataFeature() {
return mHasMobileDataFeature;
}
public void addPhoneSignalIconView(ImageView v) {
mPhoneSignalIconViews.add(v);
}
@ -1049,6 +1053,9 @@ public class NetworkController extends BroadcastReceiver {
+ Integer.toHexString(combinedSignalIconId)
+ "/" + getResourceName(combinedSignalIconId)
+ " combinedActivityIconId=0x" + Integer.toHexString(combinedActivityIconId)
+ " mobileLabel=" + mobileLabel
+ " wifiLabel=" + wifiLabel
+ " combinedLabel=" + combinedLabel
+ " mAirplaneMode=" + mAirplaneMode
+ " mDataActivity=" + mDataActivity
+ " mPhoneSignalIconId=0x" + Integer.toHexString(mPhoneSignalIconId)
@ -1194,11 +1201,11 @@ public class NetworkController extends BroadcastReceiver {
N = mWifiLabelViews.size();
for (int i=0; i<N; i++) {
TextView v = mWifiLabelViews.get(i);
v.setText(wifiLabel);
if ("".equals(wifiLabel)) {
v.setVisibility(View.GONE);
} else {
v.setVisibility(View.VISIBLE);
v.setText(wifiLabel);
}
}
@ -1206,11 +1213,11 @@ public class NetworkController extends BroadcastReceiver {
N = mMobileLabelViews.size();
for (int i=0; i<N; i++) {
TextView v = mMobileLabelViews.get(i);
v.setText(mobileLabel);
if ("".equals(mobileLabel)) {
v.setVisibility(View.GONE);
} else {
v.setVisibility(View.VISIBLE);
v.setText(mobileLabel);
}
}
}

View File

@ -62,6 +62,8 @@ public class NotificationRowLayout
private SwipeHelper mSwipeHelper;
private OnSizeChangedListener mOnSizeChangedListener;
// Flag set during notification removal animation to avoid causing too much work until
// animation is done
boolean mRemoveViews = true;
@ -101,6 +103,10 @@ public class NotificationRowLayout
mSwipeHelper.setLongPressListener(listener);
}
public void setOnSizeChangedListener(OnSizeChangedListener l) {
mOnSizeChangedListener = l;
}
@Override
public void onWindowFocusChanged(boolean hasWindowFocus) {
super.onWindowFocusChanged(hasWindowFocus);
@ -247,4 +253,11 @@ public class NotificationRowLayout
c.restore();
}
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
if (mOnSizeChangedListener != null) {
mOnSizeChangedListener.onSizeChanged(this, w, h, oldw, oldh);
}
}
}

View File

@ -0,0 +1,23 @@
/*
* 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.
*/
package com.android.systemui.statusbar.policy;
import android.view.View;
public interface OnSizeChangedListener {
void onSizeChanged(View view, int w, int h, int oldw, int oldh);
}