//creates a local ioc where the sourceIoc can be stored to public static IOConnectionInfo GetInternalIoc(IOConnectionInfo sourceIoc, Context ctx, IKp2aApp app) { Java.IO.File internalDirectory = IoUtil.GetInternalDirectory(ctx); var filestorage = app.GetFileStorage(sourceIoc); string targetPath = filestorage.GetFilenameWithoutPathAndExt(sourceIoc); targetPath = targetPath.Trim("|\\?*<\":>+[]/'".ToCharArray()); if (targetPath == "") { targetPath = "internal"; } if (new File(internalDirectory, targetPath).Exists()) { int c = 1; var ext = UrlUtil.GetExtension(targetPath); var filenameWithoutExt = UrlUtil.StripExtension(targetPath); do { c++; targetPath = filenameWithoutExt + c; if (!String.IsNullOrEmpty(ext)) { targetPath += "." + ext; } } while (new File(internalDirectory, targetPath).Exists()); } return(IOConnectionInfo.FromPath(new File(internalDirectory, targetPath).CanonicalPath)); }
public void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode, bool alwaysReturnSuccess) { //check if we need to request the external-storage-permission at runtime if (ioc.IsLocalFile()) { bool requiresPermission = !(ioc.Path.StartsWith(activity.Activity.FilesDir.CanonicalPath) || ioc.Path.StartsWith(IoUtil.GetInternalDirectory(activity.Activity).CanonicalPath) || ioc.Path.StartsWith(IoUtil.GetInternalDirectory(activity.Activity).CanonicalPath)); var extDirectory = activity.Activity.GetExternalFilesDir(null); if ((extDirectory != null) && (ioc.Path.StartsWith(extDirectory.CanonicalPath))) { requiresPermission = false; } if (requiresPermission && (Build.VERSION.SdkInt >= BuildVersionCodes.M)) { if ((activity.Activity.CheckSelfPermission(Manifest.Permission.WriteExternalStorage) == Permission.Denied) || (activity.Activity.CheckSelfPermission(Manifest.Permission.ReadExternalStorage) == Permission.Denied)) { activity.StartFileUsageProcess(ioc, requestCode, alwaysReturnSuccess); return; } } } Intent intent = new Intent(); activity.IocToIntent(intent, ioc); activity.OnImmediateResult(requestCode, (int)FileStorageResults.FileUsagePrepared, intent); }
public CachingFileStorage(IFileStorage cachedStorage, Context cacheDirContext, ICacheSupervisor cacheSupervisor) { _cachedStorage = new OfflineSwitchableFileStorage(cachedStorage); _cacheSupervisor = cacheSupervisor; _legacyCacheDir = cacheDirContext.CacheDir.Path + Java.IO.File.Separator + "OfflineCache" + Java.IO.File.Separator; if (!Directory.Exists(_legacyCacheDir)) { Directory.CreateDirectory(_legacyCacheDir); } _cacheDir = IoUtil.GetInternalDirectory(cacheDirContext).Path + Java.IO.File.Separator + "OfflineCache" + Java.IO.File.Separator; if (!Directory.Exists(_cacheDir)) { Directory.CreateDirectory(_cacheDir); } }