mirror of
https://github.com/mattermost/mattermost-mobile.git
synced 2026-11-04 09:58:57 +00:00
* bumps minSdkVersion to 30 Older versions are past end-of-life for security patches. voximplant service patch is also updated with minSdkVersion set to 30. * removes manifest attributes no longer needed when minSdk is 30 * removes guard to for version lower than O * removes permission check for versions lower than 28 * remove tests related to unsupported android sdk versions * bumps iOS minSdkVersion to 18 * removes iOS 13/15 guards in hardware-keyboard * removes iOS 15 guards in NotificationService * removes iOS 15 guard in Gekidou network delegate since gekidou is iOS only other platform guards are not needed * removes version guard no longer needed in voximplant patch * removes hasWriteStoragePermission dead stub and its call site * removes unused setSoftKeyboardToAdjustResize from rnutils The function had no call sites in JS/TS code and the iOS implementation was a no-op. * removes version guards and updates config after min version bump * updates stale iOS 17 simulator references in CI to iOS 18.1 Co-Authored-By: Carlos Garcia <carlos.garcia@mattermost.com> * fixes malformed patch file headers - voximplant patch: restore missing diff --git header and index line for VIForegroundServiceModule.java, fix stale hunk counter (+11 -> +7) - notifications patch: fix stale hunk line count (+91 -> +89) after KITKAT branch removal Co-Authored-By: Carlos Garcia <carlos.garcia@mattermost.com> * remove code below the supported OS versions * Bump IntuneMAM SDK to 21.8.0 and MSAL to 2.15.0 --------- Co-authored-by: Elias Nahum <nahumhbl@gmail.com>
96 lines
2.8 KiB
TypeScript
96 lines
2.8 KiB
TypeScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import RNUtils, {type WindowDimensions} from '@mattermost/rnutils';
|
|
import React, {useEffect, useRef, useState, useContext} from 'react';
|
|
import {AppState, Keyboard, NativeEventEmitter, Platform} from 'react-native';
|
|
import {useSafeAreaInsets} from 'react-native-safe-area-context';
|
|
|
|
import {DeviceContext} from '@context/device';
|
|
|
|
let utilsEmitter = new NativeEventEmitter(RNUtils);
|
|
|
|
export function testSetUtilsEmitter(emitter: NativeEventEmitter) {
|
|
utilsEmitter = emitter;
|
|
}
|
|
|
|
export function useSplitView() {
|
|
const {isSplit} = React.useContext(DeviceContext);
|
|
return isSplit;
|
|
}
|
|
|
|
export function useAppState() {
|
|
const [appState, setAppState] = useState(AppState.currentState);
|
|
|
|
useEffect(() => {
|
|
const listener = AppState.addEventListener('change', (nextState) => {
|
|
setAppState(nextState);
|
|
});
|
|
|
|
return () => listener.remove();
|
|
}, [appState]);
|
|
|
|
return appState;
|
|
}
|
|
|
|
export function useWindowDimensions() {
|
|
const [dimensions, setDimensions] = useState(RNUtils.getWindowDimensions());
|
|
|
|
useEffect(() => {
|
|
const listener = utilsEmitter.addListener('DimensionsChanged', (window: WindowDimensions) => {
|
|
setDimensions(window);
|
|
});
|
|
|
|
return () => listener.remove();
|
|
}, []);
|
|
|
|
return dimensions;
|
|
}
|
|
|
|
export function useIsTablet() {
|
|
const {isSplit, isTablet} = useContext(DeviceContext);
|
|
return isTablet && !isSplit;
|
|
}
|
|
|
|
export function useKeyboardHeightWithDuration() {
|
|
const [keyboardHeight, setKeyboardHeight] = useState({height: 0, duration: 0});
|
|
const updateTimeout = useRef<NodeJS.Timeout | null>(null);
|
|
const insets = useSafeAreaInsets();
|
|
|
|
useEffect(() => {
|
|
const show = Keyboard.addListener(Platform.select({ios: 'keyboardWillShow', default: 'keyboardDidShow'}), async (event) => {
|
|
setKeyboardHeight({height: event.endCoordinates.height, duration: event.duration});
|
|
});
|
|
|
|
const hide = Keyboard.addListener(Platform.select({ios: 'keyboardWillHide', default: 'keyboardDidHide'}), (event) => {
|
|
|
|
if (updateTimeout.current != null) {
|
|
clearTimeout(updateTimeout.current);
|
|
updateTimeout.current = null;
|
|
}
|
|
setKeyboardHeight({height: 0, duration: event.duration});
|
|
});
|
|
|
|
return () => {
|
|
show.remove();
|
|
hide.remove();
|
|
};
|
|
}, [insets.bottom]);
|
|
|
|
return keyboardHeight;
|
|
}
|
|
|
|
export function useKeyboardHeight() {
|
|
const {height} = useKeyboardHeightWithDuration();
|
|
return height;
|
|
}
|
|
|
|
export function useKeyboardOverlap() {
|
|
const keyboardHeight = useKeyboardHeight();
|
|
const insets = useSafeAreaInsets();
|
|
|
|
const phoneOverlap = keyboardHeight || insets.bottom;
|
|
|
|
return phoneOverlap;
|
|
}
|