diff --git a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java index 37abbb3ad..34ecfda8d 100644 --- a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java +++ b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkFragment.java @@ -1,6 +1,9 @@ package org.schabi.newpipe.local.bookmark; +import android.app.Activity; import android.content.DialogInterface; +import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import android.os.Parcelable; import android.text.InputType; @@ -11,7 +14,11 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; @@ -32,6 +39,9 @@ import org.schabi.newpipe.error.UserAction; import org.schabi.newpipe.local.BaseLocalListFragment; import org.schabi.newpipe.local.playlist.LocalPlaylistManager; import org.schabi.newpipe.local.playlist.RemotePlaylistManager; +import org.schabi.newpipe.streams.io.NoFileManagerSafeGuard; +import org.schabi.newpipe.streams.io.StoredFileHelper; +import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.NavigationHelper; import org.schabi.newpipe.util.OnClickGesture; @@ -48,6 +58,8 @@ import io.reactivex.rxjava3.disposables.Disposable; public final class BookmarkFragment extends BaseLocalListFragment, Void> { @State protected Parcelable itemsListState; + @State + int currentServiceId = Constants.NO_SERVICE_ID; private Subscription databaseSubscription; private CompositeDisposable disposables = new CompositeDisposable(); @@ -91,11 +103,43 @@ public final class BookmarkFragment extends BaseLocalListFragment requestImportFileLauncher = + registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), + this::requestImportFileResult); + private void requestImportFileResult(final ActivityResult result) { + if (result.getData() == null) { + return; + } + final Uri uri = result.getData().getData(); + if (result.getResultCode() == Activity.RESULT_OK && uri != null) { + final String mimeType = getActivity().getContentResolver().getType(uri); + // Check if the selected file is a text file + if (mimeType != null && mimeType.equals("text/plain")) { + + final BookmarkImportService parser = new BookmarkImportService(uri); + parser.importBookmarks(activity); + System.out.println(parser); + } else { + Toast.makeText(getActivity(), "Please select a .txt file!", + Toast.LENGTH_SHORT).show(); + } + } + } @Override public void onResume() { diff --git a/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkImportService.java b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkImportService.java new file mode 100644 index 000000000..1bd6bda6e --- /dev/null +++ b/app/src/main/java/org/schabi/newpipe/local/bookmark/BookmarkImportService.java @@ -0,0 +1,41 @@ +package org.schabi.newpipe.local.bookmark; + +import android.app.Activity; +import android.net.Uri; +import android.widget.Toast; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +public class BookmarkImportService { + private Uri textFileUri; + public BookmarkImportService(final Uri textFileUri) { + this.textFileUri = textFileUri; + } + + public void importBookmarks(final Activity activity) { + if (textFileUri != null) { + try { + final InputStream inputStream = + activity.getContentResolver().openInputStream(textFileUri); + if (inputStream != null) { + final BufferedReader reader = + new BufferedReader(new InputStreamReader(inputStream)); + String line; + + while ((line = reader.readLine()) != null) { + Toast.makeText(activity, line, Toast.LENGTH_SHORT).show(); + } + + reader.close(); + inputStream.close(); + } + } catch (final IOException e) { + throw new RuntimeException(e); + } + } + } + +}