From 091a8913942534622a9a23a4e33dac873f1fbc8f Mon Sep 17 00:00:00 2001 From: AnranYus Date: Sat, 21 Oct 2023 15:31:12 +0800 Subject: [PATCH] style: Maintain architectural boundaries --- .../lsp/view/activity/main/MainActivity.kt | 21 ++++++-------- .../java/com/lsp/view/model/MainViewModel.kt | 28 +++++++++++++++++-- .../main/java/com/lsp/view/model/UiState.kt | 2 +- 3 files changed, 36 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/lsp/view/activity/main/MainActivity.kt b/app/src/main/java/com/lsp/view/activity/main/MainActivity.kt index d9b20fc..ebc9ffe 100644 --- a/app/src/main/java/com/lsp/view/activity/main/MainActivity.kt +++ b/app/src/main/java/com/lsp/view/activity/main/MainActivity.kt @@ -30,9 +30,7 @@ class MainActivity : AppCompatActivity() { private lateinit var search: EditText private var shortAnnotationDuration: Int = 0 private var username: String? = "" - private var nowSourceName: String? = null val TAG = javaClass.simpleName - private var safeMode: Boolean = true //安全模式 private lateinit var viewModel: MainViewModel @@ -60,8 +58,7 @@ class MainActivity : AppCompatActivity() { search.setOnEditorActionListener { content, actionId, _ -> if (actionId == EditorInfo.IME_ACTION_SEARCH) { - viewModel.uiState.value.nowSearchText.value = content.text.toString() - viewModel.fetchPostByRefresh() + viewModel.fetchPostBySearch(content.text.toString()) } return@setOnEditorActionListener false } @@ -150,18 +147,18 @@ class MainActivity : AppCompatActivity() { //加载源改变 val configSp = getSharedPreferences("com.lsp.view_preferences", 0) - if (nowSourceName != configSp.getString("source_name",null)){ - viewModel.fetchPostByRefresh() - nowSourceName = configSp.getString("source_name",null) + + val nowSourceName = configSp.getString("source_name", null) + + if (nowSourceName != null && viewModel.uiState.value.nowSourceName.value != nowSourceName){ + viewModel.updateNowSource(nowSourceName) } - if (safeMode != configSp.getBoolean("safe_mode",true)){ - viewModel.fetchPostByRefresh() - safeMode = configSp.getBoolean("safe_mode",true) + val nowMode = configSp.getBoolean("safe_mode", true) + if (viewModel.uiState.value.isSafe != nowMode){ + viewModel.updateSafeMode(nowMode) } -// search.setText("") - } //隐藏搜索栏 diff --git a/app/src/main/java/com/lsp/view/model/MainViewModel.kt b/app/src/main/java/com/lsp/view/model/MainViewModel.kt index 79018a5..95da6fe 100644 --- a/app/src/main/java/com/lsp/view/model/MainViewModel.kt +++ b/app/src/main/java/com/lsp/view/model/MainViewModel.kt @@ -22,7 +22,8 @@ import kotlinx.coroutines.launch class MainViewModel(private val repository: PostRepository,context: Context):ViewModel() { private val _uiState = MutableStateFlow(UiState()) - val uiState:StateFlow = _uiState.asStateFlow() + val uiState:StateFlow + get() = _uiState.asStateFlow() private var fetchJob: Job? = null val adapter = PostAdapter(context) private val TAG = this::class.java.simpleName @@ -62,7 +63,9 @@ class MainViewModel(private val repository: PostRepository,context: Context):Vie } _uiState.update { - it.copy(nowSourceName = configSp.getString("source_name",null)) + it.apply { + it.nowSourceName.postValue(configSp.getString("source_name",null)) + } } } @@ -109,6 +112,16 @@ class MainViewModel(private val repository: PostRepository,context: Context):Vie fetchNewPost() } + fun fetchPostBySearch(searchTarget:String){ + _uiState.update { + it.apply { + it.nowSearchText.postValue(searchTarget) + } + } + + fetchNewPost() + } + fun appendPost(){ _uiState.update { @@ -123,4 +136,15 @@ class MainViewModel(private val repository: PostRepository,context: Context):Vie } + fun updateSafeMode(mode:Boolean){ + _uiState.update { + it.copy(isSafe = mode) + } + fetchNewPost() + } + + fun updateNowSource(source:String){ + _uiState.value.nowSourceName.postValue(source) + fetchPostByRefresh() + } } \ No newline at end of file diff --git a/app/src/main/java/com/lsp/view/model/UiState.kt b/app/src/main/java/com/lsp/view/model/UiState.kt index 6fc7584..d2942e2 100644 --- a/app/src/main/java/com/lsp/view/model/UiState.kt +++ b/app/src/main/java/com/lsp/view/model/UiState.kt @@ -6,7 +6,7 @@ data class UiState( var showSearchBar:Boolean = false, val isRefreshing:MutableLiveData = MutableLiveData(), var nowSearchText:MutableLiveData = MutableLiveData(""), - val nowSourceName: String? = null, + val nowSourceName: MutableLiveData = MutableLiveData(), val isSafe: Boolean = true, //安全模式 val nowPage:Int = 1, val isAppend:Boolean = false