New feature: remaining tasks tip

This commit is contained in:
Super12138 2024-04-13 10:17:45 +08:00
parent baeecb343b
commit a903c8ef98
5 changed files with 58 additions and 27 deletions

View file

@ -7,6 +7,7 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import cn.super12138.todo.R
import cn.super12138.todo.databinding.FragmentProgressBinding import cn.super12138.todo.databinding.FragmentProgressBinding
@ -26,18 +27,28 @@ class ProgressFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
viewModel = ViewModelProvider(requireActivity()).get(ProgressFragmentViewModel::class.java) viewModel = ViewModelProvider(requireActivity())[ProgressFragmentViewModel::class.java]
viewModel.progress.observe(viewLifecycleOwner, Observer { value -> viewModel.progress.observe(viewLifecycleOwner, Observer { value ->
binding.progressBar.setProgressCompat(value, true) binding.progressBar.setProgressCompat(value, true)
}) })
viewModel.totalCount.observe(viewLifecycleOwner, Observer { total -> viewModel.totalCount.observe(viewLifecycleOwner, Observer { total ->
binding.totalTextView.text = total.toString() binding.totalCount.text = total.toString()
}) })
viewModel.completeCount.observe(viewLifecycleOwner, Observer { complete -> viewModel.completeCount.observe(viewLifecycleOwner, Observer { complete ->
binding.completeTextView.text = complete.toString() binding.completeCount.text = complete.toString()
})
viewModel.remainCount.observe(viewLifecycleOwner, Observer { remain ->
if (remain == 0) {
binding.remainCount.visibility = View.GONE
} else {
binding.remainCount.visibility = View.VISIBLE
binding.remainCount.text =
String.format(getString(R.string.remain_text), remain.toString())
}
}) })
viewModel.updateProgress() viewModel.updateProgress()

View file

@ -10,6 +10,7 @@ import kotlinx.coroutines.launch
class ProgressFragmentViewModel : ViewModel() { class ProgressFragmentViewModel : ViewModel() {
val totalCount: MutableLiveData<Int> = MutableLiveData() val totalCount: MutableLiveData<Int> = MutableLiveData()
val completeCount: MutableLiveData<Int> = MutableLiveData() val completeCount: MutableLiveData<Int> = MutableLiveData()
val remainCount: MutableLiveData<Int> = MutableLiveData()
val progress: MutableLiveData<Int> = MutableLiveData() val progress: MutableLiveData<Int> = MutableLiveData()
fun updateProgress() { fun updateProgress() {
@ -22,6 +23,7 @@ class ProgressFragmentViewModel : ViewModel() {
progress.postValue(calcProgress.toInt()) progress.postValue(calcProgress.toInt())
completeCount.postValue(complete) completeCount.postValue(complete)
totalCount.postValue(total) totalCount.postValue(total)
remainCount.postValue(total - complete)
} }
} }
} }

View file

@ -12,7 +12,7 @@
android:layout_marginLeft="15dp" android:layout_marginLeft="15dp"
android:layout_marginRight="15dp" android:layout_marginRight="15dp"
android:max="100" android:max="100"
app:indicatorSize="160dp" app:indicatorSize="170dp"
app:indicatorTrackGapSize="10dp" app:indicatorTrackGapSize="10dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
@ -26,38 +26,54 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center" android:gravity="center"
android:orientation="horizontal" android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
<TextView <LinearLayout
android:id="@+id/completeTextView" android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="0" android:gravity="center"
android:textAppearance="@style/TextAppearance.AppCompat.Display1" android:orientation="horizontal">
android:textColor="?android:attr/textColorPrimary"
android:textStyle="bold" /> <TextView
android:id="@+id/complete_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:text="0"
android:textAppearance="?attr/textAppearanceDisplaySmall"
android:textColor="?android:attr/textColorPrimary"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="/"
android:textAppearance="?attr/textAppearanceDisplayMedium"
android:textColor="?android:attr/textColorPrimary"
android:textStyle="bold" />
<TextView
android:id="@+id/total_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:text="0"
android:textAppearance="?attr/textAppearanceDisplayMedium"
android:textColor="?android:attr/textColorPrimary"
android:textStyle="bold" />
</LinearLayout>
<TextView <TextView
android:id="@+id/textView" android:id="@+id/remain_count"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="/" android:textAlignment="center"
android:textAppearance="@style/TextAppearance.AppCompat.Display2" android:visibility="gone"
android:textColor="?android:attr/textColorPrimary" android:textSize="12sp" />
android:textStyle="bold" />
<TextView
android:id="@+id/totalTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textAppearance="@style/TextAppearance.AppCompat.Display2"
android:textColor="?android:attr/textColorPrimary"
android:textStyle="bold" />
</LinearLayout> </LinearLayout>

View file

@ -68,4 +68,5 @@
<string name="info_state_complete">状态:已完成</string> <string name="info_state_complete">状态:已完成</string>
<string name="info_state_incomplete">状态:未完成</string> <string name="info_state_incomplete">状态:未完成</string>
<string name="info_uuid">UUID%s</string> <string name="info_uuid">UUID%s</string>
<string name="remain_text">剩余 %s 项任务</string>
</resources> </resources>

View file

@ -68,4 +68,5 @@
<string name="info_state_complete">State: complete</string> <string name="info_state_complete">State: complete</string>
<string name="info_state_incomplete">State: incomplete</string> <string name="info_state_incomplete">State: incomplete</string>
<string name="info_uuid">UUID: %s</string> <string name="info_uuid">UUID: %s</string>
<string name="remain_text">s% tasks remaining</string>
</resources> </resources>