DemoStatusIcons.java revision 01534780dfaf81c9f89a6e19fe2fe42cfdd01ff7
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;
303c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlockimport com.android.systemui.statusbar.policy.LocationController;
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) {
633c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                int iconId = volume.equals("silent") ? R.drawable.stat_sys_ringer_silent
643c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : volume.equals("vibrate") ? R.drawable.stat_sys_ringer_vibrate
653c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
663c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot("volume", null, iconId);
673c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
683c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String bt = args.getString("bluetooth");
693c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (bt != null) {
703c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                int iconId = bt.equals("disconnected") ? R.drawable.stat_sys_data_bluetooth
713c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : bt.equals("connected") ? R.drawable.stat_sys_data_bluetooth_connected
723c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
733c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot("bluetooth", null, iconId);
743c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
753c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String location = args.getString("location");
763c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (location != null) {
773c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                int iconId = location.equals("show") ? LocationController.LOCATION_STATUS_ICON_ID
783c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
793c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot(LocationController.LOCATION_STATUS_ICON_PLACEHOLDER, null, iconId);
803c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
813c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String alarm = args.getString("alarm");
823c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (alarm != null) {
833c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                int iconId = alarm.equals("show") ? R.drawable.stat_sys_alarm
843c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
853c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot("alarm_clock", null, iconId);
863c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
873c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String sync = args.getString("sync");
883c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (sync != null) {
893c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                int iconId = sync.equals("show") ? R.drawable.stat_sys_sync
903c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
913c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot("sync_active", null, iconId);
923c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
933c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String tty = args.getString("tty");
943c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (tty != null) {
953c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                int iconId = tty.equals("show") ? R.drawable.stat_sys_tty_mode
963c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
973c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot("tty", null, iconId);
983c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
993c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String eri = args.getString("eri");
1003c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (eri != null) {
1013c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                int iconId = eri.equals("show") ? R.drawable.stat_sys_roaming_cdma_0
1023c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
1033c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot("cdma_eri", null, iconId);
1043c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
1053c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String mute = args.getString("mute");
1063c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (mute != null) {
1073c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                int iconId = mute.equals("show") ? android.R.drawable.stat_notify_call_mute
1083c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
1093c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot("mute", null, iconId);
1103c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
1113c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            String speakerphone = args.getString("speakerphone");
1123c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (speakerphone != null) {
1133c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                int iconId = speakerphone.equals("show") ? android.R.drawable.stat_sys_speakerphone
1143c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                        : 0;
1153c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                updateSlot("speakerphone", null, iconId);
1163c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
1173c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        }
1183c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock    }
1193c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock
1203c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock    private void updateSlot(String slot, String iconPkg, int iconId) {
1213c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        if (!mDemoMode) return;
1223c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        int removeIndex = -1;
1233c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        for (int i = 0; i < getChildCount(); i++) {
1243c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            StatusBarIconView v = (StatusBarIconView) getChildAt(i);
1253c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (slot.equals(v.getTag())) {
1263c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                if (iconId == 0) {
1273c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                    removeIndex = i;
1283c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                    break;
1293c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                } else {
1303c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                    StatusBarIcon icon = v.getStatusBarIcon();
1313c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                    icon.iconPackage = iconPkg;
1323c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                    icon.iconId = iconId;
1333c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                    v.set(icon);
1343c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                    v.updateDrawable();
1353c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                    return;
1363c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                }
1373c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
1383c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        }
1393c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        if (iconId == 0) {
1403c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            if (removeIndex != -1) {
1413c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                removeViewAt(removeIndex);
1423c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock                return;
1433c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock            }
1443c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        }
1453c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        StatusBarIcon icon = new StatusBarIcon(iconPkg, UserHandle.CURRENT, iconId, 0, 0, "Demo");
14601534780dfaf81c9f89a6e19fe2fe42cfdd01ff7John Spurlock        StatusBarIconView v = new StatusBarIconView(getContext(), null);
1473c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        v.setTag(slot);
1483c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        v.set(icon);
1493c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock        addView(v, 0, new LinearLayout.LayoutParams(mIconSize, mIconSize));
1503c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock    }
1513c87566c115e1fce3fdc09a6fe40488bcdc04cdeJohn Spurlock}