diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 4f0757cade5ab..af213ba06f567 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -26,6 +26,7 @@
- ime
- sync_failing
- sync_active
+ - cast
- location
- bluetooth
- nfc
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_cast_available.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_cast_available.png
deleted file mode 100644
index f256fbbb246af..0000000000000
Binary files a/packages/SystemUI/res/drawable-hdpi/ic_qs_cast_available.png and /dev/null differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_cast_connected.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_cast_connected.png
deleted file mode 100644
index b946ec9029f75..0000000000000
Binary files a/packages/SystemUI/res/drawable-hdpi/ic_qs_cast_connected.png and /dev/null differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_cast_available.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_cast_available.png
deleted file mode 100644
index b1e984c7c0a09..0000000000000
Binary files a/packages/SystemUI/res/drawable-mdpi/ic_qs_cast_available.png and /dev/null differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_cast_connected.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_cast_connected.png
deleted file mode 100644
index ceda1bb6398a1..0000000000000
Binary files a/packages/SystemUI/res/drawable-mdpi/ic_qs_cast_connected.png and /dev/null differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_cast_available.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_cast_available.png
deleted file mode 100644
index 47be502e0a313..0000000000000
Binary files a/packages/SystemUI/res/drawable-xhdpi/ic_qs_cast_available.png and /dev/null differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_cast_connected.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_cast_connected.png
deleted file mode 100644
index 4b12809b9c967..0000000000000
Binary files a/packages/SystemUI/res/drawable-xhdpi/ic_qs_cast_connected.png and /dev/null differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_cast_available.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_cast_available.png
deleted file mode 100644
index 8e225af212efb..0000000000000
Binary files a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_cast_available.png and /dev/null differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_cast_connected.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_cast_connected.png
deleted file mode 100644
index 937202bdf809d..0000000000000
Binary files a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_cast_connected.png and /dev/null differ
diff --git a/packages/SystemUI/res/drawable/stat_sys_cast.xml b/packages/SystemUI/res/drawable/stat_sys_cast.xml
new file mode 100644
index 0000000000000..c9e65e029ed22
--- /dev/null
+++ b/packages/SystemUI/res/drawable/stat_sys_cast.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 120af1deefaed..0fe389a7d77ba 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -392,6 +392,9 @@
Ringer silent.
+
+ @string/quick_settings_casting
+
Dismiss %s.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java
index 936479beadc3a..c5d06b94a1156 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java
@@ -120,6 +120,11 @@ public class DemoStatusIcons extends LinearLayout implements DemoMode {
: 0;
updateSlot("speakerphone", null, iconId);
}
+ String cast = args.getString("cast");
+ if (cast != null) {
+ int iconId = cast.equals("cast") ? R.drawable.stat_sys_cast : 0;
+ updateSlot("cast", null, iconId);
+ }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 21dc27e94f60e..e60bd4f672718 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -562,7 +562,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
addNavigationBar();
// Lastly, call to the icon policy to install/update all the icons.
- mIconPolicy = new PhoneStatusBarPolicy(mContext);
+ mIconPolicy = new PhoneStatusBarPolicy(mContext, mCastController);
mSettingsObserver.onChange(false); // set up
mHeadsUpObserver.onChange(true); // set up
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
index bd52cd39282f0..237b78272b47a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -33,6 +33,8 @@ import android.util.Log;
import com.android.internal.telephony.IccCardConstants;
import com.android.internal.telephony.TelephonyIntents;
import com.android.systemui.R;
+import com.android.systemui.statusbar.policy.CastController;
+import com.android.systemui.statusbar.policy.CastController.CastDevice;
/**
* This class contains all of the policy about which icons are installed in the status
@@ -46,6 +48,7 @@ public class PhoneStatusBarPolicy {
private static final boolean SHOW_SYNC_ICON = false;
private static final String SLOT_SYNC_ACTIVE = "sync_active";
+ private static final String SLOT_CAST = "cast";
private static final String SLOT_BLUETOOTH = "bluetooth";
private static final String SLOT_TTY = "tty";
private static final String SLOT_ZEN = "zen";
@@ -56,6 +59,7 @@ public class PhoneStatusBarPolicy {
private final Context mContext;
private final StatusBarManager mService;
private final Handler mHandler = new Handler();
+ private final CastController mCast;
// Assume it's all good unless we hear otherwise. We don't always seem
// to get broadcasts that it *is* there.
@@ -98,8 +102,9 @@ public class PhoneStatusBarPolicy {
}
};
- public PhoneStatusBarPolicy(Context context) {
+ public PhoneStatusBarPolicy(Context context, CastController cast) {
mContext = context;
+ mCast = cast;
mService = (StatusBarManager)context.getSystemService(Context.STATUS_BAR_SERVICE);
// listen for broadcasts
@@ -151,6 +156,11 @@ public class PhoneStatusBarPolicy {
mService.setIcon(SLOT_VOLUME, R.drawable.stat_sys_ringer_vibrate, 0, null);
mService.setIconVisibility(SLOT_VOLUME, false);
updateVolumeZen();
+
+ // cast
+ mService.setIcon(SLOT_CAST, R.drawable.stat_sys_cast, 0, null);
+ mService.setIconVisibility(SLOT_CAST, false);
+ mCast.addCallback(mCastCallback);
}
public void setZenMode(int zen) {
@@ -287,4 +297,28 @@ public class PhoneStatusBarPolicy {
mService.setIconVisibility(SLOT_TTY, false);
}
}
+
+ private void updateCast() {
+ boolean isCasting = false;
+ for (CastDevice device : mCast.getCastDevices()) {
+ if (device.state == CastDevice.STATE_CONNECTING
+ || device.state == CastDevice.STATE_CONNECTED) {
+ isCasting = true;
+ break;
+ }
+ }
+ if (DEBUG) Log.v(TAG, "updateCast: isCasting: " + isCasting);
+ if (isCasting) {
+ mService.setIcon(SLOT_CAST, R.drawable.stat_sys_cast, 0,
+ mContext.getString(R.string.accessibility_casting));
+ }
+ mService.setIconVisibility(SLOT_CAST, isCasting);
+ }
+
+ private final CastController.Callback mCastCallback = new CastController.Callback() {
+ @Override
+ public void onCastDevicesChanged() {
+ updateCast();
+ }
+ };
}