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