summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/current.txt5
-rw-r--r--core/java/android/app/Notification.java11
-rw-r--r--core/java/android/content/Intent.java8
-rw-r--r--media/java/android/media/tv/TvView.java36
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java2
-rw-r--r--packages/SystemUI/res/layout/status_bar.xml48
-rw-r--r--packages/SystemUI/res/layout/status_bar_ticker.xml62
-rw-r--r--packages/SystemUI/res/values/config.xml5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java41
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/TickerView.java2
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) {