am b386e77e: Merge "SysUI: Status bar ImageViews" into mnc-dev
* commit 'b386e77eaadf76fe59051bd27c3013427828034b': SysUI: Status bar ImageViews
This commit is contained in:
@@ -19,22 +19,25 @@
|
||||
-->
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:systemui="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/mobile_combo"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
>
|
||||
<com.android.systemui.statusbar.AlphaOptimizedImageView
|
||||
<com.android.systemui.statusbar.AnimatedImageView
|
||||
android:theme="@style/DualToneLightTheme"
|
||||
android:id="@+id/mobile_signal"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
systemui:hasOverlappingRendering="false"
|
||||
/>
|
||||
<com.android.systemui.statusbar.AlphaOptimizedImageView
|
||||
<com.android.systemui.statusbar.AnimatedImageView
|
||||
android:theme="@style/DualToneDarkTheme"
|
||||
android:id="@+id/mobile_signal_dark"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:alpha="0.0"
|
||||
systemui:hasOverlappingRendering="false"
|
||||
/>
|
||||
<ImageView
|
||||
android:id="@+id/mobile_type"
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
<!-- extends LinearLayout -->
|
||||
<com.android.systemui.statusbar.SignalClusterView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:systemui="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
@@ -43,6 +44,7 @@
|
||||
android:id="@+id/ethernet"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
systemui:hasOverlappingRendering="false"
|
||||
/>
|
||||
<com.android.systemui.statusbar.AlphaOptimizedImageView
|
||||
android:theme="@style/DualToneDarkTheme"
|
||||
@@ -50,6 +52,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:alpha="0.0"
|
||||
systemui:hasOverlappingRendering="false"
|
||||
/>
|
||||
</FrameLayout>
|
||||
<FrameLayout
|
||||
@@ -62,6 +65,7 @@
|
||||
android:id="@+id/wifi_signal"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
systemui:hasOverlappingRendering="false"
|
||||
/>
|
||||
<com.android.systemui.statusbar.AlphaOptimizedImageView
|
||||
android:theme="@style/DualToneDarkTheme"
|
||||
@@ -69,6 +73,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:alpha="0.0"
|
||||
systemui:hasOverlappingRendering="false"
|
||||
/>
|
||||
</FrameLayout>
|
||||
<View
|
||||
@@ -94,6 +99,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:src="@drawable/stat_sys_no_sims"
|
||||
systemui:hasOverlappingRendering="false"
|
||||
/>
|
||||
<com.android.systemui.statusbar.AlphaOptimizedImageView
|
||||
android:theme="@style/DualToneDarkTheme"
|
||||
@@ -102,6 +108,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:src="@drawable/stat_sys_no_sims"
|
||||
android:alpha="0.0"
|
||||
systemui:hasOverlappingRendering="false"
|
||||
/>
|
||||
</FrameLayout>
|
||||
<View
|
||||
|
||||
@@ -162,6 +162,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
systemui:hasOverlappingRendering="false"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
|
||||
@@ -86,5 +86,9 @@
|
||||
<declare-styleable name="StatusBarWindowView_Layout">
|
||||
<attr name="ignoreRightInset" format="boolean" />
|
||||
</declare-styleable>
|
||||
|
||||
<declare-styleable name="AlphaOptimizedImageView">
|
||||
<attr name="hasOverlappingRendering" format="boolean" />
|
||||
</declare-styleable>
|
||||
</resources>
|
||||
|
||||
|
||||
@@ -17,34 +17,49 @@
|
||||
package com.android.systemui.statusbar;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.util.AttributeSet;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.android.systemui.R;
|
||||
|
||||
/**
|
||||
* An ImageView which does not have overlapping rendering commands and therefore does not need a
|
||||
* layer when alpha is changed.
|
||||
* An ImageView which supports an attribute specifying whether it has overlapping rendering
|
||||
* commands and therefore does not need a layer when alpha is changed.
|
||||
*/
|
||||
public class AlphaOptimizedImageView extends ImageView
|
||||
{
|
||||
public class AlphaOptimizedImageView extends ImageView {
|
||||
private final boolean mHasOverlappingRendering;
|
||||
|
||||
public AlphaOptimizedImageView(Context context) {
|
||||
super(context);
|
||||
this(context, null /* attrs */);
|
||||
}
|
||||
|
||||
public AlphaOptimizedImageView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
this(context, attrs, 0 /* defStyleAttr */);
|
||||
}
|
||||
|
||||
public AlphaOptimizedImageView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
this(context, attrs, defStyleAttr, 0 /* defStyleRes */);
|
||||
}
|
||||
|
||||
public AlphaOptimizedImageView(Context context, AttributeSet attrs, int defStyleAttr,
|
||||
int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
|
||||
TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
|
||||
R.styleable.AlphaOptimizedImageView, 0, 0);
|
||||
|
||||
try {
|
||||
// Default to true, which is what View.java defaults to
|
||||
mHasOverlappingRendering = a.getBoolean(
|
||||
R.styleable.AlphaOptimizedImageView_hasOverlappingRendering, true);
|
||||
} finally {
|
||||
a.recycle();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasOverlappingRendering() {
|
||||
return false;
|
||||
return mHasOverlappingRendering;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,10 +25,15 @@ import android.widget.ImageView;
|
||||
import android.widget.RemoteViews.RemoteView;
|
||||
|
||||
@RemoteView
|
||||
public class AnimatedImageView extends ImageView {
|
||||
public class AnimatedImageView extends AlphaOptimizedImageView {
|
||||
AnimationDrawable mAnim;
|
||||
boolean mAttached;
|
||||
|
||||
// Tracks the last image that was set, so that we don't refresh the image if it is exactly
|
||||
// the same as the previous one. If this is a resid, we track that. If it's a drawable, we
|
||||
// track the hashcode of the drawable.
|
||||
int mDrawableId;
|
||||
|
||||
public AnimatedImageView(Context context) {
|
||||
super(context);
|
||||
}
|
||||
@@ -43,7 +48,7 @@ public class AnimatedImageView extends ImageView {
|
||||
mAnim.stop();
|
||||
}
|
||||
if (drawable instanceof AnimationDrawable) {
|
||||
mAnim = (AnimationDrawable)drawable;
|
||||
mAnim = (AnimationDrawable) drawable;
|
||||
if (isShown()) {
|
||||
mAnim.start();
|
||||
}
|
||||
@@ -54,6 +59,13 @@ public class AnimatedImageView extends ImageView {
|
||||
|
||||
@Override
|
||||
public void setImageDrawable(Drawable drawable) {
|
||||
if (drawable != null) {
|
||||
if (mDrawableId == drawable.hashCode()) return;
|
||||
|
||||
mDrawableId = drawable.hashCode();
|
||||
} else {
|
||||
mDrawableId = 0;
|
||||
}
|
||||
super.setImageDrawable(drawable);
|
||||
updateAnim();
|
||||
}
|
||||
@@ -61,6 +73,9 @@ public class AnimatedImageView extends ImageView {
|
||||
@Override
|
||||
@android.view.RemotableViewMethod
|
||||
public void setImageResource(int resid) {
|
||||
if (mDrawableId == resid) return;
|
||||
|
||||
mDrawableId = resid;
|
||||
super.setImageResource(resid);
|
||||
updateAnim();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user