From 23f1612927c33772f057bb71e9581eaceb8fd3e1 Mon Sep 17 00:00:00 2001 From: Eugen Stan Date: Tue, 3 Jan 2023 21:16:31 +0200 Subject: [PATCH 1/9] Added capacitor/filesystem library * Android app loads in emulator --- android/app/capacitor.build.gradle | 1 + android/app/src/main/assets/capacitor.plugins.json | 4 ++++ android/capacitor.settings.gradle | 3 +++ 3 files changed, 8 insertions(+) diff --git a/android/app/capacitor.build.gradle b/android/app/capacitor.build.gradle index 5f94affb4..6ba9224e5 100644 --- a/android/app/capacitor.build.gradle +++ b/android/app/capacitor.build.gradle @@ -10,6 +10,7 @@ android { apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" dependencies { implementation project(':capacitor-app') + implementation project(':capacitor-filesystem') implementation project(':send-intent') } diff --git a/android/app/src/main/assets/capacitor.plugins.json b/android/app/src/main/assets/capacitor.plugins.json index 476076f87..7faf19961 100644 --- a/android/app/src/main/assets/capacitor.plugins.json +++ b/android/app/src/main/assets/capacitor.plugins.json @@ -3,6 +3,10 @@ "pkg": "@capacitor/app", "classpath": "com.capacitorjs.plugins.app.AppPlugin" }, + { + "pkg": "@capacitor/filesystem", + "classpath": "com.capacitorjs.plugins.filesystem.FilesystemPlugin" + }, { "pkg": "send-intent", "classpath": "de.mindlib.sendIntent.SendIntent" diff --git a/android/capacitor.settings.gradle b/android/capacitor.settings.gradle index 7030d8533..a3d492dc6 100644 --- a/android/capacitor.settings.gradle +++ b/android/capacitor.settings.gradle @@ -5,5 +5,8 @@ project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/ include ':capacitor-app' project(':capacitor-app').projectDir = new File('../node_modules/@capacitor/app/android') +include ':capacitor-filesystem' +project(':capacitor-filesystem').projectDir = new File('../node_modules/@capacitor/filesystem/android') + include ':send-intent' project(':send-intent').projectDir = new File('../node_modules/send-intent/android') From ddf41a3451784473952e894d53b4b4e17004dee2 Mon Sep 17 00:00:00 2001 From: Eugen Stan Date: Thu, 5 Jan 2023 22:43:23 +0200 Subject: [PATCH 2/9] File picker not able to select files on SD card --- android/app/capacitor.build.gradle | 1 + android/app/src/main/AndroidManifest.xml | 2 + .../src/main/assets/capacitor.plugins.json | 4 ++ android/capacitor.settings.gradle | 3 + package.json | 8 ++- src/components/SyncServiceSignIn/index.js | 64 +++++++++++++++++++ yarn.lock | 16 ++++- 7 files changed, 92 insertions(+), 6 deletions(-) diff --git a/android/app/capacitor.build.gradle b/android/app/capacitor.build.gradle index 6ba9224e5..06c591345 100644 --- a/android/app/capacitor.build.gradle +++ b/android/app/capacitor.build.gradle @@ -11,6 +11,7 @@ apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" dependencies { implementation project(':capacitor-app') implementation project(':capacitor-filesystem') + implementation project(':capawesome-capacitor-file-picker') implementation project(':send-intent') } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 8b95ab90e..f7e78a056 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -66,4 +66,6 @@ + + diff --git a/android/app/src/main/assets/capacitor.plugins.json b/android/app/src/main/assets/capacitor.plugins.json index 7faf19961..56f3384f6 100644 --- a/android/app/src/main/assets/capacitor.plugins.json +++ b/android/app/src/main/assets/capacitor.plugins.json @@ -7,6 +7,10 @@ "pkg": "@capacitor/filesystem", "classpath": "com.capacitorjs.plugins.filesystem.FilesystemPlugin" }, + { + "pkg": "@capawesome/capacitor-file-picker", + "classpath": "io.capawesome.capacitorjs.plugins.filepicker.FilePickerPlugin" + }, { "pkg": "send-intent", "classpath": "de.mindlib.sendIntent.SendIntent" diff --git a/android/capacitor.settings.gradle b/android/capacitor.settings.gradle index a3d492dc6..fa26cf6c7 100644 --- a/android/capacitor.settings.gradle +++ b/android/capacitor.settings.gradle @@ -8,5 +8,8 @@ project(':capacitor-app').projectDir = new File('../node_modules/@capacitor/app/ include ':capacitor-filesystem' project(':capacitor-filesystem').projectDir = new File('../node_modules/@capacitor/filesystem/android') +include ':capawesome-capacitor-file-picker' +project(':capawesome-capacitor-file-picker').projectDir = new File('../node_modules/@capawesome/capacitor-file-picker/android') + include ':send-intent' project(':send-intent').projectDir = new File('../node_modules/send-intent/android') diff --git a/package.json b/package.json index 1b1201dc5..15f68ba89 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,11 @@ "dependencies": { "@babel/helper-environment-visitor": "^7.18.2", "@bity/oauth2-auth-code-pkce": "^2.13.0", - "@capacitor/android": "^4.0.0", - "@capacitor/app": "^4.0.0", - "@capacitor/core": "^4.0.0", + "@capacitor/android": "^4.6.1", + "@capacitor/app": "^4.1.1", + "@capacitor/core": "^4.6.1", + "@capacitor/filesystem": "^4.1.4", + "@capawesome/capacitor-file-picker": "^0.5.2", "aos": "^2.3.4", "bowser": "^2.11.0", "classnames": "^2.2.6", diff --git a/src/components/SyncServiceSignIn/index.js b/src/components/SyncServiceSignIn/index.js index fa32a6520..1fd380981 100644 --- a/src/components/SyncServiceSignIn/index.js +++ b/src/components/SyncServiceSignIn/index.js @@ -11,6 +11,9 @@ import { gitLabProjectIdFromURL, } from '../../sync_backend_clients/gitlab_sync_backend_client'; +import { Filesystem } from '@capacitor/filesystem'; +import { FilePicker } from '@capawesome/capacitor-file-picker'; + import { Dropbox } from 'dropbox'; import _ from 'lodash'; @@ -149,6 +152,63 @@ function GitLab() { ); } +const pickFiles = async () => { + // 1. Request permissions + await Filesystem.requestPermissions(); + // 2. Pick files + const result = await FilePicker.pickFiles(); + const file = result.files[0]; + + alert('Selected file is' + + JSON.stringify(file) + + ' ' + JSON.stringify(result)); + return result +}; + +function LocalStorage() { + const [isVisible, setIsVisible] = useState(false); + const toggleVisible = () => setIsVisible(!isVisible); + + const defaultOrgDirectory = '/org'; + const [orgDirectory, setOrgDirectory] = useState(defaultOrgDirectory); + + pickFiles(); + + return ( +
+

+ + Local Storage + +

+ {isVisible && ( + <> +
{ + event.preventDefault(); + persistField('authenticatedSyncService', 'LocalStorage'); + persistField('orgDirectory', orgDirectory); + }} + > +

+ + setOrgDirectory(e.target.value)} + /> +

+ +
+ + )} +
+ ); +} + export default class SyncServiceSignIn extends PureComponent { constructor(props) { super(props); @@ -190,6 +250,10 @@ export default class SyncServiceSignIn extends PureComponent { +
+ +
+