19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.commands.svc;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19783f9e6615db5c90c184397cf1ee271e302c398bGuang Zhuimport android.content.Context;
20783f9e6615db5c90c184397cf1ee271e302c398bGuang Zhuimport android.os.BatteryManager;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.IPowerManager;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RemoteException;
23783f9e6615db5c90c184397cf1ee271e302c398bGuang Zhuimport android.os.ServiceManager;
24783f9e6615db5c90c184397cf1ee271e302c398bGuang Zhuimport android.os.SystemClock;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PowerCommand extends Svc.Command {
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public PowerCommand() {
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super("power");
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String shortHelp() {
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return "Control the power manager";
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String longHelp() {
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return shortHelp() + "\n"
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + "\n"
3837a37f445cbcd64376af153dd79ea2a123d9405dBrian Muramatsu                + "usage: svc power stayon [true|false|usb|ac|wireless]\n"
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + "         Set the 'keep awake while plugged in' setting.\n";
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void run(String[] args) {
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        fail: {
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (args.length >= 2) {
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if ("stayon".equals(args[1]) && args.length == 3) {
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    int val;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    if ("true".equals(args[2])) {
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        val = BatteryManager.BATTERY_PLUGGED_AC |
4937a37f445cbcd64376af153dd79ea2a123d9405dBrian Muramatsu                                BatteryManager.BATTERY_PLUGGED_USB |
5037a37f445cbcd64376af153dd79ea2a123d9405dBrian Muramatsu                                BatteryManager.BATTERY_PLUGGED_WIRELESS;
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    else if ("false".equals(args[2])) {
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        val = 0;
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    } else if ("usb".equals(args[2])) {
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        val = BatteryManager.BATTERY_PLUGGED_USB;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    } else if ("ac".equals(args[2])) {
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        val = BatteryManager.BATTERY_PLUGGED_AC;
5837a37f445cbcd64376af153dd79ea2a123d9405dBrian Muramatsu                    } else if ("wireless".equals(args[2])) {
5937a37f445cbcd64376af153dd79ea2a123d9405dBrian Muramatsu                        val = BatteryManager.BATTERY_PLUGGED_WIRELESS;
6037a37f445cbcd64376af153dd79ea2a123d9405dBrian Muramatsu                    } else {
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        break fail;
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    IPowerManager pm
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            = IPowerManager.Stub.asInterface(ServiceManager.getService(Context.POWER_SERVICE));
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    try {
66783f9e6615db5c90c184397cf1ee271e302c398bGuang Zhu                        if (val != 0) {
67783f9e6615db5c90c184397cf1ee271e302c398bGuang Zhu                            // if the request is not to set it to false, wake up the screen so that
68783f9e6615db5c90c184397cf1ee271e302c398bGuang Zhu                            // it can stay on as requested
69783f9e6615db5c90c184397cf1ee271e302c398bGuang Zhu                            pm.wakeUp(SystemClock.uptimeMillis());
70783f9e6615db5c90c184397cf1ee271e302c398bGuang Zhu                        }
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        pm.setStayOnSetting(val);
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    catch (RemoteException e) {
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        System.err.println("Faild to set setting: " + e);
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    return;
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        System.err.println(longHelp());
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
83