Started work on SettingsViewModel with discrete SettingsRepository; switched out some icons for the substitution plan

This commit is contained in:
Deniz Düzgören
2019-10-26 20:06:02 +02:00
parent 10033d999f
commit 2561453811
14 changed files with 252 additions and 107 deletions
@@ -21,8 +21,6 @@ import androidx.core.content.ContextCompat.checkSelfPermission
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import com.denizd.substitutionplan.R import com.denizd.substitutionplan.R
import com.denizd.substitutionplan.models.Colour import com.denizd.substitutionplan.models.Colour
import com.denizd.substitutionplan.models.Food
import com.denizd.substitutionplan.models.Substitution
import java.util.* import java.util.*
import java.io.File import java.io.File
import java.io.FileOutputStream import java.io.FileOutputStream
@@ -132,6 +130,7 @@ internal object SubstUtil {
return 0 return 0
} }
// Could be merged with getColourString
fun getIconForCourse(course: String): Int { fun getIconForCourse(course: String): Int {
return with (course.toLowerCase(Locale.ROOT)) { return with (course.toLowerCase(Locale.ROOT)) {
when { when {
@@ -159,7 +158,7 @@ internal object SubstUtil {
contains("gll") -> R.drawable.ic_gll contains("gll") -> R.drawable.ic_gll
contains("wat") -> R.drawable.ic_wat contains("wat") -> R.drawable.ic_wat
contains("för") -> R.drawable.ic_help contains("för") -> R.drawable.ic_help
contains("wp") || contains("met") -> R.drawable.ic_pencil contains("wp") || contains("met") -> R.drawable.ic_met
else -> R.drawable.ic_empty else -> R.drawable.ic_empty
} }
} }
@@ -416,8 +415,8 @@ internal object SubstUtil {
} }
} }
fun readPrefsFromXml(prefs: SharedPreferences, context: Context, activity: FragmentActivity) { fun readPrefsFromXml(prefs: SharedPreferences, context: Context): Boolean {
if (checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { return if (checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
val localPrefTypes = ArrayList<String>() val localPrefTypes = ArrayList<String>()
for (i in prefKeys.indices) { for (i in prefKeys.indices) {
localPrefTypes.add(prefTypes[i]) localPrefTypes.add(prefTypes[i])
@@ -436,9 +435,10 @@ internal object SubstUtil {
prefs.setPrefValue(key, value, localPrefTypes[i]) prefs.setPrefValue(key, value, localPrefTypes[i])
} }
Toast.makeText(context, context.getString(R.string.success), Toast.LENGTH_LONG).show() Toast.makeText(context, context.getString(R.string.success), Toast.LENGTH_LONG).show()
true
} else { } else {
Toast.makeText(context, context.getString(R.string.permission_denied), Toast.LENGTH_LONG).show() Toast.makeText(context, context.getString(R.string.permission_denied), Toast.LENGTH_LONG).show()
requestPermissions(activity, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), 42) false
} }
} }
} }
@@ -3,10 +3,15 @@ package com.denizd.substitutionplan.database
import android.app.Application import android.app.Application
import android.database.Cursor import android.database.Cursor
import android.media.RingtoneManager import android.media.RingtoneManager
import androidx.preference.PreferenceManager
import com.denizd.substitutionplan.data.SubstUtil
import com.denizd.substitutionplan.models.Ringtone import com.denizd.substitutionplan.models.Ringtone
internal class SettingsRepository(private val application: Application) { internal class SettingsRepository(private val application: Application) {
private val prefs = PreferenceManager.getDefaultSharedPreferences(application)
val notificationChannel = SubstUtil.getNotificationChannel(application, prefs)
val ringtones: List<Ringtone> by lazy { val ringtones: List<Ringtone> by lazy {
lateinit var ringtoneCursor: Cursor lateinit var ringtoneCursor: Cursor
val ringtoneManager = RingtoneManager(application).apply { val ringtoneManager = RingtoneManager(application).apply {
@@ -27,5 +32,29 @@ internal class SettingsRepository(private val application: Application) {
alarms alarms
} }
fun getInt(key: String, default: Int = 0): Int {
return prefs.getInt(key, default)
}
fun setAndApplyInt(key: String, value: Int) {
prefs.edit().putInt(key, value).apply()
}
fun getBool(key: String, default: Boolean = false): Boolean {
return prefs.getBoolean(key, default)
}
fun setAndApplyBool(key: String, value: Boolean) {
prefs.edit().putBoolean(key, value).apply()
}
fun getString(key: String, default: String = ""): String? {
return prefs.getString(key, default)
}
fun setAndApplyString(key: String, value: String) {
prefs.edit().putString(key, value).apply()
}
} }
@@ -156,9 +156,19 @@ internal class SubstRepository(private val application: Application) {
return true return true
} }
} else { } else {
if (coursePreference.contains(course.substring(0, questionMark - 1)) try {
|| coursePreference.contains(course.substring(questionMark + 1))) { /*
These if statements are separated for if, for example, this shows up:
"INF7?"
if they were nested in a single if statement, the function may not be
able to recognise the course and throw an exception instead
*/
if (coursePreference.contains(course.substring(0, questionMark - 1))) {
return true return true
} else if (coursePreference.contains(course.substring(questionMark + 1))) {
return true
}
} catch (e: Exception) {
} }
} }
} }
@@ -4,11 +4,9 @@ import android.annotation.SuppressLint
import android.content.ActivityNotFoundException import android.content.ActivityNotFoundException
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import androidx.preference.PreferenceManager
import android.provider.Settings import android.provider.Settings
import android.text.Editable import android.text.Editable
import android.text.TextWatcher import android.text.TextWatcher
@@ -42,7 +40,6 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
RingtoneAdapter.OnRingtoneClickListener, ColourPickerAdapter.OnColourClickListener { RingtoneAdapter.OnRingtoneClickListener, ColourPickerAdapter.OnColourClickListener {
private lateinit var mContext: Context private lateinit var mContext: Context
private lateinit var prefs: SharedPreferences
private val customTabsIntent = CustomTabsIntent.Builder().build() as CustomTabsIntent private val customTabsIntent = CustomTabsIntent.Builder().build() as CustomTabsIntent
private var customiseColoursButtonLongPressed = false private var customiseColoursButtonLongPressed = false
private var versionCount = 0 private var versionCount = 0
@@ -58,7 +55,6 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
override fun onAttach(context: Context) { override fun onAttach(context: Context) {
super.onAttach(context) super.onAttach(context)
mContext = context mContext = context
prefs = PreferenceManager.getDefaultSharedPreferences(mContext)
} }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@@ -108,37 +104,37 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
switchAutoRefresh.setOnCheckedChangeListener(thisFragment) switchAutoRefresh.setOnCheckedChangeListener(thisFragment)
// Set checked // Set checked
switchGreeting.isChecked = prefs.getBoolean("greeting", true) switchGreeting.isChecked = viewModel.shouldGreet
switchNotifications.isChecked = prefs.getBoolean("notif", false) switchNotifications.isChecked = viewModel.shouldReceiveNotifications
switchPersonalisedPlan.isChecked = prefs.getBoolean("defaultPersonalised", false) switchPersonalisedPlan.isChecked = viewModel.shouldOpenPersonalisedPlan
switchAutoRefresh.isChecked = prefs.getBoolean("autoRefresh", false) switchAutoRefresh.isChecked = viewModel.shouldAutoRefresh
// Set edit text (+ listeners) // Set edit text (+ listeners)
edittextName.setText(prefs.getString("username", "")) edittextName.setText(viewModel.username)
edittextName.addTextChangedListener(object : TextWatcher { edittextName.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable) {} override fun afterTextChanged(s: Editable) {}
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
prefs.edit().putString("username", edittextName.text.toString().trim()).apply() viewModel.username = edittextName.text.toString().trim()
} }
}) })
edittextGroup.setText(prefs.getString("classes", "")) edittextGroup.setText(viewModel.group)
edittextGroup.addTextChangedListener(object : TextWatcher { edittextGroup.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable) {} override fun afterTextChanged(s: Editable) {}
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
prefs.edit().putString("classes", edittextGroup.text.toString()).apply() viewModel.group = edittextGroup.text.toString()
} }
}) })
edittextCourses.setText(prefs.getString("courses", "")) edittextCourses.setText(viewModel.courses)
edittextCourses.addTextChangedListener(object : TextWatcher { edittextCourses.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(s: Editable) {} override fun afterTextChanged(s: Editable) {}
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
prefs.edit().putString("courses", edittextCourses.text.toString()).apply() viewModel.courses = edittextCourses.text.toString()
} }
}) })
@@ -154,9 +150,9 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
R.layout.dropdown_item R.layout.dropdown_item
) )
autocompleteDarkMode.setAdapter(darkModeAdapter) autocompleteDarkMode.setAdapter(darkModeAdapter)
autocompleteDarkMode.setText(autocompleteDarkMode.adapter.getItem(prefs.getInt("themeInt", 0)).toString(), false) autocompleteDarkMode.setText(autocompleteDarkMode.adapter.getItem(viewModel.currentTheme).toString(), false)
autocompleteDarkMode.setOnItemClickListener { _, _, position, _ -> autocompleteDarkMode.setOnItemClickListener { _, _, position, _ ->
prefs.edit().putInt("themeInt", position).apply() viewModel.currentTheme = position
when (position) { when (position) {
0 -> { 0 -> {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
@@ -174,14 +170,14 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
} }
} }
} }
view.rootView.findViewById<BottomNavigationView>(R.id.bottom_nav).selectedItemId = if (prefs.getBoolean("defaultPersonalised", false)) { view.rootView.findViewById<BottomNavigationView>(R.id.bottom_nav).selectedItemId = if (viewModel.shouldOpenPersonalisedPlan) {
R.id.personal R.id.personal
} else { } else {
R.id.plan R.id.plan
} }
} }
val selectedOrderingOption = if (prefs.getBoolean("app_specific_sorting", true)) 0 else 1 val selectedOrderingOption = if (viewModel.shouldUseAppSorting) 0 else 1
val orderingArrayAdapter = ArrayAdapter.createFromResource( val orderingArrayAdapter = ArrayAdapter.createFromResource(
mContext, mContext,
R.array.ordering_systems, R.array.ordering_systems,
@@ -190,7 +186,7 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
autocompleteOrder.setAdapter(orderingArrayAdapter) autocompleteOrder.setAdapter(orderingArrayAdapter)
autocompleteOrder.setText(autocompleteOrder.adapter.getItem(selectedOrderingOption).toString(), false) autocompleteOrder.setText(autocompleteOrder.adapter.getItem(selectedOrderingOption).toString(), false)
autocompleteOrder.setOnItemClickListener { _, _, position, _ -> autocompleteOrder.setOnItemClickListener { _, _, position, _ ->
prefs.edit().putBoolean("app_specific_sorting", position == 0).apply() viewModel.shouldUseAppSorting = position == 0
} }
} }
} }
@@ -269,7 +265,8 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
true true
} }
R.id.button_forced_refresh -> { R.id.button_forced_refresh -> {
prefs.edit().putString("timeNew", "").putString("newFoodTime", "").apply() viewModel.setAndApplyString("timeNew", "")
viewModel.setAndApplyString("newFoodTime", "")
makeToast(mContext.getString(R.string.force_refresh_cleared_times)) makeToast(mContext.getString(R.string.force_refresh_cleared_times))
true true
} }
@@ -281,10 +278,10 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
if (v?.isPressed == true) { if (v?.isPressed == true) {
when (v.id) { when (v.id) {
R.id.switch_greeting -> { R.id.switch_greeting -> {
prefs.edit().putBoolean("greeting", isChecked).apply() viewModel.shouldGreet = isChecked
} }
R.id.switch_notifications -> { R.id.switch_notifications -> {
prefs.edit().putBoolean("notif", isChecked).apply() viewModel.shouldReceiveNotifications = isChecked
if (isChecked) { if (isChecked) {
subscribeToTopic(SubstUtil.FB_TOPIC_ANDROID) subscribeToTopic(SubstUtil.FB_TOPIC_ANDROID)
} else { } else {
@@ -292,10 +289,10 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
} }
} }
R.id.switch_personalised_plan -> { R.id.switch_personalised_plan -> {
prefs.edit().putBoolean("defaultPersonalised", isChecked).apply() viewModel.shouldOpenPersonalisedPlan = isChecked
} }
R.id.switch_auto_refresh -> { R.id.switch_auto_refresh -> {
prefs.edit().putBoolean("autoRefresh", isChecked).apply() viewModel.shouldAutoRefresh = isChecked
} }
} }
} }
@@ -320,7 +317,7 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
} }
override fun onColourClick(position: Int, colourNoLang: String) { override fun onColourClick(position: Int, colourNoLang: String) {
prefs.edit().putString("card$currentCourseSelectedInColourPicker", colourNoLang).apply() viewModel.setAndApplyString("card$currentCourseSelectedInColourPicker", colourNoLang)
val recyclerViewState = colourRecycler.layoutManager?.onSaveInstanceState() val recyclerViewState = colourRecycler.layoutManager?.onSaveInstanceState()
colourRecycler.adapter = CourseColourAdapter(getColourList(), this) colourRecycler.adapter = CourseColourAdapter(getColourList(), this)
colourRecycler.layoutManager?.onRestoreInstanceState(recyclerViewState) colourRecycler.layoutManager?.onRestoreInstanceState(recyclerViewState)
@@ -328,10 +325,8 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
} }
override fun onRingtoneClick(position: Int, name: String, uri: String) { override fun onRingtoneClick(position: Int, name: String, uri: String) {
prefs.edit().apply { viewModel.setAndApplyString("ringtoneName", name)
putString("ringtoneName", name) viewModel.setAndApplyString("ringtoneUri", uri)
putString("ringtoneUri", uri)
}.apply()
setRingtoneText() setRingtoneText()
ringtoneDialog.dismiss() ringtoneDialog.dismiss()
} }
@@ -364,7 +359,7 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
private fun createRingtoneDialog() { private fun createRingtoneDialog() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
SubstUtil.getNotificationChannel(mContext, prefs) viewModel.notificationChannel
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply { val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {
putExtra(Settings.EXTRA_APP_PACKAGE, mContext.applicationContext.packageName) putExtra(Settings.EXTRA_APP_PACKAGE, mContext.applicationContext.packageName)
putExtra(Settings.EXTRA_CHANNEL_ID, "general") putExtra(Settings.EXTRA_CHANNEL_ID, "general")
@@ -418,12 +413,12 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
devDialogText.text = getDiagnosticsText() devDialogText.text = getDiagnosticsText()
resetLaunchBtn.setOnClickListener { resetLaunchBtn.setOnClickListener {
prefs.edit().putInt("launchDev", 0).apply() viewModel.setAndApplyInt("launchDev", 0)
devDialogText.text = getDiagnosticsText() devDialogText.text = getDiagnosticsText()
} }
resetNotificationBtn.setOnClickListener { resetNotificationBtn.setOnClickListener {
prefs.edit().putInt("pingFB", 0).apply() viewModel.setAndApplyInt("pingFB", 0)
devDialogText.text = getDiagnosticsText() devDialogText.text = getDiagnosticsText()
} }
@@ -431,55 +426,65 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
alertDialogDev.show() alertDialogDev.show()
} }
this == "_login" -> { this == "_login" -> {
prefs.edit().putBoolean("successful_login", false).apply() viewModel.setAndApplyBool("successful_login", false)
makeToast("Login flag cleared") makeToast("Login flag cleared")
} }
this == "_firsttime" -> { this == "_firsttime" -> {
prefs.edit().putBoolean("firstTime", true).apply() viewModel.setAndApplyBool("firstTime", true)
makeToast("First time flag cleared") makeToast("First time flag cleared")
} }
this == "_testurls" -> { this == "_testurls" -> {
val currentTest = !prefs.getBoolean("testUrls", false) val currentTest = !viewModel.getBool("testUrls", false)
prefs.edit().putBoolean("testUrls", currentTest) viewModel.setAndApplyBool("testUrls", currentTest)
.putString("custom_test_url", "").apply() if (viewModel.getString("custom_test_url") != "") {
viewModel.setAndApplyString("custom_test_url", "")
makeToast("Cleared custom URL") makeToast("Cleared custom URL")
}
makeToast("Test URLs set to $currentTest") makeToast("Test URLs set to $currentTest")
} }
length > 4 && substring(0, 4) == "_url" -> { length > 4 && substring(0, 4) == "_url" -> {
prefs.edit().putString("custom_test_url", substring(4, length)).apply() viewModel.setAndApplyString("custom_test_url", substring(4, length))
makeToast("Successfully entered custom URL") makeToast("Successfully entered custom URL")
} }
length == 4 && substring(0, 4) == "_url" -> { length == 4 && substring(0, 4) == "_url" -> {
prefs.edit().putString("custom_test_url", "").apply() viewModel.setAndApplyString("custom_test_url", "")
makeToast("Cleared custom URL") makeToast("Cleared custom URL")
} }
this == "_devchannel" -> { this == "_devchannel" -> {
val subbed = if (prefs.getBoolean("subscribedToFBDebugChannel", false)) { val subscribedToDevelopmentChannel = viewModel.getBool("subscribedToFBDebugChannel")
val subbedText = if (subscribedToDevelopmentChannel) {
unsubscribeFromTopic(SubstUtil.FB_TOPIC_DEVELOPMENT) unsubscribeFromTopic(SubstUtil.FB_TOPIC_DEVELOPMENT)
"Unsubscribed from" "Unsubscribed from"
} else { } else {
subscribeToTopic(SubstUtil.FB_TOPIC_DEVELOPMENT) subscribeToTopic(SubstUtil.FB_TOPIC_DEVELOPMENT)
"Subscribed to" "Subscribed to"
} }
prefs.edit().putBoolean("subscribedToFBDebugChannel", !prefs.getBoolean("subscribedToFBDebugChannel", false)).apply() viewModel.setAndApplyBool("subscribedToFBDebugChannel", !subscribedToDevelopmentChannel)
makeToast("$subbed Firebase development channel") makeToast("$subbedText Firebase development channel")
} }
this == "_ioschannel" -> { this == "_ioschannel" -> {
val subbed = if (prefs.getBoolean("subscribedToiOSChannel", false)) { val subscribedToIosChannel = viewModel.getBool("subscribedToiOSChannel")
val subbed = if (subscribedToIosChannel) {
unsubscribeFromTopic(SubstUtil.FB_TOPIC_IOS) unsubscribeFromTopic(SubstUtil.FB_TOPIC_IOS)
"Unsubscribed from" "Unsubscribed from"
} else { } else {
subscribeToTopic(SubstUtil.FB_TOPIC_IOS) subscribeToTopic(SubstUtil.FB_TOPIC_IOS)
"Subscribed to" "Subscribed to"
} }
prefs.edit().putBoolean("subscribedToiOSChannel", !prefs.getBoolean("subscribedToiOSChannel", false)).apply() viewModel.setAndApplyBool("subscribedToiOSChannel", !subscribedToIosChannel)
makeToast("$subbed iOS channel") makeToast("$subbed iOS channel")
} }
this == "_viewstacktrace" -> { this == "_viewstacktrace" -> {
createDialog("Debug Stack Trace", prefs.getString("debug_recent_exception", "") ?: "") createDialog("Debug Stack Trace", viewModel.getString("debug_recent_exception"))
} }
this == "_write" -> SubstUtil.writePrefsToXml(prefs, mContext, activity!!) // this == "_write" -> SubstUtil.writePrefsToXml(prefs, mContext, requireActivity())
this == "_read" -> SubstUtil.readPrefsFromXml(prefs, mContext, activity!!) // this == "_read" -> {
// if (!SubstUtil.readPrefsFromXml(prefs, mContext)) {
// ActivityCompat.requestPermissions(requireActivity(), arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), 42)
// } else {
// TODO("Figure this out or remove it outright as it is outdated")
// }
// }
else -> makeToast(getString(R.string.invalid_code)) else -> makeToast(getString(R.string.invalid_code))
} }
} }
@@ -545,7 +550,7 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
R.drawable.ic_gll, R.drawable.ic_gll,
R.drawable.ic_wat, R.drawable.ic_wat,
R.drawable.ic_help, R.drawable.ic_help,
R.drawable.ic_pencil R.drawable.ic_met
) )
for (i in coursesNoLang.indices) { for (i in coursesNoLang.indices) {
@@ -554,7 +559,7 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
courses[i], courses[i],
coursesNoLang[i], coursesNoLang[i],
coursesIcons[i], coursesIcons[i],
SubstUtil.getColourForString(prefs.getString("card${coursesNoLang[i]}", "") ?: "", mContext) SubstUtil.getColourForString(viewModel.getString("card${coursesNoLang[i]}", ""), mContext)
) )
) )
} }
@@ -566,8 +571,8 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
binding.textCustomiseRingtoneDesc.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { binding.textCustomiseRingtoneDesc.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mContext.getString(R.string.pick_ringtone_desc_o) mContext.getString(R.string.pick_ringtone_desc_o)
} else { } else {
val tone = if ((prefs.getString("ringtoneName", "") ?: "").isNotEmpty()) { val tone = if ((viewModel.getString("ringtoneName")).isNotEmpty()) {
prefs.getString("ringtoneName", "") viewModel.getString("ringtoneName")
} else { } else {
mContext.getString(R.string.default_ringtone) mContext.getString(R.string.default_ringtone)
} }
@@ -580,15 +585,15 @@ internal class SettingsFragment : Fragment(), View.OnClickListener, View.OnLongC
} }
private fun getDiagnosticsText(): String { private fun getDiagnosticsText(): String {
return "First Launch: ${prefs.getString("firstTimeDev", "")}" + return "First Launch: ${viewModel.getString("firstTimeDev", "")}" +
"\n\nApp launched: ${prefs.getInt("launchDev", 0)}" + "\n\nApp launched: ${viewModel.getInt("launchDev", 0)}" +
"\n\nFirebase ping service fired: ${prefs.getInt("pingFB", 0)}" + "\n\nFirebase ping service fired: ${viewModel.getInt("pingFB", 0)}" +
"\n\nDevice Name: ${Build.DEVICE}" + "\n\nDevice Name: ${Build.DEVICE}" +
"\n\nDevice Model: ${Build.MODEL}" + "\n\nDevice Model: ${Build.MODEL}" +
"\n\nAndroid Version: ${Build.VERSION.RELEASE}" + "\n\nAndroid Version: ${Build.VERSION.RELEASE}" +
"\n\nSubscribed to notification channel: ${prefs.getBoolean("notif", false)}" + "\n\nSubscribed to notification channel: ${viewModel.getBool("notif", false)}" +
"\n\nSubscribed to iOS channel: ${prefs.getBoolean("subscribedToiOSChannel", false)}" + "\n\nSubscribed to iOS channel: ${viewModel.getBool("subscribedToiOSChannel", false)}" +
"\n\nSubscribed to dev channel: ${prefs.getBoolean("subscribedToFBDebugChannel", false)}" "\n\nSubscribed to dev channel: ${viewModel.getBool("subscribedToFBDebugChannel", false)}"
} }
private fun subscribeToTopic(topic: String) = FirebaseMessaging.getInstance().subscribeToTopic(topic) private fun subscribeToTopic(topic: String) = FirebaseMessaging.getInstance().subscribeToTopic(topic)
@@ -2,6 +2,7 @@ package com.denizd.substitutionplan.viewmodels
import android.app.Application import android.app.Application
import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.AndroidViewModel
import com.denizd.substitutionplan.data.SubstUtil
import com.denizd.substitutionplan.database.SettingsRepository import com.denizd.substitutionplan.database.SettingsRepository
import com.denizd.substitutionplan.models.Ringtone import com.denizd.substitutionplan.models.Ringtone
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
@@ -11,6 +12,38 @@ import kotlinx.coroutines.launch
internal class SettingsViewModel(application: Application) : AndroidViewModel(application) { internal class SettingsViewModel(application: Application) : AndroidViewModel(application) {
private val repo = SettingsRepository(application) private val repo = SettingsRepository(application)
var shouldGreet: Boolean
get() = repo.getBool("greeting")
set(it) = repo.setAndApplyBool("greeting", it)
var shouldReceiveNotifications: Boolean
get() = repo.getBool("notif")
set(it) = repo.setAndApplyBool("notif", it)
var shouldOpenPersonalisedPlan: Boolean
get() = repo.getBool("defaultPersonalised")
set(it) = repo.setAndApplyBool("defaultPersonalised", it)
var shouldAutoRefresh: Boolean
get() = repo.getBool("autoRefresh")
set(it) = repo.setAndApplyBool("autoRefresh", it)
var shouldUseAppSorting: Boolean
get() = repo.getBool("app_specific_sorting")
set(it) = repo.setAndApplyBool("app_specific_sorting", it)
var username: String
get() = repo.getString("username") ?: ""
set(it) = repo.setAndApplyString("username", it)
var group: String
get() = repo.getString("classes") ?: ""
set(it) = repo.setAndApplyString("classes", it)
var courses: String
get() = repo.getString("courses") ?: ""
set(it) = repo.setAndApplyString("courses", it)
var currentTheme: Int
get() = repo.getInt("themeInt")
set(it) = repo.setAndApplyInt("themeInt", it)
val notificationChannel = repo.notificationChannel
lateinit var ringtones: List<Ringtone> lateinit var ringtones: List<Ringtone>
val ringtonesInitialised = ::ringtones.isInitialized val ringtonesInitialised = ::ringtones.isInitialized
@@ -22,4 +55,11 @@ internal class SettingsViewModel(application: Application) : AndroidViewModel(ap
updateUi() updateUi()
} }
} }
fun getInt(key: String, default: Int = 0) = repo.getInt(key, default)
fun setAndApplyInt(key: String, value: Int) = repo.setAndApplyInt(key, value)
fun getBool(key: String, default: Boolean = false) = repo.getBool(key, default)
fun setAndApplyBool(key: String, value: Boolean) = repo.setAndApplyBool(key, value)
fun getString(key: String, default: String = "", ifNull: String = "") = repo.getString(key, default) ?: ifNull
fun setAndApplyString(key: String, value: String) = repo.setAndApplyString(key, value)
} }
+23 -6
View File
@@ -1,7 +1,24 @@
<vector android:height="24dp" android:viewportHeight="384" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:viewportWidth="384" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:width="24dp"
<path android:fillColor="#FF000000" android:pathData="m8,144.785c0,92.488 39.098,239.215 144,239.215 46.047,0 79.406,-28.281 102.359,-67.824 13,10.391 28.914,16.313 45.641,16.313 41.902,0 76,-36.063 76,-80.391s-34.098,-80.395 -76,-80.395c-1.695,0 -3.367,0.145 -5.047,0.266 0.703,-9.426 1.047,-18.543 1.047,-27.184 0,-8.832 -7.168,-16 -16,-16h-256c-8.832,0 -16,7.16 -16,16zM300,203.703c24.266,0 44,21.703 44,48.395 0,26.688 -19.734,48.391 -44,48.391 -11.711,0 -22.824,-5.273 -31.016,-14.289 10.641,-25.824 17.871,-54.102 22.145,-81.465 2.918,-0.656 5.879,-1.031 8.871,-1.031zM263.617,160.785c-0.449,9.453 -1.305,19.191 -2.547,29.031 -0.023,0.152 -0.031,0.305 -0.055,0.457 -3.887,30.637 -11.648,62.207 -23.566,89.254 -0.969,1.418 -1.633,2.977 -2.105,4.602 -18.352,39.262 -45.824,67.871 -83.344,67.871 -72.566,0 -107.633,-106.93 -111.617,-191.215zM263.617,160.785"/> android:height="24dp"
<path android:fillColor="#FF000000" android:pathData="m64,16v68.68c0,8.832 7.168,16 16,16s16,-7.168 16,-16v-68.68c0,-8.832 -7.168,-16 -16,-16s-16,7.168 -16,16zM64,16"/> android:viewportWidth="512"
<path android:fillColor="#FF000000" android:pathData="m128,16v68.68c0,8.832 7.168,16 16,16s16,-7.168 16,-16v-68.68c0,-8.832 -7.168,-16 -16,-16s-16,7.168 -16,16zM128,16"/> android:viewportHeight="512">
<path android:fillColor="#FF000000" android:pathData="m192,16v68.68c0,8.832 7.168,16 16,16s16,-7.168 16,-16v-68.68c0,-8.832 -7.168,-16 -16,-16s-16,7.168 -16,16zM192,16"/> <path
android:fillColor="#FF000000"
android:pathData="M405.333,256h-384C8.533,256 0,264.533 0,277.333v21.333C0,416 96,512 213.333,512s213.333,-96 213.333,-213.333v-21.333C426.667,264.533 418.133,256 405.333,256zM213.333,469.333c-93.867,0 -170.667,-76.8 -170.667,-170.667H384C384,392.533 307.2,469.333 213.333,469.333z"/>
<path
android:fillColor="#FF000000"
android:pathData="M490.667,277.333h-85.333c-12.8,0 -21.333,8.533 -21.333,21.333c0,12.8 8.533,21.333 21.333,21.333H467.2c-10.667,36.267 -42.667,64 -83.2,64c-12.8,0 -21.333,8.533 -21.333,21.333c0,12.8 8.533,21.333 21.333,21.333c70.4,0 128,-57.6 128,-128C512,285.867 503.467,277.333 490.667,277.333z"/>
<path
android:fillColor="#FF000000"
android:pathData="M362.667,469.333h-320c-12.8,0 -21.333,8.533 -21.333,21.333S29.867,512 42.667,512h320c12.8,0 21.333,-8.533 21.333,-21.333S375.467,469.333 362.667,469.333z"/>
<path
android:fillColor="#FF000000"
android:pathData="M121.6,121.6c38.4,-36.267 36.267,-78.933 0,-115.2c-8.533,-8.533 -21.333,-8.533 -29.867,0c-8.533,8.533 -8.533,21.333 0,29.867c19.2,19.2 21.333,36.267 0,55.467c0,0 0,0 -2.133,2.133c-36.267,34.133 -34.133,76.8 2.133,113.067c8.533,8.533 21.333,8.533 29.867,0c8.533,-8.533 8.533,-21.333 0,-29.867C102.4,157.867 100.267,140.8 121.6,121.6z"/>
<path
android:fillColor="#FF000000"
android:pathData="M228.267,121.6c40.533,-36.267 36.267,-81.067 0,-115.2c-8.533,-8.533 -21.333,-8.533 -29.867,0c-8.533,8.533 -8.533,21.333 0,29.867c19.2,19.2 21.333,36.267 0,55.467c0,0 0,0 -2.133,2.133C160,128 162.133,170.667 198.4,206.933c8.533,8.533 21.333,8.533 29.867,0s8.533,-21.333 0,-29.867C209.067,157.867 206.933,140.8 228.267,121.6z"/>
<path
android:fillColor="#FF000000"
android:pathData="M334.933,121.6c40.533,-36.267 36.267,-81.067 0,-115.2c-8.533,-8.533 -21.333,-8.533 -29.867,0c-8.533,8.533 -8.533,21.333 0,29.867c19.2,19.2 21.333,36.267 0,55.467c0,0 0,0 -2.133,2.133c-38.4,36.267 -34.133,78.933 0,115.2c8.533,8.533 21.333,8.533 29.867,0s8.533,-21.333 0,-29.867C315.733,157.867 313.6,140.8 334.933,121.6z"/>
</vector> </vector>
+11 -3
View File
@@ -1,4 +1,12 @@
<vector android:height="24dp" android:viewportHeight="512.0153" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:width="24dp"
<path android:fillColor="#FF000000" android:pathData="m405.152,373.34c99.734,-99.996 99.734,-261.859 0,-361.855l-30.129,30.133c83.195,83.195 83.461,218.125 0.266,301.32 -29.598,29.602 -67.199,49.867 -108.262,58.133v-21.867c103.461,-23.465 168.258,-126.395 144.523,-229.855 -23.461,-103.465 -126.395,-167.996 -229.855,-144.531 -103.465,23.469 -168.527,126.664 -144.797,229.859 20,87.461 97.598,149.328 187.195,149.328v21.336c-56.535,0 -110.93,-22.402 -150.93,-62.402l-30.133,30.133c48,47.996 113.063,74.93 181.063,74.93v21.336h-42.668v42.664h127.996v-42.664h-42.66v-25.066c52.527,-8.535 100.793,-33.336 138.391,-70.93zM295.023,323.738 L267.559,296.273c22.398,-17.598 42.664,-37.863 60.266,-60.266l27.73,27.469c-13.863,25.332 -34.934,46.395 -60.531,60.262zM74.766,192.277c0,-8.801 0.797,-17.602 2.398,-26.398l18.668,18.664c-7.203,12 -13.066,24.801 -17.867,37.867 -2.133,-9.867 -3.199,-20 -3.199,-30.133zM373.422,192.277c0,8.797 -0.801,17.598 -2.398,26.398l-18.668,-18.668c7.199,-12 13.066,-24.801 17.867,-37.863 2.133,9.863 3.199,19.996 3.199,30.133zM337.691,108.813c0.531,15.734 -5.07,36.535 -16.801,59.469l-21.336,-21.336zM307.555,78.68 L269.426,116.813 248.094,95.48c21.867,-11.199 41.863,-16.801 57.328,-16.801zM239.293,147.211 L178.762,207.477 150.766,179.207c17.328,-22.66 37.594,-42.926 60.262,-60.262zM148.629,237.609 L110.496,275.742c-0.531,-15.734 5.066,-36.535 16.801,-59.465zM140.629,305.871 L178.762,267.742 200.094,289.074c-22.668,11.73 -43.734,17.332 -59.465,16.797zM208.895,237.609 L269.426,177.344 297.422,205.344c-8.531,11.465 -18.133,22.133 -27.996,32.266 -10.133,10.133 -20.801,19.465 -32.266,28zM254.492,46.148c-13.066,4.797 -25.867,10.93 -37.867,17.863l-18.664,-18.66c18.664,-3.203 37.867,-2.934 56.531,0.797zM153.16,61.078 L180.625,88.547c-22.398,17.598 -42.66,37.867 -60.262,60.266l-27.734,-27.465c13.867,-25.602 34.934,-46.402 60.531,-60.27zM193.695,338.406c13.066,-4.801 25.863,-10.934 37.863,-17.867l18.668,18.664c-18.668,3.469 -37.867,3.203 -56.531,-0.797zM193.695,338.406"/> android:height="24dp"
android:viewportWidth="192"
android:viewportHeight="192">
<path
android:fillColor="#FF000000"
android:pathData="M39.432,128.568a80.087,80.087 0,0 1,0 -113.136L28.117,4.117A96.119,96.119 0,0 0,24.455 136H24v40H8v16H56V176H40V149.963a96.127,96.127 0,0 0,123.883 -10.08l-11.315,-11.315A80.086,80.086 0,0 1,39.432 128.568Z"/>
<path
android:fillColor="#FF000000"
android:pathData="M96,144A72,72 0,1 0,24 72,72.081 72.081,0 0,0 96,144ZM40.309,77.87l5.161,1.72A8.027,8.027 0,0 0,48 80H64V94.111l-8.337,16.674A55.823,55.823 0,0 1,40.309 77.87ZM152,72a56.157,56.157 0,0 1,-0.75 9.1l-3.406,-0.568L134.992,67.679 129.413,50.94l13.214,-9.91A55.664,55.664 0,0 1,152 72ZM131.907,29.069 L115.2,41.6a8,8 0,0 0,-2.79 8.93l8,24a8.025,8.025 0,0 0,1.933 3.127l16,16a8.007,8.007 0,0 0,4.342 2.235l3.659,0.609A56.063,56.063 0,0 1,96 128c-0.658,0 -1.309,-0.027 -1.962,-0.05L102.4,116.8a8.036,8.036 0,0 0,0.755 -1.222l16,-32a8,8 0,0 0,-0.5 -8.015l-16,-24A7.994,7.994 0,0 0,98.53 48.41L78.05,41.584 70.32,22.26a55.838,55.838 0,0 1,61.587 6.809ZM56.95,31.915l7.622,19.056a8,8 0,0 0,4.9 4.619l21.4,7.132 11.9,17.853 -13.6,27.2L76.6,124.532a55.727,55.727 0,0 1,-8.05 -3.748l10.6,-21.206A7.994,7.994 0,0 0,80 96V72a8,8 0,0 0,-8 -8H49.3l-8.252,-2.751A55.94,55.94 0,0 1,56.95 31.915Z"/>
</vector> </vector>
+8 -3
View File
@@ -1,4 +1,9 @@
<vector android:height="24dp" android:viewportHeight="512.108" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:viewportWidth="512.108" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:width="24dp"
<path android:fillColor="#FF000000" android:pathData="M407.65,30.31c-5.858,-5.857 -15.355,-5.858 -21.213,0c-2.649,2.649 -5.235,5.271 -7.78,7.85c-24.479,24.814 -42.165,42.744 -75.047,45.536c-10.553,0.896 -21.649,2.1 -32.689,4.502c-25.522,-14.996 -46.521,-14.169 -63.558,-13.484c-17.18,0.687 -27.55,1.104 -41.103,-12.447c-11.66,-11.661 -22.823,-23.236 -34.611,-35.024c-5.855,-5.855 -15.356,-5.857 -21.213,0L4.674,133.007c-6.828,6.83 -5.516,16.303 -0.302,21.516c5.568,5.569 11.84,10.936 17.905,16.126c13.227,11.319 26.904,23.024 32.805,36.404c6.777,15.365 4.466,35.92 15.871,55.32l-1.562,1.562c-8.5,8.5 -13.181,19.8 -13.181,31.819c0,12.02 4.681,23.32 13.181,31.82c8.143,8.144 18.658,12.501 29.341,13.085c0.584,10.684 4.942,21.198 13.085,29.342c8.138,8.139 18.641,12.494 29.318,13.083c0.598,11.088 5.196,21.43 13.109,29.343c8.143,8.144 18.657,12.501 29.341,13.085c0.584,10.684 4.941,21.198 13.085,29.341c14.118,14.118 34.848,16.643 51.228,8.801l12.412,12.412c17.584,17.585 46.052,17.589 63.639,0c7.913,-7.913 12.511,-18.254 13.109,-29.343c10.676,-0.59 21.181,-4.946 29.318,-13.083c8.137,-8.137 12.494,-18.642 13.083,-29.317c11.089,-0.598 21.43,-5.196 29.343,-13.109c7.913,-7.913 12.511,-18.254 13.109,-29.343c10.676,-0.589 21.18,-4.946 29.317,-13.083c17.545,-17.545 17.545,-46.094 0,-63.639l-11.9,-11.9c11.927,-19.934 9.194,-41.002 16.371,-56.8c9.156,-20.154 34.741,-37.552 52.316,-56.166c5.572,-5.901 5.439,-15.165 -0.299,-20.904C479.016,110.675 435.386,58.045 407.65,30.31zM90.604,285.148c17.047,-17.047 1.738,-1.738 21.213,-21.213c5.847,-5.847 15.363,-5.85 21.213,0c5.849,5.849 5.849,15.365 0,21.214l-21.213,21.213c-5.849,5.849 -15.365,5.849 -21.214,0C84.755,300.513 84.755,290.997 90.604,285.148zM133.03,327.574l51.213,-51.213c5.848,-5.847 15.364,-5.849 21.213,0c5.849,5.849 5.849,15.365 0,21.213l-51.213,51.213c-5.849,5.849 -15.365,5.849 -21.213,0C127.182,342.94 127.182,333.423 133.03,327.574zM175.457,370.001l51.214,-51.213c5.861,-5.861 15.349,-5.863 21.213,0c5.848,5.849 5.848,15.365 0,21.213l-51.213,51.213c-5.849,5.848 -15.365,5.847 -21.213,0C169.595,385.352 169.594,375.865 175.457,370.001zM217.883,433.641c-5.848,-5.849 -5.848,-15.365 0,-21.213l21.213,-21.213c5.848,-5.847 15.361,-5.849 21.211,-0.002c0.001,0 0.002,0.001 0.002,0.002c5.856,5.862 5.862,15.35 0,21.213l-21.214,21.213C233.233,439.503 223.746,439.503 217.883,433.641zM302.735,454.854c-5.861,5.861 -15.349,5.863 -21.213,0l-10.607,-10.607l10.607,-10.606c3.67,-3.67 6.625,-7.865 8.801,-12.412l12.412,12.412C308.598,439.504 308.599,448.991 302.735,454.854zM430.015,327.575c-5.849,5.849 -15.365,5.848 -21.213,0l-42.646,-42.646c-5.857,-5.858 -15.355,-5.858 -21.213,0c-5.858,5.858 -5.858,15.355 0,21.213l42.646,42.646c5.848,5.849 5.848,15.365 0,21.213c-5.861,5.86 -15.344,5.864 -21.21,0.003c-0.001,-0.001 -0.002,-0.002 -0.003,-0.003c-0.002,-0.001 -0.003,-0.003 -0.005,-0.004l-41.704,-41.704c-5.857,-5.858 -15.355,-5.858 -21.213,0c-5.858,5.858 -5.858,15.355 0,21.213l41.708,41.708c5.849,5.849 5.849,15.365 0,21.213c-5.849,5.849 -15.364,5.849 -21.214,0l-42.426,-42.427c-3.718,-3.718 -7.934,-6.64 -12.431,-8.782c17.545,-17.545 17.55,-46.099 0.005,-63.644c-7.913,-7.913 -18.254,-12.511 -29.343,-13.108c-0.589,-10.676 -4.946,-21.181 -13.083,-29.318c-17.587,-17.587 -46.051,-17.589 -63.64,0c-2.142,-4.497 -5.069,-8.709 -8.787,-12.427c-16.568,-16.566 -42.941,-17.481 -60.602,-2.761c-4.095,-12.391 -3.903,-28.671 -11.11,-45.014c-8.656,-19.627 -25.706,-34.218 -40.748,-47.091c-1.742,-1.49 -3.455,-2.957 -5.126,-4.405c20.5,-20.501 64.146,-64.147 84.341,-84.343c8.019,8.141 15.856,16.178 24.05,24.371c22.841,22.841 44.455,21.975 63.517,21.21c7.239,-0.29 14.295,-0.568 21.675,0.401c-4.288,2.991 -8.424,6.414 -12.357,10.353l-27.427,27.426c-17.545,17.545 -17.544,46.094 0,63.639c17.585,17.585 46.052,17.589 63.64,0l27.426,-27.426c5.864,-5.863 15.35,-5.863 21.213,0l127.279,127.279C435.863,312.21 435.863,321.726 430.015,327.575zM428.385,204.04c-7.744,17.046 -7.3,33.946 -11.601,46.665l-45.665,-45.665c13.198,-2.069 25.939,-7.662 36.73,-16.754c6.335,-5.338 7.144,-14.801 1.806,-21.136c-5.337,-6.335 -14.801,-7.144 -21.136,-1.806c-15.497,13.058 -37.674,14.142 -54.31,2.786l-10.259,-10.259c-17.587,-17.587 -46.051,-17.589 -63.64,0l-27.426,27.426c-5.862,5.861 -15.35,5.863 -21.213,0c-5.848,-5.849 -5.849,-15.365 0,-21.213l27.435,-27.434c17.487,-17.512 42.709,-20.995 67.044,-23.061c42.152,-3.579 66.196,-26.376 90.769,-51.223c23.877,25.371 53.737,60.645 79.009,87.329C458.841,165.423 438.441,181.905 428.385,204.04z"/> android:height="24dp"
android:viewportWidth="512.0023"
android:viewportHeight="512">
<path
android:fillColor="#FF000000"
android:pathData="m507.527,171.598 l-129.145,-127.281c-5.871,-5.785 -15.309,-5.75 -21.137,0.078l-50.031,50.234c-14.863,0 -87.586,0 -102.426,0l-50.035,-50.234c-5.828,-5.828 -15.266,-5.863 -21.137,-0.078l-129.145,127.281c-2.879,2.836 -4.492,6.715 -4.473,10.754 0.02,4.043 1.668,7.902 4.574,10.711l51.723,50.004v6.367c0,18.172 5.574,35.473 15.875,50 -14.156,17.613 -13.156,43.484 3.305,59.945 7.91,7.91 18.25,12.516 29.336,13.113 0.59,10.676 4.953,21.176 13.09,29.313 8.141,8.145 18.656,12.5 29.34,13.086 0.586,10.684 4.941,21.195 13.086,29.34 15.988,15.988 41.223,17.477 58.938,4.082l10.965,10.965c8.816,8.82 20.398,13.227 31.984,13.227 11.582,0 23.168,-4.41 31.984,-13.227 4.074,-4.074 7.191,-8.762 9.375,-13.777 17.293,9.852 39.539,7.289 54.102,-7.27 8.141,-8.145 12.5,-18.656 13.082,-29.344 10.684,-0.582 21.199,-4.941 29.344,-13.082 7.91,-7.914 12.508,-18.258 13.109,-29.344 10.676,-0.59 21.18,-4.945 29.316,-13.082 8.5,-8.5 13.18,-19.801 13.18,-31.82 0,-10.492 -3.566,-20.434 -10.125,-28.441 6.586,-10.449 10.125,-22.547 10.125,-35.199v-14.852l51.723,-50.004c2.902,-2.809 4.555,-6.668 4.574,-10.711 0.016,-4.039 -1.598,-7.918 -4.477,-10.754zM36.473,182.176 L144.07,76.137 187.969,120.035c2.813,2.813 6.625,4.391 10.605,4.391h45.777l74.797,74.797c5.859,5.859 5.863,15.348 0,21.207 -5.848,5.848 -15.363,5.848 -21.211,0l-29.922,-29.918c-23.77,-23.77 -62.441,-24.324 -86.813,-0.477l-31.621,-31.621c-5.855,-5.859 -15.355,-5.859 -21.211,0 -5.859,5.859 -5.859,15.355 0,21.215l31.605,31.605 -66.262,66.262c-4.832,-8.457 -7.422,-18.059 -7.422,-28.063 0,-12.715 1.043,-18.082 -4.574,-23.512zM272.984,438.066c-5.938,5.938 -15.602,5.938 -21.543,0l-10.652,-10.656 21.711,-21.711c11.164,11.52 3.719,4.715 12.754,13.75 3.5,5.855 2.742,13.605 -2.27,18.617zM336.461,417.02c-5.852,5.848 -15.367,5.848 -21.215,0 -26.789,-26.789 2.703,2.785 -23.609,-24.363 -3.293,-5.715 -2.531,-13.137 2.395,-18.063 5.848,-5.848 15.367,-5.852 21.215,0l21.215,21.211c5.848,5.848 5.848,15.367 0,21.215zM378.887,374.594c-5.848,5.848 -15.367,5.848 -21.215,0l-42.426,-42.43c-5.863,-5.863 -5.863,-15.348 0,-21.211 5.848,-5.848 15.363,-5.848 21.215,0l42.426,42.426c5.863,5.863 5.863,15.352 0,21.215zM421.313,332.164c-5.848,5.848 -15.363,5.852 -21.215,0l-21.211,-21.211c-5.863,-5.863 -5.863,-15.352 0,-21.215 5.848,-5.848 15.363,-5.848 21.215,0 5.148,5.148 15.883,15.887 21.211,21.215 5.848,5.848 5.848,15.363 0,21.211zM430.281,225.922c-2.926,2.828 -4.574,6.719 -4.574,10.785v21.211c0,4.41 -0.793,8.699 -2.293,12.711l-2.102,-2.102c-17.543,-17.547 -46.094,-17.547 -63.641,0 -4.082,4.082 -7.273,8.816 -9.5,13.965 -17.18,-9.809 -39.492,-7.398 -54.141,7.246 -14.797,14.797 -17.035,37.117 -7.246,54.168 -6.527,2.813 -13.055,8.137 -14.18,9.258 -10.863,10.863 -59.469,59.469 -69.852,69.855 -5.852,5.848 -15.367,5.848 -21.215,0 -5.848,-5.852 -5.848,-15.363 0,-21.215 3.738,-3.738 37.105,-37.102 42.426,-42.426 5.859,-5.859 5.859,-15.355 0,-21.215 -5.855,-5.859 -15.355,-5.859 -21.211,0 -5.332,5.332 -38.07,38.07 -42.426,42.426 -5.848,5.852 -15.363,5.852 -21.215,0 -5.848,-5.848 -5.848,-15.363 0,-21.211l42.43,-42.43c5.855,-5.855 5.855,-15.355 0,-21.211 -5.859,-5.859 -15.359,-5.859 -21.215,0l-42.426,42.426c-5.863,5.863 -15.352,5.863 -21.215,0 -5.863,-5.863 -5.863,-15.348 0,-21.211 12.488,-12.488 92.789,-92.789 105.23,-105.23 12.402,-12.402 32.48,-12.406 44.887,0l29.922,29.922c17.563,17.559 46.105,17.527 63.637,0 8.496,-8.5 13.18,-19.797 13.18,-31.816s-4.684,-23.32 -13.18,-31.82l-53.586,-53.582h26.652c3.977,0 7.793,-1.582 10.605,-4.395l43.895,-43.895 107.598,106.039zM430.281,225.922"/>
</vector> </vector>
+17 -7
View File
@@ -1,8 +1,18 @@
<vector android:height="24dp" android:viewportHeight="384" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:viewportWidth="384" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:width="24dp"
<path android:fillColor="#FF000000" android:pathData="M368,80h-48V16c0,-8.832 -7.168,-16 -16,-16H48C21.528,0 0,21.528 0,48v288c0,26.472 21.528,48 48,48h288c26.472,0 48,-21.528 48,-48V96C384,87.168 376.832,80 368,80zM48,352c-8.824,0 -16,-7.176 -16,-16V48c0,-8.824 7.176,-16 16,-16h240v64v240c0,5.616 1.024,10.984 2.8,16H48zM352,336c0,8.824 -7.176,16 -16,16c-8.824,0 -16,-7.176 -16,-16V112h32V336z"/> android:height="24dp"
<path android:fillColor="#FF000000" android:pathData="M240,80H80c-8.832,0 -16,7.168 -16,16c0,8.832 7.168,16 16,16h160c8.832,0 16,-7.168 16,-16C256,87.168 248.832,80 240,80z"/> android:viewportWidth="512"
<path android:fillColor="#FF000000" android:pathData="M208,176H80c-8.832,0 -16,7.168 -16,16c0,8.832 7.168,16 16,16h128c8.832,0 16,-7.168 16,-16C224,183.168 216.832,176 208,176z"/> android:viewportHeight="512">
<path android:fillColor="#FF000000" android:pathData="M192,224H80c-8.832,0 -16,7.168 -16,16c0,8.832 7.168,16 16,16h112c8.832,0 16,-7.168 16,-16C208,231.168 200.832,224 192,224z"/> <path
<path android:fillColor="#FF000000" android:pathData="M176,272H80c-8.832,0 -16,7.168 -16,16c0,8.832 7.168,16 16,16h96c8.832,0 16,-7.168 16,-16C192,279.168 184.832,272 176,272z"/> android:fillColor="#FF000000"
android:pathData="m171.102,100.332h170.664v30h-170.664zM171.102,100.332"/>
<path
android:fillColor="#FF000000"
android:pathData="m171.102,175h96v30h-96zM171.102,175"/>
<path
android:fillColor="#FF000000"
android:pathData="m171.102,324.332h30v30h-30zM171.102,324.332"/>
<path
android:fillColor="#FF000000"
android:pathData="m506.867,91.09v-33.438c0,-31.789 -25.863,-57.652 -57.652,-57.652h-300.43c-31.68,0 -57.453,25.773 -57.453,57.453l-0.023,363.457h-85.309v33.438c0,31.789 25.863,57.652 57.652,57.652h300.43c9.898,0 19.223,-2.516 27.363,-6.945 17.906,-9.742 30.09,-28.73 30.09,-50.508l0.012,-145.172 42.77,-42.77c29.008,-29.004 44.449,-69.137 42.363,-110.109l-1.789,-35.188 -35.184,-1.789c-16.406,-0.832 -32.672,1.148 -48.148,5.68l0.004,-34.109zM476.867,57.652v3.438h-55.305v-3.438c0,-15.246 12.406,-27.652 27.652,-27.652 15.25,0 27.652,12.406 27.652,27.652zM36,454.348v-3.438h270.23v3.438c0,10.016 2.566,19.438 7.078,27.652h-249.656c-15.25,0 -27.652,-12.406 -27.652,-27.652zM468.184,149.484 L476.309,149.898 476.719,158.02c1.652,32.512 -10.602,64.355 -33.617,87.375l-8.801,8.801 -16.063,-16.063 -21.215,21.215 16.063,16.059 -48.844,48.844h-41.078l43.691,-43.691 -21.215,-21.211 -43.691,43.688v-41.078l71.473,-71.469 16.059,16.059 21.215,-21.211 -14.871,-14.871c20.941,-14.77 46.438,-22.301 72.359,-20.98zM359.598,161.887 L271.953,249.531v0.133h-100.852v30h100.852v53.375l-40.859,40.859 21.211,21.215 40.859,-40.863h83.508l14.871,-14.871 -0.008,115.004v0.02,0.004c-0.031,15.215 -12.43,27.594 -27.652,27.594 -15.246,0 -27.652,-12.406 -27.652,-27.652v-33.438h-214.922l0.023,-363.457c0,-15.137 12.316,-27.453 27.453,-27.453h249.773c-4.457,8.164 -6.996,17.516 -6.996,27.453l-0.004,80.316c-11.617,6.473 -22.398,14.551 -31.961,24.117zM359.598,161.887"/>
</vector> </vector>
+12
View File
@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:fillColor="#FF000000"
android:pathData="m112.516,95.313c-4.625,0 -8.973,1.801 -12.25,5.074 -6.75,6.754 -6.746,17.742 0.004,24.492 3.273,3.273 7.621,5.074 12.246,5.074s8.977,-1.801 12.25,-5.074c6.75,-6.75 6.75,-17.738 -0.004,-24.496 -3.273,-3.27 -7.621,-5.07 -12.246,-5.07zM112.516,95.313"/>
<path
android:fillColor="#FF000000"
android:pathData="m444.926,172.789 l67.02,-172.789 -172.789,67.02 -79.016,79.016 -145.922,-145.918 -114.219,114.219 145.922,145.922 -107.891,107.891 -24.281,24.277c-8.758,8.762 -13.586,20.41 -13.586,32.801 0,12.391 4.828,24.035 13.586,32.801l40.168,40.168c9.043,9.043 20.922,13.563 32.801,13.563s23.758,-4.52 32.801,-13.563l132.172,-132.172 145.973,145.977 114.219,-114.219 -145.973,-145.977zM122.723,410.43 L389.809,143.344 410.883,164.418 143.797,431.504zM426.426,137.551 L374.395,85.52 459.398,52.551zM146.121,218.047 L173.922,190.246 152.715,169.039 124.914,196.84 42.414,114.336 114.219,42.527 238.934,167.242 167.129,239.051zM347.527,101.063 L368.602,122.137 101.52,389.223 80.441,368.148zM98.316,476.988c-3.098,3.098 -7.215,4.801 -11.598,4.801 -4.379,0 -8.496,-1.703 -11.594,-4.801l-40.168,-40.168c-3.094,-3.098 -4.801,-7.215 -4.801,-11.594 0,-4.379 1.707,-8.5 4.801,-11.594l24.281,-24.281 63.355,63.359zM469.473,397.781 L397.664,469.59 357.527,429.453 385.328,401.652 364.121,380.445 336.324,408.246 315.246,387.172 343.047,359.371 321.84,338.164 294.039,365.965 272.895,344.82 344.703,273.012zM469.473,397.781"/>
</vector>
-4
View File
@@ -1,4 +0,0 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512.00037" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="m484.887,62.008 l-34.895,-34.895c-17.484,-17.484 -40.73,-27.113 -65.461,-27.113 -24.727,0 -47.973,9.629 -65.457,27.113l-282.547,282.547c-2.156,2.156 -3.605,4.922 -4.152,7.922l-32.133,176.734c-0.879,4.844 0.672,9.809 4.152,13.289 2.836,2.84 6.664,4.395 10.605,4.395 0.891,0 1.789,-0.078 2.684,-0.242l176.734,-32.133c3,-0.543 5.766,-1.992 7.922,-4.152l282.547,-282.547c17.484,-17.484 27.113,-40.73 27.113,-65.461 0,-24.727 -9.629,-47.973 -27.113,-65.457zM459.719,79.266 L172.625,366.359c-7.891,-10.027 -16.953,-19.094 -26.984,-26.984l287.094,-287.094zM50.195,387.273 L59.543,335.863c61.578,5.879 110.715,55.02 116.594,116.594l-51.41,9.348c-7.195,-37.621 -36.91,-67.336 -74.531,-74.531zM340.289,48.328c11.816,-11.82 27.527,-18.328 44.246,-18.328 8.188,0 16.133,1.57 23.5,4.555l-288.238,288.234c-12.43,-6.383 -25.805,-11.176 -39.848,-14.125zM44.828,416.801c25.371,4.969 45.402,25 50.371,50.371l-61.566,11.195zM463.676,171.715 L203.336,432.051c-2.949,-14.043 -7.742,-27.418 -14.125,-39.848l288.234,-288.234c2.984,7.367 4.555,15.313 4.555,23.5 0,16.715 -6.508,32.426 -18.324,44.246zM463.676,171.715"/>
</vector>
+5 -2
View File
@@ -1,5 +1,8 @@
<vector android:height="24dp" android:viewportHeight="502.16888" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:viewportWidth="502" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:width="24dp"
android:height="24dp"
android:viewportWidth="502"
android:viewportHeight="502.16888">
<path android:fillColor="#FF000000" android:pathData="m251.047,187.023c-35.332,0 -63.98,28.645 -63.98,63.98 0,35.328 28.648,63.977 63.98,63.977 35.336,0 63.977,-28.648 63.977,-63.977 -0.039,-35.32 -28.656,-63.941 -63.977,-63.98zM251.047,272.328c-11.777,0 -21.324,-9.547 -21.324,-21.324 0,-11.781 9.547,-21.332 21.324,-21.332 11.781,0 21.328,9.551 21.328,21.332 -0.016,11.77 -9.555,21.309 -21.328,21.324zM251.047,272.328"/> <path android:fillColor="#FF000000" android:pathData="m251.047,187.023c-35.332,0 -63.98,28.645 -63.98,63.98 0,35.328 28.648,63.977 63.98,63.977 35.336,0 63.977,-28.648 63.977,-63.977 -0.039,-35.32 -28.656,-63.941 -63.977,-63.98zM251.047,272.328c-11.777,0 -21.324,-9.547 -21.324,-21.324 0,-11.781 9.547,-21.332 21.324,-21.332 11.781,0 21.328,9.551 21.328,21.332 -0.016,11.77 -9.555,21.309 -21.328,21.324zM251.047,272.328"/>
<path android:fillColor="#FF000000" android:pathData="m479.391,22.656c-29.367,-29.363 -81.313,-30.211 -146.262,-2.379 -28.801,12.684 -56.289,28.152 -82.082,46.18 -25.789,-18.027 -53.281,-33.496 -82.078,-46.18 -64.945,-27.832 -116.895,-26.988 -146.262,2.379 -42.605,42.609 -22.988,131.824 43.52,228.348 -66.508,96.52 -86.125,185.734 -43.52,228.34 15.098,15.098 36.16,22.656 61.891,22.656 24.32,0 52.816,-6.758 84.371,-20.277 28.797,-12.684 56.289,-28.152 82.078,-46.18 25.793,18.027 53.281,33.496 82.082,46.18 31.559,13.52 60.047,20.277 84.367,20.277 25.723,0 46.797,-7.559 61.895,-22.66 42.598,-42.602 22.984,-131.82 -43.523,-228.34 66.512,-96.52 86.125,-185.734 43.523,-228.344zM349.93,59.484c26.199,-11.23 49.438,-16.918 67.543,-16.918 13.977,0 24.898,3.395 31.758,10.254 22.68,22.68 7.504,86.875 -40.656,161.488 -17.852,-22.27 -36.93,-43.539 -57.141,-63.691 -20.242,-20.27 -41.625,-39.371 -64.035,-57.219 19.848,-13.047 40.766,-24.395 62.531,-33.914zM382.754,251.004c-18.891,24.762 -39.43,48.223 -61.48,70.219 -22.02,22.086 -45.48,42.688 -70.227,61.664 -24.742,-18.977 -48.203,-39.578 -70.223,-61.664 -22.051,-21.996 -42.59,-45.457 -61.48,-70.219 18.891,-24.77 39.43,-48.23 61.48,-70.227 22.02,-22.082 45.48,-42.688 70.223,-61.664 24.746,18.977 48.207,39.582 70.227,61.664 22.051,21.996 42.59,45.457 61.48,70.227zM52.867,52.82c6.855,-6.859 17.77,-10.254 31.758,-10.254 18.102,0 41.344,5.688 67.539,16.918 21.77,9.52 42.688,20.863 62.539,33.914 -22.414,17.844 -43.793,36.945 -64.039,57.215 -20.215,20.156 -39.289,41.422 -57.141,63.695 -48.16,-74.613 -63.336,-138.809 -40.656,-161.488zM152.164,442.516c-46.441,19.906 -83.563,22.395 -99.297,6.664 -22.68,-22.68 -7.508,-86.875 40.652,-161.488 17.855,22.27 36.93,43.539 57.145,63.691 20.242,20.27 41.621,39.371 64.035,57.219 -19.848,13.047 -40.766,24.395 -62.535,33.914zM449.23,449.18c-15.73,15.73 -52.855,13.242 -99.301,-6.664 -21.766,-9.52 -42.684,-20.863 -62.531,-33.914 22.41,-17.844 43.793,-36.945 64.035,-57.215 20.211,-20.156 39.289,-41.422 57.141,-63.695 48.16,74.613 63.336,138.809 40.656,161.488zM449.23,449.18"/> <path android:fillColor="#FF000000" android:pathData="m479.391,22.656c-29.367,-29.363 -81.313,-30.211 -146.262,-2.379 -28.801,12.684 -56.289,28.152 -82.082,46.18 -25.789,-18.027 -53.281,-33.496 -82.078,-46.18 -64.945,-27.832 -116.895,-26.988 -146.262,2.379 -42.605,42.609 -22.988,131.824 43.52,228.348 -66.508,96.52 -86.125,185.734 -43.52,228.34 15.098,15.098 36.16,22.656 61.891,22.656 24.32,0 52.816,-6.758 84.371,-20.277 28.797,-12.684 56.289,-28.152 82.078,-46.18 25.793,18.027 53.281,33.496 82.082,46.18 31.559,13.52 60.047,20.277 84.367,20.277 25.723,0 46.797,-7.559 61.895,-22.66 42.598,-42.602 22.984,-131.82 -43.523,-228.34 66.512,-96.52 86.125,-185.734 43.523,-228.344zM349.93,59.484c26.199,-11.23 49.438,-16.918 67.543,-16.918 13.977,0 24.898,3.395 31.758,10.254 22.68,22.68 7.504,86.875 -40.656,161.488 -17.852,-22.27 -36.93,-43.539 -57.141,-63.691 -20.242,-20.27 -41.625,-39.371 -64.035,-57.219 19.848,-13.047 40.766,-24.395 62.531,-33.914zM382.754,251.004c-18.891,24.762 -39.43,48.223 -61.48,70.219 -22.02,22.086 -45.48,42.688 -70.227,61.664 -24.742,-18.977 -48.203,-39.578 -70.223,-61.664 -22.051,-21.996 -42.59,-45.457 -61.48,-70.219 18.891,-24.77 39.43,-48.23 61.48,-70.227 22.02,-22.082 45.48,-42.688 70.223,-61.664 24.746,18.977 48.207,39.582 70.227,61.664 22.051,21.996 42.59,45.457 61.48,70.227zM52.867,52.82c6.855,-6.859 17.77,-10.254 31.758,-10.254 18.102,0 41.344,5.688 67.539,16.918 21.77,9.52 42.688,20.863 62.539,33.914 -22.414,17.844 -43.793,36.945 -64.039,57.215 -20.215,20.156 -39.289,41.422 -57.141,63.695 -48.16,-74.613 -63.336,-138.809 -40.656,-161.488zM152.164,442.516c-46.441,19.906 -83.563,22.395 -99.297,6.664 -22.68,-22.68 -7.508,-86.875 40.652,-161.488 17.855,22.27 36.93,43.539 57.145,63.691 20.242,20.27 41.621,39.371 64.035,57.219 -19.848,13.047 -40.766,24.395 -62.535,33.914zM449.23,449.18c-15.73,15.73 -52.855,13.242 -99.301,-6.664 -21.766,-9.52 -42.684,-20.863 -62.531,-33.914 22.41,-17.844 43.793,-36.945 64.035,-57.215 20.211,-20.156 39.289,-41.422 57.141,-63.695 48.16,74.613 63.336,138.809 40.656,161.488zM449.23,449.18"/>
</vector> </vector>
+14 -3
View File
@@ -1,4 +1,15 @@
<vector android:height="24dp" android:viewportHeight="512" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:width="24dp"
<path android:fillColor="#FF000000" android:pathData="M365,95l-18,24l34,25.5V202h-40v-37c0,-21.975 -12.959,-40.973 -31.632,-49.775C319.73,103.016 326,87.231 326,70c0,-38.598 -31.401,-70 -70,-70s-70,31.402 -70,70c0,17.231 6.27,33.016 16.632,45.225C183.959,124.027 171,143.025 171,165v37h-40v-57.5l34,-25.5l-18,-24l-46,34.5V322h60v190h190V322h60V129.5L365,95zM256,30c22.056,0 40,17.944 40,40s-17.944,40 -40,40s-40,-17.944 -40,-40S233.944,30 256,30zM201,165c0,-13.785 11.215,-25 25,-25h60c13.785,0 25,11.215 25,25v37H201V165zM321,482H191V292h130V482zM381,292h-30v-30H161v30h-30v-60h250V292z"/> android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="m12,6c1.654,0 3,-1.346 3,-3s-1.346,-3 -3,-3 -3,1.346 -3,3 1.346,3 3,3zM12,1.5c0.827,0 1.5,0.673 1.5,1.5s-0.673,1.5 -1.5,1.5 -1.5,-0.673 -1.5,-1.5 0.673,-1.5 1.5,-1.5z"/>
<path
android:fillColor="#FF000000"
android:pathData="m15.846,13.294c-0.143,-0.186 -0.363,-0.294 -0.596,-0.294h-6.5c-0.233,0 -0.453,0.108 -0.596,0.294 -0.142,0.185 -0.189,0.426 -0.129,0.651l1.75,6.5c0.089,0.327 0.386,0.555 0.725,0.555h3c0.339,0 0.636,-0.228 0.725,-0.555l1.75,-6.5c0.06,-0.225 0.012,-0.466 -0.129,-0.651zM12.925,19.5h-1.85l-1.347,-5h4.543z"/>
<path
android:fillColor="#FF000000"
android:pathData="m3,23.25c0,0.414 0.336,0.75 0.75,0.75h4.25,8 4.25c0.414,0 0.75,-0.336 0.75,-0.75s-0.336,-0.75 -0.75,-0.75h-3.28l3.006,-11.561c0.059,-0.225 0.01,-0.464 -0.132,-0.648 -0.143,-0.184 -0.362,-0.291 -0.594,-0.291h-2.25v-0.03c0,-1.637 -1.278,-2.97 -2.85,-2.97h-4.3c-1.572,0 -2.85,1.333 -2.85,2.97v0.03h-2.25c-0.232,0 -0.451,0.107 -0.594,0.291 -0.142,0.184 -0.19,0.423 -0.132,0.648l3.006,11.561h-3.28c-0.414,0 -0.75,0.336 -0.75,0.75zM8.5,9.97c0,-0.81 0.605,-1.47 1.35,-1.47h4.301c0.744,0 1.35,0.66 1.35,1.47v0.03h-7v-0.03zM5.72,11.5h12.56l-2.86,11h-6.84z"/>
</vector> </vector>
+11 -12
View File
@@ -1,13 +1,12 @@
<vector android:height="24dp" android:viewportHeight="512" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:width="24dp"
<path android:fillColor="#FF000000" android:pathData="m48.965,187.48c-5.523,0 -10,4.477 -10,10v16.535c0,5.52 4.477,10 10,10 5.52,0 10,-4.48 10,-10v-16.535c0,-5.523 -4.48,-10 -10,-10zM48.965,187.48"/> android:height="24dp"
<path android:fillColor="#FF000000" android:pathData="m462.367,224.016c5.523,0 10,-4.48 10,-10v-16.535c0,-5.523 -4.477,-10 -10,-10 -5.523,0 -10,4.477 -10,10v16.535c0,5.52 4.477,10 10,10zM462.367,224.016"/> android:viewportWidth="512"
<path android:fillColor="#FF000000" android:pathData="m246.77,262.328c1.598,3.902 5.668,6.449 9.883,6.16 4.121,-0.285 7.699,-3.133 8.91,-7.078 1.207,-3.934 -0.223,-8.324 -3.477,-10.832 -3.398,-2.617 -8.25,-2.738 -11.773,-0.293 -3.816,2.652 -5.336,7.746 -3.543,12.043zM246.77,262.328"/> android:viewportHeight="512">
<path android:fillColor="#FF000000" android:pathData="m502,153.496h-1.004v-7.691c0,-5.523 -4.477,-10 -10,-10 -5.523,0 -10,4.477 -10,10v7.691h-8.629v-7.691c0,-5.523 -4.477,-10 -10,-10 -5.523,0 -10,4.477 -10,10v7.691h-8.629v-7.691c0,-5.523 -4.477,-10 -10,-10 -5.52,0 -10,4.477 -10,10v7.719c-5.266,0.285 -9.449,4.633 -9.449,9.973v44.723h-16.824v-167.219c0,-5.523 -4.48,-10 -10,-10h-43.898c-5.523,0 -10,4.477 -10,10v13.379h-9.094v-13.379c0,-5.523 -4.48,-10 -10,-10h-43.902c-5.52,0 -10,4.477 -10,10v13.379h-9.09v-13.379c0,-5.523 -4.477,-10 -10,-10h-43.902c-5.523,0 -10,4.477 -10,10v13.379h-9.094v-13.379c0,-5.523 -4.477,-10 -10,-10h-43.898c-5.523,0 -10,4.477 -10,10v167.219h-17.336v-44.727c0,-5.406 -4.297,-9.801 -9.656,-9.98v-7.711c0,-5.52 -4.48,-10 -10,-10 -5.523,0 -10,4.48 -10,10v7.691h-8.629v-7.691c0,-5.52 -4.477,-10 -10,-10 -5.523,0 -10,4.48 -10,10v7.691h-8.629v-7.691c0,-5.52 -4.477,-10 -10,-10 -5.523,0 -10,4.48 -10,10v7.691h-0.336c-5.523,0 -10,4.48 -10,10v238.5c0,5.52 4.477,10 10,10h3.563v49.789h-3.563c-5.523,0 -10,4.48 -10,10 0,5.523 4.477,10 10,10h492c5.523,0 10,-4.477 10,-10 0,-5.52 -4.477,-10 -10,-10h-7.234v-49.789h7.234c5.523,0 10,-4.48 10,-10v-238.496c0,-5.523 -4.477,-10 -10,-10zM134.586,51h23.898v13.379c0,5.523 4.48,10 10,10h29.094c5.523,0 10,-4.477 10,-10v-13.379h23.902v13.379c0,5.523 4.477,10 10,10h29.09c5.523,0 10,-4.477 10,-10v-13.379h23.902v13.379c0,5.523 4.477,10 10,10h29.094c5.52,0 10,-4.477 10,-10v-13.379h23.898v157.219h-242.879zM424.289,228.219c5.52,0 10,-4.48 10,-10v-44.727h57.711v75.016h-197.051c-5.52,0 -10,4.48 -10,10 0,5.523 4.48,10 10,10h197.051v20.918h-472v-20.918h197.031c5.523,0 10,-4.477 10,-10 0,-5.52 -4.477,-10 -10,-10h-197.031v-75.016h57.25v44.727c0,5.52 4.477,10 10,10zM492,391.992h-13.48v-6.914c0,-22.313 -18.156,-40.461 -40.473,-40.461 -22.313,0 -40.461,18.148 -40.461,40.461v6.914h-10.461v-6.914c0,-22.313 -18.152,-40.461 -40.461,-40.461 -22.313,0 -40.461,18.148 -40.461,40.461v6.914h-10.465v-28.285c0,-22.309 -18.152,-40.461 -40.469,-40.461 -22.313,0 -40.461,18.152 -40.461,40.461v28.285h-10.461v-6.914c0,-22.313 -18.152,-40.461 -40.461,-40.461 -22.313,0 -40.461,18.148 -40.461,40.461v6.914h-10.461v-6.914c0,-22.313 -18.152,-40.461 -40.461,-40.461 -22.316,0 -40.473,18.148 -40.473,40.461v6.914h-12.031v-82.563h90.043v29.266c0,5.523 4.477,10 10,10 5.523,0 10,-4.477 10,-10v-29.266h69.16v15.586c0,5.52 4.477,10 10,10s10,-4.48 10,-10v-15.586h71.805v15.586c0,5.52 4.48,10 10,10 5.523,0 10,-4.48 10,-10v-15.586h71.453v29.266c0,5.523 4.477,10 10,10 5.52,0 10,-4.477 10,-10v-29.266h89.539zM133.426,411.992c5.52,0 10,-4.48 10,-10v-16.914c0,-11.281 9.176,-20.461 20.461,-20.461 11.281,0 20.461,9.18 20.461,20.461v16.914c0,5.52 4.477,10 10,10h4.855v49.789h-71.809v-49.789zM219.203,411.992h5.605c5.523,0 10,-4.48 10,-10v-38.285c0,-11.281 9.18,-20.461 20.461,-20.461 11.285,0 20.469,9.18 20.469,20.461v38.285c0,5.52 4.48,10 10,10h5.27v49.789h-71.805zM311.008,411.992h5.195c5.52,0 10,-4.48 10,-10v-16.914c0,-11.281 9.18,-20.461 20.461,-20.461s20.461,9.18 20.461,20.461v16.914c0,5.52 4.477,10 10,10h5.336v49.789h-71.453zM33.563,411.992h8.469c5.523,0 10,-4.48 10,-10v-16.914c0,-11.281 9.184,-20.461 20.469,-20.461s20.461,9.18 20.461,20.461v16.914c0,5.52 4.477,10 10,10h4.434v49.789h-73.832zM474.766,461.781h-72.305v-49.789h5.125c5.523,0 10,-4.48 10,-10v-16.914c0,-11.281 9.18,-20.461 20.461,-20.461 11.289,0 20.473,9.18 20.473,20.461v16.914c0,5.52 4.477,10 10,10h6.246zM474.766,461.781"/> <path
<path android:fillColor="#FF000000" android:pathData="m169.746,123.281c5.523,0 10,-4.477 10,-10v-10.195c0,-5.523 -4.477,-10 -10,-10 -5.523,0 -10,4.477 -10,10v10.195c0,5.523 4.477,10 10,10zM169.746,123.281"/> android:fillColor="#FF000000"
<path android:fillColor="#FF000000" android:pathData="m213.535,123.281c5.523,0 10,-4.477 10,-10v-10.195c0,-5.523 -4.477,-10 -10,-10 -5.523,0 -10,4.477 -10,10v10.195c0,5.523 4.477,10 10,10zM213.535,123.281"/> android:pathData="M460.995,413.138c-0.099,-79.172 -3.234,-153.534 -8.857,-209.763c-2.821,-28.208 -6.14,-50.499 -9.864,-66.251c-2.138,-9.042 -5.64,-23.813 -14.516,-30.971C432.746,102.516 436,96.645 436,90c0,-11.046 -8.954,-20 -20,-20c-11.046,0 -20,8.954 -20,20c0,6.671 3.279,12.563 8.299,16.196c-7.514,6.097 -10.809,17.24 -12.324,22.377c-3.21,10.886 -6.178,26.444 -8.819,46.242c-4.986,37.369 -8.635,87.756 -10.59,146.068c-0.918,1.003 -1.765,2.08 -2.518,3.237c-1.453,-69.543 -4.528,-132.812 -8.91,-182.051c-2.755,-30.95 -5.927,-55.29 -9.428,-72.343c-2.138,-10.417 -5.347,-26.005 -14.106,-33.457C342.68,32.642 346,26.715 346,20c0,-11.046 -8.954,-20 -20,-20c-11.046,0 -20,8.954 -20,20c0,6.718 3.323,12.648 8.404,16.274c-8.299,7.064 -11.447,21.268 -13.378,29.998c-3.321,15.017 -6.368,36.539 -9.058,63.97c-2.737,27.906 -5.038,61.425 -6.814,98.65L271,218.434v-29.235c3.103,-3.523 5,-8.134 5,-13.198c0,-11.046 -8.954,-20 -20,-20c-11.046,0 -20,8.954 -20,20c0,5.064 1.897,9.675 5,13.198v29.224l-14.183,9.846c-1.777,-37.075 -4.076,-70.455 -6.806,-98.245c-2.689,-27.366 -5.734,-48.836 -9.051,-63.815c-1.929,-8.711 -5.075,-22.882 -13.363,-29.935C202.677,32.646 206,26.717 206,20c0,-11.046 -8.954,-20 -20,-20s-20,8.954 -20,20c0,6.715 3.32,12.642 8.397,16.27c-8.759,7.451 -11.968,23.04 -14.107,33.457c-3.501,17.054 -6.673,41.395 -9.428,72.345c-4.383,49.239 -7.457,112.507 -8.91,182.049c-0.753,-1.158 -1.6,-2.234 -2.518,-3.237c-1.956,-58.312 -5.605,-108.699 -10.59,-146.068c-2.641,-19.798 -5.608,-35.356 -8.819,-46.242c-1.515,-5.137 -4.81,-16.28 -12.324,-22.377C112.721,102.563 116,96.671 116,90c0,-11.046 -8.954,-20 -20,-20s-20,8.954 -20,20c0,6.645 3.254,12.516 8.241,16.153c-8.876,7.157 -12.378,21.928 -14.516,30.971c-3.724,15.753 -7.043,38.043 -9.864,66.251c-5.623,56.229 -8.758,130.59 -8.857,209.763L51,413.147V512h410v-98.853L460.995,413.138zM411.368,191.014c1.572,-13.496 3.15,-24.147 4.633,-32.53c2.434,13.768 5.127,33.656 7.63,62.234c3.43,39.151 5.747,86.36 6.771,136.797l-17.497,-31.813c-2.379,-4.326 -5.937,-7.754 -10.142,-9.998C404.501,267.484 407.456,224.593 411.368,191.014zM270.999,255.735l12.636,9.337c-0.247,6.769 -0.477,13.629 -0.691,20.573l-4.886,-9.161c-1.756,-3.292 -4.186,-6.069 -7.059,-8.226V255.735zM241,254.942v13.316c-2.872,2.156 -5.303,4.935 -7.059,8.227l-4.885,9.159c-0.228,-7.397 -0.474,-14.699 -0.74,-21.897L241,254.942zM88.368,220.719c2.503,-28.578 5.196,-48.467 7.63,-62.234c1.483,8.383 3.062,19.034 4.633,32.53c3.912,33.579 6.866,76.47 8.605,124.69c-4.205,2.244 -7.762,5.672 -10.142,9.998l-17.497,31.813C82.622,307.078 84.939,259.869 88.368,220.719zM161,482h-25v-30h-30v30H81v-61.147l40,-72.728l40,72.728V482zM171.176,377.102c0.71,-81.414 3.65,-158.455 8.299,-217.233c2.171,-27.46 4.427,-47.62 6.522,-62.385c1.762,12.414 3.639,28.64 5.485,49.81c4.516,51.792 7.573,118.195 8.856,192.199l-24.54,46.013L171.176,377.102zM321,482h-20v-30h-30v30h-30v-30h-30v30h-20v-61.25l65,-121.875l65,121.875V482zM336.203,385.505l-24.54,-46.012c1.28,-73.887 4.33,-140.198 8.836,-191.97c1.852,-21.282 3.736,-37.579 5.504,-50.038c2.095,14.765 4.35,34.923 6.522,62.383c4.648,58.778 7.588,135.819 8.3,217.233L336.203,385.505zM431,482h-25v-30h-30v30h-25v-61.147l40,-72.728l40,72.728V482z"/>
<path android:fillColor="#FF000000" android:pathData="m257.32,123.281c5.523,0 10,-4.477 10,-10v-10.195c0,-5.523 -4.477,-10 -10,-10 -5.52,0 -10,4.477 -10,10v10.195c0,5.523 4.48,10 10,10zM257.32,123.281"/> <path
<path android:fillColor="#FF000000" android:pathData="m301.109,123.281c5.523,0 10,-4.477 10,-10v-10.195c0,-5.523 -4.477,-10 -10,-10 -5.52,0 -10,4.477 -10,10v10.195c0,5.523 4.48,10 10,10zM301.109,123.281"/> android:fillColor="#FF000000"
<path android:fillColor="#FF000000" android:pathData="m344.898,93.086c-5.523,0 -10,4.477 -10,10v10.195c0,5.523 4.477,10 10,10 5.523,0 10,-4.477 10,-10v-10.195c0,-5.523 -4.477,-10 -10,-10zM344.898,93.086"/> android:pathData="M256,396m-20,0a20,20 0,1 1,40 0a20,20 0,1 1,-40 0"/>
<path android:fillColor="#FF000000" android:pathData="m344.898,139.938h-175.152c-5.523,0 -10,4.477 -10,10v30.332c0,5.523 4.477,10 10,10h29.094c5.523,0 10,-4.477 10,-10v-20.332h22.637v20.332c0,5.523 4.477,10 10,10h29.094c5.523,0 10,-4.477 10,-10v-20.332h25.234v20.332c0,5.523 4.477,10 10,10h29.094c5.523,0 10,-4.477 10,-10v-30.332c0,-5.523 -4.477,-10 -10,-10zM188.84,170.27h-9.094v-10.332h9.094zM260.57,170.27h-9.094v-10.332h9.094zM334.898,170.27h-9.094v-10.332h9.094zM334.898,170.27"/>
</vector> </vector>