From 465cefa1a26b256c9b7073d17a57cf82a17d6b87 Mon Sep 17 00:00:00 2001 From: John Spurlock Date: Sat, 16 Aug 2014 10:39:33 -0400 Subject: [PATCH] QS: Add scanning progress state indication. - Create a modified version of the new platform horizontal indeterminate progress indicator, and align it to the bottom of the header. - Ensure the scanning state takes the active detail panel into account. Bug:16145178 Change-Id: I7f80c458ff6565aa00085da9059a4e9fe7e49233 --- .../SystemUI/res/drawable/indeterminate.xml | 45 +++++++++++++++++++ .../res/drawable/indeterminate_anim.xml | 32 +++++++++++++ .../res/layout/status_bar_expanded_header.xml | 10 +++++ packages/SystemUI/res/values/colors.xml | 1 + .../src/com/android/systemui/qs/QSPanel.java | 17 +++++-- .../statusbar/phone/StatusBarHeaderView.java | 16 ++++++- 6 files changed, 117 insertions(+), 4 deletions(-) create mode 100644 packages/SystemUI/res/drawable/indeterminate.xml create mode 100644 packages/SystemUI/res/drawable/indeterminate_anim.xml diff --git a/packages/SystemUI/res/drawable/indeterminate.xml b/packages/SystemUI/res/drawable/indeterminate.xml new file mode 100644 index 0000000000000..35e11e5f66b25 --- /dev/null +++ b/packages/SystemUI/res/drawable/indeterminate.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/drawable/indeterminate_anim.xml b/packages/SystemUI/res/drawable/indeterminate_anim.xml new file mode 100644 index 0000000000000..52c6d168d5e58 --- /dev/null +++ b/packages/SystemUI/res/drawable/indeterminate_anim.xml @@ -0,0 +1,32 @@ + + + + + + + + + diff --git a/packages/SystemUI/res/layout/status_bar_expanded_header.xml b/packages/SystemUI/res/layout/status_bar_expanded_header.xml index 1226fc5ed2a7a..079b97b05a6c6 100644 --- a/packages/SystemUI/res/layout/status_bar_expanded_header.xml +++ b/packages/SystemUI/res/layout/status_bar_expanded_header.xml @@ -148,6 +148,16 @@ android:layout_alignParentBottom="true" /> + + #99FFFFFF #24B0BEC5 #66FFFFFF + #99009688 #99FFFFFF #33FFFFFF #FFFFFFFF diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index c3144c12d58b2..1fa97bd887f82 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -234,8 +234,9 @@ public class QSPanel extends ViewGroup { } @Override public void onScanStateChanged(boolean state) { + r.scanState = state; if (mDetailRecord == r) { - fireScanStateChanged(state); + fireScanStateChanged(r.scanState); } } }; @@ -310,9 +311,10 @@ public class QSPanel extends ViewGroup { mDetailContent.removeAllViews(); mDetail.bringToFront(); mDetailContent.addView(r.detailView); - mDetailRecord = r; + setDetailRecord(r); } else { listener = mTeardownDetailWhenDone; + fireScanStateChanged(false); } fireShowingDetail(show ? detailAdapter : null); mClipper.animateCircularClip(x, y, show, listener); @@ -425,6 +427,14 @@ public class QSPanel extends ViewGroup { } } + private void setDetailRecord(Record r) { + if (r == mDetailRecord) return; + mDetailRecord = r; + final boolean scanState = mDetailRecord instanceof TileRecord + && ((TileRecord) mDetailRecord).scanState; + fireScanStateChanged(scanState); + } + private class H extends Handler { private static final int SHOW_DETAIL = 1; private static final int SET_TILE_VISIBILITY = 2; @@ -448,12 +458,13 @@ public class QSPanel extends ViewGroup { QSTileView tileView; int row; int col; + boolean scanState; } private final AnimatorListenerAdapter mTeardownDetailWhenDone = new AnimatorListenerAdapter() { public void onAnimationEnd(Animator animation) { mDetailContent.removeAllViews(); - mDetailRecord = null; + setDetailRecord(null); }; }; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java index 39b20220f5fe2..8bc7dd49eb837 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java @@ -22,6 +22,7 @@ import android.content.Context; import android.content.Intent; import android.graphics.Outline; import android.graphics.Rect; +import android.graphics.drawable.Animatable; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.TypedValue; @@ -68,6 +69,7 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL private View mQsDetailHeader; private TextView mQsDetailHeaderTitle; private Switch mQsDetailHeaderSwitch; + private ImageView mQsDetailHeaderProgress; private View mEmergencyCallsOnly; private TextView mBatteryLevel; private TextView mAlarmStatus; @@ -137,6 +139,7 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL mQsDetailHeader.setAlpha(0); mQsDetailHeaderTitle = (TextView) mQsDetailHeader.findViewById(android.R.id.title); mQsDetailHeaderSwitch = (Switch) mQsDetailHeader.findViewById(android.R.id.toggle); + mQsDetailHeaderProgress = (ImageView) findViewById(R.id.qs_detail_header_progress); mEmergencyCallsOnly = findViewById(R.id.header_emergency_calls_only); mBatteryLevel = (TextView) findViewById(R.id.battery_level); mAlarmStatus = (TextView) findViewById(R.id.alarm_status); @@ -658,6 +661,8 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL } private final QSPanel.Callback mQsPanelCallback = new QSPanel.Callback() { + private boolean mScanState; + @Override public void onToggleStateChanged(final boolean state) { post(new Runnable() { @@ -693,7 +698,16 @@ public class StatusBarHeaderView extends RelativeLayout implements View.OnClickL } private void handleScanStateChanged(boolean state) { - // TODO - waiting on framework asset + if (mScanState == state) return; + mScanState = state; + final Animatable anim = (Animatable) mQsDetailHeaderProgress.getDrawable(); + if (state) { + mQsDetailHeaderProgress.animate().alpha(1f); + anim.start(); + } else { + mQsDetailHeaderProgress.animate().alpha(0f); + anim.stop(); + } } private void handleShowingDetail(final QSTile.DetailAdapter detail) {