This commit is contained in:
Tommaso Berlose 2020-05-04 01:46:22 +02:00
parent dd6b631868
commit 55b3a02da5
11 changed files with 404 additions and 40 deletions

View File

@ -3,16 +3,29 @@ package com.tommasoberlose.anotherwidget.components
import android.content.Context import android.content.Context
import android.content.res.ColorStateList import android.content.res.ColorStateList
import android.graphics.Color import android.graphics.Color
import android.text.Editable
import android.text.TextWatcher
import android.util.Log
import android.view.View import android.view.View
import android.widget.GridLayout import android.widget.GridLayout
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.core.widget.addTextChangedListener
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import com.tommasoberlose.anotherwidget.R import com.tommasoberlose.anotherwidget.R
import com.tommasoberlose.anotherwidget.helpers.ColorHelper
import com.tommasoberlose.anotherwidget.helpers.ColorHelper.isColorDark import com.tommasoberlose.anotherwidget.helpers.ColorHelper.isColorDark
import com.tommasoberlose.anotherwidget.utils.expand
import com.tommasoberlose.anotherwidget.utils.reveal
import kotlinx.android.synthetic.main.bottom_sheet_menu_hor.*
import kotlinx.android.synthetic.main.bottom_sheet_menu_hor.view.* import kotlinx.android.synthetic.main.bottom_sheet_menu_hor.view.*
import kotlinx.android.synthetic.main.bottom_sheet_menu_hor.view.color_loader
import kotlinx.android.synthetic.main.color_picker_menu_item.view.* import kotlinx.android.synthetic.main.color_picker_menu_item.view.*
import kotlinx.coroutines.*
import java.lang.Exception
import java.util.prefs.Preferences
class BottomSheetColorPicker( class BottomSheetColorPicker(
context: Context, context: Context,
@ -22,6 +35,8 @@ class BottomSheetColorPicker(
private val onColorSelected: ((selectedValue: Int) -> Unit)? = null private val onColorSelected: ((selectedValue: Int) -> Unit)? = null
) : BottomSheetDialog(context, R.style.BottomSheetDialogTheme) { ) : BottomSheetDialog(context, R.style.BottomSheetDialogTheme) {
private val loadingJob: Job? = null
override fun show() { override fun show() {
val view = View.inflate(context, R.layout.bottom_sheet_menu_hor, null) val view = View.inflate(context, R.layout.bottom_sheet_menu_hor, null)
@ -29,27 +44,45 @@ class BottomSheetColorPicker(
view.header.isVisible = header != null view.header.isVisible = header != null
view.header_text.text = header ?: "" view.header_text.text = header ?: ""
// Menu val itemViews: ArrayList<View> = ArrayList()
for (@ColorInt color: Int in colors) {
val itemView = View.inflate(context, R.layout.color_picker_menu_item, null) GlobalScope.launch(Dispatchers.IO) {
itemView.color.setCardBackgroundColor(ColorStateList.valueOf(color)) for (@ColorInt color: Int in colors) {
itemView.check.setColorFilter(ContextCompat.getColor(context, val itemView = View.inflate(context, R.layout.color_picker_menu_item, null)
if (color.isColorDark()) android.R.color.white else android.R.color.black itemView.color.setCardBackgroundColor(ColorStateList.valueOf(color))
), android.graphics.PorterDuff.Mode.MULTIPLY) itemView.check.setColorFilter(ContextCompat.getColor(context,
itemView.check.isVisible = selected == color if (color.isColorDark()) android.R.color.white else android.R.color.black
itemView.color.setOnClickListener { ), android.graphics.PorterDuff.Mode.MULTIPLY)
onColorSelected?.invoke(color) itemView.check.isVisible = selected == color
this.dismiss() itemView.color.setOnClickListener {
onColorSelected?.invoke(color)
this@BottomSheetColorPicker.dismiss()
}
itemViews.add(itemView)
}
withContext(Dispatchers.Main) {
itemViews.forEach {
view.menu.addView(it, GridLayout.LayoutParams(
GridLayout.spec(GridLayout.UNDEFINED, 1f),
GridLayout.spec(GridLayout.UNDEFINED, 1f)
))
}
color_loader.isVisible = false
view.menu.isVisible = true
this@BottomSheetColorPicker.behavior.state = BottomSheetBehavior.STATE_EXPANDED
} }
view.menu.addView(itemView, GridLayout.LayoutParams(
GridLayout.spec(GridLayout.UNDEFINED, 1f),
GridLayout.spec(GridLayout.UNDEFINED, 1f)
)
)
} }
// Menu
setContentView(view) setContentView(view)
super.show() super.show()
} }
override fun onStop() {
loadingJob?.cancel()
super.onStop()
}
} }

View File

@ -7,12 +7,13 @@ import java.util.*
object AlarmHelper { object AlarmHelper {
fun getNextAlarm(context: Context): String = with(context.getSystemService(Context.ALARM_SERVICE) as AlarmManager) { fun getNextAlarm(context: Context): String = with(context.getSystemService(Context.ALARM_SERVICE) as AlarmManager) {
val alarm = nextAlarmClock
return if ( return if (
nextAlarmClock != null alarm != null
&& nextAlarmClock.triggerTime - Calendar.getInstance().timeInMillis > 2 * 60 * 1000 && alarm.triggerTime - Calendar.getInstance().timeInMillis > 2 * 60 * 1000
&& nextAlarmClock.triggerTime - Calendar.getInstance().timeInMillis < 24 * 60 * 60 * 1000 && alarm.triggerTime - Calendar.getInstance().timeInMillis < 24 * 60 * 60 * 1000
) { ) {
DateFormat.getTimeFormat(context).format(Date(nextAlarmClock.triggerTime)) DateFormat.getTimeFormat(context).format(Date(alarm.triggerTime))
} else { } else {
"" ""
} }

View File

@ -29,6 +29,7 @@ import com.tommasoberlose.anotherwidget.ui.activities.SupportDevActivity
import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel
import com.tommasoberlose.anotherwidget.helpers.CalendarHelper import com.tommasoberlose.anotherwidget.helpers.CalendarHelper
import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget import com.tommasoberlose.anotherwidget.ui.widgets.MainWidget
import com.tommasoberlose.anotherwidget.utils.checkGrantedPermission
import com.tommasoberlose.anotherwidget.utils.openURI import com.tommasoberlose.anotherwidget.utils.openURI
import kotlinx.android.synthetic.main.fragment_advanced_settings.* import kotlinx.android.synthetic.main.fragment_advanced_settings.*
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
@ -86,7 +87,7 @@ class AdvancedSettingsFragment : Fragment() {
}) })
viewModel.showWallpaper.observe(viewLifecycleOwner, Observer { viewModel.showWallpaper.observe(viewLifecycleOwner, Observer {
show_wallpaper_label.text = if (it && requireActivity().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) getString(R.string.settings_visible) else getString(R.string.settings_not_visible) show_wallpaper_label.text = if (it && activity?.checkGrantedPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == true) getString(R.string.settings_visible) else getString(R.string.settings_not_visible)
}) })
} }
@ -136,15 +137,15 @@ class AdvancedSettingsFragment : Fragment() {
} }
action_translate.setOnClickListener { action_translate.setOnClickListener {
requireActivity().openURI("https://github.com/tommasoberlose/another-widget/blob/master/app/src/main/res/values/strings.xml") activity?.openURI("https://github.com/tommasoberlose/another-widget/blob/master/app/src/main/res/values/strings.xml")
} }
action_website.setOnClickListener { action_website.setOnClickListener {
requireActivity().openURI("http://tommasoberlose.com/") activity?.openURI("http://tommasoberlose.com/")
} }
action_feedback.setOnClickListener { action_feedback.setOnClickListener {
requireActivity().openURI("https://github.com/tommasoberlose/another-widget/issues") activity?.openURI("https://github.com/tommasoberlose/another-widget/issues")
} }
action_help_dev.setOnClickListener { action_help_dev.setOnClickListener {

View File

@ -208,7 +208,7 @@ class CalendarSettingsFragment : Fragment() {
checkReadEventsPermission() checkReadEventsPermission()
}.show() }.show()
} else { } else {
requireActivity().toast(getString(R.string.calendar_settings_list_error)) activity?.toast(getString(R.string.calendar_settings_list_error))
} }
} }
@ -293,7 +293,7 @@ class CalendarSettingsFragment : Fragment() {
dialog.addOnSelectItemListener { value -> dialog.addOnSelectItemListener { value ->
if (value == "-") { if (value == "-") {
startActivity(Intent(requireActivity(), CustomDateActivity::class.java)) startActivity(Intent(requireContext(), CustomDateActivity::class.java))
} else { } else {
Preferences.dateFormat = value Preferences.dateFormat = value
} }
@ -311,7 +311,7 @@ class CalendarSettingsFragment : Fragment() {
} }
private fun checkReadEventsPermission(showEvents: Boolean = Preferences.showEvents) { private fun checkReadEventsPermission(showEvents: Boolean = Preferences.showEvents) {
if (requireActivity().checkGrantedPermission(Manifest.permission.READ_CALENDAR)) { if (activity?.checkGrantedPermission(Manifest.permission.READ_CALENDAR) == true) {
show_events_label.text = if (showEvents) getString(R.string.show_events_visible) else getString(R.string.show_events_not_visible) show_events_label.text = if (showEvents) getString(R.string.show_events_visible) else getString(R.string.show_events_not_visible)
read_calendar_permission_alert_icon.isVisible = false read_calendar_permission_alert_icon.isVisible = false
CalendarHelper.updateEventList(requireContext()) CalendarHelper.updateEventList(requireContext())
@ -325,7 +325,7 @@ class CalendarSettingsFragment : Fragment() {
} }
private fun requirePermission() { private fun requirePermission() {
Dexter.withContext(requireActivity()) Dexter.withContext(requireContext())
.withPermissions( .withPermissions(
Manifest.permission.READ_CALENDAR Manifest.permission.READ_CALENDAR
).withListener(object: MultiplePermissionsListener { ).withListener(object: MultiplePermissionsListener {

View File

@ -127,7 +127,7 @@ class ClockSettingsFragment : Fragment() {
action_clock_app.setOnClickListener { action_clock_app.setOnClickListener {
if (Preferences.showClock) { if (Preferences.showClock) {
startActivityForResult(Intent(requireActivity(), ChooseApplicationActivity::class.java), startActivityForResult(Intent(requireContext(), ChooseApplicationActivity::class.java),
RequestCode.CLOCK_APP_REQUEST_CODE.code RequestCode.CLOCK_APP_REQUEST_CODE.code
) )
} }

View File

@ -22,8 +22,10 @@ import com.tommasoberlose.anotherwidget.helpers.SettingsStringHelper
import com.tommasoberlose.anotherwidget.ui.activities.MainActivity import com.tommasoberlose.anotherwidget.ui.activities.MainActivity
import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel import com.tommasoberlose.anotherwidget.ui.viewmodels.MainViewModel
import kotlinx.android.synthetic.main.fragment_general_settings.* import kotlinx.android.synthetic.main.fragment_general_settings.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class GeneralSettingsFragment : Fragment() { class GeneralSettingsFragment : Fragment() {
@ -33,6 +35,7 @@ class GeneralSettingsFragment : Fragment() {
} }
private lateinit var viewModel: MainViewModel private lateinit var viewModel: MainViewModel
private lateinit var colors: IntArray
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -59,6 +62,12 @@ class GeneralSettingsFragment : Fragment() {
super.onActivityCreated(savedInstanceState) super.onActivityCreated(savedInstanceState)
setupListener() setupListener()
lifecycleScope.launch(Dispatchers.IO) {
val lazyColors = requireContext().resources.getIntArray(R.array.material_colors)
withContext(Dispatchers.Main) {
colors = lazyColors
}
}
} }
@ -140,7 +149,7 @@ class GeneralSettingsFragment : Fragment() {
Color.parseColor(Preferences.textGlobalColor) Color.parseColor(Preferences.textGlobalColor)
} }
BottomSheetColorPicker(requireContext(), BottomSheetColorPicker(requireContext(),
colors = requireActivity().resources.getIntArray(R.array.grey), colors = colors,
header = getString(R.string.settings_font_color_title), header = getString(R.string.settings_font_color_title),
selected = textColor, selected = textColor,
onColorSelected = { color: Int -> onColorSelected = { color: Int ->

View File

@ -132,7 +132,7 @@ class WeatherSettingsFragment : Fragment() {
} }
private fun checkLocationPermission() { private fun checkLocationPermission() {
if (requireActivity().checkGrantedPermission(Manifest.permission.ACCESS_FINE_LOCATION)) { if (activity?.checkGrantedPermission(Manifest.permission.ACCESS_FINE_LOCATION) == true) {
location_permission_alert_icon.isVisible = false location_permission_alert_icon.isVisible = false
WeatherReceiver.setUpdates(requireContext()) WeatherReceiver.setUpdates(requireContext())
} else if (Preferences.showWeather && Preferences.customLocationAdd == "") { } else if (Preferences.showWeather && Preferences.customLocationAdd == "") {
@ -228,7 +228,7 @@ class WeatherSettingsFragment : Fragment() {
} }
private fun requirePermission() { private fun requirePermission() {
Dexter.withContext(requireActivity()) Dexter.withContext(requireContext())
.withPermissions( .withPermissions(
Manifest.permission.ACCESS_FINE_LOCATION Manifest.permission.ACCESS_FINE_LOCATION
).withListener(object: MultiplePermissionsListener { ).withListener(object: MultiplePermissionsListener {

View File

@ -49,13 +49,14 @@ class SupportDevViewModel : ViewModel() {
fun handlePurchase(purchase: Purchase) { fun handlePurchase(purchase: Purchase) {
if (!purchase.isAcknowledged) { if (!purchase.isAcknowledged) {
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val token = purchase.purchaseToken
val acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder() val acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(purchase.purchaseToken) .setPurchaseToken(token)
billingClient.acknowledgePurchase(acknowledgePurchaseParams.build()) billingClient.acknowledgePurchase(acknowledgePurchaseParams.build())
val consumeParams = val consumeParams =
ConsumeParams.newBuilder() ConsumeParams.newBuilder()
.setPurchaseToken(purchase.purchaseToken) .setPurchaseToken(token)
.build() .build()
billingClient.consumePurchase(consumeParams) billingClient.consumePurchase(consumeParams)
} }

View File

@ -69,6 +69,8 @@
android:paddingLeft="16dp" android:paddingLeft="16dp"
android:paddingRight="16dp" android:paddingRight="16dp"
android:inputType="textCapWords" android:inputType="textCapWords"
android:textColor="@color/colorPrimaryText"
android:textColorHint="@color/colorSecondaryText"
android:textAlignment="viewStart" android:textAlignment="viewStart"
android:id="@+id/search" android:id="@+id/search"
android:gravity="center_vertical|start" android:gravity="center_vertical|start"

View File

@ -30,10 +30,27 @@
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:background="@color/disabledButtonBackground" /> android:background="@color/disabledButtonBackground" />
</LinearLayout> </LinearLayout>
<GridLayout <androidx.core.widget.NestedScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content">
android:id="@+id/menu" <RelativeLayout
android:layout_margin="16dp" android:layout_width="match_parent"
android:columnCount="6"/> android:layout_height="wrap_content">
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/menu"
android:visibility="gone"
android:layout_margin="16dp"
android:columnCount="6"/>
<ProgressBar
android:layout_width="32dp"
android:layout_height="32dp"
android:indeterminateTint="@color/colorPrimaryText"
android:indeterminate="true"
android:layout_margin="32dp"
android:layout_centerInParent="true"
android:id="@+id/color_loader" />
</RelativeLayout>
</androidx.core.widget.NestedScrollView>
</LinearLayout> </LinearLayout>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<array name="grey"> <array name="material_colors">
<!-- Grey -->
<item name="grey_0">#FFFFFF</item> <item name="grey_0">#FFFFFF</item>
<item name="grey_50">#FAFAFA</item> <item name="grey_50">#FAFAFA</item>
<item name="grey_100">#F5F5F5</item> <item name="grey_100">#F5F5F5</item>
@ -13,5 +14,304 @@
<item name="grey_800">#424242</item> <item name="grey_800">#424242</item>
<item name="grey_900">#212121</item> <item name="grey_900">#212121</item>
<item name="grey_1000">#000000</item> <item name="grey_1000">#000000</item>
<!-- Grey -->
<!-- Red -->
<item name="red_50">#FFEBEE</item>
<item name="red_100">#FFCDD2</item>
<item name="red_200">#EF9A9A</item>
<item name="red_300">#E57373</item>
<item name="red_400">#EF5350</item>
<item name="red_500">#F44336</item>
<item name="red_600">#E53935</item>
<item name="red_700">#D32F2F</item>
<item name="red_800">#C62828</item>
<item name="red_900">#B71C1C</item>
<item name="red_A100">#FF8A80</item>
<item name="red_A200">#FF5252</item>
<item name="red_A400">#FF1744</item>
<item name="red_A700">#D50000</item>
<!-- Red -->
<!-- Pink -->
<item name="pink_50">#FCE4EC</item>
<item name="pink_100">#F8BBD0</item>
<item name="pink_200">#F48FB1</item>
<item name="pink_300">#F06292</item>
<item name="pink_400">#EC407A</item>
<item name="pink_500">#E91E63</item>
<item name="pink_600">#D81B60</item>
<item name="pink_700">#C2185B</item>
<item name="pink_800">#AD1457</item>
<item name="pink_900">#880E4F</item>
<item name="pink_A100">#FF80AB</item>
<item name="pink_A200">#FF4081</item>
<item name="pink_A400">#F50057</item>
<item name="pink_A700">#C51162</item>
<!-- Pink -->
<!-- Purple -->
<item name="purple_50">#F3E5F5</item>
<item name="purple_100">#E1BEE7</item>
<item name="purple_200">#CE93D8</item>
<item name="purple_300">#BA68C8</item>
<item name="purple_400">#AB47BC</item>
<item name="purple_500">#9C27B0</item>
<item name="purple_600">#8E24AA</item>
<item name="purple_700">#7B1FA2</item>
<item name="purple_800">#6A1B9A</item>
<item name="purple_900">#4A148C</item>
<item name="purple_A100">#EA80FC</item>
<item name="purple_A200">#E040FB</item>
<item name="purple_A400">#D500F9</item>
<item name="purple_A700">#AA00FF</item>
<!-- Purple -->
<!-- Deep Purple -->
<item name="dark_purple_50">#EDE7F6</item>
<item name="dark_purple_100">#D1C4E9</item>
<item name="dark_purple_200">#B39DDB</item>
<item name="dark_purple_300">#9575CD</item>
<item name="dark_purple_400">#7E57C2</item>
<item name="dark_purple_500">#673AB7</item>
<item name="dark_purple_600">#5E35B1</item>
<item name="dark_purple_700">#512DA8</item>
<item name="dark_purple_800">#4527A0</item>
<item name="dark_purple_900">#311B92</item>
<item name="dark_purple_A100">#B388FF</item>
<item name="dark_purple_A200">#7C4DFF</item>
<item name="dark_purple_A400">#651FFF</item>
<item name="dark_purple_A700">#6200EA</item>
<!-- Deep Purple -->
<!-- Indigo -->
<item name="indigo_50">#E8EAF6</item>
<item name="indigo_100">#C5CAE9</item>
<item name="indigo_200">#9FA8DA</item>
<item name="indigo_300">#7986CB</item>
<item name="indigo_400">#5C6BC0</item>
<item name="indigo_500">#3F51B5</item>
<item name="indigo_600">#3949AB</item>
<item name="indigo_700">#303F9F</item>
<item name="indigo_800">#283593</item>
<item name="indigo_900">#1A237E</item>
<item name="indigo_A100">#8C9EFF</item>
<item name="indigo_A200">#536DFE</item>
<item name="indigo_A400">#3D5AFE</item>
<item name="indigo_A700">#304FFE</item>
<!-- Indigo -->
<!-- Blue -->
<item name="blue_50">#E3F2FD</item>
<item name="blue_100">#BBDEFB</item>
<item name="blue_200">#90CAF9</item>
<item name="blue_300">#64B5F6</item>
<item name="blue_400">#42A5F5</item>
<item name="blue_500">#2196F3</item>
<item name="blue_600">#1E88E5</item>
<item name="blue_700">#1976D2</item>
<item name="blue_800">#1565C0</item>
<item name="blue_900">#0D47A1</item>
<item name="blue_A100">#82B1FF</item>
<item name="blue_A200">#448AFF</item>
<item name="blue_A400">#2979FF</item>
<item name="blue_A700">#2962FF</item>
<!-- Blue -->
<!-- Light Blue -->
<item name="light_blue_50">#E1F5FE</item>
<item name="light_blue_100">#B3E5FC</item>
<item name="light_blue_200">#81D4FA</item>
<item name="light_blue_300">#4FC3F7</item>
<item name="light_blue_400">#29B6F6</item>
<item name="light_blue_500">#03A9F4</item>
<item name="light_blue_600">#039BE5</item>
<item name="light_blue_700">#0288D1</item>
<item name="light_blue_800">#0277BD</item>
<item name="light_blue_900">#01579B</item>
<item name="light_blue_A100">#80D8FF</item>
<item name="light_blue_A200">#40C4FF</item>
<item name="light_blue_A400">#00B0FF</item>
<item name="light_blue_A700">#0091EA</item>
<!-- Light Blue -->
<!-- Cyan -->
<item name="cyan_50">#E0F7FA</item>
<item name="cyan_100">#B2EBF2</item>
<item name="cyan_200">#80DEEA</item>
<item name="cyan_300">#4DD0E1</item>
<item name="cyan_400">#26C6DA</item>
<item name="cyan_500">#00BCD4</item>
<item name="cyan_600">#00ACC1</item>
<item name="cyan_700">#0097A7</item>
<item name="cyan_800">#00838F</item>
<item name="cyan_900">#006064</item>
<item name="cyan_A100">#84FFFF</item>
<item name="cyan_A200">#18FFFF</item>
<item name="cyan_A400">#00E5FF</item>
<item name="cyan_A700">#00B8D4</item>
<!-- Cyan -->
<!-- Teal -->
<item name="teal_50">#E0F2F1</item>
<item name="teal_100">#B2DFDB</item>
<item name="teal_200">#80CBC4</item>
<item name="teal_300">#4DB6AC</item>
<item name="teal_400">#26A69A</item>
<item name="teal_500">#009688</item>
<item name="teal_600">#00897B</item>
<item name="teal_700">#00796B</item>
<item name="teal_800">#00695C</item>
<item name="teal_900">#004D40</item>
<item name="teal_A100">#A7FFEB</item>
<item name="teal_A200">#64FFDA</item>
<item name="teal_A400">#1DE9B6</item>
<item name="teal_A700">#00BFA5</item>
<!-- Teal -->
<!-- Green -->
<item name="green_50">#E8F5E9</item>
<item name="green_100">#C8E6C9</item>
<item name="green_200">#A5D6A7</item>
<item name="green_300">#81C784</item>
<item name="green_400">#66BB6A</item>
<item name="green_500">#4CAF50</item>
<item name="green_600">#43A047</item>
<item name="green_700">#388E3C</item>
<item name="green_800">#2E7D32</item>
<item name="green_900">#1B5E20</item>
<item name="green_A100">#B9F6CA</item>
<item name="green_A200">#69F0AE</item>
<item name="green_A400">#00E676</item>
<item name="green_A700">#00C853</item>
<!-- Green -->
<!-- Light Green -->
<item name="light_green_50">#F1F8E9</item>
<item name="light_green_100">#DCEDC8</item>
<item name="light_green_200">#C5E1A5</item>
<item name="light_green_300">#AED581</item>
<item name="light_green_400">#9CCC65</item>
<item name="light_green_500">#8BC34A</item>
<item name="light_green_600">#7CB342</item>
<item name="light_green_700">#689F38</item>
<item name="light_green_800">#558B2F</item>
<item name="light_green_900">#33691E</item>
<item name="light_green_A100">#CCFF90</item>
<item name="light_green_A200">#B2FF59</item>
<item name="light_green_A400">#76FF03</item>
<item name="light_green_A700">#64DD17</item>
<!-- Light Green -->
<!-- Lime -->
<item name="lime_50">#F9FBE7</item>
<item name="lime_100">#F0F4C3</item>
<item name="lime_200">#E6EE9C</item>
<item name="lime_300">#DCE775</item>
<item name="lime_400">#D4E157</item>
<item name="lime_500">#CDDC39</item>
<item name="lime_600">#C0CA33</item>
<item name="lime_700">#AFB42B</item>
<item name="lime_800">#9E9D24</item>
<item name="lime_900">#827717</item>
<item name="lime_A100">#F4FF81</item>
<item name="lime_A200">#EEFF41</item>
<item name="lime_A400">#C6FF00</item>
<item name="lime_A700">#AEEA00</item>
<!-- Lime -->
<!-- Yellow -->
<item name="yellow_50">#FFFDE7</item>
<item name="yellow_100">#FFF9C4</item>
<item name="yellow_200">#FFF59D</item>
<item name="yellow_300">#FFF176</item>
<item name="yellow_400">#FFEE58</item>
<item name="yellow_500">#FFEB3B</item>
<item name="yellow_600">#FDD835</item>
<item name="yellow_700">#FBC02D</item>
<item name="yellow_800">#F9A825</item>
<item name="yellow_900">#F57F17</item>
<item name="yellow_A100">#FFFF8D</item>
<item name="yellow_A200">#FFFF00</item>
<item name="yellow_A400">#FFEA00</item>
<item name="yellow_A700">#FFD600</item>
<!-- Yellow -->
<!-- Amber -->
<item name="amber_50">#FFF8E1</item>
<item name="amber_100">#FFECB3</item>
<item name="amber_200">#FFE082</item>
<item name="amber_300">#FFD54F</item>
<item name="amber_400">#FFCA28</item>
<item name="amber_500">#FFC107</item>
<item name="amber_600">#FFB300</item>
<item name="amber_700">#FFA000</item>
<item name="amber_800">#FF8F00</item>
<item name="amber_900">#FF6F00</item>
<item name="amber_A100">#FFE57F</item>
<item name="amber_A200">#FFD740</item>
<item name="amber_A400">#FFC400</item>
<item name="amber_A700">#FFAB00</item>
<!-- Amber -->
<!-- Orange -->
<item name="orange_50">#FFF3E0</item>
<item name="orange_100">#FFE0B2</item>
<item name="orange_200">#FFCC80</item>
<item name="orange_300">#FFB74D</item>
<item name="orange_400">#FFA726</item>
<item name="orange_500">#FF9800</item>
<item name="orange_600">#FB8C00</item>
<item name="orange_700">#F57C00</item>
<item name="orange_800">#EF6C00</item>
<item name="orange_900">#E65100</item>
<item name="orange_A100">#FFD180</item>
<item name="orange_A200">#FFAB40</item>
<item name="orange_A400">#FF9100</item>
<item name="orange_A700">#FF6D00</item>
<!-- Orange -->
<!-- Deep Orange -->
<item name="deep_orange_50">#FBE9E7</item>
<item name="deep_orange_100">#FFCCBC</item>
<item name="deep_orange_200">#FFAB91</item>
<item name="deep_orange_300">#FF8A65</item>
<item name="deep_orange_400">#FF7043</item>
<item name="deep_orange_500">#FF5722</item>
<item name="deep_orange_600">#F4511E</item>
<item name="deep_orange_700">#E64A19</item>
<item name="deep_orange_800">#D84315</item>
<item name="deep_orange_900">#BF360C</item>
<item name="deep_orange_A100">#FF9E80</item>
<item name="deep_orange_A200">#FF6E40</item>
<item name="deep_orange_A400">#FF3D00</item>
<item name="deep_orange_A700">#DD2C00</item>
<!-- Deep Orange -->
<!-- Brown -->
<item name="brown_50">#EFEBE9</item>
<item name="brown_100">#D7CCC8</item>
<item name="brown_200">#BCAAA4</item>
<item name="brown_300">#A1887F</item>
<item name="brown_400">#8D6E63</item>
<item name="brown_500">#795548</item>
<item name="brown_600">#6D4C41</item>
<item name="brown_700">#5D4037</item>
<item name="brown_800">#4E342E</item>
<item name="brown_900">#3E2723</item>
<!-- Brown -->
<!-- Blue Grey -->
<item name="blue_grey_50">#ECEFF1</item>
<item name="blue_grey_100">#CFD8DC</item>
<item name="blue_grey_200">#B0BEC5</item>
<item name="blue_grey_300">#90A4AE</item>
<item name="blue_grey_400">#78909C</item>
<item name="blue_grey_500">#607D8B</item>
<item name="blue_grey_600">#546E7A</item>
<item name="blue_grey_700">#455A64</item>
<item name="blue_grey_800">#37474F</item>
<item name="blue_grey_900">#263238</item>
<!-- Blue Grey -->
</array> </array>
</resources> </resources>