feat: show minion on shake (android/ios) and fix CI workflow
This commit is contained in:
28
App.js
28
App.js
@@ -1,7 +1,8 @@
|
||||
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { BackHandler, Platform, StatusBar } from 'react-native';
|
||||
import { BackHandler, Platform, StatusBar, Modal, View, Image, StyleSheet } from 'react-native';
|
||||
import * as ScreenOrientation from 'expo-screen-orientation';
|
||||
import * as SplashScreen from 'expo-splash-screen';
|
||||
import { Accelerometer } from 'expo-sensors';
|
||||
import FocusScreen from './src/screens/FocusScreen';
|
||||
import HomeScreen from './src/screens/HomeScreen';
|
||||
import TimeUntilScreen from './src/screens/TimeUntilScreen';
|
||||
@@ -23,6 +24,8 @@ export default function App() {
|
||||
const [pinkMode, setPinkMode] = useState(false);
|
||||
const [isFullscreen, setIsFullscreen] = useState(false);
|
||||
const [now, setNow] = useState(new Date());
|
||||
|
||||
const [showMinion, setShowMinion] = useState(false);
|
||||
|
||||
const [targetTime, setTargetTime] = useState(null);
|
||||
const [tuHour, setTuHour] = useState('');
|
||||
@@ -50,6 +53,20 @@ export default function App() {
|
||||
}
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (Platform.OS === 'android' || Platform.OS === 'ios') {
|
||||
Accelerometer.setUpdateInterval(500);
|
||||
const subscription = Accelerometer.addListener(({ x, y, z }) => {
|
||||
const acceleration = Math.sqrt(x * x + y * y + z * z);
|
||||
if (acceleration > 2.5) {
|
||||
setShowMinion(true);
|
||||
setTimeout(() => setShowMinion(false), 3000);
|
||||
}
|
||||
});
|
||||
return () => subscription.remove();
|
||||
}
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
const interval = setInterval(() => setNow(new Date()), 1000);
|
||||
return () => clearInterval(interval);
|
||||
@@ -251,6 +268,15 @@ export default function App() {
|
||||
|
||||
return (
|
||||
<>
|
||||
<Modal visible={showMinion} transparent={true} animationType="fade">
|
||||
<View style={StyleSheet.absoluteFill}>
|
||||
<Image
|
||||
source={{ uri: 'https://shx.reversed.dev/u/XHuDcA.jpg' }}
|
||||
style={{ flex: 1 }}
|
||||
resizeMode="contain"
|
||||
/>
|
||||
</View>
|
||||
</Modal>
|
||||
<StatusBar barStyle={barStyle} backgroundColor={theme.bg} />
|
||||
<TimerScreen
|
||||
styles={styles}
|
||||
|
||||
Reference in New Issue
Block a user