Fix build project using Java 11
This commit is contained in:
parent
5192194cf7
commit
bb07076ba8
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@ -15,6 +15,6 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-java@v1
|
- uses: actions/setup-java@v1
|
||||||
with:
|
with:
|
||||||
java-version: 1.8
|
java-version: 11
|
||||||
- name: Build and Test
|
- name: Build and Test
|
||||||
run: bash ./gradlew clean test --stacktrace
|
run: bash ./gradlew clean test --stacktrace
|
||||||
|
2
.idea/codeStyles/Project.xml
generated
2
.idea/codeStyles/Project.xml
generated
@ -31,6 +31,7 @@
|
|||||||
</option>
|
</option>
|
||||||
<option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="999" />
|
<option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="999" />
|
||||||
<option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" value="999" />
|
<option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" value="999" />
|
||||||
|
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||||
</JetCodeStyleSettings>
|
</JetCodeStyleSettings>
|
||||||
<Properties>
|
<Properties>
|
||||||
<option name="KEEP_BLANK_LINES" value="true" />
|
<option name="KEEP_BLANK_LINES" value="true" />
|
||||||
@ -178,6 +179,7 @@
|
|||||||
</arrangement>
|
</arrangement>
|
||||||
</codeStyleSettings>
|
</codeStyleSettings>
|
||||||
<codeStyleSettings language="kotlin">
|
<codeStyleSettings language="kotlin">
|
||||||
|
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
|
||||||
<option name="BLANK_LINES_AFTER_CLASS_HEADER" value="1" />
|
<option name="BLANK_LINES_AFTER_CLASS_HEADER" value="1" />
|
||||||
<indentOptions>
|
<indentOptions>
|
||||||
<option name="USE_TAB_CHARACTER" value="true" />
|
<option name="USE_TAB_CHARACTER" value="true" />
|
||||||
|
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@ -45,7 +45,7 @@
|
|||||||
</value>
|
</value>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="JDK" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="false" project-jdk-name="JDK" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectType">
|
<component name="ProjectType">
|
||||||
|
1
.idea/runConfigurations.xml
generated
1
.idea/runConfigurations.xml
generated
@ -3,6 +3,7 @@
|
|||||||
<component name="RunConfigurationProducerService">
|
<component name="RunConfigurationProducerService">
|
||||||
<option name="ignoredProducers">
|
<option name="ignoredProducers">
|
||||||
<set>
|
<set>
|
||||||
|
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
|
||||||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
|
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
|
||||||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
|
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
|
||||||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
|
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
|
||||||
|
@ -19,7 +19,7 @@ Cryptomator for Android is currently available in the following distribution ch
|
|||||||
### Dependencies
|
### Dependencies
|
||||||
|
|
||||||
* Git
|
* Git
|
||||||
* JDK 8
|
* JDK 11
|
||||||
* Gradle
|
* Gradle
|
||||||
|
|
||||||
### Run Git and Gradle
|
### Run Git and Gradle
|
||||||
|
@ -1,18 +1,16 @@
|
|||||||
apply from: 'buildsystem/ci.gradle'
|
|
||||||
apply from: 'buildsystem/dependencies.gradle'
|
apply from: 'buildsystem/dependencies.gradle'
|
||||||
apply plugin: "com.vanniktech.android.junit.jacoco"
|
apply plugin: "com.vanniktech.android.junit.jacoco"
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.4.32'
|
ext.kotlin_version = '1.5.0'
|
||||||
repositories {
|
repositories {
|
||||||
jcenter()
|
jcenter()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
google()
|
google()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:4.1.3'
|
classpath 'com.android.tools.build:gradle:4.2.1'
|
||||||
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
|
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
|
||||||
classpath 'com.fernandocejas.frodo:frodo-plugin:0.8.3'
|
|
||||||
classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.16.0'
|
classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.16.0'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
classpath "de.mannodermaus.gradle.plugins:android-junit5:1.7.1.1"
|
classpath "de.mannodermaus.gradle.plugins:android-junit5:1.7.1.1"
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
def ciServer = 'TRAVIS'
|
|
||||||
def executingOnCI = "true" == System.getenv(ciServer)
|
|
||||||
|
|
||||||
// Since for CI we always do full clean builds, we don't want to pre-dex
|
|
||||||
// See http://tools.android.com/tech-docs/new-build-system/tips
|
|
||||||
subprojects {
|
|
||||||
project.plugins.whenPluginAdded { plugin ->
|
|
||||||
if ('com.android.build.gradle.AppPlugin' == plugin.class.name ||
|
|
||||||
'com.android.build.gradle.LibraryPlugin' == plugin.class.name) {
|
|
||||||
project.android.dexOptions.preDexLibraries = !executingOnCI
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -5,7 +5,7 @@ allprojects {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
androidBuildToolsVersion = "29.0.3"
|
androidBuildToolsVersion = "30.0.2"
|
||||||
androidMinSdkVersion = 24
|
androidMinSdkVersion = 24
|
||||||
androidTargetSdkVersion = 29
|
androidTargetSdkVersion = 29
|
||||||
androidCompileSdkVersion = 29
|
androidCompileSdkVersion = 29
|
||||||
|
@ -114,7 +114,7 @@ dependencies {
|
|||||||
implementation dependencies.msgraph
|
implementation dependencies.msgraph
|
||||||
|
|
||||||
implementation dependencies.stax
|
implementation dependencies.stax
|
||||||
compile dependencies.minIo
|
api dependencies.minIo
|
||||||
|
|
||||||
playstoreImplementation dependencies.googlePlayServicesAuth
|
playstoreImplementation dependencies.googlePlayServicesAuth
|
||||||
apkstoreImplementation dependencies.googlePlayServicesAuth
|
apkstoreImplementation dependencies.googlePlayServicesAuth
|
||||||
|
5
gradle/wrapper/gradle-wrapper.properties
vendored
5
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,5 +1,6 @@
|
|||||||
|
#Wed May 12 18:12:25 CEST 2021
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-bin.zip
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip
|
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
@ -122,7 +122,7 @@ class BrowseFilesPresenter @Inject constructor( //
|
|||||||
.withVault(vault.toVault()) //
|
.withVault(vault.toVault()) //
|
||||||
.run(DefaultResultHandler())
|
.run(DefaultResultHandler())
|
||||||
}
|
}
|
||||||
setRefreshOnBackpressEnabled(enableRefreshOnBackpressSupplier.setInAction(false))
|
setRefreshOnBackPressEnabled(enableRefreshOnBackpressSupplier.setInAction(false))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onWindowFocusChanged(hasFocus: Boolean) {
|
fun onWindowFocusChanged(hasFocus: Boolean) {
|
||||||
@ -967,7 +967,7 @@ class BrowseFilesPresenter @Inject constructor( //
|
|||||||
|
|
||||||
@Callback
|
@Callback
|
||||||
fun moveNodes(result: ActivityResult, nodesToMove: ArrayList<CloudNodeModel<*>>) {
|
fun moveNodes(result: ActivityResult, nodesToMove: ArrayList<CloudNodeModel<*>>) {
|
||||||
setRefreshOnBackpressEnabled(enableRefreshOnBackpressSupplier.setInAction(true))
|
setRefreshOnBackPressEnabled(enableRefreshOnBackpressSupplier.setInAction(true))
|
||||||
val targetFolder = result.getSingleResult(CloudFolderModel::class.java)
|
val targetFolder = result.getSingleResult(CloudFolderModel::class.java)
|
||||||
moveCloudFile(targetFolder, nodesFor(nodesToMove, CloudFileModel::class) as List<CloudFileModel>)
|
moveCloudFile(targetFolder, nodesFor(nodesToMove, CloudFileModel::class) as List<CloudFileModel>)
|
||||||
moveCloudFolder(targetFolder, nodesFor(nodesToMove, CloudFolderModel::class) as List<CloudFolderModel>)
|
moveCloudFolder(targetFolder, nodesFor(nodesToMove, CloudFolderModel::class) as List<CloudFolderModel>)
|
||||||
@ -975,7 +975,7 @@ class BrowseFilesPresenter @Inject constructor( //
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun disableSelectionMode() {
|
fun disableSelectionMode() {
|
||||||
setRefreshOnBackpressEnabled(enableRefreshOnBackpressSupplier.setInSelectionMode(false))
|
setRefreshOnBackPressEnabled(enableRefreshOnBackpressSupplier.setInSelectionMode(false))
|
||||||
view?.disableSelectionMode()
|
view?.disableSelectionMode()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1054,7 +1054,7 @@ class BrowseFilesPresenter @Inject constructor( //
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun onSelectionModeActivated() {
|
fun onSelectionModeActivated() {
|
||||||
setRefreshOnBackpressEnabled(enableRefreshOnBackpressSupplier.setInSelectionMode(true))
|
setRefreshOnBackPressEnabled(enableRefreshOnBackpressSupplier.setInSelectionMode(true))
|
||||||
view?.enableSelectionMode()
|
view?.enableSelectionMode()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ abstract class Presenter<V : View> protected constructor(private val exceptionMa
|
|||||||
|
|
||||||
var isPaused = false
|
var isPaused = false
|
||||||
private set
|
private set
|
||||||
private var refreshOnBackpressEnabled = Supplier { true }
|
private var refreshOnBackPressEnabled = Supplier { true }
|
||||||
|
|
||||||
var view: V? = null
|
var view: V? = null
|
||||||
set(value) {
|
set(value) {
|
||||||
@ -241,9 +241,9 @@ abstract class Presenter<V : View> protected constructor(private val exceptionMa
|
|||||||
val result = arrayOfNulls<String>(permissions.size)
|
val result = arrayOfNulls<String>(permissions.size)
|
||||||
var numberMissing = 0
|
var numberMissing = 0
|
||||||
permissions
|
permissions
|
||||||
.asSequence()
|
.asSequence()
|
||||||
.filter { ContextCompat.checkSelfPermission(activity(), it) != PackageManager.PERMISSION_GRANTED }
|
.filter { ContextCompat.checkSelfPermission(activity(), it) != PackageManager.PERMISSION_GRANTED }
|
||||||
.forEach { result[numberMissing++] = it }
|
.forEach { result[numberMissing++] = it }
|
||||||
return result.copyOfRange(0, numberMissing)
|
return result.copyOfRange(0, numberMissing)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -314,12 +314,12 @@ abstract class Presenter<V : View> protected constructor(private val exceptionMa
|
|||||||
Timber.tag("PresenterLifecycle").d("$method $this")
|
Timber.tag("PresenterLifecycle").d("$method $this")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setRefreshOnBackpressEnabled(refreshOnBackpressEnabled: BrowseFilesPresenter.RefreshSupplier) {
|
fun setRefreshOnBackPressEnabled(refreshOnBackPressEnabled: BrowseFilesPresenter.RefreshSupplier) {
|
||||||
this.refreshOnBackpressEnabled = refreshOnBackpressEnabled
|
this.refreshOnBackPressEnabled = refreshOnBackPressEnabled
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isRefreshOnBackpressEnabled(): Boolean {
|
fun isRefreshOnBackPressEnabled(): Boolean {
|
||||||
return refreshOnBackpressEnabled.get()
|
return refreshOnBackPressEnabled.get()
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -61,7 +61,7 @@ abstract class BaseFragment : Fragment() {
|
|||||||
if (!created) {
|
if (!created) {
|
||||||
loadContent()
|
loadContent()
|
||||||
} else {
|
} else {
|
||||||
if (presenter?.isRefreshOnBackpressEnabled() == true) {
|
if (presenter?.isRefreshOnBackPressEnabled() == true) {
|
||||||
loadContentSilent()
|
loadContentSilent()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@ import org.cryptomator.presentation.model.CloudFolderModel;
|
|||||||
import org.cryptomator.presentation.model.CloudModel;
|
import org.cryptomator.presentation.model.CloudModel;
|
||||||
import org.cryptomator.presentation.model.ProgressModel;
|
import org.cryptomator.presentation.model.ProgressModel;
|
||||||
import org.cryptomator.presentation.model.mappers.CloudModelMapper;
|
import org.cryptomator.presentation.model.mappers.CloudModelMapper;
|
||||||
|
import org.cryptomator.presentation.presenter.ChooseCloudServicePresenter;
|
||||||
import org.cryptomator.presentation.presenter.VaultListPresenter;
|
import org.cryptomator.presentation.presenter.VaultListPresenter;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
@ -75,7 +76,7 @@ public class AddExistingVaultWorkflow extends Workflow<AddExistingVaultWorkflow.
|
|||||||
presenter().getView().showProgress(ProgressModel.GENERIC);
|
presenter().getView().showProgress(ProgressModel.GENERIC);
|
||||||
getRootFolderUseCase //
|
getRootFolderUseCase //
|
||||||
.withCloud(cloud.toCloud()) //
|
.withCloud(cloud.toCloud()) //
|
||||||
.run(presenter().new ProgressCompletingResultHandler<CloudFolder>() {
|
.run(((ChooseCloudServicePresenter) presenter()).new ProgressCompletingResultHandler<CloudFolder>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(CloudFolder cloudFolder) {
|
public void onSuccess(CloudFolder cloudFolder) {
|
||||||
state().cloudRoot = cloudFolder;
|
state().cloudRoot = cloudFolder;
|
||||||
@ -123,7 +124,7 @@ public class AddExistingVaultWorkflow extends Workflow<AddExistingVaultWorkflow.
|
|||||||
@Override
|
@Override
|
||||||
void completed() {
|
void completed() {
|
||||||
presenter().getView().showProgress(ProgressModel.GENERIC);
|
presenter().getView().showProgress(ProgressModel.GENERIC);
|
||||||
getVaultListUseCase.run(presenter().new ProgressCompletingResultHandler<List<Vault>>() {
|
getVaultListUseCase.run(((VaultListPresenter) presenter()).new ProgressCompletingResultHandler<List<Vault>>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(List<Vault> vaults) {
|
public void onSuccess(List<Vault> vaults) {
|
||||||
saveVaultUseCase//
|
saveVaultUseCase//
|
||||||
@ -132,7 +133,7 @@ public class AddExistingVaultWorkflow extends Workflow<AddExistingVaultWorkflow.
|
|||||||
.withPosition(vaults.size()) //
|
.withPosition(vaults.size()) //
|
||||||
.thatIsNew() //
|
.thatIsNew() //
|
||||||
.build()) //
|
.build()) //
|
||||||
.run(presenter().new ProgressCompletingResultHandler<Vault>() {
|
.run(((VaultListPresenter) presenter()).new ProgressCompletingResultHandler<Vault>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(Vault vault) {
|
public void onSuccess(Vault vault) {
|
||||||
((VaultListPresenter) presenter()).onAddOrCreateVaultCompleted(vault);
|
((VaultListPresenter) presenter()).onAddOrCreateVaultCompleted(vault);
|
||||||
|
@ -12,6 +12,7 @@ import org.cryptomator.presentation.model.CloudFolderModel;
|
|||||||
import org.cryptomator.presentation.model.CloudModel;
|
import org.cryptomator.presentation.model.CloudModel;
|
||||||
import org.cryptomator.presentation.model.ProgressModel;
|
import org.cryptomator.presentation.model.ProgressModel;
|
||||||
import org.cryptomator.presentation.model.mappers.CloudModelMapper;
|
import org.cryptomator.presentation.model.mappers.CloudModelMapper;
|
||||||
|
import org.cryptomator.presentation.presenter.ChooseCloudServicePresenter;
|
||||||
import org.cryptomator.presentation.presenter.VaultListPresenter;
|
import org.cryptomator.presentation.presenter.VaultListPresenter;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
@ -63,7 +64,7 @@ public class CreateNewVaultWorkflow extends Workflow<CreateNewVaultWorkflow.Stat
|
|||||||
presenter().getView().showProgress(ProgressModel.GENERIC);
|
presenter().getView().showProgress(ProgressModel.GENERIC);
|
||||||
getRootFolderUseCase //
|
getRootFolderUseCase //
|
||||||
.withCloud(cloud.toCloud()) //
|
.withCloud(cloud.toCloud()) //
|
||||||
.run(presenter().new ProgressCompletingResultHandler<CloudFolder>() {
|
.run(((ChooseCloudServicePresenter) presenter()).new ProgressCompletingResultHandler<CloudFolder>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(CloudFolder cloudFolder) {
|
public void onSuccess(CloudFolder cloudFolder) {
|
||||||
state().cloudRoot = cloudFolder;
|
state().cloudRoot = cloudFolder;
|
||||||
@ -122,7 +123,7 @@ public class CreateNewVaultWorkflow extends Workflow<CreateNewVaultWorkflow.Stat
|
|||||||
.withVaultName(state().name) //
|
.withVaultName(state().name) //
|
||||||
.andPassword(state().password) //
|
.andPassword(state().password) //
|
||||||
.andFolder(state().location) //
|
.andFolder(state().location) //
|
||||||
.run(presenter().new ProgressCompletingResultHandler<Vault>() {
|
.run(((VaultListPresenter) presenter()).new ProgressCompletingResultHandler<Vault>() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess(Vault vault) {
|
public void onSuccess(Vault vault) {
|
||||||
((VaultListPresenter) presenter()).onAddOrCreateVaultCompleted(vault);
|
((VaultListPresenter) presenter()).onAddOrCreateVaultCompleted(vault);
|
||||||
|
@ -22,7 +22,7 @@ public abstract class Workflow<State extends Serializable> {
|
|||||||
private Class<? extends Activity> activityClass;
|
private Class<? extends Activity> activityClass;
|
||||||
private BoundCallback callback;
|
private BoundCallback callback;
|
||||||
|
|
||||||
private Presenter<?> presenter;
|
private Presenter presenter;
|
||||||
private boolean running;
|
private boolean running;
|
||||||
|
|
||||||
Workflow(State state) {
|
Workflow(State state) {
|
||||||
@ -36,11 +36,10 @@ public abstract class Workflow<State extends Serializable> {
|
|||||||
|
|
||||||
abstract void doStart();
|
abstract void doStart();
|
||||||
|
|
||||||
public void setup(Presenter<?> presenter, Intent intent) {
|
public void setup(Presenter presenter, Intent intent) {
|
||||||
this.presenter = presenter;
|
this.presenter = presenter;
|
||||||
setStateFrom(intent);
|
setStateFrom(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean setStateFrom(Intent intent) {
|
private boolean setStateFrom(Intent intent) {
|
||||||
Serializable stateExtra = intent.getSerializableExtra(WORKFLOW_STATE_EXTRA);
|
Serializable stateExtra = intent.getSerializableExtra(WORKFLOW_STATE_EXTRA);
|
||||||
Serializable callbackExtra = intent.getSerializableExtra(WORKFLOW_CALLBACK_EXTRA);
|
Serializable callbackExtra = intent.getSerializableExtra(WORKFLOW_CALLBACK_EXTRA);
|
||||||
@ -55,7 +54,7 @@ public abstract class Workflow<State extends Serializable> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Presenter<?> presenter() {
|
Presenter presenter() {
|
||||||
if (presenter == null) {
|
if (presenter == null) {
|
||||||
throw new IllegalStateException("Presenter not set");
|
throw new IllegalStateException("Presenter not set");
|
||||||
}
|
}
|
||||||
|
@ -1,20 +1,22 @@
|
|||||||
package org.cryptomator.util.file
|
package org.cryptomator.util.file
|
||||||
|
|
||||||
import org.cryptomator.util.Optional
|
import org.cryptomator.util.Optional
|
||||||
import java.util.Locale
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class MimeTypes @Inject constructor(private val mimeTypeMap: MimeTypeMap) {
|
class MimeTypes @Inject constructor(private val mimeTypeMap: MimeTypeMap) {
|
||||||
|
|
||||||
fun fromExtension(fileExtension: String): Optional<MimeType> {
|
fun fromExtension(fileExtension: String): Optional<MimeType> {
|
||||||
val mimeType = mimeTypeMap.getMimeTypeFromExtension(fileExtension.toLowerCase(Locale.getDefault()))
|
val mimeType = mimeTypeMap.getMimeTypeFromExtension(fileExtension.lowercase())
|
||||||
?: return Optional.empty()
|
?: return Optional.empty()
|
||||||
val firstSlash = mimeType.indexOf('/')
|
val firstSlash = mimeType.indexOf('/')
|
||||||
return if (firstSlash == -1) {
|
return if (firstSlash == -1) {
|
||||||
Optional.empty()
|
Optional.empty()
|
||||||
} else Optional.of(MimeType( //
|
} else Optional.of(
|
||||||
|
MimeType( //
|
||||||
mimeType.substring(0, firstSlash), //
|
mimeType.substring(0, firstSlash), //
|
||||||
mimeType.substring(firstSlash + 1)))
|
mimeType.substring(firstSlash + 1)
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun fromFilename(filename: String): Optional<MimeType> {
|
fun fromFilename(filename: String): Optional<MimeType> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user