1 package com.android.DeviceAsWebcam.utils;
2 
3 import android.content.Context;
4 import android.util.JsonReader;
5 import android.util.Log;
6 
7 import com.android.DeviceAsWebcam.R;
8 
9 import java.io.IOException;
10 import java.io.InputStream;
11 import java.io.InputStreamReader;
12 import java.util.ArrayList;
13 import java.util.List;
14 
15 public class IgnoredV4L2Nodes {
16     private static final String TAG = IgnoredV4L2Nodes.class.getSimpleName();
17     private static final String V4L2_NODE_PREFIX = "/dev/video";
18 
19     private static String[] kIgnoredNodes = null;
20 
getIgnoredNodes(Context context)21     public synchronized static String[] getIgnoredNodes(Context context) {
22         if (kIgnoredNodes != null) {
23             return kIgnoredNodes;
24         }
25 
26         List<String> ignoredNodes = new ArrayList<>();
27         try(InputStream in = context.getResources().openRawResource(R.raw.ignored_v4l2_nodes);
28             JsonReader jsonReader = new JsonReader(new InputStreamReader(in))) {
29             jsonReader.beginArray();
30             while (jsonReader.hasNext()) {
31                 String node = jsonReader.nextString();
32                 // Don't track nodes that won't be in our search anyway.
33                 if (node.startsWith(V4L2_NODE_PREFIX)) {
34                     ignoredNodes.add(node);
35                 }
36             }
37             jsonReader.endArray();
38         } catch (IOException e) {
39             Log.e(TAG, "Failed to parse JSON. Running with a partial ignored list", e);
40         }
41 
42         kIgnoredNodes = ignoredNodes.toArray(new String[0]);
43         return kIgnoredNodes;
44     }
45 }
46