1 // Copyright 2015-present 650 Industries. All rights reserved.
2 
3 package versioned.host.exp.exponent.modules.api;
4 
5 import android.content.Intent;
6 import android.content.pm.PackageManager;
7 import android.net.Uri;
8 
9 import java.util.ArrayList;
10 import java.util.List;
11 import java.util.Map;
12 
13 import javax.inject.Inject;
14 
15 import com.facebook.react.bridge.Promise;
16 import com.facebook.react.bridge.ReactApplicationContext;
17 import com.facebook.react.bridge.ReactContextBaseJavaModule;
18 import com.facebook.react.bridge.ReactMethod;
19 import com.facebook.react.common.MapBuilder;
20 
21 import host.exp.exponent.di.NativeModuleDepsProvider;
22 
23 // TODO: kill
24 @Deprecated
25 public class URLHandlerModule extends ReactContextBaseJavaModule {
26 
URLHandlerModule(ReactApplicationContext reactContext)27   public URLHandlerModule(ReactApplicationContext reactContext) {
28     super(reactContext);
29     NativeModuleDepsProvider.getInstance().inject(URLHandlerModule.class, this);
30   }
31 
32   @Override
getName()33   public String getName() {
34     return "EXURLHandler";
35   }
36 
getConstants()37   public Map<String, Object> getConstants() {
38     List<String> schemes = new ArrayList<>();
39     schemes.add("exp");
40     schemes.add("exps");
41 
42     Map<String, Object> constants = MapBuilder.of(
43         "schemes", schemes,
44         "initialURL", null,
45         "settingsURL", "http://settings"
46     );
47     // source application, referrer
48     return constants;
49   }
50 
51   @ReactMethod
openURLAsync(String url, Promise promise)52   public void openURLAsync(String url, Promise promise) {
53     if (url == null) {
54       promise.resolve(false);
55     }
56 
57     Uri uri = Uri.parse(url);
58     Intent intent = new Intent(Intent.ACTION_VIEW, uri);
59     PackageManager packageManager = getReactApplicationContext().getPackageManager();
60     if (intent.resolveActivity(packageManager) != null) {
61       getCurrentActivity().startActivity(intent);
62       promise.resolve(true);
63     } else {
64       promise.resolve(false);
65     }
66   }
67 
68   @ReactMethod
canOpenURLAsync(String url, Promise promise)69   public void canOpenURLAsync(String url, Promise promise) {
70     if (url == null) {
71       promise.resolve(false);
72     }
73 
74     Uri uri = Uri.parse(url);
75     Intent intent = new Intent(Intent.ACTION_VIEW, uri);
76     PackageManager packageManager = getReactApplicationContext().getPackageManager();
77     promise.resolve(intent.resolveActivity(packageManager) != null);
78   }
79 }
80