/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.statusbar.phone; import android.graphics.drawable.Icon; import android.os.Bundle; import android.os.UserHandle; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import com.android.internal.statusbar.StatusBarIcon; import com.android.systemui.DemoMode; import com.android.systemui.R; import com.android.systemui.statusbar.StatusBarIconView; import com.android.systemui.statusbar.policy.LocationControllerImpl; public class DemoStatusIcons extends LinearLayout implements DemoMode { private final LinearLayout mStatusIcons; private final int mIconSize; private boolean mDemoMode; public DemoStatusIcons(LinearLayout statusIcons, int iconSize) { super(statusIcons.getContext()); mStatusIcons = statusIcons; mIconSize = iconSize; setLayoutParams(mStatusIcons.getLayoutParams()); setOrientation(mStatusIcons.getOrientation()); setGravity(Gravity.CENTER_VERTICAL); // no LL.getGravity() ViewGroup p = (ViewGroup) mStatusIcons.getParent(); p.addView(this, p.indexOfChild(mStatusIcons)); } @Override public void dispatchDemoCommand(String command, Bundle args) { if (!mDemoMode && command.equals(COMMAND_ENTER)) { mDemoMode = true; mStatusIcons.setVisibility(View.GONE); setVisibility(View.VISIBLE); } else if (mDemoMode && command.equals(COMMAND_EXIT)) { mDemoMode = false; mStatusIcons.setVisibility(View.VISIBLE); setVisibility(View.GONE); } else if (mDemoMode && command.equals(COMMAND_STATUS)) { String volume = args.getString("volume"); if (volume != null) { int iconId = volume.equals("vibrate") ? R.drawable.stat_sys_ringer_vibrate : 0; updateSlot("volume", null, iconId); } String zen = args.getString("zen"); if (zen != null) { int iconId = zen.equals("important") ? R.drawable.stat_sys_zen_important : zen.equals("none") ? R.drawable.stat_sys_zen_none : 0; updateSlot("zen", null, iconId); } String bt = args.getString("bluetooth"); if (bt != null) { int iconId = bt.equals("disconnected") ? R.drawable.stat_sys_data_bluetooth : bt.equals("connected") ? R.drawable.stat_sys_data_bluetooth_connected : 0; updateSlot("bluetooth", null, iconId); } String location = args.getString("location"); if (location != null) { int iconId = location.equals("show") ? PhoneStatusBarPolicy.LOCATION_STATUS_ICON_ID : 0; updateSlot("location", null, iconId); } String alarm = args.getString("alarm"); if (alarm != null) { int iconId = alarm.equals("show") ? R.drawable.stat_sys_alarm : 0; updateSlot("alarm_clock", null, iconId); } String tty = args.getString("tty"); if (tty != null) { int iconId = tty.equals("show") ? R.drawable.stat_sys_tty_mode : 0; updateSlot("tty", null, iconId); } String mute = args.getString("mute"); if (mute != null) { int iconId = mute.equals("show") ? android.R.drawable.stat_notify_call_mute : 0; updateSlot("mute", null, iconId); } String speakerphone = args.getString("speakerphone"); if (speakerphone != null) { int iconId = speakerphone.equals("show") ? android.R.drawable.stat_sys_speakerphone : 0; updateSlot("speakerphone", null, iconId); } String cast = args.getString("cast"); if (cast != null) { int iconId = cast.equals("show") ? R.drawable.stat_sys_cast : 0; updateSlot("cast", null, iconId); } String hotspot = args.getString("hotspot"); if (hotspot != null) { int iconId = hotspot.equals("show") ? R.drawable.stat_sys_hotspot : 0; updateSlot("hotspot", null, iconId); } } } private void updateSlot(String slot, String iconPkg, int iconId) { if (!mDemoMode) return; if (iconPkg == null) { iconPkg = mContext.getPackageName(); } int removeIndex = -1; for (int i = 0; i < getChildCount(); i++) { StatusBarIconView v = (StatusBarIconView) getChildAt(i); if (slot.equals(v.getTag())) { if (iconId == 0) { removeIndex = i; break; } else { StatusBarIcon icon = v.getStatusBarIcon(); icon.icon = Icon.createWithResource(icon.icon.getResPackage(), iconId); v.set(icon); v.updateDrawable(); return; } } } if (iconId == 0) { if (removeIndex != -1) { removeViewAt(removeIndex); } return; } StatusBarIcon icon = new StatusBarIcon(iconPkg, UserHandle.SYSTEM, iconId, 0, 0, "Demo"); StatusBarIconView v = new StatusBarIconView(getContext(), null, null); v.setTag(slot); v.set(icon); addView(v, 0, new LinearLayout.LayoutParams(mIconSize, mIconSize)); } }