@@ -20,6 +20,7 @@ import androidx.core.view.WindowInsetsCompat
2020import androidx.core.view.updatePadding
2121import androidx.lifecycle.lifecycleScope
2222import androidx.recyclerview.widget.LinearLayoutManager
23+ import com.google.android.material.dialog.MaterialAlertDialogBuilder
2324import kotlinx.coroutines.Dispatchers
2425import kotlinx.coroutines.launch
2526import kotlinx.coroutines.withContext
@@ -67,7 +68,7 @@ class MainActivity : EdgeToEdgeActivity(), AddProfileBottomSheet.Listener {
6768 MihomoProfileStore .select(this , profile.id)
6869 refresh()
6970 },
70- onUpdate = { profile -> pull (profile) },
71+ onUpdate = { profile -> confirmUpdate (profile) },
7172 onDelete = { profile ->
7273 MihomoProfileStore .remove(this , profile.id)
7374 refresh()
@@ -83,7 +84,7 @@ class MainActivity : EdgeToEdgeActivity(), AddProfileBottomSheet.Listener {
8384 AddProfileBottomSheet ().show(supportFragmentManager, AddProfileBottomSheet .TAG )
8485 }
8586 binding.btnHome.setOnClickListener { openDrawer() }
86- binding.btnMoreMenu.setOnClickListener { refreshAllSubscriptions () }
87+ binding.btnMoreMenu.setOnClickListener { confirmRefreshAllSubscriptions () }
8788 binding.etSearch.doAfterTextChanged {
8889 query = it?.toString().orEmpty()
8990 refresh()
@@ -158,6 +159,20 @@ class MainActivity : EdgeToEdgeActivity(), AddProfileBottomSheet.Listener {
158159 }
159160 }
160161
162+ private fun confirmRefreshAllSubscriptions () {
163+ val count = MihomoProfileStore .profiles(this ).count { it.isSubscription }
164+ if (count == 0 ) {
165+ toast(getString(R .string.toast_no_subscriptions))
166+ return
167+ }
168+ MaterialAlertDialogBuilder (this )
169+ .setTitle(R .string.dialog_refresh_subscriptions_title)
170+ .setMessage(getString(R .string.dialog_refresh_subscriptions_message, count))
171+ .setNegativeButton(android.R .string.cancel, null )
172+ .setPositiveButton(R .string.action_update) { _, _ -> refreshAllSubscriptions() }
173+ .show()
174+ }
175+
161176 private fun showSortMenu (anchor : View ) {
162177 PopupMenu (this , anchor).apply {
163178 menu.add(0 , 0 , 0 , R .string.sort_by_name)
@@ -233,6 +248,15 @@ class MainActivity : EdgeToEdgeActivity(), AddProfileBottomSheet.Listener {
233248 pull(profile)
234249 }
235250
251+ private fun confirmUpdate (profile : MihomoProfileStore .Profile ) {
252+ MaterialAlertDialogBuilder (this )
253+ .setTitle(R .string.dialog_update_subscription_title)
254+ .setMessage(getString(R .string.dialog_update_subscription_message, profile.name))
255+ .setNegativeButton(android.R .string.cancel, null )
256+ .setPositiveButton(R .string.action_update) { _, _ -> pull(profile) }
257+ .show()
258+ }
259+
236260 override fun onImportClipboard (name : String ) {
237261 val clip = (getSystemService(Context .CLIPBOARD_SERVICE ) as ClipboardManager )
238262 .primaryClip?.getItemAt(0 )?.coerceToText(this )?.toString()?.trim().orEmpty()
0 commit comments