Make currency an optional setting for each widget

This commit is contained in:
Prem Nirmal
2021-02-02 09:36:40 +00:00
parent 081d1732f3
commit 61893fc993
10 changed files with 102 additions and 40 deletions
@@ -218,6 +218,7 @@ class AppPreferences {
const val LAYOUT_TYPE = "LAYOUT_TYPE"
const val WIDGET_SIZE = "WIDGET_SIZE"
const val BOLD_CHANGE = "BOLD_CHANGE"
const val SHOW_CURRENCY = "SHOW_CURRENCY"
const val PERCENT = "PERCENT"
const val DID_RATE = "DID_RATE"
const val BACKOFF_ATTEMPTS = "BACKOFF_ATTEMPTS"
@@ -25,12 +25,14 @@ import kotlinx.android.synthetic.main.fragment_widget_settings.setting_autosort_
import kotlinx.android.synthetic.main.fragment_widget_settings.setting_background
import kotlinx.android.synthetic.main.fragment_widget_settings.setting_bold
import kotlinx.android.synthetic.main.fragment_widget_settings.setting_bold_checkbox
import kotlinx.android.synthetic.main.fragment_widget_settings.setting_currency
import kotlinx.android.synthetic.main.fragment_widget_settings.setting_currency_checkbox
import kotlinx.android.synthetic.main.fragment_widget_settings.setting_hide_header
import kotlinx.android.synthetic.main.fragment_widget_settings.setting_hide_header_checkbox
import kotlinx.android.synthetic.main.fragment_widget_settings.setting_layout_type
import kotlinx.android.synthetic.main.fragment_widget_settings.setting_widget_width
import kotlinx.android.synthetic.main.fragment_widget_settings.setting_text_color
import kotlinx.android.synthetic.main.fragment_widget_settings.setting_widget_name
import kotlinx.android.synthetic.main.fragment_widget_settings.setting_widget_width
import javax.inject.Inject
class WidgetSettingsFragment : BaseFragment(), OnClickListener {
@@ -91,10 +93,11 @@ class WidgetSettingsFragment : BaseFragment(), OnClickListener {
setBoldSetting(widgetData)
setAutoSortSetting(widgetData)
setHideHeaderSetting(widgetData)
setCurrencySetting(widgetData)
arrayOf(
setting_add_stock, setting_widget_name, setting_layout_type , setting_widget_width, setting_background,
setting_text_color, setting_bold, setting_autosort, setting_hide_header
setting_text_color, setting_bold, setting_autosort, setting_hide_header, setting_currency
).forEach {
it.setOnClickListener(this@WidgetSettingsFragment)
}
@@ -114,7 +117,7 @@ class WidgetSettingsFragment : BaseFragment(), OnClickListener {
v.setIsEditable(false)
v.setOnClickListener(this)
bus.send(RefreshEvent())
InAppMessage.showMessage(activity!!, R.string.widget_name_updated)
InAppMessage.showMessage(requireActivity(), R.string.widget_name_updated)
}
}
R.id.setting_layout_type -> {
@@ -127,7 +130,7 @@ class WidgetSettingsFragment : BaseFragment(), OnClickListener {
if (which == 2) {
showDialog(getString(R.string.change_instructions))
}
InAppMessage.showMessage(activity!!, R.string.layout_updated_message)
InAppMessage.showMessage(requireActivity(), R.string.layout_updated_message)
})
}
@@ -138,7 +141,7 @@ class WidgetSettingsFragment : BaseFragment(), OnClickListener {
setWidgetSizeSetting(widgetData)
dialog.dismiss()
broadcastUpdateWidget()
InAppMessage.showMessage(activity!!, R.string.widget_width_updated_message)
InAppMessage.showMessage(requireActivity(), R.string.widget_width_updated_message)
})
}
@@ -149,7 +152,7 @@ class WidgetSettingsFragment : BaseFragment(), OnClickListener {
setTextColorSetting(widgetData)
dialog.dismiss()
broadcastUpdateWidget()
InAppMessage.showMessage(activity!!, R.string.bg_updated_message)
InAppMessage.showMessage(requireActivity(), R.string.bg_updated_message)
})
}
R.id.setting_text_color -> {
@@ -158,7 +161,7 @@ class WidgetSettingsFragment : BaseFragment(), OnClickListener {
setTextColorSetting(widgetData)
dialog.dismiss()
broadcastUpdateWidget()
InAppMessage.showMessage(activity!!, R.string.text_color_updated_message)
InAppMessage.showMessage(requireActivity(), R.string.text_color_updated_message)
})
}
R.id.setting_bold -> {
@@ -179,6 +182,12 @@ class WidgetSettingsFragment : BaseFragment(), OnClickListener {
setHideHeaderSetting(widgetData)
broadcastUpdateWidget()
}
R.id.setting_currency -> {
val isChecked = !setting_currency_checkbox.isChecked
widgetData.setCurrencyEnabled(isChecked)
setCurrencySetting(widgetData)
broadcastUpdateWidget()
}
}
}
@@ -230,4 +239,8 @@ class WidgetSettingsFragment : BaseFragment(), OnClickListener {
private fun setHideHeaderSetting(widgetData: WidgetData) {
setting_hide_header_checkbox.isChecked = widgetData.hideHeader()
}
private fun setCurrencySetting(widgetData: WidgetData) {
setting_currency_checkbox.isChecked = widgetData.isCurrencyEnabled()
}
}
@@ -68,7 +68,11 @@ class RemoteStockViewAdapter(private val widgetId: Int) : RemoteViewsService.Rem
val changePercentFormatted = stock.changePercentString()
val gainLossFormatted = stock.gainLossString()
val gainLossPercentFormatted = stock.gainLossPercentString()
val priceFormatted = stock.priceString() + " " + stock.currency
val priceFormatted = if (widgetData.isCurrencyEnabled()) {
stock.priceString() + " " + stock.currency
} else {
stock.priceString()
}
val change = stock.change
val changeInPercent = stock.changeInPercent
val gainLoss = stock.gainLoss()
@@ -80,7 +84,11 @@ class RemoteStockViewAdapter(private val widgetId: Int) : RemoteViewsService.Rem
val priceString = SpannableString(priceFormatted)
remoteViews.setTextViewText(R.id.ticker, stock.symbol)
remoteViews.setTextViewText(R.id.holdings, stock.holdingsString() + " " + stock.currency)
remoteViews.setTextViewText(R.id.holdings, if (widgetData.isCurrencyEnabled()) {
stock.holdingsString() + " " + stock.currency
} else {
stock.holdingsString()
})
if (widgetData.isBoldEnabled()) {
changePercentString.setSpan(
@@ -24,6 +24,7 @@ class WidgetData {
private const val LAYOUT_TYPE = AppPreferences.LAYOUT_TYPE
private const val WIDGET_SIZE = AppPreferences.WIDGET_SIZE
private const val BOLD_CHANGE = AppPreferences.BOLD_CHANGE
private const val SHOW_CURRENCY = AppPreferences.SHOW_CURRENCY
private const val WIDGET_BG = AppPreferences.WIDGET_BG
private const val TEXT_COLOR = AppPreferences.TEXT_COLOR
private const val PERCENT = AppPreferences.PERCENT
@@ -206,6 +207,14 @@ class WidgetData {
.apply()
}
fun isCurrencyEnabled(): Boolean = preferences.getBoolean(SHOW_CURRENCY, false)
fun setCurrencyEnabled(value: Boolean) {
preferences.edit()
.putBoolean(SHOW_CURRENCY, value)
.apply()
}
fun getStocks(): List<Quote> {
val quoteList = ArrayList<Quote>()
tickerList.map { stocksProvider.getStock(it) }
@@ -19,7 +19,7 @@ class WidgetDataProvider {
@Inject internal lateinit var context: Context
private val widgets: MutableMap<Int, WidgetData> by lazy {
HashMap<Int, WidgetData>()
HashMap()
}
init {
@@ -55,7 +55,6 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/setting_padding"
android:layout_marginRight="@dimen/setting_padding"
android:clickable="false"
android:duplicateParentState="true"
android:focusable="false"
@@ -87,7 +86,6 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/setting_padding"
android:layout_marginRight="@dimen/setting_padding"
android:clickable="false"
android:duplicateParentState="true"
android:focusable="false"
@@ -155,7 +153,37 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/setting_padding"
android:layout_marginRight="@dimen/setting_padding"
android:clickable="false"
android:duplicateParentState="true"
android:focusable="false"
android:gravity="center"
/>
</LinearLayout>
<include layout="@layout/divider"/>
<LinearLayout
android:id="@+id/setting_currency"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<com.github.premnirmal.ticker.ui.SettingsTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
app:title_text="@string/setting_currency"
app:subtitle_text="@string/setting_currency_desc"
/>
<CheckBox
android:id="@+id/setting_currency_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/setting_padding"
android:clickable="false"
android:duplicateParentState="true"
android:focusable="false"
+23 -23
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:sfw="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/stockContainer"
android:layout_width="match_parent"
@@ -45,7 +45,7 @@
android:gravity="center_vertical|right"
android:maxLines="1"
android:textColor="@color/text_1"
android:textSize="@dimen/large_text"
android:textSize="@dimen/medium_text"
tools:text="555.02"
style="@style/BoldTextView"
/>
@@ -57,7 +57,7 @@
android:layout_gravity="center_vertical|right"
android:background="?selectableItemBackgroundBorderless"
android:src="@drawable/ic_more"
android:tint="@color/icon_tint"
app:tint="@color/icon_tint"
/>
</LinearLayout>
@@ -102,20 +102,20 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
sfw:name="@string/holdings"
sfw:or="vertical"
sfw:size="@dimen/portfolio_position_vh_value_text_size"
sfw:text_gravity="left"
app:name="@string/holdings"
app:or="vertical"
app:size="@dimen/portfolio_position_vh_value_text_size"
app:text_gravity="left"
/>
<com.github.premnirmal.ticker.ui.StockFieldView
android:id="@+id/gain_loss"
android:layout_width="match_parent"
android:layout_height="wrap_content"
sfw:name="@string/gain_loss"
sfw:or="vertical"
sfw:size="@dimen/portfolio_position_vh_value_text_size"
sfw:text_gravity="left"
app:name="@string/gain_loss"
app:or="vertical"
app:size="@dimen/portfolio_position_vh_value_text_size"
app:text_gravity="left"
/>
</LinearLayout>
@@ -134,10 +134,10 @@
android:id="@+id/dayChange"
android:layout_width="match_parent"
android:layout_height="wrap_content"
sfw:name="@string/day_change_amount"
sfw:or="vertical"
sfw:size="@dimen/portfolio_position_vh_value_text_size"
sfw:text_gravity="center"
app:name="@string/day_change_amount"
app:or="vertical"
app:size="@dimen/portfolio_position_vh_value_text_size"
app:text_gravity="center"
/>
</LinearLayout>
@@ -155,20 +155,20 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
sfw:name="@string/change_percent"
sfw:or="vertical"
sfw:size="@dimen/portfolio_position_vh_value_text_size"
sfw:text_gravity="right"
app:name="@string/change_percent"
app:or="vertical"
app:size="@dimen/portfolio_position_vh_value_text_size"
app:text_gravity="right"
/>
<com.github.premnirmal.ticker.ui.StockFieldView
android:id="@+id/changeValue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
sfw:name="@string/change_amount"
sfw:or="vertical"
sfw:size="@dimen/portfolio_position_vh_value_text_size"
sfw:text_gravity="right"
app:name="@string/change_amount"
app:or="vertical"
app:size="@dimen/portfolio_position_vh_value_text_size"
app:text_gravity="right"
/>
</LinearLayout>
+3 -2
View File
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/stockContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -45,7 +46,7 @@
android:layout_gravity="center_vertical"
android:background="?selectableItemBackgroundBorderless"
android:src="@drawable/ic_more"
android:tint="@color/icon_tint"
app:tint="@color/icon_tint"
/>
</LinearLayout>
@@ -83,7 +84,7 @@
android:gravity="center_vertical|left"
android:maxLines="1"
android:textColor="@color/text_1"
android:textSize="@dimen/large_text"
android:textSize="@dimen/medium_text"
tools:text="555.02"
style="@style/BoldTextView"
/>
+2
View File
@@ -54,6 +54,8 @@
<string name="refresh_on_screen_unlock_desc">Refresh when the screen unlocks (only during set hours).</string>
<string name="bold_change">Bold text</string>
<string name="bold_change_desc">Show changes and market value in bold</string>
<string name="setting_currency">Show currency</string>
<string name="setting_currency_desc">Show currency in the widget</string>
<string name="choose_text_size">Widget Text Size</string>
<string name="app_theme">App Theme</string>
<string name="text_size_updated_message">Text size updated</string>
+2 -2
View File
@@ -1,2 +1,2 @@
versionName=3.9.731
versionCode=300900731
versionName=3.9.732
versionCode=300900732