Uses fragments instead of activities
This commit is contained in:
parent
33532fe75a
commit
7954ea4a4f
44 changed files with 619 additions and 576 deletions
|
|
@ -17,41 +17,19 @@
|
||||||
tools:targetApi="35">
|
tools:targetApi="35">
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".views.main.MainActivity"
|
android:name=".views.activities.MainActivity"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:launchMode="singleTask">
|
android:launchMode="singleTask">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
|
<action android:name="android.intent.action.APPLICATION_PREFERENCES" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name=".views.settings.SettingsActivity"
|
android:name=".views.activities.CrashActivity"
|
||||||
android:exported="false"
|
|
||||||
android:label="@string/settings_label"
|
|
||||||
android:launchMode="singleTask">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.APPLICATION_PREFERENCES" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:name=".views.all.AllTasksActivity"
|
|
||||||
android:exported="false"
|
|
||||||
android:label="@string/all_tasks_label"
|
|
||||||
android:launchMode="singleTask" />
|
|
||||||
<activity
|
|
||||||
android:name=".views.about.AboutActivity"
|
|
||||||
android:exported="false"
|
|
||||||
android:label="@string/about_label"
|
|
||||||
android:launchMode="singleTask" />
|
|
||||||
<activity
|
|
||||||
android:name=".views.welcome.WelcomeActivity"
|
|
||||||
android:exported="false"
|
|
||||||
android:label="@string/welcome_label"
|
|
||||||
android:launchMode="singleTask" />
|
|
||||||
<activity
|
|
||||||
android:name=".views.crash.CrashActivity"
|
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,8 @@ package cn.super12138.todo
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
|
||||||
import cn.super12138.todo.constant.GlobalValues
|
|
||||||
import cn.super12138.todo.logic.dao.ToDoRoomDB
|
import cn.super12138.todo.logic.dao.ToDoRoomDB
|
||||||
import cn.super12138.todo.views.crash.CrashHandler
|
import cn.super12138.todo.views.activities.CrashHandler
|
||||||
import cn.super12138.todo.views.welcome.WelcomeActivity
|
|
||||||
import com.google.android.material.color.DynamicColors
|
import com.google.android.material.color.DynamicColors
|
||||||
|
|
||||||
class ToDoApp : Application() {
|
class ToDoApp : Application() {
|
||||||
|
|
@ -28,12 +25,5 @@ class ToDoApp : Application() {
|
||||||
Thread.setDefaultUncaughtExceptionHandler(crashHandler)
|
Thread.setDefaultUncaughtExceptionHandler(crashHandler)
|
||||||
|
|
||||||
db = database
|
db = database
|
||||||
|
|
||||||
if (!GlobalValues.welcomePage) {
|
|
||||||
val intent = Intent(this, WelcomeActivity::class.java).apply {
|
|
||||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
|
||||||
}
|
|
||||||
startActivity(intent)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -5,7 +5,6 @@ import android.os.Bundle
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.appcompat.app.AppCompatDelegate
|
import androidx.appcompat.app.AppCompatDelegate
|
||||||
import androidx.core.view.WindowCompat
|
|
||||||
import androidx.viewbinding.ViewBinding
|
import androidx.viewbinding.ViewBinding
|
||||||
import cn.super12138.todo.constant.GlobalValues
|
import cn.super12138.todo.constant.GlobalValues
|
||||||
|
|
||||||
|
|
@ -19,7 +18,7 @@ abstract class BaseActivity<T : ViewBinding> : AppCompatActivity() {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
// 确保 Navigation Bar 区域会被显示
|
// 确保 Navigation Bar 区域会被显示
|
||||||
WindowCompat.setDecorFitsSystemWindows(window, false)
|
// WindowCompat.setDecorFitsSystemWindows(window, false)
|
||||||
|
|
||||||
binding = getViewBinding()
|
binding = getViewBinding()
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,18 @@
|
||||||
package cn.super12138.todo.views.welcome.pages
|
package cn.super12138.todo.views
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.viewbinding.ViewBinding
|
||||||
import com.google.android.material.color.MaterialColors
|
import com.google.android.material.color.MaterialColors
|
||||||
import com.google.android.material.transition.MaterialSharedAxis
|
import com.google.android.material.transition.MaterialSharedAxis
|
||||||
|
|
||||||
open class BasePage : Fragment() {
|
abstract class BaseFragment<T : ViewBinding> : Fragment() {
|
||||||
|
private var _binding: T? = null
|
||||||
|
protected val binding get() = _binding!!
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ true)
|
enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ true)
|
||||||
|
|
@ -15,10 +21,30 @@ open class BasePage : Fragment() {
|
||||||
reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ false)
|
reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, /* forward= */ false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater,
|
||||||
|
container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
_binding = getViewBinding(inflater, container, false)
|
||||||
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
// https://github.com/material-components/material-components-android/issues/1984#issuecomment-1089710991
|
// https://github.com/material-components/material-components-android/issues/1984#issuecomment-1089710991
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
// Overlap colors.
|
// Overlap colors.
|
||||||
view.setBackgroundColor(MaterialColors.getColor(view, android.R.attr.colorBackground))
|
view.setBackgroundColor(MaterialColors.getColor(view, android.R.attr.colorBackground))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract fun getViewBinding(
|
||||||
|
inflater: LayoutInflater,
|
||||||
|
container: ViewGroup?,
|
||||||
|
attachToRoot: Boolean
|
||||||
|
): T
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
super.onDestroyView()
|
||||||
|
_binding = null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.super12138.todo.views.crash
|
package cn.super12138.todo.views.activities
|
||||||
|
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.super12138.todo.views.crash
|
package cn.super12138.todo.views.activities
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
|
@ -0,0 +1,60 @@
|
||||||
|
package cn.super12138.todo.views.activities
|
||||||
|
// 2023.11.18立项
|
||||||
|
import android.app.ComponentCaller
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.WindowManager
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.fragment.app.commit
|
||||||
|
import cn.super12138.todo.R
|
||||||
|
import cn.super12138.todo.constant.GlobalValues
|
||||||
|
import cn.super12138.todo.databinding.ActivityMainBinding
|
||||||
|
import cn.super12138.todo.views.BaseActivity
|
||||||
|
import cn.super12138.todo.views.fragments.SettingsParentFragment
|
||||||
|
import cn.super12138.todo.views.fragments.welcome.WelcomeFragment
|
||||||
|
|
||||||
|
class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
if (!GlobalValues.welcomePage) {
|
||||||
|
startFragment(WelcomeFragment())
|
||||||
|
}
|
||||||
|
|
||||||
|
when (GlobalValues.secureMode) {
|
||||||
|
true -> window.setFlags(
|
||||||
|
WindowManager.LayoutParams.FLAG_SECURE,
|
||||||
|
WindowManager.LayoutParams.FLAG_SECURE
|
||||||
|
)
|
||||||
|
|
||||||
|
false -> window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
|
||||||
|
}
|
||||||
|
handleIntent(intent)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onNewIntent(intent: Intent, caller: ComponentCaller) {
|
||||||
|
super.onNewIntent(intent, caller)
|
||||||
|
handleIntent(intent)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getViewBinding(): ActivityMainBinding {
|
||||||
|
return ActivityMainBinding.inflate(layoutInflater)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun startFragment(fragment: Fragment, args: (Bundle.() -> Unit)? = null) {
|
||||||
|
supportFragmentManager.commit {
|
||||||
|
addToBackStack(System.currentTimeMillis().toString())
|
||||||
|
hide(supportFragmentManager.fragments.last())
|
||||||
|
add(
|
||||||
|
R.id.app_container,
|
||||||
|
fragment.apply { args?.let { arguments = Bundle().apply(it) } }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun handleIntent(intent: Intent) {
|
||||||
|
when (intent.action) {
|
||||||
|
Intent.ACTION_APPLICATION_PREFERENCES -> startFragment(SettingsParentFragment())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.super12138.todo.views.all
|
package cn.super12138.todo.views.adapters
|
||||||
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
|
@ -15,7 +15,7 @@ import cn.super12138.todo.constant.Constants.DEFAULT_VIEW_TYPE
|
||||||
import cn.super12138.todo.constant.Constants.EMPTY_VIEW_TYPE
|
import cn.super12138.todo.constant.Constants.EMPTY_VIEW_TYPE
|
||||||
import cn.super12138.todo.logic.model.ToDo
|
import cn.super12138.todo.logic.model.ToDo
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
import cn.super12138.todo.views.todo.ToDoAdapter.DefaultViewHolder
|
import cn.super12138.todo.views.fragments.InfoBottomSheet
|
||||||
|
|
||||||
class AllTasksAdapter(
|
class AllTasksAdapter(
|
||||||
private val todoList: MutableList<ToDo>,
|
private val todoList: MutableList<ToDo>,
|
||||||
|
|
@ -61,6 +61,8 @@ class AllTasksAdapter(
|
||||||
if (todo.state == 1) {
|
if (todo.state == 1) {
|
||||||
holder.itemBackground.background =
|
holder.itemBackground.background =
|
||||||
ContextCompat.getDrawable(ToDoApp.context, R.drawable.bg_item_complete)
|
ContextCompat.getDrawable(ToDoApp.context, R.drawable.bg_item_complete)
|
||||||
|
} else {
|
||||||
|
holder.itemBackground.background = null
|
||||||
}
|
}
|
||||||
|
|
||||||
holder.itemView.setOnClickListener {
|
holder.itemView.setOnClickListener {
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.super12138.todo.views.todo
|
package cn.super12138.todo.views.adapters
|
||||||
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
|
@ -16,8 +16,9 @@ import cn.super12138.todo.constant.GlobalValues
|
||||||
import cn.super12138.todo.logic.model.ToDo
|
import cn.super12138.todo.logic.model.ToDo
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
import cn.super12138.todo.utils.showToast
|
import cn.super12138.todo.utils.showToast
|
||||||
import cn.super12138.todo.views.bottomsheet.ToDoBottomSheet
|
import cn.super12138.todo.views.fragments.ToDoBottomSheet
|
||||||
import cn.super12138.todo.views.progress.ProgressViewModel
|
import cn.super12138.todo.views.viewmodels.ProgressViewModel
|
||||||
|
import cn.super12138.todo.views.viewmodels.ToDoViewModel
|
||||||
|
|
||||||
class ToDoAdapter(
|
class ToDoAdapter(
|
||||||
private val todoList: MutableList<ToDo>,
|
private val todoList: MutableList<ToDo>,
|
||||||
|
|
@ -1,54 +0,0 @@
|
||||||
package cn.super12138.todo.views.all
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.view.WindowManager
|
|
||||||
import androidx.activity.viewModels
|
|
||||||
import androidx.lifecycle.Observer
|
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
|
||||||
import cn.super12138.todo.ToDoApp
|
|
||||||
import cn.super12138.todo.constant.GlobalValues
|
|
||||||
import cn.super12138.todo.databinding.ActivityAllTasksBinding
|
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
|
||||||
import cn.super12138.todo.views.BaseActivity
|
|
||||||
import me.zhanghai.android.fastscroll.FastScrollerBuilder
|
|
||||||
|
|
||||||
class AllTasksActivity : BaseActivity<ActivityAllTasksBinding>() {
|
|
||||||
private val viewModel by viewModels<AllTasksViewModel>()
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
|
|
||||||
when (GlobalValues.secureMode) {
|
|
||||||
true -> window.setFlags(
|
|
||||||
WindowManager.LayoutParams.FLAG_SECURE,
|
|
||||||
WindowManager.LayoutParams.FLAG_SECURE
|
|
||||||
)
|
|
||||||
|
|
||||||
false -> window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
|
|
||||||
}
|
|
||||||
|
|
||||||
val todoListAll = viewModel.todoListAll
|
|
||||||
val layoutManager = LinearLayoutManager(ToDoApp.context)
|
|
||||||
binding.allTasksList.layoutManager = layoutManager
|
|
||||||
val adapter = AllTasksAdapter(todoListAll, supportFragmentManager)
|
|
||||||
binding.allTasksList.adapter = adapter
|
|
||||||
|
|
||||||
FastScrollerBuilder(binding.allTasksList).apply {
|
|
||||||
useMd2Style()
|
|
||||||
build()
|
|
||||||
}
|
|
||||||
|
|
||||||
binding.toolBar.setNavigationOnClickListener {
|
|
||||||
VibrationUtils.performHapticFeedback(it)
|
|
||||||
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
|
|
||||||
viewModel.refreshData.observe(this, Observer {
|
|
||||||
binding.allTasksList.adapter?.notifyItemRangeChanged(0, todoListAll.size + 1)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getViewBinding(): ActivityAllTasksBinding {
|
|
||||||
return ActivityAllTasksBinding.inflate(layoutInflater)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,27 +1,30 @@
|
||||||
package cn.super12138.todo.views.about
|
package cn.super12138.todo.views.fragments
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
import cn.super12138.todo.constant.Constants
|
import cn.super12138.todo.constant.Constants
|
||||||
import cn.super12138.todo.databinding.ActivityAboutBinding
|
import cn.super12138.todo.databinding.FragmentAboutBinding
|
||||||
import cn.super12138.todo.utils.VersionUtils
|
import cn.super12138.todo.utils.VersionUtils
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
import cn.super12138.todo.utils.showToast
|
import cn.super12138.todo.utils.showToast
|
||||||
import cn.super12138.todo.views.BaseActivity
|
import cn.super12138.todo.views.BaseFragment
|
||||||
|
|
||||||
class AboutActivity : BaseActivity<ActivityAboutBinding>() {
|
class AboutFragment : BaseFragment<FragmentAboutBinding>() {
|
||||||
private var clickCount = 0
|
private var clickCount = 0
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.appVersion.text = VersionUtils.getAppVersion(this)
|
binding.appVersion.text = VersionUtils.getAppVersion(requireActivity())
|
||||||
|
|
||||||
binding.toolBar.setNavigationOnClickListener {
|
binding.toolBar.setNavigationOnClickListener {
|
||||||
VibrationUtils.performHapticFeedback(it)
|
VibrationUtils.performHapticFeedback(it)
|
||||||
|
|
||||||
finish()
|
requireActivity().supportFragmentManager.popBackStack()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.checkUpdate.setOnClickListener {
|
binding.checkUpdate.setOnClickListener {
|
||||||
|
|
@ -58,7 +61,7 @@ class AboutActivity : BaseActivity<ActivityAboutBinding>() {
|
||||||
5 -> {
|
5 -> {
|
||||||
clickCount = 0
|
clickCount = 0
|
||||||
// GlobalValues.springFestivalTheme = !GlobalValues.springFestivalTheme
|
// GlobalValues.springFestivalTheme = !GlobalValues.springFestivalTheme
|
||||||
"\uD83C\uDF68".showToast()
|
"🍂".showToast()
|
||||||
/*when (java.util.Calendar.getInstance(Locale.getDefault())
|
/*when (java.util.Calendar.getInstance(Locale.getDefault())
|
||||||
.get(java.util.Calendar.MONTH) + 1) {
|
.get(java.util.Calendar.MONTH) + 1) {
|
||||||
3, 4, 5 ->
|
3, 4, 5 ->
|
||||||
|
|
@ -72,7 +75,11 @@ class AboutActivity : BaseActivity<ActivityAboutBinding>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getViewBinding(): ActivityAboutBinding {
|
override fun getViewBinding(
|
||||||
return ActivityAboutBinding.inflate(layoutInflater)
|
inflater: LayoutInflater,
|
||||||
|
container: ViewGroup?,
|
||||||
|
attachToRoot: Boolean
|
||||||
|
): FragmentAboutBinding {
|
||||||
|
return FragmentAboutBinding.inflate(inflater, container, attachToRoot)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
package cn.super12138.todo.views.fragments
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.fragment.app.viewModels
|
||||||
|
import androidx.lifecycle.Observer
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
|
import cn.super12138.todo.ToDoApp
|
||||||
|
import cn.super12138.todo.databinding.FragmentAllTasksBinding
|
||||||
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
|
import cn.super12138.todo.views.BaseFragment
|
||||||
|
import cn.super12138.todo.views.adapters.AllTasksAdapter
|
||||||
|
import cn.super12138.todo.views.viewmodels.AllTasksViewModel
|
||||||
|
import me.zhanghai.android.fastscroll.FastScrollerBuilder
|
||||||
|
|
||||||
|
class AllTasksFragment : BaseFragment<FragmentAllTasksBinding>() {
|
||||||
|
private val viewModel by viewModels<AllTasksViewModel>()
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
val todoListAll = viewModel.todoListAll
|
||||||
|
val layoutManager = LinearLayoutManager(ToDoApp.context)
|
||||||
|
binding.allTasksList.layoutManager = layoutManager
|
||||||
|
val adapter = AllTasksAdapter(todoListAll, childFragmentManager)
|
||||||
|
binding.allTasksList.adapter = adapter
|
||||||
|
|
||||||
|
FastScrollerBuilder(binding.allTasksList).apply {
|
||||||
|
useMd2Style()
|
||||||
|
build()
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.toolBar.setNavigationOnClickListener {
|
||||||
|
VibrationUtils.performHapticFeedback(it)
|
||||||
|
|
||||||
|
requireActivity().supportFragmentManager.popBackStack()
|
||||||
|
}
|
||||||
|
|
||||||
|
viewModel.refreshData.observe(viewLifecycleOwner, Observer {
|
||||||
|
binding.allTasksList.adapter?.notifyItemRangeChanged(0, todoListAll.size + 1)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getViewBinding(
|
||||||
|
inflater: LayoutInflater,
|
||||||
|
container: ViewGroup?,
|
||||||
|
attachToRoot: Boolean
|
||||||
|
): FragmentAllTasksBinding {
|
||||||
|
return FragmentAllTasksBinding.inflate(inflater, container, attachToRoot)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.super12138.todo.views.all
|
package cn.super12138.todo.views.fragments
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
package cn.super12138.todo.views.fragments
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import cn.super12138.todo.R
|
||||||
|
import cn.super12138.todo.databinding.FragmentMainBinding
|
||||||
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
|
import cn.super12138.todo.views.BaseFragment
|
||||||
|
import cn.super12138.todo.views.activities.MainActivity
|
||||||
|
|
||||||
|
class MainFragment : BaseFragment<FragmentMainBinding>() {
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
binding.toolBar.setOnMenuItemClickListener { menuItem ->
|
||||||
|
when (menuItem.itemId) {
|
||||||
|
R.id.item_settings -> {
|
||||||
|
(requireActivity() as MainActivity).startFragment(SettingsParentFragment())
|
||||||
|
|
||||||
|
VibrationUtils.performHapticFeedback(binding.toolBar)
|
||||||
|
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// setSupportActionBar(binding.toolbar)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getViewBinding(
|
||||||
|
inflater: LayoutInflater,
|
||||||
|
container: ViewGroup?,
|
||||||
|
attachToRoot: Boolean
|
||||||
|
): FragmentMainBinding {
|
||||||
|
return FragmentMainBinding.inflate(inflater, container, attachToRoot)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,29 +1,19 @@
|
||||||
package cn.super12138.todo.views.progress
|
package cn.super12138.todo.views.fragments
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import androidx.lifecycle.Observer
|
import androidx.lifecycle.Observer
|
||||||
import cn.super12138.todo.R
|
import cn.super12138.todo.R
|
||||||
import cn.super12138.todo.databinding.FragmentProgressBinding
|
import cn.super12138.todo.databinding.FragmentProgressBinding
|
||||||
|
import cn.super12138.todo.views.BaseFragment
|
||||||
|
import cn.super12138.todo.views.viewmodels.ProgressViewModel
|
||||||
|
|
||||||
|
|
||||||
class ProgressFragment : Fragment() {
|
class ProgressFragment : BaseFragment<FragmentProgressBinding>() {
|
||||||
private val viewModel: ProgressViewModel by viewModels({ requireActivity() })
|
private val viewModel: ProgressViewModel by viewModels({ requireActivity() })
|
||||||
private lateinit var binding: FragmentProgressBinding
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View {
|
|
||||||
binding = FragmentProgressBinding.inflate(inflater, container, false)
|
|
||||||
|
|
||||||
return binding.root
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
@ -51,4 +41,12 @@ class ProgressFragment : Fragment() {
|
||||||
|
|
||||||
viewModel.updateProgress()
|
viewModel.updateProgress()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getViewBinding(
|
||||||
|
inflater: LayoutInflater,
|
||||||
|
container: ViewGroup?,
|
||||||
|
attachToRoot: Boolean
|
||||||
|
): FragmentProgressBinding {
|
||||||
|
return FragmentProgressBinding.inflate(inflater, container, attachToRoot)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.super12138.todo.views.settings
|
package cn.super12138.todo.views.fragments
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
|
@ -21,10 +21,8 @@ import cn.super12138.todo.databinding.DialogRestoreBinding
|
||||||
import cn.super12138.todo.logic.Repository
|
import cn.super12138.todo.logic.Repository
|
||||||
import cn.super12138.todo.logic.dao.ToDoRoom
|
import cn.super12138.todo.logic.dao.ToDoRoom
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
import cn.super12138.todo.views.about.AboutActivity
|
import cn.super12138.todo.views.activities.MainActivity
|
||||||
import cn.super12138.todo.views.all.AllTasksActivity
|
import cn.super12138.todo.views.fragments.welcome.WelcomeFragment
|
||||||
import cn.super12138.todo.views.main.MainActivity
|
|
||||||
import cn.super12138.todo.views.welcome.WelcomeActivity
|
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
|
|
@ -39,6 +37,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
|
||||||
|
|
||||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||||
setPreferencesFromResource(R.xml.preferences, rootKey)
|
setPreferencesFromResource(R.xml.preferences, rootKey)
|
||||||
|
val mainActivity = requireActivity() as MainActivity
|
||||||
val gson = Gson()
|
val gson = Gson()
|
||||||
|
|
||||||
findPreference<ListPreference>(Constants.PREF_DARK_MODE)?.apply {
|
findPreference<ListPreference>(Constants.PREF_DARK_MODE)?.apply {
|
||||||
|
|
@ -173,15 +172,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
|
||||||
|
|
||||||
findPreference<Preference>(Constants.PREF_ALL_TASKS)?.apply {
|
findPreference<Preference>(Constants.PREF_ALL_TASKS)?.apply {
|
||||||
setOnPreferenceClickListener {
|
setOnPreferenceClickListener {
|
||||||
startActivity(Intent(context, AllTasksActivity::class.java))
|
mainActivity.startFragment(AllTasksFragment())
|
||||||
VibrationUtils.performHapticFeedback(view)
|
|
||||||
true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
findPreference<Preference>(Constants.PREF_ABOUT)?.apply {
|
|
||||||
setOnPreferenceClickListener {
|
|
||||||
startActivity(Intent(context, AboutActivity::class.java))
|
|
||||||
VibrationUtils.performHapticFeedback(view)
|
VibrationUtils.performHapticFeedback(view)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
@ -189,10 +180,15 @@ class SettingsFragment : PreferenceFragmentCompat() {
|
||||||
|
|
||||||
findPreference<Preference>(Constants.PREF_REENTER_WELCOME_ACTIVITY)?.apply {
|
findPreference<Preference>(Constants.PREF_REENTER_WELCOME_ACTIVITY)?.apply {
|
||||||
setOnPreferenceClickListener {
|
setOnPreferenceClickListener {
|
||||||
val intent = Intent(context, WelcomeActivity::class.java).apply {
|
mainActivity.startFragment(WelcomeFragment())
|
||||||
flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
|
VibrationUtils.performHapticFeedback(view)
|
||||||
}
|
true
|
||||||
startActivity(intent)
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
findPreference<Preference>(Constants.PREF_ABOUT)?.apply {
|
||||||
|
setOnPreferenceClickListener {
|
||||||
|
mainActivity.startFragment(AboutFragment())
|
||||||
VibrationUtils.performHapticFeedback(view)
|
VibrationUtils.performHapticFeedback(view)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
package cn.super12138.todo.views.fragments
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import cn.super12138.todo.databinding.FragmentSettingsBinding
|
||||||
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
|
import cn.super12138.todo.views.BaseFragment
|
||||||
|
|
||||||
|
class SettingsParentFragment : BaseFragment<FragmentSettingsBinding>() {
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
binding.toolBar.setNavigationOnClickListener {
|
||||||
|
VibrationUtils.performHapticFeedback(it)
|
||||||
|
|
||||||
|
requireActivity().supportFragmentManager.popBackStack()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getViewBinding(
|
||||||
|
inflater: LayoutInflater,
|
||||||
|
container: ViewGroup?,
|
||||||
|
attachToRoot: Boolean
|
||||||
|
): FragmentSettingsBinding {
|
||||||
|
return FragmentSettingsBinding.inflate(inflater, container, attachToRoot)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.super12138.todo.views.bottomsheet
|
package cn.super12138.todo.views.fragments
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
|
@ -15,8 +15,8 @@ import cn.super12138.todo.utils.TextUtils
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
import cn.super12138.todo.utils.showToast
|
import cn.super12138.todo.utils.showToast
|
||||||
import cn.super12138.todo.utils.toEditable
|
import cn.super12138.todo.utils.toEditable
|
||||||
import cn.super12138.todo.views.progress.ProgressViewModel
|
import cn.super12138.todo.views.viewmodels.ProgressViewModel
|
||||||
import cn.super12138.todo.views.todo.ToDoViewModel
|
import cn.super12138.todo.views.viewmodels.ToDoViewModel
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialog
|
import com.google.android.material.bottomsheet.BottomSheetDialog
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.super12138.todo.views.todo
|
package cn.super12138.todo.views.fragments
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
|
@ -18,8 +18,9 @@ import cn.super12138.todo.ToDoApp
|
||||||
import cn.super12138.todo.databinding.FragmentTodoBinding
|
import cn.super12138.todo.databinding.FragmentTodoBinding
|
||||||
import cn.super12138.todo.logic.Repository
|
import cn.super12138.todo.logic.Repository
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
import cn.super12138.todo.views.bottomsheet.ToDoBottomSheet
|
import cn.super12138.todo.views.adapters.ToDoAdapter
|
||||||
import cn.super12138.todo.views.progress.ProgressViewModel
|
import cn.super12138.todo.views.viewmodels.ProgressViewModel
|
||||||
|
import cn.super12138.todo.views.viewmodels.ToDoViewModel
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import me.zhanghai.android.fastscroll.FastScrollerBuilder
|
import me.zhanghai.android.fastscroll.FastScrollerBuilder
|
||||||
|
|
@ -1,33 +1,37 @@
|
||||||
package cn.super12138.todo.views.welcome
|
package cn.super12138.todo.views.fragments.welcome
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
import androidx.activity.OnBackPressedCallback
|
import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.activity.viewModels
|
|
||||||
import androidx.appcompat.content.res.AppCompatResources
|
import androidx.appcompat.content.res.AppCompatResources
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.commit
|
import androidx.fragment.app.commit
|
||||||
|
import androidx.fragment.app.viewModels
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.lifecycle.repeatOnLifecycle
|
import androidx.lifecycle.repeatOnLifecycle
|
||||||
import cn.super12138.todo.R
|
import cn.super12138.todo.R
|
||||||
import cn.super12138.todo.constant.GlobalValues
|
import cn.super12138.todo.constant.GlobalValues
|
||||||
import cn.super12138.todo.databinding.ActivityWelcomeBinding
|
import cn.super12138.todo.databinding.FragmentWelcomeBinding
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
import cn.super12138.todo.utils.setOnIntervalClickListener
|
import cn.super12138.todo.utils.setOnIntervalClickListener
|
||||||
import cn.super12138.todo.views.BaseActivity
|
import cn.super12138.todo.views.BaseFragment
|
||||||
import cn.super12138.todo.views.main.MainActivity
|
import cn.super12138.todo.views.activities.MainActivity
|
||||||
import cn.super12138.todo.views.welcome.pages.IntroPage
|
import cn.super12138.todo.views.fragments.MainFragment
|
||||||
import cn.super12138.todo.views.welcome.pages.ProgressPage
|
import cn.super12138.todo.views.fragments.welcome.pages.IntroPage
|
||||||
import cn.super12138.todo.views.welcome.pages.ToDoBtnPage
|
import cn.super12138.todo.views.fragments.welcome.pages.ProgressPage
|
||||||
import cn.super12138.todo.views.welcome.pages.ToDoItemPage
|
import cn.super12138.todo.views.fragments.welcome.pages.ToDoBtnPage
|
||||||
|
import cn.super12138.todo.views.fragments.welcome.pages.ToDoItemPage
|
||||||
|
import cn.super12138.todo.views.viewmodels.WelcomeViewModel
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
|
class WelcomeFragment : BaseFragment<FragmentWelcomeBinding>() {
|
||||||
private val viewModel by viewModels<WelcomeViewModel>()
|
private val viewModel by viewModels<WelcomeViewModel>()
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
val previousBtn = binding.previousBtn
|
val previousBtn = binding.previousBtn
|
||||||
val nextBtn = binding.nextBtn
|
val nextBtn = binding.nextBtn
|
||||||
|
|
@ -35,6 +39,19 @@ class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
|
||||||
|
|
||||||
val currentPage = viewModel.currentPage // 0: Intro 1: Progress 2: ToDo Btn 3: ToDo Item
|
val currentPage = viewModel.currentPage // 0: Intro 1: Progress 2: ToDo Btn 3: ToDo Item
|
||||||
|
|
||||||
|
// 返回回调
|
||||||
|
val callback = object : OnBackPressedCallback(true) {
|
||||||
|
override fun handleOnBackPressed() {
|
||||||
|
if (currentPage.value == 0) {
|
||||||
|
requireActivity().finishAffinity()
|
||||||
|
} else {
|
||||||
|
childFragmentManager.popBackStack()
|
||||||
|
viewModel.decreasePage()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
centerBtn.setOnIntervalClickListener {
|
centerBtn.setOnIntervalClickListener {
|
||||||
VibrationUtils.performHapticFeedback(it)
|
VibrationUtils.performHapticFeedback(it)
|
||||||
|
|
||||||
|
|
@ -44,9 +61,7 @@ class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
|
||||||
|
|
||||||
if (currentPage.value == 3) {
|
if (currentPage.value == 3) {
|
||||||
GlobalValues.welcomePage = true
|
GlobalValues.welcomePage = true
|
||||||
finish()
|
(requireActivity() as MainActivity).startFragment(MainFragment())
|
||||||
val intent = Intent(this, MainActivity::class.java)
|
|
||||||
startActivity(intent)
|
|
||||||
} else {
|
} else {
|
||||||
viewModel.setCurrentPage(1)
|
viewModel.setCurrentPage(1)
|
||||||
nextPage(1)
|
nextPage(1)
|
||||||
|
|
@ -56,7 +71,7 @@ class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
|
||||||
previousBtn.setOnIntervalClickListener {
|
previousBtn.setOnIntervalClickListener {
|
||||||
VibrationUtils.performHapticFeedback(it)
|
VibrationUtils.performHapticFeedback(it)
|
||||||
|
|
||||||
supportFragmentManager.popBackStack()
|
childFragmentManager.popBackStack()
|
||||||
|
|
||||||
viewModel.decreasePage()
|
viewModel.decreasePage()
|
||||||
}
|
}
|
||||||
|
|
@ -66,6 +81,7 @@ class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
|
||||||
|
|
||||||
nextPage(currentPage.value + 1)
|
nextPage(currentPage.value + 1)
|
||||||
|
|
||||||
|
callback.isEnabled = false
|
||||||
viewModel.increasePage()
|
viewModel.increasePage()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -77,7 +93,7 @@ class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
|
||||||
centerBtn.apply {
|
centerBtn.apply {
|
||||||
text = getString(R.string.start)
|
text = getString(R.string.start)
|
||||||
icon = AppCompatResources.getDrawable(
|
icon = AppCompatResources.getDrawable(
|
||||||
this@WelcomeActivity,
|
requireContext(),
|
||||||
R.drawable.ic_arrow_forward
|
R.drawable.ic_arrow_forward
|
||||||
)
|
)
|
||||||
show()
|
show()
|
||||||
|
|
@ -96,7 +112,7 @@ class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
|
||||||
centerBtn.apply {
|
centerBtn.apply {
|
||||||
text = getString(R.string.enter_app)
|
text = getString(R.string.enter_app)
|
||||||
icon = AppCompatResources.getDrawable(
|
icon = AppCompatResources.getDrawable(
|
||||||
this@WelcomeActivity,
|
requireContext(),
|
||||||
R.drawable.ic_focus
|
R.drawable.ic_focus
|
||||||
)
|
)
|
||||||
show()
|
show()
|
||||||
|
|
@ -114,21 +130,7 @@ class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, callback)
|
||||||
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
|
|
||||||
override fun handleOnBackPressed() {
|
|
||||||
if (currentPage.value == 0) {
|
|
||||||
finish()
|
|
||||||
} else {
|
|
||||||
supportFragmentManager.popBackStack()
|
|
||||||
viewModel.decreasePage()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getViewBinding(): ActivityWelcomeBinding {
|
|
||||||
return ActivityWelcomeBinding.inflate(layoutInflater)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getCurrentPage(pageIndex: Int): Fragment {
|
private fun getCurrentPage(pageIndex: Int): Fragment {
|
||||||
|
|
@ -142,10 +144,18 @@ class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun nextPage(page: Int) {
|
private fun nextPage(page: Int) {
|
||||||
supportFragmentManager.commit {
|
childFragmentManager.commit {
|
||||||
addToBackStack(System.currentTimeMillis().toString())
|
addToBackStack(System.currentTimeMillis().toString())
|
||||||
hide(supportFragmentManager.fragments.last())
|
hide(childFragmentManager.fragments.last())
|
||||||
add(R.id.welcome_page_container, getCurrentPage(page))
|
add(R.id.welcome_page_container, getCurrentPage(page))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getViewBinding(
|
||||||
|
inflater: LayoutInflater,
|
||||||
|
container: ViewGroup?,
|
||||||
|
attachToRoot: Boolean
|
||||||
|
): FragmentWelcomeBinding {
|
||||||
|
return FragmentWelcomeBinding.inflate(inflater, container, attachToRoot)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package cn.super12138.todo.views.fragments.welcome.pages
|
||||||
|
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import cn.super12138.todo.databinding.FragmentWelcomeIntroBinding
|
||||||
|
import cn.super12138.todo.views.BaseFragment
|
||||||
|
|
||||||
|
class IntroPage : BaseFragment<FragmentWelcomeIntroBinding>() {
|
||||||
|
override fun getViewBinding(
|
||||||
|
inflater: LayoutInflater,
|
||||||
|
container: ViewGroup?,
|
||||||
|
attachToRoot: Boolean
|
||||||
|
): FragmentWelcomeIntroBinding {
|
||||||
|
return FragmentWelcomeIntroBinding.inflate(inflater, container, attachToRoot)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package cn.super12138.todo.views.fragments.welcome.pages
|
||||||
|
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import cn.super12138.todo.databinding.FragmentWelcomeProgressBinding
|
||||||
|
import cn.super12138.todo.views.BaseFragment
|
||||||
|
|
||||||
|
class ProgressPage : BaseFragment<FragmentWelcomeProgressBinding>() {
|
||||||
|
override fun getViewBinding(
|
||||||
|
inflater: LayoutInflater,
|
||||||
|
container: ViewGroup?,
|
||||||
|
attachToRoot: Boolean
|
||||||
|
): FragmentWelcomeProgressBinding {
|
||||||
|
return FragmentWelcomeProgressBinding.inflate(inflater, container, attachToRoot)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.super12138.todo.views.welcome.pages
|
package cn.super12138.todo.views.fragments.welcome.pages
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
|
@ -6,18 +6,15 @@ import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import cn.super12138.todo.databinding.FragmentWelcomeTodoBtnBinding
|
import cn.super12138.todo.databinding.FragmentWelcomeTodoBtnBinding
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
|
import cn.super12138.todo.views.BaseFragment
|
||||||
|
|
||||||
class ToDoBtnPage : BasePage() {
|
class ToDoBtnPage : BaseFragment<FragmentWelcomeTodoBtnBinding>() {
|
||||||
private lateinit var binding: FragmentWelcomeTodoBtnBinding
|
override fun getViewBinding(
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
attachToRoot: Boolean
|
||||||
): View {
|
): FragmentWelcomeTodoBtnBinding {
|
||||||
binding = FragmentWelcomeTodoBtnBinding.inflate(inflater, container, false)
|
return FragmentWelcomeTodoBtnBinding.inflate(inflater, container, attachToRoot)
|
||||||
|
|
||||||
return binding.root
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.super12138.todo.views.welcome.pages
|
package cn.super12138.todo.views.fragments.welcome.pages
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
|
@ -6,18 +6,15 @@ import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import cn.super12138.todo.databinding.FragmentWelcomeTodoItemBinding
|
import cn.super12138.todo.databinding.FragmentWelcomeTodoItemBinding
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
|
import cn.super12138.todo.views.BaseFragment
|
||||||
|
|
||||||
class ToDoItemPage : BasePage() {
|
class ToDoItemPage : BaseFragment<FragmentWelcomeTodoItemBinding>() {
|
||||||
private lateinit var binding: FragmentWelcomeTodoItemBinding
|
override fun getViewBinding(
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
attachToRoot: Boolean
|
||||||
): View {
|
): FragmentWelcomeTodoItemBinding {
|
||||||
binding = FragmentWelcomeTodoItemBinding.inflate(inflater, container, false)
|
return FragmentWelcomeTodoItemBinding.inflate(inflater, container, attachToRoot)
|
||||||
|
|
||||||
return binding.root
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
|
@ -1,53 +0,0 @@
|
||||||
package cn.super12138.todo.views.main
|
|
||||||
// 2023.11.18立项
|
|
||||||
import android.content.Intent
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.view.WindowManager
|
|
||||||
import cn.super12138.todo.R
|
|
||||||
import cn.super12138.todo.constant.GlobalValues
|
|
||||||
import cn.super12138.todo.databinding.ActivityMainBinding
|
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
|
||||||
import cn.super12138.todo.views.BaseActivity
|
|
||||||
import cn.super12138.todo.views.settings.SettingsActivity
|
|
||||||
import cn.super12138.todo.views.welcome.WelcomeActivity
|
|
||||||
|
|
||||||
class MainActivity : BaseActivity<ActivityMainBinding>() {
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
|
|
||||||
if(!GlobalValues.welcomePage) finish()
|
|
||||||
|
|
||||||
binding.toolBar.setOnMenuItemClickListener { menuItem ->
|
|
||||||
when (menuItem.itemId) {
|
|
||||||
R.id.item_settings -> {
|
|
||||||
val intent = Intent(this@MainActivity, SettingsActivity::class.java)
|
|
||||||
startActivity(intent)
|
|
||||||
|
|
||||||
VibrationUtils.performHapticFeedback(binding.toolBar)
|
|
||||||
|
|
||||||
true
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// setSupportActionBar(binding.toolbar)
|
|
||||||
when (GlobalValues.secureMode) {
|
|
||||||
true -> window.setFlags(
|
|
||||||
WindowManager.LayoutParams.FLAG_SECURE,
|
|
||||||
WindowManager.LayoutParams.FLAG_SECURE
|
|
||||||
)
|
|
||||||
|
|
||||||
false -> window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
|
|
||||||
}
|
|
||||||
if (!GlobalValues.welcomePage) {
|
|
||||||
val intent = Intent(this, WelcomeActivity::class.java)
|
|
||||||
startActivity(intent)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getViewBinding(): ActivityMainBinding {
|
|
||||||
return ActivityMainBinding.inflate(layoutInflater)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
package cn.super12138.todo.views.settings
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import cn.super12138.todo.R
|
|
||||||
import cn.super12138.todo.databinding.ActivitySettingsBinding
|
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
|
||||||
import cn.super12138.todo.views.BaseActivity
|
|
||||||
|
|
||||||
class SettingsActivity : BaseActivity<ActivitySettingsBinding>() {
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
|
||||||
supportFragmentManager
|
|
||||||
.beginTransaction()
|
|
||||||
.replace(R.id.settings_frame, SettingsFragment())
|
|
||||||
.commit()
|
|
||||||
}
|
|
||||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
|
||||||
|
|
||||||
binding.toolBar.setNavigationOnClickListener {
|
|
||||||
VibrationUtils.performHapticFeedback(it)
|
|
||||||
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getViewBinding(): ActivitySettingsBinding {
|
|
||||||
return ActivitySettingsBinding.inflate(layoutInflater)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.super12138.todo.views.all
|
package cn.super12138.todo.views.viewmodels
|
||||||
|
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.super12138.todo.views.progress
|
package cn.super12138.todo.views.viewmodels
|
||||||
|
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.super12138.todo.views.todo
|
package cn.super12138.todo.views.viewmodels
|
||||||
|
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.super12138.todo.views.welcome
|
package cn.super12138.todo.views.viewmodels
|
||||||
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
package cn.super12138.todo.views.welcome.pages
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import cn.super12138.todo.databinding.FragmentWelcomeIntroBinding
|
|
||||||
|
|
||||||
class IntroPage : BasePage() {
|
|
||||||
private lateinit var binding: FragmentWelcomeIntroBinding
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View {
|
|
||||||
binding = FragmentWelcomeIntroBinding.inflate(inflater, container, false)
|
|
||||||
|
|
||||||
return binding.root
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
package cn.super12138.todo.views.welcome.pages
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import cn.super12138.todo.databinding.FragmentWelcomeProgressBinding
|
|
||||||
|
|
||||||
class ProgressPage : BasePage() {
|
|
||||||
private lateinit var binding: FragmentWelcomeProgressBinding
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View {
|
|
||||||
binding = FragmentWelcomeProgressBinding.inflate(inflater, container, false)
|
|
||||||
|
|
||||||
return binding.root
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
tools:context=".views.main.MainActivity">
|
tools:context=".views.activities.MainActivity">
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:menu="@menu/main"
|
app:menu="@menu/main"
|
||||||
app:title="@string/app_name" />
|
app:title="@string/app_name" />
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
|
@ -30,16 +31,15 @@
|
||||||
|
|
||||||
<androidx.fragment.app.FragmentContainerView
|
<androidx.fragment.app.FragmentContainerView
|
||||||
android:id="@+id/progress_frag"
|
android:id="@+id/progress_frag"
|
||||||
android:name="cn.super12138.todo.views.progress.ProgressFragment"
|
android:name="cn.super12138.todo.views.fragments.ProgressFragment"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="3"
|
android:layout_weight="3"
|
||||||
android:minHeight="160dp"
|
|
||||||
tools:layout="@layout/fragment_progress" />
|
tools:layout="@layout/fragment_progress" />
|
||||||
|
|
||||||
<androidx.fragment.app.FragmentContainerView
|
<androidx.fragment.app.FragmentContainerView
|
||||||
android:id="@+id/todo_frag"
|
android:id="@+id/todo_frag"
|
||||||
android:name="cn.super12138.todo.views.todo.ToDoFragment"
|
android:name="cn.super12138.todo.views.fragments.ToDoFragment"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="2"
|
android:layout_weight="2"
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
tools:context=".views.main.MainActivity">
|
tools:context=".views.activities.MainActivity">
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
@ -35,14 +35,14 @@
|
||||||
|
|
||||||
<androidx.fragment.app.FragmentContainerView
|
<androidx.fragment.app.FragmentContainerView
|
||||||
android:id="@+id/progress_frag"
|
android:id="@+id/progress_frag"
|
||||||
android:name="cn.super12138.todo.views.progress.ProgressFragment"
|
android:name="cn.super12138.todo.views.fragments.ProgressFragment"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="180dp"
|
android:layout_height="270dp"
|
||||||
tools:layout="@layout/fragment_progress" />
|
tools:layout="@layout/fragment_progress" />
|
||||||
|
|
||||||
<androidx.fragment.app.FragmentContainerView
|
<androidx.fragment.app.FragmentContainerView
|
||||||
android:id="@+id/todo_frag"
|
android:id="@+id/todo_frag"
|
||||||
android:name="cn.super12138.todo.views.todo.ToDoFragment"
|
android:name="cn.super12138.todo.views.fragments.ToDoFragment"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:layout="@layout/fragment_todo" />
|
tools:layout="@layout/fragment_todo" />
|
||||||
|
|
@ -1,177 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<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"
|
|
||||||
tools:context=".views.about.AboutActivity">
|
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:fitsSystemWindows="true"
|
|
||||||
app:liftOnScroll="true">
|
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
|
||||||
android:id="@+id/tool_bar"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="?attr/actionBarSize"
|
|
||||||
app:navigationIcon="@drawable/ic_arrow_back"
|
|
||||||
app:title="@string/about_label" />
|
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
|
||||||
|
|
||||||
<androidx.core.widget.NestedScrollView
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:fillViewport="true"
|
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<com.google.android.material.card.MaterialCardView
|
|
||||||
style="?attr/materialCardViewElevatedStyle"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_margin="20dp">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_marginTop="30dp"
|
|
||||||
android:layout_marginBottom="20dp"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/app_info"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:gravity="center_horizontal"
|
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<com.google.android.material.card.MaterialCardView
|
|
||||||
style="@style/Widget.Material3.CardView.Elevated"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:cardCornerRadius="128dp">
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:contentDescription="@string/app_name"
|
|
||||||
android:src="@mipmap/ic_launcher" />
|
|
||||||
</com.google.android.material.card.MaterialCardView>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/app_name"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="10dp"
|
|
||||||
android:text="@string/app_name"
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:textColor="?attr/colorOnSurface"
|
|
||||||
android:textSize="20sp" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/app_version"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="7dp"
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:textSize="11sp" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/check_update"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="50dp"
|
|
||||||
android:layout_marginTop="10dp"
|
|
||||||
android:background="?attr/selectableItemBackground"
|
|
||||||
android:clickable="true"
|
|
||||||
android:focusable="true"
|
|
||||||
android:gravity="center"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/check_update_icon"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="15dp"
|
|
||||||
android:contentDescription="@string/check_update"
|
|
||||||
app:srcCompat="@drawable/ic_update" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/check_update_text"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="20dp"
|
|
||||||
android:text="@string/check_update"
|
|
||||||
android:textColor="?attr/colorOnSurface"
|
|
||||||
android:textSize="15sp" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/open_source"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="50dp"
|
|
||||||
android:background="?attr/selectableItemBackground"
|
|
||||||
android:clickable="true"
|
|
||||||
android:focusable="true"
|
|
||||||
android:gravity="center"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/github_icon"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="15dp"
|
|
||||||
android:contentDescription="@string/view_source"
|
|
||||||
app:srcCompat="@drawable/ic_github" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/open_source_text"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="20dp"
|
|
||||||
android:text="@string/view_source"
|
|
||||||
android:textColor="?attr/colorOnSurface"
|
|
||||||
android:textSize="15sp" />
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/developer_info"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="50dp"
|
|
||||||
android:background="?attr/selectableItemBackground"
|
|
||||||
android:clickable="true"
|
|
||||||
android:focusable="true"
|
|
||||||
android:gravity="center_horizontal|center_vertical"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/developer_icon"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="15dp"
|
|
||||||
android:contentDescription="@string/author"
|
|
||||||
app:srcCompat="@drawable/ic_person" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/developer_name"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="20dp"
|
|
||||||
android:text="@string/author"
|
|
||||||
android:textColor="?attr/colorOnSurface"
|
|
||||||
android:textSize="15sp" />
|
|
||||||
</LinearLayout>
|
|
||||||
</LinearLayout>
|
|
||||||
</com.google.android.material.card.MaterialCardView>
|
|
||||||
</LinearLayout>
|
|
||||||
</androidx.core.widget.NestedScrollView>
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
tools:context=".views.crash.CrashActivity">
|
tools:context=".views.activities.CrashActivity">
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
||||||
|
|
@ -1,48 +1,17 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.coordinatorlayout.widget.CoordinatorLayout 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"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
tools:context=".views.main.MainActivity">
|
tools:context=".views.activities.MainActivity">
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<androidx.fragment.app.FragmentContainerView
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/app_container"
|
||||||
android:layout_height="wrap_content"
|
android:name="cn.super12138.todo.views.fragments.MainFragment"
|
||||||
android:fitsSystemWindows="true"
|
|
||||||
app:liftOnScrollTargetViewId="@id/progress_frag">
|
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
|
||||||
android:id="@+id/tool_bar"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="?attr/actionBarSize"
|
|
||||||
app:menu="@menu/main"
|
|
||||||
app:title="@string/app_name" />
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:fillViewport="true"
|
android:fitsSystemWindows="true"
|
||||||
android:orientation="vertical"
|
tools:layout="@layout/fragment_main" />
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
|
||||||
|
|
||||||
<androidx.fragment.app.FragmentContainerView
|
|
||||||
android:id="@+id/progress_frag"
|
|
||||||
android:name="cn.super12138.todo.views.progress.ProgressFragment"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:layout_weight="2"
|
|
||||||
android:minHeight="160dp"
|
|
||||||
tools:layout="@layout/fragment_progress" />
|
|
||||||
|
|
||||||
<androidx.fragment.app.FragmentContainerView
|
|
||||||
android:id="@+id/todo_frag"
|
|
||||||
android:name="cn.super12138.todo.views.todo.ToDoFragment"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:layout_weight="3"
|
|
||||||
tools:layout="@layout/fragment_todo" />
|
|
||||||
</LinearLayout>
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
170
app/src/main/res/layout/fragment_about.xml
Normal file
170
app/src/main/res/layout/fragment_about.xml
Normal file
|
|
@ -0,0 +1,170 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<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"
|
||||||
|
tools:context=".views.fragments.AboutFragment">
|
||||||
|
|
||||||
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:fitsSystemWindows="true"
|
||||||
|
app:liftOnScroll="true">
|
||||||
|
|
||||||
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
|
android:id="@+id/tool_bar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
app:navigationIcon="@drawable/ic_arrow_back"
|
||||||
|
app:title="@string/about_label" />
|
||||||
|
|
||||||
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
|
<androidx.core.widget.NestedScrollView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
|
<com.google.android.material.card.MaterialCardView
|
||||||
|
style="?attr/materialCardViewElevatedStyle"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="20dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginTop="30dp"
|
||||||
|
android:layout_marginBottom="20dp"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/app_info"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<com.google.android.material.card.MaterialCardView
|
||||||
|
style="@style/Widget.Material3.CardView.Elevated"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:cardCornerRadius="128dp">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:contentDescription="@string/app_name"
|
||||||
|
android:src="@mipmap/ic_launcher" />
|
||||||
|
</com.google.android.material.card.MaterialCardView>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/app_name"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:text="@string/app_name"
|
||||||
|
android:textAlignment="center"
|
||||||
|
android:textColor="?attr/colorOnSurface"
|
||||||
|
android:textSize="20sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/app_version"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="7dp"
|
||||||
|
android:textAlignment="center"
|
||||||
|
android:textSize="11sp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/check_update"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/check_update_icon"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
android:contentDescription="@string/check_update"
|
||||||
|
app:srcCompat="@drawable/ic_update" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/check_update_text"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="20dp"
|
||||||
|
android:text="@string/check_update"
|
||||||
|
android:textColor="?attr/colorOnSurface"
|
||||||
|
android:textSize="15sp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/open_source"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/github_icon"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
android:contentDescription="@string/view_source"
|
||||||
|
app:srcCompat="@drawable/ic_github" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/open_source_text"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="20dp"
|
||||||
|
android:text="@string/view_source"
|
||||||
|
android:textColor="?attr/colorOnSurface"
|
||||||
|
android:textSize="15sp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/developer_info"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="50dp"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:clickable="true"
|
||||||
|
android:focusable="true"
|
||||||
|
android:gravity="center_horizontal|center_vertical"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/developer_icon"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="15dp"
|
||||||
|
android:contentDescription="@string/author"
|
||||||
|
app:srcCompat="@drawable/ic_person" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/developer_name"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="20dp"
|
||||||
|
android:text="@string/author"
|
||||||
|
android:textColor="?attr/colorOnSurface"
|
||||||
|
android:textSize="15sp" />
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
</com.google.android.material.card.MaterialCardView>
|
||||||
|
</androidx.core.widget.NestedScrollView>
|
||||||
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
|
|
@ -5,13 +5,12 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
tools:context=".views.about.AboutActivity">
|
tools:context=".views.fragments.AboutFragment">
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
app:liftOnScroll="true"
|
|
||||||
app:liftOnScrollTargetViewId="@+id/all_tasks_list">
|
app:liftOnScrollTargetViewId="@+id/all_tasks_list">
|
||||||
|
|
||||||
<com.google.android.material.appbar.MaterialToolbar
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
50
app/src/main/res/layout/fragment_main.xml
Normal file
50
app/src/main/res/layout/fragment_main.xml
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<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"
|
||||||
|
tools:context=".views.activities.MainActivity">
|
||||||
|
|
||||||
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:fitsSystemWindows="true"
|
||||||
|
app:liftOnScroll="false"
|
||||||
|
app:liftOnScrollTargetViewId="@id/progress_frag">
|
||||||
|
|
||||||
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
|
android:id="@+id/tool_bar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="?attr/actionBarSize"
|
||||||
|
app:menu="@menu/main"
|
||||||
|
app:title="@string/app_name" />
|
||||||
|
|
||||||
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:fillViewport="true"
|
||||||
|
android:orientation="vertical"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
|
<androidx.fragment.app.FragmentContainerView
|
||||||
|
android:id="@+id/progress_frag"
|
||||||
|
android:name="cn.super12138.todo.views.fragments.ProgressFragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="2"
|
||||||
|
android:minHeight="160dp"
|
||||||
|
tools:layout="@layout/fragment_progress" />
|
||||||
|
|
||||||
|
<androidx.fragment.app.FragmentContainerView
|
||||||
|
android:id="@+id/todo_frag"
|
||||||
|
android:name="cn.super12138.todo.views.fragments.ToDoFragment"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="3"
|
||||||
|
tools:layout="@layout/fragment_todo" />
|
||||||
|
</LinearLayout>
|
||||||
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="280dp"
|
android:layout_height="270dp"
|
||||||
android:animateLayoutChanges="true">
|
android:animateLayoutChanges="true">
|
||||||
|
|
||||||
<com.google.android.material.progressindicator.CircularProgressIndicator
|
<com.google.android.material.progressindicator.CircularProgressIndicator
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
tools:context=".views.settings.SettingsActivity">
|
tools:context=".views.fragments.SettingsParentFragment">
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
@ -27,15 +27,10 @@
|
||||||
android:fillViewport="true"
|
android:fillViewport="true"
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||||
|
|
||||||
<LinearLayout
|
<androidx.fragment.app.FragmentContainerView
|
||||||
|
android:id="@+id/settings_container"
|
||||||
|
android:name="cn.super12138.todo.views.fragments.SettingsFragment"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent" />
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
android:id="@+id/settings_frame"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent" />
|
|
||||||
</LinearLayout>
|
|
||||||
</androidx.core.widget.NestedScrollView>
|
</androidx.core.widget.NestedScrollView>
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
<androidx.fragment.app.FragmentContainerView
|
<androidx.fragment.app.FragmentContainerView
|
||||||
android:id="@+id/welcome_page_container"
|
android:id="@+id/welcome_page_container"
|
||||||
android:name="cn.super12138.todo.views.welcome.pages.IntroPage"
|
android:name="cn.super12138.todo.views.fragments.welcome.pages.IntroPage"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/control_area"
|
app:layout_constraintBottom_toTopOf="@+id/control_area"
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
<androidx.fragment.app.FragmentContainerView
|
<androidx.fragment.app.FragmentContainerView
|
||||||
android:id="@+id/welcome_progress"
|
android:id="@+id/welcome_progress"
|
||||||
android:name="cn.super12138.todo.views.progress.ProgressFragment"
|
android:name="cn.super12138.todo.views.fragments.ProgressFragment"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
tools:layout="@layout/fragment_progress" />
|
tools:layout="@layout/fragment_progress" />
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue