Merge "Allow the Notification.Builder to carry around a Style to apply at build" into jb-dev

This commit is contained in:
Chris Wren
2012-05-03 07:45:43 -07:00
committed by Android (Google) Code Review
2 changed files with 108 additions and 24 deletions

View File

@@ -3748,23 +3748,24 @@ package android.app {
field public long when;
}
public static class Notification.BigPictureStyle {
public static class Notification.BigPictureStyle extends android.app.Notification.Style {
ctor public Notification.BigPictureStyle();
ctor public Notification.BigPictureStyle(android.app.Notification.Builder);
method public android.app.Notification.BigPictureStyle bigPicture(android.graphics.Bitmap);
method public android.app.Notification build();
}
public static class Notification.BigTextStyle {
public static class Notification.BigTextStyle extends android.app.Notification.Style {
ctor public Notification.BigTextStyle();
ctor public Notification.BigTextStyle(android.app.Notification.Builder);
method public android.app.Notification.BigTextStyle bigText(java.lang.CharSequence);
method public android.app.Notification build();
}
public static class Notification.Builder {
ctor public Notification.Builder(android.content.Context);
method public android.app.Notification.Builder addAction(int, java.lang.CharSequence, android.app.PendingIntent);
method public android.app.Notification.Builder addKind(java.lang.String);
method public android.app.Notification getNotification();
method public android.app.Notification build();
method public deprecated android.app.Notification getNotification();
method public android.app.Notification.Builder setAutoCancel(boolean);
method public android.app.Notification.Builder setContent(android.widget.RemoteViews);
method public android.app.Notification.Builder setContentInfo(java.lang.CharSequence);
@@ -3785,6 +3786,7 @@ package android.app {
method public android.app.Notification.Builder setSmallIcon(int, int);
method public android.app.Notification.Builder setSound(android.net.Uri);
method public android.app.Notification.Builder setSound(android.net.Uri, int);
method public android.app.Notification.Builder setStyle(android.app.Notification.Style);
method public android.app.Notification.Builder setSubText(java.lang.CharSequence);
method public android.app.Notification.Builder setTicker(java.lang.CharSequence);
method public android.app.Notification.Builder setTicker(java.lang.CharSequence, android.widget.RemoteViews);
@@ -3793,10 +3795,17 @@ package android.app {
method public android.app.Notification.Builder setWhen(long);
}
public static class Notification.InboxStyle {
public static class Notification.InboxStyle extends android.app.Notification.Style {
ctor public Notification.InboxStyle();
ctor public Notification.InboxStyle(android.app.Notification.Builder);
method public android.app.Notification.InboxStyle addLine(java.lang.CharSequence);
}
public static class Notification.Style {
ctor public Notification.Style();
method public android.app.Notification build();
method public void setBuilder(android.app.Notification.Builder);
field protected android.app.Notification.Builder mBuilder;
}
public class NotificationManager {

View File

@@ -888,7 +888,7 @@ public class Notification implements Parcelable
* .setContentText(subject)
* .setSmallIcon(R.drawable.new_mail)
* .setLargeIcon(aBitmap)
* .getNotification();
* .build();
* </pre>
*/
public static class Builder {
@@ -925,6 +925,7 @@ public class Notification implements Parcelable
private int mPriority;
private ArrayList<Action> mActions = new ArrayList<Action>(3);
private boolean mUseChronometer;
private Style mStyle;
/**
* Constructs a new Builder with the defaults:
@@ -1305,7 +1306,7 @@ public class Notification implements Parcelable
* Add metadata to this notification.
*
* A reference to the Bundle is held for the lifetime of this Builder, and the Bundle's
* current contents are copied into the Notification each time {@link #getNotification()} is
* current contents are copied into the Notification each time {@link #build()} is
* called.
*
* @see Notification#extras
@@ -1329,6 +1330,19 @@ public class Notification implements Parcelable
return this;
}
/**
* Add a rich notification style to be applied at build time.
*
* @param style Object responsible for modifying the notification style.
*/
public Builder setStyle(Style style) {
if (mStyle != style) {
mStyle = style;
mStyle.setBuilder(this);
}
return this;
}
private void setFlag(int mask, boolean value) {
if (value) {
mFlags |= mask;
@@ -1464,10 +1478,9 @@ public class Notification implements Parcelable
}
/**
* Combine all of the options that have been set and return a new {@link Notification}
* object.
* Apply the unstyled operations and return a new {@link Notification} object.
*/
public Notification getNotification() {
private Notification buildUnstyled() {
Notification n = new Notification();
n.when = mWhen;
n.icon = mSmallIcon;
@@ -1509,6 +1522,49 @@ public class Notification implements Parcelable
}
return n;
}
/**
* @deprecated Use {@link #build()} instead.
*/
@Deprecated
public Notification getNotification() {
return build();
}
/**
* Combine all of the options that have been set and return a new {@link Notification}
* object.
*/
public Notification build() {
if (mStyle != null) {
return mStyle.build();
} else {
return buildUnstyled();
}
}
}
/**
* An object that can apply a rich notification style to a {@link Notification.Builder}
* object.
*/
public static class Style {
protected Builder mBuilder;
public void setBuilder(Builder builder) {
if (mBuilder != builder) {
mBuilder = builder;
mBuilder.setStyle(this);
}
}
public Notification build() {
if (mBuilder == null) {
throw new IllegalArgumentException("Style requires a valid Builder object");
}
return mBuilder.buildUnstyled();
}
}
/**
@@ -1528,12 +1584,14 @@ public class Notification implements Parcelable
*
* @see Notification#bigContentView
*/
public static class BigPictureStyle {
private Builder mBuilder;
public static class BigPictureStyle extends Style {
private Bitmap mPicture;
public BigPictureStyle() {
}
public BigPictureStyle(Builder builder) {
mBuilder = builder;
setBuilder(builder);
}
public BigPictureStyle bigPicture(Bitmap b) {
@@ -1549,8 +1607,12 @@ public class Notification implements Parcelable
return contentView;
}
@Override
public Notification build() {
Notification wip = mBuilder.getNotification();
if (mBuilder == null) {
throw new IllegalArgumentException("Style requires a valid Builder object");
}
Notification wip = mBuilder.buildUnstyled();
wip.bigContentView = makeBigContentView();
return wip;
}
@@ -1573,12 +1635,14 @@ public class Notification implements Parcelable
*
* @see Notification#bigContentView
*/
public static class BigTextStyle {
private Builder mBuilder;
public static class BigTextStyle extends Style {
private CharSequence mBigText;
public BigTextStyle() {
}
public BigTextStyle(Builder builder) {
mBuilder = builder;
setBuilder(builder);
}
public BigTextStyle bigText(CharSequence cs) {
@@ -1596,8 +1660,13 @@ public class Notification implements Parcelable
return contentView;
}
@Override
public Notification build() {
Notification wip = mBuilder.getNotification();
if (mBuilder == null) {
throw new IllegalArgumentException("Style requires a valid Builder object");
}
mBuilder.mSubText = null;
Notification wip = mBuilder.buildUnstyled();
wip.bigContentView = makeBigContentView();
return wip;
}
@@ -1608,7 +1677,7 @@ public class Notification implements Parcelable
*
* This class is a "rebuilder": It consumes a Builder object and modifies its behavior, like so:
* <pre class="prettyprint">
* Notification noti = new Notification.DigestStyle(
* Notification noti = new Notification.InboxStyle(
* new Notification.Builder()
* .setContentTitle(&quot;New mail from &quot; + sender.toString())
* .setContentText(subject)
@@ -1621,12 +1690,14 @@ public class Notification implements Parcelable
*
* @see Notification#bigContentView
*/
public static class InboxStyle {
private Builder mBuilder;
public static class InboxStyle extends Style {
private ArrayList<CharSequence> mTexts = new ArrayList<CharSequence>(5);
public InboxStyle() {
}
public InboxStyle(Builder builder) {
mBuilder = builder;
setBuilder(builder);
}
public InboxStyle addLine(CharSequence cs) {
@@ -1652,8 +1723,12 @@ public class Notification implements Parcelable
return contentView;
}
@Override
public Notification build() {
Notification wip = mBuilder.getNotification();
if (mBuilder == null) {
throw new IllegalArgumentException("Style requires a valid Builder object");
}
Notification wip = mBuilder.buildUnstyled();
wip.bigContentView = makeBigContentView();
return wip;
}