Move StorageProperties class into its own file
This commit is contained in:
parent
0b4bd09e7d
commit
01dbcf5f2f
2 changed files with 36 additions and 28 deletions
|
@ -6,8 +6,6 @@
|
||||||
package com.stevesoltys.seedvault.plugins
|
package com.stevesoltys.seedvault.plugins
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.ConnectivityManager
|
|
||||||
import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET
|
|
||||||
import androidx.annotation.WorkerThread
|
import androidx.annotation.WorkerThread
|
||||||
import com.stevesoltys.seedvault.getStorageContext
|
import com.stevesoltys.seedvault.getStorageContext
|
||||||
import com.stevesoltys.seedvault.permitDiskReads
|
import com.stevesoltys.seedvault.permitDiskReads
|
||||||
|
@ -18,32 +16,6 @@ import com.stevesoltys.seedvault.plugins.webdav.WebDavFactory
|
||||||
import com.stevesoltys.seedvault.settings.SettingsManager
|
import com.stevesoltys.seedvault.settings.SettingsManager
|
||||||
import com.stevesoltys.seedvault.settings.StoragePluginEnum
|
import com.stevesoltys.seedvault.settings.StoragePluginEnum
|
||||||
|
|
||||||
abstract class StorageProperties<T> {
|
|
||||||
abstract val config: T
|
|
||||||
abstract val name: String
|
|
||||||
abstract val isUsb: Boolean
|
|
||||||
abstract val requiresNetwork: Boolean
|
|
||||||
|
|
||||||
@WorkerThread
|
|
||||||
abstract fun isUnavailableUsb(context: Context): Boolean
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if this is storage that requires network access,
|
|
||||||
* but it isn't available right now.
|
|
||||||
*/
|
|
||||||
fun isUnavailableNetwork(context: Context, allowMetered: Boolean): Boolean {
|
|
||||||
return requiresNetwork && !hasUnmeteredInternet(context, allowMetered)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun hasUnmeteredInternet(context: Context, allowMetered: Boolean): Boolean {
|
|
||||||
val cm = context.getSystemService(ConnectivityManager::class.java) ?: return false
|
|
||||||
val isMetered = cm.isActiveNetworkMetered
|
|
||||||
val capabilities = cm.getNetworkCapabilities(cm.activeNetwork) ?: return false
|
|
||||||
return capabilities.hasCapability(NET_CAPABILITY_INTERNET) &&
|
|
||||||
(allowMetered || !isMetered)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class StoragePluginManager(
|
class StoragePluginManager(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
private val settingsManager: SettingsManager,
|
private val settingsManager: SettingsManager,
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2024 The Calyx Institute
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.stevesoltys.seedvault.plugins
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET
|
||||||
|
import androidx.annotation.WorkerThread
|
||||||
|
|
||||||
|
abstract class StorageProperties<T> {
|
||||||
|
abstract val config: T
|
||||||
|
abstract val name: String
|
||||||
|
abstract val isUsb: Boolean
|
||||||
|
abstract val requiresNetwork: Boolean
|
||||||
|
|
||||||
|
@WorkerThread
|
||||||
|
abstract fun isUnavailableUsb(context: Context): Boolean
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if this is storage that requires network access,
|
||||||
|
* but it isn't available right now.
|
||||||
|
*/
|
||||||
|
fun isUnavailableNetwork(context: Context, allowMetered: Boolean): Boolean {
|
||||||
|
return requiresNetwork && !hasUnmeteredInternet(context, allowMetered)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun hasUnmeteredInternet(context: Context, allowMetered: Boolean): Boolean {
|
||||||
|
val cm = context.getSystemService(ConnectivityManager::class.java) ?: return false
|
||||||
|
val isMetered = cm.isActiveNetworkMetered
|
||||||
|
val capabilities = cm.getNetworkCapabilities(cm.activeNetwork) ?: return false
|
||||||
|
return capabilities.hasCapability(NET_CAPABILITY_INTERNET) && (allowMetered || !isMetered)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue