Skip to content

Commit fc7f1b0

Browse files
Isira-SeneviratneProfpatsch
authored andcommitted
Convert subscription import service to a worker
1 parent dfb035d commit fc7f1b0

12 files changed

Lines changed: 222 additions & 625 deletions

File tree

app/src/main/AndroidManifest.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@
9292
android:name="androidx.work.impl.foreground.SystemForegroundService"
9393
android:foregroundServiceType="dataSync"
9494
tools:node="merge" />
95-
<service android:name=".local.subscription.services.SubscriptionsImportService" />
9695
<service android:name=".local.feed.service.FeedLoadService" />
9796

9897
<activity

app/src/main/java/org/schabi/newpipe/local/subscription/ImportConfirmationDialog.java

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,47 +3,79 @@
33
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
44

55
import android.app.Dialog;
6-
import android.content.Intent;
76
import android.os.Bundle;
87

98
import androidx.annotation.NonNull;
109
import androidx.annotation.Nullable;
1110
import androidx.appcompat.app.AlertDialog;
1211
import androidx.fragment.app.DialogFragment;
1312
import androidx.fragment.app.Fragment;
13+
import androidx.work.Constraints;
14+
import androidx.work.Data;
15+
import androidx.work.ExistingWorkPolicy;
16+
import androidx.work.NetworkType;
17+
import androidx.work.OneTimeWorkRequest;
18+
import androidx.work.OutOfQuotaPolicy;
19+
import androidx.work.WorkManager;
1420

1521
import com.evernote.android.state.State;
1622
import com.livefront.bridge.Bridge;
1723

1824
import org.schabi.newpipe.R;
25+
import org.schabi.newpipe.local.subscription.workers.SubscriptionImportWorker;
26+
import org.schabi.newpipe.util.Constants;
1927

2028
public class ImportConfirmationDialog extends DialogFragment {
2129
@State
22-
protected Intent resultServiceIntent;
30+
protected int mode;
31+
@State
32+
protected String value;
33+
@State
34+
protected int serviceId;
2335

24-
public static void show(@NonNull final Fragment fragment,
25-
@NonNull final Intent resultServiceIntent) {
26-
final ImportConfirmationDialog confirmationDialog = new ImportConfirmationDialog();
27-
confirmationDialog.setResultServiceIntent(resultServiceIntent);
36+
public static void show(@NonNull final Fragment fragment, final int mode,
37+
@Nullable final String value, final int serviceId) {
38+
final var confirmationDialog = new ImportConfirmationDialog();
39+
confirmationDialog.setData(mode, value, serviceId);
2840
confirmationDialog.show(fragment.getParentFragmentManager(), null);
2941
}
3042

31-
public void setResultServiceIntent(final Intent resultServiceIntent) {
32-
this.resultServiceIntent = resultServiceIntent;
43+
@SuppressWarnings("HiddenField")
44+
public void setData(final int mode, final String value, final int serviceId) {
45+
this.mode = mode;
46+
this.value = value;
47+
this.serviceId = serviceId;
3348
}
3449

3550
@NonNull
3651
@Override
3752
public Dialog onCreateDialog(@Nullable final Bundle savedInstanceState) {
38-
assureCorrectAppLanguage(getContext());
39-
return new AlertDialog.Builder(requireContext())
53+
final var context = requireContext();
54+
assureCorrectAppLanguage(context);
55+
return new AlertDialog.Builder(context)
4056
.setMessage(R.string.import_network_expensive_warning)
4157
.setCancelable(true)
4258
.setNegativeButton(R.string.cancel, null)
4359
.setPositiveButton(R.string.ok, (dialogInterface, i) -> {
44-
if (resultServiceIntent != null && getContext() != null) {
45-
getContext().startService(resultServiceIntent);
46-
}
60+
final var inputData = new Data.Builder()
61+
.putString(SubscriptionImportWorker.KEY_VALUE, value)
62+
.putInt(SubscriptionImportWorker.KEY_MODE, mode)
63+
.putInt(Constants.KEY_SERVICE_ID, serviceId)
64+
.build();
65+
final var constraints = new Constraints.Builder()
66+
.setRequiredNetworkType(NetworkType.CONNECTED)
67+
.build();
68+
69+
final var req = new OneTimeWorkRequest.Builder(SubscriptionImportWorker.class)
70+
.setInputData(inputData)
71+
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
72+
.setConstraints(constraints)
73+
.build();
74+
75+
WorkManager.getInstance(context)
76+
.enqueueUniqueWork(SubscriptionImportWorker.WORK_NAME,
77+
ExistingWorkPolicy.APPEND_OR_REPLACE, req);
78+
4779
dismiss();
4880
})
4981
.create();
@@ -53,8 +85,8 @@ public Dialog onCreateDialog(@Nullable final Bundle savedInstanceState) {
5385
public void onCreate(@Nullable final Bundle savedInstanceState) {
5486
super.onCreate(savedInstanceState);
5587

56-
if (resultServiceIntent == null) {
57-
throw new IllegalStateException("Result intent is null");
88+
if (mode == 0 && value == null && serviceId == 0) {
89+
throw new IllegalStateException("Input data not provided");
5890
}
5991

6092
Bridge.restoreInstanceState(this, savedInstanceState);

app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionFragment.kt

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package org.schabi.newpipe.local.subscription
33
import android.app.Activity
44
import android.content.Context
55
import android.content.DialogInterface
6-
import android.content.Intent
76
import android.os.Bundle
87
import android.os.Parcelable
98
import android.view.LayoutInflater
@@ -49,14 +48,12 @@ import org.schabi.newpipe.local.subscription.item.FeedGroupCarouselItem
4948
import org.schabi.newpipe.local.subscription.item.GroupsHeader
5049
import org.schabi.newpipe.local.subscription.item.Header
5150
import org.schabi.newpipe.local.subscription.item.ImportSubscriptionsHintPlaceholderItem
52-
import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService
53-
import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService.KEY_MODE
54-
import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService.KEY_VALUE
55-
import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService.PREVIOUS_EXPORT_MODE
5651
import org.schabi.newpipe.local.subscription.workers.SubscriptionExportWorker
52+
import org.schabi.newpipe.local.subscription.workers.SubscriptionImportWorker
5753
import org.schabi.newpipe.streams.io.NoFileManagerSafeGuard
5854
import org.schabi.newpipe.streams.io.StoredFileHelper
5955
import org.schabi.newpipe.ui.emptystate.setEmptyStateComposable
56+
import org.schabi.newpipe.util.NO_SERVICE_ID
6057
import org.schabi.newpipe.util.NavigationHelper
6158
import org.schabi.newpipe.util.OnClickGesture
6259
import org.schabi.newpipe.util.ServiceHelper
@@ -231,12 +228,10 @@ class SubscriptionFragment : BaseStateFragment<SubscriptionState>() {
231228
}
232229

233230
private fun requestImportResult(result: ActivityResult) {
234-
if (result.data != null && result.resultCode == Activity.RESULT_OK) {
231+
val data = result.data?.dataString
232+
if (data != null && result.resultCode == Activity.RESULT_OK) {
235233
ImportConfirmationDialog.show(
236-
this,
237-
Intent(activity, SubscriptionsImportService::class.java)
238-
.putExtra(KEY_MODE, PREVIOUS_EXPORT_MODE)
239-
.putExtra(KEY_VALUE, result.data?.data)
234+
this, SubscriptionImportWorker.PREVIOUS_EXPORT_MODE, data, NO_SERVICE_ID
240235
)
241236
}
242237
}

app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionsImportFragment.java

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
package org.schabi.newpipe.local.subscription;
22

33
import static org.schabi.newpipe.extractor.subscription.SubscriptionExtractor.ContentSource.CHANNEL_URL;
4-
import static org.schabi.newpipe.local.subscription.services.SubscriptionsImportService.CHANNEL_URL_MODE;
5-
import static org.schabi.newpipe.local.subscription.services.SubscriptionsImportService.INPUT_STREAM_MODE;
6-
import static org.schabi.newpipe.local.subscription.services.SubscriptionsImportService.KEY_MODE;
7-
import static org.schabi.newpipe.local.subscription.services.SubscriptionsImportService.KEY_VALUE;
84

95
import android.app.Activity;
106
import android.content.Intent;
@@ -37,7 +33,7 @@
3733
import org.schabi.newpipe.extractor.NewPipe;
3834
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
3935
import org.schabi.newpipe.extractor.subscription.SubscriptionExtractor;
40-
import org.schabi.newpipe.local.subscription.services.SubscriptionsImportService;
36+
import org.schabi.newpipe.local.subscription.workers.SubscriptionImportWorker;
4137
import org.schabi.newpipe.streams.io.NoFileManagerSafeGuard;
4238
import org.schabi.newpipe.streams.io.StoredFileHelper;
4339
import org.schabi.newpipe.util.Constants;
@@ -168,10 +164,8 @@ private void onImportClicked() {
168164
}
169165

170166
public void onImportUrl(final String value) {
171-
ImportConfirmationDialog.show(this, new Intent(activity, SubscriptionsImportService.class)
172-
.putExtra(KEY_MODE, CHANNEL_URL_MODE)
173-
.putExtra(KEY_VALUE, value)
174-
.putExtra(Constants.KEY_SERVICE_ID, currentServiceId));
167+
ImportConfirmationDialog.show(this, SubscriptionImportWorker.CHANNEL_URL_MODE, value,
168+
currentServiceId);
175169
}
176170

177171
public void onImportFile() {
@@ -186,16 +180,10 @@ public void onImportFile() {
186180
}
187181

188182
private void requestImportFileResult(final ActivityResult result) {
189-
if (result.getData() == null) {
190-
return;
191-
}
192-
193-
if (result.getResultCode() == Activity.RESULT_OK && result.getData().getData() != null) {
194-
ImportConfirmationDialog.show(this,
195-
new Intent(activity, SubscriptionsImportService.class)
196-
.putExtra(KEY_MODE, INPUT_STREAM_MODE)
197-
.putExtra(KEY_VALUE, result.getData().getData())
198-
.putExtra(Constants.KEY_SERVICE_ID, currentServiceId));
183+
final String data = result.getData() != null ? result.getData().getDataString() : null;
184+
if (result.getResultCode() == Activity.RESULT_OK && data != null) {
185+
ImportConfirmationDialog.show(this, SubscriptionImportWorker.INPUT_STREAM_MODE,
186+
data, currentServiceId);
199187
}
200188
}
201189

0 commit comments

Comments
 (0)