diff options
| -rw-r--r-- | api/current.txt | 5 | ||||
| -rw-r--r-- | core/java/android/app/Notification.java | 11 | ||||
| -rw-r--r-- | core/java/android/content/Intent.java | 8 | ||||
| -rw-r--r-- | media/java/android/media/tv/TvView.java | 36 | ||||
| -rw-r--r-- | packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java | 2 | ||||
| -rw-r--r-- | packages/SystemUI/res/layout/status_bar.xml | 48 | ||||
| -rw-r--r-- | packages/SystemUI/res/layout/status_bar_ticker.xml | 62 | ||||
| -rw-r--r-- | packages/SystemUI/res/values/config.xml | 5 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java | 41 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/phone/TickerView.java | 2 |
10 files changed, 152 insertions, 68 deletions
diff --git a/api/current.txt b/api/current.txt index c19cbd00b946..e4f2b9730d6f 100644 --- a/api/current.txt +++ b/api/current.txt @@ -4483,6 +4483,7 @@ package android.app { field public static final int FLAG_ONGOING_EVENT = 2; // 0x2 field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8 field public static final int FLAG_SHOW_LIGHTS = 1; // 0x1 + field public static final java.lang.String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES"; field public static final int PRIORITY_DEFAULT = 0; // 0x0 field public static final int PRIORITY_HIGH = 1; // 0x1 field public static final int PRIORITY_LOW = -1; // 0xffffffff @@ -7461,7 +7462,6 @@ package android.content { field public static final java.lang.String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER"; field public static final java.lang.String CATEGORY_LE_DESK_DOCK = "android.intent.category.LE_DESK_DOCK"; field public static final java.lang.String CATEGORY_MONKEY = "android.intent.category.MONKEY"; - field public static final java.lang.String CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES"; field public static final java.lang.String CATEGORY_OPENABLE = "android.intent.category.OPENABLE"; field public static final java.lang.String CATEGORY_PREFERENCE = "android.intent.category.PREFERENCE"; field public static final java.lang.String CATEGORY_SAMPLE_CODE = "android.intent.category.SAMPLE_CODE"; @@ -15953,11 +15953,12 @@ package android.media.tv { method public void setOverlayViewEnabled(boolean); } - public class TvView extends android.view.SurfaceView { + public class TvView extends android.view.ViewGroup { ctor public TvView(android.content.Context); ctor public TvView(android.content.Context, android.util.AttributeSet); ctor public TvView(android.content.Context, android.util.AttributeSet, int); method public boolean dispatchUnhandledInputEvent(android.view.InputEvent); + method protected void onLayout(boolean, int, int, int, int); method public boolean onUnhandledInputEvent(android.view.InputEvent); method public void reset(); method public void setOnUnhandledInputEventListener(android.media.tv.TvView.OnUnhandledInputEventListener); diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 72b5cd90d5c5..a1cdf59ec2fb 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -17,6 +17,8 @@ package android.app; import android.annotation.IntDef; +import android.annotation.SdkConstant; +import android.annotation.SdkConstant.SdkConstantType; import android.content.Context; import android.content.Intent; import android.content.res.Resources; @@ -74,6 +76,15 @@ public class Notification implements Parcelable private static final String TAG = "Notification"; /** + * An activity that provides a user interface for adjusting notification preferences for its + * containing application. Optional but recommended for apps that post + * {@link android.app.Notification Notifications}. + */ + @SdkConstant(SdkConstantType.INTENT_CATEGORY) + public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES + = "android.intent.category.NOTIFICATION_PREFERENCES"; + + /** * Use all default values (where applicable). */ public static final int DEFAULT_ALL = ~0; diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index bd07470ee583..fad3851f55b8 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -2976,14 +2976,6 @@ public class Intent implements Parcelable, Cloneable { @SdkConstant(SdkConstantType.INTENT_CATEGORY) public static final String CATEGORY_CAR_MODE = "android.intent.category.CAR_MODE"; - /** - * An activity that provides a user interface for adjusting notification preferences for its - * containing application. Optional but recommended for apps that post - * {@link android.app.Notification Notifications}. - */ - @SdkConstant(SdkConstantType.INTENT_CATEGORY) - public static final String CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES"; - // --------------------------------------------------------------------- // --------------------------------------------------------------------- // Application launch intent categories (see addCategory()). diff --git a/media/java/android/media/tv/TvView.java b/media/java/android/media/tv/TvView.java index 245332507ac6..2831d9e45d6b 100644 --- a/media/java/android/media/tv/TvView.java +++ b/media/java/android/media/tv/TvView.java @@ -33,12 +33,13 @@ import android.view.MotionEvent; import android.view.Surface; import android.view.SurfaceHolder; import android.view.SurfaceView; +import android.view.ViewGroup; import android.view.ViewRootImpl; /** * View playing TV */ -public class TvView extends SurfaceView { +public class TvView extends ViewGroup { private static final String TAG = "TvView"; // STOPSHIP: Turn debugging off. private static final boolean DEBUG = true; @@ -57,6 +58,7 @@ public class TvView extends SurfaceView { private final Handler mHandler = new Handler(); private TvInputManager.Session mSession; + private final SurfaceView mSurfaceView; private Surface mSurface; private boolean mOverlayViewCreated; private Rect mOverlayViewFrame; @@ -124,7 +126,14 @@ public class TvView extends SurfaceView { public TvView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); - getHolder().addCallback(mSurfaceHolderCallback); + mSurfaceView = new SurfaceView(context, attrs, defStyleAttr) { + @Override + protected void updateWindow(boolean force, boolean redrawNeeded) { + super.updateWindow(force, redrawNeeded); + relayoutSessionOverlayView(); + }}; + mSurfaceView.getHolder().addCallback(mSurfaceHolderCallback); + addView(mSurfaceView); mTvInputManager = (TvInputManager) getContext().getSystemService(Context.TV_INPUT_SERVICE); } @@ -310,11 +319,26 @@ public class TvView extends SurfaceView { super.onDetachedFromWindow(); } - /** @hide */ @Override - protected void updateWindow(boolean force, boolean redrawNeeded) { - super.updateWindow(force, redrawNeeded); - relayoutSessionOverlayView(); + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + mSurfaceView.layout(0, 0, right - left, bottom - top); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + mSurfaceView.measure(widthMeasureSpec, heightMeasureSpec); + int width = mSurfaceView.getMeasuredWidth(); + int height = mSurfaceView.getMeasuredHeight(); + int childState = mSurfaceView.getMeasuredState(); + setMeasuredDimension(resolveSizeAndState(width, widthMeasureSpec, childState), + resolveSizeAndState(height, heightMeasureSpec, + childState << MEASURED_HEIGHT_STATE_SHIFT)); + } + + @Override + public void setVisibility(int visibility) { + super.setVisibility(visibility); + mSurfaceView.setVisibility(visibility); } private void release() { diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java index 286921ecff33..81a1b943a2b2 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java @@ -2448,7 +2448,7 @@ public class DatabaseHelper extends SQLiteOpenHelper { } private String getDefaultDeviceName() { - return mContext.getResources().getString(R.string.def_device_name, Build.BRAND, + return mContext.getResources().getString(R.string.def_device_name, Build.MANUFACTURER, Build.MODEL); } } diff --git a/packages/SystemUI/res/layout/status_bar.xml b/packages/SystemUI/res/layout/status_bar.xml index eaa255863395..aa62daa22a19 100644 --- a/packages/SystemUI/res/layout/status_bar.xml +++ b/packages/SystemUI/res/layout/status_bar.xml @@ -111,47 +111,13 @@ /> </LinearLayout> </LinearLayout> - - <LinearLayout android:id="@+id/ticker" + + <ViewStub + android:id="@+id/ticker_stub" + android:inflatedId="@+id/ticker" + android:layout="@layout/status_bar_ticker" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingStart="6dip" - android:animationCache="false" - android:orientation="horizontal" > - <ImageSwitcher android:id="@+id/tickerIcon" - android:layout_width="@dimen/status_bar_icon_size" - android:layout_height="@dimen/status_bar_icon_size" - android:layout_marginEnd="4dip" - > - <com.android.systemui.statusbar.AnimatedImageView - android:layout_width="@dimen/status_bar_icon_size" - android:layout_height="@dimen/status_bar_icon_size" - android:scaleType="center" - /> - <com.android.systemui.statusbar.AnimatedImageView - android:layout_width="@dimen/status_bar_icon_size" - android:layout_height="@dimen/status_bar_icon_size" - android:scaleType="center" - /> - </ImageSwitcher> - <com.android.systemui.statusbar.phone.TickerView android:id="@+id/tickerText" - android:layout_width="0dip" - android:layout_weight="1" - android:layout_height="wrap_content" - android:paddingTop="2dip" - android:paddingEnd="10dip"> - <TextView - android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:singleLine="true" - /> - <TextView - android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:singleLine="true" - /> - </com.android.systemui.statusbar.phone.TickerView> - </LinearLayout> + /> + </com.android.systemui.statusbar.phone.PhoneStatusBarView> diff --git a/packages/SystemUI/res/layout/status_bar_ticker.xml b/packages/SystemUI/res/layout/status_bar_ticker.xml new file mode 100644 index 000000000000..dd9b3efe5f43 --- /dev/null +++ b/packages/SystemUI/res/layout/status_bar_ticker.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + - Copyright 2014, 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. + --> +<LinearLayout android:id="@+id/ticker" + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:paddingStart="6dip" + android:animationCache="false" + android:orientation="horizontal"> + + <ImageSwitcher android:id="@+id/tickerIcon" + android:layout_width="@dimen/status_bar_icon_size" + android:layout_height="@dimen/status_bar_icon_size" + android:layout_marginEnd="4dip" + > + <com.android.systemui.statusbar.AnimatedImageView + android:layout_width="@dimen/status_bar_icon_size" + android:layout_height="@dimen/status_bar_icon_size" + android:scaleType="center" + /> + <com.android.systemui.statusbar.AnimatedImageView + android:layout_width="@dimen/status_bar_icon_size" + android:layout_height="@dimen/status_bar_icon_size" + android:scaleType="center" + /> + </ImageSwitcher> + <com.android.systemui.statusbar.phone.TickerView android:id="@+id/tickerText" + android:layout_width="0dip" + android:layout_weight="1" + android:layout_height="wrap_content" + android:paddingTop="2dip" + android:paddingEnd="10dip"> + <TextView + android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:singleLine="true" + /> + <TextView + android:textAppearance="@style/TextAppearance.StatusBar.PhoneTicker" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:singleLine="true" + /> + </com.android.systemui.statusbar.phone.TickerView> +</LinearLayout> + diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index 79a1df41d2a8..1ef5bcd128bd 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -141,5 +141,10 @@ <!-- Wait on the touch feedback this long before performing an action. --> <integer name="feedback_start_delay">300</integer> + + <!-- Set to true to enable the classic notification ticker that scrolls + Notification.tickerText across the status bar for what seems like an + eternity. --> + <bool name="enable_ticker">false</bool> </resources> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index ac9866cadfaa..4749b9ce3a97 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -81,6 +81,7 @@ import android.view.ViewAnimationUtils; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.ViewPropertyAnimator; +import android.view.ViewStub; import android.view.ViewTreeObserver; import android.view.WindowManager; import android.view.animation.AccelerateInterpolator; @@ -289,6 +290,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, int mTrackingPosition; // the position of the top of the tracking view. // ticker + private boolean mTickerEnabled; private Ticker mTicker; private View mTickerView; private boolean mTicking; @@ -644,7 +646,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mMoreIcon = mStatusBarView.findViewById(R.id.moreIcon); mNotificationIcons.setOverflowIndicator(mMoreIcon); mStatusBarContents = (LinearLayout)mStatusBarView.findViewById(R.id.status_bar_contents); - mTickerView = mStatusBarView.findViewById(R.id.ticker); mStackScroller = (NotificationStackScrollLayout) mStatusBarWindow.findViewById( R.id.notification_stack_scroller); @@ -684,10 +685,17 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mDateTimeView.setEnabled(true); } - mTicker = new MyTicker(context, mStatusBarView); + mTickerEnabled = res.getBoolean(R.bool.enable_ticker); + if (mTickerEnabled) { + final ViewStub tickerStub = (ViewStub) mStatusBarView.findViewById(R.id.ticker_stub); + if (tickerStub != null) { + mTickerView = tickerStub.inflate(); + mTicker = new MyTicker(context, mStatusBarView); - TickerView tickerView = (TickerView)mStatusBarView.findViewById(R.id.tickerText); - tickerView.mTicker = mTicker; + TickerView tickerView = (TickerView) mStatusBarView.findViewById(R.id.tickerText); + tickerView.mTicker = mTicker; + } + } mEdgeBorder = res.getDimensionPixelSize(R.dimen.status_bar_edge_ignore); @@ -1145,7 +1153,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, if (old != null) { // Cancel the ticker if it's still running - mTicker.removeEntry(old); + if (mTickerEnabled) { + mTicker.removeEntry(old); + } // Recalculate the position of the sliding windows and the titles. updateExpandedViewPos(EXPANDED_LEAVE_ALONE); @@ -2118,6 +2128,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, @Override protected void tick(StatusBarNotification n, boolean firstTime) { + if (!mTickerEnabled) return; + // no ticking in lights-out mode if (!areLightsOn()) return; @@ -2134,7 +2146,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, if (n.getNotification().tickerText != null && mStatusBarWindow != null && mStatusBarWindow.getWindowToken() != null) { if (0 == (mDisabled & (StatusBarManager.DISABLE_NOTIFICATION_ICONS - | StatusBarManager.DISABLE_NOTIFICATION_TICKER))) { + | StatusBarManager.DISABLE_NOTIFICATION_TICKER))) { mTicker.addEntry(n); } } @@ -2143,10 +2155,14 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, private class MyTicker extends Ticker { MyTicker(Context context, View sb) { super(context, sb); + if (!mTickerEnabled) { + Log.w(TAG, "MyTicker instantiated with mTickerEnabled=false", new Throwable()); + } } @Override public void tickerStarting() { + if (!mTickerEnabled) return; mTicking = true; mStatusBarContents.setVisibility(View.GONE); mTickerView.setVisibility(View.VISIBLE); @@ -2156,6 +2172,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, @Override public void tickerDone() { + if (!mTickerEnabled) return; mStatusBarContents.setVisibility(View.VISIBLE); mTickerView.setVisibility(View.GONE); mStatusBarContents.startAnimation(loadAnim(com.android.internal.R.anim.push_down_in, null)); @@ -2164,6 +2181,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } public void tickerHalting() { + if (!mTickerEnabled) return; if (mStatusBarContents.getVisibility() != View.VISIBLE) { mStatusBarContents.setVisibility(View.VISIBLE); mStatusBarContents @@ -2202,11 +2220,14 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, pw.println("Current Status Bar state:"); pw.println(" mExpandedVisible=" + mExpandedVisible + ", mTrackingPosition=" + mTrackingPosition); - pw.println(" mTicking=" + mTicking); + pw.println(" mTickerEnabled=" + mTickerEnabled); + if (mTickerEnabled) { + pw.println(" mTicking=" + mTicking); + pw.println(" mTickerView: " + viewInfo(mTickerView)); + } pw.println(" mTracking=" + mTracking); pw.println(" mDisplayMetrics=" + mDisplayMetrics); pw.println(" mStackScroller: " + viewInfo(mStackScroller)); - pw.println(" mTickerView: " + viewInfo(mTickerView)); pw.println(" mStackScroller: " + viewInfo(mStackScroller) + " scroll " + mStackScroller.getScrollX() + "," + mStackScroller.getScrollY()); @@ -2676,7 +2697,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, @Override protected void haltTicker() { - mTicker.halt(); + if (mTickerEnabled) { + mTicker.halt(); + } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/TickerView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/TickerView.java index 8aa3837ea2ad..bf1375134fff 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/TickerView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/TickerView.java @@ -32,7 +32,7 @@ public class TickerView extends TextSwitcher @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); - mTicker.reflowText(); + if (mTicker != null) mTicker.reflowText(); } public void setTicker(Ticker t) { |