Loading packages/SystemUI/res/drawable-hdpi/ic_notification_overlay.9.png −79 B (935 B) Loading image diff... packages/SystemUI/res/values/colors.xml +1 −0 Original line number Diff line number Diff line Loading @@ -19,4 +19,5 @@ <resources> <drawable name="shade_bgcolor">#ff282828</drawable> <drawable name="notification_header_text_color">#ff969696</drawable> <drawable name="notification_number_text_color">#ffffffff</drawable> </resources> packages/SystemUI/src/com/android/systemui/statusbar/IconMerger.java +15 −29 Original line number Diff line number Diff line Loading @@ -23,28 +23,34 @@ import android.util.Slog; import android.view.View; import android.widget.LinearLayout; import com.android.internal.statusbar.StatusBarIcon; import com.android.systemui.R; public class IconMerger extends LinearLayout { private static final String TAG = "IconMerger"; private int mIconSize; private StatusBarIconView mMoreView; private StatusBarIcon mMoreIcon = new StatusBarIcon(null, R.drawable.stat_notify_more, 0); public IconMerger(Context context, AttributeSet attrs) { super(context, attrs); } public void addMoreView(StatusBarIconView v, LinearLayout.LayoutParams lp) { super.addView(v, lp); mMoreView = v; mIconSize = context.getResources().getDimensionPixelSize( com.android.internal.R.dimen.status_bar_icon_size); mMoreView = new StatusBarIconView(context, "more"); mMoreView.set(mMoreIcon); addView(mMoreView, 0, new LinearLayout.LayoutParams(mIconSize, mIconSize)); } public void addView(StatusBarIconView v, int index, LinearLayout.LayoutParams lp) { public void addView(StatusBarIconView v, int index) { if (index == 0) { throw new RuntimeException("Attempt to put view before the more view: " + v); } super.addView(v, index, lp); addView(v, index, new LinearLayout.LayoutParams(mIconSize, mIconSize)); } @Override Loading Loading @@ -128,27 +134,7 @@ public class IconMerger extends LinearLayout { } } // BUG: Updating the text during the layout here doesn't seem to cause // the view to be redrawn fully. The text view gets resized correctly, but the // text contents aren't drawn properly. To work around this, we post a message // and provide the value later. We're the only one changing this value show it // should be ordered correctly. if (false) { // TODO this.moreIcon.update(number); } else { mBugWorkaroundNumber = number; mBugWorkaroundHandler.post(mBugWorkaroundRunnable); } } private int mBugWorkaroundNumber; private Handler mBugWorkaroundHandler = new Handler(); private Runnable mBugWorkaroundRunnable = new Runnable() { public void run() { /* TODO IconMerger.this.moreIcon.update(mBugWorkaroundNumber); IconMerger.this.moreIcon.view.invalidate(); */ mMoreIcon.number = number; mMoreView.set(mMoreIcon); } }; } packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +69 −1 Original line number Diff line number Diff line Loading @@ -21,22 +21,37 @@ import android.content.pm.PackageManager; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.util.Slog; import android.util.Log; import android.view.View; import android.view.ViewDebug; import android.widget.FrameLayout; import com.android.internal.statusbar.StatusBarIcon; import com.android.systemui.R; public class StatusBarIconView extends AnimatedImageView { private static final String TAG = "StatusBarIconView"; private StatusBarIcon mIcon; @ViewDebug.ExportedProperty private String mSlot; private Drawable mNumberBackground; private Paint mNumberPain; private int mNumberX; private int mNumberY; private String mNumberText; public StatusBarIconView(Context context, String slot) { super(context); final Resources res = context.getResources(); mSlot = slot; mNumberPain = new Paint(); mNumberPain.setTextAlign(Paint.Align.CENTER); mNumberPain.setColor(res.getColor(R.drawable.notification_number_text_color)); mNumberPain.setAntiAlias(true); } private static boolean streq(String a, String b) { Loading @@ -63,6 +78,9 @@ public class StatusBarIconView extends AnimatedImageView { && mIcon.iconLevel == icon.iconLevel; final boolean visibilityEquals = mIcon != null && mIcon.visible == icon.visible; final boolean numberEquals = mIcon != null && mIcon.number == icon.number; mIcon = icon.clone(); if (!iconEquals) { Drawable drawable = getIcon(icon); if (drawable == null) { Loading @@ -74,10 +92,22 @@ public class StatusBarIconView extends AnimatedImageView { if (!levelEquals) { setImageLevel(icon.iconLevel); } if (!numberEquals) { if (icon.number > 0) { if (mNumberBackground == null) { mNumberBackground = getContext().getResources().getDrawable( R.drawable.ic_notification_overlay); } placeNumber(); } else { mNumberBackground = null; mNumberText = null; } invalidate(); } if (!visibilityEquals) { setVisibility(icon.visible ? VISIBLE : GONE); } mIcon = icon.clone(); return true; } Loading Loading @@ -126,9 +156,47 @@ public class StatusBarIconView extends AnimatedImageView { return mIcon; } protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); if (mNumberBackground != null) { placeNumber(); } } protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (mNumberBackground != null) { mNumberBackground.draw(canvas); canvas.drawText(mNumberText, mNumberX, mNumberY, mNumberPain); } } protected void debug(int depth) { super.debug(depth); Log.d("View", debugIndent(depth) + "slot=" + mSlot); Log.d("View", debugIndent(depth) + "icon=" + mIcon); } void placeNumber() { final String str = mNumberText = Integer.toString(mIcon.number); final int w = getWidth(); final int h = getHeight(); final Rect r = new Rect(); mNumberPain.getTextBounds(str, 0, str.length(), r); final int tw = r.right - r.left; final int th = r.bottom - r.top; mNumberBackground.getPadding(r); int dw = r.left + tw + r.right; if (dw < mNumberBackground.getMinimumWidth()) { dw = mNumberBackground.getMinimumWidth(); } mNumberX = w-r.right-((dw-r.right-r.left)/2); int dh = r.top + th + r.bottom; if (dh < mNumberBackground.getMinimumWidth()) { dh = mNumberBackground.getMinimumWidth(); } mNumberY = h-r.bottom-((dh-r.top-th-r.bottom)/2); mNumberBackground.setBounds(w-dw, h-dh, w, h); } } packages/SystemUI/src/com/android/systemui/statusbar/StatusBarService.java +1 −8 Original line number Diff line number Diff line Loading @@ -309,12 +309,6 @@ public class StatusBarService extends Service implements CommandQueue.Callbacks mEdgeBorder = res.getDimensionPixelSize(R.dimen.status_bar_edge_ignore); // the more notifications icon StatusBarIconView moreView = new StatusBarIconView(this, "more"); moreView.set(new StatusBarIcon(null, R.drawable.stat_notify_more, 0)); mNotificationIcons.addMoreView(moreView, new LinearLayout.LayoutParams(mIconSize, mIconSize)); // set the inital view visibility setAreThereNotifications(); mDateView.setVisibility(View.INVISIBLE); Loading Loading @@ -580,8 +574,7 @@ public class StatusBarService extends Service implements CommandQueue.Callbacks parent.addView(row, viewIndex); // Add the icon. final int iconIndex = chooseIconIndex(isOngoing, viewIndex); mNotificationIcons.addView(iconView, iconIndex, new LinearLayout.LayoutParams(mIconSize, mIconSize)); mNotificationIcons.addView(iconView, iconIndex); return iconView; } Loading Loading
packages/SystemUI/res/drawable-hdpi/ic_notification_overlay.9.png −79 B (935 B) Loading image diff...
packages/SystemUI/res/values/colors.xml +1 −0 Original line number Diff line number Diff line Loading @@ -19,4 +19,5 @@ <resources> <drawable name="shade_bgcolor">#ff282828</drawable> <drawable name="notification_header_text_color">#ff969696</drawable> <drawable name="notification_number_text_color">#ffffffff</drawable> </resources>
packages/SystemUI/src/com/android/systemui/statusbar/IconMerger.java +15 −29 Original line number Diff line number Diff line Loading @@ -23,28 +23,34 @@ import android.util.Slog; import android.view.View; import android.widget.LinearLayout; import com.android.internal.statusbar.StatusBarIcon; import com.android.systemui.R; public class IconMerger extends LinearLayout { private static final String TAG = "IconMerger"; private int mIconSize; private StatusBarIconView mMoreView; private StatusBarIcon mMoreIcon = new StatusBarIcon(null, R.drawable.stat_notify_more, 0); public IconMerger(Context context, AttributeSet attrs) { super(context, attrs); } public void addMoreView(StatusBarIconView v, LinearLayout.LayoutParams lp) { super.addView(v, lp); mMoreView = v; mIconSize = context.getResources().getDimensionPixelSize( com.android.internal.R.dimen.status_bar_icon_size); mMoreView = new StatusBarIconView(context, "more"); mMoreView.set(mMoreIcon); addView(mMoreView, 0, new LinearLayout.LayoutParams(mIconSize, mIconSize)); } public void addView(StatusBarIconView v, int index, LinearLayout.LayoutParams lp) { public void addView(StatusBarIconView v, int index) { if (index == 0) { throw new RuntimeException("Attempt to put view before the more view: " + v); } super.addView(v, index, lp); addView(v, index, new LinearLayout.LayoutParams(mIconSize, mIconSize)); } @Override Loading Loading @@ -128,27 +134,7 @@ public class IconMerger extends LinearLayout { } } // BUG: Updating the text during the layout here doesn't seem to cause // the view to be redrawn fully. The text view gets resized correctly, but the // text contents aren't drawn properly. To work around this, we post a message // and provide the value later. We're the only one changing this value show it // should be ordered correctly. if (false) { // TODO this.moreIcon.update(number); } else { mBugWorkaroundNumber = number; mBugWorkaroundHandler.post(mBugWorkaroundRunnable); } } private int mBugWorkaroundNumber; private Handler mBugWorkaroundHandler = new Handler(); private Runnable mBugWorkaroundRunnable = new Runnable() { public void run() { /* TODO IconMerger.this.moreIcon.update(mBugWorkaroundNumber); IconMerger.this.moreIcon.view.invalidate(); */ mMoreIcon.number = number; mMoreView.set(mMoreIcon); } }; }
packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +69 −1 Original line number Diff line number Diff line Loading @@ -21,22 +21,37 @@ import android.content.pm.PackageManager; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.util.Slog; import android.util.Log; import android.view.View; import android.view.ViewDebug; import android.widget.FrameLayout; import com.android.internal.statusbar.StatusBarIcon; import com.android.systemui.R; public class StatusBarIconView extends AnimatedImageView { private static final String TAG = "StatusBarIconView"; private StatusBarIcon mIcon; @ViewDebug.ExportedProperty private String mSlot; private Drawable mNumberBackground; private Paint mNumberPain; private int mNumberX; private int mNumberY; private String mNumberText; public StatusBarIconView(Context context, String slot) { super(context); final Resources res = context.getResources(); mSlot = slot; mNumberPain = new Paint(); mNumberPain.setTextAlign(Paint.Align.CENTER); mNumberPain.setColor(res.getColor(R.drawable.notification_number_text_color)); mNumberPain.setAntiAlias(true); } private static boolean streq(String a, String b) { Loading @@ -63,6 +78,9 @@ public class StatusBarIconView extends AnimatedImageView { && mIcon.iconLevel == icon.iconLevel; final boolean visibilityEquals = mIcon != null && mIcon.visible == icon.visible; final boolean numberEquals = mIcon != null && mIcon.number == icon.number; mIcon = icon.clone(); if (!iconEquals) { Drawable drawable = getIcon(icon); if (drawable == null) { Loading @@ -74,10 +92,22 @@ public class StatusBarIconView extends AnimatedImageView { if (!levelEquals) { setImageLevel(icon.iconLevel); } if (!numberEquals) { if (icon.number > 0) { if (mNumberBackground == null) { mNumberBackground = getContext().getResources().getDrawable( R.drawable.ic_notification_overlay); } placeNumber(); } else { mNumberBackground = null; mNumberText = null; } invalidate(); } if (!visibilityEquals) { setVisibility(icon.visible ? VISIBLE : GONE); } mIcon = icon.clone(); return true; } Loading Loading @@ -126,9 +156,47 @@ public class StatusBarIconView extends AnimatedImageView { return mIcon; } protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); if (mNumberBackground != null) { placeNumber(); } } protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (mNumberBackground != null) { mNumberBackground.draw(canvas); canvas.drawText(mNumberText, mNumberX, mNumberY, mNumberPain); } } protected void debug(int depth) { super.debug(depth); Log.d("View", debugIndent(depth) + "slot=" + mSlot); Log.d("View", debugIndent(depth) + "icon=" + mIcon); } void placeNumber() { final String str = mNumberText = Integer.toString(mIcon.number); final int w = getWidth(); final int h = getHeight(); final Rect r = new Rect(); mNumberPain.getTextBounds(str, 0, str.length(), r); final int tw = r.right - r.left; final int th = r.bottom - r.top; mNumberBackground.getPadding(r); int dw = r.left + tw + r.right; if (dw < mNumberBackground.getMinimumWidth()) { dw = mNumberBackground.getMinimumWidth(); } mNumberX = w-r.right-((dw-r.right-r.left)/2); int dh = r.top + th + r.bottom; if (dh < mNumberBackground.getMinimumWidth()) { dh = mNumberBackground.getMinimumWidth(); } mNumberY = h-r.bottom-((dh-r.top-th-r.bottom)/2); mNumberBackground.setBounds(w-dw, h-dh, w, h); } }
packages/SystemUI/src/com/android/systemui/statusbar/StatusBarService.java +1 −8 Original line number Diff line number Diff line Loading @@ -309,12 +309,6 @@ public class StatusBarService extends Service implements CommandQueue.Callbacks mEdgeBorder = res.getDimensionPixelSize(R.dimen.status_bar_edge_ignore); // the more notifications icon StatusBarIconView moreView = new StatusBarIconView(this, "more"); moreView.set(new StatusBarIcon(null, R.drawable.stat_notify_more, 0)); mNotificationIcons.addMoreView(moreView, new LinearLayout.LayoutParams(mIconSize, mIconSize)); // set the inital view visibility setAreThereNotifications(); mDateView.setVisibility(View.INVISIBLE); Loading Loading @@ -580,8 +574,7 @@ public class StatusBarService extends Service implements CommandQueue.Callbacks parent.addView(row, viewIndex); // Add the icon. final int iconIndex = chooseIconIndex(isOngoing, viewIndex); mNotificationIcons.addView(iconView, iconIndex, new LinearLayout.LayoutParams(mIconSize, mIconSize)); mNotificationIcons.addView(iconView, iconIndex); return iconView; } Loading