11package org.schabi.newpipe.local.subscription
22
3- import android.app.Activity
43import android.content.Context
54import android.content.DialogInterface
6- import android.content.Intent
75import android.os.Bundle
86import android.os.Parcelable
97import android.view.LayoutInflater
@@ -15,8 +13,6 @@ import android.view.View
1513import android.view.ViewGroup
1614import android.webkit.MimeTypeMap
1715import android.widget.Toast
18- import androidx.activity.result.ActivityResult
19- import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
2016import androidx.annotation.StringRes
2117import androidx.appcompat.app.AlertDialog
2218import androidx.lifecycle.ViewModelProvider
@@ -27,9 +23,6 @@ import com.xwray.groupie.GroupAdapter
2723import com.xwray.groupie.Section
2824import com.xwray.groupie.viewbinding.GroupieViewHolder
2925import io.reactivex.rxjava3.disposables.CompositeDisposable
30- import java.text.SimpleDateFormat
31- import java.util.Date
32- import java.util.Locale
3326import org.schabi.newpipe.R
3427import org.schabi.newpipe.database.feed.model.FeedGroupEntity.Companion.GROUP_ALL_ID
3528import org.schabi.newpipe.databinding.DialogTitleBinding
@@ -53,13 +46,6 @@ import org.schabi.newpipe.local.subscription.item.FeedGroupCarouselItem
5346import org.schabi.newpipe.local.subscription.item.GroupsHeader
5447import org.schabi.newpipe.local.subscription.item.Header
5548import org.schabi.newpipe.local.subscription.item.ImportSubscriptionsHintPlaceholderItem
56- import org.schabi.newpipe.local.subscription.services.SubscriptionsExportService
57- import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService
58- import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService.KEY_MODE
59- import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService.KEY_VALUE
60- import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService.PREVIOUS_EXPORT_MODE
61- import org.schabi.newpipe.streams.io.NoFileManagerSafeGuard
62- import org.schabi.newpipe.streams.io.StoredFileHelper
6349import org.schabi.newpipe.util.NavigationHelper
6450import org.schabi.newpipe.util.OnClickGesture
6551import org.schabi.newpipe.util.ServiceHelper
@@ -72,6 +58,7 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
7258
7359 private lateinit var viewModel: SubscriptionViewModel
7460 private lateinit var subscriptionManager: SubscriptionManager
61+ private lateinit var importExportHelper: SubscriptionsImportExportHelper
7562 private val disposables: CompositeDisposable = CompositeDisposable ()
7663
7764 private val groupAdapter = GroupAdapter <GroupieViewHolder <FeedItemCarouselBinding >>()
@@ -80,11 +67,6 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
8067 private lateinit var feedGroupsSortMenuItem: GroupsHeader
8168 private val subscriptionsSection = Section ()
8269
83- private val requestExportLauncher =
84- registerForActivityResult(StartActivityForResult (), this ::requestExportResult)
85- private val requestImportLauncher =
86- registerForActivityResult(StartActivityForResult (), this ::requestImportResult)
87-
8870 @State
8971 @JvmField
9072 var itemsListState: Parcelable ? = null
@@ -104,6 +86,7 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
10486 override fun onAttach (context : Context ) {
10587 super .onAttach(context)
10688 subscriptionManager = SubscriptionManager (requireContext())
89+ importExportHelper = SubscriptionsImportExportHelper (this )
10790 }
10891
10992 override fun onCreateView (inflater : LayoutInflater , container : ViewGroup ? , savedInstanceState : Bundle ? ): View ? {
@@ -143,7 +126,7 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
143126 // -- Import --
144127 val importSubMenu = menu.addSubMenu(R .string.import_from)
145128
146- addMenuItemToSubmenu(importSubMenu, R .string.previous_export) { onImportPreviousSelected() }
129+ addMenuItemToSubmenu(importSubMenu, R .string.previous_export) { importExportHelper. onImportPreviousSelected() }
147130 .setIcon(R .drawable.ic_backup)
148131
149132 for (service in ServiceList .all()) {
@@ -161,7 +144,7 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
161144 // -- Export --
162145 val exportSubMenu = menu.addSubMenu(R .string.export_to)
163146
164- addMenuItemToSubmenu(exportSubMenu, R .string.file) { onExportSelected() }
147+ addMenuItemToSubmenu(exportSubMenu, R .string.file) { importExportHelper. onExportSelected() }
165148 .setIcon(R .drawable.ic_save)
166149 }
167150
@@ -197,51 +180,10 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
197180 NavigationHelper .openSubscriptionsImportFragment(fragmentManager, serviceId)
198181 }
199182
200- private fun onImportPreviousSelected () {
201- NoFileManagerSafeGuard .launchSafe(
202- requestImportLauncher,
203- StoredFileHelper .getPicker(activity, JSON_MIME_TYPE ),
204- TAG ,
205- requireContext()
206- )
207- }
208-
209- private fun onExportSelected () {
210- val date = SimpleDateFormat (" yyyyMMddHHmm" , Locale .ENGLISH ).format(Date ())
211- val exportName = " newpipe_subscriptions_$date .json"
212-
213- NoFileManagerSafeGuard .launchSafe(
214- requestExportLauncher,
215- StoredFileHelper .getNewPicker(activity, exportName, JSON_MIME_TYPE , null ),
216- TAG ,
217- requireContext()
218- )
219- }
220-
221183 private fun openReorderDialog () {
222184 FeedGroupReorderDialog ().show(parentFragmentManager, null )
223185 }
224186
225- private fun requestExportResult (result : ActivityResult ) {
226- if (result.data != null && result.resultCode == Activity .RESULT_OK ) {
227- activity.startService(
228- Intent (activity, SubscriptionsExportService ::class .java)
229- .putExtra(SubscriptionsExportService .KEY_FILE_PATH , result.data?.data)
230- )
231- }
232- }
233-
234- private fun requestImportResult (result : ActivityResult ) {
235- if (result.data != null && result.resultCode == Activity .RESULT_OK ) {
236- ImportConfirmationDialog .show(
237- this ,
238- Intent (activity, SubscriptionsImportService ::class .java)
239- .putExtra(KEY_MODE , PREVIOUS_EXPORT_MODE )
240- .putExtra(KEY_VALUE , result.data?.data)
241- )
242- }
243- }
244-
245187 // ////////////////////////////////////////////////////////////////////////
246188 // Fragment Views
247189 // ////////////////////////////////////////////////////////////////////////
0 commit comments