Skip to content

Commit 43d9b97

Browse files
committed
Fix ChatScreen setting back function, online mode.
Going back via the system back button will now work. Last online mode bug with encryption/decryption fixed.
1 parent f777277 commit 43d9b97

File tree

4 files changed

+48
-33
lines changed

4 files changed

+48
-33
lines changed

android/app/src/main/java/com/enderchat/modules/connection/ConnectionModule.kt

+5-3
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,11 @@ class ConnectionModule(reactContext: ReactApplicationContext)
9292
val secretBytes = Base64.decode(secret, Base64.DEFAULT)
9393
val secretKey = SecretKeySpec(secretBytes, "AES")
9494
val iv = IvParameterSpec(secretBytes)
95-
aesDecipher = Cipher.getInstance("AES/CFB8/PKCS5Padding").apply {
95+
aesDecipher = Cipher.getInstance("AES/CFB8/NoPadding").apply {
9696
init(Cipher.DECRYPT_MODE, secretKey, iv)
9797
}
9898
val result = directlyWritePacket(0x01, packetBytes)
99-
aesCipher = Cipher.getInstance("AES/CFB8/PKCS5Padding").apply {
99+
aesCipher = Cipher.getInstance("AES/CFB8/NoPadding").apply {
100100
init(Cipher.ENCRYPT_MODE, secretKey, iv)
101101
}
102102
promise.resolve(result)
@@ -229,7 +229,9 @@ class ConnectionModule(reactContext: ReactApplicationContext)
229229
val threshold = VarInt.read(packet.data)?.value ?: 0
230230
compressionThreshold = threshold
231231
compressionEnabled = threshold >= 0
232-
} else if (packet.id.value == loginSuccessId && !loggedIn) loggedIn = true
232+
} else if (packet.id.value == loginSuccessId && !loggedIn) {
233+
loggedIn = true
234+
}
233235

234236
// Forward the packet to JavaScript.
235237
val packetLengthLength =

src/App.tsx

+8-4
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,12 @@ import globalStyle from './globalStyle'
3737
const Stacks = createNativeStackNavigator()
3838
const Tabs = createMaterialTopTabNavigator() // createBottomTabNavigator()
3939

40-
type HomeNavigationProp = NativeStackNavigationProp<
41-
{ Home: undefined; Chat: { serverName: string; version: number } },
42-
'Home'
43-
>
40+
export interface RootStackParamList {
41+
[index: string]: any
42+
Home: undefined
43+
Chat: { serverName: string; version: number }
44+
}
45+
type HomeNavigationProp = NativeStackNavigationProp<RootStackParamList, 'Home'>
4446

4547
const HomeScreen = ({ navigation }: { navigation: HomeNavigationProp }) => {
4648
const { connection } = React.useContext(ConnectionContext)
@@ -143,6 +145,7 @@ const App = () => {
143145
barStyle={darkMode ? 'light-content' : 'dark-content'}
144146
/>
145147
<Stacks.Navigator
148+
id='StackNavigator'
146149
initialRouteName='Home'
147150
screenOptions={{
148151
headerShown: false,
@@ -157,6 +160,7 @@ const App = () => {
157160
return (params as { serverName: string }).serverName
158161
}}
159162
/>
163+
<Stacks.Screen name='Settings' component={SettingScreen} />
160164
</Stacks.Navigator>
161165
</NavigationContainer>
162166
</AccountsContext.Provider>

src/screens/chat/ChatScreen.tsx

+11-23
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
sendMessageError
1818
} from './packetHandler'
1919
import { createConnection } from './sessionBuilder'
20+
import { RootStackParamList } from '../../App'
2021
import globalStyle from '../../globalStyle'
2122
import useDarkMode from '../../context/useDarkMode'
2223
import AccountsContext from '../../context/accountsContext'
@@ -36,13 +37,7 @@ import { protocolMap, writeVarInt } from '../../minecraft/utils'
3637
import { concatPacketData, PacketDataTypes } from '../../minecraft/packet'
3738
import TextField from '../../components/TextField'
3839
import Text from '../../components/Text'
39-
import SettingScreen from '../settings/SettingScreen'
4040

41-
interface RootStackParamList {
42-
[index: string]: any
43-
Home: undefined
44-
Chat: { serverName: string; version: number }
45-
}
4641
type Props = NativeStackScreenProps<RootStackParamList, 'Chat'>
4742

4843
export type Status = 'OPENING' | 'CONNECTING' | 'CONNECTED' | 'CLOSED'
@@ -104,7 +99,6 @@ const ChatScreen = ({ navigation, route }: Props) => {
10499
const { sessions, setSession } = useSessionStore()
105100
// TODO: Show command history.
106101
const [, setCommandHistory] = useState<string[]>([])
107-
const [settingsOpen, setSettingsOpen] = useState(false)
108102
const [messages, setMessages] = useState<Message[]>([])
109103
const [loggedIn, setLoggedIn] = useState(false)
110104
const [message, setMessage] = useState('')
@@ -261,31 +255,25 @@ const ChatScreen = ({ navigation, route }: Props) => {
261255
route.params.serverName.length > 12
262256
? route.params.serverName.substring(0, 9) + '...'
263257
: route.params.serverName
264-
const backButton = (
265-
<View style={styles.backButton}>
266-
<Ionicons.Button
267-
name='chevron-back-sharp'
268-
iconStyle={styles.backButtonIcon}
269-
backgroundColor='#363636'
270-
onPress={() => {
271-
settingsOpen ? setSettingsOpen(false) : closeChatScreen()
272-
}}
273-
/>
274-
</View>
275-
)
276-
// TODO: Use stack navigation for this so the physical back button works correctly.
277-
if (settingsOpen) return <SettingScreen button={backButton} />
258+
278259
return (
279260
<>
280261
<View style={darkMode ? globalStyle.darkHeader : globalStyle.header}>
281-
{backButton}
262+
<View style={styles.backButton}>
263+
<Ionicons.Button
264+
name='chevron-back-sharp'
265+
iconStyle={styles.backButtonIcon}
266+
backgroundColor='#363636'
267+
onPress={() => closeChatScreen()}
268+
/>
269+
</View>
282270
<Text style={[globalStyle.title, styles.title]}>Chat - {title}</Text>
283271
<View style={globalStyle.flexSpacer} />
284272
<Ionicons.Button
285273
name='settings-outline'
286274
iconStyle={styles.backButtonIcon}
287275
backgroundColor='#363636'
288-
onPress={() => setSettingsOpen(true)}
276+
onPress={() => navigation.push('Settings')}
289277
/>
290278
</View>
291279
{(!loggedIn || !connection) && (

src/screens/settings/SettingScreen.tsx

+24-3
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,39 @@
11
import React, { useContext } from 'react'
2-
import { View, ScrollView, Linking } from 'react-native'
2+
import { View, ScrollView, Linking, StyleSheet } from 'react-native'
3+
import { MaterialTopTabScreenProps } from '@react-navigation/material-top-tabs'
4+
import { NativeStackScreenProps } from '@react-navigation/native-stack'
5+
import Ionicons from 'react-native-vector-icons/Ionicons'
36

47
import { version } from '../../../package.json'
8+
import { RootStackParamList } from '../../App'
59
import Text from '../../components/Text'
610
import Setting from '../../components/Setting'
711
import globalStyle from '../../globalStyle'
812
import useDarkMode from '../../context/useDarkMode'
913
import SettingsContext from '../../context/settingsContext'
1014
import DarkModeSetting from './DarkModeSetting'
1115

12-
const SettingScreen = (props: { button?: JSX.Element }) => {
16+
type StackProps = NativeStackScreenProps<RootStackParamList, 'Settings'>
17+
type TabProps = MaterialTopTabScreenProps<RootStackParamList, 'Settings'>
18+
19+
const SettingScreen = ({ navigation }: StackProps | TabProps) => {
1320
const darkModeApp = useDarkMode()
1421
const { settings, setSettings } = useContext(SettingsContext)
1522

1623
// TODO: Setting to disable autocomplete.
1724
return (
1825
<>
1926
<View style={darkModeApp ? globalStyle.darkHeader : globalStyle.header}>
20-
{props.button ?? false}
27+
{navigation.getId() === 'StackNavigator' && (
28+
<View style={styles.backButton}>
29+
<Ionicons.Button
30+
name='chevron-back-sharp'
31+
iconStyle={styles.backButtonIcon}
32+
backgroundColor='#363636'
33+
onPress={() => navigation.goBack()}
34+
/>
35+
</View>
36+
)}
2137
<Text style={globalStyle.title}>Settings</Text>
2238
</View>
2339
<ScrollView>
@@ -81,4 +97,9 @@ const SettingScreen = (props: { button?: JSX.Element }) => {
8197
)
8298
}
8399

100+
const styles = StyleSheet.create({
101+
backButton: { marginRight: 8 },
102+
backButtonIcon: { marginRight: 0 }
103+
})
104+
84105
export default SettingScreen

0 commit comments

Comments
 (0)