Skip to content

Commit

Permalink
Dropdown
Browse files Browse the repository at this point in the history
  • Loading branch information
bskjon committed May 2, 2024
1 parent 69d8a50 commit c2ab19d
Show file tree
Hide file tree
Showing 8 changed files with 212 additions and 8 deletions.
4 changes: 3 additions & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@
android:exported="false" />
<activity
android:name=".SettingActivity2"
android:exported="false" />
android:exported="false"
android:theme="@style/SettingLibrary.SettingActivity" />

<activity
android:name=".SettingActivity"
android:exported="false"
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/no/iktdev/demoapplication/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ class MainActivity : AppCompatActivity() {
binding.goToSettings.setOnClickListener {
startActivity(Intent(this, SettingActivity::class.java))
}
binding.goToSettings.setOnLongClickListener {
startActivity(Intent(this, SettingActivity2::class.java))
true
}

binding.startLockActivity.setOnClickListener {
startActivity(Intent(applicationContext, LockscreenWidgetActivity::class.java))
Expand Down
12 changes: 12 additions & 0 deletions app/src/main/java/no/iktdev/demoapplication/SettingActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,18 @@ class SettingActivity : SettingsRenderActivity() {
.setTitle("Set me to fancy number")
.setType(SettingComponentType.SLIDER)
.setSetting(Settings.ValueSelector.PercentageIsFun())
.build(),
SettingComponentDescriptorBuilder(this)
.setGroupName(R.string.setting_title)
.setTitle(R.string.setting_title)
.setType(SettingComponentType.POPOUT_SELECT)
.setIcon(no.iktdev.setting.R.drawable.ic_android_black_24dp)
.setSetting(Settings.ValueSelector.SelectSomethingElse())
.setPayload(ComponentData(arrayListOf<DropdownItem>(
DropdownItem("Stringy", "Potatis"),
DropdownItem("Inti", 0),
DropdownItem("Intifffffffffssssssssssf", 1)
)))
.build()
)
return external + listOf(
Expand Down
103 changes: 101 additions & 2 deletions app/src/main/java/no/iktdev/demoapplication/SettingActivity2.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,109 @@ package no.iktdev.demoapplication

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.LayoutInflater
import android.widget.LinearLayout
import android.widget.Toast
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import no.iktdev.demoapplication.databinding.ActivitySetting2Binding
import no.iktdev.demoapplication.databinding.ActivitySettingBinding
import no.iktdev.setting.ReactiveSettingsReceiver
import no.iktdev.setting.model.ComponentData
import no.iktdev.setting.model.DropdownComponentItems
import no.iktdev.setting.model.DropdownItem
import no.iktdev.setting.model.SettingComponentDescriptorBase
import no.iktdev.setting.model.SettingComponentType
import no.iktdev.setting.model.builder.ActionableComponentDataBuilder
import no.iktdev.setting.model.builder.LaunchableComponentDataBuilder
import no.iktdev.setting.model.builder.SettingComponentDescriptorBuilder
import no.iktdev.setting.ui.ThemeType
import no.iktdev.setting.ui.Theming
import no.iktdev.setting.ui.activities.SettingsActivity
import no.iktdev.setting.ui.activities.SettingsRenderActivity

class SettingActivity2 : SettingsRenderActivity() {
lateinit var binding: ActivitySetting2Binding
private var reactiveSettingsReceiver: ReactiveSettingsReceiver? = null


class SettingActivity2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
binding = ActivitySetting2Binding.inflate(LayoutInflater.from(this))
setContentView(binding.root)
toolbar = binding.toolbar
setCollapsingToolbar(binding.appBar, binding.toolbarLayout, binding.toolbarTitle)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_setting2)
reactiveSettingsReceiver =
ReactiveSettingsReceiver(this, object : ReactiveSettingsReceiver.Listener {
override fun onReactiveGroupSettingsChanged(
group: String,
key: String,
payload: Any?
) {
super.onReactiveGroupSettingsChanged(group, key, payload)
Toast.makeText(
this@SettingActivity2,
"${this@SettingActivity2::class.java.simpleName} Setting group: $group got changed value for key $key with value $payload",
Toast.LENGTH_LONG
).show()
}
})
titleChange.observe(this) {
title = it
binding.toolbarLayout.title = title
binding.toolbarTitle.text = title
binding.toolbarTitleLarge.text = title
}
}


override fun preCreatedSettingItems(): List<SettingComponentDescriptorBase> {
val external = arrayListOf<SettingComponentDescriptorBase>(
SettingComponentDescriptorBuilder(this)
.setGroupName(R.string.setting_title)
.setTitle(R.string.setting_title)
.setType(SettingComponentType.POPOUT_SELECT)
.setIcon(no.iktdev.setting.R.drawable.ic_android_black_24dp)
.setSetting(Settings.ValueSelector.SelectSomethingElse())
.setPayload(
DropdownComponentItems(
arrayListOf(
DropdownItem("Stringy", "Potatis"),
DropdownItem("Inti", 0),
DropdownItem("Intifffffffffssssssssssf", 1)
)
)
)
.build()
)
return external + listOf(
SettingComponentDescriptorBuilder(this)
.setGroupName(R.string.setting_group_title_launchy)
.setTitle("I will crash")
.setIcon(no.iktdev.setting.R.drawable.ic_android_black_24dp)
.setType(SettingComponentType.CLICKABLE)
.setPayload(
ActionableComponentDataBuilder()
.setTitle("Fancy Section")
.setActivityClass(SettingActivity::class.java)
.applyPayload(SettingsActivity.componentPassKey, external)
.build()
)
.build(),
)
}

override fun themes(): List<Theming> {
return listOf(
Theming(ThemeType.NORMAL, no.iktdev.setting.R.style.SettingComponents),
Theming(ThemeType.START, no.iktdev.setting.R.style.SettingComponents_Top),
Theming(ThemeType.END, no.iktdev.setting.R.style.SettingComponents_Bottom),
Theming(ThemeType.SINGLE, no.iktdev.setting.R.style.SettingComponents_Single),
)
}

override fun getRenderContainer(): LinearLayout {
return binding.content.renderContainer
}
}
55 changes: 53 additions & 2 deletions app/src/main/res/layout/activity_setting2.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:animateLayoutChanges="true"
tools:context=".SettingActivity2">

</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="300dp"
android:fitsSystemWindows="true">

<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/toolbar_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:toolbarId="@+id/toolbar">

<TextView
android:id="@+id/toolbar_title_large"
android:textColor="@color/white"
tools:text="Test"
android:textSize="32sp"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
app:titleTextColor="@color/white"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:expandedTitleGravity="bottom"
android:layout_gravity="bottom"
app:layout_collapseMode="pin">
<TextView
android:textColor="@color/white"
tools:text="Test"
android:id="@+id/toolbar_title"
android:textAppearance="@style/TextAppearance.AppCompat.Title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center" />

</androidx.appcompat.widget.Toolbar>

</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>

<include android:id="@+id/content" layout="@layout/activity_setting_content" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
plugins {
id 'com.android.application' version '7.4.1' apply false
id 'com.android.library' version '7.4.1' apply false
id 'org.jetbrains.kotlin.android' version '1.7.20' apply false
id 'org.jetbrains.kotlin.android' version '1.8.10' apply false
}

ext {
androidSdkVersion = 33
androidMinSdk = 21

javaVersion = JavaVersion.VERSION_11
kotlinJvmTarget = '11'
kotlinJvmTarget = '17'

coreLibraries = [
kotlin : 'androidx.core:core-ktx:1.9.0'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package no.iktdev.setting.model

import android.os.Bundle
import android.os.Parcel
import android.os.Parcelable
import java.io.Serializable

class DropdownComponentItems(
override val value: ArrayList<DropdownItem>
) : ComponentData(value), Parcelable {

constructor(parcel: Parcel) : this(
ArrayList<DropdownItem>().apply {
parcel.readList(this, DropdownItem::class.java.classLoader)
}
)

override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeList(value)
}

override fun describeContents(): Int {
return 0
}

companion object CREATOR : Parcelable.Creator<DropdownComponentItems> {
override fun createFromParcel(parcel: Parcel): DropdownComponentItems {
return DropdownComponentItems(parcel)
}

override fun newArray(size: Int): Array<DropdownComponentItems?> {
return arrayOfNulls(size)
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import java.io.Serializable
* @param value Should only be value of primitive type (int, string, boolean, float etc..)
* @param payload Value that can be assigned if you want to inform host activity of the item selected
*/
class DropdownItem(val displayValue: String, override var value: Any?, val payload: Serializable? = null) : ComponentData(), Parcelable {
data class DropdownItem(val displayValue: String, override var value: Any?, val payload: Serializable? = null) : ComponentData(), Parcelable {
constructor(parcel: Parcel) : this(
parcel.readString() ?: "",
parcel.readValue(ClassLoader.getSystemClassLoader()),
Expand Down

0 comments on commit c2ab19d

Please sign in to comment.