1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-04-26 12:02:59 +02:00

Android: Fixes #7791: Fixed issue where app would close after sharing a file

This commit is contained in:
Laurent Cozic 2023-02-20 16:05:00 +00:00
parent f2995dd196
commit 25a31b0689
5 changed files with 53 additions and 28 deletions

View File

@ -78,10 +78,13 @@ public class SharePackage implements ReactPackage {
@ReactMethod @ReactMethod
public void close() { public void close() {
Activity currentActivity = getCurrentActivity(); // We disable this, because otherwise it would close the whole application
if (currentActivity != null) { // https://github.com/laurent22/joplin/issues/7791#issuecomment-1436078948
currentActivity.finish();
} // Activity currentActivity = getCurrentActivity();
// if (currentActivity != null) {
// currentActivity.finish();
// }
} }
@ReactMethod @ReactMethod

View File

@ -729,7 +729,7 @@ class AppComponent extends React.Component {
}; };
this.handleOpenURL_ = (event: any) => { this.handleOpenURL_ = (event: any) => {
logger.info('Sharing: handleOpenURL_: start'); // logger.info('Sharing: handleOpenURL_: start');
// If this is called while biometrics haven't been done yet, we can // If this is called while biometrics haven't been done yet, we can
// ignore the call, because handleShareData() will be called once // ignore the call, because handleShareData() will be called once
@ -741,7 +741,7 @@ class AppComponent extends React.Component {
}; };
this.handleNewShare_ = () => { this.handleNewShare_ = () => {
logger.info('Sharing: handleNewShare_: start'); // logger.info('Sharing: handleNewShare_: start');
// look at this.handleOpenURL_ comment // look at this.handleOpenURL_ comment
if (this.props.biometricsDone) { if (this.props.biometricsDone) {

View File

@ -81,7 +81,25 @@ class Logger {
} }
public static get globalLogger(): Logger { public static get globalLogger(): Logger {
if (!this.globalLogger_) throw new Error('Global logger has not been initialized!!'); if (!this.globalLogger_) {
// The global logger normally is initialized early, so we shouldn't
// end up here. However due to early event handlers, it might happen
// and in this case we want to know about it. So we print this
// warning, and also flag the log statements using `[UNINITIALIZED
// GLOBAL LOGGER]` so that we know from where the incorrect log
// statement comes from.
console.warn('Logger: Trying to access globalLogger, but it has not been initialized. Make sure that initializeGlobalLogger() has been called before logging. Will use the console as fallback.');
const output: any = {
log: (level: LogLevel, prefix: string, ...object: any[]) => {
// eslint-disable-next-line no-console
console.info(`[UNINITIALIZED GLOBAL LOGGER] ${this.levelIdToString(level)}: ${prefix}:`, object);
},
};
return output;
// throw new Error('Global logger has not been initialized!!');
}
return this.globalLogger_; return this.globalLogger_;
} }

View File

@ -120,27 +120,29 @@ shared.saveNoteButton_press = async function(comp: any, folderId: string = null,
comp.setState(newState); comp.setState(newState);
if (isProvisionalNote) { if (isProvisionalNote) {
const geoNote: any = await Note.updateGeolocation(note.id); const updateGeoloc = async () => {
const geoNote: NoteEntity = await Note.updateGeolocation(note.id);
// TODO: CHECK - this code has never worked?? const stateNote = comp.state.note;
if (!stateNote || !geoNote) return;
if (stateNote.id !== geoNote.id) return; // Another note has been loaded while geoloc was being retrieved
const stateNote = comp.state.note; // Geo-location for this note has been saved to the database however the properties
if (!stateNote || !geoNote) return; // are is not in the state so set them now.
if (stateNote.id !== geoNote.id) return; // Another note has been loaded while geoloc was being retrieved
// Geo-location for this note has been saved to the database however the properties const geoInfo = {
// are is not in the state so set them now. longitude: geoNote.longitude,
latitude: geoNote.latitude,
altitude: geoNote.altitude,
};
const geoInfo = { const modNote = Object.assign({}, stateNote, geoInfo);
longitude: geoNote.longitude, const modLastSavedNote = Object.assign({}, comp.state.lastSavedNote, geoInfo);
latitude: geoNote.latitude,
altitude: geoNote.altitude, comp.setState({ note: modNote, lastSavedNote: modLastSavedNote });
}; };
const modNote = Object.assign({}, stateNote, geoInfo); await updateGeoloc();
const modLastSavedNote = Object.assign({}, comp.state.lastSavedNote, geoInfo);
comp.setState({ note: modNote, lastSavedNote: modLastSavedNote });
} }
releaseMutex(); releaseMutex();

View File

@ -468,9 +468,9 @@ export default class Note extends BaseItem {
return this.modelSelectAll('SELECT * FROM notes WHERE is_conflict = 0'); return this.modelSelectAll('SELECT * FROM notes WHERE is_conflict = 0');
} }
public static async updateGeolocation(noteId: string): Promise<void> { public static async updateGeolocation(noteId: string): Promise<NoteEntity | null> {
if (!Setting.value('trackLocation')) return; if (!Setting.value('trackLocation')) return null;
if (!Note.updateGeolocationEnabled_) return; if (!Note.updateGeolocationEnabled_) return null;
const startWait = time.unixMs(); const startWait = time.unixMs();
while (true) { while (true) {
@ -479,7 +479,7 @@ export default class Note extends BaseItem {
await time.sleep(1); await time.sleep(1);
if (startWait + 1000 * 20 < time.unixMs()) { if (startWait + 1000 * 20 < time.unixMs()) {
this.logger().warn(`Failed to update geolocation for: timeout: ${noteId}`); this.logger().warn(`Failed to update geolocation for: timeout: ${noteId}`);
return; return null;
} }
} }
@ -499,7 +499,7 @@ export default class Note extends BaseItem {
this.geolocationUpdating_ = false; this.geolocationUpdating_ = false;
if (!geoData) return; if (!geoData) return null;
this.logger().info('Got lat/long'); this.logger().info('Got lat/long');
this.geolocationCache_ = geoData; this.geolocationCache_ = geoData;
@ -508,12 +508,14 @@ export default class Note extends BaseItem {
this.logger().info(`Updating lat/long of note ${noteId}`); this.logger().info(`Updating lat/long of note ${noteId}`);
const note = await Note.load(noteId); const note = await Note.load(noteId);
if (!note) return; // Race condition - note has been deleted in the meantime if (!note) return null; // Race condition - note has been deleted in the meantime
note.longitude = geoData.coords.longitude; note.longitude = geoData.coords.longitude;
note.latitude = geoData.coords.latitude; note.latitude = geoData.coords.latitude;
note.altitude = geoData.coords.altitude; note.altitude = geoData.coords.altitude;
await Note.save(note, { ignoreProvisionalFlag: true }); await Note.save(note, { ignoreProvisionalFlag: true });
return note;
} }
static filter(note: NoteEntity) { static filter(note: NoteEntity) {