You've already forked joplin
							
							
				mirror of
				https://github.com/laurent22/joplin.git
				synced 2025-10-31 00:07:48 +02:00 
			
		
		
		
	Merge branch 'release-3.1' into dev
This commit is contained in:
		| @@ -79,7 +79,7 @@ android { | ||||
|         applicationId "net.cozic.joplin" | ||||
|         minSdkVersion rootProject.ext.minSdkVersion | ||||
|         targetSdkVersion rootProject.ext.targetSdkVersion | ||||
| 		versionCode 2097755 | ||||
| 		versionCode 2097756 | ||||
| 		versionName "3.2.0" | ||||
| 		ndk { | ||||
| 			abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64" | ||||
|   | ||||
| @@ -3,7 +3,7 @@ import { useState, useCallback, useMemo } from 'react'; | ||||
| import { FAB, Portal } from 'react-native-paper'; | ||||
| import { _ } from '@joplin/lib/locale'; | ||||
| import { Dispatch } from 'redux'; | ||||
| import { Platform, useWindowDimensions, View } from 'react-native'; | ||||
| import { Platform, View, ViewStyle } from 'react-native'; | ||||
| import shim from '@joplin/lib/shim'; | ||||
| import AccessibleWebMenu from '../accessibility/AccessibleModalMenu'; | ||||
| const Icon = require('react-native-vector-icons/Ionicons').default; | ||||
| @@ -71,10 +71,22 @@ const FloatingActionButton = (props: ActionButtonProps) => { | ||||
| 	// is disabled. | ||||
| 	// | ||||
| 	// See https://github.com/callstack/react-native-paper/issues/4064 | ||||
| 	const windowSize = useWindowDimensions(); | ||||
| 	// May be possible to remove if https://github.com/callstack/react-native-paper/pull/4514 | ||||
| 	// is merged. | ||||
| 	const adjustMargins = !open && shim.mobilePlatform() === 'android'; | ||||
| 	const marginTop = adjustMargins ? Math.max(0, windowSize.height - 140) : undefined; | ||||
| 	const marginStart = adjustMargins ? Math.max(0, windowSize.width - 200) : undefined; | ||||
| 	const marginStyles = useMemo((): ViewStyle => { | ||||
| 		if (!adjustMargins) { | ||||
| 			return {}; | ||||
| 		} | ||||
|  | ||||
| 		// Internally, React Native Paper uses absolute positioning to make its | ||||
| 		// (usually invisible) view fill the screen. Setting top and left to | ||||
| 		// undefined causes the view to take up only part of the screen. | ||||
| 		return { | ||||
| 			top: undefined, | ||||
| 			left: undefined, | ||||
| 		}; | ||||
| 	}, [adjustMargins]); | ||||
|  | ||||
| 	const label = props.mainButton?.label ?? _('Add new'); | ||||
|  | ||||
| @@ -92,7 +104,7 @@ const FloatingActionButton = (props: ActionButtonProps) => { | ||||
| 	const menuContent = <FAB.Group | ||||
| 		open={open} | ||||
| 		accessibilityLabel={label} | ||||
| 		style={{ marginStart, marginTop }} | ||||
| 		style={marginStyles} | ||||
| 		icon={ open ? openIcon : closedIcon } | ||||
| 		fabStyle={{ | ||||
| 			backgroundColor: props.mainButton?.color ?? 'rgba(231,76,60,1)', | ||||
|   | ||||
| @@ -245,14 +245,14 @@ class NoteScreenComponent extends BaseScreenComponent<Props, State> implements B | ||||
| 			} | ||||
|  | ||||
| 			if (this.state.fromShare) { | ||||
| 				// effectively the same as NAV_BACK but NAV_BACK causes undesired behaviour in this case: | ||||
| 				// Note: In the past, NAV_BACK caused undesired behaviour in this case: | ||||
| 				// - share to Joplin from some other app | ||||
| 				// - open Joplin and open any note | ||||
| 				// - go back -- with NAV_BACK this causes the app to exit rather than just showing notes | ||||
| 				// This no longer seems to happen, but this case should be checked when adjusting navigation | ||||
| 				// history behavior. | ||||
| 				this.props.dispatch({ | ||||
| 					type: 'NAV_GO', | ||||
| 					routeName: 'Notes', | ||||
| 					folderId: this.state.note.parent_id, | ||||
| 					type: 'NAV_BACK', | ||||
| 				}); | ||||
|  | ||||
| 				ShareExtension.close(); | ||||
|   | ||||
| @@ -551,7 +551,7 @@ | ||||
| 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||||
| 				CLANG_ENABLE_MODULES = YES; | ||||
| 				CODE_SIGN_ENTITLEMENTS = Joplin/Joplin.entitlements; | ||||
| 				CURRENT_PROJECT_VERSION = 127; | ||||
| 				CURRENT_PROJECT_VERSION = 128; | ||||
| 				DEVELOPMENT_TEAM = A9BXAFS6CT; | ||||
| 				ENABLE_BITCODE = NO; | ||||
| 				INFOPLIST_FILE = Joplin/Info.plist; | ||||
| @@ -583,7 +583,7 @@ | ||||
| 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||||
| 				CLANG_ENABLE_MODULES = YES; | ||||
| 				CODE_SIGN_ENTITLEMENTS = Joplin/Joplin.entitlements; | ||||
| 				CURRENT_PROJECT_VERSION = 127; | ||||
| 				CURRENT_PROJECT_VERSION = 128; | ||||
| 				DEVELOPMENT_TEAM = A9BXAFS6CT; | ||||
| 				INFOPLIST_FILE = Joplin/Info.plist; | ||||
| 				IPHONEOS_DEPLOYMENT_TARGET = 13.4; | ||||
| @@ -774,7 +774,7 @@ | ||||
| 				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; | ||||
| 				CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements; | ||||
| 				CODE_SIGN_STYLE = Automatic; | ||||
| 				CURRENT_PROJECT_VERSION = 127; | ||||
| 				CURRENT_PROJECT_VERSION = 128; | ||||
| 				DEBUG_INFORMATION_FORMAT = dwarf; | ||||
| 				DEVELOPMENT_TEAM = A9BXAFS6CT; | ||||
| 				GCC_C_LANGUAGE_STANDARD = gnu11; | ||||
| @@ -813,7 +813,7 @@ | ||||
| 				CODE_SIGN_ENTITLEMENTS = ShareExtension/ShareExtension.entitlements; | ||||
| 				CODE_SIGN_STYLE = Automatic; | ||||
| 				COPY_PHASE_STRIP = NO; | ||||
| 				CURRENT_PROJECT_VERSION = 127; | ||||
| 				CURRENT_PROJECT_VERSION = 128; | ||||
| 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | ||||
| 				DEVELOPMENT_TEAM = A9BXAFS6CT; | ||||
| 				GCC_C_LANGUAGE_STANDARD = gnu11; | ||||
|   | ||||
| @@ -109,6 +109,7 @@ | ||||
|     "babel-loader": "9.1.3", | ||||
|     "babel-plugin-module-resolver": "4.1.0", | ||||
|     "babel-plugin-react-native-web": "0.19.12", | ||||
|     "fast-deep-equal": "3.1.3", | ||||
|     "fs-extra": "11.2.0", | ||||
|     "gulp": "4.0.2", | ||||
|     "jest": "29.7.0", | ||||
|   | ||||
| @@ -35,6 +35,7 @@ const DropdownAlert = require('react-native-dropdownalert').default; | ||||
| const AlarmServiceDriver = require('./services/AlarmServiceDriver').default; | ||||
| const SafeAreaView = require('./components/SafeAreaView'); | ||||
| const { connect, Provider } = require('react-redux'); | ||||
| import fastDeepEqual = require('fast-deep-equal'); | ||||
| import { Provider as PaperProvider, MD3DarkTheme, MD3LightTheme } from 'react-native-paper'; | ||||
| import BackButtonService from './services/BackButtonService'; | ||||
| import NavService from '@joplin/lib/services/NavService'; | ||||
| @@ -88,6 +89,8 @@ import JoplinCloudLoginScreen from './components/screens/JoplinCloudLoginScreen' | ||||
|  | ||||
| import SyncTargetNone from '@joplin/lib/SyncTargetNone'; | ||||
|  | ||||
|  | ||||
|  | ||||
| SyncTargetRegistry.addClass(SyncTargetNone); | ||||
| SyncTargetRegistry.addClass(SyncTargetOneDrive); | ||||
| SyncTargetRegistry.addClass(SyncTargetNextcloud); | ||||
| @@ -301,7 +304,18 @@ const appReducer = (state = appDefaultState, action: any) => { | ||||
| 				const currentRoute = state.route; | ||||
|  | ||||
| 				if (!historyGoingBack && historyCanGoBackTo(currentRoute)) { | ||||
| 					navHistory.push(currentRoute); | ||||
| 					const previousRoute = navHistory.length && navHistory[navHistory.length - 1]; | ||||
| 					const isDifferentRoute = !previousRoute || !fastDeepEqual(navHistory[navHistory.length - 1], currentRoute); | ||||
|  | ||||
| 					// Avoid multiple consecutive duplicate screens in the navigation history -- these can make | ||||
| 					// pressing "back" seem to have no effect. | ||||
| 					if (isDifferentRoute) { | ||||
| 						navHistory.push(currentRoute); | ||||
| 					} | ||||
| 				} | ||||
|  | ||||
| 				if (action.clearHistory) { | ||||
| 					navHistory.splice(0, navHistory.length); | ||||
| 				} | ||||
|  | ||||
| 				newState = { ...state }; | ||||
|   | ||||
| @@ -3,6 +3,7 @@ import shim from '@joplin/lib/shim'; | ||||
|  | ||||
| import Note from '@joplin/lib/models/Note'; | ||||
| import checkPermissions from './checkPermissions.js'; | ||||
| import NavService from '@joplin/lib/services/NavService'; | ||||
| const { ToastAndroid } = require('react-native'); | ||||
| const { PermissionsAndroid } = require('react-native'); | ||||
| const { Platform } = require('react-native'); | ||||
| @@ -27,27 +28,21 @@ export default async (sharedData: SharedData, folderId: string, dispatch: Functi | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	const newNote = await Note.save({ | ||||
| 		parent_id: folderId, | ||||
| 	}, { provisional: true }); | ||||
|  | ||||
| 	// This is a bit hacky, but the surest way to go to | ||||
| 	// the needed note. We go back one screen in case there's | ||||
| 	// already a note open - if we don't do this, the dispatch | ||||
| 	// below will do nothing (because routeName wouldn't change) | ||||
| 	// Then we wait a bit for the state to be set correctly, and | ||||
| 	// finally we go to the new note. | ||||
| 	dispatch({ type: 'NAV_BACK' }); | ||||
|  | ||||
| 	await NavService.go('Notes', { folderId, clearHistory: true }); | ||||
| 	dispatch({ type: 'SIDE_MENU_CLOSE' }); | ||||
|  | ||||
| 	const newNote = await Note.save({ | ||||
| 		parent_id: folderId, | ||||
| 	}, { provisional: true }); | ||||
|  | ||||
| 	shim.setTimeout(() => { | ||||
| 		dispatch({ | ||||
| 			type: 'NAV_GO', | ||||
| 			routeName: 'Note', | ||||
| 			noteId: newNote.id, | ||||
| 			sharedData: sharedData, | ||||
| 		}); | ||||
| 	shim.setTimeout(async () => { | ||||
| 		await NavService.go('Note', { noteId: newNote.id, sharedData }); | ||||
|  | ||||
| 		ShareExtension.close(); | ||||
| 	}, 5); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user