Add fullscreen toggle
[rtmpclient.git] / app / src / main / java / ai / suanzi / rtmpclient / UsbMonitor.java
1 package ai.suanzi.rtmpclient;
2
3 import android.hardware.usb.UsbManager;
4 import android.content.Context;
5 import android.hardware.usb.UsbDevice;
6
7 import java.util.ArrayList;
8 import java.util.HashMap;
9 import java.util.Iterator;
10 import java.util.List;
11 import org.apache.log4j.Logger;
12 import android.app.PendingIntent;
13 import android.content.Intent;
14 import android.content.IntentFilter;
15 import android.content.BroadcastReceiver;
16
17 public class UsbMonitor {
18
19     private UsbListener mListener;
20     private Context mContext;
21     private UsbManager mUsbManager;
22     private List<UsbDevice> mUsbCameraList = new ArrayList<>();
23
24     private static Logger gLogger = Logger.getLogger("UsbMonitor");
25
26     public UsbMonitor(UsbListener listener, Context context){
27         mListener = listener;
28         mContext = context;
29         mUsbManager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
30
31         IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_DETACHED);
32         mContext.registerReceiver(mUsbReceiver, filter);
33         filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_ATTACHED);
34         mContext.registerReceiver(mUsbReceiver, filter);
35         filter = new IntentFilter(ACTION_USB_PERMISSION);
36         mContext.registerReceiver(mUsbReceiver, filter);
37
38         HashMap<String, UsbDevice> deviceList;
39         try {
40             deviceList = mUsbManager.getDeviceList();
41         } catch (NullPointerException e) {
42             gLogger.error(e.getMessage());
43             e.printStackTrace();
44             return;
45         }
46         gLogger.error("device list size : " + deviceList.size());
47         Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
48         //PendingIntent mPermissionIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_USB_PERMISSION), 0);
49         while (deviceIterator.hasNext()) {
50             UsbDevice device = deviceIterator.next();
51             gLogger.error(device.toString());
52             if(isUvcCamera(device))  mUsbCameraList.add(device);
53         }
54             //mUsbManager.requestPermission(device, mPermissionIntent);
55     }
56
57     public void unregisterReceiver (){
58         mContext.unregisterReceiver(mUsbReceiver);
59     }
60
61     private boolean isUvcCamera(UsbDevice device){
62         if((device == null) || (device.getProductName() == null)) return false;
63         return device.getProductName().toLowerCase().contains("camera") || (device.getDeviceProtocol() == 1);
64     }
65
66     public boolean hasUsbCamera(){
67         gLogger.error("hasUsbCamera - size: " + mUsbCameraList.size());
68         return mUsbCameraList.size() > 0;
69     }
70
71     public int getUsbCameraCount(){
72         return mUsbCameraList.size();
73     }
74
75     private static final String ACTION_USB_PERMISSION =  "ai.suanzi.rtmpclient.UsbMonitor.USB_PERMISSION";
76
77     private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
78
79         public void onReceive(Context context, Intent intent) {
80             gLogger.error("onReceive");
81             String action = intent.getAction();
82             if (ACTION_USB_PERMISSION.equals(action)) {
83                 synchronized (this) {
84                     UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
85
86                     if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, true)) {
87                         if(device != null){
88                             gLogger.error( "extra permission granted");
89                             //call method to set up device communication
90                         }
91                     }
92                     else {
93                         gLogger.error("permission denied for device. " + device);
94                     }
95                 }
96             } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)){
97                 UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
98                 if (device != null){
99                     gLogger.error("Device plug out");
100                     gLogger.error(device.toString());
101                     if(isUvcCamera(device)) {
102                         mUsbCameraList.remove(device);
103                         mListener.onCameraDisconnected();
104                     }
105                 }
106             } else if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
107                 UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
108                 gLogger.error("Device plug in");
109                 gLogger.error(device.toString());
110                 if(isUvcCamera(device)) {
111                     mUsbCameraList.add(device);
112                     mListener.onCameraConnected();
113                 }
114             }
115         }
116     };
117
118     public interface UsbListener {
119         void onCameraConnected();
120         void onCameraDisconnected();
121     }
122 }