Advertisement
GoodNoodle

pedometer app

Nov 20th, 2022 (edited)
1,280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { useState, useEffect, useCallback } from 'react'
  2. import { StatusBar } from 'expo-status-bar';
  3. import { StyleSheet, Button, Text, View, ImageBackground, SafeAreaView } from 'react-native';
  4. import { Pedometer } from 'expo-sensors';
  5. import { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs';
  6. import { NavigationContainer } from '@react-navigation/native';
  7.  
  8. import Home from './Screens/Home';
  9.  
  10. import Profile from './Screens/Profile';
  11.  
  12. import CircularProgress from 'react-native-circular-progress-indicator';
  13. import 'expo-dev-client'
  14. import { BannerAd, BannerAdSize, TestIds, InterstitialAd, AdEventType, RewardedInterstitialAd, RewardedAdEventType } from 'react-native-google-mobile-ads';
  15.  
  16.  
  17. const Tab = createMaterialTopTabNavigator();
  18.  
  19. const adUnitId = __DEV__ ? TestIds.BANNER : 'ca-app-pub-xxxxxxxxxxxxx/yyyyyyyyyyyyyy';
  20.  
  21. const interstitial = InterstitialAd.createForAdRequest(TestIds.INTERSTITIAL, {
  22.     requestNonPersonalizedAdsOnly: true
  23. });
  24.  
  25. const rewardedInterstitial = RewardedInterstitialAd.createForAdRequest(TestIds.REWARDED_INTERSTITIAL, {
  26.     requestNonPersonalizedAdsOnly: true
  27. });
  28.  
  29.  
  30.  
  31. export default function App() {
  32.  
  33.  
  34.     const [rewardedinterstitialLoaded, setRewardedInterstitialLoaded] = useState(false);
  35.  
  36.     const [PedometerAvalibility, setPedometerAvalibility] = useState("");
  37.  
  38.     const [stepCount, updateStepCount] = useState(0)
  39.  
  40.  
  41.     const [number, setNumbers] = useState(0)
  42.  
  43.  
  44.     const increment = useCallback((reward = 10) => {
  45.         setNumbers(prev => prev + reward)
  46.     }, [number])
  47.  
  48.     var dist = stepCount / 1300;
  49.     var distanceCoverd = dist.toFixed(1)
  50.  
  51.     var point = stepCount.steps / 500;
  52.  
  53.     var cal = dist * 60
  54.     var calsBurnt = cal.toFixed(0)
  55.  
  56.  
  57.  
  58.  
  59.     const loadRewardedInterstitial = () => {
  60.         const unsubscribeLoaded = rewardedInterstitial.addAdEventListener(
  61.             RewardedAdEventType.LOADED,
  62.             () => {
  63.                 setRewardedInterstitialLoaded(true);
  64.             }
  65.         );
  66.  
  67.         const unsubscribeEarned = rewardedInterstitial.addAdEventListener(
  68.             RewardedAdEventType.EARNED_REWARD,
  69.             reward => {
  70.                 increment();
  71.             }
  72.         );
  73.  
  74.         const unsubscribeClosed = rewardedInterstitial.addAdEventListener(
  75.             AdEventType.CLOSED,
  76.             () => {
  77.                 setRewardedInterstitialLoaded(false);
  78.                 rewardedInterstitial.load();
  79.             }
  80.         );
  81.  
  82.         rewardedInterstitial.load();
  83.  
  84.         return () => {
  85.             unsubscribeLoaded();
  86.             unsubscribeClosed();
  87.             unsubscribeEarned();
  88.         }
  89.     };
  90.  
  91.  
  92.  
  93.  
  94.     useEffect(() => {
  95.  
  96.         const unsubscribeRewardedInterstitialEvents = loadRewardedInterstitial();
  97.         subscribe();
  98.  
  99.         return () => {
  100.             unsubscribeRewardedInterstitialEvents();
  101.         };
  102.     }, [])
  103.  
  104.  
  105.  
  106.     const subscribe = () => {
  107.  
  108.         const subscription = Pedometer.watchStepCount((result) => {
  109.  
  110.             SetStepCount(result.steps);
  111.  
  112.         });
  113.  
  114.  
  115.     }
  116.     return (
  117.  
  118.         <View style={styles.container}>
  119.  
  120.             <NavigationContainer>
  121.                 <Tab.Navigator>
  122.                     <Tab.Screen name="Home"
  123.                         component={Home} />
  124.                     <Tab.Screen name="Reward"
  125.                         component={Profile} />
  126.                 </Tab.Navigator>
  127.             </NavigationContainer>
  128.  
  129.             <ImageBackground
  130.                 style={{ flex: 1 }}
  131.                 resizeMode="cover"
  132.                 source={require('./assets/Black_colour.jpg')}
  133.             >
  134.                 <View style={{ flex: 1, justifyContent: "center" }} >
  135.                     <Text style={[styles.HeadingDesign, {
  136.                         paddingBottom: 50
  137.                     }
  138.                     ]}>Pedometer Avalible:
  139.                         {PedometerAvalibility}
  140.                     </Text>
  141.                     <SafeAreaView>
  142.  
  143.                     </SafeAreaView>
  144.  
  145.                     <CircularProgress
  146.  
  147.                         value={stepCount}
  148.                         maxvalue={10000}
  149.                         radius={192}
  150.                         textColor={'#ECF01F'}
  151.                         activeStrokeColor={'#0075C1'}
  152.                         inActiveStrokeColor={'#AFAFAF'}
  153.                         inActiveStrikeOpacity={0.5}
  154.                         inActiveStrokeWidth={30}
  155.                         activeStrokeWidth={30}
  156.  
  157.                     />
  158.                     <View style={{ flex: 3, justifyContent: "center" }} >
  159.  
  160.                         <View style={{ flex: .5, justifyContent: "center", width: "50%", marginLeft: 180, marginTop: -200 }} >
  161.                             <Text style={styles.numDesign} > {number}  </Text>
  162.                         </View>
  163.  
  164.  
  165.  
  166.                         <View style={{ flex: .5, justifyContent: "center", width: "50%", marginLeft: 95, marginTop: -140 }} >
  167.  
  168.                             {rewardedinterstitialLoaded ? < Button title="Convert" onPress={() => rewardedInterstitial.show()} /> : <Text>Loading...</Text>}
  169.  
  170.                         </View>
  171.                     </View>
  172.                     <View style={{ flex: 3, justifyContent: "center" }}>
  173.                         <View style={{ flex: 1 }}>
  174.  
  175.  
  176.  
  177.                             <Text style={styles.textDesign}> Target: 10,000 Steps(8km)</Text>
  178.                         </View>
  179.  
  180.  
  181.  
  182.                         <View style={{ flex: 1 }}>
  183.                             <Text style={styles.textDesign}> Distance Covered : {distanceCoverd} km </Text>
  184.                         </View>
  185.  
  186.                         <View style={{ flex: 1 }}>
  187.                             <Text style={styles.textDesign}>Calories Burned : {calsBurnt} </Text>
  188.                         </View>
  189.                     </View>
  190.                 </View>
  191.  
  192.  
  193.             </ImageBackground>
  194.  
  195.             <StatusBar style="auto" />
  196.         </View>
  197.  
  198.  
  199.     );
  200.  
  201.  
  202.  
  203. }
  204.  
  205.  
  206.  
  207. const styles = StyleSheet.create({
  208.     container: {
  209.  
  210.         flex: 1,
  211.         backgroundColor: '#fff',
  212.  
  213.     },
  214.  
  215.     headingDesign: {
  216.  
  217.         backgroundColor: "rgba(155, 89, 182,0.5)",
  218.  
  219.  
  220.  
  221.         alignSelf: "center",
  222.  
  223.         fontSize: 20,
  224.  
  225.         color: "white",
  226.  
  227.         fontWeight: "bold",
  228.  
  229.  
  230.     },
  231.  
  232.     textDesign: {
  233.  
  234.         height: 50,
  235.  
  236.         width: '85%',
  237.  
  238.         marginBottom: 60,
  239.  
  240.         fontSize: 25,
  241.  
  242.         color: "white",
  243.  
  244.         fontWeight: "bold",
  245.  
  246.     },
  247.  
  248.     numDesign: {
  249.  
  250.         height: 50,
  251.  
  252.         width: '85%',
  253.  
  254.  
  255.         fontSize: 25,
  256.  
  257.         color: "white",
  258.  
  259.         fontWeight: "bold",
  260.  
  261.     },
  262.  
  263. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement