am b386e77e: Merge "SysUI: Status bar ImageViews" into mnc-dev

* commit 'b386e77eaadf76fe59051bd27c3013427828034b':
  SysUI: Status bar ImageViews
This commit is contained in:
Andrew Flynn
2015-06-12 14:06:46 +00:00
committed by Android Git Automerger
6 changed files with 57 additions and 12 deletions

View File

@@ -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"

View File

@@ -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

View File

@@ -162,6 +162,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
systemui:hasOverlappingRendering="false"
/>
<TextView

View File

@@ -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>

View File

@@ -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;
}
}

View File

@@ -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();
}