1 /* 2 * Copyright (C) 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.systemui.statusbar.phone; 18 19 import android.os.Bundle; 20 import android.os.UserHandle; 21 import android.view.Gravity; 22 import android.view.View; 23 import android.view.ViewGroup; 24 import android.widget.LinearLayout; 25 26 import com.android.internal.statusbar.StatusBarIcon; 27 import com.android.systemui.DemoMode; 28 import com.android.systemui.R; 29 import com.android.systemui.statusbar.StatusBarIconView; 30 import com.android.systemui.statusbar.policy.LocationControllerImpl; 31 32 public class DemoStatusIcons extends LinearLayout implements DemoMode { 33 private final LinearLayout mStatusIcons; 34 private final int mIconSize; 35 36 private boolean mDemoMode; 37 DemoStatusIcons(LinearLayout statusIcons, int iconSize)38 public DemoStatusIcons(LinearLayout statusIcons, int iconSize) { 39 super(statusIcons.getContext()); 40 mStatusIcons = statusIcons; 41 mIconSize = iconSize; 42 43 setLayoutParams(mStatusIcons.getLayoutParams()); 44 setOrientation(mStatusIcons.getOrientation()); 45 setGravity(Gravity.CENTER_VERTICAL); // no LL.getGravity() 46 ViewGroup p = (ViewGroup) mStatusIcons.getParent(); 47 p.addView(this, p.indexOfChild(mStatusIcons)); 48 } 49 50 @Override dispatchDemoCommand(String command, Bundle args)51 public void dispatchDemoCommand(String command, Bundle args) { 52 if (!mDemoMode && command.equals(COMMAND_ENTER)) { 53 mDemoMode = true; 54 mStatusIcons.setVisibility(View.GONE); 55 setVisibility(View.VISIBLE); 56 } else if (mDemoMode && command.equals(COMMAND_EXIT)) { 57 mDemoMode = false; 58 mStatusIcons.setVisibility(View.VISIBLE); 59 setVisibility(View.GONE); 60 } else if (mDemoMode && command.equals(COMMAND_STATUS)) { 61 String volume = args.getString("volume"); 62 if (volume != null) { 63 int iconId = volume.equals("vibrate") ? R.drawable.stat_sys_ringer_vibrate 64 : 0; 65 updateSlot("volume", null, iconId); 66 } 67 String zen = args.getString("zen"); 68 if (zen != null) { 69 int iconId = zen.equals("important") ? R.drawable.stat_sys_zen_important 70 : zen.equals("none") ? R.drawable.stat_sys_zen_none 71 : 0; 72 updateSlot("zen", null, iconId); 73 } 74 String bt = args.getString("bluetooth"); 75 if (bt != null) { 76 int iconId = bt.equals("disconnected") ? R.drawable.stat_sys_data_bluetooth 77 : bt.equals("connected") ? R.drawable.stat_sys_data_bluetooth_connected 78 : 0; 79 updateSlot("bluetooth", null, iconId); 80 } 81 String location = args.getString("location"); 82 if (location != null) { 83 int iconId = location.equals("show") ? LocationControllerImpl.LOCATION_STATUS_ICON_ID 84 : 0; 85 updateSlot(LocationControllerImpl.LOCATION_STATUS_ICON_PLACEHOLDER, null, iconId); 86 } 87 String alarm = args.getString("alarm"); 88 if (alarm != null) { 89 int iconId = alarm.equals("show") ? R.drawable.stat_sys_alarm 90 : 0; 91 updateSlot("alarm_clock", null, iconId); 92 } 93 String sync = args.getString("sync"); 94 if (sync != null) { 95 int iconId = sync.equals("show") ? R.drawable.stat_sys_sync 96 : 0; 97 updateSlot("sync_active", null, iconId); 98 } 99 String tty = args.getString("tty"); 100 if (tty != null) { 101 int iconId = tty.equals("show") ? R.drawable.stat_sys_tty_mode 102 : 0; 103 updateSlot("tty", null, iconId); 104 } 105 String eri = args.getString("eri"); 106 if (eri != null) { 107 int iconId = eri.equals("show") ? R.drawable.stat_sys_roaming_cdma_0 108 : 0; 109 updateSlot("cdma_eri", null, iconId); 110 } 111 String mute = args.getString("mute"); 112 if (mute != null) { 113 int iconId = mute.equals("show") ? android.R.drawable.stat_notify_call_mute 114 : 0; 115 updateSlot("mute", null, iconId); 116 } 117 String speakerphone = args.getString("speakerphone"); 118 if (speakerphone != null) { 119 int iconId = speakerphone.equals("show") ? android.R.drawable.stat_sys_speakerphone 120 : 0; 121 updateSlot("speakerphone", null, iconId); 122 } 123 String cast = args.getString("cast"); 124 if (cast != null) { 125 int iconId = cast.equals("show") ? R.drawable.stat_sys_cast : 0; 126 updateSlot("cast", null, iconId); 127 } 128 String hotspot = args.getString("hotspot"); 129 if (hotspot != null) { 130 int iconId = hotspot.equals("show") ? R.drawable.stat_sys_hotspot : 0; 131 updateSlot("hotspot", null, iconId); 132 } 133 } 134 } 135 updateSlot(String slot, String iconPkg, int iconId)136 private void updateSlot(String slot, String iconPkg, int iconId) { 137 if (!mDemoMode) return; 138 int removeIndex = -1; 139 for (int i = 0; i < getChildCount(); i++) { 140 StatusBarIconView v = (StatusBarIconView) getChildAt(i); 141 if (slot.equals(v.getTag())) { 142 if (iconId == 0) { 143 removeIndex = i; 144 break; 145 } else { 146 StatusBarIcon icon = v.getStatusBarIcon(); 147 icon.iconPackage = iconPkg; 148 icon.iconId = iconId; 149 v.set(icon); 150 v.updateDrawable(); 151 return; 152 } 153 } 154 } 155 if (iconId == 0) { 156 if (removeIndex != -1) { 157 removeViewAt(removeIndex); 158 return; 159 } 160 } 161 StatusBarIcon icon = new StatusBarIcon(iconPkg, UserHandle.CURRENT, iconId, 0, 0, "Demo"); 162 StatusBarIconView v = new StatusBarIconView(getContext(), null, null); 163 v.setTag(slot); 164 v.set(icon); 165 addView(v, 0, new LinearLayout.LayoutParams(mIconSize, mIconSize)); 166 } 167 }