Save previous background value of checkbox in Kotlin - android-studio

I have a stop button that turns all my checkboxes red.
When I select a checkbox it will turn blue, and when I uncheck it it will turn black.
I want my checkboxes to turn to red when their previous color was red and I want my checkboxes to turn black when their previous color was black.
This is the code I have right now to change the colors.
Change checked color
for (checkBox in checBoxes)
{
checkBox.setOnClickListener(View.OnClickListener {
if (checkBox.isChecked) {
checkBox.setBackgroundResource(R.drawable.blue_button)
} else {
checkBox.setBackgroundResource(R.drawable.black_button)
}
})
}
Stop button
stopBtn.setOnClickListener {
for (checkBox in checBoxes)
{
checkBox.setBackgroundResource(R.drawable.red_button)
}
}

You can create boolean that will tell if user have clicked stop button like this:
val isStopped = false
Than make your onClickListener lambda function like this:
stopBtn.setOnClickListener {
isStopped = true
for (checkBox in checBoxes)
{
checkBox.setBackgroundResource(R.drawable.red_button)
}
}
And then:
for (checkBox in checBoxes)
{
checkBox.setOnClickListener(View.OnClickListener {
if (checkBox.isChecked) {
checkBox.setBackgroundResource(R.drawable.blue_button)
} else {
if(isStopped)
checkBox.setBackgroundResource(R.drawable.red_button)
else
checkBox.setBackgroundResource(R.drawable.black_button)
}
})
}

This is my updated code #dženan-bećirović
Stop button
stopBtn.setOnClickListener {
for (checkBox in checBoxes)
{
checkBox.setBackgroundResource(R.drawable.red_button)
checkBoxBG = checkBox.background
}
}
Change checked color
for (checkBox in checBoxes)
{
checkBox.setOnClickListener(View.OnClickListener {
if (checkBox.isChecked) {
checkBoxBG = checkBox.background
checkBox.setBackgroundResource(R.drawable.blue_button)
} else {
when {
checkBoxBG?.getConstantState()?.equals(getDrawable(CheckboxColorStatus.RED.colorValue)?.getConstantState()) == true -> {
checkBox.setBackgroundResource(R.drawable.red_button)
}
checkBoxBG?.getConstantState()?.equals(getDrawable(CheckboxColorStatus.BLACK.colorValue)?.getConstantState()) == true -> {
checkBox.setBackgroundResource(R.drawable.black_button)
}
checkBoxBG?.getConstantState()?.equals(getDrawable(CheckboxColorStatus.YELLOW.colorValue)?.getConstantState()) == true -> {
checkBox.setBackgroundResource(R.drawable.yellow_button)
}
}
}
})
}

Related

Guidewire : Refresh List view when the button is clicked

The Listview(partial page) is not getting refreshed when I click the button. It keeps on adding the rows whenever the buttons are clicked.
Below are the functions for adding the drivers.
function getDriversFromPolicy_CA7() : CA7CommAutoDriver[] {
var drivers = this.Policy.LatestPeriod.CA7Line.Drivers // **this** Contingency Entity
var excludeDrivers = this.ExcludeDrivers_CA7.toList() // Contingency entity has a ExcludeDrivers_CA7 array
if(excludeDrivers.Empty) {
drivers?.each(\driver -> this.addToExcludeDrivers_CA7(driver) )
} else {
drivers.each(\driver -> {
if (excludeDrivers.where(\elt -> elt.LicenseNumber == driver.LicenseNumber).toList().Count == 0) {
this.addToExcludeDrivers_CA7(driver)
}
})
}
return this.ExcludeDrivers_CA7
}
function getDriversFromTransaction_CA7() : CA7CommAutoDriver[] {
var drivers = this.PolicyPeriod.CA7Line.Drivers.toList()
var excludeDrivers = this.ExcludeDrivers_CA7.toList()
if(this.ExcludeDrivers_CA7.IsEmpty) {
drivers?.each(\driver -> this.addToExcludeDrivers_CA7(driver) )
} else {
// this.ExcludeDrivers_CA7.toList().retainAll(drivers.toList())
drivers.each(\driver -> {
if (excludeDrivers.where(\elt -> elt.LicenseNumber == driver.LicenseNumber).toList().Count == 0) {
this.addToExcludeDrivers_CA7(driver)
}
})
}
return this.ExcludeDrivers_CA7
}
function removeDrivers_CA7(driver : CA7CommAutoDriver) {
this.removeFromExcludeDrivers_CA7(driver)
}
pcf screenshot for reference
UI screenshot for reference

SDL How to check if window is maximized or minimized

I'm trying to make a borderless window that can be maximized and minimized, but I can't get any information on how to get the current state of the window (if it's minimized or maximized) and how to use it.
(edit) rough snippets of the code:
SDL_Rect minimize_area = {0,0,20,20};
Button minimize_window_button = Button(minimize_area);
SDL_Rect maximize_area = {0,0,20,20};
Button maximize_window_button = Button(maximize_area);
SDL_Rect close_area = {0,0,20,20};
Button close_window_button = Button(close_area);
// Program loop
while ( SDL_PollEvent( &event ) ) {
case SDL_MOUSEBUTTONDOWN:
if (event.button.button == SDL_BUTTON_LEFT) {
mouse.updateMousePosition();
if (close_window_button.mouseInDstRect(mouse.pos.x, mouse.pos.y)) running = false;
if (maximize_window_button.mouseInDstRect(mouse.pos.x, mouse.pos.y)) {
if (/* WAY TO KNOW IF THE WINDOW IS MAXIMIZED */) {
SDL_MaximizeWindow(window);
} else {
SDL_RestoreWindow(window);
}
}
if (minimize_window_button.mouseInDstRect(mouse.pos.x, mouse.pos.y)) {
if (/* WAY TO KNOW IF WINDOW IS MINIMIZED or UNMINIMIZED */) {
SDL_MinimizeWindow(window);
} else {
SDL_RestoreWindow(window);
}
}
}
SDL_Log("click!");
break;
}
SDL_GetWindowFlags(), check the SDL_WINDOW_MINIMIZED & SDL_WINDOW_MAXIMIZED bits.

how to insert layout macro above thumbnail

I want to insert tiny type above the answer set providing a bit of metadata, but can't figure out how to do it. I just want the layout macro content-answer-set-info to say something like "results in reverse chronological order" in Legal or Detail_S. I want it to appear below altbrains workshop and above the first item in the list.
render {
if (size(this) > 1) {
list-of (this) {
has-details (true)
where-each (item) {
layout-macro (content-thumbnail-card) {
param (content) {
expression (item)
}
}
}
}
}
else-if (size(this) == 1) {
layout-match (this) {
mode (Details)
}
}
else {layout-macro (content-zero-results) {}
}
I would recommend wrapping this layout macro in a section and using the section-title (documentation) key to give it the text above the list.
There is an alternative solution that use section -> title but not with list-of
render {
layout {
section {
title {
template ("Voice command Add One")
}
content {
for-each (this) {
as (item) {
title-card {
title-area {
slot2 {
single-line {
text {
value {
template ("Integer: #{value(item.number)}")
}
style (Detail_L)
}
}
}
}
}
}
}
}
}
}

Bixby - getting user input for "yes/no" with navigation-mode in result-view

I have a result-view that reads and displays one item at a time:
if (size(this) > 1) {
list-of (this) {
has-details (false)
where-each (item) {
compound-card {
content {
image-card {
aspect-ratio (4:3)
title-area {
halign (Start)
slot1 {
text {
value ("#{value(item.title)}")
style (Title_M)
}
}
}
image-url ("#{value(item.thumbnail)}")
}
paragraph ("#{value(item.partialContent)}")
}
}
}
navigation-mode {
read-one-and-next {
page-content (item) {
underflow-statement ()
next-item-question ()
overflow-statement ()
overflow-question ()
page-marker {
if (isFirstNavPage(item)) {
choose (Random) {
template ("#{value(item.title)}. #{value(item.content)}. Do you want to hear more?")
}
}
else-if (isLastNavPage(item)) {
if (size(item) == 1) {
template ("#{value(item.title)}. You have reach the end of today's #{value(item.topic)}")
}
}
else {
choose (Random) {
template ("#{value(item.title)}. #{value(item.content)}. Do you want to hear more?")
}
}
}
}
}
}
}
}
The question I have is:
how do I get user voice input for "yes/no"?
the flow should be:
- if user said "yes" - reads the next item in the navigation-mode.
- if user said "no" - ends the navigation-mode.
I read something on using
followup
key for getting user yes/no input. But I struggle to find its use here. Should it be use alongside a converation-driver?
The next-page-question key serves as a the prompt for asking the user if they want the next item in the list. The user's "yes" or "no" response is handled by navigation mode without any additional coding from you.

How to handle zero search result scenarios

What are some good examples of different ways to handle zero result search answer sets in result views?
Here's what I have right now. I assume I want to do size(this) < 1 but before I plunge ahead I want some ideas about what to do. For example, should I just say "search again" or should I try to recommend something to do?
render {
if (size(this) > 1) {
list-of (this) {
//default-sort-order {
// sorting(this.title)
// }
has-details (true)
where-each (item) {
layout-macro (content-thumbnail-card) {
param (content) {
expression (item)
}
}
}
}
} else-if (size(this) == 1) {
layout-match (this) {
mode (Details)
}
}
}
There is a NoResult dialog that will automatically activate for this condition:
https://bixbydevelopers.com/dev/docs/reference/ref-topics/dialog-modes.dialog-events#no-result-event
You can also place a conditional in your result view. For example:
result-view {
match: SomeConcept(this)
message {
if (size(this) == 0) {
template (No results)
}
}
render {
layout {
section {
content {
// No Result
if (size(this)== 0) {
paragraph(Sorry, I didn't find anything)
}
}
}
}
}
}

Resources