tapjoy-react-native-sdk 14.4.0 → 14.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/android/build.gradle +8 -15
  2. package/android/gradle.properties +3 -3
  3. package/android/src/main/java/com/tapjoyreactnativesdk/TJOfferwallDiscoverNativeView.kt +2 -2
  4. package/android/src/main/java/com/tapjoyreactnativesdk/TJOfferwallDiscoverNativeViewManager.kt +21 -16
  5. package/android/src/main/java/com/tapjoyreactnativesdk/TapjoyReactNativeSdkModule.kt +130 -87
  6. package/android/src/main/java/com/tapjoyreactnativesdk/TapjoyReactNativeSdkPackage.kt +29 -5
  7. package/example/android/app/build.gradle +1 -1
  8. package/example/android/app/src/main/java/com/tapjoyreactnativesdkexample/MainApplication.kt +2 -8
  9. package/example/android/build.gradle +4 -4
  10. package/example/android/gradle/wrapper/gradle-wrapper.properties +1 -1
  11. package/example/android/gradle.properties +5 -0
  12. package/example/ios/Podfile +2 -1
  13. package/example/ios/TapjoyReactNativeSdkExample/Info.plist +3 -1
  14. package/example/ios/TapjoyReactNativeSdkExample.xcodeproj/project.pbxproj +0 -45
  15. package/example/metro.config.js +9 -15
  16. package/example/package.json +19 -16
  17. package/example/scripts/set-arch.sh +25 -0
  18. package/example/src/App.tsx +1 -2
  19. package/example/src/MainScreen.tsx +76 -60
  20. package/example/src/OfferwallDiscoverScreen.tsx +105 -91
  21. package/example/src/OfferwallScreen.tsx +170 -156
  22. package/example/src/Styles.ts +3 -2
  23. package/example/src/UserProperties.tsx +170 -136
  24. package/ios/TJOfferwallDiscoverNativeViewManager.m +11 -1
  25. package/ios/TJOfferwallDiscoverNativeViewManager.swift +2 -2
  26. package/ios/TapjoyReactNativeSdk.m +36 -15
  27. package/ios/TapjoyReactNativeSdk.swift +24 -4
  28. package/lib/commonjs/NativeTapjoyReactNativeSdk.js +2 -0
  29. package/lib/commonjs/TJOfferwallDiscoverView.js +43 -16
  30. package/lib/commonjs/TJOfferwallDiscoverViewNativeComponent.js +6 -0
  31. package/lib/commonjs/TJPlacement.js +17 -13
  32. package/lib/commonjs/TJPrivacyPolicy.js +81 -11
  33. package/lib/commonjs/TJVersion.js +1 -1
  34. package/lib/commonjs/Tapjoy.js +16 -10
  35. package/lib/commonjs/index.js +2 -1
  36. package/lib/commonjs/utils/ArchitectureDetection.js +7 -0
  37. package/lib/typescript/NativeTapjoyReactNativeSdk.d.ts +53 -0
  38. package/lib/typescript/TJOfferwallDiscoverView.d.ts +3 -12
  39. package/lib/typescript/TJOfferwallDiscoverViewNativeComponent.d.ts +21 -0
  40. package/lib/typescript/TJPrivacyPolicy.d.ts +29 -1
  41. package/lib/typescript/Tapjoy.d.ts +1 -1
  42. package/lib/typescript/index.d.ts +5 -3
  43. package/lib/typescript/utils/ArchitectureDetection.d.ts +5 -0
  44. package/package.json +14 -16
  45. package/src/NativeTapjoyReactNativeSdk.ts +117 -0
  46. package/src/TJOfferwallDiscoverView.tsx +56 -39
  47. package/src/TJOfferwallDiscoverViewNativeComponent.ts +37 -0
  48. package/src/TJPlacement.ts +17 -13
  49. package/src/TJPrivacyPolicy.ts +84 -12
  50. package/src/TJVersion.ts +1 -1
  51. package/src/Tapjoy.ts +20 -13
  52. package/src/index.ts +13 -3
  53. package/src/utils/ArchitectureDetection.ts +14 -0
  54. package/tapjoy-react-native-sdk.podspec +1 -1
@@ -35,11 +35,13 @@
35
35
  <string></string>
36
36
  <key>NSUserTrackingUsageDescription</key>
37
37
  <string>This allows us to deliver personalized ads for you.</string>
38
+ <key>RCTNewArchEnabled</key>
39
+ <true/>
38
40
  <key>UILaunchStoryboardName</key>
39
41
  <string>LaunchScreen</string>
40
42
  <key>UIRequiredDeviceCapabilities</key>
41
43
  <array>
42
- <string>armv64</string>
44
+ <string>arm64</string>
43
45
  </array>
44
46
  <key>UISupportedInterfaceOrientations</key>
45
47
  <array>
@@ -15,21 +15,10 @@
15
15
  B58E4E7E8EDB14A1C5F1CBAA /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = EDEB0408D1807C711EE2B6BB /* PrivacyInfo.xcprivacy */; };
16
16
  /* End PBXBuildFile section */
17
17
 
18
- /* Begin PBXContainerItemProxy section */
19
- 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
20
- isa = PBXContainerItemProxy;
21
- containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
22
- proxyType = 1;
23
- remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
24
- remoteInfo = TapjoyReactNativeSdkExample;
25
- };
26
- /* End PBXContainerItemProxy section */
27
-
28
18
  /* Begin PBXFileReference section */
29
19
  00E356EE1AD99517003FC87E /* TapjoyReactNativeSdkExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TapjoyReactNativeSdkExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
30
20
  13B07F961A680F5B00A75B9A /* TapjoyReactNativeSdkExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TapjoyReactNativeSdkExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
31
21
  13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = TapjoyReactNativeSdkExample/Images.xcassets; sourceTree = "<group>"; };
32
- 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = TapjoyReactNativeSdkExample/Info.plist; sourceTree = "<group>"; };
33
22
  19F6CBCC0A4E27FBF8BF4A61 /* libPods-TapjoyReactNativeSdkExample-TapjoyReactNativeSdkExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TapjoyReactNativeSdkExample-TapjoyReactNativeSdkExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
34
23
  3B4392A12AC88292D35C810B /* Pods-TapjoyReactNativeSdkExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TapjoyReactNativeSdkExample.debug.xcconfig"; path = "Target Support Files/Pods-TapjoyReactNativeSdkExample/Pods-TapjoyReactNativeSdkExample.debug.xcconfig"; sourceTree = "<group>"; };
35
24
  5709B34CF0A7D63546082F79 /* Pods-TapjoyReactNativeSdkExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TapjoyReactNativeSdkExample.release.xcconfig"; path = "Target Support Files/Pods-TapjoyReactNativeSdkExample/Pods-TapjoyReactNativeSdkExample.release.xcconfig"; sourceTree = "<group>"; };
@@ -62,27 +51,11 @@
62
51
  /* End PBXFrameworksBuildPhase section */
63
52
 
64
53
  /* Begin PBXGroup section */
65
- 00E356EF1AD99517003FC87E /* TapjoyReactNativeSdkExampleTests */ = {
66
- isa = PBXGroup;
67
- children = (
68
- 00E356F01AD99517003FC87E /* Supporting Files */,
69
- );
70
- path = TapjoyReactNativeSdkExampleTests;
71
- sourceTree = "<group>";
72
- };
73
- 00E356F01AD99517003FC87E /* Supporting Files */ = {
74
- isa = PBXGroup;
75
- children = (
76
- );
77
- name = "Supporting Files";
78
- sourceTree = "<group>";
79
- };
80
54
  13B07FAE1A68108700A75B9A /* TapjoyReactNativeSdkExample */ = {
81
55
  isa = PBXGroup;
82
56
  children = (
83
57
  5BA1D0092DD34B1600CF7906 /* AppDelegate.swift */,
84
58
  13B07FB51A68108700A75B9A /* Images.xcassets */,
85
- 13B07FB61A68108700A75B9A /* Info.plist */,
86
59
  81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
87
60
  EDEB0408D1807C711EE2B6BB /* PrivacyInfo.xcprivacy */,
88
61
  );
@@ -111,7 +84,6 @@
111
84
  children = (
112
85
  13B07FAE1A68108700A75B9A /* TapjoyReactNativeSdkExample */,
113
86
  832341AE1AAA6A7D00B99B32 /* Libraries */,
114
- 00E356EF1AD99517003FC87E /* TapjoyReactNativeSdkExampleTests */,
115
87
  83CBBA001A601CBA00E9B192 /* Products */,
116
88
  2D16E6871FA4F8E400B85C8A /* Frameworks */,
117
89
  BBD78D7AC51CEA395F1C20DB /* Pods */,
@@ -151,14 +123,12 @@
151
123
  A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */,
152
124
  00E356EA1AD99517003FC87E /* Sources */,
153
125
  00E356EB1AD99517003FC87E /* Frameworks */,
154
- 00E356EC1AD99517003FC87E /* Resources */,
155
126
  C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */,
156
127
  F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */,
157
128
  );
158
129
  buildRules = (
159
130
  );
160
131
  dependencies = (
161
- 00E356F51AD99517003FC87E /* PBXTargetDependency */,
162
132
  );
163
133
  name = TapjoyReactNativeSdkExampleTests;
164
134
  productName = TapjoyReactNativeSdkExampleTests;
@@ -224,13 +194,6 @@
224
194
  /* End PBXProject section */
225
195
 
226
196
  /* Begin PBXResourcesBuildPhase section */
227
- 00E356EC1AD99517003FC87E /* Resources */ = {
228
- isa = PBXResourcesBuildPhase;
229
- buildActionMask = 2147483647;
230
- files = (
231
- );
232
- runOnlyForDeploymentPostprocessing = 0;
233
- };
234
197
  13B07F8E1A680F5B00A75B9A /* Resources */ = {
235
198
  isa = PBXResourcesBuildPhase;
236
199
  buildActionMask = 2147483647;
@@ -411,14 +374,6 @@
411
374
  };
412
375
  /* End PBXSourcesBuildPhase section */
413
376
 
414
- /* Begin PBXTargetDependency section */
415
- 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
416
- isa = PBXTargetDependency;
417
- target = 13B07F861A680F5B00A75B9A /* TapjoyReactNativeSdkExample */;
418
- targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
419
- };
420
- /* End PBXTargetDependency section */
421
-
422
377
  /* Begin XCBuildConfiguration section */
423
378
  00E356F61AD99517003FC87E /* Debug */ = {
424
379
  isa = XCBuildConfiguration;
@@ -1,14 +1,10 @@
1
1
  const path = require('path');
2
2
  const escape = require('escape-string-regexp');
3
- const exclusionList = require('metro-config/src/defaults/exclusionList');
4
3
  const pak = require('../package.json');
5
4
  const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');
6
5
 
7
6
  const root = path.resolve(__dirname, '..');
8
-
9
- const modules = Object.keys({
10
- ...pak.peerDependencies,
11
- });
7
+ const modules = Object.keys(pak.peerDependencies);
12
8
 
13
9
  /**
14
10
  * Metro configuration
@@ -17,20 +13,18 @@ const modules = Object.keys({
17
13
  * @type {import('@react-native/metro-config').MetroConfig}
18
14
  */
19
15
 
20
- module.exports = mergeConfig(getDefaultConfig(__dirname), {
16
+ const defaultConfig = getDefaultConfig(__dirname);
17
+
18
+ const blockList = modules.map(
19
+ (m) => new RegExp(`^${escape(path.join(root, 'node_modules', m))}\\/.*$`)
20
+ );
21
+
22
+ module.exports = mergeConfig(defaultConfig, {
21
23
  projectRoot: __dirname,
22
24
  watchFolders: [root],
23
25
 
24
- // We need to make sure that only one version is loaded for peerDependencies
25
- // So we block them at the root, and alias them to the versions in example's node_modules
26
26
  resolver: {
27
- blacklistRE: exclusionList(
28
- modules.map(
29
- (m) =>
30
- new RegExp(`^${escape(path.join(root, 'node_modules', m))}\\/.*$`)
31
- )
32
- ),
33
-
27
+ blockList: blockList,
34
28
  extraNodeModules: modules.reduce((acc, name) => {
35
29
  acc[name] = path.join(__dirname, 'node_modules', name);
36
30
  return acc;
@@ -1,41 +1,44 @@
1
1
  {
2
2
  "name": "TapjoyReactNativeSdkExample",
3
- "version": "14.4.0",
3
+ "version": "14.6.0",
4
4
  "private": true,
5
5
  "scripts": {
6
6
  "android": "react-native run-android",
7
7
  "ios": "react-native run-ios",
8
8
  "start": "react-native start",
9
- "pods": "pod-install --quiet"
9
+ "pods": "pod-install --quiet",
10
+ "set-new-arch": "./scripts/set-arch.sh true",
11
+ "set-old-arch": "./scripts/set-arch.sh false"
10
12
  },
11
13
  "dependencies": {
12
14
  "tapjoy-react-native-sdk": "file:../",
13
15
  "@react-native-async-storage/async-storage": "^2.1.2",
14
16
  "@react-native-masked-view/masked-view": "^0.3.2",
15
- "@react-native-picker/picker": "^2.11.0",
17
+ "@react-native-picker/picker": "^2.11.1",
16
18
  "@react-navigation/bottom-tabs": "^7.3.13",
17
19
  "@react-navigation/native": "^7.1.9",
20
+ "@react-native/new-app-screen": "0.81.0",
18
21
  "dayjs": "^1.11.13",
19
- "react": "19.0.0",
20
- "react-native": "0.79.2",
21
- "react-native-gesture-handler": "^2.20.0",
22
+ "react": "19.1.0",
23
+ "react-native": "0.81.0",
24
+ "react-native-gesture-handler": "^2.28.0",
22
25
  "react-native-picker-select": "^9.3.1",
23
- "react-native-reanimated": "^3.15.3",
24
- "react-native-safe-area-context": "^5.4.0",
25
- "react-native-screens": "^4.10.0",
26
- "react-native-toast-message": "^2.2.1",
26
+ "react-native-reanimated": "^3.19.1",
27
+ "react-native-safe-area-context": "^5.6.1",
28
+ "react-native-screens": "^4.15.2",
29
+ "react-native-toast-message": "^2.3.3",
27
30
  "react-native-tracking-transparency": "^0.1.2"
28
31
  },
29
32
  "devDependencies": {
30
33
  "@babel/core": "^7.25.2",
31
34
  "@babel/preset-env": "^7.25.4",
32
35
  "@babel/runtime": "^7.25.6",
33
- "@react-native-community/cli": "18.0.0",
34
- "@react-native-community/cli-platform-android": "18.0.0",
35
- "@react-native-community/cli-platform-ios": "18.0.0",
36
- "@react-native/babel-preset": "0.79.2",
37
- "@react-native/metro-config": "^0.76.6",
38
- "@react-native/typescript-config": "0.79.2"
36
+ "@react-native-community/cli": "20.0.0",
37
+ "@react-native-community/cli-platform-android": "20.0.0",
38
+ "@react-native-community/cli-platform-ios": "20.0.0",
39
+ "@react-native/babel-preset": "0.81.0",
40
+ "@react-native/metro-config": "0.81.0",
41
+ "@react-native/typescript-config": "0.81.0"
39
42
  },
40
43
  "engines": {
41
44
  "node": ">=18"
@@ -0,0 +1,25 @@
1
+ #!/bin/sh
2
+ set -eu
3
+ BASE_DIR="$(cd "$(dirname "$0")" && pwd)"
4
+ GRADLE_PROPERTIES="$BASE_DIR/../android/gradle.properties"
5
+ PODFILE="$BASE_DIR/../ios/Podfile"
6
+ ANDROID_DIR="$BASE_DIR/../android"
7
+ IOS_DIR="$BASE_DIR/../ios"
8
+ if [ "$#" -ne 1 ]; then
9
+ echo "Usage: set-arch.sh <true|false>"
10
+ exit 1
11
+ fi
12
+ VALUE="$1"
13
+ if [ "$VALUE" != "true" ] && [ "$VALUE" != "false" ]; then
14
+ echo "Expected true or false"
15
+ exit 1
16
+ fi
17
+ /usr/bin/sed -i '' "s/^newArchEnabled=.*/newArchEnabled=$VALUE/" "$GRADLE_PROPERTIES"
18
+ /usr/bin/sed -i '' "s/:new_arch_enabled => .*/:new_arch_enabled => $VALUE/" "$PODFILE"
19
+
20
+ echo "Running gradle clean..."
21
+ cd "$ANDROID_DIR" && ./gradlew clean
22
+
23
+ echo "Running pod install..."
24
+ cd "$IOS_DIR" && pod install
25
+
@@ -1,4 +1,4 @@
1
- import React, { useState } from 'react';
1
+ import { useState } from 'react';
2
2
  import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
3
3
  import { NavigationContainer } from '@react-navigation/native';
4
4
  import { Dimensions } from 'react-native';
@@ -20,7 +20,6 @@ export default function App() {
20
20
  <ConnectContext.Provider value={{ isSdkConnected, setIsSdkConnected }}>
21
21
  <Tab.Navigator
22
22
  screenOptions={{
23
- scrollEnabled: true,
24
23
  tabBarLabelPosition: 'beside-icon',
25
24
  tabBarLabelStyle: styles.tabBarLabelStyle,
26
25
  tabBarIconStyle: styles.tabBarIconStyle,
@@ -1,12 +1,16 @@
1
1
  import React, { useState, useEffect, useContext } from 'react';
2
2
  import {
3
3
  View,
4
- SafeAreaView,
5
4
  TextInput,
6
5
  Platform,
7
6
  Text,
8
7
  ScrollView,
8
+ TurboModuleRegistry
9
9
  } from 'react-native';
10
+ import {
11
+ SafeAreaProvider,
12
+ useSafeAreaInsets,
13
+ } from 'react-native-safe-area-context';
10
14
  import AsyncStorage from '@react-native-async-storage/async-storage';
11
15
  import {
12
16
  getTrackingStatus,
@@ -73,17 +77,17 @@ const MainScreen: React.FC = () => {
73
77
  }
74
78
 
75
79
  await Tapjoy.connect(sdkKey, flags, (event: TapjoyEvent) => {
76
- setStatusLabelText(`Tapjoy SDK connected with Warning: ErrorCode: ${event.code} ${event.message} `);
77
- },
80
+ setStatusLabelText(`Tapjoy SDK connected with Warning: ErrorCode: ${event.code} ${event.message} `);
81
+ },
78
82
  );
79
83
  setIsConnecting(false);
80
84
  setSelectedLoggingLevel(await Tapjoy.getLoggingLevel());
81
85
  Tapjoy.setCustomParameter("my_parameter");
82
86
  setStatusLabelText(
83
87
  'Tapjoy SDK Connected' +
84
- (Object.keys(flags).length > 0
85
- ? `\nFlags: ${JSON.stringify(flags)}`
86
- : '')
88
+ (Object.keys(flags).length > 0
89
+ ? `\nFlags: ${JSON.stringify(flags)}`
90
+ : '')
87
91
  );
88
92
  setIsSdkConnected(true);
89
93
  } catch (error: any) {
@@ -107,9 +111,9 @@ const MainScreen: React.FC = () => {
107
111
  let result = await Tapjoy.getCurrencyBalance();
108
112
  setStatusLabelText(
109
113
  'getCurrencyBalance returned ' +
110
- result.currencyName +
111
- ': ' +
112
- result.amount
114
+ result.currencyName +
115
+ ': ' +
116
+ result.amount
113
117
  );
114
118
  } catch (error: any) {
115
119
  setStatusLabelText(error.toString());
@@ -154,69 +158,81 @@ const MainScreen: React.FC = () => {
154
158
  }
155
159
  };
156
160
 
161
+ const safeAreaInsets = useSafeAreaInsets();
162
+
157
163
  return (
158
- <View style={styles.mainContainer}>
159
- <ScrollView>
160
- <SafeAreaView style={styles.container}>
161
- <View style={styles.lineGap}>
162
- <Text style={styles.statusText}>{statusLabelText}</Text>
163
- </View>
164
- <View style={styles.inputContainer}>
165
- <TextInput
166
- style={styles.textInput}
167
- value={sdkKey}
168
- onChangeText={setSdkKey}
169
- placeholder="Enter SDK Key"
170
- />
171
- <Button
172
- title="Connect"
173
- style={[styles.zeroFlex, styles.leftSpacing]}
174
- onPress={handleConnect}
175
- disabled={isConnecting || Tapjoy.isConnected()}
176
- />
177
- </View>
178
- <View style={styles.currencyOuterContainer}>
179
- <Text style={styles.labelText}>{'Managed Currency:'}</Text>
164
+ <SafeAreaProvider>
165
+ <View style={[
166
+ styles.mainContainer,
167
+ {
168
+ paddingTop: safeAreaInsets.top,
169
+ paddingBottom: safeAreaInsets.bottom,
170
+ paddingLeft: safeAreaInsets.left,
171
+ paddingRight: safeAreaInsets.right,
172
+ },
173
+ ]}>
174
+ <ScrollView>
175
+ <View style={styles.container}>
176
+ <View style={styles.lineGap}>
177
+ <Text style={styles.statusText}>{statusLabelText}</Text>
178
+ </View>
180
179
  <View style={styles.inputContainer}>
181
- <Text style={styles.userPropertiesLabel}>Amount:</Text>
182
180
  <TextInput
183
181
  style={styles.textInput}
184
- keyboardType='numeric'
185
- value={curerncySpendAwardAmount}
186
- onChangeText={handleAmountChange}
187
- placeholder="Managed Currency value"
188
- />
189
- </View>
190
- <View style={styles.currencyInnerContainer}>
191
- <Button
192
- style={styles.buttonGap}
193
- title="Get"
194
- onPress={getCurrencyBalance}
182
+ value={sdkKey}
183
+ onChangeText={setSdkKey}
184
+ placeholder="Enter SDK Key"
195
185
  />
196
186
  <Button
197
- style={styles.buttonGap}
198
- title="Spend"
199
- onPress={spendCurrency}
187
+ title="Connect"
188
+ style={[styles.zeroFlex, styles.leftSpacing]}
189
+ onPress={handleConnect}
190
+ disabled={isConnecting || Tapjoy.isConnected()}
200
191
  />
201
- <Button title="Award" onPress={awardCurrency} />
202
192
  </View>
203
- <View style={styles.selectionContainer}>
204
- <View style={styles.horizontalContainer}>
205
- <Text style={styles.userPropertiesLabel}>Logging Level:</Text>
206
- <SelectionMenu
207
- data={loggingLevelData}
208
- onSelectItem={handleLoggingLevelChange}
209
- initialSelectedItem={loggingLevelData[selectedLoggingLevel]}
193
+ <View style={styles.currencyOuterContainer}>
194
+ <Text style={styles.labelText}>{'Managed Currency:'}</Text>
195
+ <View style={styles.inputContainer}>
196
+ <Text style={styles.userPropertiesLabel}>Amount:</Text>
197
+ <TextInput
198
+ style={styles.textInput}
199
+ keyboardType='numeric'
200
+ value={curerncySpendAwardAmount}
201
+ onChangeText={handleAmountChange}
202
+ placeholder="Managed Currency value"
210
203
  />
211
204
  </View>
205
+ <View style={styles.currencyInnerContainer}>
206
+ <Button
207
+ style={styles.buttonGap}
208
+ title="Get"
209
+ onPress={getCurrencyBalance}
210
+ />
211
+ <Button
212
+ style={styles.buttonGap}
213
+ title="Spend"
214
+ onPress={spendCurrency}
215
+ />
216
+ <Button title="Award" onPress={awardCurrency} />
217
+ </View>
218
+ <View style={styles.selectionContainer}>
219
+ <View style={styles.horizontalContainer}>
220
+ <Text style={styles.userPropertiesLabel}>Logging Level:</Text>
221
+ <SelectionMenu
222
+ data={loggingLevelData}
223
+ onSelectItem={handleLoggingLevelChange}
224
+ initialSelectedItem={loggingLevelData[selectedLoggingLevel]}
225
+ />
226
+ </View>
227
+ </View>
212
228
  </View>
213
229
  </View>
214
- </SafeAreaView>
215
- </ScrollView>
216
- <Text style={styles.versionText}>
217
- Version: {TJVersion.getPluginVersion()}
218
- </Text>
219
- </View>
230
+ </ScrollView>
231
+ <Text style={styles.versionText}>
232
+ Version: {TJVersion.getPluginVersion()}
233
+ </Text>
234
+ </View>
235
+ </SafeAreaProvider>
220
236
  );
221
237
  };
222
238