|
15 | 15 | import com.facebook.react.bridge.ReactContextBaseJavaModule; |
16 | 16 | import com.facebook.react.bridge.ReactMethod; |
17 | 17 | import com.facebook.react.bridge.WritableArray; |
| 18 | +import com.facebook.react.module.annotations.ReactModule; |
| 19 | +import com.facebook.react.bridge.UiThreadUtil; |
18 | 20 |
|
19 | 21 | import java.util.ArrayList; |
20 | 22 | import java.util.HashMap; |
21 | 23 | import java.util.Map; |
| 24 | +import java.lang.Runtime; |
22 | 25 |
|
| 26 | +@ReactModule(name = RNUserAgentModule.NAME) |
23 | 27 | public class RNUserAgentModule extends ReactContextBaseJavaModule { |
24 | | - |
25 | | - private final ReactApplicationContext reactContext; |
| 28 | + public static final String NAME = "RNUserAgent"; |
26 | 29 |
|
27 | 30 | public RNUserAgentModule(ReactApplicationContext reactContext) { |
28 | 31 | super(reactContext); |
29 | | - this.reactContext = reactContext; |
30 | 32 | } |
31 | 33 |
|
32 | 34 | @Override |
33 | 35 | public String getName() { |
34 | | - return "RNUserAgent"; |
| 36 | + return NAME; |
35 | 37 | } |
36 | 38 |
|
37 | 39 | protected String getUserAgent() { |
38 | | - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { |
| 40 | + try { |
| 41 | + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { |
| 42 | + return WebSettings.getDefaultUserAgent(getReactApplicationContext()); |
| 43 | + } else { |
| 44 | + return System.getProperty("http.agent"); |
| 45 | + } |
| 46 | + } catch (RuntimeException e) { |
39 | 47 | return System.getProperty("http.agent"); |
40 | 48 | } |
41 | | - |
42 | | - return ""; |
43 | 49 | } |
44 | 50 |
|
45 | | - protected String getWebViewUserAgent() { |
46 | | - if (Build.VERSION.SDK_INT >= 17) { |
47 | | - return WebSettings.getDefaultUserAgent(this.reactContext); |
| 51 | + @ReactMethod |
| 52 | + protected void getWebViewUserAgent(final Promise p) { |
| 53 | + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { |
| 54 | + p.resolve(WebSettings.getDefaultUserAgent(getReactApplicationContext())); |
48 | 55 | } |
49 | 56 |
|
50 | | - return new WebView(this.reactContext).getSettings().getUserAgentString(); |
| 57 | + UiThreadUtil.runOnUiThread( |
| 58 | + new Runnable() { |
| 59 | + @Override |
| 60 | + public void run() { |
| 61 | + p.resolve(new WebView(getReactApplicationContext()).getSettings().getUserAgentString()); |
| 62 | + } |
| 63 | + } |
| 64 | + ); |
| 65 | + } |
| 66 | + |
| 67 | + private PackageInfo getPackageInfo() throws Exception { |
| 68 | + return getReactApplicationContext().getPackageManager().getPackageInfo(getReactApplicationContext().getPackageName(), 0); |
51 | 69 | } |
52 | 70 |
|
53 | 71 | @Override |
54 | 72 | public Map<String, Object> getConstants() { |
55 | | - HashMap<String, Object> constants = new HashMap<String, Object>(); |
56 | | - |
57 | | - PackageManager packageManager = this.reactContext.getPackageManager(); |
58 | | - String packageName = this.reactContext.getPackageName(); |
| 73 | + String packageName = getReactApplicationContext().getPackageName(); |
59 | 74 | String shortPackageName = packageName.substring(packageName.lastIndexOf(".") + 1); |
60 | | - String applicationName = ""; |
61 | 75 | String applicationVersion = ""; |
62 | | - Integer buildNumber = 0; |
63 | | - String userAgent = this.getUserAgent(); |
| 76 | + String applicationName = ""; |
| 77 | + String buildNumber = ""; |
| 78 | + String userAgent = ""; |
64 | 79 |
|
65 | 80 | try { |
66 | | - PackageInfo info = packageManager.getPackageInfo(packageName, 0); |
67 | | - applicationName = this.reactContext.getApplicationInfo().loadLabel(this.reactContext.getPackageManager()).toString(); |
68 | | - applicationVersion = info.versionName; |
69 | | - buildNumber = info.versionCode; |
70 | | - userAgent = shortPackageName + '/' + applicationVersion + '.' + buildNumber.toString() + ' ' + userAgent; |
71 | | - |
72 | | - } catch(PackageManager.NameNotFoundException e) { |
| 81 | + applicationName = getReactApplicationContext().getApplicationInfo().loadLabel(getReactApplicationContext().getPackageManager()).toString(); |
| 82 | + applicationVersion = getPackageInfo().versionName; |
| 83 | + buildNumber = Integer.toString(getPackageInfo().versionCode); |
| 84 | + userAgent = shortPackageName + '/' + applicationVersion + '.' + buildNumber.toString() + ' ' + this.getUserAgent(); |
| 85 | + } catch(Exception e) { |
73 | 86 | e.printStackTrace(); |
74 | 87 | } |
75 | 88 |
|
| 89 | + HashMap<String, Object> constants = new HashMap<String, Object>(); |
| 90 | + |
76 | 91 | constants.put("systemName", "Android"); |
77 | 92 | constants.put("systemVersion", Build.VERSION.RELEASE); |
78 | 93 | constants.put("packageName", packageName); |
79 | 94 | constants.put("shortPackageName", shortPackageName); |
80 | 95 | constants.put("applicationName", applicationName); |
81 | 96 | constants.put("applicationVersion", applicationVersion); |
82 | | - constants.put("applicationBuildNumber", buildNumber); |
| 97 | + constants.put("buildNumber", buildNumber); |
83 | 98 | constants.put("userAgent", userAgent); |
84 | | - constants.put("webViewUserAgent", this.getWebViewUserAgent()); |
85 | 99 |
|
86 | 100 | return constants; |
87 | 101 | } |
|
0 commit comments