1fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu/*
2fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu * Copyright (C) 2015 The Android Open Source Project
3fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu *
4fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu * Licensed under the Apache License, Version 2.0 (the "License");
5fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu * you may not use this file except in compliance with the License.
6fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu * You may obtain a copy of the License at
7fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu *
8fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu *      http://www.apache.org/licenses/LICENSE-2.0
9fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu *
10fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu * Unless required by applicable law or agreed to in writing, software
11fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu * distributed under the License is distributed on an "AS IS" BASIS,
12fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu * See the License for the specific language governing permissions and
14fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu * limitations under the License.
15fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu */
16fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu
17fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhupackage com.android.commands.svc;
18fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu
19fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhuimport android.content.Context;
20fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhuimport android.content.pm.IPackageManager;
21fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhuimport android.content.pm.PackageManager;
22fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhuimport android.nfc.INfcAdapter;
23fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhuimport android.os.RemoteException;
24fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhuimport android.os.ServiceManager;
25fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu
26fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhupublic class NfcCommand extends Svc.Command {
27fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu
28fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu    public NfcCommand() {
29fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu        super("nfc");
30fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu    }
31fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu
32fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu    @Override
33fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu    public String shortHelp() {
34fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu        return "Control NFC functions";
35fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu    }
36fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu
37fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu    @Override
38fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu    public String longHelp() {
39fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu        return shortHelp() + "\n"
40fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                + "\n"
41fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                + "usage: svc nfc [enable|disable]\n"
42fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                + "         Turn NFC on or off.\n\n";
43fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu    }
44fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu
45fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu    @Override
46fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu    public void run(String[] args) {
47fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu        boolean validCommand = false;
48fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu        if (args.length >= 2) {
49fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu            boolean flag = false;
50fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu            if ("enable".equals(args[1])) {
51fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                flag = true;
52fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                validCommand = true;
53fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu            } else if ("disable".equals(args[1])) {
54fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                flag = false;
55fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                validCommand = true;
56fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu            }
57fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu            if (validCommand) {
58fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                IPackageManager pm = IPackageManager.Stub.asInterface(
59fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                        ServiceManager.getService("package"));
60fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                try {
611876583bfbf5ec5f17fedb650eb82c3f52ff4a8fTucker Sylvestro                    if (pm.hasSystemFeature(PackageManager.FEATURE_NFC, 0) ||
621876583bfbf5ec5f17fedb650eb82c3f52ff4a8fTucker Sylvestro			pm.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION, 0)) {
63fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                        INfcAdapter nfc = INfcAdapter.Stub
64fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                                .asInterface(ServiceManager.getService(Context.NFC_SERVICE));
65fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                        try {
66fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                            if (flag) {
67fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                                nfc.enable();
68fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                            } else
69fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                                nfc.disable(true);
70fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                        } catch (RemoteException e) {
71fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                            System.err.println("NFC operation failed: " + e);
72fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                        }
73fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                    } else {
74fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                        System.err.println("NFC feature not supported.");
75fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                    }
76fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                } catch (RemoteException e) {
77fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                    System.err.println("RemoteException while calling PackageManager, is the "
78fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                            + "system running?");
79fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                }
80fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu                return;
81fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu            }
82fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu        }
83fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu        System.err.println(longHelp());
84fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu    }
85fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu
86fe74fb95b91a5d58a8d2d238c525e2f1891ca0c7Guang Zhu}
87