@@ -89,10 +89,10 @@ public void onReceive(Context context, Intent intent) {
89
89
}
90
90
}
91
91
};
92
+ private final ActivityResultLauncher <Intent > createAnnotationFromSourceLauncher = registerForActivityResult (new ActivityResultContracts .StartActivityForResult (), MainActivity .this ::handleCreateAnnotationFromSourceResult );
92
93
private SourceWebView sourceWebViewBottomSheetFragment = null ;
93
94
private AppWebView appWebViewBottomSheetFragment = null ;
94
95
private Observer <SourceInitializationStatus > sourceInitializationStatusObserver ;
95
- private final ActivityResultLauncher <Intent > createAnnotationFromSourceLauncher = registerForActivityResult (new ActivityResultContracts .StartActivityForResult (), MainActivity .this ::handleCreateAnnotationFromSourceResult );
96
96
97
97
@ Override
98
98
protected void onCreate (Bundle savedInstanceState ) {
@@ -189,50 +189,14 @@ private CompletableFuture<User> initializeViewModel() {
189
189
Annotation annotation = Annotation .fromJson (data .getJSONObject ("annotation" ));
190
190
boolean displayBottomSheet = data .getBoolean ("displayBottomSheet" );
191
191
192
- sourceWebViewBottomSheetFragment .handleViewTargetForAnnotation (annotation , targetId )
193
- .ifPresent ((s ) -> {
194
- if (displayBottomSheet ) {
195
- sourceWebViewViewModelBottomSheet .getBottomSheetBehavior ().ifPresent (b -> b .setState (BottomSheetBehavior .STATE_EXPANDED ));
196
-
197
- SourceInitializationStatus sourceInitializationStatus = sourceWebViewViewModelBottomSheet .getSourceInitializationStatus ().getValue ();
198
- // Source wil already be initialized if it was previously accessed or it may have loaded in a previous call where `displayBottomSheet` was false.
199
- if (sourceInitializationStatus .equals (SourceInitializationStatus .INITIALIZED )) {
200
- appWebViewViewModelBottomSheet .setBottomSheetState (BottomSheetBehavior .STATE_COLLAPSED );
201
- boolean javascriptEnabled = Optional .ofNullable (sourceWebViewViewModelBottomSheet ).map ((vm ) -> vm .getSourceJavaScriptConfig ().getValue ().isEnabled ()).orElse (true );
202
- if (!javascriptEnabled ) {
203
- ToastRepository .show (this , R .string .toast_javascript_disabled , ToastRepository .STYLE_DARK_ACCENT );
204
- }
205
- } else if (sourceInitializationStatus .equals (SourceInitializationStatus .FAILED )) {
206
- ToastRepository .show (this , R .string .toast_annotation_renderer_failed_to_initialize , ToastRepository .STYLE_DARK_ACCENT );
207
- } else {
208
- if (sourceInitializationStatusObserver != null ) {
209
- sourceWebViewViewModelBottomSheet .getSourceInitializationStatus ().removeObserver (sourceInitializationStatusObserver );
210
- }
211
- sourceInitializationStatusObserver = new Observer <SourceInitializationStatus >() {
212
- @ Override
213
- public void onChanged (SourceInitializationStatus sourceInitializationStatus ) {
214
- int sourceWebViewBottomSheetState = sourceWebViewViewModelBottomSheet .getBottomSheetBehavior ()
215
- .map (BottomSheetBehavior ::getState )
216
- .orElse (BottomSheetBehavior .STATE_HIDDEN );
217
-
218
- if (sourceInitializationStatus .equals (SourceInitializationStatus .INITIALIZED ) && sourceWebViewBottomSheetState != BottomSheetBehavior .STATE_HIDDEN ) {
219
- appWebViewViewModelBottomSheet .setBottomSheetState (BottomSheetBehavior .STATE_COLLAPSED );
220
- }
221
-
222
- if (sourceInitializationStatus .equals (SourceInitializationStatus .INITIALIZED ) || sourceInitializationStatus .equals (SourceInitializationStatus .FAILED )) {
223
- sourceWebViewViewModelBottomSheet .getSourceInitializationStatus ().removeObserver (this );
224
- }
225
- }
226
- };
227
- sourceWebViewViewModelBottomSheet .getSourceInitializationStatus ().observe (this , sourceInitializationStatusObserver );
228
- }
229
- }
230
- });
192
+ this .handleViewTargetForAnnotation (targetId , annotation , displayBottomSheet );
231
193
} catch (JSONException e ) {
232
- ErrorRepository .captureException (e , webEvent . toString () );
194
+ ErrorRepository .captureException (e );
233
195
}
234
196
} else if (webEvent .getType ().equals (WebEvent .TYPE_CREATE_ANNOTATION_FROM_SOURCE )) {
235
197
this .handleCreateAnnotationFromSource (null );
198
+ } else if (webEvent .getType ().equals (WebEvent .TYPE_ACTION_SHARE )) {
199
+
236
200
}
237
201
});
238
202
appWebViewModelPrimary .clearReceivedWebEvents ();
@@ -337,26 +301,65 @@ private void handleCreateAnnotationFromSource(String sourceUrl) {
337
301
createAnnotationFromSourceLauncher .launch (intent );
338
302
}
339
303
304
+ private void handleViewTargetForAnnotation (String targetId , Annotation annotation , boolean displayBottomSheet ) {
305
+ sourceWebViewBottomSheetFragment .handleViewTargetForAnnotation (annotation , targetId )
306
+ .ifPresent ((s ) -> {
307
+ if (displayBottomSheet ) {
308
+ sourceWebViewViewModelBottomSheet .getBottomSheetBehavior ().ifPresent (b -> b .setState (BottomSheetBehavior .STATE_EXPANDED ));
309
+
310
+ SourceInitializationStatus sourceInitializationStatus = sourceWebViewViewModelBottomSheet .getSourceInitializationStatus ().getValue ();
311
+ // Source wil already be initialized if it was previously accessed or it may have loaded in a previous call where `displayBottomSheet` was false.
312
+ if (sourceInitializationStatus .equals (SourceInitializationStatus .INITIALIZED )) {
313
+ appWebViewViewModelBottomSheet .setBottomSheetState (BottomSheetBehavior .STATE_COLLAPSED );
314
+ boolean javascriptEnabled = Optional .ofNullable (sourceWebViewViewModelBottomSheet ).map ((vm ) -> vm .getSourceJavaScriptConfig ().getValue ().isEnabled ()).orElse (true );
315
+ if (!javascriptEnabled ) {
316
+ ToastRepository .show (this , R .string .toast_javascript_disabled , ToastRepository .STYLE_DARK_ACCENT );
317
+ }
318
+ } else if (sourceInitializationStatus .equals (SourceInitializationStatus .FAILED )) {
319
+ ToastRepository .show (this , R .string .toast_annotation_renderer_failed_to_initialize , ToastRepository .STYLE_DARK_ACCENT );
320
+ } else {
321
+ if (sourceInitializationStatusObserver != null ) {
322
+ sourceWebViewViewModelBottomSheet .getSourceInitializationStatus ().removeObserver (sourceInitializationStatusObserver );
323
+ }
324
+ sourceInitializationStatusObserver = new Observer <SourceInitializationStatus >() {
325
+ @ Override
326
+ public void onChanged (SourceInitializationStatus sourceInitializationStatus ) {
327
+ int sourceWebViewBottomSheetState = sourceWebViewViewModelBottomSheet .getBottomSheetBehavior ()
328
+ .map (BottomSheetBehavior ::getState )
329
+ .orElse (BottomSheetBehavior .STATE_HIDDEN );
330
+
331
+ if (sourceInitializationStatus .equals (SourceInitializationStatus .INITIALIZED ) && sourceWebViewBottomSheetState != BottomSheetBehavior .STATE_HIDDEN ) {
332
+ appWebViewViewModelBottomSheet .setBottomSheetState (BottomSheetBehavior .STATE_COLLAPSED );
333
+ }
334
+
335
+ if (sourceInitializationStatus .equals (SourceInitializationStatus .INITIALIZED ) || sourceInitializationStatus .equals (SourceInitializationStatus .FAILED )) {
336
+ sourceWebViewViewModelBottomSheet .getSourceInitializationStatus ().removeObserver (this );
337
+ }
338
+ }
339
+ };
340
+ sourceWebViewViewModelBottomSheet .getSourceInitializationStatus ().observe (this , sourceInitializationStatusObserver );
341
+ }
342
+ }
343
+ });
344
+ }
345
+
340
346
private void handleSourceWebViewBottomSheetHidden (Annotation [] createdAnnotations ) {
341
347
sourceWebViewViewModelBottomSheet .getBottomSheetBehavior ().ifPresent (b -> b .setState (BottomSheetBehavior .STATE_HIDDEN ));
342
348
try {
343
- String json = JsonArrayUtil .stringifyObjectArray (createdAnnotations , Annotation ::toJson ).toString ();
344
- JSONObject addCacheAnnotationsData = new JSONObject ();
345
- addCacheAnnotationsData .put ("annotations" , json );
346
- appWebViewPrimaryFragment .postWebEvent (new WebEvent (
347
- WebEvent .TYPE_ADD_CACHE_ANNOTATIONS ,
348
- UUID .randomUUID ().toString (),
349
- addCacheAnnotationsData
350
- ));
351
- Annotation [] annotations ;
352
- try {
353
- annotations = JsonArrayUtil .parseJsonObjectArray (new JSONArray (json ), new Annotation [0 ], Annotation ::fromJson );
354
- } catch (JSONException e ) {
355
- annotations = new Annotation [0 ];
349
+ if (createdAnnotations .length > 0 ) {
350
+ String json = JsonArrayUtil .stringifyObjectArray (createdAnnotations , Annotation ::toJson ).toString ();
351
+ JSONObject addCacheAnnotationsData = new JSONObject ();
352
+ addCacheAnnotationsData .put ("annotations" , json );
353
+ appWebViewPrimaryFragment .postWebEvent (new WebEvent (
354
+ WebEvent .TYPE_ADD_CACHE_ANNOTATIONS ,
355
+ UUID .randomUUID ().toString (),
356
+ addCacheAnnotationsData
357
+ ));
356
358
}
357
- if (annotations .length == 1 ) {
359
+
360
+ if (createdAnnotations .length == 1 ) {
358
361
ToastRepository .show (this , R .string .toast_annotation_created , ToastRepository .STYLE_DARK_ACCENT );
359
- } else if (annotations .length > 1 ) {
362
+ } else if (createdAnnotations .length > 1 ) {
360
363
ToastRepository .show (this , R .string .toast_annotations_created , ToastRepository .STYLE_DARK_ACCENT );
361
364
}
362
365
} catch (JSONException e ) {
0 commit comments