Switch from Cyanea to Themes

This commit is contained in:
Matéo Duparc 2021-11-09 11:12:09 +01:00
parent d572a8d2dc
commit d3f0d059f8
Signed by: hardcoresushi
GPG Key ID: 007F84120107191E
89 changed files with 437 additions and 560 deletions

View File

@ -64,7 +64,7 @@ dependencies {
implementation "androidx.sqlite:sqlite-ktx:2.1.0"
implementation "androidx.preference:preference-ktx:1.1.1"
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
implementation "com.jaredrummler:cyanea:1.0.2"
implementation 'com.google.android.material:material:1.4.0'
implementation "com.github.bumptech.glide:glide:4.12.0"
implementation "androidx.biometric:biometric:1.1.0"

View File

@ -25,13 +25,12 @@
tools:node="remove" /> <!--removing this permission automatically added by exoplayer-->
<application
android:name=".ColoredApplication"
android:allowBackup="false"
android:icon="@mipmap/icon_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
android:theme="@style/BaseTheme">
<activity
android:name=".CameraActivity"
android:screenOrientation="nosensor" />

View File

@ -3,36 +3,51 @@ package sushi.hardcore.droidfs
import android.content.SharedPreferences
import android.os.Bundle
import android.view.WindowManager
import androidx.core.content.ContextCompat
import androidx.appcompat.app.AppCompatActivity
import androidx.preference.PreferenceManager
import com.jaredrummler.cyanea.app.CyaneaAppCompatActivity
import sushi.hardcore.droidfs.widgets.ThemeColor
open class BaseActivity: CyaneaAppCompatActivity() {
open class BaseActivity: AppCompatActivity() {
protected lateinit var sharedPrefs: SharedPreferences
protected var isRecreating = false
protected lateinit var themeValue: String
protected var shouldCheckTheme = true
override fun onCreate(savedInstanceState: Bundle?) {
val themeColor = ThemeColor.getThemeColor(this)
if (cyanea.accent != themeColor){
changeThemeColor(themeColor)
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this)
if (shouldCheckTheme) {
themeValue = sharedPrefs.getString("theme", "dark_green")!!
when (themeValue) {
"black_green" -> setTheme(R.style.BlackGreen)
"dark_red" -> setTheme(R.style.DarkRed)
"black_red" -> setTheme(R.style.BlackRed)
"dark_blue" -> setTheme(R.style.DarkBlue)
"black_blue" -> setTheme(R.style.BlackBlue)
"dark_yellow" -> setTheme(R.style.DarkYellow)
"black_yellow" -> setTheme(R.style.BlackYellow)
"dark_orange" -> setTheme(R.style.DarkOrange)
"black_orange" -> setTheme(R.style.BlackOrange)
"dark_purple" -> setTheme(R.style.DarkPurple)
"black_purple" -> setTheme(R.style.BlackPurple)
}
} else {
shouldCheckTheme = true
}
super.onCreate(savedInstanceState)
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this)
if (!sharedPrefs.getBoolean("usf_screenshot", false)){
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
}
}
fun changeThemeColor(themeColor: Int? = null){
val accentColor = themeColor ?: ThemeColor.getThemeColor(this)
val backgroundColor = ContextCompat.getColor(this, R.color.backgroundColor)
isRecreating = true
cyanea.edit{
accent(accentColor)
//accentDark(themeColor)
//accentLight(themeColor)
background(backgroundColor)
//backgroundDark(backgroundColor)
//backgroundLight(backgroundColor)
}.recreate(this)
override fun onStart() {
super.onStart()
val newThemeValue = sharedPrefs.getString("theme", "dark_green")!!
onThemeChanged(newThemeValue)
}
fun onThemeChanged(newThemeValue: String) {
if (newThemeValue != themeValue) {
themeValue = newThemeValue
shouldCheckTheme = false
recreate()
}
}
}

View File

@ -36,7 +36,7 @@ import sushi.hardcore.droidfs.databinding.ActivityCameraBinding
import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.video_recording.SeekableWriter
import sushi.hardcore.droidfs.video_recording.VideoCapture
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import java.io.*
import java.text.SimpleDateFormat
import java.util.*
@ -126,7 +126,7 @@ class CameraActivity : BaseActivity(), SensorOrientationListener.Listener {
} else {
1
}
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.camera_optimization)
.setSingleChoiceItems(DialogSingleChoiceAdapter(this, arrayOf(R.string.maximize_quality, R.string.minimize_latency).map { getString(it) }), currentIndex) { dialog, which ->
val resId: Int
@ -149,7 +149,7 @@ class CameraActivity : BaseActivity(), SensorOrientationListener.Listener {
}
binding.imageRatio.setOnClickListener {
resolutions?.let {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.choose_resolution)
.setSingleChoiceItems(DialogSingleChoiceAdapter(this, it.map { size -> size.toString() }), currentResolutionIndex) { dialog, which ->
setupCamera(resolutions!![which])
@ -164,7 +164,7 @@ class CameraActivity : BaseActivity(), SensorOrientationListener.Listener {
val dialogEditTextView = layoutInflater.inflate(R.layout.dialog_edit_text, null)
val dialogEditText = dialogEditTextView.findViewById<EditText>(R.id.dialog_edit_text)
dialogEditText.inputType = InputType.TYPE_CLASS_NUMBER
val dialog = ColoredAlertDialogBuilder(this)
val dialog = CustomAlertDialogBuilder(this, themeValue)
.setView(dialogEditTextView)
.setTitle(getString(R.string.enter_timer_duration))
.setPositiveButton(R.string.ok) { _, _ ->
@ -266,7 +266,7 @@ class CameraActivity : BaseActivity(), SensorOrientationListener.Listener {
permissionsGranted = true
setupCamera()
} else {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(R.string.camera_perm_needed)
.setCancelable(false)
@ -348,7 +348,7 @@ class CameraActivity : BaseActivity(), SensorOrientationListener.Listener {
if (gocryptfsVolume.importFile(ByteArrayInputStream(outputBuff.toByteArray()), outputPath)){
Toast.makeText(applicationContext, getString(R.string.picture_save_success, outputPath), Toast.LENGTH_SHORT).show()
} else {
ColoredAlertDialogBuilder(this@CameraActivity)
CustomAlertDialogBuilder(this@CameraActivity, themeValue)
.setTitle(R.string.error)
.setMessage(R.string.picture_save_failed)
.setCancelable(false)

View File

@ -12,7 +12,7 @@ import sushi.hardcore.droidfs.databinding.ActivityChangePasswordBinding
import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.util.WidgetUtil
import sushi.hardcore.droidfs.util.Wiper
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import java.io.File
import java.util.*
@ -26,7 +26,7 @@ class ChangePasswordActivity : VolumeActionActivity() {
setContentView(binding.root)
setupLayout()
setupFingerprintStuff()
savedVolumesAdapter = SavedVolumesAdapter(this, volumeDatabase)
savedVolumesAdapter = SavedVolumesAdapter(this, themeValue, volumeDatabase)
if (savedVolumesAdapter.count > 0){
binding.savedPathListview.adapter = savedVolumesAdapter
binding.savedPathListview.onItemClickListener = OnItemClickListener { _, _, position, _ ->
@ -87,7 +87,7 @@ class ChangePasswordActivity : VolumeActionActivity() {
loadVolumePath {
val volumeFile = File(currentVolumePath)
if (!GocryptfsVolume.isGocryptfsVolume(volumeFile)){
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(R.string.error_not_a_volume)
.setPositiveButton(R.string.ok, null)
@ -106,7 +106,7 @@ class ChangePasswordActivity : VolumeActionActivity() {
if (!newPassword.contentEquals(newPasswordConfirm)) {
Toast.makeText(this, R.string.passwords_mismatch, Toast.LENGTH_SHORT).show()
} else {
object : LoadingTask(this, R.string.loading_msg_change_password) {
object : LoadingTask(this, themeValue, R.string.loading_msg_change_password) {
override fun doTask(activity: AppCompatActivity) {
val oldPassword = binding.editOldPassword.text.toString().toCharArray()
var returnedHash: ByteArray? = null
@ -159,7 +159,7 @@ class ChangePasswordActivity : VolumeActionActivity() {
}
} else {
stopTask {
ColoredAlertDialogBuilder(activity)
CustomAlertDialogBuilder(activity, themeValue)
.setTitle(R.string.error)
.setMessage(R.string.change_password_failed)
.setPositiveButton(R.string.ok, null)
@ -178,7 +178,7 @@ class ChangePasswordActivity : VolumeActionActivity() {
}
private fun onPasswordChanged(){
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.success_change_password)
.setMessage(R.string.success_change_password_msg)
.setCancelable(false)

View File

@ -1,11 +0,0 @@
package sushi.hardcore.droidfs
import android.app.Application
import com.jaredrummler.cyanea.Cyanea
class ColoredApplication: Application() {
override fun onCreate() {
super.onCreate()
Cyanea.init(this, resources)
}
}

View File

@ -9,7 +9,7 @@ import androidx.appcompat.app.AppCompatActivity
import sushi.hardcore.droidfs.databinding.ActivityCreateBinding
import sushi.hardcore.droidfs.explorers.ExplorerActivity
import sushi.hardcore.droidfs.util.Wiper
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import java.io.File
import java.util.*
@ -38,7 +38,7 @@ class CreateActivity : VolumeActionActivity() {
binding.spinnerXchacha.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
if (position == 1) {
ColoredAlertDialogBuilder(this@CreateActivity)
CustomAlertDialogBuilder(this@CreateActivity, themeValue)
.setTitle(R.string.warning)
.setMessage(R.string.xchacha_warning)
.setPositiveButton(R.string.ok, null)
@ -55,7 +55,7 @@ class CreateActivity : VolumeActionActivity() {
override fun onClickSwitchHiddenVolume() {
super.onClickSwitchHiddenVolume()
if (switchHiddenVolume.isChecked){
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.warning)
.setMessage(R.string.hidden_volume_warning)
.setPositiveButton(R.string.ok, null)
@ -95,7 +95,7 @@ class CreateActivity : VolumeActionActivity() {
}
}
if (goodDirectory) {
object: LoadingTask(this, R.string.loading_msg_create){
object: LoadingTask(this, themeValue, R.string.loading_msg_create) {
override fun doTask(activity: AppCompatActivity) {
val xchacha = when (binding.spinnerXchacha.selectedItemPosition) {
0 -> 0
@ -129,7 +129,7 @@ class CreateActivity : VolumeActionActivity() {
}
} else {
stopTask {
ColoredAlertDialogBuilder(activity)
CustomAlertDialogBuilder(activity, themeValue)
.setTitle(R.string.error)
.setMessage(R.string.create_volume_failed)
.setPositiveButton(R.string.ok, null)
@ -148,7 +148,7 @@ class CreateActivity : VolumeActionActivity() {
}
private fun startExplorer(){
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.success_volume_create)
.setMessage(R.string.success_volume_create_msg)
.setCancelable(false)

View File

@ -4,11 +4,11 @@ import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
abstract class LoadingTask(val activity: AppCompatActivity, loadingMessageResId: Int) {
abstract class LoadingTask(val activity: AppCompatActivity, themeValue: String, loadingMessageResId: Int) {
private val dialogLoadingView = activity.layoutInflater.inflate(R.layout.dialog_loading, null)
private val dialogLoading: AlertDialog = ColoredAlertDialogBuilder(activity)
private val dialogLoading: AlertDialog = CustomAlertDialogBuilder(activity, themeValue)
.setView(dialogLoadingView)
.setTitle(R.string.loading)
.setCancelable(false)

View File

@ -5,7 +5,7 @@ import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import sushi.hardcore.droidfs.databinding.ActivityMainBinding
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
class MainActivity : BaseActivity() {
@ -14,21 +14,19 @@ class MainActivity : BaseActivity() {
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(binding.toolbar.toolbar)
if (!isRecreating) {
if (sharedPrefs.getBoolean("applicationFirstOpening", true)){
ColoredAlertDialogBuilder(this)
.setTitle(R.string.warning)
.setMessage(R.string.usf_home_warning_msg)
.setCancelable(false)
.setPositiveButton(R.string.see_unsafe_features){ _, _ ->
val intent = Intent(this, SettingsActivity::class.java)
intent.putExtra("screen", "UnsafeFeaturesSettingsFragment")
startActivity(intent)
}
.setNegativeButton(R.string.ok, null)
.setOnDismissListener { sharedPrefs.edit().putBoolean("applicationFirstOpening", false).apply() }
.show()
}
if (sharedPrefs.getBoolean("applicationFirstOpening", true)) {
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.warning)
.setMessage(R.string.usf_home_warning_msg)
.setCancelable(false)
.setPositiveButton(R.string.see_unsafe_features) { _, _ ->
val intent = Intent(this, SettingsActivity::class.java)
intent.putExtra("screen", "UnsafeFeaturesSettingsFragment")
startActivity(intent)
}
.setNegativeButton(R.string.ok, null)
.setOnDismissListener { sharedPrefs.edit().putBoolean("applicationFirstOpening", false).apply() }
.show()
}
binding.buttonOpen.setOnClickListener {
startActivity(OpenActivity::class.java)

View File

@ -18,7 +18,7 @@ import sushi.hardcore.droidfs.explorers.ExplorerActivityPick
import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.util.WidgetUtil
import sushi.hardcore.droidfs.util.Wiper
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import java.io.File
import java.util.*
@ -35,7 +35,7 @@ class OpenActivity : VolumeActionActivity() {
setContentView(binding.root)
setupLayout()
setupFingerprintStuff()
savedVolumesAdapter = SavedVolumesAdapter(this, volumeDatabase)
savedVolumesAdapter = SavedVolumesAdapter(this, themeValue, volumeDatabase)
if (savedVolumesAdapter.count > 0){
binding.savedPathListview.adapter = savedVolumesAdapter
binding.savedPathListview.onItemClickListener = OnItemClickListener { _, _, position, _ ->
@ -116,20 +116,20 @@ class OpenActivity : VolumeActionActivity() {
loadVolumePath {
val volumeFile = File(currentVolumePath)
if (!GocryptfsVolume.isGocryptfsVolume(volumeFile)){
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(R.string.error_not_a_volume)
.setPositiveButton(R.string.ok, null)
.show()
} else if (!volumeFile.canWrite()) {
if ((intent.action == Intent.ACTION_SEND || intent.action == Intent.ACTION_SEND_MULTIPLE) && intent.extras != null) { //import via android share menu
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(R.string.open_cant_write_error_msg)
.setPositiveButton(R.string.ok, null)
.show()
} else {
val dialog = ColoredAlertDialogBuilder(this)
val dialog = CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.warning)
.setCancelable(false)
.setPositiveButton(R.string.ok) { _, _ -> openVolume() }
@ -152,7 +152,7 @@ class OpenActivity : VolumeActionActivity() {
}
private fun openVolume(){
object : LoadingTask(this, R.string.loading_msg_open){
object : LoadingTask(this, themeValue, R.string.loading_msg_open) {
override fun doTask(activity: AppCompatActivity) {
val password = binding.editPassword.text.toString().toCharArray()
var returnedHash: ByteArray? = null
@ -179,7 +179,7 @@ class OpenActivity : VolumeActionActivity() {
}
} else {
stopTask {
ColoredAlertDialogBuilder(activity)
CustomAlertDialogBuilder(activity, themeValue)
.setTitle(R.string.open_volume_failed)
.setMessage(R.string.open_volume_failed_msg)
.setPositiveButton(R.string.ok, null)
@ -192,14 +192,14 @@ class OpenActivity : VolumeActionActivity() {
}
private fun openUsingPasswordHash(passwordHash: ByteArray){
object : LoadingTask(this, R.string.loading_msg_open){
object : LoadingTask(this, themeValue, R.string.loading_msg_open) {
override fun doTask(activity: AppCompatActivity) {
sessionID = GocryptfsVolume.init(currentVolumePath, null, passwordHash, null)
if (sessionID != -1){
stopTask { startExplorer() }
} else {
stopTask {
ColoredAlertDialogBuilder(activity)
CustomAlertDialogBuilder(activity, themeValue)
.setTitle(R.string.open_volume_failed)
.setMessage(R.string.open_failed_hash_msg)
.setPositiveButton(R.string.ok, null)

View File

@ -2,13 +2,9 @@ package sushi.hardcore.droidfs
import android.os.Bundle
import android.view.MenuItem
import androidx.core.content.ContextCompat
import androidx.preference.Preference
import androidx.preference.ListPreference
import androidx.preference.PreferenceFragmentCompat
import com.jaredrummler.android.colorpicker.ColorPreferenceCompat
import sushi.hardcore.droidfs.databinding.ActivitySettingsBinding
import sushi.hardcore.droidfs.widgets.SimpleActionPreference
import sushi.hardcore.droidfs.widgets.ThemeColor
class SettingsActivity : BaseActivity() {
@ -43,26 +39,9 @@ class SettingsActivity : BaseActivity() {
class MainSettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.root_preferences, rootKey)
ThemeColor.tintPreferenceIcons(preferenceScreen, ThemeColor.getThemeColor(requireContext()))
var originalThemeColor: Int? = null
context?.let {
originalThemeColor = ContextCompat.getColor(it, R.color.themeColor)
}
findPreference<ColorPreferenceCompat>("themeColor")?.let { colorPicker ->
colorPicker.onPreferenceChangeListener = Preference.OnPreferenceChangeListener{ _, _ ->
(activity as SettingsActivity).changeThemeColor()
true
}
findPreference<SimpleActionPreference>("resetThemeColor")?.onClick = {
originalThemeColor?.let {
colorPicker.saveValue(it)
val settingsActivity = (activity as SettingsActivity)
Thread {
settingsActivity.sharedPrefs.edit().commit()
settingsActivity.runOnUiThread { settingsActivity.changeThemeColor() }
}.start()
}
}
findPreference<ListPreference>("theme")?.setOnPreferenceChangeListener { _, newValue ->
(activity as BaseActivity).onThemeChanged(newValue as String)
true
}
}
}
@ -70,7 +49,6 @@ class SettingsActivity : BaseActivity() {
class UnsafeFeaturesSettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.unsafe_features_preferences, rootKey)
ThemeColor.tintPreferenceIcons(preferenceScreen, ThemeColor.getThemeColor(requireContext()))
}
}
}

View File

@ -19,8 +19,7 @@ import androidx.biometric.BiometricPrompt
import androidx.core.content.ContextCompat
import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.util.WidgetUtil
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.ColoredImageButton
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import java.security.KeyStore
import javax.crypto.*
import javax.crypto.spec.GCMParameterSpec
@ -68,7 +67,7 @@ abstract class VolumeActionActivity : BaseActivity() {
protected fun setupLayout() {
setSupportActionBar(findViewById(R.id.toolbar))
supportActionBar?.setDisplayHomeAsUpEnabled(true)
findViewById<ColoredImageButton>(R.id.button_pick_directory).setOnClickListener {
findViewById<ImageButton>(R.id.button_pick_directory).setOnClickListener {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) +
ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
@ -123,7 +122,7 @@ abstract class VolumeActionActivity : BaseActivity() {
if (path != null) {
editVolumePath.setText(path)
} else {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(R.string.path_from_uri_null_error_msg)
.setPositiveButton(R.string.ok, null)
@ -136,7 +135,7 @@ abstract class VolumeActionActivity : BaseActivity() {
onPickingDirectory()
pickDirectory.launch(null)
} catch (e: ActivityNotFoundException) {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(R.string.open_tree_failed)
.setPositiveButton(R.string.ok, null)
@ -149,7 +148,7 @@ abstract class VolumeActionActivity : BaseActivity() {
when (requestCode) {
STORAGE_PERMISSIONS_REQUEST -> if (grantResults.size == 2) {
if (grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED) {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.storage_perm_denied)
.setMessage(R.string.storage_perm_denied_msg)
.setCancelable(false)
@ -209,7 +208,7 @@ abstract class VolumeActionActivity : BaseActivity() {
val plainText = cipherObject.doFinal(dataToProcess)
onPasswordDecrypted(plainText)
} catch (e: AEADBadTagException){
ColoredAlertDialogBuilder(activityContext)
CustomAlertDialogBuilder(activityContext, themeValue)
.setTitle(R.string.error)
.setMessage(R.string.MAC_verification_failed)
.setPositiveButton(R.string.reset_hash_storage) { _, _ ->
@ -221,7 +220,7 @@ abstract class VolumeActionActivity : BaseActivity() {
}
}
} catch (e: IllegalBlockSizeException){
ColoredAlertDialogBuilder(activityContext)
CustomAlertDialogBuilder(activityContext, themeValue)
.setTitle(R.string.illegal_block_size_exception)
.setMessage(R.string.illegal_block_size_exception_msg)
.setPositiveButton(R.string.reset_hash_storage) { _, _ ->
@ -292,7 +291,7 @@ abstract class VolumeActionActivity : BaseActivity() {
}
private fun alertKeyPermanentlyInvalidatedException(){
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.key_permanently_invalidated_exception)
.setMessage(R.string.key_permanently_invalidated_exception_msg)
.setPositiveButton(R.string.reset_hash_storage) { _, _ ->
@ -381,7 +380,7 @@ abstract class VolumeActionActivity : BaseActivity() {
}
fun errorDirectoryNotWritable(errorMsg: Int) {
val dialog = ColoredAlertDialogBuilder(this)
val dialog = CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setPositiveButton(R.string.ok, null)
if (PathUtils.isPathOnExternalStorage(currentVolumePath, this)) {

View File

@ -7,7 +7,6 @@ import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.CheckedTextView
import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.widgets.ThemeColor
class DialogSingleChoiceAdapter(private val context: Context, private val entries: List<String>): BaseAdapter() {
private val inflater: LayoutInflater = LayoutInflater.from(context)
@ -18,7 +17,6 @@ class DialogSingleChoiceAdapter(private val context: Context, private val entrie
val typedArray = context.theme.obtainStyledAttributes(arrayOf(android.R.attr.listChoiceIndicatorSingle).toIntArray())
val drawable = typedArray.getDrawable(0)
typedArray.recycle()
drawable?.setTint(ThemeColor.getThemeColor(context))
checkedTextView.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null)
return view
}

View File

@ -2,8 +2,6 @@ package sushi.hardcore.droidfs.adapters
import android.content.Context
import android.graphics.Color
import android.graphics.PorterDuff
import android.graphics.PorterDuffColorFilter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@ -15,7 +13,6 @@ import sushi.hardcore.droidfs.ConstValues.Companion.getAssociatedDrawable
import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.explorers.ExplorerElement
import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.widgets.ThemeColor
import java.text.DateFormat
import java.util.*
@ -24,7 +21,6 @@ class ExplorerElementAdapter(private val context: Context) : BaseAdapter() {
private var explorerElements = listOf<ExplorerElement>()
private val inflater: LayoutInflater = LayoutInflater.from(context)
val selectedItems: MutableList<Int> = ArrayList()
private val themeColor = ThemeColor.getThemeColor(context)
override fun getCount(): Int {
return explorerElements.size
}
@ -62,12 +58,9 @@ class ExplorerElementAdapter(private val context: Context) : BaseAdapter() {
drawableId = getAssociatedDrawable(currentElement.name)
}
}
val elementIcon = view.findViewById<ImageView>(R.id.icon_element)
val icon = ContextCompat.getDrawable(context, drawableId)
icon?.colorFilter = PorterDuffColorFilter(themeColor, PorterDuff.Mode.SRC_IN)
elementIcon.setImageDrawable(icon)
view.findViewById<ImageView>(R.id.icon_element).setImageResource(drawableId)
if (selectedItems.contains(position)) {
view.setBackgroundColor(ContextCompat.getColor(context, R.color.item_selected))
view.setBackgroundColor(ContextCompat.getColor(context, R.color.itemSelected))
} else {
view.setBackgroundColor(Color.alpha(0))
}

View File

@ -5,9 +5,10 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ImageView
import android.widget.TextView
import androidx.appcompat.content.res.AppCompatResources
import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.widgets.ColoredImageView
open class IconTextDialogAdapter(private val context: Context): BaseAdapter() {
private val inflater: LayoutInflater = LayoutInflater.from(context)
@ -17,8 +18,8 @@ open class IconTextDialogAdapter(private val context: Context): BaseAdapter() {
val view: View = convertView ?: inflater.inflate(R.layout.adapter_dialog_icon_text, parent, false)
val text = view.findViewById<TextView>(R.id.text)
text.text = context.getString(items[position][1] as Int)
val icon = view.findViewById<ColoredImageView>(R.id.icon)
icon.setImageDrawable(context.getDrawable(items[position][2] as Int))
val icon = view.findViewById<ImageView>(R.id.icon)
icon.setImageDrawable(AppCompatResources.getDrawable(context, items[position][2] as Int))
return view
}

View File

@ -12,11 +12,11 @@ import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.Volume
import sushi.hardcore.droidfs.VolumeDatabase
import sushi.hardcore.droidfs.util.WidgetUtil
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.NonScrollableColoredBorderListView
import java.io.File
class SavedVolumesAdapter(private val context: Context, private val volumeDatabase: VolumeDatabase) : BaseAdapter() {
class SavedVolumesAdapter(private val context: Context, private val themeValue: String, private val volumeDatabase: VolumeDatabase) : BaseAdapter() {
private val inflater: LayoutInflater = LayoutInflater.from(context)
private lateinit var nonScrollableColoredBorderListView: NonScrollableColoredBorderListView
@ -53,7 +53,7 @@ class SavedVolumesAdapter(private val context: Context, private val volumeDataba
volumeNameTextView.text = currentVolume.name
val deleteImageView = view.findViewById<ImageView>(R.id.delete_imageview)
deleteImageView.setOnClickListener {
val dialog = ColoredAlertDialogBuilder(context)
val dialog = CustomAlertDialogBuilder(context, themeValue)
dialog.setTitle(R.string.warning)
if (currentVolume.isHidden){
if (currentVolume.hash != null) {

View File

@ -8,13 +8,13 @@ import androidx.appcompat.app.AppCompatActivity
import sushi.hardcore.droidfs.GocryptfsVolume
import sushi.hardcore.droidfs.LoadingTask
import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import java.io.File
object ExternalProvider {
private const val content_type_all = "*/*"
private var storedFiles: MutableList<Uri> = ArrayList()
private fun getContentType(filename: String, previous_content_type: String?): String? {
private fun getContentType(filename: String, previous_content_type: String?): String {
if (content_type_all != previous_content_type) {
var contentType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(File(filename).extension)
if (contentType == null) {
@ -41,8 +41,8 @@ object ExternalProvider {
return Pair(null, null)
}
fun share(activity: AppCompatActivity, gocryptfsVolume: GocryptfsVolume, file_paths: List<String>) {
object : LoadingTask(activity, R.string.loading_msg_export){
fun share(activity: AppCompatActivity, themeValue: String, gocryptfsVolume: GocryptfsVolume, file_paths: List<String>) {
object : LoadingTask(activity, themeValue, R.string.loading_msg_export) {
override fun doTask(activity: AppCompatActivity) {
var contentType: String? = null
val uris = ArrayList<Uri>()
@ -53,7 +53,7 @@ object ExternalProvider {
result.second
} else {
stopTask {
ColoredAlertDialogBuilder(activity)
CustomAlertDialogBuilder(activity, themeValue)
.setTitle(R.string.error)
.setMessage(activity.getString(R.string.export_failed, path))
.setPositiveButton(R.string.ok, null)
@ -78,8 +78,8 @@ object ExternalProvider {
}
}
fun open(activity: AppCompatActivity, gocryptfsVolume: GocryptfsVolume, file_path: String) {
object : LoadingTask(activity, R.string.loading_msg_export) {
fun open(activity: AppCompatActivity, themeValue: String, gocryptfsVolume: GocryptfsVolume, file_path: String) {
object : LoadingTask(activity, themeValue, R.string.loading_msg_export) {
override fun doTask(activity: AppCompatActivity) {
val result = exportFile(activity, gocryptfsVolume, file_path, null)
if (result.first != null) {
@ -88,7 +88,7 @@ object ExternalProvider {
stopTask { activity.startActivity(openIntent) }
} else {
stopTask {
ColoredAlertDialogBuilder(activity)
CustomAlertDialogBuilder(activity, themeValue)
.setTitle(R.string.error)
.setMessage(activity.getString(R.string.export_failed, file_path))
.setPositiveButton(R.string.ok, null)

View File

@ -17,6 +17,7 @@ import android.widget.EditText
import android.widget.ListView
import android.widget.TextView
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
@ -41,7 +42,7 @@ import sushi.hardcore.droidfs.file_viewers.ImageViewer
import sushi.hardcore.droidfs.file_viewers.TextEditor
import sushi.hardcore.droidfs.file_viewers.VideoPlayer
import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
open class BaseExplorerActivity : BaseActivity() {
private lateinit var sortOrderEntries: Array<String>
@ -146,12 +147,12 @@ open class BaseExplorerActivity : BaseActivity() {
private fun openWithExternalApp(fullPath: String){
isStartingActivity = true
ExternalProvider.open(this, gocryptfsVolume, fullPath)
ExternalProvider.open(this, themeValue, gocryptfsVolume, fullPath)
}
private fun showOpenAsDialog(path: String) {
val adapter = OpenAsDialogAdapter(this, usf_open)
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setSingleChoiceItems(adapter, -1) { dialog, which ->
when (adapter.getItem(which)) {
"image" -> startFileViewer(ImageViewer::class.java, path)
@ -267,7 +268,7 @@ open class BaseExplorerActivity : BaseActivity() {
}
private fun askCloseVolume() {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.warning)
.setMessage(R.string.ask_close_volume)
.setPositiveButton(R.string.ok) { _, _ -> closeVolumeOnUserExit() }
@ -293,7 +294,7 @@ open class BaseExplorerActivity : BaseActivity() {
Toast.makeText(this, R.string.error_filename_empty, Toast.LENGTH_SHORT).show()
} else {
if (!gocryptfsVolume.mkdir(PathUtils.pathJoin(currentDirectoryPath, folderName))) {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(R.string.error_mkdir)
.setPositiveButton(R.string.ok, null)
@ -308,7 +309,7 @@ open class BaseExplorerActivity : BaseActivity() {
protected fun openDialogCreateFolder() {
val dialogEditTextView = layoutInflater.inflate(R.layout.dialog_edit_text, null)
val dialogEditText = dialogEditTextView.findViewById<EditText>(R.id.dialog_edit_text)
val dialog = ColoredAlertDialogBuilder(this)
val dialog = CustomAlertDialogBuilder(this, themeValue)
.setView(dialogEditTextView)
.setTitle(R.string.enter_folder_name)
.setPositiveButton(R.string.ok) { _, _ ->
@ -346,7 +347,7 @@ open class BaseExplorerActivity : BaseActivity() {
}
}
if (!ready){
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.warning)
.setMessage(getString(if (items[i].explorerElement.isDirectory){R.string.dir_overwrite_question} else {R.string.file_overwrite_question}, testDstPath))
.setPositiveButton(R.string.yes) {_, _ ->
@ -359,7 +360,7 @@ open class BaseExplorerActivity : BaseActivity() {
val dialogEditText = dialogEditTextView.findViewById<EditText>(R.id.dialog_edit_text)
dialogEditText.setText(items[i].explorerElement.name)
dialogEditText.selectAll()
val dialog = ColoredAlertDialogBuilder(this)
val dialog = CustomAlertDialogBuilder(this, themeValue)
.setView(dialogEditTextView)
.setTitle(R.string.enter_new_name)
.setPositiveButton(R.string.ok) { _, _ ->
@ -403,7 +404,7 @@ open class BaseExplorerActivity : BaseActivity() {
for (uri in uris) {
val fileName = PathUtils.getFilenameFromURI(this, uri)
if (fileName == null) {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(getString(R.string.error_retrieving_filename, uri))
.setPositiveButton(R.string.ok, null)
@ -446,7 +447,7 @@ open class BaseExplorerActivity : BaseActivity() {
Toast.makeText(this, R.string.error_filename_empty, Toast.LENGTH_SHORT).show()
} else {
if (!gocryptfsVolume.rename(PathUtils.pathJoin(currentDirectoryPath, old_name), PathUtils.pathJoin(currentDirectoryPath, new_name))) {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(getString(R.string.rename_failed, old_name))
.setPositiveButton(R.string.ok, null)
@ -458,6 +459,14 @@ open class BaseExplorerActivity : BaseActivity() {
}
}
private fun setMenuIconTint(menu: Menu, iconColor: Int, menuItemId: Int, drawableId: Int) {
menu.findItem(menuItemId)?.let {
it.icon = ContextCompat.getDrawable(this, drawableId)?.apply {
setTint(iconColor)
}
}
}
protected fun handleMenuItems(menu: Menu){
menu.findItem(R.id.rename).isVisible = false
menu.findItem(R.id.open_as)?.isVisible = false
@ -465,6 +474,11 @@ open class BaseExplorerActivity : BaseActivity() {
menu.findItem(R.id.external_open)?.isVisible = false
}
val noItemSelected = explorerAdapter.selectedItems.isEmpty()
val iconColor = ContextCompat.getColor(this, R.color.menuIconTint)
setMenuIconTint(menu, iconColor, R.id.sort, R.drawable.icon_sort)
setMenuIconTint(menu, iconColor, R.id.delete, R.drawable.icon_delete)
setMenuIconTint(menu, iconColor, R.id.decrypt, R.drawable.icon_decrypt)
setMenuIconTint(menu, iconColor, R.id.share, R.drawable.icon_share)
menu.findItem(R.id.sort).isVisible = noItemSelected
menu.findItem(R.id.close).isVisible = noItemSelected
if (noItemSelected){
@ -490,7 +504,7 @@ open class BaseExplorerActivity : BaseActivity() {
true
}
R.id.sort -> {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.sort_order)
.setSingleChoiceItems(DialogSingleChoiceAdapter(this, sortOrderEntries.toList()), currentSortOrderIndex) { dialog, which ->
currentSortOrderIndex = which
@ -507,7 +521,7 @@ open class BaseExplorerActivity : BaseActivity() {
val dialogEditText = dialogEditTextView.findViewById<EditText>(R.id.dialog_edit_text)
dialogEditText.setText(oldName)
dialogEditText.selectAll()
val dialog = ColoredAlertDialogBuilder(this)
val dialog = CustomAlertDialogBuilder(this, themeValue)
.setView(dialogEditTextView)
.setTitle(R.string.rename_title)
.setPositiveButton(R.string.ok) { _, _ ->

View File

@ -19,7 +19,7 @@ import sushi.hardcore.droidfs.content_providers.ExternalProvider
import sushi.hardcore.droidfs.databinding.ActivityExplorerBinding
import sushi.hardcore.droidfs.file_operations.OperationFile
import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import java.io.File
class ExplorerActivity : BaseExplorerActivity() {
@ -73,7 +73,7 @@ class ExplorerActivity : BaseExplorerActivity() {
if (failedItem == null){
Toast.makeText(this, R.string.success_import, Toast.LENGTH_SHORT).show()
} else {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(getString(R.string.import_failed, failedItem))
.setPositiveButton(R.string.ok, null)
@ -105,7 +105,7 @@ class ExplorerActivity : BaseExplorerActivity() {
if (failedItem == null){
Toast.makeText(this, R.string.success_export, Toast.LENGTH_SHORT).show()
} else {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(getString(R.string.export_failed, failedItem))
.setPositiveButton(R.string.ok, null)
@ -124,7 +124,7 @@ class ExplorerActivity : BaseExplorerActivity() {
private fun onImportComplete(failedItem: String?, urisToWipe: List<Uri>, rootFile: DocumentFile? = null) {
if (failedItem == null){
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.success_import)
.setMessage("""
${getString(R.string.success_import_msg)}
@ -136,7 +136,7 @@ class ExplorerActivity : BaseExplorerActivity() {
if (errorMsg == null){
Toast.makeText(this, R.string.wipe_successful, Toast.LENGTH_SHORT).show()
} else {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(getString(R.string.wipe_failed, errorMsg))
.setPositiveButton(R.string.ok, null)
@ -148,7 +148,7 @@ class ExplorerActivity : BaseExplorerActivity() {
.setNegativeButton(R.string.no, null)
.show()
} else {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(getString(R.string.import_failed, failedItem))
.setPositiveButton(R.string.ok, null)
@ -173,7 +173,7 @@ class ExplorerActivity : BaseExplorerActivity() {
listOf("createFolder", R.string.mkdir, R.drawable.icon_create_new_folder),
listOf("camera", R.string.camera, R.drawable.icon_camera)
)
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setSingleChoiceItems(adapter, -1){ thisDialog, which ->
when (adapter.getItem(which)){
"importFromOtherVolumes" -> {
@ -194,7 +194,7 @@ class ExplorerActivity : BaseExplorerActivity() {
"createFile" -> {
val dialogEditTextView = layoutInflater.inflate(R.layout.dialog_edit_text, null)
val dialogEditText = dialogEditTextView.findViewById<EditText>(R.id.dialog_edit_text)
val dialog = ColoredAlertDialogBuilder(this)
val dialog = CustomAlertDialogBuilder(this, themeValue)
.setView(dialogEditTextView)
.setTitle(getString(R.string.enter_file_name))
.setPositiveButton(R.string.ok) { _, _ ->
@ -247,7 +247,7 @@ class ExplorerActivity : BaseExplorerActivity() {
val filePath = PathUtils.pathJoin(currentDirectoryPath, fileName)
val handleID = gocryptfsVolume.openWriteMode(filePath) //don't check overwrite because openWriteMode open in read-write (doesn't erase content)
if (handleID == -1) {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(R.string.file_creation_failed)
.setPositiveButton(R.string.ok, null)
@ -333,7 +333,7 @@ class ExplorerActivity : BaseExplorerActivity() {
if (failedItem == null){
Toast.makeText(this, R.string.copy_success, Toast.LENGTH_SHORT).show()
} else {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(getString(R.string.copy_failed, failedItem))
.setPositiveButton(R.string.ok, null)
@ -355,7 +355,7 @@ class ExplorerActivity : BaseExplorerActivity() {
if (failedItem == null){
Toast.makeText(this, R.string.move_success, Toast.LENGTH_SHORT).show()
} else {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(getString(R.string.move_failed, failedItem))
.setPositiveButton(R.string.ok, null)
@ -373,7 +373,7 @@ class ExplorerActivity : BaseExplorerActivity() {
}
R.id.delete -> {
val size = explorerAdapter.selectedItems.size
val dialog = ColoredAlertDialogBuilder(this)
val dialog = CustomAlertDialogBuilder(this, themeValue)
dialog.setTitle(R.string.warning)
dialog.setPositiveButton(R.string.ok) { _, _ -> removeSelectedItems() }
dialog.setNegativeButton(R.string.cancel, null)
@ -391,7 +391,7 @@ class ExplorerActivity : BaseExplorerActivity() {
paths.add(explorerElements[i].fullPath)
}
isStartingActivity = true
ExternalProvider.share(this, gocryptfsVolume, paths)
ExternalProvider.share(this, themeValue, gocryptfsVolume, paths)
unselectAll()
true
}
@ -452,7 +452,7 @@ class ExplorerActivity : BaseExplorerActivity() {
}
}
if (failedItem != null) {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(getString(R.string.remove_failed, failedItem))
.setPositiveButton(R.string.ok, null)

View File

@ -6,7 +6,7 @@ import android.view.Menu
import android.view.MenuItem
import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.databinding.ActivityExplorerDropBinding
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
class ExplorerActivityDrop : BaseExplorerActivity() {
private lateinit var binding: ActivityExplorerDropBinding
@ -56,7 +56,7 @@ class ExplorerActivityDrop : BaseExplorerActivity() {
getString(R.string.share_intent_parsing_failed)
}
errorMsg?.let {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(it)
.setPositiveButton(R.string.ok, null)
@ -71,7 +71,7 @@ class ExplorerActivityDrop : BaseExplorerActivity() {
private fun onImported(failedItem: String?){
setCurrentPath(currentDirectoryPath)
if (failedItem == null) {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.success_import)
.setMessage(R.string.success_import_msg)
.setCancelable(false)
@ -80,7 +80,7 @@ class ExplorerActivityDrop : BaseExplorerActivity() {
}
.show()
} else {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(getString(R.string.import_failed, failedItem))
.setPositiveButton(R.string.ok, null)

View File

@ -10,7 +10,7 @@ import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.content_providers.RestrictedFileProvider
import sushi.hardcore.droidfs.explorers.ExplorerElement
import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
abstract class FileViewerActivity: BaseActivity() {
protected lateinit var gocryptfsVolume: GocryptfsVolume
@ -76,7 +76,7 @@ abstract class FileViewerActivity: BaseActivity() {
if (success){
return fileBuff
} else {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(R.string.read_file_failed)
.setCancelable(false)
@ -84,7 +84,7 @@ abstract class FileViewerActivity: BaseActivity() {
.show()
}
} catch (e: OutOfMemoryError){
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(R.string.outofmemoryerror_msg)
.setCancelable(false)
@ -93,7 +93,7 @@ abstract class FileViewerActivity: BaseActivity() {
}
} else {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(R.string.get_size_failed)
.setCancelable(false)

View File

@ -15,7 +15,7 @@ import com.bumptech.glide.load.resource.bitmap.BitmapTransformation
import sushi.hardcore.droidfs.ConstValues
import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.databinding.ActivityImageViewerBinding
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.ZoomableImageView
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
@ -87,7 +87,7 @@ class ImageViewer: FileViewerActivity() {
}
})
binding.imageDelete.setOnClickListener {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.keepFullScreen()
.setTitle(R.string.warning)
.setPositiveButton(R.string.ok) { _, _ ->
@ -101,7 +101,7 @@ class ImageViewer: FileViewerActivity() {
loadImage()
}
} else {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.keepFullScreen()
.setTitle(R.string.error)
.setMessage(getString(R.string.remove_failed, fileName))
@ -222,7 +222,7 @@ class ImageViewer: FileViewerActivity() {
private fun askSaveRotation(callback: () -> Unit){
if (rotationAngle%360 != 0f && !slideshowActive){
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.keepFullScreen()
.setTitle(R.string.warning)
.setMessage(R.string.ask_save_img_rotated)
@ -241,7 +241,7 @@ class ImageViewer: FileViewerActivity() {
Toast.makeText(this, R.string.image_saved_successfully, Toast.LENGTH_SHORT).show()
callback()
} else {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.keepFullScreen()
.setTitle(R.string.error)
.setMessage(R.string.file_write_failed)
@ -249,7 +249,7 @@ class ImageViewer: FileViewerActivity() {
.show()
}
} else {
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.keepFullScreen()
.setTitle(R.string.error)
.setMessage(R.string.bitmap_compress_failed)

View File

@ -7,7 +7,7 @@ import com.google.android.exoplayer2.source.MediaSource
import com.google.android.exoplayer2.source.ProgressiveMediaSource
import sushi.hardcore.droidfs.ConstValues
import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
abstract class MediaPlayer: FileViewerActivity() {
private lateinit var player: SimpleExoPlayer
@ -43,7 +43,7 @@ abstract class MediaPlayer: FileViewerActivity() {
}
}
override fun onPlayerError(error: PlaybackException) {
ColoredAlertDialogBuilder(this@MediaPlayer)
CustomAlertDialogBuilder(this@MediaPlayer, themeValue)
.setTitle(R.string.error)
.setMessage(getString(R.string.playing_failed, error.errorCodeName))
.setCancelable(false)

View File

@ -11,7 +11,7 @@ import android.widget.Toast
import androidx.appcompat.widget.Toolbar
import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.GocryptfsVolume
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import java.io.ByteArrayInputStream
import java.io.File
@ -36,7 +36,7 @@ class TextEditor: FileViewerActivity() {
try {
loadLayout(String(it))
} catch (e: OutOfMemoryError){
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error)
.setMessage(R.string.outofmemoryerror_msg)
.setCancelable(false)
@ -105,7 +105,7 @@ class TextEditor: FileViewerActivity() {
private fun checkSaveAndExit(){
if (changedSinceLastSave){
ColoredAlertDialogBuilder(this)
CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.warning)
.setMessage(R.string.ask_save)
.setPositiveButton(R.string.save) { _, _ ->

View File

@ -1,28 +0,0 @@
package sushi.hardcore.droidfs.widgets
import android.content.Context
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.DrawableContainer
import android.graphics.drawable.GradientDrawable
import android.graphics.drawable.StateListDrawable
import android.util.AttributeSet
import android.widget.ListView
import androidx.core.content.ContextCompat
import sushi.hardcore.droidfs.R
open class ColoredBorderListView: ListView {
constructor(context: Context) : super(context) { applyColor() }
constructor(context: Context, attrs: AttributeSet): super(context, attrs) { applyColor() }
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int): super(context, attrs, defStyleAttr) { applyColor() }
private fun applyColor(){
val background = ContextCompat.getDrawable(context, R.drawable.listview_border) as StateListDrawable
val dcs = background.constantState as DrawableContainer.DrawableContainerState
val drawableItems = dcs.children
val gradientDrawable = drawableItems[0] as GradientDrawable
val themeColor = ThemeColor.getThemeColor(context)
gradientDrawable.setStroke(context.resources.displayMetrics.density.toInt()*2, themeColor)
super.setBackground(background)
super.setDivider(ColorDrawable(themeColor))
super.setDividerHeight(context.resources.displayMetrics.density.toInt()*2)
}
}

View File

@ -1,15 +0,0 @@
package sushi.hardcore.droidfs.widgets
import android.content.Context
import android.content.res.ColorStateList
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatCheckBox
class ColoredCheckBox: AppCompatCheckBox {
constructor(context: Context) : super(context) { applyColor() }
constructor(context: Context, attrs: AttributeSet): super(context, attrs) { applyColor() }
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int): super(context, attrs, defStyleAttr) { applyColor() }
private fun applyColor(){
super.setButtonTintList(ColorStateList.valueOf(ThemeColor.getThemeColor(context)))
}
}

View File

@ -1,15 +0,0 @@
package sushi.hardcore.droidfs.widgets
import android.content.Context
import android.content.res.ColorStateList
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatEditText
class ColoredEditText: AppCompatEditText {
constructor(context: Context) : super(context) { applyColor() }
constructor(context: Context, attrs: AttributeSet): super(context, attrs) { applyColor() }
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int): super(context, attrs, defStyleAttr) { applyColor() }
private fun applyColor(){
super.setBackgroundTintList(ColorStateList.valueOf(ThemeColor.getThemeColor(context)))
}
}

View File

@ -1,18 +0,0 @@
package sushi.hardcore.droidfs.widgets
import android.content.Context
import android.content.res.ColorStateList
import android.util.AttributeSet
import androidx.core.content.ContextCompat
import com.google.android.material.floatingactionbutton.FloatingActionButton
class ColoredFAB: FloatingActionButton {
constructor(context: Context) : super(context) { applyColor() }
constructor(context: Context, attrs: AttributeSet): super(context, attrs) { applyColor() }
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int): super(context, attrs, defStyleAttr) { applyColor() }
private fun applyColor(){
val themeColor = ThemeColor.getThemeColor(context)
backgroundTintList = ColorStateList.valueOf(themeColor)
setColorFilter(ContextCompat.getColor(context, android.R.color.white))
}
}

View File

@ -1,14 +0,0 @@
package sushi.hardcore.droidfs.widgets
import android.content.Context
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatImageButton
class ColoredImageButton: AppCompatImageButton {
constructor(context: Context) : super(context) { applyColor() }
constructor(context: Context, attrs: AttributeSet): super(context, attrs) { applyColor() }
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int): super(context, attrs, defStyleAttr) { applyColor() }
private fun applyColor(){
super.setColorFilter(ThemeColor.getThemeColor(context))
}
}

View File

@ -1,14 +0,0 @@
package sushi.hardcore.droidfs.widgets
import android.content.Context
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatImageView
class ColoredImageView : AppCompatImageView {
constructor(context: Context) : super(context) { applyColor() }
constructor(context: Context, attrs: AttributeSet): super(context, attrs) { applyColor() }
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int): super(context, attrs, defStyleAttr) { applyColor() }
private fun applyColor(){
super.setColorFilter(ThemeColor.getThemeColor(context))
}
}

View File

@ -1,30 +0,0 @@
package sushi.hardcore.droidfs.widgets
import android.content.Context
import android.util.AttributeSet
import androidx.preference.ListPreference
import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.adapters.DialogSingleChoiceAdapter
class ColoredListPreference: ListPreference {
constructor(context: Context): super(context)
constructor(context: Context, attrs: AttributeSet): super(context, attrs)
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int): super(context, attrs, defStyleAttr)
override fun onAttached() {
super.onAttached()
summary = entries[entryValues.indexOf(getPersistedString(value))]
}
override fun onClick() {
ColoredAlertDialogBuilder(context)
.setTitle(title)
.setSingleChoiceItems(DialogSingleChoiceAdapter(context, entries.map { s -> s.toString() }), entryValues.indexOf(getPersistedString(value))) { dialog, which ->
dialog.dismiss()
summary = entries[which].toString()
persistString(entryValues[which].toString())
}
.setNegativeButton(R.string.cancel) { dialog, _ -> dialog.dismiss() }
.show()
}
}

View File

@ -1,15 +1,29 @@
package sushi.hardcore.droidfs.widgets
import android.content.Context
import android.util.TypedValue
import android.view.WindowManager
import androidx.appcompat.app.AlertDialog
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
import sushi.hardcore.droidfs.R
class ColoredAlertDialogBuilder: AlertDialog.Builder {
constructor(context: Context): super(context)
constructor(context: Context, themeResId: Int): super(context, themeResId)
class CustomAlertDialogBuilder(context: Context, theme: String) : AlertDialog.Builder(
context, when (theme) {
"black_green" -> R.style.BlackGreenDialog
"dark_red" -> R.style.DarkRedDialog
"black_red" -> R.style.BlackRedDialog
"dark_blue" -> R.style.DarkBlueDialog
"black_blue" -> R.style.BlackBlueDialog
"dark_yellow" -> R.style.DarkYellowDialog
"black_yellow" -> R.style.BlackYellowDialog
"dark_orange" -> R.style.DarkOrangeDialog
"black_orange" -> R.style.BlackOrangeDialog
"dark_purple" -> R.style.DarkPurpleDialog
"black_purple" -> R.style.BlackPurpleDialog
else -> R.style.DarkGreenDialog
}
) {
private var keepFullScreen = false
fun keepFullScreen(): AlertDialog.Builder {
@ -17,15 +31,6 @@ class ColoredAlertDialogBuilder: AlertDialog.Builder {
return this
}
private fun applyColor(dialog: AlertDialog){
dialog.setOnShowListener{
val themeColor = ThemeColor.getThemeColor(context)
for (i in listOf(AlertDialog.BUTTON_POSITIVE, AlertDialog.BUTTON_NEGATIVE, AlertDialog.BUTTON_NEUTRAL)){
dialog.getButton(i).setTextColor(themeColor)
}
}
}
override fun show(): AlertDialog {
val dialog = create()
dialog.show()
@ -41,7 +46,13 @@ class ColoredAlertDialogBuilder: AlertDialog.Builder {
override fun create(): AlertDialog {
val dialog = super.create()
applyColor(dialog)
dialog.setOnShowListener {
val typedValue = TypedValue()
context.theme.resolveAttribute(R.attr.colorAccent, typedValue, true)
for (i in listOf(AlertDialog.BUTTON_POSITIVE, AlertDialog.BUTTON_NEGATIVE, AlertDialog.BUTTON_NEUTRAL)) {
dialog.getButton(i).setTextColor(typedValue.data)
}
}
if (keepFullScreen){
dialog.window?.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
}

View File

@ -1,13 +1,26 @@
package sushi.hardcore.droidfs.widgets
import android.content.Context
import android.graphics.drawable.ColorDrawable
import android.util.AttributeSet
import android.util.TypedValue
import android.widget.ListAdapter
import android.widget.ListView
import androidx.core.content.ContextCompat
import sushi.hardcore.droidfs.R
class NonScrollableColoredBorderListView: ColoredBorderListView {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet): super(context, attrs)
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int): super(context, attrs, defStyleAttr)
class NonScrollableColoredBorderListView: ListView {
constructor(context: Context) : super(context) { applyColor() }
constructor(context: Context, attrs: AttributeSet): super(context, attrs) { applyColor() }
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int): super(context, attrs, defStyleAttr) { applyColor() }
fun applyColor() {
val typedValue = TypedValue()
context.theme.resolveAttribute(R.attr.colorAccent, typedValue, true)
divider = ColorDrawable(typedValue.data)
dividerHeight = context.resources.displayMetrics.density.toInt()*2
background = ContextCompat.getDrawable(context, R.drawable.listview_border)
}
fun computeHeight(): Int {
var totalHeight = 0

View File

@ -1,16 +0,0 @@
package sushi.hardcore.droidfs.widgets
import android.content.Context
import android.util.AttributeSet
import androidx.preference.Preference
class SimpleActionPreference: Preference {
constructor(context: Context): super(context)
constructor(context: Context, attrs: AttributeSet): super(context, attrs)
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int): super(context, attrs, defStyleAttr)
var onClick: ((SimpleActionPreference) -> Unit)? = null
override fun onClick() {
onClick?.let { it(this) }
}
}

View File

@ -1,25 +0,0 @@
package sushi.hardcore.droidfs.widgets
import android.content.Context
import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.DrawableCompat
import androidx.preference.Preference
import androidx.preference.PreferenceGroup
import androidx.preference.PreferenceManager
import sushi.hardcore.droidfs.R
object ThemeColor {
fun getThemeColor(context: Context): Int {
val sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context)
return sharedPrefs.getInt("themeColor", ContextCompat.getColor(context, R.color.themeColor))
}
fun tintPreferenceIcons(preference: Preference, color: Int){
if (preference is PreferenceGroup) {
for (i in 0 until preference.preferenceCount) {
tintPreferenceIcons(preference.getPreference(i), color)
}
} else if (preference.icon != null) {
DrawableCompat.setTint(preference.icon, color)
}
}
}

View File

@ -2,7 +2,7 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/buttonBackgroundColor"/>
<solid android:color="?attr/buttonBackgroundColor"/>
<corners android:radius="4dp"/>
</shape>
</item>

View File

@ -1,6 +1,6 @@
<vector android:height="24dp" android:tint="#FFFFFF"
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0"/>
<path android:fillColor="@android:color/white" android:pathData="M9,2L7.17,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2L9,2zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M9,2L7.17,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2L9,2zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z"/>
</vector>

View File

@ -1,5 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M20,6h-8l-2,-2L4,4c-1.11,0 -1.99,0.89 -1.99,2L2,18c0,1.11 0.89,2 2,2h16c1.11,0 2,-0.89 2,-2L22,8c0,-1.11 -0.89,-2 -2,-2zM19,14h-3v3h-2v-3h-3v-2h3L14,9h2v3h3v2z"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M20,6h-8l-2,-2L4,4c-1.11,0 -1.99,0.89 -1.99,2L2,18c0,1.11 0.89,2 2,2h16c1.11,0 2,-0.89 2,-2L22,8c0,-1.11 -0.89,-2 -2,-2zM19,14h-3v3h-2v-3h-3v-2h3L14,9h2v3h3v2z"/>
</vector>

View File

@ -1,4 +1,4 @@
<vector android:height="24dp" android:viewportHeight="500"
android:viewportWidth="500" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M68.29,431.711c0,20.078 16.264,36.34 36.343,36.34h290.734c20.078,0 36.345,-16.262 36.345,-36.34V250c0,-20.079 -16.267,-36.342 -36.345,-36.342H177.317v-63.597c0,-40.157 32.525,-72.685 72.683,-72.685c40.158,0 72.685,32.528 72.685,72.685v4.541c0,12.538 10.176,22.715 22.711,22.715c12.537,0 22.717,-10.177 22.717,-22.715v-4.541c0,-65.232 -52.882,-118.111 -118.112,-118.111c-65.24,0 -118.111,52.879 -118.111,118.111v63.597h-27.256c-20.079,0 -36.343,16.263 -36.343,36.342V431.711zM213.658,313.599c0,-20.078 16.263,-36.341 36.342,-36.341s36.341,16.263 36.341,36.341c0,12.812 -6.634,24.079 -16.625,30.529c0,0 3.55,21.446 7.542,46.699c0,7.538 -6.087,13.625 -13.629,13.625h-27.258c-7.541,0 -13.627,-6.087 -13.627,-13.625l7.542,-46.699C220.294,337.678 213.658,326.41 213.658,313.599z"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M68.29,431.711c0,20.078 16.264,36.34 36.343,36.34h290.734c20.078,0 36.345,-16.262 36.345,-36.34V250c0,-20.079 -16.267,-36.342 -36.345,-36.342H177.317v-63.597c0,-40.157 32.525,-72.685 72.683,-72.685c40.158,0 72.685,32.528 72.685,72.685v4.541c0,12.538 10.176,22.715 22.711,22.715c12.537,0 22.717,-10.177 22.717,-22.715v-4.541c0,-65.232 -52.882,-118.111 -118.112,-118.111c-65.24,0 -118.111,52.879 -118.111,118.111v63.597h-27.256c-20.079,0 -36.343,16.263 -36.343,36.342V431.711zM213.658,313.599c0,-20.078 16.263,-36.341 36.342,-36.341s36.341,16.263 36.341,36.341c0,12.812 -6.634,24.079 -16.625,30.529c0,0 3.55,21.446 7.542,46.699c0,7.538 -6.087,13.625 -13.629,13.625h-27.258c-7.541,0 -13.627,-6.087 -13.627,-13.625l7.542,-46.699C220.294,337.678 213.658,326.41 213.658,313.599z"/>
</vector>

View File

@ -1,5 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FFFFFF" android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>
</vector>

View File

@ -5,6 +5,5 @@
android:viewportHeight="500">
<path
android:pathData="m131.889,118.111l0,63.597l-27.256,0c-20.079,0 -36.343,16.263 -36.343,36.342l0,181.711c0,20.078 16.264,36.34 36.343,36.34l290.734,0c20.078,0 36.345,-16.262 36.345,-36.34l0,-181.711c0,-20.079 -16.267,-36.342 -36.345,-36.342l-27.254,0l0,-63.597c0,-65.232 -52.882,-118.111 -118.112,-118.111s-118.112,52.878 -118.112,118.111zM177.317,181.708l0,-63.597c0,-40.157 32.525,-72.685 72.683,-72.685c40.158,0 72.685,32.528 72.685,72.685l0,63.597l-145.368,0zM213.658,281.649c0,-20.078 16.263,-36.341 36.342,-36.341s36.341,16.263 36.341,36.341c0,12.812 -6.634,24.079 -16.625,30.529c0,0 3.55,21.446 7.542,46.699c0,7.538 -6.087,13.625 -13.629,13.625l-27.258,0c-7.541,0 -13.627,-6.087 -13.627,-13.625l7.542,-46.699c-9.992,-6.45 -16.628,-17.718 -16.628,-30.529z"
android:fillColor="#FFFFFF"
android:fillType="evenOdd"/>
</vector>
android:fillColor="?attr/colorAccent"/>
</vector>

View File

@ -5,6 +5,6 @@
android:width="24dp"
android:height="24dp">
<path
android:fillColor="#FFFFFF"
android:fillColor="?attr/colorAccent"
android:pathData="M14 2H6C4.9 2 4 2.9 4 4v16c0 1.1 0.9 2 2 2h12c1.1 0 2 -0.9 2 -2V8L14 2zM15 13h-2v4c0 1.105 -0.895 2 -2 2s-2 -0.895 -2 -2c0 -1.105 0.895 -2 2 -2v-4h4V13zM13 9V3.5L18.5 9H13z" />
</vector>

View File

@ -6,6 +6,6 @@
android:viewportHeight="24">
<path
android:fillColor="#FFFFFF"
android:fillColor="?attr/colorAccent"
android:pathData="M14,2H6C4.9,2,4,2.9,4,4v16c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V8L14,2z M7,18l2.5-3.333l1.5,2l2.5-3.333L17,18H7z M13,9 V3.5L18.5,9H13z" />
</vector>

View File

@ -6,6 +6,6 @@
android:viewportHeight="24">
<path
android:fillColor="#FFFFFF"
android:fillColor="?attr/colorAccent"
android:pathData="M14,2H6C4.9,2,4,2.9,4,4v16c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V8L14,2z M16,18H8v-2h8V18z M16,14H8v-2h8V14z M13,9V3.5 L18.5,9H13z" />
</vector>

View File

@ -2,6 +2,6 @@
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path
android:fillColor="#FFFFFF"
android:fillColor="?attr/colorAccent"
android:pathData="M6,2c-1.1,0 -1.99,0.9 -1.99,2L4,20c0,1.1 0.89,2 1.99,2L18,22c1.1,0 2,-0.9 2,-2L20,8l-6,-6L6,2zM13,9L13,3.5L18.5,9L13,9z"/>
</vector>

View File

@ -6,6 +6,6 @@
android:viewportHeight="24">
<path
android:fillColor="#FFFFFF"
android:fillColor="?attr/colorAccent"
android:pathData="M14,2H6C4.9,2,4,2.9,4,4v16c0,1.1,0.9,2,2,2h12c1.1,0,2-0.9,2-2V8L14,2z M10,18v-6l5,3L10,18z M13,9V3.5L18.5,9H13z" />
</vector>

View File

@ -1,5 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FFFFFF" android:pathData="M17.81,4.47c-0.08,0 -0.16,-0.02 -0.23,-0.06C15.66,3.42 14,3 12.01,3c-1.98,0 -3.86,0.47 -5.57,1.41 -0.24,0.13 -0.54,0.04 -0.68,-0.2 -0.13,-0.24 -0.04,-0.55 0.2,-0.68C7.82,2.52 9.86,2 12.01,2c2.13,0 3.99,0.47 6.03,1.52 0.25,0.13 0.34,0.43 0.21,0.67 -0.09,0.18 -0.26,0.28 -0.44,0.28zM3.5,9.72c-0.1,0 -0.2,-0.03 -0.29,-0.09 -0.23,-0.16 -0.28,-0.47 -0.12,-0.7 0.99,-1.4 2.25,-2.5 3.75,-3.27C9.98,4.04 14,4.03 17.15,5.65c1.5,0.77 2.76,1.86 3.75,3.25 0.16,0.22 0.11,0.54 -0.12,0.7 -0.23,0.16 -0.54,0.11 -0.7,-0.12 -0.9,-1.26 -2.04,-2.25 -3.39,-2.94 -2.87,-1.47 -6.54,-1.47 -9.4,0.01 -1.36,0.7 -2.5,1.7 -3.4,2.96 -0.08,0.14 -0.23,0.21 -0.39,0.21zM9.75,21.79c-0.13,0 -0.26,-0.05 -0.35,-0.15 -0.87,-0.87 -1.34,-1.43 -2.01,-2.64 -0.69,-1.23 -1.05,-2.73 -1.05,-4.34 0,-2.97 2.54,-5.39 5.66,-5.39s5.66,2.42 5.66,5.39c0,0.28 -0.22,0.5 -0.5,0.5s-0.5,-0.22 -0.5,-0.5c0,-2.42 -2.09,-4.39 -4.66,-4.39 -2.57,0 -4.66,1.97 -4.66,4.39 0,1.44 0.32,2.77 0.93,3.85 0.64,1.15 1.08,1.64 1.85,2.42 0.19,0.2 0.19,0.51 0,0.71 -0.11,0.1 -0.24,0.15 -0.37,0.15zM16.92,19.94c-1.19,0 -2.24,-0.3 -3.1,-0.89 -1.49,-1.01 -2.38,-2.65 -2.38,-4.39 0,-0.28 0.22,-0.5 0.5,-0.5s0.5,0.22 0.5,0.5c0,1.41 0.72,2.74 1.94,3.56 0.71,0.48 1.54,0.71 2.54,0.71 0.24,0 0.64,-0.03 1.04,-0.1 0.27,-0.05 0.53,0.13 0.58,0.41 0.05,0.27 -0.13,0.53 -0.41,0.58 -0.57,0.11 -1.07,0.12 -1.21,0.12zM14.91,22c-0.04,0 -0.09,-0.01 -0.13,-0.02 -1.59,-0.44 -2.63,-1.03 -3.72,-2.1 -1.4,-1.39 -2.17,-3.24 -2.17,-5.22 0,-1.62 1.38,-2.94 3.08,-2.94 1.7,0 3.08,1.32 3.08,2.94 0,1.07 0.93,1.94 2.08,1.94s2.08,-0.87 2.08,-1.94c0,-3.77 -3.25,-6.83 -7.25,-6.83 -2.84,0 -5.44,1.58 -6.61,4.03 -0.39,0.81 -0.59,1.76 -0.59,2.8 0,0.78 0.07,2.01 0.67,3.61 0.1,0.26 -0.03,0.55 -0.29,0.64 -0.26,0.1 -0.55,-0.04 -0.64,-0.29 -0.49,-1.31 -0.73,-2.61 -0.73,-3.96 0,-1.2 0.23,-2.29 0.68,-3.24 1.33,-2.79 4.28,-4.6 7.51,-4.6 4.55,0 8.25,3.51 8.25,7.83 0,1.62 -1.38,2.94 -3.08,2.94s-3.08,-1.32 -3.08,-2.94c0,-1.07 -0.93,-1.94 -2.08,-1.94s-2.08,0.87 -2.08,1.94c0,1.71 0.66,3.31 1.87,4.51 0.95,0.94 1.86,1.46 3.27,1.85 0.27,0.07 0.42,0.35 0.35,0.61 -0.05,0.23 -0.26,0.38 -0.47,0.38z"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M17.81,4.47c-0.08,0 -0.16,-0.02 -0.23,-0.06C15.66,3.42 14,3 12.01,3c-1.98,0 -3.86,0.47 -5.57,1.41 -0.24,0.13 -0.54,0.04 -0.68,-0.2 -0.13,-0.24 -0.04,-0.55 0.2,-0.68C7.82,2.52 9.86,2 12.01,2c2.13,0 3.99,0.47 6.03,1.52 0.25,0.13 0.34,0.43 0.21,0.67 -0.09,0.18 -0.26,0.28 -0.44,0.28zM3.5,9.72c-0.1,0 -0.2,-0.03 -0.29,-0.09 -0.23,-0.16 -0.28,-0.47 -0.12,-0.7 0.99,-1.4 2.25,-2.5 3.75,-3.27C9.98,4.04 14,4.03 17.15,5.65c1.5,0.77 2.76,1.86 3.75,3.25 0.16,0.22 0.11,0.54 -0.12,0.7 -0.23,0.16 -0.54,0.11 -0.7,-0.12 -0.9,-1.26 -2.04,-2.25 -3.39,-2.94 -2.87,-1.47 -6.54,-1.47 -9.4,0.01 -1.36,0.7 -2.5,1.7 -3.4,2.96 -0.08,0.14 -0.23,0.21 -0.39,0.21zM9.75,21.79c-0.13,0 -0.26,-0.05 -0.35,-0.15 -0.87,-0.87 -1.34,-1.43 -2.01,-2.64 -0.69,-1.23 -1.05,-2.73 -1.05,-4.34 0,-2.97 2.54,-5.39 5.66,-5.39s5.66,2.42 5.66,5.39c0,0.28 -0.22,0.5 -0.5,0.5s-0.5,-0.22 -0.5,-0.5c0,-2.42 -2.09,-4.39 -4.66,-4.39 -2.57,0 -4.66,1.97 -4.66,4.39 0,1.44 0.32,2.77 0.93,3.85 0.64,1.15 1.08,1.64 1.85,2.42 0.19,0.2 0.19,0.51 0,0.71 -0.11,0.1 -0.24,0.15 -0.37,0.15zM16.92,19.94c-1.19,0 -2.24,-0.3 -3.1,-0.89 -1.49,-1.01 -2.38,-2.65 -2.38,-4.39 0,-0.28 0.22,-0.5 0.5,-0.5s0.5,0.22 0.5,0.5c0,1.41 0.72,2.74 1.94,3.56 0.71,0.48 1.54,0.71 2.54,0.71 0.24,0 0.64,-0.03 1.04,-0.1 0.27,-0.05 0.53,0.13 0.58,0.41 0.05,0.27 -0.13,0.53 -0.41,0.58 -0.57,0.11 -1.07,0.12 -1.21,0.12zM14.91,22c-0.04,0 -0.09,-0.01 -0.13,-0.02 -1.59,-0.44 -2.63,-1.03 -3.72,-2.1 -1.4,-1.39 -2.17,-3.24 -2.17,-5.22 0,-1.62 1.38,-2.94 3.08,-2.94 1.7,0 3.08,1.32 3.08,2.94 0,1.07 0.93,1.94 2.08,1.94s2.08,-0.87 2.08,-1.94c0,-3.77 -3.25,-6.83 -7.25,-6.83 -2.84,0 -5.44,1.58 -6.61,4.03 -0.39,0.81 -0.59,1.76 -0.59,2.8 0,0.78 0.07,2.01 0.67,3.61 0.1,0.26 -0.03,0.55 -0.29,0.64 -0.26,0.1 -0.55,-0.04 -0.64,-0.29 -0.49,-1.31 -0.73,-2.61 -0.73,-3.96 0,-1.2 0.23,-2.29 0.68,-3.24 1.33,-2.79 4.28,-4.6 7.51,-4.6 4.55,0 8.25,3.51 8.25,7.83 0,1.62 -1.38,2.94 -3.08,2.94s-3.08,-1.32 -3.08,-2.94c0,-1.07 -0.93,-1.94 -2.08,-1.94s-2.08,0.87 -2.08,1.94c0,1.71 0.66,3.31 1.87,4.51 0.95,0.94 1.86,1.46 3.27,1.85 0.27,0.07 0.42,0.35 0.35,0.61 -0.05,0.23 -0.26,0.38 -0.47,0.38z"/>
</vector>

View File

@ -1,5 +1,5 @@
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FFFFFF" android:pathData="M10,4H4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8c0,-1.1 -0.9,-2 -2,-2h-8l-2,-2z"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M10,4H4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8c0,-1.1 -0.9,-2 -2,-2h-8l-2,-2z"/>
</vector>

View File

@ -4,6 +4,6 @@
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFF"
android:fillColor="?attr/colorAccent"
android:pathData="M4,4C2.9,4 2,4.9 2,6L2,18C2,19.1 2.9,20 4,20L11.2949,20C11.1059,19.366 11,18.695 11,18C11,14.134 14.134,11 18,11C19.488,11 20.866,11.4678 22,12.2598L22,8C22,6.9 21.1,6 20,6L12,6L10,4L4,4zM18,13C15.2,13 13,15.2 13,18C13,20.8 15.2,23 18,23C19,23 20.0008,22.6992 20.8008,22.1992L22.5996,24L24,22.5996L22.1992,20.8008C22.6992,20.0008 23,19 23,18C23,15.2 20.8,13 18,13zM18,15C19.7,15 21,16.3 21,18C21,19.7 19.7,21 18,21C16.3,21 15,19.7 15,18C15,16.3 16.3,15 18,15z"/>
</vector>

View File

@ -4,6 +4,6 @@
android:viewportWidth="32"
android:viewportHeight="32">
<path
android:fillColor="#FF000000"
android:fillColor="?attr/colorAccent"
android:pathData="M5.583,7.229c-2.464,-0.005 -5.755,1.557 -5.573,5.479 0.281,6.125 6.557,6.693 9.068,6.745 0.271,1.146 3.224,5.109 5.411,5.318h9.573c5.74,-0.38 10.036,-17.365 6.854,-17.427 -5.271,0.25 -8.396,0.375 -11.073,0.396v5.297l-0.839,-0.365 -0.005,-4.932c-3.073,0 -5.781,-0.141 -10.917,-0.396 -0.646,-0.005 -1.542,-0.115 -2.5,-0.115zM5.927,9.396h0.297c0.349,3.141 0.917,4.974 2.068,7.781 -2.938,-0.349 -5.432,-1.198 -5.891,-4.38 -0.24,-1.646 0.563,-3.365 3.526,-3.401zM17.339,12.479c0.198,0.005 0.406,0.042 0.594,0.13l1,0.432 -0.714,1.302c-0.109,0 -0.219,0.016 -0.323,0.052 -0.464,0.151 -0.708,0.604 -0.542,1.021 0.036,0.083 0.089,0.161 0.151,0.229l-1.234,2.25c-0.099,0 -0.203,0.016 -0.297,0.052 -0.464,0.146 -0.708,0.604 -0.542,1.016 0.172,0.417 0.682,0.63 1.151,0.479 0.464,-0.146 0.703,-0.604 0.536,-1.021 -0.047,-0.109 -0.115,-0.208 -0.208,-0.292l1.203,-2.188c0.13,0.01 0.26,0 0.391,-0.042 0.104,-0.031 0.198,-0.083 0.281,-0.151 0.464,0.198 0.844,0.354 1.12,0.49 0.406,0.203 0.552,0.339 0.599,0.49 0.042,0.146 -0.005,0.427 -0.24,0.922 -0.172,0.37 -0.458,0.896 -0.797,1.51 -0.115,0 -0.229,0.016 -0.333,0.052 -0.469,0.151 -0.708,0.604 -0.542,1.021 0.167,0.411 0.682,0.625 1.146,0.479 0.469,-0.151 0.708,-0.604 0.542,-1.021 -0.042,-0.099 -0.104,-0.193 -0.182,-0.271 0.333,-0.609 0.62,-1.135 0.807,-1.526 0.25,-0.536 0.38,-0.938 0.266,-1.323s-0.469,-0.635 -0.932,-0.865c-0.307,-0.151 -0.693,-0.313 -1.146,-0.505 0.005,-0.109 -0.01,-0.214 -0.052,-0.318s-0.109,-0.198 -0.193,-0.281l0.703,-1.281 3.901,1.682c0.703,0.307 0.995,1.057 0.651,1.682l-2.682,4.906c-0.339,0.625 -1.182,0.885 -1.885,0.578l-5.516,-2.38c-0.703,-0.307 -0.995,-1.057 -0.656,-1.682l2.682,-4.906c0.234,-0.432 0.708,-0.688 1.208,-0.708h0.083z"/>
</vector>

View File

@ -6,5 +6,5 @@
android:viewportHeight="24">
<path
android:fillColor="#ffffff" android:pathData="M10.9,2.1c-4.6,0.5-8.3,4.2-8.8,8.7c-0.6,5,2.5,9.3,6.9,10.7v-2.3c0,0-0.4,0.1-0.9,0.1c-1.4,0-2-1.2-2.1-1.9 c-0.1-0.4-0.3-0.7-0.6-1C5.1,16.3,5,16.3,5,16.2C5,16,5.3,16,5.4,16c0.6,0,1.1,0.7,1.3,1c0.5,0.8,1.1,1,1.4,1c0.4,0,0.7-0.1,0.9-0.2 c0.1-0.7,0.4-1.4,1-1.8c-2.3-0.5-4-1.8-4-4c0-1.1,0.5-2.2,1.2-3C7.1,8.8,7,8.3,7,7.6C7,7.2,7,6.6,7.3,6c0,0,1.4,0,2.8,1.3 C10.6,7.1,11.3,7,12,7s1.4,0.1,2,0.3C15.3,6,16.8,6,16.8,6C17,6.6,17,7.2,17,7.6c0,0.8-0.1,1.2-0.2,1.4c0.7,0.8,1.2,1.8,1.2,3 c0,2.2-1.7,3.5-4,4c0.6,0.5,1,1.4,1,2.3v3.3c4.1-1.3,7-5.1,7-9.5C22,6.1,16.9,1.4,10.9,2.1z" />
android:fillColor="?attr/colorAccent" android:pathData="M10.9,2.1c-4.6,0.5-8.3,4.2-8.8,8.7c-0.6,5,2.5,9.3,6.9,10.7v-2.3c0,0-0.4,0.1-0.9,0.1c-1.4,0-2-1.2-2.1-1.9 c-0.1-0.4-0.3-0.7-0.6-1C5.1,16.3,5,16.3,5,16.2C5,16,5.3,16,5.4,16c0.6,0,1.1,0.7,1.3,1c0.5,0.8,1.1,1,1.4,1c0.4,0,0.7-0.1,0.9-0.2 c0.1-0.7,0.4-1.4,1-1.8c-2.3-0.5-4-1.8-4-4c0-1.1,0.5-2.2,1.2-3C7.1,8.8,7,8.3,7,7.6C7,7.2,7,6.6,7.3,6c0,0,1.4,0,2.8,1.3 C10.6,7.1,11.3,7,12,7s1.4,0.1,2,0.3C15.3,6,16.8,6,16.8,6C17,6.6,17,7.2,17,7.6c0,0.8-0.1,1.2-0.2,1.4c0.7,0.8,1.2,1.8,1.2,3 c0,2.2-1.7,3.5-4,4c0.6,0.5,1,1.4,1,2.3v3.3c4.1-1.3,7-5.1,7-9.5C22,6.1,16.9,1.4,10.9,2.1z" />
</vector>

View File

@ -1,5 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M20,6h-8l-2,-2L4,4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,8c0,-1.1 -0.9,-2 -2,-2zM20,18L4,18L4,8h16v10zM8,13.01l1.41,1.41L11,12.84L11,17h2v-4.16l1.59,1.59L16,13.01 12.01,9 8,13.01z"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M20,6h-8l-2,-2L4,4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,8c0,-1.1 -0.9,-2 -2,-2zM20,18L4,18L4,8h16v10zM8,13.01l1.41,1.41L11,12.84L11,17h2v-4.16l1.59,1.59L16,13.01 12.01,9 8,13.01z"/>
</vector>

View File

@ -1,5 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-6h2v6zM13,9h-2L11,7h2v2z"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-6h2v6zM13,9h-2L11,7h2v2z"/>
</vector>

View File

@ -1,5 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M3,18h12v-2L3,16v2zM3,6v2h18L21,6L3,6zM3,13h18v-2L3,11v2z"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M3,18h12v-2L3,16v2zM3,6v2h18L21,6L3,6zM3,13h18v-2L3,11v2z"/>
</vector>

View File

@ -1,5 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M19,19H5V5h7V3H5c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2v-7h-2v7zM14,3v2h3.59l-9.83,9.83 1.41,1.41L19,6.41V10h2V3h-7z"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M19,19H5V5h7V3H5c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2v-7h-2v7zM14,3v2h3.59l-9.83,9.83 1.41,1.41L19,6.41V10h2V3h-7z"/>
</vector>

View File

@ -1,5 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,3c-4.97,0 -9,4.03 -9,9s4.03,9 9,9c0.83,0 1.5,-0.67 1.5,-1.5 0,-0.39 -0.15,-0.74 -0.39,-1.01 -0.23,-0.26 -0.38,-0.61 -0.38,-0.99 0,-0.83 0.67,-1.5 1.5,-1.5L16,16c2.76,0 5,-2.24 5,-5 0,-4.42 -4.03,-8 -9,-8zM6.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S5.67,9 6.5,9 8,9.67 8,10.5 7.33,12 6.5,12zM9.5,8C8.67,8 8,7.33 8,6.5S8.67,5 9.5,5s1.5,0.67 1.5,1.5S10.33,8 9.5,8zM14.5,8c-0.83,0 -1.5,-0.67 -1.5,-1.5S13.67,5 14.5,5s1.5,0.67 1.5,1.5S15.33,8 14.5,8zM17.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S16.67,9 17.5,9s1.5,0.67 1.5,1.5 -0.67,1.5 -1.5,1.5z"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M12,2C6.49,2 2,6.49 2,12s4.49,10 10,10c1.38,0 2.5,-1.12 2.5,-2.5c0,-0.61 -0.23,-1.2 -0.64,-1.67c-0.08,-0.1 -0.13,-0.21 -0.13,-0.33c0,-0.28 0.22,-0.5 0.5,-0.5H16c3.31,0 6,-2.69 6,-6C22,6.04 17.51,2 12,2zM17.5,13c-0.83,0 -1.5,-0.67 -1.5,-1.5c0,-0.83 0.67,-1.5 1.5,-1.5s1.5,0.67 1.5,1.5C19,12.33 18.33,13 17.5,13zM14.5,9C13.67,9 13,8.33 13,7.5C13,6.67 13.67,6 14.5,6S16,6.67 16,7.5C16,8.33 15.33,9 14.5,9zM5,11.5C5,10.67 5.67,10 6.5,10S8,10.67 8,11.5C8,12.33 7.33,13 6.5,13S5,12.33 5,11.5zM11,7.5C11,8.33 10.33,9 9.5,9S8,8.33 8,7.5C8,6.67 8.67,6 9.5,6S11,6.67 11,7.5z"/>
</vector>

View File

@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z"/>
</vector>

View File

@ -1,5 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M16.48,2.52c3.27,1.55 5.61,4.72 5.97,8.48h1.5C23.44,4.84 18.29,0 12,0l-0.66,0.03 3.81,3.81 1.33,-1.32zM10.23,1.75c-0.59,-0.59 -1.54,-0.59 -2.12,0L1.75,8.11c-0.59,0.59 -0.59,1.54 0,2.12l12.02,12.02c0.59,0.59 1.54,0.59 2.12,0l6.36,-6.36c0.59,-0.59 0.59,-1.54 0,-2.12L10.23,1.75zM14.83,21.19L2.81,9.17l6.36,-6.36 12.02,12.02 -6.36,6.36zM7.52,21.48C4.25,19.94 1.91,16.76 1.55,13L0.05,13C0.56,19.16 5.71,24 12,24l0.66,-0.03 -3.81,-3.81 -1.33,1.32z"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M16.48,2.52c3.27,1.55 5.61,4.72 5.97,8.48h1.5C23.44,4.84 18.29,0 12,0l-0.66,0.03 3.81,3.81 1.33,-1.32zM10.23,1.75c-0.59,-0.59 -1.54,-0.59 -2.12,0L1.75,8.11c-0.59,0.59 -0.59,1.54 0,2.12l12.02,12.02c0.59,0.59 1.54,0.59 2.12,0l6.36,-6.36c0.59,-0.59 0.59,-1.54 0,-2.12L10.23,1.75zM14.83,21.19L2.81,9.17l6.36,-6.36 12.02,12.02 -6.36,6.36zM7.52,21.48C4.25,19.94 1.91,16.76 1.55,13L0.05,13C0.56,19.16 5.71,24 12,24l0.66,-0.03 -3.81,-3.81 -1.33,1.32z"/>
</vector>

View File

@ -4,7 +4,7 @@
android:viewportHeight="512"
android:width="24dp"
android:height="24dp"
android:tint="#FFFFFF">
android:tint="?attr/colorAccent">
<path
android:fillColor="#000000"

View File

@ -1,5 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
</vector>

View File

@ -1,5 +1,5 @@
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FFFFFF" android:pathData="M3,18h6v-2L3,16v2zM3,6v2h18L21,6L3,6zM3,13h12v-2L3,11v2z"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M3,18h6v-2L3,16v2zM3,6v2h18L21,6L3,6zM3,13h12v-2L3,11v2z"/>
</vector>

View File

@ -1,5 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M6.99,11L3,15l3.99,4v-3H14v-2H6.99v-3zM21,9l-3.99,-4v3H10v2h7.01v3L21,9z"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M6.99,11L3,15l3.99,4v-3H14v-2H6.99v-3zM21,9l-3.99,-4v3H10v2h7.01v3L21,9z"/>
</vector>

View File

@ -1,5 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FFFFFF" android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z"/>
<path android:fillColor="?attr/colorAccent" android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z"/>
</vector>

View File

@ -4,7 +4,7 @@
<shape android:shape="rectangle">
<solid android:color="#00000000"/>
<corners android:radius="5dp"/>
<stroke android:width="1dp" android:color="@color/themeColor"/>
<stroke android:width="1dp" android:color="?attr/colorAccent"/>
</shape>
</item>
</selector>

View File

@ -29,7 +29,7 @@
android:text="@string/old_password"
android:textSize="@dimen/edit_text_label_text_size" />
<sushi.hardcore.droidfs.widgets.ColoredEditText
<EditText
android:id="@+id/edit_old_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -49,7 +49,7 @@
android:text="@string/new_password"
android:textSize="@dimen/edit_text_label_text_size" />
<sushi.hardcore.droidfs.widgets.ColoredEditText
<EditText
android:id="@+id/edit_new_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -69,7 +69,7 @@
android:text="@string/new_password_confirmation"
android:textSize="@dimen/edit_text_label_text_size" />
<sushi.hardcore.droidfs.widgets.ColoredEditText
<EditText
android:id="@+id/edit_new_password_confirm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -102,8 +102,7 @@
android:layout_height="@dimen/action_activity_button_height"
android:layout_marginHorizontal="@dimen/action_activity_button_horizontal_margin"
android:layout_marginBottom="@dimen/action_activity_button_margin_bottom"
android:text="@string/change_password"
style="@style/button"/>
android:text="@string/change_password"/>
</LinearLayout>

View File

@ -29,7 +29,7 @@
android:text="@string/password"
android:textSize="@dimen/edit_text_label_text_size" />
<sushi.hardcore.droidfs.widgets.ColoredEditText
<EditText
android:id="@+id/edit_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -49,7 +49,7 @@
android:text="@string/password_confirm"
android:textSize="@dimen/edit_text_label_text_size" />
<sushi.hardcore.droidfs.widgets.ColoredEditText
<EditText
android:id="@+id/edit_password_confirm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -91,8 +91,7 @@
android:layout_width="match_parent"
android:layout_height="@dimen/action_activity_button_height"
android:layout_marginHorizontal="@dimen/action_activity_button_horizontal_margin"
android:text="@string/create"
style="@style/button"/>
android:text="@string/create"/>
</LinearLayout>

View File

@ -36,7 +36,7 @@
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<sushi.hardcore.droidfs.widgets.ColoredFAB
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@ -34,7 +34,7 @@
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<sushi.hardcore.droidfs.widgets.ColoredFAB
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -37,6 +38,7 @@
android:background="#00000000"
android:scaleType="fitCenter"
android:src="@drawable/icon_delete"
app:tint="@color/white"
android:layout_marginStart="10dp"
android:layout_marginEnd="20dp"
android:layout_toStartOf="@id/image_button_slideshow"

View File

@ -9,12 +9,13 @@
<include android:id="@+id/toolbar" layout="@layout/toolbar"/>
<sushi.hardcore.droidfs.widgets.ColoredImageView
<ImageView
android:id="@+id/image_logo"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="30dp"
android:src="@drawable/logo"
app:tint="?attr/colorAccent"
android:layout_weight="1"/>
<androidx.constraintlayout.widget.ConstraintLayout
@ -29,8 +30,7 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/button_create"
android:layout_marginHorizontal="@dimen/main_activity_button_hor_margin"
android:text="@string/open_volume"
style="@style/button"/>
android:text="@string/open_volume"/>
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button_create"
@ -39,8 +39,7 @@
app:layout_constraintTop_toBottomOf="@id/button_open"
app:layout_constraintBottom_toTopOf="@id/button_change_password"
android:layout_marginHorizontal="@dimen/main_activity_button_hor_margin"
android:text="@string/create_volume"
style="@style/button"/>
android:text="@string/create_volume"/>
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button_change_password"
@ -49,8 +48,7 @@
app:layout_constraintTop_toBottomOf="@id/button_create"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginHorizontal="@dimen/main_activity_button_hor_margin"
android:text="@string/change_volume_password"
style="@style/button"/>
android:text="@string/change_volume_password"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -29,7 +29,7 @@
android:text="@string/password"
android:textSize="@dimen/edit_text_label_text_size" />
<sushi.hardcore.droidfs.widgets.ColoredEditText
<EditText
android:id="@+id/edit_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -61,8 +61,7 @@
android:layout_height="@dimen/action_activity_button_height"
android:layout_marginHorizontal="@dimen/action_activity_button_horizontal_margin"
android:layout_marginBottom="@dimen/action_activity_button_margin_bottom"
android:text="@string/open"
style="@style/button"/>
android:text="@string/open"/>
</LinearLayout>

View File

@ -8,7 +8,6 @@
<FrameLayout
android:id="@+id/settings"
android:background="@color/backgroundColor"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/toolbar"/>

View File

@ -4,7 +4,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<sushi.hardcore.droidfs.widgets.ColoredImageView
<ImageView
android:id="@+id/icon"
android:layout_width="50dp"
android:layout_height="50dp"

View File

@ -14,7 +14,7 @@
android:ellipsize="start"
android:textSize="17sp"/>
<sushi.hardcore.droidfs.widgets.ColoredImageView
<ImageView
android:id="@+id/delete_imageview"
android:layout_width="30dp"
android:layout_height="30dp"

View File

@ -3,14 +3,14 @@
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<sushi.hardcore.droidfs.widgets.ColoredCheckBox
<CheckBox
android:id="@+id/checkbox_remember_path"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/remember_volume_path"/>
<sushi.hardcore.droidfs.widgets.ColoredCheckBox
<CheckBox
android:id="@+id/checkbox_save_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@ -4,7 +4,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<sushi.hardcore.droidfs.widgets.ColoredEditText
<EditText
android:id="@+id/dialog_edit_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -12,6 +12,6 @@
android:layout_marginHorizontal="30dp"
android:imeOptions="actionDone">
<requestFocus/>
</sushi.hardcore.droidfs.widgets.ColoredEditText>
</EditText>
</LinearLayout>

View File

@ -3,7 +3,7 @@
android:layout_width="match_parent"
android:layout_height="25dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/infoBarBackgroundColor"
android:background="?attr/infoBarBackgroundColor"
android:gravity="center_vertical">
<TextView

View File

@ -1,43 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:minWidth="300dp"
android:minHeight="150dp"
android:padding="20dp"
android:gravity="center">
<TextView
android:id="@+id/text_volume"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAlignment="center"
android:layout_marginBottom="20dp"
android:textSize="20dp"/>
<ImageView
android:id="@+id/image_fingerprint"
android:layout_width="60dp"
android:layout_height="60dp"
android:tint="@color/fingerprint_wait"
android:src="@drawable/icon_fingerprint"/>
<TextView
android:id="@+id/text_action_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAlignment="center"
android:layout_marginTop="10dp"
android:textSize="18dp"/>
<TextView
android:id="@+id/text_instruction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:textAlignment="center"
android:textSize="14dp"
android:text="@string/fingerprint_instruction"/>
</LinearLayout>

View File

@ -4,7 +4,7 @@
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:background="@color/colorPrimaryDark"
android:background="@color/primary"
app:titleTextColor="@color/textColor"
android:elevation="4dp">

View File

@ -25,7 +25,7 @@
android:text="@string/volume_path"
android:textSize="@dimen/edit_text_label_text_size" />
<sushi.hardcore.droidfs.widgets.ColoredEditText
<EditText
android:id="@+id/edit_volume_path"
android:layout_width="0dp"
android:layout_weight="0.5"
@ -33,7 +33,7 @@
android:inputType="text"
android:maxLines="1"/>
<sushi.hardcore.droidfs.widgets.ColoredImageButton
<ImageButton
android:id="@+id/button_pick_directory"
android:layout_width="@dimen/image_button_size"
android:layout_height="@dimen/image_button_size"
@ -55,7 +55,7 @@
android:text="@string/volume_name"
android:textSize="@dimen/edit_text_label_text_size" />
<sushi.hardcore.droidfs.widgets.ColoredEditText
<EditText
android:id="@+id/edit_volume_name"
android:layout_width="0dp"
android:layout_weight="0.5"

View File

@ -35,8 +35,6 @@
<string name="open_volume_failed">Não foi possível abrir</string>
<string name="open_volume_failed_msg">Falha ao abrir o volume. Por favor, verifique sua senha.</string>
<string name="share_chooser">Compartilhar arquivo</string>
<string name="storage_unavailable">Armazenamento indisponível</string>
<string name="storage_unavailable_msg">DroidFS não vai funcionar sem acesso ao armazenamento.</string>
<string name="storage_perm_denied">Permissão de armazenamento negada</string>
<string name="storage_perm_denied_msg">DroidFS não vai funcionar sem permissão de acesso ao armazenamento.</string>
<string name="get_size_failed">Falha na recuperação do tamanho do arquivo.</string>
@ -107,15 +105,12 @@
<string name="manage_unsafe_features">Gerenciar opções perigosas</string>
<string name="manage_unsafe_features_summary">Alternar opções perigosas</string>
<string name="ui">IU</string>
<string name="preference_theme_color">Cor do tema</string>
<string name="preference_theme_color_summary">Definir uma cor personalizada do tema</string>
<string name="usf_home_warning_msg">DroidFS tenta ser o mais seguro possível. No entanto, a segurança muitas vezes resulta em falta de conforto. Por isso o DroidFS oferece opções adicionais que você pode alternar de acordo com as suas necessidades.\n\nAviso: estas opções podem ser PERIGOSAS. Não as utilize a menos que você saiba o que está fazendo. É altamente recomendável ler a documentação antes de ativá-las.</string>
<string name="see_unsafe_features">Ver opções perigosas</string>
<string name="open_as">Abrir como</string>
<string name="image">Imagem</string>
<string name="video">Vídeo</string>
<string name="audio">Áudio</string>
<string name="media_player_prepare_failed">Falha ao abrir o reprodutor de mídia.</string>
<string name="playing_failed">Falha ao reproduzir este arquivo: %s</string>
<string name="text">Texto</string>
<string name="save_failed">Falha ao salvar</string>
@ -150,8 +145,6 @@
<string name="file_overwrite_question">%s já existe, você quer substitui-lo ?</string>
<string name="dir_overwrite_question">%s já existe, você quer integrar ao conteúdo ?</string>
<string name="enter_new_name">Digite um novo nome</string>
<string name="reset_theme_color">Resetar a cor do tema</string>
<string name="reset_theme_color_summary">Resetar a cor do tema para padrão</string>
<string name="copy_menu_title">Copiar</string>
<string name="move_failed">Transferência do arquivo %s falhou.</string>
<string name="move_success">Transferência bem sucedida!</string>

View File

@ -35,8 +35,6 @@
<string name="open_volume_failed">Ошибка открытия</string>
<string name="open_volume_failed_msg">Невозможно открыть том. Проверьте пароль.</string>
<string name="share_chooser">Поделиться файлом</string>
<string name="storage_unavailable">Хранилище недоступно</string>
<string name="storage_unavailable_msg">DroidFS не может работать без доступа к хранилищу.</string>
<string name="storage_perm_denied">Доступ к хранилищу запрещён</string>
<string name="storage_perm_denied_msg">DroidFS не может работать без разрешения на доступ к хранилищу.</string>
<string name="get_size_failed">Невозможно получить размер файла.</string>
@ -106,15 +104,12 @@
<string name="manage_unsafe_features">Управление небезопасными функциями</string>
<string name="manage_unsafe_features_summary">Включить/отключить небезопасные функции</string>
<string name="ui">Интерфейс</string>
<string name="preference_theme_color">Цвет темы</string>
<string name="preference_theme_color_summary">Установить собственный цвет темы</string>
<string name="usf_home_warning_msg">DroidFS старается быть максимально безопасным, однако безопасность часто связана с появлением неудобств. Поэтому DroidFS предлагает дополнительные небезопасные функции, которые вы можете включить/отключить в соответствии со своими потребностями.\n\nПредупреждение: эти функции могут быть НЕБЕЗОПАСНЫМИ. Не используйте их, если не уверены в своих действиях. Настоятельно рекомендуется прочитать документацию перед их включением.</string>
<string name="see_unsafe_features">Посмотреть небезопасные функции</string>
<string name="open_as">Открыть как</string>
<string name="image">Изображение</string>
<string name="video">Видео</string>
<string name="audio">Аудио</string>
<string name="media_player_prepare_failed">Невозможно инициализировать медиапроигрыватель.</string>
<string name="playing_failed">Невозможно воспроизвести файл: %s</string>
<string name="text">Текст</string>
<string name="save_failed">Невозможно сохранить.</string>
@ -148,8 +143,6 @@
<string name="file_overwrite_question">%s уже существует, переписать его?</string>
<string name="dir_overwrite_question">%s уже существует, объединить содержимое?</string>
<string name="enter_new_name">Введите новое имя</string>
<string name="reset_theme_color">Сброс цвета темы</string>
<string name="reset_theme_color_summary">Сбросить цвет темы на значение по умолчанию</string>
<string name="copy_menu_title">Копировать</string>
<string name="move_failed">Ошибка при перемещении %s.</string>
<string name="move_success">Перемещение выполнено!</string>

View File

@ -14,6 +14,21 @@
<item>Date (desc)</item>
</string-array>
<string-array name="themes_entries">
<item>Dark Green</item>
<item>Black Green</item>
<item>Dark Red</item>
<item>Black Red</item>
<item>Dark Blue</item>
<item>Black Blue</item>
<item>Dark Yellow</item>
<item>Black Yellow</item>
<item>Dark Orange</item>
<item>Black Orange</item>
<item>Dark Purple</item>
<item>Black Purple</item>
</string-array>
<!-- don't translate the following otherwise the app will crash -->
<string-array name="sort_orders_values">
<item>name</item>
@ -23,4 +38,19 @@
<item>size_desc</item>
<item>date_desc</item>
</string-array>
<string-array name="themes_values">
<item>dark_green</item>
<item>black_green</item>
<item>dark_red</item>
<item>black_red</item>
<item>dark_blue</item>
<item>black_blue</item>
<item>dark_yellow</item>
<item>black_yellow</item>
<item>dark_orange</item>
<item>black_orange</item>
<item>dark_purple</item>
<item>black_purple</item>
</string-array>
</resources>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="buttonBackgroundColor" format="color"/>
<attr name="infoBarBackgroundColor" format="color"/>
</resources>

View File

@ -1,18 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#262626</color>
<color name="colorPrimaryDark">#262626</color>
<color name="colorAccent">#6CC341</color>
<color name="cyanea_primary_reference">@color/colorPrimaryDark</color>
<color name="cyanea_primary_dark_reference">@color/colorPrimaryDark</color>
<color name="themeColor">@color/colorAccent</color>
<color name="backgroundColor">#333333</color>
<color name="fullScreenBackgroundColor">#000000</color>
<color name="textColor">#FFFFFF</color>
<color name="buttonBackgroundColor">#5B5A5C</color>
<color name="item_selected">#66666666</color>
<color name="infoBarBackgroundColor">#111111</color>
<color name="fingerprint_wait">#FFFFFF</color>
<color name="fingerprint_success">#6CC341</color>
<color name="fingerprint_failed">#ff0000</color>
<color name="primary">#262626</color>
<color name="secondary">#6CC341</color>
<color name="black">#000000</color>
<color name="white">#FFFFFF</color>
<color name="red">#ff0000</color>
<color name="blue">#00B8D4</color>
<color name="yellow">#FFD600</color>
<color name="orange">#FF6D00</color>
<color name="purple">#AA00FF</color>
<color name="menuIconTint">@color/white</color>
<color name="fullScreenBackgroundColor">@color/black</color>
<color name="textColor">@color/white</color>
<color name="itemSelected">#66666666</color>
</resources>

View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="DarkGreenDialog" parent="Theme.AppCompat.DayNight.Dialog.Alert">
<item name="colorAccent">@color/secondary</item>
<item name="android:background">#333333</item>
</style>
<style name="DarkRedDialog" parent="DarkGreenDialog">
<item name="colorAccent">@color/red</item>
</style>
<style name="DarkBlueDialog" parent="DarkGreenDialog">
<item name="colorAccent">@color/blue</item>
</style>
<style name="DarkYellowDialog" parent="DarkGreenDialog">
<item name="colorAccent">@color/yellow</item>
</style>
<style name="DarkOrangeDialog" parent="DarkGreenDialog">
<item name="colorAccent">@color/orange</item>
</style>
<style name="DarkPurpleDialog" parent="DarkGreenDialog">
<item name="colorAccent">@color/purple</item>
</style>
<style name="BlackGreenDialog" parent="Theme.AppCompat.DayNight.Dialog.Alert">
<item name="colorAccent">@color/secondary</item>
<item name="android:background">#191919</item>
</style>
<style name="BlackRedDialog" parent="BlackGreenDialog">
<item name="colorAccent">@color/red</item>
</style>
<style name="BlackBlueDialog" parent="BlackGreenDialog">
<item name="colorAccent">@color/blue</item>
</style>
<style name="BlackYellowDialog" parent="BlackGreenDialog">
<item name="colorAccent">@color/yellow</item>
</style>
<style name="BlackOrangeDialog" parent="BlackGreenDialog">
<item name="colorAccent">@color/orange</item>
</style>
<style name="BlackPurpleDialog" parent="BlackGreenDialog">
<item name="colorAccent">@color/purple</item>
</style>
</resources>

View File

@ -37,8 +37,6 @@
<string name="open_volume_failed">Open failed</string>
<string name="open_volume_failed_msg">Failed to open the volume. Please check your password.</string>
<string name="share_chooser">Share File</string>
<string name="storage_unavailable">Storage unavailable</string>
<string name="storage_unavailable_msg">DroidFS can\'t work without storage access.</string>
<string name="storage_perm_denied">Storage permission denied</string>
<string name="storage_perm_denied_msg">DroidFS can\'t work without storage permissions.</string>
<string name="get_size_failed">Failed to retrieve file size.</string>
@ -109,15 +107,12 @@
<string name="manage_unsafe_features">Manage unsafe features</string>
<string name="manage_unsafe_features_summary">Enable/Disable unsafe features</string>
<string name="ui">UI</string>
<string name="preference_theme_color">Theme color</string>
<string name="preference_theme_color_summary">Set a custom theme color</string>
<string name="usf_home_warning_msg">DroidFS try to be as secure as possible. However, security often involves lack of comfort. This is why DroidFS offer you additional unsafe features that you can enable/disable according to your needs.\n\nWarning: this features can be UNSAFE. Do not use them unless you know exactly what you are doing. It is highly recommended to read the documentation before enabling them.</string>
<string name="see_unsafe_features">See unsafe features</string>
<string name="open_as">Open as</string>
<string name="image">Image</string>
<string name="video">Video</string>
<string name="audio">Audio</string>
<string name="media_player_prepare_failed">Failed to initialize the media player.</string>
<string name="playing_failed">Failed to play this file: %s</string>
<string name="text">Text</string>
<string name="save_failed">Save failed</string>
@ -153,8 +148,6 @@
<string name="file_overwrite_question">%s already exists, do you want to overwrite it ?</string>
<string name="dir_overwrite_question">%s already exists, do you want to merge its content ?</string>
<string name="enter_new_name">Enter new name</string>
<string name="reset_theme_color">Reset theme color</string>
<string name="reset_theme_color_summary">Reset theme color to the default one</string>
<string name="copy_menu_title">Copy</string>
<string name="move_failed">Move of %s failed.</string>
<string name="move_success">Move successful !</string>
@ -209,4 +202,6 @@
<string name="auto">Auto</string>
<string name="xchacha_warning">XChaCha20-Poly1305 is only supported since gocryptfs v2.2.0. Older versions won\'t be able to open a volume based on this cipher.</string>
<string name="encryption_cipher_label">Encryption cipher:</string>
<string name="theme">Theme</string>
<string name="theme_summary">Customize app theme</string>
</resources>

View File

@ -1,19 +1,62 @@
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.Cyanea.Dark.NoActionBar">
<style name="BaseTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="android:textColor">@color/textColor</item>
<!--<item name="actionOverflowMenuStyle">@style/menu_overflow</item>-->
<item name="colorAccent">@color/secondary</item>
<item name="android:statusBarColor">@color/primary</item>
<item name="infoBarBackgroundColor">#111111</item>
<item name="buttonBackgroundColor">#5B5A5C</item>
<item name="buttonStyle">@style/DarkButton</item>
</style>
<style name="button" parent="Widget.AppCompat.Button">
<style name="DarkRed" parent="BaseTheme">
<item name="colorAccent">@color/red</item>
</style>
<style name="DarkBlue" parent="BaseTheme">
<item name="colorAccent">@color/blue</item>
</style>
<style name="DarkYellow" parent="BaseTheme">
<item name="colorAccent">@color/yellow</item>
</style>
<style name="DarkOrange" parent="BaseTheme">
<item name="colorAccent">@color/orange</item>
</style>
<style name="DarkPurple" parent="BaseTheme">
<item name="colorAccent">@color/purple</item>
</style>
<style name="BlackGreen" parent="BaseTheme">
<item name="android:windowBackground">@color/black</item>
<item name="infoBarBackgroundColor">@color/black</item>
<item name="buttonBackgroundColor">#3B3A3C</item>
<item name="buttonStyle">@style/BlackButton</item>
</style>
<style name="BlackRed" parent="BlackGreen">
<item name="colorAccent">@color/red</item>
</style>
<style name="BlackBlue" parent="BlackGreen">
<item name="colorAccent">@color/blue</item>
</style>
<style name="BlackYellow" parent="BlackGreen">
<item name="colorAccent">@color/yellow</item>
</style>
<style name="BlackOrange" parent="BlackGreen">
<item name="colorAccent">@color/orange</item>
</style>
<style name="BlackPurple" parent="BlackGreen">
<item name="colorAccent">@color/purple</item>
</style>
<style name="DarkButton" parent="Widget.AppCompat.Button">
<item name="android:background">@drawable/button_background</item>
</style>
<style name="BlackButton" parent="Widget.AppCompat.Button">
<item name="android:background">@drawable/button_background</item>
</style>
<style name="listViewNoDivider">
<item name="android:divider">#000000</item>
<item name="android:dividerHeight">0dp</item>
</style>
<!--<style name="menu_overflow" parent="Widget.AppCompat.PopupMenu.Overflow">
<item name="android:popupBackground">@drawable/popupmenu_overflow</item>
</style>-->
<style name="infoBarTextView">
<item name="android:ellipsize">start</item>
<item name="android:singleLine">true</item>

View File

@ -3,19 +3,15 @@
<PreferenceCategory android:title="@string/ui">
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
android:defaultValue="@color/themeColor"
android:key="themeColor"
android:title="@string/preference_theme_color"
android:summary="@string/preference_theme_color_summary"
<ListPreference
android:defaultValue="dark_green"
android:entries="@array/themes_entries"
android:entryValues="@array/themes_values"
android:key="theme"
android:title="@string/theme"
android:summary="@string/theme_summary"
android:icon="@drawable/icon_palette"/>
<sushi.hardcore.droidfs.widgets.SimpleActionPreference
android:title="@string/reset_theme_color"
android:summary="@string/reset_theme_color_summary"
android:key="resetThemeColor"
android:icon="@drawable/icon_restore"/>
<SwitchPreferenceCompat
android:title="@string/auto_fit_title"
android:summary="@string/auto_fit_summary"
@ -27,7 +23,7 @@
<PreferenceCategory android:title="@string/explorer">
<sushi.hardcore.droidfs.widgets.ColoredListPreference
<ListPreference
app:defaultValue="name"
app:entries="@array/sort_orders_entries"
app:entryValues="@array/sort_orders_values"