11package org.schabi.newpipe.local.subscription
22
3- import android.app.Activity
43import android.content.Context
54import android.content.DialogInterface
65import android.os.Bundle
@@ -14,8 +13,6 @@ import android.view.View
1413import android.view.ViewGroup
1514import android.webkit.MimeTypeMap
1615import android.widget.Toast
17- import androidx.activity.result.ActivityResult
18- import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
1916import androidx.annotation.StringRes
2017import androidx.appcompat.app.AlertDialog
2118import androidx.lifecycle.ViewModelProvider
@@ -26,9 +23,6 @@ import com.xwray.groupie.GroupAdapter
2623import com.xwray.groupie.Section
2724import com.xwray.groupie.viewbinding.GroupieViewHolder
2825import io.reactivex.rxjava3.disposables.CompositeDisposable
29- import java.text.SimpleDateFormat
30- import java.util.Date
31- import java.util.Locale
3226import org.schabi.newpipe.R
3327import org.schabi.newpipe.database.feed.model.FeedGroupEntity.Companion.GROUP_ALL_ID
3428import org.schabi.newpipe.databinding.DialogTitleBinding
@@ -52,10 +46,6 @@ import org.schabi.newpipe.local.subscription.item.FeedGroupCarouselItem
5246import org.schabi.newpipe.local.subscription.item.GroupsHeader
5347import org.schabi.newpipe.local.subscription.item.Header
5448import org.schabi.newpipe.local.subscription.item.ImportSubscriptionsHintPlaceholderItem
55- import org.schabi.newpipe.local.subscription.workers.SubscriptionExportWorker
56- import org.schabi.newpipe.local.subscription.workers.SubscriptionImportInput
57- import org.schabi.newpipe.streams.io.NoFileManagerSafeGuard
58- import org.schabi.newpipe.streams.io.StoredFileHelper
5949import org.schabi.newpipe.ui.emptystate.setEmptyStateComposable
6050import org.schabi.newpipe.util.NavigationHelper
6151import org.schabi.newpipe.util.OnClickGesture
@@ -69,6 +59,7 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
6959
7060 private lateinit var viewModel: SubscriptionViewModel
7161 private lateinit var subscriptionManager: SubscriptionManager
62+ private lateinit var importExportHelper: SubscriptionsImportExportHelper
7263 private val disposables: CompositeDisposable = CompositeDisposable ()
7364
7465 private val groupAdapter = GroupAdapter <GroupieViewHolder <FeedItemCarouselBinding >>()
@@ -77,11 +68,6 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
7768 private lateinit var feedGroupsSortMenuItem: GroupsHeader
7869 private val subscriptionsSection = Section ()
7970
80- private val requestExportLauncher =
81- registerForActivityResult(StartActivityForResult (), this ::requestExportResult)
82- private val requestImportLauncher =
83- registerForActivityResult(StartActivityForResult (), this ::requestImportResult)
84-
8571 @State
8672 @JvmField
8773 var itemsListState: Parcelable ? = null
@@ -101,6 +87,7 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
10187 override fun onAttach (context : Context ) {
10288 super .onAttach(context)
10389 subscriptionManager = SubscriptionManager (requireContext())
90+ importExportHelper = SubscriptionsImportExportHelper (this )
10491 }
10592
10693 override fun onCreateView (inflater : LayoutInflater , container : ViewGroup ? , savedInstanceState : Bundle ? ): View ? {
@@ -141,7 +128,7 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
141128 // -- Import --
142129 val importSubMenu = menu.addSubMenu(R .string.import_from)
143130
144- addMenuItemToSubmenu(importSubMenu, R .string.previous_export) { onImportPreviousSelected() }
131+ addMenuItemToSubmenu(importSubMenu, R .string.previous_export) { importExportHelper. onImportPreviousSelected() }
145132 .setIcon(R .drawable.ic_backup)
146133
147134 for (service in ServiceList .all()) {
@@ -159,7 +146,7 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
159146 // -- Export --
160147 val exportSubMenu = menu.addSubMenu(R .string.export_to)
161148
162- addMenuItemToSubmenu(exportSubMenu, R .string.file) { onExportSelected() }
149+ addMenuItemToSubmenu(exportSubMenu, R .string.file) { importExportHelper. onExportSelected() }
163150 .setIcon(R .drawable.ic_save)
164151 }
165152
@@ -195,48 +182,10 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
195182 NavigationHelper .openSubscriptionsImportFragment(fragmentManager, serviceId)
196183 }
197184
198- private fun onImportPreviousSelected () {
199- NoFileManagerSafeGuard .launchSafe(
200- requestImportLauncher,
201- StoredFileHelper .getPicker(activity, JSON_MIME_TYPE ),
202- TAG ,
203- requireContext()
204- )
205- }
206-
207- private fun onExportSelected () {
208- val date = SimpleDateFormat (" yyyyMMddHHmm" , Locale .ENGLISH ).format(Date ())
209- val exportName = " newpipe_subscriptions_$date .json"
210-
211- NoFileManagerSafeGuard .launchSafe(
212- requestExportLauncher,
213- StoredFileHelper .getNewPicker(activity, exportName, JSON_MIME_TYPE , null ),
214- TAG ,
215- requireContext()
216- )
217- }
218-
219185 private fun openReorderDialog () {
220186 FeedGroupReorderDialog ().show(parentFragmentManager, null )
221187 }
222188
223- private fun requestExportResult (result : ActivityResult ) {
224- val data = result.data?.data
225- if (data != null && result.resultCode == Activity .RESULT_OK ) {
226- SubscriptionExportWorker .schedule(activity, data)
227- }
228- }
229-
230- private fun requestImportResult (result : ActivityResult ) {
231- val data = result.data?.dataString
232- if (data != null && result.resultCode == Activity .RESULT_OK ) {
233- ImportConfirmationDialog .show(
234- this ,
235- SubscriptionImportInput .PreviousExportMode (data)
236- )
237- }
238- }
239-
240189 // ////////////////////////////////////////////////////////////////////////
241190 // Fragment Views
242191 // ////////////////////////////////////////////////////////////////////////
0 commit comments