Skip to content

Commit 1e7aaba

Browse files
Use new result API (#5875)
* remove unused result expectancy for settings screen launch Signed-off-by: parneet-guraya <[email protected]> * initial refactor to new result api, wip Signed-off-by: parneet-guraya <[email protected]> * refactor camera launcher Signed-off-by: parneet-guraya <[email protected]> * revert callback for video handling Signed-off-by: parneet-guraya <[email protected]> * invoke callbacks when cancelled Signed-off-by: parneet-guraya <[email protected]> * handle gallery picker result based on preference Signed-off-by: parneet-guraya <[email protected]> * remove old method of refactoring for file picker Signed-off-by: parneet-guraya <[email protected]> * remove legacy result handling callback Signed-off-by: parneet-guraya <[email protected]> * request code used for handling result was never used for launching an activity, hence removed Signed-off-by: parneet-guraya <[email protected]> * extract voice result handling into function Signed-off-by: parneet-guraya <[email protected]> * refactor test Signed-off-by: parneet-guraya <[email protected]> * remove unused tests Signed-off-by: parneet-guraya <[email protected]> * cleanup Signed-off-by: parneet-guraya <[email protected]> * fix-docs Signed-off-by: parneet-guraya <[email protected]> * add space after , Signed-off-by: parneet-guraya <[email protected]> --------- Signed-off-by: parneet-guraya <[email protected]>
1 parent f1205c1 commit 1e7aaba

26 files changed

+406
-486
lines changed

app/src/main/java/fr/free/nrw/commons/CommonsApplication.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ public class CommonsApplication extends MultiDexApplication {
107107
/**
108108
* Constants begin
109109
*/
110-
public static final int OPEN_APPLICATION_DETAIL_SETTINGS = 1001;
111110

112111
public static final String DEFAULT_EDIT_SUMMARY = "Uploaded using [[COM:MOA|Commons Mobile App]]";
113112

app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsFragment.java

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import androidx.activity.result.ActivityResultCallback;
1010
import androidx.activity.result.ActivityResultLauncher;
1111
import androidx.activity.result.contract.ActivityResultContracts;
12+
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;
1213
import androidx.annotation.NonNull;
1314
import androidx.annotation.Nullable;
1415
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -33,6 +34,23 @@ public class BookmarkLocationsFragment extends DaggerFragment {
3334
@Inject BookmarkLocationsDao bookmarkLocationDao;
3435
@Inject CommonPlaceClickActions commonPlaceClickActions;
3536
private PlaceAdapter adapter;
37+
38+
private final ActivityResultLauncher<Intent> cameraPickLauncherForResult =
39+
registerForActivityResult(new StartActivityForResult(),
40+
result -> {
41+
contributionController.handleActivityResultWithCallback(requireActivity(), callbacks -> {
42+
contributionController.onPictureReturnedFromCamera(result, requireActivity(), callbacks);
43+
});
44+
});
45+
46+
private final ActivityResultLauncher<Intent> galleryPickLauncherForResult =
47+
registerForActivityResult(new StartActivityForResult(),
48+
result -> {
49+
contributionController.handleActivityResultWithCallback(requireActivity(), callbacks -> {
50+
contributionController.onPictureReturnedFromGallery(result, requireActivity(), callbacks);
51+
});
52+
});
53+
3654
private ActivityResultLauncher<String[]> inAppCameraLocationPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
3755
@Override
3856
public void onActivityResult(Map<String, Boolean> result) {
@@ -45,7 +63,7 @@ public void onActivityResult(Map<String, Boolean> result) {
4563
contributionController.locationPermissionCallback.onLocationPermissionGranted();
4664
} else {
4765
if (shouldShowRequestPermissionRationale(permission.ACCESS_FINE_LOCATION)) {
48-
contributionController.handleShowRationaleFlowCameraLocation(getActivity(), inAppCameraLocationPermissionLauncher);
66+
contributionController.handleShowRationaleFlowCameraLocation(getActivity(), inAppCameraLocationPermissionLauncher, cameraPickLauncherForResult);
4967
} else {
5068
contributionController.locationPermissionCallback.onLocationPermissionDenied(getActivity().getString(R.string.in_app_camera_location_permission_denied));
5169
}
@@ -83,7 +101,9 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
83101
return Unit.INSTANCE;
84102
},
85103
commonPlaceClickActions,
86-
inAppCameraLocationPermissionLauncher
104+
inAppCameraLocationPermissionLauncher,
105+
galleryPickLauncherForResult,
106+
cameraPickLauncherForResult
87107
);
88108
binding.listView.setAdapter(adapter);
89109
}
@@ -109,11 +129,6 @@ private void initList() {
109129
}
110130
}
111131

112-
@Override
113-
public void onActivityResult(int requestCode, int resultCode, Intent data) {
114-
contributionController.handleActivityResult(getActivity(), requestCode, resultCode, data);
115-
}
116-
117132
@Override
118133
public void onDestroy() {
119134
super.onDestroy();

app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java

Lines changed: 55 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import android.content.Context;
88
import android.content.Intent;
99
import android.widget.Toast;
10+
import androidx.activity.result.ActivityResult;
1011
import androidx.activity.result.ActivityResultLauncher;
1112
import androidx.annotation.NonNull;
1213
import androidx.lifecycle.LiveData;
@@ -64,23 +65,24 @@ public ContributionController(@Named("default_preferences") JsonKvStore defaultK
6465
* Check for permissions and initiate camera click
6566
*/
6667
public void initiateCameraPick(Activity activity,
67-
ActivityResultLauncher<String[]> inAppCameraLocationPermissionLauncher) {
68+
ActivityResultLauncher<String[]> inAppCameraLocationPermissionLauncher,
69+
ActivityResultLauncher<Intent> resultLauncher) {
6870
boolean useExtStorage = defaultKvStore.getBoolean("useExternalStorage", true);
6971
if (!useExtStorage) {
70-
initiateCameraUpload(activity);
72+
initiateCameraUpload(activity, resultLauncher);
7173
return;
7274
}
7375

7476
PermissionUtils.checkPermissionsAndPerformAction(activity,
7577
() -> {
7678
if (defaultKvStore.getBoolean("inAppCameraFirstRun")) {
7779
defaultKvStore.putBoolean("inAppCameraFirstRun", false);
78-
askUserToAllowLocationAccess(activity, inAppCameraLocationPermissionLauncher);
80+
askUserToAllowLocationAccess(activity, inAppCameraLocationPermissionLauncher, resultLauncher);
7981
} else if (defaultKvStore.getBoolean("inAppCameraLocationPref")) {
8082
createDialogsAndHandleLocationPermissions(activity,
81-
inAppCameraLocationPermissionLauncher);
83+
inAppCameraLocationPermissionLauncher, resultLauncher);
8284
} else {
83-
initiateCameraUpload(activity);
85+
initiateCameraUpload(activity, resultLauncher);
8486
}
8587
},
8688
R.string.storage_permission_title,
@@ -94,7 +96,8 @@ public void initiateCameraPick(Activity activity,
9496
* @param activity
9597
*/
9698
private void createDialogsAndHandleLocationPermissions(Activity activity,
97-
ActivityResultLauncher<String[]> inAppCameraLocationPermissionLauncher) {
99+
ActivityResultLauncher<String[]> inAppCameraLocationPermissionLauncher,
100+
ActivityResultLauncher<Intent> resultLauncher) {
98101
locationPermissionCallback = new LocationPermissionCallback() {
99102
@Override
100103
public void onLocationPermissionDenied(String toastMessage) {
@@ -103,16 +106,16 @@ public void onLocationPermissionDenied(String toastMessage) {
103106
toastMessage,
104107
Toast.LENGTH_LONG
105108
).show();
106-
initiateCameraUpload(activity);
109+
initiateCameraUpload(activity, resultLauncher);
107110
}
108111

109112
@Override
110113
public void onLocationPermissionGranted() {
111114
if (!locationPermissionsHelper.isLocationAccessToAppsTurnedOn()) {
112115
showLocationOffDialog(activity, R.string.in_app_camera_needs_location,
113-
R.string.in_app_camera_location_unavailable);
116+
R.string.in_app_camera_location_unavailable, resultLauncher);
114117
} else {
115-
initiateCameraUpload(activity);
118+
initiateCameraUpload(activity, resultLauncher);
116119
}
117120
}
118121
};
@@ -135,9 +138,10 @@ public void onLocationPermissionGranted() {
135138
* @param activity Activity reference
136139
* @param dialogTextResource Resource id of text to be shown in dialog
137140
* @param toastTextResource Resource id of text to be shown in toast
141+
* @param resultLauncher
138142
*/
139143
private void showLocationOffDialog(Activity activity, int dialogTextResource,
140-
int toastTextResource) {
144+
int toastTextResource, ActivityResultLauncher<Intent> resultLauncher) {
141145
DialogUtil
142146
.showAlertDialog(activity,
143147
activity.getString(R.string.ask_to_turn_location_on),
@@ -148,20 +152,21 @@ private void showLocationOffDialog(Activity activity, int dialogTextResource,
148152
() -> {
149153
Toast.makeText(activity, activity.getString(toastTextResource),
150154
Toast.LENGTH_LONG).show();
151-
initiateCameraUpload(activity);
155+
initiateCameraUpload(activity, resultLauncher);
152156
}
153157
);
154158
}
155159

156160
public void handleShowRationaleFlowCameraLocation(Activity activity,
157-
ActivityResultLauncher<String[]> inAppCameraLocationPermissionLauncher) {
161+
ActivityResultLauncher<String[]> inAppCameraLocationPermissionLauncher,
162+
ActivityResultLauncher<Intent> resultLauncher) {
158163
DialogUtil.showAlertDialog(activity, activity.getString(R.string.location_permission_title),
159164
activity.getString(R.string.in_app_camera_location_permission_rationale),
160165
activity.getString(android.R.string.ok),
161166
activity.getString(android.R.string.cancel),
162167
() -> {
163168
createDialogsAndHandleLocationPermissions(activity,
164-
inAppCameraLocationPermissionLauncher);
169+
inAppCameraLocationPermissionLauncher, resultLauncher);
165170
},
166171
() -> locationPermissionCallback.onLocationPermissionDenied(
167172
activity.getString(R.string.in_app_camera_location_permission_denied)),
@@ -181,7 +186,8 @@ public void handleShowRationaleFlowCameraLocation(Activity activity,
181186
* @param activity
182187
*/
183188
private void askUserToAllowLocationAccess(Activity activity,
184-
ActivityResultLauncher<String[]> inAppCameraLocationPermissionLauncher) {
189+
ActivityResultLauncher<String[]> inAppCameraLocationPermissionLauncher,
190+
ActivityResultLauncher<Intent> resultLauncher) {
185191
DialogUtil.showAlertDialog(activity,
186192
activity.getString(R.string.in_app_camera_location_permission_title),
187193
activity.getString(R.string.in_app_camera_location_access_explanation),
@@ -190,12 +196,12 @@ private void askUserToAllowLocationAccess(Activity activity,
190196
() -> {
191197
defaultKvStore.putBoolean("inAppCameraLocationPref", true);
192198
createDialogsAndHandleLocationPermissions(activity,
193-
inAppCameraLocationPermissionLauncher);
199+
inAppCameraLocationPermissionLauncher, resultLauncher);
194200
},
195201
() -> {
196202
ViewUtil.showLongToast(activity, R.string.in_app_camera_location_permission_denied);
197203
defaultKvStore.putBoolean("inAppCameraLocationPref", false);
198-
initiateCameraUpload(activity);
204+
initiateCameraUpload(activity, resultLauncher);
199205
},
200206
null,
201207
true);
@@ -204,18 +210,18 @@ private void askUserToAllowLocationAccess(Activity activity,
204210
/**
205211
* Initiate gallery picker
206212
*/
207-
public void initiateGalleryPick(final Activity activity, final boolean allowMultipleUploads) {
208-
initiateGalleryUpload(activity, allowMultipleUploads);
213+
public void initiateGalleryPick(final Activity activity, ActivityResultLauncher<Intent> resultLauncher, final boolean allowMultipleUploads) {
214+
initiateGalleryUpload(activity, resultLauncher, allowMultipleUploads);
209215
}
210216

211217
/**
212218
* Initiate gallery picker with permission
213219
*/
214-
public void initiateCustomGalleryPickWithPermission(final Activity activity) {
220+
public void initiateCustomGalleryPickWithPermission(final Activity activity, ActivityResultLauncher<Intent> resultLauncher) {
215221
setPickerConfiguration(activity, true);
216222

217223
PermissionUtils.checkPermissionsAndPerformAction(activity,
218-
() -> FilePicker.openCustomSelector(activity, 0),
224+
() -> FilePicker.openCustomSelector(activity, resultLauncher, 0),
219225
R.string.storage_permission_title,
220226
R.string.write_storage_permission_rationale,
221227
PermissionUtils.PERMISSIONS_STORAGE);
@@ -225,12 +231,10 @@ public void initiateCustomGalleryPickWithPermission(final Activity activity) {
225231
/**
226232
* Open chooser for gallery uploads
227233
*/
228-
private void initiateGalleryUpload(final Activity activity,
234+
private void initiateGalleryUpload(final Activity activity, ActivityResultLauncher<Intent> resultLauncher,
229235
final boolean allowMultipleUploads) {
230236
setPickerConfiguration(activity, allowMultipleUploads);
231-
boolean openDocumentIntentPreferred = defaultKvStore.getBoolean(
232-
"openDocumentPhotoPickerPref", true);
233-
FilePicker.openGallery(activity, 0, openDocumentIntentPreferred);
237+
FilePicker.openGallery(activity, resultLauncher, 0, isDocumentPhotoPickerPreferred());
234238
}
235239

236240
/**
@@ -247,22 +251,43 @@ private void setPickerConfiguration(Activity activity,
247251
/**
248252
* Initiate camera upload by opening camera
249253
*/
250-
private void initiateCameraUpload(Activity activity) {
254+
private void initiateCameraUpload(Activity activity, ActivityResultLauncher<Intent> resultLauncher) {
251255
setPickerConfiguration(activity, false);
252256
if (defaultKvStore.getBoolean("inAppCameraLocationPref", false)) {
253257
locationBeforeImageCapture = locationManager.getLastLocation();
254258
}
255259
isInAppCameraUpload = true;
256-
FilePicker.openCameraForImage(activity, 0);
260+
FilePicker.openCameraForImage(activity, resultLauncher, 0);
261+
}
262+
263+
private boolean isDocumentPhotoPickerPreferred(){
264+
return defaultKvStore.getBoolean(
265+
"openDocumentPhotoPickerPref", true);
266+
}
267+
268+
public void onPictureReturnedFromGallery(ActivityResult result, Activity activity, FilePicker.Callbacks callbacks){
269+
270+
if(isDocumentPhotoPickerPreferred()){
271+
FilePicker.onPictureReturnedFromDocuments(result, activity, callbacks);
272+
} else {
273+
FilePicker.onPictureReturnedFromGallery(result, activity, callbacks);
274+
}
275+
}
276+
277+
public void onPictureReturnedFromCustomSelector(ActivityResult result, Activity activity, @NonNull FilePicker.Callbacks callbacks) {
278+
FilePicker.onPictureReturnedFromCustomSelector(result, activity, callbacks);
279+
}
280+
281+
public void onPictureReturnedFromCamera(ActivityResult result, Activity activity, @NonNull FilePicker.Callbacks callbacks) {
282+
FilePicker.onPictureReturnedFromCamera(result, activity, callbacks);
257283
}
258284

259285
/**
260286
* Attaches callback for file picker.
261287
*/
262-
public void handleActivityResult(Activity activity, int requestCode, int resultCode,
263-
Intent data) {
264-
FilePicker.handleActivityResult(requestCode, resultCode, data, activity,
265-
new DefaultCallback() {
288+
public void handleActivityResultWithCallback(Activity activity, FilePicker.HandleActivityResult handleActivityResult) {
289+
290+
handleActivityResult.onHandleActivityResult(new DefaultCallback() {
266291

267292
@Override
268293
public void onCanceled(final ImageSource source, final int type) {

app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import android.Manifest.permission;
88
import android.content.Context;
9+
import android.content.Intent;
910
import android.content.res.Configuration;
1011
import android.net.Uri;
1112
import android.os.Bundle;
@@ -20,6 +21,7 @@
2021
import androidx.activity.result.ActivityResultCallback;
2122
import androidx.activity.result.ActivityResultLauncher;
2223
import androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions;
24+
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;
2325
import androidx.annotation.NonNull;
2426
import androidx.annotation.Nullable;
2527
import androidx.annotation.VisibleForTesting;
@@ -96,6 +98,30 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl
9698
private int contributionsSize;
9799
private String userName;
98100

101+
private final ActivityResultLauncher<Intent> galleryPickLauncherForResult =
102+
registerForActivityResult(new StartActivityForResult(),
103+
result -> {
104+
controller.handleActivityResultWithCallback(requireActivity(), callbacks -> {
105+
controller.onPictureReturnedFromGallery(result, requireActivity(), callbacks);
106+
});
107+
});
108+
109+
private final ActivityResultLauncher<Intent> customSelectorLauncherForResult =
110+
registerForActivityResult(new StartActivityForResult(),
111+
result -> {
112+
controller.handleActivityResultWithCallback(requireActivity(), callbacks -> {
113+
controller.onPictureReturnedFromCustomSelector(result, requireActivity(), callbacks);
114+
});
115+
});
116+
117+
private final ActivityResultLauncher<Intent> cameraPickLauncherForResult =
118+
registerForActivityResult(new StartActivityForResult(),
119+
result -> {
120+
controller.handleActivityResultWithCallback(requireActivity(), callbacks -> {
121+
controller.onPictureReturnedFromCamera(result, requireActivity(), callbacks);
122+
});
123+
});
124+
99125
private ActivityResultLauncher<String[]> inAppCameraLocationPermissionLauncher = registerForActivityResult(
100126
new RequestMultiplePermissions(),
101127
new ActivityResultCallback<Map<String, Boolean>>() {
@@ -111,7 +137,7 @@ public void onActivityResult(Map<String, Boolean> result) {
111137
} else {
112138
if (shouldShowRequestPermissionRationale(permission.ACCESS_FINE_LOCATION)) {
113139
controller.handleShowRationaleFlowCameraLocation(getActivity(),
114-
inAppCameraLocationPermissionLauncher);
140+
inAppCameraLocationPermissionLauncher, cameraPickLauncherForResult);
115141
} else {
116142
controller.locationPermissionCallback.onLocationPermissionDenied(
117143
getActivity().getString(
@@ -322,15 +348,15 @@ private void initializeAnimations() {
322348
private void setListeners() {
323349
binding.fabPlus.setOnClickListener(view -> animateFAB(isFabOpen));
324350
binding.fabCamera.setOnClickListener(view -> {
325-
controller.initiateCameraPick(getActivity(), inAppCameraLocationPermissionLauncher);
351+
controller.initiateCameraPick(getActivity(), inAppCameraLocationPermissionLauncher, cameraPickLauncherForResult);
326352
animateFAB(isFabOpen);
327353
});
328354
binding.fabCamera.setOnLongClickListener(view -> {
329355
ViewUtil.showShortToast(getContext(), R.string.add_contribution_from_camera);
330356
return true;
331357
});
332358
binding.fabGallery.setOnClickListener(view -> {
333-
controller.initiateGalleryPick(getActivity(), true);
359+
controller.initiateGalleryPick(getActivity(), galleryPickLauncherForResult, true);
334360
animateFAB(isFabOpen);
335361
});
336362
binding.fabGallery.setOnLongClickListener(view -> {
@@ -343,7 +369,7 @@ private void setListeners() {
343369
* Launch Custom Selector.
344370
*/
345371
protected void launchCustomSelector() {
346-
controller.initiateCustomGalleryPickWithPermission(getActivity());
372+
controller.initiateCustomGalleryPickWithPermission(getActivity(), customSelectorLauncherForResult);
347373
animateFAB(isFabOpen);
348374
}
349375

app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -438,13 +438,6 @@ public void onReady() {
438438
});
439439
}
440440

441-
@Override
442-
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
443-
Timber.d(data != null ? data.toString() : "onActivityResult data is null");
444-
super.onActivityResult(requestCode, resultCode, data);
445-
controller.handleActivityResult(this, requestCode, resultCode, data);
446-
}
447-
448441
@Override
449442
protected void onResume() {
450443
super.onResume();

0 commit comments

Comments
 (0)