36fe52e5ad
* DROID-439 App | Relations refactoring, use SearchObjects for object types (#2592) * DROID-446 Objects | Enhancement | Store relation links and process its updates (#2597) * DROID-456 Tech | Remove deprecated API for creating object types (#2601) * DROID-455 Object types | Enhancement Get object type list from ObjectSearch on Global search screen (#2602) * DROID-459 Sets | Refactoring | Use relations links instead of relations for building search params to get data view data (#2603) * DROID-458 Objects | Refactoring | Integrate new api for creating objets (#2604) * DROID-464 Relations | Refactoring | New API for creating a relation from scratch - for data view or for an object (#2605) * DROID-467 Relations | Refactoring | New API for creating options - for tags and statuses (#2607) * DROID-470 Relations | Refactoring | New API for removing any relation from an object or from a data view (#2608) * DROID-460 Tech | Object relations list (#2610) * DROID-486 Sets | Refactoring | Displaying and controlling visibility of data view relations (#2611) * DROID-500 Relations | Refactoring | Extend API of ObjectStore to be able to get a relation by its id (#2619) * DROID-459 Sets | Fix | Get relations from store by id and not by key (#2618) * DROID-489 Tech | Relations as object, add relationKey to relation connected screens (#2622) * DROID-490 Sets | Refactoring | Displaying relation values for current object in bottom sheet cells (#2629) * DROID-505 Relations | Refactoring | New interface for relations store (#2633) * DROID-509 Relations | Refactoring | Bind new relations store with subscription container (#2635) * DROID-507 Tech | MW , migration + relation links (#2636) * DROID-507 Tech | MW , migration + relation links, fixes (#2637) * DROID-517 Sets | Fix | Provide correct keys for data view search-and-subscribe query (#2641) * DROID-409 Relations | Refactoring | Use relation key instead of id when creating new relation (#2642) * DROID-521 Sets & Objects | Refactoring | Add relation to a data view or to an object from existing relations (#2644) * DROID-522 Relations | Refactoring | Add objects to relations with object format (#2645) * DROID-523 Object types | Refactoring | Implement global store for object types (#2646) * DROID-527 Object types | Refactoring | Integrate global store for object types (#2647) * DROID-531 Relations | Refactoring | Parse tag and status relations values (#2649) * DROID-535 Tech | Integrate new MW lib with migration fixes (#2653) * DROID-535 Tech | MW integration fixes (#2660) * DROID-559 Relations | Refactoring | Parse tag and status values in editor (#2662) * DROID-560 Relations | Refactoring | Integrate new lib with fixes (#2663) * DROID-561 Relations | Refactoring | Parsing tag and status values in dv (#2665) * DROID-562 Dashboard | Refactoring | Use store of object types as object type provider for favorites tab on dashboard (#2667) * DROID-567 Relations | Refactoring | Suggest available options to populate a relation (#2671) * DROID-604 Relations | Refactoring | Use details from Object.CreateRelation.Response to populate relation store (#2705) * DROID-603 Relations | Refactoring | Creating relation options + Deleting relation from object (#2706) * DROID-619 Relations | Refactoring | Migrate data view sorts and filters to the new relation-as-object paradigm (#2711) * DROID-622 Relations | Tech | Update MW to 0.24.0-rc1 (#2714) * DROID-598 Sets | Refactoring | Provide relation format for date filters (#2715) * DROID-625 Protocol | Enhancement | Integrate v0.24.0-rc2 (#2718)
79 lines
2.6 KiB
Kotlin
79 lines
2.6 KiB
Kotlin
package com.anytypeio.anytype.ui.sets.modals
|
|
|
|
import android.os.Bundle
|
|
import android.view.View
|
|
import android.view.inputmethod.EditorInfo
|
|
import android.widget.EditText
|
|
import androidx.annotation.CallSuper
|
|
import androidx.lifecycle.Lifecycle
|
|
import androidx.lifecycle.lifecycleScope
|
|
import androidx.lifecycle.repeatOnLifecycle
|
|
import androidx.viewbinding.ViewBinding
|
|
import com.anytypeio.anytype.core_ui.reactive.editorActionEvents
|
|
import com.anytypeio.anytype.core_utils.ext.argString
|
|
import com.anytypeio.anytype.core_utils.ext.hideKeyboard
|
|
import com.anytypeio.anytype.core_utils.ext.toast
|
|
import com.anytypeio.anytype.core_utils.ui.BaseBottomSheetFragment
|
|
import com.anytypeio.anytype.presentation.sets.SetDataViewObjectNameViewModelBase
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.launch
|
|
|
|
abstract class SetObjectCreateRecordFragmentBase<T: ViewBinding> :
|
|
BaseBottomSheetFragment<T>() {
|
|
|
|
protected abstract val textInputType: Int
|
|
protected abstract val textInputField: EditText
|
|
protected abstract val button: View
|
|
|
|
protected abstract val vm: SetDataViewObjectNameViewModelBase
|
|
|
|
abstract fun onButtonClicked()
|
|
abstract fun onKeyboardActionDone()
|
|
|
|
protected val ctx: String get() = argString(CONTEXT_KEY)
|
|
|
|
private val handler: (Int) -> Boolean = { action ->
|
|
action == EditorInfo.IME_ACTION_DONE
|
|
}
|
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
super.onViewCreated(view, savedInstanceState)
|
|
textInputField.apply { setRawInputType(textInputType) }
|
|
button.setOnClickListener { onButtonClicked() }
|
|
lifecycleScope.launch {
|
|
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
|
|
onStart(this)
|
|
}
|
|
}
|
|
}
|
|
|
|
@CallSuper
|
|
protected open fun onStart(scope: CoroutineScope) {
|
|
with(scope) {
|
|
launch { subscribeTextInputActions() }
|
|
launch { subscribeIsCompleted() }
|
|
launch { subscribeToasts() }
|
|
}
|
|
}
|
|
|
|
private suspend fun subscribeToasts() {
|
|
vm.toasts.collect { toast(it) }
|
|
}
|
|
|
|
private suspend fun subscribeTextInputActions() {
|
|
textInputField.editorActionEvents(handler).collect {
|
|
textInputField.clearFocus()
|
|
textInputField.hideKeyboard()
|
|
onKeyboardActionDone()
|
|
}
|
|
}
|
|
|
|
private suspend fun subscribeIsCompleted() {
|
|
vm.isCompleted.collect { isCompleted -> if (isCompleted) dismiss() }
|
|
}
|
|
|
|
companion object {
|
|
const val CONTEXT_KEY = "arg.object-set-record.context"
|
|
const val TARGET_KEY = "arg.object-set-record.target"
|
|
}
|
|
} |