From 826ea17cdd383432fbed257119e9aa2bc281627a Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Wed, 23 Dec 2020 10:53:00 -0600 Subject: [PATCH] Refactor EditSettingActivity --- .../uhabits/automation/EditSettingActivity.kt | 19 +++-- .../uhabits/automation/EditSettingRootView.kt | 74 ++++++++----------- .../isoron/uhabits/utils/ViewExtensions.kt | 9 ++- .../src/main/res/layout/automation.xml | 2 +- 4 files changed, 49 insertions(+), 55 deletions(-) diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.kt index 9170d8311..1d266029b 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.kt @@ -20,12 +20,12 @@ package org.isoron.uhabits.automation import android.os.* - -import org.isoron.androidbase.activities.* +import androidx.appcompat.app.* import org.isoron.uhabits.* +import org.isoron.uhabits.activities.* import org.isoron.uhabits.core.models.* -class EditSettingActivity : BaseActivity() { +class EditSettingActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val app = applicationContext as HabitsApplication @@ -34,13 +34,16 @@ class EditSettingActivity : BaseActivity() { .setArchivedAllowed(false) .setCompletedAllowed(true) .build()) + AndroidThemeSwitcher(this, app.component.preferences).apply() val args = SettingUtils.parseIntent(this.intent, habits) - val controller = EditSettingController(this) - val rootView = EditSettingRootView(this, habits, controller, args) - val screen = BaseScreen(this) - screen.setRootView(rootView) - setScreen(screen) + val view = EditSettingRootView( + context = this, + habitList = app.component.habitList, + onSave = controller::onSave, + args = args, + ) + setContentView(view) } } diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.kt index 0d6979ec1..8fae1294d 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.kt @@ -20,72 +20,58 @@ package org.isoron.uhabits.automation import android.R.layout.* +import android.annotation.* import android.content.* import android.view.* -import androidx.appcompat.widget.* -import androidx.appcompat.widget.Toolbar import android.widget.* -import butterknife.* -import org.isoron.androidbase.activities.* -import org.isoron.androidbase.utils.* -import org.isoron.uhabits.R +import org.isoron.uhabits.* import org.isoron.uhabits.core.models.* +import org.isoron.uhabits.databinding.* +import org.isoron.uhabits.utils.* import java.util.* +@SuppressLint("ViewConstructor") class EditSettingRootView( context: Context, private val habitList: HabitList, - private val controller: EditSettingController, + private val onSave: (habit: Habit, action: Int) -> Unit, args: SettingUtils.Arguments? -) : BaseRootView(context) { +) : FrameLayout(context) { - @BindView(R.id.toolbar) - lateinit var tbar: Toolbar - - @BindView(R.id.habitSpinner) - lateinit var habitSpinner: AppCompatSpinner - - @BindView(R.id.actionSpinner) - lateinit var actionSpinner: AppCompatSpinner + private var binding = AutomationBinding.inflate(LayoutInflater.from(context)) init { - addView(inflate(getContext(), R.layout.automation, null)) - ButterKnife.bind(this) + addView(binding.root) + setupToolbar( + toolbar = binding.toolbar, + title = resources.getString(R.string.app_name), + color = PaletteColor(11), + displayHomeAsUpEnabled = false, + ) populateHabitSpinner() - habitSpinner.onItemSelectedListener = object: AdapterView.OnItemSelectedListener { + binding.habitSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onNothingSelected(parent: AdapterView<*>?) { } + override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { populateActionSpinner(habitList.getByPosition(position).isNumerical) } } + binding.buttonSave.setOnClickListener { + val habit = habitList.getByPosition(binding.habitSpinner.selectedItemPosition) + val action = mapSpinnerPositionToAction( + isNumerical = habit.isNumerical, + itemPosition = binding.actionSpinner.selectedItemPosition, + ) + onSave(habit, action) + } args?.let { - habitSpinner.setSelection(habitList.indexOf(it.habit)) + binding.habitSpinner.setSelection(habitList.indexOf(it.habit)) populateActionSpinner(it.habit.isNumerical) - actionSpinner.setSelection(mapActionToSpinnerPosition(it.action)) + binding.actionSpinner.setSelection(mapActionToSpinnerPosition(it.action)) } } - override fun getToolbar(): Toolbar { - return tbar - } - - override fun getToolbarColor(): Int { - val res = StyledResources(context) - if (!res.getBoolean(R.attr.useHabitColorAsPrimary)) - return super.getToolbarColor() - - return res.getColor(R.attr.aboutScreenColor) - } - - @OnClick(R.id.buttonSave) - fun onClickSave() { - val habit = habitList.getByPosition(habitSpinner.selectedItemPosition) - val action = mapSpinnerPositionToAction(habit.isNumerical, - actionSpinner.selectedItemPosition) - controller.onSave(habit, action) - } - private fun mapSpinnerPositionToAction(isNumerical: Boolean, itemPosition: Int): Int { return if (isNumerical) { when (itemPosition) { @@ -102,7 +88,7 @@ class EditSettingRootView( } private fun mapActionToSpinnerPosition(action: Int): Int { - return when(action) { + return when (action) { ACTION_CHECK -> 0 ACTION_UNCHECK -> 1 ACTION_TOGGLE -> 2 @@ -116,13 +102,13 @@ class EditSettingRootView( val names = habitList.mapTo(LinkedList()) { it.name } val adapter = ArrayAdapter(context, simple_spinner_item, names) adapter.setDropDownViewResource(simple_spinner_dropdown_item) - habitSpinner.adapter = adapter + binding.habitSpinner.adapter = adapter } private fun populateActionSpinner(isNumerical: Boolean) { val entries = (if (isNumerical) R.array.actions_numerical else R.array.actions_yes_no) val adapter = ArrayAdapter.createFromResource(context, entries, simple_spinner_item) adapter.setDropDownViewResource(simple_spinner_dropdown_item) - actionSpinner.adapter = adapter + binding.actionSpinner.adapter = adapter } } diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt index 828cac545..74e3000b6 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt @@ -105,7 +105,12 @@ fun Activity.showSendFileScreen(archiveFilename: String) { }) } -fun View.setupToolbar(toolbar: Toolbar, title: String, color: PaletteColor) { +fun View.setupToolbar( + toolbar: Toolbar, + title: String, + color: PaletteColor, + displayHomeAsUpEnabled: Boolean = true, +) { toolbar.elevation = InterfaceUtils.dpToPixels(context, 2f) val res = StyledResources(context) toolbar.title = title @@ -119,7 +124,7 @@ fun View.setupToolbar(toolbar: Toolbar, title: String, color: PaletteColor) { val activity = context as AppCompatActivity activity.window.statusBarColor = darkerColor activity.setSupportActionBar(toolbar) - activity.supportActionBar?.setDisplayHomeAsUpEnabled(true) + activity.supportActionBar?.setDisplayHomeAsUpEnabled(displayHomeAsUpEnabled) } fun Int.toMeasureSpec(mode: Int) = diff --git a/android/uhabits-android/src/main/res/layout/automation.xml b/android/uhabits-android/src/main/res/layout/automation.xml index de413d078..ea78df450 100644 --- a/android/uhabits-android/src/main/res/layout/automation.xml +++ b/android/uhabits-android/src/main/res/layout/automation.xml @@ -23,7 +23,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" - android:background="@color/white"> + android:background="?attr/windowBackgroundColor">