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