Best JavaScript code snippet using appium-android-driver
potslot.js
Source:potslot.js
1/**2 * Module description3 * @moduleName PotSlot4 * @snippet PotSlot.snippet5PotSlot({6 potskin: potskin,7 onClick: function () {}8})9 */10bento.define('ui/potslot', [11 'bento',12 'bento/math/vector2',13 'bento/math/rectangle',14 'bento/components/sprite',15 'bento/components/clickable',16 'bento/entity',17 'bento/eventsystem',18 'bento/gui/clickbutton',19 'bento/gui/counter',20 'bento/gui/text',21 'bento/utils',22 'bento/tween',23 'components/spritecontainer',24 'modules/timemanager',25 'components/sortedclickable',26 'globals',27 'modules/skinmanager',28 'ui/potunlockeddialog',29 'modules/savemanager',30 'modules/ads',31 'modules/localization',32 'ui/vipdialog',33 'ui/shopdialog'34], function (35 Bento,36 Vector2,37 Rectangle,38 Sprite,39 Clickable,40 Entity,41 EventSystem,42 ClickButton,43 Counter,44 Text,45 Utils,46 Tween,47 SpriteContainer,48 TimeManager,49 SortedClickable,50 Globals,51 SkinManager,52 PotUnlockedDialog,53 SaveManager,54 Ads,55 Localization,56 VipDialog,57 ShopDialog58) {59 'use strict';60 return function (settings) {61 // --- PARAMETERS ---62 var index = settings.index || 0;63 var skin = settings.skin;64 var onClick = settings.onClick || function () {};65 var onStateChanged = settings.onStateChanged || function () {};66 var isScrolling = settings.isScrolling || function () {67 return false;68 };69 var lastCoinCount = 0;70 var coinCount = SaveManager.load('coinCount');71 var unlockMethod = SkinManager.getPotSkinUnlockMethod(skin);72 var unlockMethodValue = unlockMethod.value;73 var purchaseCost = unlockMethodValue;74 if (SkinManager.getAllUnlockedPotSkins().length < 2 && unlockMethod.method === "coins") {75 //unlockMethodValue = 0;76 }77 var canBuy = function () {78 return (coinCount >= purchaseCost);79 };80 var updateCoinValue = function () {81 coinCount = SaveManager.load('coinCount');82 };83 // --- COMPONENTS ---84 var unlockedStuff = new Entity({85 name: 'unlockedStuff',86 position: new Vector2(0, 0),87 boundingBox: new Rectangle(-22, -22, 44, 44),88 components: [89 new SpriteContainer({90 name: 'buttonSpriteContainer',91 imageName: 'ui/char-back-unlocked2',92 originRelative: new Vector2(0.5, 0.5),93 position: new Vector2(0, 0),94 scale: Globals.pixelScaleUIV95 }),96 new SpriteContainer({97 name: 'buttonIcon',98 spriteSheet: 'potskins/' + skin,99 originRelative: new Vector2(0.5, 0.5),100 position: new Vector2(0, -16),101 scale: Globals.pixelScaleV.scalarMultiply(1.75)102 }),103 new SortedClickable({104 onClick: function (data) {105 if (!isScrolling()) {106 onClick();107 Bento.audio.playSound('sfx_clickbutton');108 }109 }110 })111 ]112 });113 var purchaseButton = new ClickButton({114 name: 'purchaseButton',115 sfx: 'sfx_clickbutton',116 sprite: new Sprite({117 imageName: 'ui/greenbutton',118 frameCountX: 1,119 frameCountY: 3,120 originRelative: new Vector2(0.5, 0.5),121 animations: {122 up: {123 frames: [0],124 speed: 0125 },126 down: {127 frames: [1],128 speed: 0129 },130 inactive: {131 frames: [2],132 speed: 0133 }134 }135 }),136 position: new Vector2(0, 12),137 scale: Globals.pixelScaleUIV.scalarMultiply(0.7),138 sort: true,139 onClick: function () {140 if (!isScrolling()) {141 if (canBuy()) {142 Utils.takeCoins(purchaseCost, 'pots', skin);143 Bento.audio.stopSound('sfx_coin_collect_loop');144 EventSystem.fire('GameAnalytics-addDesignEvent', {145 eventId: "potsUnlocked:" + skin146 });147 SkinManager.makePotSkinUnlocked(skin);148 new PotUnlockedDialog({149 potSkin: skin,150 onComplete: function () {151 onStateChanged('unlocked');152 }153 });154 } else {155 new ShopDialog({});156 }157 }158 }159 });160 var coinPurchaseStuff = new Entity({161 name: 'coinPurchaseStuff',162 position: new Vector2(0, 0),163 components: [164 purchaseButton,165 new SpriteContainer({166 imageName: 'coin',167 originRelative: new Vector2(0.5, 0.5),168 position: new Vector2(-11, 12),169 alpha: 1,170 scale: Globals.pixelScaleUIV.scalarMultiply(1),171 rotation: 0172 }),173 new Text({174 fontSettings: Utils.getTextStyle('potPrice'),175 name: 'priceText',176 position: new Vector2(-4, 11),177 text: (purchaseCost > 0) ? purchaseCost.toString() : Localization.getText('free'),178 maxWidth: 22,179 maxHeight: 10180 })181 ]182 });183 var levelUnlockStuff = new Entity({184 name: 'coinPurchaseStuff',185 position: new Vector2(0, 0),186 components: [187 new SpriteContainer({188 imageName: 'ui/lockedlevelbackground',189 originRelative: new Vector2(0.5, 0.5),190 position: new Vector2(0, 10),191 alpha: canBuy ? 1 : 0.5,192 scale: Globals.pixelScaleUIV.multiply(new Vector2(0.35, 0.25)),193 frameCountX: 1,194 frameCountY: 1,195 animations: {196 default: {197 frames: [0],198 speed: 0199 }200 },201 rotation: 0202 }),203 new Text({204 fontSettings: Utils.getTextStyle('potLevel'),205 name: 'levelText',206 position: new Vector2(0, 9.5),207 text: Localization.getText('levelX').replace('{LEVEL}', unlockMethodValue.toString()),208 maxWidth: 32,209 maxHeight: 10210 })211 ]212 });213 var isWatching = false;214 var adIcon = new SpriteContainer({215 imageName: 'ui/icons/vid',216 originRelative: new Vector2(0.5, 0.5),217 position: new Vector2(0, 12),218 alpha: canBuy ? 1 : 0.5,219 scale: Globals.pixelScaleUIV.scalarMultiply(0.4),220 rotation: 0221 });222 var adButton = new ClickButton({223 name: 'adButton',224 sfx: 'sfx_clickbutton',225 sprite: new Sprite({226 imageName: 'ui/orangebutton',227 frameCountX: 1,228 frameCountY: 3,229 originRelative: new Vector2(0.5, 0.5),230 animations: {231 up: {232 frames: [0],233 speed: 0234 },235 down: {236 frames: [1],237 speed: 0238 },239 inactive: {240 frames: [0],241 speed: 0242 }243 }244 }),245 position: new Vector2(0, 12),246 scale: Globals.pixelScaleUIV.scalarMultiply(0.7),247 sort: true,248 onClick: function () {249 var unlockSkin = function () {250 EventSystem.fire('GameAnalytics-addDesignEvent', {251 eventId: "potsUnlocked:" + skin252 });253 SkinManager.makePotSkinUnlocked(skin);254 new PotUnlockedDialog({255 potSkin: skin,256 doAnother: true,257 onComplete: function () {258 onStateChanged('unlocked');259 }260 });261 };262 if (!isScrolling() && !isWatching) {263 if (Utils.isDev()) {264 window.alert("This is a Rewarded Ad!");265 Bento.input.resetPointers();266 unlockSkin();267 } else {268 isWatching = true;269 Ads.showRewarded(function () {270 isWatching = false;271 EventSystem.fire('GameAnalytics-addDesignEvent', {272 eventId: "ads:rewardedSkinUnlockMenu",273 value: 1274 });275 unlockSkin();276 }, function (e) {277 isWatching = false;278 EventSystem.fire('GameAnalytics-addDesignEvent', {279 eventId: "ads:rewardedSkinUnlockMenu",280 value: 0281 });282 }, "SkinUnlockMenu");283 }284 }285 }286 }).attach({287 name: 'rewardedChecker',288 update: function () {289 if (adButton.active && !Ads.canShowRewarded()) {290 adButton.setActive(false);291 adIcon.alpha = 0.5;292 }293 if (!adButton.active && Ads.canShowRewarded()) {294 adButton.setActive(true);295 adIcon.alpha = 1;296 }297 }298 });299 var adUnlockStuff = new Entity({300 name: 'adUnlockStuff',301 position: new Vector2(0, 0),302 components: [303 adButton,304 adIcon305 ]306 });307 var lockedStuff = new Entity({308 name: 'unlockedStuff',309 position: new Vector2(0, 0),310 boundingBox: new Rectangle(-22, -22, 44, 44),311 components: [312 new SpriteContainer({313 name: 'buttonSpriteContainer',314 imageName: 'ui/char-back',315 originRelative: new Vector2(0.5, 0.5),316 position: new Vector2(0, 0),317 scale: Globals.pixelScaleUIV318 }),319 new SpriteContainer({320 name: 'buttonIcon',321 spriteSheet: 'boxes/' + skin,322 originRelative: new Vector2(0.5, 0.5),323 position: new Vector2(0, -10),324 scale: Globals.pixelScaleUIV.scalarMultiply(1.33)325 }),326 ]327 });328 switch (unlockMethod.method) {329 case "coins":330 lockedStuff.attach(coinPurchaseStuff);331 break;332 case "level":333 lockedStuff.attach(levelUnlockStuff);334 break;335 case "ad":336 lockedStuff.attach(adUnlockStuff);337 break;338 }339 // --- ENTITY ---340 var currentState = '';341 var slot = new Entity({342 name: 'slot-' + index,343 position: settings.position || new Vector2(0, 0),344 components: []345 }).extend({346 getState: function () {347 return currentState;348 },349 getSkin: function () {350 return skin;351 }352 });353 // get new state354 currentState = SkinManager.getPotSkinState(skin);355 //attach new stuff356 switch (currentState) {357 case 'locked':358 slot.attach(lockedStuff);359 break;360 case 'unlocked':361 slot.attach(unlockedStuff);362 break;363 }364 // event handler stuff365 slot.attach({366 name: 'eventstuff',367 start: function () {368 EventSystem.on('coinsUpdated', updateCoinValue);369 },370 destroy: function () {371 EventSystem.off('coinsUpdated', updateCoinValue);372 }373 });374 updateCoinValue();375 return slot;376 };...
UnlockScreen.js
Source:UnlockScreen.js
1import React from "react";2import {3 Image,4 ScrollView,5 StyleSheet,6 Modal,7 View,8 TouchableOpacity9} from "react-native";10import { connect } from "react-redux";11import PinView from "react-native-pin-view";12import Constants from "expo-constants";13import * as LocalAuthentication from "expo-local-authentication";14import Custom_Text from "../components/shared/Custom_Text";15import Custom_Header from "../components/shared/Custom_Header";16import Custom_HeaderTitle from "../components/shared/Custom_HeaderTitle";17import Custom_HeaderButton from "../components/shared/Custom_HeaderButton";18import Fonts from "../constants/Fonts";19import Colors from "../constants/Colors";20import Images from "../constants/Images";21import Custom_Button from "../components/shared/Custom_Button";22import { authSuccess } from "../actions";23import { isIos } from "../constants/Layout";24class UnlockScreen extends React.Component {25 constructor(props) {26 super(props);27 this.state = {28 codeCreated: false,29 codeMatched: false,30 code: null,31 showCodeError: false,32 availableUnlockMethods: null,33 showModal: false,34 showFailedMessage: false,35 unlockText: "",36 text: "",37 isModalVisible: false,38 showAuthError: false,39 showAuthSuccess: false40 };41 }42 componentDidMount() {43 this.authenticateAsync();44 }45 authenticateAsync = async () => {46 const { unlockMethod, isAuthenticated } = this.props;47 if (unlockMethod !== null && !isAuthenticated) {48 LocalAuthentication.hasHardwareAsync()49 .then(res => {50 if (res) {51 if (unlockMethod === "fingerprint") {52 this.setState({53 unlockText: "Unlock with Fingerprint",54 isModalVisible: true55 });56 } else if (unlockMethod === "faceId") {57 this.setState({58 unlockText: "Unlock with Face ID",59 isModalVisible: true60 });61 }62 this.getUnlockText();63 LocalAuthentication.isEnrolledAsync()64 .then(res => {65 if (res) {66 LocalAuthentication.authenticateAsync()67 .then(res => {68 if (res.success) {69 if (unlockMethod === "fingerprint") {70 this.showAuthSuccess(`Fingerprint \nAuthorized`);71 } else if (unlockMethod === "faceId") {72 this.showAuthSuccess(`Face ID \nAuthorized`);73 }74 this.props.authenticateUser();75 } else {76 if (unlockMethod === "fingerprint") {77 this.showAuthError(`Fingerprint Not \nRecognized`);78 } else if (unlockMethod === "faceId") {79 this.showAuthError(`Face ID Not \nRecognized`);80 }81 }82 })83 .catch(err => console.log("err: ", err));84 } else {85 this.showAuthError(86 `To use this feature you need to first\nset up ${87 availableUnlockMethods === "fingerprint"88 ? "Fingerprint"89 : "Face"90 } on your device.`91 );92 }93 })94 .catch(err => console.log("err: ", err));95 }96 })97 .catch(err => console.log("err: ", err));98 }99 };100 resetAuth = () => {101 this.getUnlockText();102 this.setState({103 showAuthError: false,104 showAuthSuccess: false,105 authErrorStr: "",106 authSuccessStr: ""107 });108 };109 showAuthError = error => {110 this.setState({111 showAuthError: true,112 authErrorStr: error,113 text: "Try Again"114 });115 };116 showAuthSuccess = str => {117 this.setState({118 showAuthSuccess: true,119 authSuccessStr: str120 });121 };122 getUnlockText = () => {123 const { unlockMethod } = this.props;124 if (unlockMethod === "fingerprint") {125 this.setState({ text: "Touch Sensor Now" });126 } else if (unlockMethod === "faceId") {127 this.setState({ text: "Look at Sensor Now" });128 }129 };130 getUnlockImage = () => {131 const { showAuthError, showAuthSuccess } = this.state;132 const { unlockMethod } = this.props;133 if (unlockMethod === "fingerprint") {134 if (showAuthError) {135 return Images.fingerPrintRed;136 } else if (showAuthSuccess) {137 return Images.fingerPrintGreen;138 }139 return Images.fingerPrint;140 } else if (unlockMethod === "faceId") {141 if (showAuthError) {142 return Images.faceRed;143 } else if (showAuthSuccess) {144 return Images.faceGreen;145 }146 return Images.face;147 }148 };149 render() {150 const { authenticateUser, pin } = this.props;151 const {152 showCodeError,153 codeMatched,154 isModalVisible,155 unlockText,156 showAuthError,157 authErrorStr,158 text159 } = this.state;160 return (161 <View style={styles.container}>162 <ScrollView>163 <View style={{ marginTop: Constants.statusBarHeight + 42 }}>164 <View>165 <Image source={Images.fullLogo} style={{ alignSelf: "center" }} />166 <Custom_Text167 value="Wallet"168 style={{169 textAlign: "center",170 marginBottom: 24171 }}172 size={48}173 />174 </View>175 <View>176 {showCodeError && (177 <View178 style={{179 position: "absolute",180 top: 40,181 alignSelf: "center"182 }}183 >184 <View185 style={{186 flexDirection: "row",187 justifyContent: "center",188 alignItems: "center"189 }}190 >191 <Custom_Text192 value="PIN is incorrect"193 style={{194 textAlign: "center",195 marginRight: 10196 }}197 color={Colors.errorBackground}198 size={16}199 />200 <Image source={Images.smallErrIcon} />201 </View>202 </View>203 )}204 <View style={{ marginTop: 0 }}>205 <PinView206 disabled={codeMatched}207 onComplete={(val, clear) => {208 const v = val.length > 4 ? val.substring(0, 3) : val;209 if (v === pin) {210 this.setState({211 codeMatched: true,212 showCodeError: false213 });214 setTimeout(() => authenticateUser(), 1000);215 } else {216 this.setState({217 codeMatched: false,218 showCodeError: true219 });220 clear();221 }222 }}223 pinLength={4}224 inputViewStyle={{225 marginHorizontal: 20,226 width: 16,227 height: 16,228 borderRadius: 8,229 borderWidth: 2,230 borderColor: codeMatched ? Colors.freshGreen : Colors.text231 }}232 inputBgOpacity={1}233 inputBgColor={Colors.buttonText}234 inputActiveBgColor={235 codeMatched ? Colors.freshGreen : Colors.text236 }237 buttonBgColor={Colors.pinInputBackground}238 keyboardViewTextStyle={{239 fontFamily: "DMSansBold",240 fontSize: 24,241 color: Colors.text,242 tintColor: Colors.text243 }}244 keyboardViewStyle={{245 marginVertical: 8,246 height: 64,247 width: 64248 }}249 keyboardContainerStyle={{250 marginTop: 48,251 marginBottom: 0252 }}253 keyboardViewItemText={{254 tintColor: Colors.text255 }}256 />257 </View>258 </View>259 </View>260 </ScrollView>261 <Modal262 visible={isModalVisible && !isIos}263 animationType={"none"}264 transparent={true}265 onRequestClose={() => {}}266 >267 <View268 style={{269 flex: 1,270 justifyContent: "center",271 backgroundColor: Colors.modalBackground272 }}273 >274 <View275 style={{276 backgroundColor: Colors.buttonText,277 marginHorizontal: 40,278 borderRadius: 10,279 padding: 20280 }}281 >282 <View>283 <Custom_Text284 value={unlockText}285 style={{286 marginBottom: 30,287 textAlign: "center"288 }}289 color={Colors.text}290 size={20}291 isBold292 />293 </View>294 <View>295 <Image296 source={this.getUnlockImage()}297 style={{298 alignSelf: "center",299 height: 66,300 width: 66,301 marginBottom: 16302 }}303 />304 {showAuthError && (305 <Custom_Text306 value={authErrorStr}307 style={{308 textAlign: "center"309 }}310 color={Colors.text}311 size={12}312 />313 )}314 <TouchableOpacity onPress={() => this.authenticateAsync()}>315 <Custom_Text316 value={text}317 style={{318 textAlign: "center",319 marginTop: 8320 }}321 color={Colors.grayText}322 size={12}323 />324 </TouchableOpacity>325 </View>326 <View style={{ alignItems: "flex-end" }}>327 <TouchableOpacity328 onPress={() => this.setState({ isModalVisible: false })}329 >330 <Custom_Text331 value="Use PIN"332 style={{333 marginTop: 10334 }}335 size={14}336 isBold337 />338 </TouchableOpacity>339 </View>340 </View>341 </View>342 </Modal>343 </View>344 );345 }346}347const styles = StyleSheet.create({348 container: {349 flex: 1,350 backgroundColor: Colors.background351 }352});353const mapStateToProps = ({ pin, unlockMethod, isAuthenticated }) => ({354 pin,355 unlockMethod,356 isAuthenticated357});358const mapDispatchToProps = dispatch => ({359 authenticateUser: () => dispatch(authSuccess())360});...
SettingsScreen.js
Source:SettingsScreen.js
1import React, { useEffect, useState } from "react";2import { ScrollView, StyleSheet, View } from "react-native";3import { connect } from "react-redux";4import * as WebBrowser from "expo-web-browser";5import * as LocalAuthentication from "expo-local-authentication";6import { persistStore } from "redux-persist";7import Custom_Text from "../components/shared/Custom_Text";8import Custom_Header from "../components/shared/Custom_Header";9import Custom_HeaderTitle from "../components/shared/Custom_HeaderTitle";10import Custom_HeaderButton from "../components/shared/Custom_HeaderButton";11import Colors from "../constants/Colors";12import Custom_NavButton from "../components/shared/Custom_NavButton";13import Custom_MultiSelectInput from "../components/shared/Custom_MultiSelectInput";14import currencies from "../constants/currencies";15import { updateBaseCurrency, getMarketData, purgeStore } from "../actions";16import config from "../constants/config";17import appConfig from "../app.config";18import ResetDataModal from "../components/shared/ResetDataModal";19import { screenWidth } from "../constants/Layout";20function SettingsScreen({21 navigation,22 unlockMethod,23 baseCurrency,24 updateAccountBaseCurrency,25 getMarketData,26 pin,27 purgeStore,28}) {29 // console.log(persistor);30 const [availableUnlockMethods, setAvailableUnlockMethods] = useState(null);31 const [unlockText, setUnlockText] = useState(null);32 const [showModal, setShowModal] = useState(false);33 const [showPinError, setShowPinError] = useState(false);34 const [code, setCode] = useState("");35 useEffect(() => {36 getAvailableUnlockMethods();37 getMarketData(baseCurrency.value);38 }, [availableUnlockMethods]);39 const handleOpenWithWebBrowser = url => {40 WebBrowser.openBrowserAsync(url);41 };42 const getAvailableUnlockMethods = async () => {43 LocalAuthentication.hasHardwareAsync()44 .then(res => {45 if (res) {46 LocalAuthentication.supportedAuthenticationTypesAsync().then(res => {47 if (res.includes(1) && !res.includes(2)) {48 setUnlockText("Enable Fingerprint ID");49 setAvailableUnlockMethods("fingerprint");50 } else if (res.includes(2) && !res.includes(1)) {51 setUnlockText("Enable Face ID");52 setAvailableUnlockMethods("faceId");53 } else if (res.includes(1) && res.includes(2)) {54 setUnlockText("Choose Unlock Method");55 setAvailableUnlockMethods("both");56 } else {57 setUnlockText(null);58 }59 });60 }61 })62 .catch(err => console.log(err));63 };64 return (65 <View style={styles.container}>66 <Custom_Header67 left={68 <Custom_HeaderButton69 onPress={() => {70 navigation.goBack();71 }}72 type="icon"73 icon="md-arrow-back"74 iconColor={Colors.text}75 />76 }77 center={<Custom_HeaderTitle text="Settings" />}78 right={<View />}79 />80 <ScrollView>81 <View style={{ marginTop: 15, marginHorizontal: 15 }}>82 <Custom_Text83 value="Set Default Fiat Currency"84 style={{ marginLeft: 15, marginBottom: 10 }}85 isBold86 />87 <Custom_MultiSelectInput88 value={baseCurrency}89 options={currencies}90 onValueChange={updateAccountBaseCurrency}91 />92 </View>93 <View style={{ marginTop: 15, marginHorizontal: 15 }}>94 <Custom_Text95 value="Security"96 style={{ marginLeft: 15, marginBottom: 10 }}97 isBold98 />99 <Custom_NavButton100 value="Change PIN"101 handleOnPress={() => {102 navigation.navigate({103 key: "ChangePinScreen",104 routeName: "ChangePinScreen",105 });106 }}107 />108 {availableUnlockMethods && (109 <Custom_NavButton110 value="Enable / Disable Face ID / Fingerprint"111 handleOnPress={() => {112 if (!unlockMethod) {113 navigation.navigate({114 key: "SetupUnlockScreen",115 routeName: "SetupUnlockScreen",116 params: {117 unlockText,118 availableUnlockMethods,119 isChangeScreen: true,120 },121 });122 } else {123 navigation.navigate({124 key: "ChangeUnlockScreen",125 routeName: "ChangeUnlockScreen",126 params: {127 unlockText:128 unlockMethod === "faceId" ? "FaceID" : "Fingerprint",129 availableUnlockMethods,130 isChangeScreen: true,131 },132 });133 }134 }}135 />136 )}137 </View>138 <View style={{ marginTop: 15, marginHorizontal: 15 }}>139 <Custom_Text140 value="Legal"141 style={{ marginLeft: 15, marginBottom: 10 }}142 isBold143 />144 <Custom_NavButton145 value="License Agreement"146 handleOnPress={() => {147 // handleOpenWithWebBrowser(config.termsUrl);148 navigation.navigate({149 key: "LicenseAgreementScreen",150 routeName: "LicenseAgreementScreen",151 });152 }}153 />154 {/* <Custom_NavButton155 value="Privacy Policy"156 handleOnPress={() => {157 handleOpenWithWebBrowser(config.privacyUrl);158 }}159 /> */}160 </View>161 <View style={{ marginTop: 15, marginHorizontal: 15 }}>162 <Custom_Text163 value="Support"164 style={{ marginLeft: 15, marginBottom: 10 }}165 isBold166 />167 <Custom_NavButton168 value="Report an Issue"169 handleOnPress={() => {170 handleOpenWithWebBrowser(config.reportIssueUrl);171 }}172 />173 </View>174 <View style={{ marginTop: 15, marginHorizontal: 15 }}>175 <Custom_Text176 value="Reset"177 style={{ marginLeft: 15, marginBottom: 10 }}178 isBold179 />180 <Custom_NavButton181 value="Reset all data"182 handleOnPress={() => {183 setShowModal(true);184 }}185 />186 </View>187 <View style={{ marginTop: 15, marginHorizontal: 15 }}>188 <Custom_Text189 value={`Version ${appConfig.version}`}190 style={{ marginTop: 20, textAlign: "center" }}191 color={Colors.grayText}192 isBold193 />194 </View>195 <View style={{ height: 40, width: screenWidth }} />196 </ScrollView>197 <ResetDataModal198 modalVisible={showModal}199 onClose={() => {200 setShowModal(false);201 setShowPinError(false);202 setCode("");203 }}204 onChangeCode={setCode}205 code={code}206 showError={showPinError}207 onPress={() => {208 if (pin !== code) {209 setShowPinError(true);210 } else {211 setShowModal(false);212 purgeStore();213 }214 }}215 />216 </View>217 );218}219SettingsScreen.navigationOptions = {220 header: null,221};222const styles = StyleSheet.create({223 container: {224 flex: 1,225 backgroundColor: Colors.background,226 },227 section: {228 marginHorizontal: 20,229 marginTop: 20,230 },231});232const mapStateToProps = store => ({233 store,234 unlockMethod: store.unlockMethod,235 baseCurrency: store.baseCurrency,236 pin: store.pin,237 // persistor: store.persistor,238});239const mapDispatchToProps = dispatch => ({240 getMarketData: baseCurrency => dispatch(getMarketData(baseCurrency)),241 completeAuthSetup: () => dispatch(setupAuthentication()),242 authenticateUser: () => dispatch(authSuccess()),243 purgeStore: () => dispatch(purgeStore()),244 saveUnlockMethod: data => dispatch(updateUnlockMethod(data)),245 updateAccountBaseCurrency: data => dispatch(updateBaseCurrency(data)),246});247export default connect(248 mapStateToProps,249 mapDispatchToProps,...
sticker-unlock.js
Source:sticker-unlock.js
1import io from '../../io/index'2import {ROUTE} from '../../config/constants'3Page({4 data: {5 stickers: [],6 hasScanQrcodeBtn: false,7 hasShareBtn: false,8 hasInviter: false,9 },10 onLoad(options) {11 const {sticker_id, inviter} = options12 if (inviter) {13 this.setData({hasInviter: true})14 this.initUnlockSticker(sticker_id)15 this.createStickerUnlockLog(sticker_id, +inviter)16 } else {17 this.initStickers(sticker_id)18 }19 },20 initStickers(sticker_id) {21 Promise.all([io.fetchHasLockSticker(), io.fetchStickerUnlockLog()]).then(res => {22 const stickers = res[0].data.objects23 const unlockLogs = res[1].data.objects24 stickers.forEach(item => {25 item.unlockCount = 026 item.unlock_method = item.unlock_method || []27 item.hasShareBtn = item.unlock_method.includes('share')28 unlockLogs.forEach(log => {29 if (log.sticker_id === item.id) {30 if (log.unlock_method === 'scan_qrcode') {31 item.scanedQrcode = true32 } else {33 item.unlockCount += 134 }35 }36 })37 })38 const lockedStickers = stickers.filter(item => {39 return item.has_lock && !item.scanedQrcode && item.unlockCount < 240 })41 const currentStickerIndex = lockedStickers.findIndex(item => item.id === sticker_id)42 this.getUnlockMethod(lockedStickers, currentStickerIndex)43 this.setData({stickers: lockedStickers}, () => {44 this.setData({currentStickerIndex})45 })46 })47 },48 initUnlockSticker(sticker_id) {49 io.fetchStickerById(sticker_id).then(res => {50 const unlockSticker = res.data.objects[0]51 this.setData({unlockSticker})52 })53 },54 createStickerUnlockLog(sticker_id, inviter) {55 io.fetchStickerUnlockLogCount(sticker_id, inviter).then(count => {56 if (inviter == wx.BaaS.storage.get('uid')) {57 wx.redirectTo({url: '/' + ROUTE.STICKER_CAMERA})58 return59 }60 if (count >= 2) return61 io.createStickerUnlockLog(sticker_id, inviter, 'share')62 })63 },64 getUnlockMethod(stickers, currentStickerIndex) {65 const unlockMethod = stickers[currentStickerIndex].unlock_method || []66 this.setData({67 hasScanQrcodeBtn: unlockMethod.includes('scan_qrcode'),68 hasShareBtn: unlockMethod.includes('share'),69 })70 },71 onSwiperChange(e) {72 const {current} = e.detail73 const {stickers} = this.data74 this.getUnlockMethod(stickers, current)75 this.setData({currentStickerIndex: current})76 },77 scanQrcode() {78 wx.scanCode({79 onlyFromCamera: true,80 scanType: ['qrCode'],81 success: res => {82 console.log(res)83 const path = res.path84 if (path) {85 const data = this.parseQrcodePath(path)86 const {sticker_id, scan_qrcode} = data87 if (sticker_id && scan_qrcode) {88 const inviter = wx.BaaS.storage.get('uid')89 io.createStickerUnlockLog(sticker_id, inviter, 'scan_qrcode')90 .then(res => {91 this.setData({afterScanQrcode: true, hasInviter: true})92 this.initUnlockSticker(sticker_id)93 wx.showToast({title: '解éæåï¼'})94 })95 .catch(err => {96 this.setData({afterScanQrcode: true, hasInviter: true})97 this.initUnlockSticker(sticker_id)98 wx.showToast({title: '解éæåï¼'})99 })100 }101 } else {102 console.log('err')103 }104 },105 })106 },107 onShareAppMessage() {108 const {stickers, currentStickerIndex} = this.data109 const inviter = wx.BaaS.storage.get('uid')110 const image = stickers[currentStickerIndex].image111 const stickerId = stickers[currentStickerIndex].id112 return {113 title: 'æ¥æ¬ä¹é«ä¹å',114 path: `/${ROUTE.STICKER_UNLOCK}?inviter=${inviter}&sticker_id=${stickerId}`,115 imageUrl: image,116 }117 },118 navToHome() {119 wx.reLaunch({url: '/' + ROUTE.INDEX})120 },121 navBack() {122 wx.navigateBack({delta: 1})123 },124 parseQrcodePath(path) {125 const query = path.split('?')[1]126 const data = {}127 if (query) {128 const queryArr = query.split('&')129 queryArr.forEach(item => {130 const arr = item.split('=')131 if (arr[0] === 'sticker_id') {132 data.sticker_id = arr[1]133 }134 if (arr[0] === 'scan_qrcode') {135 data.scan_qrcode = arr[1]136 }137 })138 }139 return data140 },...
WebAuthn.js
Source:WebAuthn.js
...39 userHandle: rfc4648.base64url.stringify(Uint8Array.from(accountid, c => c.charCodeAt(0)))40 }41 }42 const unlockMethod = this.unlockMethod || Tine.Tinebase_AreaLock.unlock43 await unlockMethod(this.areaName, this.mfaDevice.id, JSON.stringify(publicKeyData));44 } catch (e) {45 console.error(e);46 Ext.MessageBox.show({47 icon: Ext.MessageBox.WARNING,48 buttons: Ext.MessageBox.OKCANCEL,49 title: i18n._('Error'),50 msg: i18n._("FIDO2 WebAuthn authentication failed. Try again?"),51 fn: (btn) => {52 if (btn === 'ok') {53 Ext.MessageBox.hide();54 return this.unlock();55 } else {56 throw new Error('USERABORT');57 }...
methods.js
Source:methods.js
1const mq_connector = require('./mq_connect')2const NodeRSA = require('node-rsa')3var contract;4var unlock;5// Channel handlers6{7 function DIRECTORY_CREATE_REQUEST(request, RESPONDER) {8 let requestId = request.REQUEST_ID9 let userId = request.USER_ID10 let publickey = request.PUBLIC_KEY11 let dateSent = request.DATE_SEND12 let signature = request.SIGNATURE13 let rsaKey = new NodeRSA(publickey)14 let data = Buffer.from(`${userId}-${dateSent}`)15 let signatureVerified = rsaKey.verify(data, signature, 'buffer', 'base64')16 if (!signatureVerified) {17 console.log(` [!] Requestor failed signature verification`);18 RESPONDER(requestId, { STATUS: "ERROR", ERROR: "SIG_FAIL" })19 return20 }21 console.log(` [*] Creating directory entry for ${userId}`);22 if(resolve(userId).PUBLIC_KEY) {23 RESPONDER(requestId, { STATUS: "ERROR", ERROR: "USER_EXISTS" })24 return25 }26 try {27 createEntry(userId, publickey)28 RESPONDER(requestId, { STATUS: "SUCCESS" })29 }30 catch(e) {31 RESPONDER(requestId, { STATUS: "ERROR", ERROR: e.toString() })32 }33 }34 35 function DIRECTORY_VERIFY_REQUEST(request, RESPONDER) {36 let requestId = request.REQUEST_ID37 let userId = request.USER_ID38 console.log(` [*] Verifying directory entry for ${userId}`);39 try {40 verifyEntry(userId)41 RESPONDER(requestId, { STATUS: "SUCCESS" })42 }43 catch(e) {44 RESPONDER(requestId, { STATUS: "ERROR", ERROR: e.toString() })45 }46 }47 48 function DIRECTORY_GET_REQUEST(request, RESPONDER) {49 let requestId = request.REQUEST_ID50 let userId = request.USER_ID51 52 console.log(` [x] Getting key for ${userId}`);53 54 try55 {56 let result = resolve(userId)57 58 console.log(` [/] Resolved key for ${userId}`);59 RESPONDER(requestId, {60 STATUS: 'SUCCESS',61 ENTRY: result62 });63 }64 catch(e)65 {66 RESPONDER(requestId, {67 STATUS: 'ERROR',68 ERROR: e69 });70 }71 }72}73// Internal methods74{75 function resolve(userId) {76 unlock()77 let response = contract.resolve(userId, { gas: 500000 })78 return {79 USER_ID: response[0],80 PUBLIC_KEY: response[1],81 PUBLIC_KEY_HASH: response[2],82 IS_ENTERPRISE: response[3],83 IS_VERIFIED: response[4]84 }85 }86 87 function verifyEntry(userId) {88 unlock()89 contract.verifyEntry(userId, { gas: 500000 })90 }91 92 function createEntry(userId, publicKey) {93 unlock()94 contract.registerEntry(userId, publicKey, { gas: 1500000 })95 }96}97// Initialization methods98{99 function mq_init (mq_host) {100 mq_connector.connect(101 'DIRECTORY-MANAGER',102 'directory_request',103 'directory_response',104 mq_host, 105 [106 { topic: 'create', handler: DIRECTORY_CREATE_REQUEST },107 { topic: 'verify', handler: DIRECTORY_VERIFY_REQUEST },108 { topic: 'get', handler: DIRECTORY_GET_REQUEST }109 ]110 )111 }112 113 function bc_init (contractInstance, unlockMethod) {114 contract = contractInstance115 unlock = unlockMethod116 }117}118module.exports = {119 mq_init: mq_init,120 bc_init: bc_init...
Generic.js
Source:Generic.js
...28 pwDlg.openWindow()29 pwDlg.on('apply', async (password) => {30 try {31 const unlockMethod = this.unlockMethod || Tine.Tinebase_AreaLock.unlock32 resolve(await unlockMethod(me.areaName, me.mfaDevice.id, password))33 } catch (e) {34 reject(e)35 }36 })37 pwDlg.on('cancel', () => {38 reject(new Error('USERABORT'))39 })40 })41 }42}...
enums_6.js
Source:enums_6.js
1var searchData=2[3 ['unlockmethod_0',['UNLOCKMETHOD',['../wrapperstructs_8h.html#a4c4a2227e1dbb49489721bc17cc98da3',1,'wrapperstructs.h']]]...
Using AI Code Generation
1var webdriverio = require('webdriverio');2var opts = {3 desiredCapabilities: {4 }5};6var client = webdriverio.remote(opts);7 .init()8 .unlock()9 .end();10var webdriverio = require('webdriverio');11var opts = {12 desiredCapabilities: {13 }14};15var client = webdriverio.remote(opts);16 .init()17 .swipe(100, 100, 100, 400, 1000)18 .end();19var webdriverio = require('webdriverio');20var opts = {21 desiredCapabilities: {22 }23};24var client = webdriverio.remote(opts);25 .init()26 .tap(100, 100)27 .end();28var webdriverio = require('webdriverio');29var opts = {30 desiredCapabilities: {31 }32};
Using AI Code Generation
1const {remote} = require('webdriverio');2const opts = {3 capabilities: {4 }5};6(async () => {7 const browser = await remote(opts);8 await browser.unlock();9})();
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!