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