1/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5 * except in compliance with the License. You may obtain a copy of the License at
6 *
7 *      http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the
10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11 * KIND, either express or implied. See the License for the specific language governing
12 * permissions and limitations under the License.
13 */
14
15package com.android.server.statusbar;
16
17import android.content.ComponentName;
18import android.os.RemoteException;
19import android.os.ShellCommand;
20import com.android.internal.statusbar.IStatusBarService;
21
22import java.io.PrintWriter;
23
24public class StatusBarShellCommand extends ShellCommand {
25
26    private final IStatusBarService mInterface;
27
28    public StatusBarShellCommand(StatusBarManagerService service) {
29        mInterface = service;
30    }
31
32    @Override
33    public int onCommand(String cmd) {
34        if (cmd == null) {
35            return handleDefaultCommands(cmd);
36        }
37        try {
38            switch (cmd) {
39                case "expand-notifications":
40                    return runExpandNotifications();
41                case "expand-settings":
42                    return runExpandSettings();
43                case "collapse":
44                    return runCollapse();
45                case "add-tile":
46                    return runAddTile();
47                case "remove-tile":
48                    return runRemoveTile();
49                case "click-tile":
50                    return runClickTile();
51                default:
52                    return handleDefaultCommands(cmd);
53            }
54        } catch (RemoteException e) {
55            final PrintWriter pw = getOutPrintWriter();
56            pw.println("Remote exception: " + e);
57        }
58        return -1;
59    }
60
61    private int runAddTile() throws RemoteException {
62        mInterface.addTile(ComponentName.unflattenFromString(getNextArgRequired()));
63        return 0;
64    }
65
66    private int runRemoveTile() throws RemoteException {
67        mInterface.remTile(ComponentName.unflattenFromString(getNextArgRequired()));
68        return 0;
69    }
70
71    private int runClickTile() throws RemoteException {
72        mInterface.clickTile(ComponentName.unflattenFromString(getNextArgRequired()));
73        return 0;
74    }
75
76    private int runCollapse() throws RemoteException {
77        mInterface.collapsePanels();
78        return 0;
79    }
80
81    private int runExpandSettings() throws RemoteException {
82        mInterface.expandSettingsPanel(null);
83        return 0;
84    }
85
86    private int runExpandNotifications() throws RemoteException {
87        mInterface.expandNotificationsPanel();
88        return 0;
89    }
90
91    @Override
92    public void onHelp() {
93        final PrintWriter pw = getOutPrintWriter();
94        pw.println("Status bar commands:");
95        pw.println("  help");
96        pw.println("    Print this help text.");
97        pw.println("");
98        pw.println("  expand-notifications");
99        pw.println("    Open the notifications panel.");
100        pw.println("");
101        pw.println("  expand-settings");
102        pw.println("    Open the notifications panel and expand quick settings if present.");
103        pw.println("");
104        pw.println("  collapse");
105        pw.println("    Collapse the notifications and settings panel.");
106        pw.println("");
107        pw.println("  add-tile COMPONENT");
108        pw.println("    Add a TileService of the specified component");
109        pw.println("");
110        pw.println("  remove-tile COMPONENT");
111        pw.println("    Remove a TileService of the specified component");
112        pw.println("");
113        pw.println("  click-tile COMPONENT");
114        pw.println("    Click on a TileService of the specified component");
115        pw.println("");
116    }
117}
118