Skip to content

Commit 34a38d5

Browse files
PhilLabalperozturk96
authored andcommitted
feat(doc-scan): If built-in scanning not available, check for FairScan
Built-in scanning is not available for all build variants - e.g. not for "generic", which is the flavor for the F-Droid release. It doesn't allow the non-reproducible TinyOpenCV build. If this is the case, we are checking whether the open source scanning app FairScan is available (https://github.com/pynicolas/FairScan) and open that one for scanning. The declaration in the AndroidManifest is required since Android 11 (API level 30), otherwise the Intent would always be null. See https://developer.android.com/training/package-visibility Signed-off-by: Philipp Hasper <vcs@hasper.info>
1 parent 0810df4 commit 34a38d5

5 files changed

Lines changed: 40 additions & 0 deletions

File tree

app/src/androidTest/java/com/owncloud/android/ui/dialog/DialogFragmentIT.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,8 @@ class DialogFragmentIT : AbstractIT() {
434434
override fun newPresentation() = Unit
435435
override fun directCameraUpload() = Unit
436436
override fun scanDocUpload() = Unit
437+
override fun scanDocUploadFromApp() = Unit
438+
override fun isScanDocUploadFromAppAvailable(): Boolean = false
437439
override fun showTemplate(creator: Creator?, headline: String?) = Unit
438440
override fun createRichWorkspace() = Unit
439441
}

app/src/main/AndroidManifest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@
107107
<intent>
108108
<action android:name="android.intent.action.GET_CONTENT" />
109109
</intent>
110+
<intent>
111+
<!-- Since Android 11 (API level 30), this is required to detect the availability of FairScan to use
112+
for external document scanning. See https://developer.android.com/training/package-visibility -->
113+
<action android:name="org.fairscan.app.action.SCAN_TO_PDF" />
114+
</intent>
110115
</queries>
111116

112117
<application

app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetActions.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,16 @@ public interface OCFileListBottomSheetActions {
5353
*/
5454
void scanDocUpload();
5555

56+
/**
57+
* Offers scanning a document in a supported external app and then upload to the current folder.
58+
*/
59+
void scanDocUploadFromApp();
60+
61+
/**
62+
* @return true, if a supported external app is available for {@link #scanDocUploadFromApp()}
63+
*/
64+
boolean isScanDocUploadFromAppAvailable();
65+
5666
/**
5767
* open template selection for creator @link Creator
5868
*/

app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,11 @@ class OCFileListBottomSheetDialog(
204204
actions.scanDocUpload()
205205
dismiss()
206206
}
207+
} else if (actions.isScanDocUploadFromAppAvailable) {
208+
menuScanDocUpload.setOnClickListener {
209+
actions.scanDocUploadFromApp()
210+
dismiss()
211+
}
207212
} else {
208213
menuScanDocUpload.visibility = View.GONE
209214
}

app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,8 @@ public class OCFileListFragment extends ExtendedListFragment implements
226226
private FloatingActionButton mFabMain;
227227
public static boolean isMultipleFileSelectedForCopyOrMove = false;
228228

229+
private static final Intent mFairScanIntent = new Intent("org.fairscan.app.action.SCAN_TO_PDF");
230+
229231
@Inject DeviceInfo deviceInfo;
230232

231233
protected enum MenuItemAddRemove {
@@ -587,6 +589,22 @@ public void scanDocUpload() {
587589
}
588590
}
589591

592+
@Override
593+
public void scanDocUploadFromApp() {
594+
requireActivity().startActivityForResult(
595+
mFairScanIntent,
596+
FileDisplayActivity.REQUEST_CODE__SELECT_CONTENT_FROM_APPS);
597+
}
598+
599+
@Override
600+
public boolean isScanDocUploadFromAppAvailable() {
601+
var context = getActivity();
602+
if (context == null) {
603+
return false;
604+
}
605+
return mFairScanIntent.resolveActivity(context.getPackageManager()) != null;
606+
}
607+
590608
@Override
591609
public void uploadFiles() {
592610
if (!(getActivity() instanceof FileActivity fileActivity)) {

0 commit comments

Comments
 (0)