1a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono/* 2a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono * Copyright (C) 2015 The Android Open Source Project 3a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono * 4a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono * Licensed under the Apache License, Version 2.0 (the "License"); 5a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono * you may not use this file except in compliance with the License. 6a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono * You may obtain a copy of the License at 7a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono * 8a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono * http://www.apache.org/licenses/LICENSE-2.0 9a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono * 10a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono * Unless required by applicable law or agreed to in writing, software 11a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono * distributed under the License is distributed on an "AS IS" BASIS, 12a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono * See the License for the specific language governing permissions and 14a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono * limitations under the License. 15a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono */ 16a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono 17a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hironopackage com.android.mtp; 18a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono 19a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hironoimport android.content.BroadcastReceiver; 20a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hironoimport android.content.Context; 21a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hironoimport android.content.Intent; 22a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hironoimport android.hardware.usb.UsbDevice; 23a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hironoimport android.hardware.usb.UsbManager; 24fda7474c5faae1e36a9274d8a5fe83e42ec6503bDaichi Hironoimport android.util.Log; 25fda7474c5faae1e36a9274d8a5fe83e42ec6503bDaichi Hirono 26fda7474c5faae1e36a9274d8a5fe83e42ec6503bDaichi Hironoimport java.io.IOException; 27a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono 28a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hironopublic class UsbIntentReceiver extends BroadcastReceiver { 29a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono @Override 30a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono public void onReceive(Context context, Intent intent) { 31a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono final UsbDevice device = intent.getExtras().getParcelable(UsbManager.EXTRA_DEVICE); 32a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono switch (intent.getAction()) { 33a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono case UsbManager.ACTION_USB_DEVICE_ATTACHED: 34fda7474c5faae1e36a9274d8a5fe83e42ec6503bDaichi Hirono MtpDocumentsProvider.getInstance().resumeRootScanner(); 35a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono break; 36a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono case UsbManager.ACTION_USB_DEVICE_DETACHED: 37fda7474c5faae1e36a9274d8a5fe83e42ec6503bDaichi Hirono try { 38fda7474c5faae1e36a9274d8a5fe83e42ec6503bDaichi Hirono MtpDocumentsProvider.getInstance().closeDevice(device.getDeviceId()); 39fda7474c5faae1e36a9274d8a5fe83e42ec6503bDaichi Hirono } catch (IOException | InterruptedException e) { 40fda7474c5faae1e36a9274d8a5fe83e42ec6503bDaichi Hirono Log.e(MtpDocumentsProvider.TAG, "Failed to close device", e); 41fda7474c5faae1e36a9274d8a5fe83e42ec6503bDaichi Hirono } 42a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono break; 43a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono } 44a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono } 45a57d9ed09003acd8b2beb0494a2bd32f7030cc11Daichi Hirono} 46