13c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock/* 23c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock * Copyright (C) 2013 The Android Open Source Project 33c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock * 43c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock * Licensed under the Apache License, Version 2.0 (the "License"); 53c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock * you may not use this file except in compliance with the License. 63c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock * You may obtain a copy of the License at 73c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock * 83c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock * http://www.apache.org/licenses/LICENSE-2.0 93c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock * 103c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock * Unless required by applicable law or agreed to in writing, software 113c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock * distributed under the License is distributed on an "AS IS" BASIS, 123c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock * See the License for the specific language governing permissions and 143c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock * limitations under the License. 153c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock */ 163c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock 173c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockpackage com.android.systemui.statusbar.phone; 183c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock 19d63f9321e62064660d426efd5abbd885c4a24652Dan Sandlerimport android.graphics.drawable.Icon; 203c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport android.os.Bundle; 213c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport android.os.UserHandle; 223c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport android.view.Gravity; 233c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport android.view.View; 243c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport android.view.ViewGroup; 253c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport android.widget.LinearLayout; 263c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock 273c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport com.android.internal.statusbar.StatusBarIcon; 283c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport com.android.systemui.DemoMode; 293c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport com.android.systemui.R; 303c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport com.android.systemui.statusbar.StatusBarIconView; 31af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.systemui.statusbar.policy.LocationControllerImpl; 323c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock 333c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockpublic class DemoStatusIcons extends LinearLayout implements DemoMode { 343c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock private final LinearLayout mStatusIcons; 353c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock private final int mIconSize; 363c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock 373c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock private boolean mDemoMode; 383c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock 393c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock public DemoStatusIcons(LinearLayout statusIcons, int iconSize) { 403c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock super(statusIcons.getContext()); 413c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock mStatusIcons = statusIcons; 423c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock mIconSize = iconSize; 433c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock 443c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock setLayoutParams(mStatusIcons.getLayoutParams()); 453c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock setOrientation(mStatusIcons.getOrientation()); 463c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock setGravity(Gravity.CENTER_VERTICAL); // no LL.getGravity() 473c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock ViewGroup p = (ViewGroup) mStatusIcons.getParent(); 483c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock p.addView(this, p.indexOfChild(mStatusIcons)); 493c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } 503c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock 513c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock @Override 523c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock public void dispatchDemoCommand(String command, Bundle args) { 533c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock if (!mDemoMode && command.equals(COMMAND_ENTER)) { 543c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock mDemoMode = true; 553c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock mStatusIcons.setVisibility(View.GONE); 563c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock setVisibility(View.VISIBLE); 573c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } else if (mDemoMode && command.equals(COMMAND_EXIT)) { 583c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock mDemoMode = false; 593c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock mStatusIcons.setVisibility(View.VISIBLE); 603c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock setVisibility(View.GONE); 613c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } else if (mDemoMode && command.equals(COMMAND_STATUS)) { 623c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock String volume = args.getString("volume"); 633c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock if (volume != null) { 64ad494bc0e427e90e6ce4cfce382b4a5134fc8b91John Spurlock int iconId = volume.equals("vibrate") ? R.drawable.stat_sys_ringer_vibrate 653c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock : 0; 663c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock updateSlot("volume", null, iconId); 673c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } 68ad494bc0e427e90e6ce4cfce382b4a5134fc8b91John Spurlock String zen = args.getString("zen"); 69ad494bc0e427e90e6ce4cfce382b4a5134fc8b91John Spurlock if (zen != null) { 70ad494bc0e427e90e6ce4cfce382b4a5134fc8b91John Spurlock int iconId = zen.equals("important") ? R.drawable.stat_sys_zen_important 71ad494bc0e427e90e6ce4cfce382b4a5134fc8b91John Spurlock : zen.equals("none") ? R.drawable.stat_sys_zen_none 72ad494bc0e427e90e6ce4cfce382b4a5134fc8b91John Spurlock : 0; 73ad494bc0e427e90e6ce4cfce382b4a5134fc8b91John Spurlock updateSlot("zen", null, iconId); 74ad494bc0e427e90e6ce4cfce382b4a5134fc8b91John Spurlock } 753c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock String bt = args.getString("bluetooth"); 763c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock if (bt != null) { 773c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock int iconId = bt.equals("disconnected") ? R.drawable.stat_sys_data_bluetooth 783c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock : bt.equals("connected") ? R.drawable.stat_sys_data_bluetooth_connected 793c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock : 0; 803c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock updateSlot("bluetooth", null, iconId); 813c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } 823c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock String location = args.getString("location"); 833c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock if (location != null) { 84359bb74a540ab57db159427d85ac562d56183df1Jason Monk int iconId = location.equals("show") ? PhoneStatusBarPolicy.LOCATION_STATUS_ICON_ID 853c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock : 0; 863e189877aba0285d79ce55349afae60457d95d6fJason Monk updateSlot("location", null, iconId); 873c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } 883c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock String alarm = args.getString("alarm"); 893c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock if (alarm != null) { 903c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock int iconId = alarm.equals("show") ? R.drawable.stat_sys_alarm 913c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock : 0; 923c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock updateSlot("alarm_clock", null, iconId); 933c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } 943c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock String tty = args.getString("tty"); 953c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock if (tty != null) { 963c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock int iconId = tty.equals("show") ? R.drawable.stat_sys_tty_mode 973c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock : 0; 983c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock updateSlot("tty", null, iconId); 993c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } 1003c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock String mute = args.getString("mute"); 1013c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock if (mute != null) { 1023c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock int iconId = mute.equals("show") ? android.R.drawable.stat_notify_call_mute 1033c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock : 0; 1043c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock updateSlot("mute", null, iconId); 1053c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } 1063c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock String speakerphone = args.getString("speakerphone"); 1073c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock if (speakerphone != null) { 1083c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock int iconId = speakerphone.equals("show") ? android.R.drawable.stat_sys_speakerphone 1093c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock : 0; 1103c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock updateSlot("speakerphone", null, iconId); 1113c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } 11296fe98d0c0bf9a3126da0e14d05463220ac276abJohn Spurlock String cast = args.getString("cast"); 11396fe98d0c0bf9a3126da0e14d05463220ac276abJohn Spurlock if (cast != null) { 114952d5d8d8a82ddd21ca4f119ec75a4c82fec3f79Jason Monk int iconId = cast.equals("show") ? R.drawable.stat_sys_cast : 0; 11596fe98d0c0bf9a3126da0e14d05463220ac276abJohn Spurlock updateSlot("cast", null, iconId); 11696fe98d0c0bf9a3126da0e14d05463220ac276abJohn Spurlock } 117952d5d8d8a82ddd21ca4f119ec75a4c82fec3f79Jason Monk String hotspot = args.getString("hotspot"); 118952d5d8d8a82ddd21ca4f119ec75a4c82fec3f79Jason Monk if (hotspot != null) { 119952d5d8d8a82ddd21ca4f119ec75a4c82fec3f79Jason Monk int iconId = hotspot.equals("show") ? R.drawable.stat_sys_hotspot : 0; 120952d5d8d8a82ddd21ca4f119ec75a4c82fec3f79Jason Monk updateSlot("hotspot", null, iconId); 121952d5d8d8a82ddd21ca4f119ec75a4c82fec3f79Jason Monk } 1223c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } 1233c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } 1243c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock 1253c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock private void updateSlot(String slot, String iconPkg, int iconId) { 1263c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock if (!mDemoMode) return; 127259e06f58225e70716d3370d123e8dca830206a7Jason Monk if (iconPkg == null) { 128259e06f58225e70716d3370d123e8dca830206a7Jason Monk iconPkg = mContext.getPackageName(); 129259e06f58225e70716d3370d123e8dca830206a7Jason Monk } 1303c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock int removeIndex = -1; 1313c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock for (int i = 0; i < getChildCount(); i++) { 1323c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock StatusBarIconView v = (StatusBarIconView) getChildAt(i); 1333c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock if (slot.equals(v.getTag())) { 1343c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock if (iconId == 0) { 1353c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock removeIndex = i; 1363c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock break; 1373c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } else { 1383c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock StatusBarIcon icon = v.getStatusBarIcon(); 139d63f9321e62064660d426efd5abbd885c4a24652Dan Sandler icon.icon = Icon.createWithResource(icon.icon.getResPackage(), iconId); 1403c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock v.set(icon); 1413c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock v.updateDrawable(); 1423c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock return; 1433c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } 1443c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } 1453c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } 1463c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock if (iconId == 0) { 1473c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock if (removeIndex != -1) { 1483c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock removeViewAt(removeIndex); 1493c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } 150259e06f58225e70716d3370d123e8dca830206a7Jason Monk return; 1513c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } 15287d0e254cdc639347b73aa5f60ec8ab6c5327c7eXiaohui Chen StatusBarIcon icon = new StatusBarIcon(iconPkg, UserHandle.SYSTEM, iconId, 0, 0, "Demo"); 153fd9aa5ff037f3037ccd4e1623ecc94eb1b43e6c4John Spurlock StatusBarIconView v = new StatusBarIconView(getContext(), null, null); 1543c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock v.setTag(slot); 1553c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock v.set(icon); 1563c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock addView(v, 0, new LinearLayout.LayoutParams(mIconSize, mIconSize)); 1573c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock } 158d63f9321e62064660d426efd5abbd885c4a24652Dan Sandler} 159