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.sqlite:sqlite-ktx:2.1.0"
implementation "androidx.preference:preference-ktx:1.1.1" implementation "androidx.preference:preference-ktx:1.1.1"
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" 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 "com.github.bumptech.glide:glide:4.12.0"
implementation "androidx.biometric:biometric:1.1.0" implementation "androidx.biometric:biometric:1.1.0"

View File

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

View File

@ -3,36 +3,51 @@ package sushi.hardcore.droidfs
import android.content.SharedPreferences import android.content.SharedPreferences
import android.os.Bundle import android.os.Bundle
import android.view.WindowManager import android.view.WindowManager
import androidx.core.content.ContextCompat import androidx.appcompat.app.AppCompatActivity
import androidx.preference.PreferenceManager 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 lateinit var sharedPrefs: SharedPreferences
protected var isRecreating = false protected lateinit var themeValue: String
protected var shouldCheckTheme = true
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
val themeColor = ThemeColor.getThemeColor(this) sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this)
if (cyanea.accent != themeColor){ if (shouldCheckTheme) {
changeThemeColor(themeColor) 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) super.onCreate(savedInstanceState)
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this)
if (!sharedPrefs.getBoolean("usf_screenshot", false)){ if (!sharedPrefs.getBoolean("usf_screenshot", false)){
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE) window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
} }
} }
fun changeThemeColor(themeColor: Int? = null){
val accentColor = themeColor ?: ThemeColor.getThemeColor(this) override fun onStart() {
val backgroundColor = ContextCompat.getColor(this, R.color.backgroundColor) super.onStart()
isRecreating = true val newThemeValue = sharedPrefs.getString("theme", "dark_green")!!
cyanea.edit{ onThemeChanged(newThemeValue)
accent(accentColor) }
//accentDark(themeColor)
//accentLight(themeColor) fun onThemeChanged(newThemeValue: String) {
background(backgroundColor) if (newThemeValue != themeValue) {
//backgroundDark(backgroundColor) themeValue = newThemeValue
//backgroundLight(backgroundColor) shouldCheckTheme = false
}.recreate(this) recreate()
}
} }
} }

View File

@ -36,7 +36,7 @@ import sushi.hardcore.droidfs.databinding.ActivityCameraBinding
import sushi.hardcore.droidfs.util.PathUtils import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.video_recording.SeekableWriter import sushi.hardcore.droidfs.video_recording.SeekableWriter
import sushi.hardcore.droidfs.video_recording.VideoCapture import sushi.hardcore.droidfs.video_recording.VideoCapture
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import java.io.* import java.io.*
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
@ -126,7 +126,7 @@ class CameraActivity : BaseActivity(), SensorOrientationListener.Listener {
} else { } else {
1 1
} }
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.camera_optimization) .setTitle(R.string.camera_optimization)
.setSingleChoiceItems(DialogSingleChoiceAdapter(this, arrayOf(R.string.maximize_quality, R.string.minimize_latency).map { getString(it) }), currentIndex) { dialog, which -> .setSingleChoiceItems(DialogSingleChoiceAdapter(this, arrayOf(R.string.maximize_quality, R.string.minimize_latency).map { getString(it) }), currentIndex) { dialog, which ->
val resId: Int val resId: Int
@ -149,7 +149,7 @@ class CameraActivity : BaseActivity(), SensorOrientationListener.Listener {
} }
binding.imageRatio.setOnClickListener { binding.imageRatio.setOnClickListener {
resolutions?.let { resolutions?.let {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.choose_resolution) .setTitle(R.string.choose_resolution)
.setSingleChoiceItems(DialogSingleChoiceAdapter(this, it.map { size -> size.toString() }), currentResolutionIndex) { dialog, which -> .setSingleChoiceItems(DialogSingleChoiceAdapter(this, it.map { size -> size.toString() }), currentResolutionIndex) { dialog, which ->
setupCamera(resolutions!![which]) setupCamera(resolutions!![which])
@ -164,7 +164,7 @@ class CameraActivity : BaseActivity(), SensorOrientationListener.Listener {
val dialogEditTextView = layoutInflater.inflate(R.layout.dialog_edit_text, null) val dialogEditTextView = layoutInflater.inflate(R.layout.dialog_edit_text, null)
val dialogEditText = dialogEditTextView.findViewById<EditText>(R.id.dialog_edit_text) val dialogEditText = dialogEditTextView.findViewById<EditText>(R.id.dialog_edit_text)
dialogEditText.inputType = InputType.TYPE_CLASS_NUMBER dialogEditText.inputType = InputType.TYPE_CLASS_NUMBER
val dialog = ColoredAlertDialogBuilder(this) val dialog = CustomAlertDialogBuilder(this, themeValue)
.setView(dialogEditTextView) .setView(dialogEditTextView)
.setTitle(getString(R.string.enter_timer_duration)) .setTitle(getString(R.string.enter_timer_duration))
.setPositiveButton(R.string.ok) { _, _ -> .setPositiveButton(R.string.ok) { _, _ ->
@ -266,7 +266,7 @@ class CameraActivity : BaseActivity(), SensorOrientationListener.Listener {
permissionsGranted = true permissionsGranted = true
setupCamera() setupCamera()
} else { } else {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.camera_perm_needed) .setMessage(R.string.camera_perm_needed)
.setCancelable(false) .setCancelable(false)
@ -348,7 +348,7 @@ class CameraActivity : BaseActivity(), SensorOrientationListener.Listener {
if (gocryptfsVolume.importFile(ByteArrayInputStream(outputBuff.toByteArray()), outputPath)){ if (gocryptfsVolume.importFile(ByteArrayInputStream(outputBuff.toByteArray()), outputPath)){
Toast.makeText(applicationContext, getString(R.string.picture_save_success, outputPath), Toast.LENGTH_SHORT).show() Toast.makeText(applicationContext, getString(R.string.picture_save_success, outputPath), Toast.LENGTH_SHORT).show()
} else { } else {
ColoredAlertDialogBuilder(this@CameraActivity) CustomAlertDialogBuilder(this@CameraActivity, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.picture_save_failed) .setMessage(R.string.picture_save_failed)
.setCancelable(false) .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.PathUtils
import sushi.hardcore.droidfs.util.WidgetUtil import sushi.hardcore.droidfs.util.WidgetUtil
import sushi.hardcore.droidfs.util.Wiper import sushi.hardcore.droidfs.util.Wiper
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import java.io.File import java.io.File
import java.util.* import java.util.*
@ -26,7 +26,7 @@ class ChangePasswordActivity : VolumeActionActivity() {
setContentView(binding.root) setContentView(binding.root)
setupLayout() setupLayout()
setupFingerprintStuff() setupFingerprintStuff()
savedVolumesAdapter = SavedVolumesAdapter(this, volumeDatabase) savedVolumesAdapter = SavedVolumesAdapter(this, themeValue, volumeDatabase)
if (savedVolumesAdapter.count > 0){ if (savedVolumesAdapter.count > 0){
binding.savedPathListview.adapter = savedVolumesAdapter binding.savedPathListview.adapter = savedVolumesAdapter
binding.savedPathListview.onItemClickListener = OnItemClickListener { _, _, position, _ -> binding.savedPathListview.onItemClickListener = OnItemClickListener { _, _, position, _ ->
@ -87,7 +87,7 @@ class ChangePasswordActivity : VolumeActionActivity() {
loadVolumePath { loadVolumePath {
val volumeFile = File(currentVolumePath) val volumeFile = File(currentVolumePath)
if (!GocryptfsVolume.isGocryptfsVolume(volumeFile)){ if (!GocryptfsVolume.isGocryptfsVolume(volumeFile)){
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.error_not_a_volume) .setMessage(R.string.error_not_a_volume)
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -106,7 +106,7 @@ class ChangePasswordActivity : VolumeActionActivity() {
if (!newPassword.contentEquals(newPasswordConfirm)) { if (!newPassword.contentEquals(newPasswordConfirm)) {
Toast.makeText(this, R.string.passwords_mismatch, Toast.LENGTH_SHORT).show() Toast.makeText(this, R.string.passwords_mismatch, Toast.LENGTH_SHORT).show()
} else { } 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) { override fun doTask(activity: AppCompatActivity) {
val oldPassword = binding.editOldPassword.text.toString().toCharArray() val oldPassword = binding.editOldPassword.text.toString().toCharArray()
var returnedHash: ByteArray? = null var returnedHash: ByteArray? = null
@ -159,7 +159,7 @@ class ChangePasswordActivity : VolumeActionActivity() {
} }
} else { } else {
stopTask { stopTask {
ColoredAlertDialogBuilder(activity) CustomAlertDialogBuilder(activity, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.change_password_failed) .setMessage(R.string.change_password_failed)
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -178,7 +178,7 @@ class ChangePasswordActivity : VolumeActionActivity() {
} }
private fun onPasswordChanged(){ private fun onPasswordChanged(){
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.success_change_password) .setTitle(R.string.success_change_password)
.setMessage(R.string.success_change_password_msg) .setMessage(R.string.success_change_password_msg)
.setCancelable(false) .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.databinding.ActivityCreateBinding
import sushi.hardcore.droidfs.explorers.ExplorerActivity import sushi.hardcore.droidfs.explorers.ExplorerActivity
import sushi.hardcore.droidfs.util.Wiper import sushi.hardcore.droidfs.util.Wiper
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import java.io.File import java.io.File
import java.util.* import java.util.*
@ -38,7 +38,7 @@ class CreateActivity : VolumeActionActivity() {
binding.spinnerXchacha.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { binding.spinnerXchacha.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
if (position == 1) { if (position == 1) {
ColoredAlertDialogBuilder(this@CreateActivity) CustomAlertDialogBuilder(this@CreateActivity, themeValue)
.setTitle(R.string.warning) .setTitle(R.string.warning)
.setMessage(R.string.xchacha_warning) .setMessage(R.string.xchacha_warning)
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -55,7 +55,7 @@ class CreateActivity : VolumeActionActivity() {
override fun onClickSwitchHiddenVolume() { override fun onClickSwitchHiddenVolume() {
super.onClickSwitchHiddenVolume() super.onClickSwitchHiddenVolume()
if (switchHiddenVolume.isChecked){ if (switchHiddenVolume.isChecked){
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.warning) .setTitle(R.string.warning)
.setMessage(R.string.hidden_volume_warning) .setMessage(R.string.hidden_volume_warning)
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -95,7 +95,7 @@ class CreateActivity : VolumeActionActivity() {
} }
} }
if (goodDirectory) { if (goodDirectory) {
object: LoadingTask(this, R.string.loading_msg_create){ object: LoadingTask(this, themeValue, R.string.loading_msg_create) {
override fun doTask(activity: AppCompatActivity) { override fun doTask(activity: AppCompatActivity) {
val xchacha = when (binding.spinnerXchacha.selectedItemPosition) { val xchacha = when (binding.spinnerXchacha.selectedItemPosition) {
0 -> 0 0 -> 0
@ -129,7 +129,7 @@ class CreateActivity : VolumeActionActivity() {
} }
} else { } else {
stopTask { stopTask {
ColoredAlertDialogBuilder(activity) CustomAlertDialogBuilder(activity, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.create_volume_failed) .setMessage(R.string.create_volume_failed)
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -148,7 +148,7 @@ class CreateActivity : VolumeActionActivity() {
} }
private fun startExplorer(){ private fun startExplorer(){
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.success_volume_create) .setTitle(R.string.success_volume_create)
.setMessage(R.string.success_volume_create_msg) .setMessage(R.string.success_volume_create_msg)
.setCancelable(false) .setCancelable(false)

View File

@ -4,11 +4,11 @@ import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity 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 dialogLoadingView = activity.layoutInflater.inflate(R.layout.dialog_loading, null)
private val dialogLoading: AlertDialog = ColoredAlertDialogBuilder(activity) private val dialogLoading: AlertDialog = CustomAlertDialogBuilder(activity, themeValue)
.setView(dialogLoadingView) .setView(dialogLoadingView)
.setTitle(R.string.loading) .setTitle(R.string.loading)
.setCancelable(false) .setCancelable(false)

View File

@ -5,7 +5,7 @@ import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import sushi.hardcore.droidfs.databinding.ActivityMainBinding import sushi.hardcore.droidfs.databinding.ActivityMainBinding
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
class MainActivity : BaseActivity() { class MainActivity : BaseActivity() {
@ -14,21 +14,19 @@ class MainActivity : BaseActivity() {
val binding = ActivityMainBinding.inflate(layoutInflater) val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
setSupportActionBar(binding.toolbar.toolbar) setSupportActionBar(binding.toolbar.toolbar)
if (!isRecreating) { if (sharedPrefs.getBoolean("applicationFirstOpening", true)) {
if (sharedPrefs.getBoolean("applicationFirstOpening", true)){ CustomAlertDialogBuilder(this, themeValue)
ColoredAlertDialogBuilder(this) .setTitle(R.string.warning)
.setTitle(R.string.warning) .setMessage(R.string.usf_home_warning_msg)
.setMessage(R.string.usf_home_warning_msg) .setCancelable(false)
.setCancelable(false) .setPositiveButton(R.string.see_unsafe_features) { _, _ ->
.setPositiveButton(R.string.see_unsafe_features){ _, _ -> val intent = Intent(this, SettingsActivity::class.java)
val intent = Intent(this, SettingsActivity::class.java) intent.putExtra("screen", "UnsafeFeaturesSettingsFragment")
intent.putExtra("screen", "UnsafeFeaturesSettingsFragment") startActivity(intent)
startActivity(intent) }
} .setNegativeButton(R.string.ok, null)
.setNegativeButton(R.string.ok, null) .setOnDismissListener { sharedPrefs.edit().putBoolean("applicationFirstOpening", false).apply() }
.setOnDismissListener { sharedPrefs.edit().putBoolean("applicationFirstOpening", false).apply() } .show()
.show()
}
} }
binding.buttonOpen.setOnClickListener { binding.buttonOpen.setOnClickListener {
startActivity(OpenActivity::class.java) 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.PathUtils
import sushi.hardcore.droidfs.util.WidgetUtil import sushi.hardcore.droidfs.util.WidgetUtil
import sushi.hardcore.droidfs.util.Wiper import sushi.hardcore.droidfs.util.Wiper
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import java.io.File import java.io.File
import java.util.* import java.util.*
@ -35,7 +35,7 @@ class OpenActivity : VolumeActionActivity() {
setContentView(binding.root) setContentView(binding.root)
setupLayout() setupLayout()
setupFingerprintStuff() setupFingerprintStuff()
savedVolumesAdapter = SavedVolumesAdapter(this, volumeDatabase) savedVolumesAdapter = SavedVolumesAdapter(this, themeValue, volumeDatabase)
if (savedVolumesAdapter.count > 0){ if (savedVolumesAdapter.count > 0){
binding.savedPathListview.adapter = savedVolumesAdapter binding.savedPathListview.adapter = savedVolumesAdapter
binding.savedPathListview.onItemClickListener = OnItemClickListener { _, _, position, _ -> binding.savedPathListview.onItemClickListener = OnItemClickListener { _, _, position, _ ->
@ -116,20 +116,20 @@ class OpenActivity : VolumeActionActivity() {
loadVolumePath { loadVolumePath {
val volumeFile = File(currentVolumePath) val volumeFile = File(currentVolumePath)
if (!GocryptfsVolume.isGocryptfsVolume(volumeFile)){ if (!GocryptfsVolume.isGocryptfsVolume(volumeFile)){
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.error_not_a_volume) .setMessage(R.string.error_not_a_volume)
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
.show() .show()
} else if (!volumeFile.canWrite()) { } else if (!volumeFile.canWrite()) {
if ((intent.action == Intent.ACTION_SEND || intent.action == Intent.ACTION_SEND_MULTIPLE) && intent.extras != null) { //import via android share menu 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) .setTitle(R.string.error)
.setMessage(R.string.open_cant_write_error_msg) .setMessage(R.string.open_cant_write_error_msg)
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
.show() .show()
} else { } else {
val dialog = ColoredAlertDialogBuilder(this) val dialog = CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.warning) .setTitle(R.string.warning)
.setCancelable(false) .setCancelable(false)
.setPositiveButton(R.string.ok) { _, _ -> openVolume() } .setPositiveButton(R.string.ok) { _, _ -> openVolume() }
@ -152,7 +152,7 @@ class OpenActivity : VolumeActionActivity() {
} }
private fun openVolume(){ 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) { override fun doTask(activity: AppCompatActivity) {
val password = binding.editPassword.text.toString().toCharArray() val password = binding.editPassword.text.toString().toCharArray()
var returnedHash: ByteArray? = null var returnedHash: ByteArray? = null
@ -179,7 +179,7 @@ class OpenActivity : VolumeActionActivity() {
} }
} else { } else {
stopTask { stopTask {
ColoredAlertDialogBuilder(activity) CustomAlertDialogBuilder(activity, themeValue)
.setTitle(R.string.open_volume_failed) .setTitle(R.string.open_volume_failed)
.setMessage(R.string.open_volume_failed_msg) .setMessage(R.string.open_volume_failed_msg)
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -192,14 +192,14 @@ class OpenActivity : VolumeActionActivity() {
} }
private fun openUsingPasswordHash(passwordHash: ByteArray){ 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) { override fun doTask(activity: AppCompatActivity) {
sessionID = GocryptfsVolume.init(currentVolumePath, null, passwordHash, null) sessionID = GocryptfsVolume.init(currentVolumePath, null, passwordHash, null)
if (sessionID != -1){ if (sessionID != -1){
stopTask { startExplorer() } stopTask { startExplorer() }
} else { } else {
stopTask { stopTask {
ColoredAlertDialogBuilder(activity) CustomAlertDialogBuilder(activity, themeValue)
.setTitle(R.string.open_volume_failed) .setTitle(R.string.open_volume_failed)
.setMessage(R.string.open_failed_hash_msg) .setMessage(R.string.open_failed_hash_msg)
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)

View File

@ -2,13 +2,9 @@ package sushi.hardcore.droidfs
import android.os.Bundle import android.os.Bundle
import android.view.MenuItem import android.view.MenuItem
import androidx.core.content.ContextCompat import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import com.jaredrummler.android.colorpicker.ColorPreferenceCompat
import sushi.hardcore.droidfs.databinding.ActivitySettingsBinding import sushi.hardcore.droidfs.databinding.ActivitySettingsBinding
import sushi.hardcore.droidfs.widgets.SimpleActionPreference
import sushi.hardcore.droidfs.widgets.ThemeColor
class SettingsActivity : BaseActivity() { class SettingsActivity : BaseActivity() {
@ -43,26 +39,9 @@ class SettingsActivity : BaseActivity() {
class MainSettingsFragment : PreferenceFragmentCompat() { class MainSettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.root_preferences, rootKey) setPreferencesFromResource(R.xml.root_preferences, rootKey)
ThemeColor.tintPreferenceIcons(preferenceScreen, ThemeColor.getThemeColor(requireContext())) findPreference<ListPreference>("theme")?.setOnPreferenceChangeListener { _, newValue ->
var originalThemeColor: Int? = null (activity as BaseActivity).onThemeChanged(newValue as String)
context?.let { true
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()
}
}
} }
} }
} }
@ -70,7 +49,6 @@ class SettingsActivity : BaseActivity() {
class UnsafeFeaturesSettingsFragment : PreferenceFragmentCompat() { class UnsafeFeaturesSettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.unsafe_features_preferences, rootKey) 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 androidx.core.content.ContextCompat
import sushi.hardcore.droidfs.util.PathUtils import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.util.WidgetUtil import sushi.hardcore.droidfs.util.WidgetUtil
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import sushi.hardcore.droidfs.widgets.ColoredImageButton
import java.security.KeyStore import java.security.KeyStore
import javax.crypto.* import javax.crypto.*
import javax.crypto.spec.GCMParameterSpec import javax.crypto.spec.GCMParameterSpec
@ -68,7 +67,7 @@ abstract class VolumeActionActivity : BaseActivity() {
protected fun setupLayout() { protected fun setupLayout() {
setSupportActionBar(findViewById(R.id.toolbar)) setSupportActionBar(findViewById(R.id.toolbar))
supportActionBar?.setDisplayHomeAsUpEnabled(true) 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 (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) + if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) +
ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
@ -123,7 +122,7 @@ abstract class VolumeActionActivity : BaseActivity() {
if (path != null) { if (path != null) {
editVolumePath.setText(path) editVolumePath.setText(path)
} else { } else {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.path_from_uri_null_error_msg) .setMessage(R.string.path_from_uri_null_error_msg)
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -136,7 +135,7 @@ abstract class VolumeActionActivity : BaseActivity() {
onPickingDirectory() onPickingDirectory()
pickDirectory.launch(null) pickDirectory.launch(null)
} catch (e: ActivityNotFoundException) { } catch (e: ActivityNotFoundException) {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.open_tree_failed) .setMessage(R.string.open_tree_failed)
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -149,7 +148,7 @@ abstract class VolumeActionActivity : BaseActivity() {
when (requestCode) { when (requestCode) {
STORAGE_PERMISSIONS_REQUEST -> if (grantResults.size == 2) { STORAGE_PERMISSIONS_REQUEST -> if (grantResults.size == 2) {
if (grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED) { if (grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED) {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.storage_perm_denied) .setTitle(R.string.storage_perm_denied)
.setMessage(R.string.storage_perm_denied_msg) .setMessage(R.string.storage_perm_denied_msg)
.setCancelable(false) .setCancelable(false)
@ -209,7 +208,7 @@ abstract class VolumeActionActivity : BaseActivity() {
val plainText = cipherObject.doFinal(dataToProcess) val plainText = cipherObject.doFinal(dataToProcess)
onPasswordDecrypted(plainText) onPasswordDecrypted(plainText)
} catch (e: AEADBadTagException){ } catch (e: AEADBadTagException){
ColoredAlertDialogBuilder(activityContext) CustomAlertDialogBuilder(activityContext, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.MAC_verification_failed) .setMessage(R.string.MAC_verification_failed)
.setPositiveButton(R.string.reset_hash_storage) { _, _ -> .setPositiveButton(R.string.reset_hash_storage) { _, _ ->
@ -221,7 +220,7 @@ abstract class VolumeActionActivity : BaseActivity() {
} }
} }
} catch (e: IllegalBlockSizeException){ } catch (e: IllegalBlockSizeException){
ColoredAlertDialogBuilder(activityContext) CustomAlertDialogBuilder(activityContext, themeValue)
.setTitle(R.string.illegal_block_size_exception) .setTitle(R.string.illegal_block_size_exception)
.setMessage(R.string.illegal_block_size_exception_msg) .setMessage(R.string.illegal_block_size_exception_msg)
.setPositiveButton(R.string.reset_hash_storage) { _, _ -> .setPositiveButton(R.string.reset_hash_storage) { _, _ ->
@ -292,7 +291,7 @@ abstract class VolumeActionActivity : BaseActivity() {
} }
private fun alertKeyPermanentlyInvalidatedException(){ private fun alertKeyPermanentlyInvalidatedException(){
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.key_permanently_invalidated_exception) .setTitle(R.string.key_permanently_invalidated_exception)
.setMessage(R.string.key_permanently_invalidated_exception_msg) .setMessage(R.string.key_permanently_invalidated_exception_msg)
.setPositiveButton(R.string.reset_hash_storage) { _, _ -> .setPositiveButton(R.string.reset_hash_storage) { _, _ ->
@ -381,7 +380,7 @@ abstract class VolumeActionActivity : BaseActivity() {
} }
fun errorDirectoryNotWritable(errorMsg: Int) { fun errorDirectoryNotWritable(errorMsg: Int) {
val dialog = ColoredAlertDialogBuilder(this) val dialog = CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
if (PathUtils.isPathOnExternalStorage(currentVolumePath, this)) { if (PathUtils.isPathOnExternalStorage(currentVolumePath, this)) {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -17,6 +17,7 @@ import android.widget.EditText
import android.widget.ListView import android.widget.ListView
import android.widget.TextView import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.documentfile.provider.DocumentFile import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider 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.TextEditor
import sushi.hardcore.droidfs.file_viewers.VideoPlayer import sushi.hardcore.droidfs.file_viewers.VideoPlayer
import sushi.hardcore.droidfs.util.PathUtils import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
open class BaseExplorerActivity : BaseActivity() { open class BaseExplorerActivity : BaseActivity() {
private lateinit var sortOrderEntries: Array<String> private lateinit var sortOrderEntries: Array<String>
@ -146,12 +147,12 @@ open class BaseExplorerActivity : BaseActivity() {
private fun openWithExternalApp(fullPath: String){ private fun openWithExternalApp(fullPath: String){
isStartingActivity = true isStartingActivity = true
ExternalProvider.open(this, gocryptfsVolume, fullPath) ExternalProvider.open(this, themeValue, gocryptfsVolume, fullPath)
} }
private fun showOpenAsDialog(path: String) { private fun showOpenAsDialog(path: String) {
val adapter = OpenAsDialogAdapter(this, usf_open) val adapter = OpenAsDialogAdapter(this, usf_open)
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setSingleChoiceItems(adapter, -1) { dialog, which -> .setSingleChoiceItems(adapter, -1) { dialog, which ->
when (adapter.getItem(which)) { when (adapter.getItem(which)) {
"image" -> startFileViewer(ImageViewer::class.java, path) "image" -> startFileViewer(ImageViewer::class.java, path)
@ -267,7 +268,7 @@ open class BaseExplorerActivity : BaseActivity() {
} }
private fun askCloseVolume() { private fun askCloseVolume() {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.warning) .setTitle(R.string.warning)
.setMessage(R.string.ask_close_volume) .setMessage(R.string.ask_close_volume)
.setPositiveButton(R.string.ok) { _, _ -> closeVolumeOnUserExit() } .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() Toast.makeText(this, R.string.error_filename_empty, Toast.LENGTH_SHORT).show()
} else { } else {
if (!gocryptfsVolume.mkdir(PathUtils.pathJoin(currentDirectoryPath, folderName))) { if (!gocryptfsVolume.mkdir(PathUtils.pathJoin(currentDirectoryPath, folderName))) {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.error_mkdir) .setMessage(R.string.error_mkdir)
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -308,7 +309,7 @@ open class BaseExplorerActivity : BaseActivity() {
protected fun openDialogCreateFolder() { protected fun openDialogCreateFolder() {
val dialogEditTextView = layoutInflater.inflate(R.layout.dialog_edit_text, null) val dialogEditTextView = layoutInflater.inflate(R.layout.dialog_edit_text, null)
val dialogEditText = dialogEditTextView.findViewById<EditText>(R.id.dialog_edit_text) val dialogEditText = dialogEditTextView.findViewById<EditText>(R.id.dialog_edit_text)
val dialog = ColoredAlertDialogBuilder(this) val dialog = CustomAlertDialogBuilder(this, themeValue)
.setView(dialogEditTextView) .setView(dialogEditTextView)
.setTitle(R.string.enter_folder_name) .setTitle(R.string.enter_folder_name)
.setPositiveButton(R.string.ok) { _, _ -> .setPositiveButton(R.string.ok) { _, _ ->
@ -346,7 +347,7 @@ open class BaseExplorerActivity : BaseActivity() {
} }
} }
if (!ready){ if (!ready){
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.warning) .setTitle(R.string.warning)
.setMessage(getString(if (items[i].explorerElement.isDirectory){R.string.dir_overwrite_question} else {R.string.file_overwrite_question}, testDstPath)) .setMessage(getString(if (items[i].explorerElement.isDirectory){R.string.dir_overwrite_question} else {R.string.file_overwrite_question}, testDstPath))
.setPositiveButton(R.string.yes) {_, _ -> .setPositiveButton(R.string.yes) {_, _ ->
@ -359,7 +360,7 @@ open class BaseExplorerActivity : BaseActivity() {
val dialogEditText = dialogEditTextView.findViewById<EditText>(R.id.dialog_edit_text) val dialogEditText = dialogEditTextView.findViewById<EditText>(R.id.dialog_edit_text)
dialogEditText.setText(items[i].explorerElement.name) dialogEditText.setText(items[i].explorerElement.name)
dialogEditText.selectAll() dialogEditText.selectAll()
val dialog = ColoredAlertDialogBuilder(this) val dialog = CustomAlertDialogBuilder(this, themeValue)
.setView(dialogEditTextView) .setView(dialogEditTextView)
.setTitle(R.string.enter_new_name) .setTitle(R.string.enter_new_name)
.setPositiveButton(R.string.ok) { _, _ -> .setPositiveButton(R.string.ok) { _, _ ->
@ -403,7 +404,7 @@ open class BaseExplorerActivity : BaseActivity() {
for (uri in uris) { for (uri in uris) {
val fileName = PathUtils.getFilenameFromURI(this, uri) val fileName = PathUtils.getFilenameFromURI(this, uri)
if (fileName == null) { if (fileName == null) {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(getString(R.string.error_retrieving_filename, uri)) .setMessage(getString(R.string.error_retrieving_filename, uri))
.setPositiveButton(R.string.ok, null) .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() Toast.makeText(this, R.string.error_filename_empty, Toast.LENGTH_SHORT).show()
} else { } else {
if (!gocryptfsVolume.rename(PathUtils.pathJoin(currentDirectoryPath, old_name), PathUtils.pathJoin(currentDirectoryPath, new_name))) { if (!gocryptfsVolume.rename(PathUtils.pathJoin(currentDirectoryPath, old_name), PathUtils.pathJoin(currentDirectoryPath, new_name))) {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(getString(R.string.rename_failed, old_name)) .setMessage(getString(R.string.rename_failed, old_name))
.setPositiveButton(R.string.ok, null) .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){ protected fun handleMenuItems(menu: Menu){
menu.findItem(R.id.rename).isVisible = false menu.findItem(R.id.rename).isVisible = false
menu.findItem(R.id.open_as)?.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 menu.findItem(R.id.external_open)?.isVisible = false
} }
val noItemSelected = explorerAdapter.selectedItems.isEmpty() 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.sort).isVisible = noItemSelected
menu.findItem(R.id.close).isVisible = noItemSelected menu.findItem(R.id.close).isVisible = noItemSelected
if (noItemSelected){ if (noItemSelected){
@ -490,7 +504,7 @@ open class BaseExplorerActivity : BaseActivity() {
true true
} }
R.id.sort -> { R.id.sort -> {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.sort_order) .setTitle(R.string.sort_order)
.setSingleChoiceItems(DialogSingleChoiceAdapter(this, sortOrderEntries.toList()), currentSortOrderIndex) { dialog, which -> .setSingleChoiceItems(DialogSingleChoiceAdapter(this, sortOrderEntries.toList()), currentSortOrderIndex) { dialog, which ->
currentSortOrderIndex = which currentSortOrderIndex = which
@ -507,7 +521,7 @@ open class BaseExplorerActivity : BaseActivity() {
val dialogEditText = dialogEditTextView.findViewById<EditText>(R.id.dialog_edit_text) val dialogEditText = dialogEditTextView.findViewById<EditText>(R.id.dialog_edit_text)
dialogEditText.setText(oldName) dialogEditText.setText(oldName)
dialogEditText.selectAll() dialogEditText.selectAll()
val dialog = ColoredAlertDialogBuilder(this) val dialog = CustomAlertDialogBuilder(this, themeValue)
.setView(dialogEditTextView) .setView(dialogEditTextView)
.setTitle(R.string.rename_title) .setTitle(R.string.rename_title)
.setPositiveButton(R.string.ok) { _, _ -> .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.databinding.ActivityExplorerBinding
import sushi.hardcore.droidfs.file_operations.OperationFile import sushi.hardcore.droidfs.file_operations.OperationFile
import sushi.hardcore.droidfs.util.PathUtils import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import java.io.File import java.io.File
class ExplorerActivity : BaseExplorerActivity() { class ExplorerActivity : BaseExplorerActivity() {
@ -73,7 +73,7 @@ class ExplorerActivity : BaseExplorerActivity() {
if (failedItem == null){ if (failedItem == null){
Toast.makeText(this, R.string.success_import, Toast.LENGTH_SHORT).show() Toast.makeText(this, R.string.success_import, Toast.LENGTH_SHORT).show()
} else { } else {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(getString(R.string.import_failed, failedItem)) .setMessage(getString(R.string.import_failed, failedItem))
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -105,7 +105,7 @@ class ExplorerActivity : BaseExplorerActivity() {
if (failedItem == null){ if (failedItem == null){
Toast.makeText(this, R.string.success_export, Toast.LENGTH_SHORT).show() Toast.makeText(this, R.string.success_export, Toast.LENGTH_SHORT).show()
} else { } else {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(getString(R.string.export_failed, failedItem)) .setMessage(getString(R.string.export_failed, failedItem))
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -124,7 +124,7 @@ class ExplorerActivity : BaseExplorerActivity() {
private fun onImportComplete(failedItem: String?, urisToWipe: List<Uri>, rootFile: DocumentFile? = null) { private fun onImportComplete(failedItem: String?, urisToWipe: List<Uri>, rootFile: DocumentFile? = null) {
if (failedItem == null){ if (failedItem == null){
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.success_import) .setTitle(R.string.success_import)
.setMessage(""" .setMessage("""
${getString(R.string.success_import_msg)} ${getString(R.string.success_import_msg)}
@ -136,7 +136,7 @@ class ExplorerActivity : BaseExplorerActivity() {
if (errorMsg == null){ if (errorMsg == null){
Toast.makeText(this, R.string.wipe_successful, Toast.LENGTH_SHORT).show() Toast.makeText(this, R.string.wipe_successful, Toast.LENGTH_SHORT).show()
} else { } else {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(getString(R.string.wipe_failed, errorMsg)) .setMessage(getString(R.string.wipe_failed, errorMsg))
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -148,7 +148,7 @@ class ExplorerActivity : BaseExplorerActivity() {
.setNegativeButton(R.string.no, null) .setNegativeButton(R.string.no, null)
.show() .show()
} else { } else {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(getString(R.string.import_failed, failedItem)) .setMessage(getString(R.string.import_failed, failedItem))
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -173,7 +173,7 @@ class ExplorerActivity : BaseExplorerActivity() {
listOf("createFolder", R.string.mkdir, R.drawable.icon_create_new_folder), listOf("createFolder", R.string.mkdir, R.drawable.icon_create_new_folder),
listOf("camera", R.string.camera, R.drawable.icon_camera) listOf("camera", R.string.camera, R.drawable.icon_camera)
) )
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setSingleChoiceItems(adapter, -1){ thisDialog, which -> .setSingleChoiceItems(adapter, -1){ thisDialog, which ->
when (adapter.getItem(which)){ when (adapter.getItem(which)){
"importFromOtherVolumes" -> { "importFromOtherVolumes" -> {
@ -194,7 +194,7 @@ class ExplorerActivity : BaseExplorerActivity() {
"createFile" -> { "createFile" -> {
val dialogEditTextView = layoutInflater.inflate(R.layout.dialog_edit_text, null) val dialogEditTextView = layoutInflater.inflate(R.layout.dialog_edit_text, null)
val dialogEditText = dialogEditTextView.findViewById<EditText>(R.id.dialog_edit_text) val dialogEditText = dialogEditTextView.findViewById<EditText>(R.id.dialog_edit_text)
val dialog = ColoredAlertDialogBuilder(this) val dialog = CustomAlertDialogBuilder(this, themeValue)
.setView(dialogEditTextView) .setView(dialogEditTextView)
.setTitle(getString(R.string.enter_file_name)) .setTitle(getString(R.string.enter_file_name))
.setPositiveButton(R.string.ok) { _, _ -> .setPositiveButton(R.string.ok) { _, _ ->
@ -247,7 +247,7 @@ class ExplorerActivity : BaseExplorerActivity() {
val filePath = PathUtils.pathJoin(currentDirectoryPath, fileName) 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) val handleID = gocryptfsVolume.openWriteMode(filePath) //don't check overwrite because openWriteMode open in read-write (doesn't erase content)
if (handleID == -1) { if (handleID == -1) {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.file_creation_failed) .setMessage(R.string.file_creation_failed)
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -333,7 +333,7 @@ class ExplorerActivity : BaseExplorerActivity() {
if (failedItem == null){ if (failedItem == null){
Toast.makeText(this, R.string.copy_success, Toast.LENGTH_SHORT).show() Toast.makeText(this, R.string.copy_success, Toast.LENGTH_SHORT).show()
} else { } else {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(getString(R.string.copy_failed, failedItem)) .setMessage(getString(R.string.copy_failed, failedItem))
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -355,7 +355,7 @@ class ExplorerActivity : BaseExplorerActivity() {
if (failedItem == null){ if (failedItem == null){
Toast.makeText(this, R.string.move_success, Toast.LENGTH_SHORT).show() Toast.makeText(this, R.string.move_success, Toast.LENGTH_SHORT).show()
} else { } else {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(getString(R.string.move_failed, failedItem)) .setMessage(getString(R.string.move_failed, failedItem))
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -373,7 +373,7 @@ class ExplorerActivity : BaseExplorerActivity() {
} }
R.id.delete -> { R.id.delete -> {
val size = explorerAdapter.selectedItems.size val size = explorerAdapter.selectedItems.size
val dialog = ColoredAlertDialogBuilder(this) val dialog = CustomAlertDialogBuilder(this, themeValue)
dialog.setTitle(R.string.warning) dialog.setTitle(R.string.warning)
dialog.setPositiveButton(R.string.ok) { _, _ -> removeSelectedItems() } dialog.setPositiveButton(R.string.ok) { _, _ -> removeSelectedItems() }
dialog.setNegativeButton(R.string.cancel, null) dialog.setNegativeButton(R.string.cancel, null)
@ -391,7 +391,7 @@ class ExplorerActivity : BaseExplorerActivity() {
paths.add(explorerElements[i].fullPath) paths.add(explorerElements[i].fullPath)
} }
isStartingActivity = true isStartingActivity = true
ExternalProvider.share(this, gocryptfsVolume, paths) ExternalProvider.share(this, themeValue, gocryptfsVolume, paths)
unselectAll() unselectAll()
true true
} }
@ -452,7 +452,7 @@ class ExplorerActivity : BaseExplorerActivity() {
} }
} }
if (failedItem != null) { if (failedItem != null) {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(getString(R.string.remove_failed, failedItem)) .setMessage(getString(R.string.remove_failed, failedItem))
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)

View File

@ -6,7 +6,7 @@ import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import sushi.hardcore.droidfs.R import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.databinding.ActivityExplorerDropBinding import sushi.hardcore.droidfs.databinding.ActivityExplorerDropBinding
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
class ExplorerActivityDrop : BaseExplorerActivity() { class ExplorerActivityDrop : BaseExplorerActivity() {
private lateinit var binding: ActivityExplorerDropBinding private lateinit var binding: ActivityExplorerDropBinding
@ -56,7 +56,7 @@ class ExplorerActivityDrop : BaseExplorerActivity() {
getString(R.string.share_intent_parsing_failed) getString(R.string.share_intent_parsing_failed)
} }
errorMsg?.let { errorMsg?.let {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(it) .setMessage(it)
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
@ -71,7 +71,7 @@ class ExplorerActivityDrop : BaseExplorerActivity() {
private fun onImported(failedItem: String?){ private fun onImported(failedItem: String?){
setCurrentPath(currentDirectoryPath) setCurrentPath(currentDirectoryPath)
if (failedItem == null) { if (failedItem == null) {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.success_import) .setTitle(R.string.success_import)
.setMessage(R.string.success_import_msg) .setMessage(R.string.success_import_msg)
.setCancelable(false) .setCancelable(false)
@ -80,7 +80,7 @@ class ExplorerActivityDrop : BaseExplorerActivity() {
} }
.show() .show()
} else { } else {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(getString(R.string.import_failed, failedItem)) .setMessage(getString(R.string.import_failed, failedItem))
.setPositiveButton(R.string.ok, null) .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.content_providers.RestrictedFileProvider
import sushi.hardcore.droidfs.explorers.ExplorerElement import sushi.hardcore.droidfs.explorers.ExplorerElement
import sushi.hardcore.droidfs.util.PathUtils import sushi.hardcore.droidfs.util.PathUtils
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
abstract class FileViewerActivity: BaseActivity() { abstract class FileViewerActivity: BaseActivity() {
protected lateinit var gocryptfsVolume: GocryptfsVolume protected lateinit var gocryptfsVolume: GocryptfsVolume
@ -76,7 +76,7 @@ abstract class FileViewerActivity: BaseActivity() {
if (success){ if (success){
return fileBuff return fileBuff
} else { } else {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.read_file_failed) .setMessage(R.string.read_file_failed)
.setCancelable(false) .setCancelable(false)
@ -84,7 +84,7 @@ abstract class FileViewerActivity: BaseActivity() {
.show() .show()
} }
} catch (e: OutOfMemoryError){ } catch (e: OutOfMemoryError){
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.outofmemoryerror_msg) .setMessage(R.string.outofmemoryerror_msg)
.setCancelable(false) .setCancelable(false)
@ -93,7 +93,7 @@ abstract class FileViewerActivity: BaseActivity() {
} }
} else { } else {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.get_size_failed) .setMessage(R.string.get_size_failed)
.setCancelable(false) .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.ConstValues
import sushi.hardcore.droidfs.R import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.databinding.ActivityImageViewerBinding 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 sushi.hardcore.droidfs.widgets.ZoomableImageView
import java.io.ByteArrayInputStream import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
@ -87,7 +87,7 @@ class ImageViewer: FileViewerActivity() {
} }
}) })
binding.imageDelete.setOnClickListener { binding.imageDelete.setOnClickListener {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.keepFullScreen() .keepFullScreen()
.setTitle(R.string.warning) .setTitle(R.string.warning)
.setPositiveButton(R.string.ok) { _, _ -> .setPositiveButton(R.string.ok) { _, _ ->
@ -101,7 +101,7 @@ class ImageViewer: FileViewerActivity() {
loadImage() loadImage()
} }
} else { } else {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.keepFullScreen() .keepFullScreen()
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(getString(R.string.remove_failed, fileName)) .setMessage(getString(R.string.remove_failed, fileName))
@ -222,7 +222,7 @@ class ImageViewer: FileViewerActivity() {
private fun askSaveRotation(callback: () -> Unit){ private fun askSaveRotation(callback: () -> Unit){
if (rotationAngle%360 != 0f && !slideshowActive){ if (rotationAngle%360 != 0f && !slideshowActive){
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.keepFullScreen() .keepFullScreen()
.setTitle(R.string.warning) .setTitle(R.string.warning)
.setMessage(R.string.ask_save_img_rotated) .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() Toast.makeText(this, R.string.image_saved_successfully, Toast.LENGTH_SHORT).show()
callback() callback()
} else { } else {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.keepFullScreen() .keepFullScreen()
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.file_write_failed) .setMessage(R.string.file_write_failed)
@ -249,7 +249,7 @@ class ImageViewer: FileViewerActivity() {
.show() .show()
} }
} else { } else {
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.keepFullScreen() .keepFullScreen()
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.bitmap_compress_failed) .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 com.google.android.exoplayer2.source.ProgressiveMediaSource
import sushi.hardcore.droidfs.ConstValues import sushi.hardcore.droidfs.ConstValues
import sushi.hardcore.droidfs.R import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
abstract class MediaPlayer: FileViewerActivity() { abstract class MediaPlayer: FileViewerActivity() {
private lateinit var player: SimpleExoPlayer private lateinit var player: SimpleExoPlayer
@ -43,7 +43,7 @@ abstract class MediaPlayer: FileViewerActivity() {
} }
} }
override fun onPlayerError(error: PlaybackException) { override fun onPlayerError(error: PlaybackException) {
ColoredAlertDialogBuilder(this@MediaPlayer) CustomAlertDialogBuilder(this@MediaPlayer, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(getString(R.string.playing_failed, error.errorCodeName)) .setMessage(getString(R.string.playing_failed, error.errorCodeName))
.setCancelable(false) .setCancelable(false)

View File

@ -11,7 +11,7 @@ import android.widget.Toast
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import sushi.hardcore.droidfs.R import sushi.hardcore.droidfs.R
import sushi.hardcore.droidfs.GocryptfsVolume import sushi.hardcore.droidfs.GocryptfsVolume
import sushi.hardcore.droidfs.widgets.ColoredAlertDialogBuilder import sushi.hardcore.droidfs.widgets.CustomAlertDialogBuilder
import java.io.ByteArrayInputStream import java.io.ByteArrayInputStream
import java.io.File import java.io.File
@ -36,7 +36,7 @@ class TextEditor: FileViewerActivity() {
try { try {
loadLayout(String(it)) loadLayout(String(it))
} catch (e: OutOfMemoryError){ } catch (e: OutOfMemoryError){
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.error) .setTitle(R.string.error)
.setMessage(R.string.outofmemoryerror_msg) .setMessage(R.string.outofmemoryerror_msg)
.setCancelable(false) .setCancelable(false)
@ -105,7 +105,7 @@ class TextEditor: FileViewerActivity() {
private fun checkSaveAndExit(){ private fun checkSaveAndExit(){
if (changedSinceLastSave){ if (changedSinceLastSave){
ColoredAlertDialogBuilder(this) CustomAlertDialogBuilder(this, themeValue)
.setTitle(R.string.warning) .setTitle(R.string.warning)
.setMessage(R.string.ask_save) .setMessage(R.string.ask_save)
.setPositiveButton(R.string.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 package sushi.hardcore.droidfs.widgets
import android.content.Context import android.content.Context
import android.util.TypedValue
import android.view.WindowManager import android.view.WindowManager
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat import androidx.core.view.WindowInsetsControllerCompat
import sushi.hardcore.droidfs.R
class ColoredAlertDialogBuilder: AlertDialog.Builder { class CustomAlertDialogBuilder(context: Context, theme: String) : AlertDialog.Builder(
constructor(context: Context): super(context) context, when (theme) {
constructor(context: Context, themeResId: Int): super(context, themeResId) "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 private var keepFullScreen = false
fun keepFullScreen(): AlertDialog.Builder { fun keepFullScreen(): AlertDialog.Builder {
@ -17,15 +31,6 @@ class ColoredAlertDialogBuilder: AlertDialog.Builder {
return this 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 { override fun show(): AlertDialog {
val dialog = create() val dialog = create()
dialog.show() dialog.show()
@ -41,7 +46,13 @@ class ColoredAlertDialogBuilder: AlertDialog.Builder {
override fun create(): AlertDialog { override fun create(): AlertDialog {
val dialog = super.create() 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){ if (keepFullScreen){
dialog.window?.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) dialog.window?.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
} }

View File

@ -1,13 +1,26 @@
package sushi.hardcore.droidfs.widgets package sushi.hardcore.droidfs.widgets
import android.content.Context import android.content.Context
import android.graphics.drawable.ColorDrawable
import android.util.AttributeSet import android.util.AttributeSet
import android.util.TypedValue
import android.widget.ListAdapter import android.widget.ListAdapter
import android.widget.ListView
import androidx.core.content.ContextCompat
import sushi.hardcore.droidfs.R
class NonScrollableColoredBorderListView: ColoredBorderListView { class NonScrollableColoredBorderListView: ListView {
constructor(context: Context) : super(context) constructor(context: Context) : super(context) { applyColor() }
constructor(context: Context, attrs: AttributeSet): super(context, attrs) constructor(context: Context, attrs: AttributeSet): super(context, attrs) { applyColor() }
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int): super(context, attrs, defStyleAttr) 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 { fun computeHeight(): Int {
var totalHeight = 0 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"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item> <item>
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<solid android:color="@color/buttonBackgroundColor"/> <solid android:color="?attr/buttonBackgroundColor"/>
<corners android:radius="4dp"/> <corners android:radius="4dp"/>
</shape> </shape>
</item> </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:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 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="?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="@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="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> </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:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 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> </vector>

View File

@ -1,4 +1,4 @@
<vector android:height="24dp" android:viewportHeight="500" <vector android:height="24dp" android:viewportHeight="500"
android:viewportWidth="500" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 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> </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:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 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> </vector>

View File

@ -5,6 +5,5 @@
android:viewportHeight="500"> android:viewportHeight="500">
<path <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: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:fillColor="?attr/colorAccent"/>
android:fillType="evenOdd"/> </vector>
</vector>

View File

@ -5,6 +5,6 @@
android:width="24dp" android:width="24dp"
android:height="24dp"> android:height="24dp">
<path <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" /> 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> </vector>

View File

@ -6,6 +6,6 @@
android:viewportHeight="24"> android:viewportHeight="24">
<path <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" /> 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> </vector>

View File

@ -6,6 +6,6 @@
android:viewportHeight="24"> android:viewportHeight="24">
<path <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" /> 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> </vector>

View File

@ -2,6 +2,6 @@
android:viewportHeight="24" android:viewportWidth="24" android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path <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"/> 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> </vector>

View File

@ -6,6 +6,6 @@
android:viewportHeight="24"> android:viewportHeight="24">
<path <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" /> 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> </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:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 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> </vector>

View File

@ -1,5 +1,5 @@
<vector android:height="24dp" <vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24" android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 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> </vector>

View File

@ -4,6 +4,6 @@
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24"> android:viewportHeight="24">
<path <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"/> 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> </vector>

View File

@ -4,6 +4,6 @@
android:viewportWidth="32" android:viewportWidth="32"
android:viewportHeight="32"> android:viewportHeight="32">
<path <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"/> 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> </vector>

View File

@ -6,5 +6,5 @@
android:viewportHeight="24"> android:viewportHeight="24">
<path <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> </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:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 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> </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:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 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> </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:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 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> </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:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 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> </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:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 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> </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:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 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> </vector>

View File

@ -4,7 +4,7 @@
android:viewportHeight="512" android:viewportHeight="512"
android:width="24dp" android:width="24dp"
android:height="24dp" android:height="24dp"
android:tint="#FFFFFF"> android:tint="?attr/colorAccent">
<path <path
android:fillColor="#000000" 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:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 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> </vector>

View File

@ -1,5 +1,5 @@
<vector android:height="24dp" <vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24" android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 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> </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:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 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> </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:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 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> </vector>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,7 +3,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="25dp" android:layout_height="25dp"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/infoBarBackgroundColor" android:background="?attr/infoBarBackgroundColor"
android:gravity="center_vertical"> android:gravity="center_vertical">
<TextView <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" android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar" android:id="@+id/toolbar"
android:background="@color/colorPrimaryDark" android:background="@color/primary"
app:titleTextColor="@color/textColor" app:titleTextColor="@color/textColor"
android:elevation="4dp"> android:elevation="4dp">

View File

@ -25,7 +25,7 @@
android:text="@string/volume_path" android:text="@string/volume_path"
android:textSize="@dimen/edit_text_label_text_size" /> android:textSize="@dimen/edit_text_label_text_size" />
<sushi.hardcore.droidfs.widgets.ColoredEditText <EditText
android:id="@+id/edit_volume_path" android:id="@+id/edit_volume_path"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_weight="0.5" android:layout_weight="0.5"
@ -33,7 +33,7 @@
android:inputType="text" android:inputType="text"
android:maxLines="1"/> android:maxLines="1"/>
<sushi.hardcore.droidfs.widgets.ColoredImageButton <ImageButton
android:id="@+id/button_pick_directory" android:id="@+id/button_pick_directory"
android:layout_width="@dimen/image_button_size" android:layout_width="@dimen/image_button_size"
android:layout_height="@dimen/image_button_size" android:layout_height="@dimen/image_button_size"
@ -55,7 +55,7 @@
android:text="@string/volume_name" android:text="@string/volume_name"
android:textSize="@dimen/edit_text_label_text_size" /> android:textSize="@dimen/edit_text_label_text_size" />
<sushi.hardcore.droidfs.widgets.ColoredEditText <EditText
android:id="@+id/edit_volume_name" android:id="@+id/edit_volume_name"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_weight="0.5" 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">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="open_volume_failed_msg">Falha ao abrir o volume. Por favor, verifique sua senha.</string>
<string name="share_chooser">Compartilhar arquivo</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">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="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> <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">Gerenciar opções perigosas</string>
<string name="manage_unsafe_features_summary">Alternar opções perigosas</string> <string name="manage_unsafe_features_summary">Alternar opções perigosas</string>
<string name="ui">IU</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="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="see_unsafe_features">Ver opções perigosas</string>
<string name="open_as">Abrir como</string> <string name="open_as">Abrir como</string>
<string name="image">Imagem</string> <string name="image">Imagem</string>
<string name="video">Vídeo</string> <string name="video">Vídeo</string>
<string name="audio">Áudio</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="playing_failed">Falha ao reproduzir este arquivo: %s</string>
<string name="text">Texto</string> <string name="text">Texto</string>
<string name="save_failed">Falha ao salvar</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="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="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="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="copy_menu_title">Copiar</string>
<string name="move_failed">Transferência do arquivo %s falhou.</string> <string name="move_failed">Transferência do arquivo %s falhou.</string>
<string name="move_success">Transferência bem sucedida!</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">Ошибка открытия</string>
<string name="open_volume_failed_msg">Невозможно открыть том. Проверьте пароль.</string> <string name="open_volume_failed_msg">Невозможно открыть том. Проверьте пароль.</string>
<string name="share_chooser">Поделиться файлом</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">Доступ к хранилищу запрещён</string>
<string name="storage_perm_denied_msg">DroidFS не может работать без разрешения на доступ к хранилищу.</string> <string name="storage_perm_denied_msg">DroidFS не может работать без разрешения на доступ к хранилищу.</string>
<string name="get_size_failed">Невозможно получить размер файла.</string> <string name="get_size_failed">Невозможно получить размер файла.</string>
@ -106,15 +104,12 @@
<string name="manage_unsafe_features">Управление небезопасными функциями</string> <string name="manage_unsafe_features">Управление небезопасными функциями</string>
<string name="manage_unsafe_features_summary">Включить/отключить небезопасные функции</string> <string name="manage_unsafe_features_summary">Включить/отключить небезопасные функции</string>
<string name="ui">Интерфейс</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="usf_home_warning_msg">DroidFS старается быть максимально безопасным, однако безопасность часто связана с появлением неудобств. Поэтому DroidFS предлагает дополнительные небезопасные функции, которые вы можете включить/отключить в соответствии со своими потребностями.\n\nПредупреждение: эти функции могут быть НЕБЕЗОПАСНЫМИ. Не используйте их, если не уверены в своих действиях. Настоятельно рекомендуется прочитать документацию перед их включением.</string>
<string name="see_unsafe_features">Посмотреть небезопасные функции</string> <string name="see_unsafe_features">Посмотреть небезопасные функции</string>
<string name="open_as">Открыть как</string> <string name="open_as">Открыть как</string>
<string name="image">Изображение</string> <string name="image">Изображение</string>
<string name="video">Видео</string> <string name="video">Видео</string>
<string name="audio">Аудио</string> <string name="audio">Аудио</string>
<string name="media_player_prepare_failed">Невозможно инициализировать медиапроигрыватель.</string>
<string name="playing_failed">Невозможно воспроизвести файл: %s</string> <string name="playing_failed">Невозможно воспроизвести файл: %s</string>
<string name="text">Текст</string> <string name="text">Текст</string>
<string name="save_failed">Невозможно сохранить.</string> <string name="save_failed">Невозможно сохранить.</string>
@ -148,8 +143,6 @@
<string name="file_overwrite_question">%s уже существует, переписать его?</string> <string name="file_overwrite_question">%s уже существует, переписать его?</string>
<string name="dir_overwrite_question">%s уже существует, объединить содержимое?</string> <string name="dir_overwrite_question">%s уже существует, объединить содержимое?</string>
<string name="enter_new_name">Введите новое имя</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="copy_menu_title">Копировать</string>
<string name="move_failed">Ошибка при перемещении %s.</string> <string name="move_failed">Ошибка при перемещении %s.</string>
<string name="move_success">Перемещение выполнено!</string> <string name="move_success">Перемещение выполнено!</string>

View File

@ -14,6 +14,21 @@
<item>Date (desc)</item> <item>Date (desc)</item>
</string-array> </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 --> <!-- don't translate the following otherwise the app will crash -->
<string-array name="sort_orders_values"> <string-array name="sort_orders_values">
<item>name</item> <item>name</item>
@ -23,4 +38,19 @@
<item>size_desc</item> <item>size_desc</item>
<item>date_desc</item> <item>date_desc</item>
</string-array> </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> </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"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<color name="colorPrimary">#262626</color> <color name="primary">#262626</color>
<color name="colorPrimaryDark">#262626</color> <color name="secondary">#6CC341</color>
<color name="colorAccent">#6CC341</color> <color name="black">#000000</color>
<color name="cyanea_primary_reference">@color/colorPrimaryDark</color> <color name="white">#FFFFFF</color>
<color name="cyanea_primary_dark_reference">@color/colorPrimaryDark</color> <color name="red">#ff0000</color>
<color name="themeColor">@color/colorAccent</color> <color name="blue">#00B8D4</color>
<color name="backgroundColor">#333333</color> <color name="yellow">#FFD600</color>
<color name="fullScreenBackgroundColor">#000000</color> <color name="orange">#FF6D00</color>
<color name="textColor">#FFFFFF</color> <color name="purple">#AA00FF</color>
<color name="buttonBackgroundColor">#5B5A5C</color> <color name="menuIconTint">@color/white</color>
<color name="item_selected">#66666666</color> <color name="fullScreenBackgroundColor">@color/black</color>
<color name="infoBarBackgroundColor">#111111</color> <color name="textColor">@color/white</color>
<color name="fingerprint_wait">#FFFFFF</color> <color name="itemSelected">#66666666</color>
<color name="fingerprint_success">#6CC341</color>
<color name="fingerprint_failed">#ff0000</color>
</resources> </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">Open failed</string>
<string name="open_volume_failed_msg">Failed to open the volume. Please check your password.</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="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">Storage permission denied</string>
<string name="storage_perm_denied_msg">DroidFS can\'t work without storage permissions.</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> <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">Manage unsafe features</string>
<string name="manage_unsafe_features_summary">Enable/Disable unsafe features</string> <string name="manage_unsafe_features_summary">Enable/Disable unsafe features</string>
<string name="ui">UI</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="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="see_unsafe_features">See unsafe features</string>
<string name="open_as">Open as</string> <string name="open_as">Open as</string>
<string name="image">Image</string> <string name="image">Image</string>
<string name="video">Video</string> <string name="video">Video</string>
<string name="audio">Audio</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="playing_failed">Failed to play this file: %s</string>
<string name="text">Text</string> <string name="text">Text</string>
<string name="save_failed">Save failed</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="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="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="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="copy_menu_title">Copy</string>
<string name="move_failed">Move of %s failed.</string> <string name="move_failed">Move of %s failed.</string>
<string name="move_success">Move successful !</string> <string name="move_success">Move successful !</string>
@ -209,4 +202,6 @@
<string name="auto">Auto</string> <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="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="encryption_cipher_label">Encryption cipher:</string>
<string name="theme">Theme</string>
<string name="theme_summary">Customize app theme</string>
</resources> </resources>

View File

@ -1,19 +1,62 @@
<resources> <resources>
<!-- Base application theme. --> <style name="BaseTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<style name="AppTheme" parent="Theme.Cyanea.Dark.NoActionBar">
<item name="android:textColor">@color/textColor</item> <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>
<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> <item name="android:background">@drawable/button_background</item>
</style> </style>
<style name="BlackButton" parent="Widget.AppCompat.Button">
<item name="android:background">@drawable/button_background</item>
</style>
<style name="listViewNoDivider"> <style name="listViewNoDivider">
<item name="android:divider">#000000</item> <item name="android:divider">#000000</item>
<item name="android:dividerHeight">0dp</item> <item name="android:dividerHeight">0dp</item>
</style> </style>
<!--<style name="menu_overflow" parent="Widget.AppCompat.PopupMenu.Overflow">
<item name="android:popupBackground">@drawable/popupmenu_overflow</item>
</style>-->
<style name="infoBarTextView"> <style name="infoBarTextView">
<item name="android:ellipsize">start</item> <item name="android:ellipsize">start</item>
<item name="android:singleLine">true</item> <item name="android:singleLine">true</item>

View File

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