feat: show minion on shake (android/ios) and fix CI workflow

This commit is contained in:
root
2026-03-11 21:51:35 +01:00
parent 5393910b4c
commit bb543182b7
4 changed files with 57 additions and 10 deletions

28
App.js
View File

@@ -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}