PowerCommand.java revision 37a37f445cbcd64376af153dd79ea2a123d9405d
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
19401ad721aded1e3e57ff51b8c2f98578b588ac43Guang Zhuimport android.os.Binder;
20401ad721aded1e3e57ff51b8c2f98578b588ac43Guang Zhuimport android.os.IBinder;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.IPowerManager;
22401ad721aded1e3e57ff51b8c2f98578b588ac43Guang Zhuimport android.os.PowerManager;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.ServiceManager;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RemoteException;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.BatteryManager;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PowerCommand extends Svc.Command {
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public PowerCommand() {
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super("power");
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String shortHelp() {
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return "Control the power manager";
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String longHelp() {
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return shortHelp() + "\n"
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + "\n"
4037a37f445cbcd64376af153dd79ea2a123d9405dBrian Muramatsu                + "usage: svc power stayon [true|false|usb|ac|wireless]\n"
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                + "         Set the 'keep awake while plugged in' setting.\n";
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void run(String[] args) {
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        fail: {
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (args.length >= 2) {
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                if ("stayon".equals(args[1]) && args.length == 3) {
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    int val;
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    if ("true".equals(args[2])) {
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        val = BatteryManager.BATTERY_PLUGGED_AC |
5137a37f445cbcd64376af153dd79ea2a123d9405dBrian Muramatsu                                BatteryManager.BATTERY_PLUGGED_USB |
5237a37f445cbcd64376af153dd79ea2a123d9405dBrian Muramatsu                                BatteryManager.BATTERY_PLUGGED_WIRELESS;
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    else if ("false".equals(args[2])) {
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        val = 0;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    } else if ("usb".equals(args[2])) {
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        val = BatteryManager.BATTERY_PLUGGED_USB;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    } else if ("ac".equals(args[2])) {
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        val = BatteryManager.BATTERY_PLUGGED_AC;
6037a37f445cbcd64376af153dd79ea2a123d9405dBrian Muramatsu                    } else if ("wireless".equals(args[2])) {
6137a37f445cbcd64376af153dd79ea2a123d9405dBrian Muramatsu                        val = BatteryManager.BATTERY_PLUGGED_WIRELESS;
6237a37f445cbcd64376af153dd79ea2a123d9405dBrian Muramatsu                    } else {
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        break fail;
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    }
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    IPowerManager pm
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                            = IPowerManager.Stub.asInterface(ServiceManager.getService(Context.POWER_SERVICE));
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    try {
68401ad721aded1e3e57ff51b8c2f98578b588ac43Guang Zhu                        IBinder lock = new Binder();
699630704ed3b265f008a8f64ec60a33cf9dcd3345Jeff Brown                        pm.acquireWakeLock(lock, PowerManager.FULL_WAKE_LOCK, "svc power", null);
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        pm.setStayOnSetting(val);
710e39ea83c5578e0d55e120c91ff7cfeeb0c1cb2fMike Lockwood                        pm.releaseWakeLock(lock, 0);
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