DemoStatusIcons.java revision fd9aa5ff037f3037ccd4e1623ecc94eb1b43e6c4
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
193c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport android.os.Bundle;
203c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport android.os.UserHandle;
213c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport android.view.Gravity;
223c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport android.view.View;
233c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport android.view.ViewGroup;
243c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport android.widget.LinearLayout;
253c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock
263c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport com.android.internal.statusbar.StatusBarIcon;
273c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport com.android.systemui.DemoMode;
283c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport com.android.systemui.R;
293c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport com.android.systemui.statusbar.StatusBarIconView;
30af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlockimport com.android.systemui.statusbar.policy.LocationControllerImpl;
313c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock
323c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockpublic class DemoStatusIcons extends LinearLayout implements DemoMode {
333c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock    private final LinearLayout mStatusIcons;
343c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock    private final int mIconSize;
353c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock
363c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock    private boolean mDemoMode;
373c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock
383c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock    public DemoStatusIcons(LinearLayout statusIcons, int iconSize) {
393c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        super(statusIcons.getContext());
403c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        mStatusIcons = statusIcons;
413c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        mIconSize = iconSize;
423c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock
433c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        setLayoutParams(mStatusIcons.getLayoutParams());
443c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        setOrientation(mStatusIcons.getOrientation());
453c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        setGravity(Gravity.CENTER_VERTICAL); // no LL.getGravity()
463c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        ViewGroup p = (ViewGroup) mStatusIcons.getParent();
473c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        p.addView(this, p.indexOfChild(mStatusIcons));
483c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock    }
493c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock
503c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock    @Override
513c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock    public void dispatchDemoCommand(String command, Bundle args) {
523c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        if (!mDemoMode && command.equals(COMMAND_ENTER)) {
533c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            mDemoMode = true;
543c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            mStatusIcons.setVisibility(View.GONE);
553c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            setVisibility(View.VISIBLE);
563c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        } else if (mDemoMode && command.equals(COMMAND_EXIT)) {
573c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            mDemoMode = false;
583c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            mStatusIcons.setVisibility(View.VISIBLE);
593c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            setVisibility(View.GONE);
603c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        } else if (mDemoMode && command.equals(COMMAND_STATUS)) {
613c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String volume = args.getString("volume");
623c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (volume != null) {
63ad494bc0e427e90e6ce4cfce382b4a5134fc8b91John Spurlock                int iconId = volume.equals("vibrate") ? R.drawable.stat_sys_ringer_vibrate
643c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
653c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot("volume", null, iconId);
663c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
67ad494bc0e427e90e6ce4cfce382b4a5134fc8b91John Spurlock            String zen = args.getString("zen");
68ad494bc0e427e90e6ce4cfce382b4a5134fc8b91John Spurlock            if (zen != null) {
69ad494bc0e427e90e6ce4cfce382b4a5134fc8b91John Spurlock                int iconId = zen.equals("important") ? R.drawable.stat_sys_zen_important
70ad494bc0e427e90e6ce4cfce382b4a5134fc8b91John Spurlock                        : zen.equals("none") ? R.drawable.stat_sys_zen_none
71ad494bc0e427e90e6ce4cfce382b4a5134fc8b91John Spurlock                        : 0;
72ad494bc0e427e90e6ce4cfce382b4a5134fc8b91John Spurlock                updateSlot("zen", null, iconId);
73ad494bc0e427e90e6ce4cfce382b4a5134fc8b91John Spurlock            }
743c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String bt = args.getString("bluetooth");
753c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (bt != null) {
763c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                int iconId = bt.equals("disconnected") ? R.drawable.stat_sys_data_bluetooth
773c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : bt.equals("connected") ? R.drawable.stat_sys_data_bluetooth_connected
783c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
793c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot("bluetooth", null, iconId);
803c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
813c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String location = args.getString("location");
823c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (location != null) {
83af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock                int iconId = location.equals("show") ? LocationControllerImpl.LOCATION_STATUS_ICON_ID
843c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
85af8d6c44f06d2f8baac2c5774a9efdae3fc36797John Spurlock                updateSlot(LocationControllerImpl.LOCATION_STATUS_ICON_PLACEHOLDER, null, iconId);
863c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
873c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String alarm = args.getString("alarm");
883c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (alarm != null) {
893c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                int iconId = alarm.equals("show") ? R.drawable.stat_sys_alarm
903c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
913c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot("alarm_clock", null, iconId);
923c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
933c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String sync = args.getString("sync");
943c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (sync != null) {
953c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                int iconId = sync.equals("show") ? R.drawable.stat_sys_sync
963c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
973c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot("sync_active", null, iconId);
983c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
993c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String tty = args.getString("tty");
1003c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (tty != null) {
1013c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                int iconId = tty.equals("show") ? R.drawable.stat_sys_tty_mode
1023c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
1033c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot("tty", null, iconId);
1043c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
1053c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String eri = args.getString("eri");
1063c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (eri != null) {
1073c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                int iconId = eri.equals("show") ? R.drawable.stat_sys_roaming_cdma_0
1083c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
1093c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot("cdma_eri", null, iconId);
1103c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
1113c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String mute = args.getString("mute");
1123c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (mute != null) {
1133c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                int iconId = mute.equals("show") ? android.R.drawable.stat_notify_call_mute
1143c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
1153c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot("mute", null, iconId);
1163c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
1173c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String speakerphone = args.getString("speakerphone");
1183c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (speakerphone != null) {
1193c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                int iconId = speakerphone.equals("show") ? android.R.drawable.stat_sys_speakerphone
1203c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
1213c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot("speakerphone", null, iconId);
1223c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
12396fe98d0c0bf9a3126da0e14d05463220ac276abJohn Spurlock            String cast = args.getString("cast");
12496fe98d0c0bf9a3126da0e14d05463220ac276abJohn Spurlock            if (cast != null) {
125952d5d8d8a82ddd21ca4f119ec75a4c82fec3f79Jason Monk                int iconId = cast.equals("show") ? R.drawable.stat_sys_cast : 0;
12696fe98d0c0bf9a3126da0e14d05463220ac276abJohn Spurlock                updateSlot("cast", null, iconId);
12796fe98d0c0bf9a3126da0e14d05463220ac276abJohn Spurlock            }
128952d5d8d8a82ddd21ca4f119ec75a4c82fec3f79Jason Monk            String hotspot = args.getString("hotspot");
129952d5d8d8a82ddd21ca4f119ec75a4c82fec3f79Jason Monk            if (hotspot != null) {
130952d5d8d8a82ddd21ca4f119ec75a4c82fec3f79Jason Monk                int iconId = hotspot.equals("show") ? R.drawable.stat_sys_hotspot : 0;
131952d5d8d8a82ddd21ca4f119ec75a4c82fec3f79Jason Monk                updateSlot("hotspot", null, iconId);
132952d5d8d8a82ddd21ca4f119ec75a4c82fec3f79Jason Monk            }
1333c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        }
1343c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock    }
1353c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock
1363c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock    private void updateSlot(String slot, String iconPkg, int iconId) {
1373c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        if (!mDemoMode) return;
1383c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        int removeIndex = -1;
1393c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        for (int i = 0; i < getChildCount(); i++) {
1403c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            StatusBarIconView v = (StatusBarIconView) getChildAt(i);
1413c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (slot.equals(v.getTag())) {
1423c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                if (iconId == 0) {
1433c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                    removeIndex = i;
1443c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                    break;
1453c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                } else {
1463c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                    StatusBarIcon icon = v.getStatusBarIcon();
1473c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                    icon.iconPackage = iconPkg;
1483c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                    icon.iconId = iconId;
1493c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                    v.set(icon);
1503c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                    v.updateDrawable();
1513c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                    return;
1523c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                }
1533c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
1543c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        }
1553c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        if (iconId == 0) {
1563c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (removeIndex != -1) {
1573c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                removeViewAt(removeIndex);
1583c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                return;
1593c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
1603c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        }
1613c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        StatusBarIcon icon = new StatusBarIcon(iconPkg, UserHandle.CURRENT, iconId, 0, 0, "Demo");
162fd9aa5ff037f3037ccd4e1623ecc94eb1b43e6c4John Spurlock        StatusBarIconView v = new StatusBarIconView(getContext(), null, null);
1633c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        v.setTag(slot);
1643c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        v.set(icon);
1653c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        addView(v, 0, new LinearLayout.LayoutParams(mIconSize, mIconSize));
1663c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock    }
1673c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock}