diff --git a/briar-android/src/main/AndroidManifest.xml b/briar-android/src/main/AndroidManifest.xml
index 87d431f372175d9b0466e8db15a1e14d630c8300..feeec165552f923970cc7d30a726a915bb3693c3 100644
--- a/briar-android/src/main/AndroidManifest.xml
+++ b/briar-android/src/main/AndroidManifest.xml
@@ -322,25 +322,6 @@
android:value="org.briarproject.briar.android.blog.BlogActivity" />
-
-
-
-
-
-
-
-
+
+
+
+
{
+@NotNullByDefault
+class RssFeedAdapter extends ListAdapter {
private final RssFeedListener listener;
- RssFeedAdapter(Context ctx, RssFeedListener listener) {
- super(ctx, Feed.class);
+ RssFeedAdapter(RssFeedListener listener) {
+ super(new DiffUtil.ItemCallback() {
+ @Override
+ public boolean areItemsTheSame(Feed a, Feed b) {
+ return a.getUrl().equals(b.getUrl()) &&
+ a.getBlogId().equals(b.getBlogId()) &&
+ a.getAdded() == b.getAdded();
+ }
+
+ @Override
+ public boolean areContentsTheSame(Feed a, Feed b) {
+ return a.getUpdated() == b.getUpdated();
+ }
+ });
this.listener = listener;
}
@Override
public FeedViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- View v = LayoutInflater.from(ctx).inflate(
+ View v = LayoutInflater.from(parent.getContext()).inflate(
R.layout.list_item_rss_feed, parent, false);
return new FeedViewHolder(v);
}
@Override
public void onBindViewHolder(FeedViewHolder ui, int position) {
- Feed item = getItemAt(position);
- if (item == null) return;
-
- // Feed Title
- ui.title.setText(item.getTitle());
-
- // Delete Button
- ui.delete.setOnClickListener(v -> listener.onDeleteClick(item));
-
- // Author
- if (item.getRssAuthor() != null) {
- ui.author.setText(item.getRssAuthor());
- ui.author.setVisibility(VISIBLE);
- ui.authorLabel.setVisibility(VISIBLE);
- } else {
- ui.author.setVisibility(GONE);
- ui.authorLabel.setVisibility(GONE);
- }
-
- // Imported and Last Updated
- ui.imported.setText(UiUtils.formatDate(ctx, item.getAdded()));
- ui.updated.setText(UiUtils.formatDate(ctx, item.getUpdated()));
-
- // Description
- if (item.getDescription() != null) {
- ui.description.setText(item.getDescription());
- ui.description.setVisibility(VISIBLE);
- } else {
- ui.description.setVisibility(GONE);
- }
-
- // Open feed's blog when clicked
- ui.layout.setOnClickListener(v -> listener.onFeedClick(item));
+ ui.bindItem(getItem(position));
}
- @Override
- public int compare(Feed a, Feed b) {
- if (a == b) return 0;
- long aTime = a.getAdded(), bTime = b.getAdded();
- if (aTime > bTime) return -1;
- if (aTime < bTime) return 1;
- return 0;
- }
-
- @Override
- public boolean areContentsTheSame(Feed a, Feed b) {
- return a.getUpdated() == b.getUpdated();
- }
-
- @Override
- public boolean areItemsTheSame(Feed a, Feed b) {
- return a.getUrl().equals(b.getUrl()) &&
- a.getBlogId().equals(b.getBlogId()) &&
- a.getAdded() == b.getAdded();
- }
-
- static class FeedViewHolder extends RecyclerView.ViewHolder {
+ class FeedViewHolder extends RecyclerView.ViewHolder {
+ private final Context ctx;
private final View layout;
private final TextView title;
private final ImageButton delete;
@@ -104,6 +67,7 @@ class RssFeedAdapter extends BriarAdapter {
private FeedViewHolder(View v) {
super(v);
+ ctx = v.getContext();
layout = v;
title = v.findViewById(R.id.titleView);
delete = v.findViewById(R.id.deleteButton);
@@ -113,10 +77,44 @@ class RssFeedAdapter extends BriarAdapter {
authorLabel = v.findViewById(R.id.author);
description = v.findViewById(R.id.descriptionView);
}
+
+ private void bindItem(Feed item) {
+ // Feed Title
+ title.setText(item.getTitle());
+
+ // Delete Button
+ delete.setOnClickListener(v -> listener.onDeleteClick(item));
+
+ // Author
+ if (item.getRssAuthor() != null) {
+ author.setText(item.getRssAuthor());
+ author.setVisibility(VISIBLE);
+ authorLabel.setVisibility(VISIBLE);
+ } else {
+ author.setVisibility(GONE);
+ authorLabel.setVisibility(GONE);
+ }
+
+ // Imported and Last Updated
+ imported.setText(formatDate(ctx, item.getAdded()));
+ updated.setText(formatDate(ctx, item.getUpdated()));
+
+ // Description
+ if (item.getDescription() != null) {
+ description.setText(item.getDescription());
+ description.setVisibility(VISIBLE);
+ } else {
+ description.setVisibility(GONE);
+ }
+
+ // Open feed's blog when clicked
+ layout.setOnClickListener(v -> listener.onFeedClick(item));
+ }
}
interface RssFeedListener {
void onFeedClick(Feed feed);
+
void onDeleteClick(Feed feed);
}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedDeleteFeedDialogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedDeleteFeedDialogFragment.java
new file mode 100644
index 0000000000000000000000000000000000000000..8fa06e113ef65dea2d0310ef630ae86d422f24b7
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedDeleteFeedDialogFragment.java
@@ -0,0 +1,64 @@
+package org.briarproject.briar.android.blog;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.os.Bundle;
+
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.BaseActivity;
+
+import javax.inject.Inject;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.DialogFragment;
+import androidx.lifecycle.ViewModelProvider;
+
+import static java.util.Objects.requireNonNull;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
+
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
+public class RssFeedDeleteFeedDialogFragment extends DialogFragment {
+ final static String TAG = RssFeedDeleteFeedDialogFragment.class.getName();
+
+ @Inject
+ ViewModelProvider.Factory viewModelFactory;
+ private RssFeedViewModel viewModel;
+
+ static RssFeedDeleteFeedDialogFragment newInstance(GroupId groupId) {
+ Bundle args = new Bundle();
+ args.putByteArray(GROUP_ID, groupId.getBytes());
+ RssFeedDeleteFeedDialogFragment f =
+ new RssFeedDeleteFeedDialogFragment();
+ f.setArguments(args);
+ return f;
+ }
+
+ @Override
+ public void onAttach(Context ctx) {
+ super.onAttach(ctx);
+ ((BaseActivity) requireActivity()).getActivityComponent().inject(this);
+
+ viewModel = new ViewModelProvider(requireActivity(), viewModelFactory)
+ .get(RssFeedViewModel.class);
+ }
+
+ @Override
+ public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ GroupId groupId = new GroupId(
+ requireNonNull(requireArguments().getByteArray(GROUP_ID)));
+ AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity(),
+ R.style.BriarDialogTheme);
+ builder.setTitle(getString(R.string.blogs_rss_remove_feed));
+ builder.setMessage(
+ getString(R.string.blogs_rss_remove_feed_dialog_message));
+ builder.setPositiveButton(R.string.cancel, null);
+ builder.setNegativeButton(R.string.blogs_rss_remove_feed_ok,
+ (dialog, which) -> viewModel.removeFeed(groupId));
+ return builder.create();
+ }
+}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java
deleted file mode 100644
index 08ac68acea2ed16dff6ed3f2006bd107dc6b6fae..0000000000000000000000000000000000000000
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package org.briarproject.briar.android.blog;
-
-import android.os.Bundle;
-import android.text.Editable;
-import android.text.TextWatcher;
-import android.util.Patterns;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.ProgressBar;
-
-import org.briarproject.bramble.api.db.DbException;
-import org.briarproject.bramble.api.lifecycle.IoExecutor;
-import org.briarproject.briar.R;
-import org.briarproject.briar.android.activity.ActivityComponent;
-import org.briarproject.briar.android.activity.BriarActivity;
-import org.briarproject.briar.api.feed.FeedManager;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.concurrent.Executor;
-import java.util.logging.Logger;
-
-import javax.annotation.Nullable;
-import javax.inject.Inject;
-
-import androidx.appcompat.app.AlertDialog;
-
-import static android.view.View.GONE;
-import static android.view.View.VISIBLE;
-import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE;
-import static java.util.logging.Level.WARNING;
-import static org.briarproject.bramble.util.LogUtils.logException;
-import static org.briarproject.briar.android.util.UiUtils.hideSoftKeyboard;
-
-public class RssFeedImportActivity extends BriarActivity {
-
- private static final Logger LOG =
- Logger.getLogger(RssFeedImportActivity.class.getName());
-
- private EditText urlInput;
- private Button importButton;
- private ProgressBar progressBar;
-
- @Inject
- @IoExecutor
- Executor ioExecutor;
-
- @Inject
- @SuppressWarnings("WeakerAccess")
- volatile FeedManager feedManager;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.activity_rss_feed_import);
-
- urlInput = findViewById(R.id.urlInput);
- urlInput.addTextChangedListener(new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count,
- int after) {
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before,
- int count) {
- }
-
- @Override
- public void afterTextChanged(Editable s) {
- enableOrDisableImportButton();
- }
- });
- urlInput.setOnEditorActionListener((v, actionId, event) -> {
- if (actionId == IME_ACTION_DONE && importButton.isEnabled() &&
- importButton.getVisibility() == VISIBLE) {
- publish();
- return true;
- }
- return false;
- });
-
- importButton = findViewById(R.id.importButton);
- importButton.setOnClickListener(v -> publish());
-
- progressBar = findViewById(R.id.progressBar);
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- return super.onCreateOptionsMenu(menu);
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- return super.onOptionsItemSelected(item);
- }
-
- @Override
- public void injectActivity(ActivityComponent component) {
- component.inject(this);
- }
-
- private void enableOrDisableImportButton() {
- String url = urlInput.getText().toString();
- importButton.setEnabled(validateAndNormaliseUrl(url) != null);
- }
-
- @Nullable
- private String validateAndNormaliseUrl(String url) {
- if (!Patterns.WEB_URL.matcher(url).matches()) return null;
- try {
- return new URL(url).toString();
- } catch (MalformedURLException e) {
- return null;
- }
- }
-
- private void publish() {
- // hide import button, show progress bar
- importButton.setVisibility(GONE);
- progressBar.setVisibility(VISIBLE);
- hideSoftKeyboard(urlInput);
-
- String url = validateAndNormaliseUrl(urlInput.getText().toString());
- if (url == null) throw new AssertionError();
- importFeed(url);
- }
-
- private void importFeed(String url) {
- ioExecutor.execute(() -> {
- try {
- feedManager.addFeed(url);
- feedImported();
- } catch (DbException | IOException e) {
- logException(LOG, WARNING, e);
- importFailed();
- }
- });
- }
-
- private void feedImported() {
- runOnUiThreadUnlessDestroyed(this::supportFinishAfterTransition);
- }
-
- private void importFailed() {
- runOnUiThreadUnlessDestroyed(() -> {
- // hide progress bar, show publish button
- progressBar.setVisibility(GONE);
- importButton.setVisibility(VISIBLE);
-
- // show error dialog
- AlertDialog.Builder builder =
- new AlertDialog.Builder(RssFeedImportActivity.this,
- R.style.BriarDialogTheme);
- builder.setMessage(R.string.blogs_rss_feeds_import_error);
- builder.setNegativeButton(R.string.cancel, null);
- builder.setPositiveButton(R.string.try_again_button,
- (dialog, which) -> publish());
- AlertDialog dialog = builder.create();
- dialog.show();
- });
- }
-
-}
-
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportFailedDialogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportFailedDialogFragment.java
new file mode 100644
index 0000000000000000000000000000000000000000..ad1363adcc0a927403886199414ed72a1772e3f8
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportFailedDialogFragment.java
@@ -0,0 +1,53 @@
+package org.briarproject.briar.android.blog;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.os.Bundle;
+
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.BaseActivity;
+
+import javax.inject.Inject;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.DialogFragment;
+import androidx.lifecycle.ViewModelProvider;
+
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
+public class RssFeedImportFailedDialogFragment extends DialogFragment {
+ final static String TAG = RssFeedImportFailedDialogFragment.class.getName();
+
+ @Inject
+ ViewModelProvider.Factory viewModelFactory;
+ private RssFeedViewModel viewModel;
+
+ static RssFeedImportFailedDialogFragment newInstance() {
+ return new RssFeedImportFailedDialogFragment();
+ }
+
+ @Override
+ public void onAttach(Context ctx) {
+ super.onAttach(ctx);
+ ((BaseActivity) requireActivity()).getActivityComponent().inject(this);
+
+ viewModel = new ViewModelProvider(requireActivity(), viewModelFactory)
+ .get(RssFeedViewModel.class);
+ }
+
+ @Override
+ public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ AlertDialog.Builder builder =
+ new AlertDialog.Builder(requireActivity(),
+ R.style.BriarDialogTheme);
+ builder.setMessage(R.string.blogs_rss_feeds_import_error);
+ builder.setNegativeButton(R.string.cancel, null);
+ builder.setPositiveButton(R.string.try_again_button,
+ (dialog, which) -> viewModel.retryImportFeed());
+
+ return builder.create();
+ }
+}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportFragment.java
new file mode 100644
index 0000000000000000000000000000000000000000..96845f9bc6843fdf24d32be0fb430ed4fcac8917
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportFragment.java
@@ -0,0 +1,124 @@
+package org.briarproject.briar.android.blog;
+
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ProgressBar;
+
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.fragment.BaseFragment;
+
+import javax.annotation.Nullable;
+import javax.inject.Inject;
+
+import androidx.lifecycle.ViewModelProvider;
+
+import static android.view.View.GONE;
+import static android.view.View.VISIBLE;
+import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE;
+import static org.briarproject.briar.android.util.UiUtils.hideSoftKeyboard;
+
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
+public class RssFeedImportFragment extends BaseFragment {
+ public static final String TAG = RssFeedImportFragment.class.getName();
+
+ @Inject
+ ViewModelProvider.Factory viewModelFactory;
+ private RssFeedViewModel viewModel;
+
+ private EditText urlInput;
+ private Button importButton;
+ private ProgressBar progressBar;
+
+ @Override
+ public void injectFragment(ActivityComponent component) {
+ component.inject(this);
+
+ viewModel = new ViewModelProvider(requireActivity(), viewModelFactory)
+ .get(RssFeedViewModel.class);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater,
+ @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ requireActivity().setTitle(getString(R.string.blogs_rss_feeds_import));
+ View v = inflater.inflate(R.layout.fragment_rss_feed_import,
+ container, false);
+
+ urlInput = v.findViewById(R.id.urlInput);
+ urlInput.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count,
+ int after) {
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before,
+ int count) {
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ enableOrDisableImportButton();
+ }
+ });
+ urlInput.setOnEditorActionListener((view, actionId, event) -> {
+ if (actionId == IME_ACTION_DONE && importButton.isEnabled() &&
+ importButton.getVisibility() == VISIBLE) {
+ publish();
+ return true;
+ }
+ return false;
+ });
+
+ importButton = v.findViewById(R.id.importButton);
+ importButton.setOnClickListener(view -> publish());
+
+ progressBar = v.findViewById(R.id.progressBar);
+
+ viewModel.getIsImporting().observe(getViewLifecycleOwner(),
+ this::onIsImporting);
+
+ return v;
+ }
+
+ @Override
+ public String getUniqueTag() {
+ return TAG;
+ }
+
+ private void enableOrDisableImportButton() {
+ String url = urlInput.getText().toString();
+ importButton.setEnabled(viewModel.validateAndNormaliseUrl(url) != null);
+ }
+
+ private void publish() {
+ String url = viewModel
+ .validateAndNormaliseUrl(urlInput.getText().toString());
+ if (url == null) throw new AssertionError();
+ viewModel.importFeed(url);
+ }
+
+ private void onIsImporting(Boolean importing) {
+ if (importing) {
+ // show progress bar, hide import button
+ importButton.setVisibility(GONE);
+ progressBar.setVisibility(VISIBLE);
+ hideSoftKeyboard(urlInput);
+ } else {
+ // show publish button, hide progress bar
+ importButton.setVisibility(VISIBLE);
+ progressBar.setVisibility(GONE);
+ }
+ }
+}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java
deleted file mode 100644
index 0f6819c3736e22722233ffd573975e41cfaa6b7e..0000000000000000000000000000000000000000
--- a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java
+++ /dev/null
@@ -1,178 +0,0 @@
-package org.briarproject.briar.android.blog;
-
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.os.Bundle;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-
-import com.google.android.material.snackbar.Snackbar;
-
-import org.briarproject.bramble.api.db.DbException;
-import org.briarproject.briar.R;
-import org.briarproject.briar.android.activity.ActivityComponent;
-import org.briarproject.briar.android.activity.BriarActivity;
-import org.briarproject.briar.android.blog.RssFeedAdapter.RssFeedListener;
-import org.briarproject.briar.android.view.BriarRecyclerView;
-import org.briarproject.briar.api.feed.Feed;
-import org.briarproject.briar.api.feed.FeedManager;
-
-import java.util.List;
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
-
-import androidx.appcompat.app.AlertDialog;
-import androidx.recyclerview.widget.LinearLayoutManager;
-
-import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
-import static com.google.android.material.snackbar.Snackbar.LENGTH_LONG;
-import static java.util.logging.Level.WARNING;
-import static org.briarproject.bramble.util.LogUtils.logException;
-
-public class RssFeedManageActivity extends BriarActivity
- implements RssFeedListener {
-
- private static final Logger LOG =
- Logger.getLogger(RssFeedManageActivity.class.getName());
-
- private BriarRecyclerView list;
- private RssFeedAdapter adapter;
-
- @Inject
- @SuppressWarnings("WeakerAccess")
- volatile FeedManager feedManager;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.activity_rss_feed_manage);
-
- adapter = new RssFeedAdapter(this, this);
-
- list = findViewById(R.id.feedList);
- list.setLayoutManager(new LinearLayoutManager(this));
- list.setAdapter(adapter);
- }
-
- @Override
- public void onStart() {
- super.onStart();
- loadFeeds();
- }
-
- @Override
- public void onStop() {
- super.onStop();
- adapter.clear();
- list.showProgressBar();
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- MenuInflater inflater = getMenuInflater();
- inflater.inflate(R.menu.rss_feed_manage_actions, menu);
- return super.onCreateOptionsMenu(menu);
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == android.R.id.home) {
- onBackPressed();
- return true;
- } else if (item.getItemId() == R.id.action_rss_feeds_import) {
- Intent i = new Intent(this, RssFeedImportActivity.class);
- startActivity(i);
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
-
- @Override
- public void injectActivity(ActivityComponent component) {
- component.inject(this);
- }
-
- @Override
- public void onFeedClick(Feed feed) {
- Intent i = new Intent(this, BlogActivity.class);
- i.putExtra(GROUP_ID, feed.getBlogId().getBytes());
- i.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(i);
- }
-
- @Override
- public void onDeleteClick(Feed feed) {
- DialogInterface.OnClickListener okListener =
- (dialog, which) -> deleteFeed(feed);
- AlertDialog.Builder builder = new AlertDialog.Builder(this,
- R.style.BriarDialogTheme);
- builder.setTitle(getString(R.string.blogs_rss_remove_feed));
- builder.setMessage(
- getString(R.string.blogs_rss_remove_feed_dialog_message));
- builder.setPositiveButton(R.string.cancel, null);
- builder.setNegativeButton(R.string.blogs_rss_remove_feed_ok,
- okListener);
- builder.show();
- }
-
- private void loadFeeds() {
- int revision = adapter.getRevision();
- runOnDbThread(() -> {
- try {
- displayFeeds(revision, feedManager.getFeeds());
- } catch (DbException e) {
- logException(LOG, WARNING, e);
- onLoadError();
- }
- });
- }
-
- private void displayFeeds(int revision, List feeds) {
- runOnUiThreadUnlessDestroyed(() -> {
- if (revision == adapter.getRevision()) {
- adapter.incrementRevision();
- if (feeds.isEmpty()) list.showData();
- else adapter.addAll(feeds);
- } else {
- LOG.info("Concurrent update, reloading");
- loadFeeds();
- }
- });
- }
-
- private void deleteFeed(Feed feed) {
- runOnDbThread(() -> {
- try {
- feedManager.removeFeed(feed);
- onFeedDeleted(feed);
- } catch (DbException e) {
- logException(LOG, WARNING, e);
- onDeleteError();
- }
- });
- }
-
- private void onLoadError() {
- runOnUiThreadUnlessDestroyed(() -> {
- list.setEmptyText(R.string.blogs_rss_feeds_manage_error);
- list.showData();
- });
- }
-
- private void onFeedDeleted(Feed feed) {
- runOnUiThreadUnlessDestroyed(() -> {
- adapter.incrementRevision();
- adapter.remove(feed);
- });
- }
-
- private void onDeleteError() {
- runOnUiThreadUnlessDestroyed(() -> Snackbar.make(list,
- R.string.blogs_rss_feeds_manage_delete_error,
- LENGTH_LONG).show());
- }
-}
-
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageFragment.java
new file mode 100644
index 0000000000000000000000000000000000000000..adf97443f7d5b841a9dceff8a181f1721870c832
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageFragment.java
@@ -0,0 +1,123 @@
+package org.briarproject.briar.android.blog;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.briar.R;
+import org.briarproject.briar.android.activity.ActivityComponent;
+import org.briarproject.briar.android.fragment.BaseFragment;
+import org.briarproject.briar.android.view.BriarRecyclerView;
+import org.briarproject.briar.api.feed.Feed;
+
+import javax.annotation.Nullable;
+import javax.inject.Inject;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
+import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull;
+import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID;
+import static org.briarproject.briar.android.blog.RssFeedAdapter.RssFeedListener;
+
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
+public class RssFeedManageFragment extends BaseFragment
+ implements RssFeedListener {
+ public static final String TAG = RssFeedManageFragment.class.getName();
+
+ @Inject
+ ViewModelProvider.Factory viewModelFactory;
+ private RssFeedViewModel viewModel;
+
+ private BriarRecyclerView list;
+ private final RssFeedAdapter adapter = new RssFeedAdapter(this);
+
+ public static RssFeedManageFragment newInstance() {
+ return new RssFeedManageFragment();
+ }
+
+ @Override
+ public void injectFragment(ActivityComponent component) {
+ component.inject(this);
+
+ viewModel = new ViewModelProvider(requireActivity(), viewModelFactory)
+ .get(RssFeedViewModel.class);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater,
+ @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ requireActivity().setTitle(R.string.blogs_rss_feeds);
+ View v = inflater.inflate(R.layout.fragment_rss_feed_manage,
+ container, false);
+
+ list = v.findViewById(R.id.feedList);
+ list.setLayoutManager(new LinearLayoutManager(getActivity()));
+ list.setAdapter(adapter);
+
+ viewModel.getFeeds().observe(getViewLifecycleOwner(), result -> result
+ .onError(e -> {
+ list.setEmptyText(R.string.blogs_rss_feeds_manage_error);
+ list.showData();
+ })
+ .onSuccess(feeds -> {
+ adapter.submitList(feeds);
+ if (requireNonNull(feeds).size() == 0) {
+ list.showData();
+ }
+ })
+ );
+
+ return v;
+ }
+
+ @Override
+ public String getUniqueTag() {
+ return TAG;
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ inflater.inflate(R.menu.rss_feed_manage_actions, menu);
+ super.onCreateOptionsMenu(menu, inflater);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ requireActivity().onBackPressed();
+ return true;
+ } else if (item.getItemId() == R.id.action_rss_feeds_import) {
+ showNextFragment(new RssFeedImportFragment());
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ public void onFeedClick(Feed feed) {
+ Intent i = new Intent(getActivity(), BlogActivity.class);
+ i.putExtra(GROUP_ID, feed.getBlogId().getBytes());
+ i.setFlags(FLAG_ACTIVITY_CLEAR_TOP);
+ startActivity(i);
+ }
+
+ @Override
+ public void onDeleteClick(Feed feed) {
+ RssFeedDeleteFeedDialogFragment dialog =
+ RssFeedDeleteFeedDialogFragment.newInstance(feed.getBlogId());
+ dialog.show(getParentFragmentManager(),
+ RssFeedDeleteFeedDialogFragment.TAG);
+ }
+}
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedViewModel.java
new file mode 100644
index 0000000000000000000000000000000000000000..6c0772685f64bbd4d16e202bc265f53a4cab9961
--- /dev/null
+++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedViewModel.java
@@ -0,0 +1,180 @@
+package org.briarproject.briar.android.blog;
+
+import android.app.Application;
+import android.util.Patterns;
+
+import org.briarproject.bramble.api.db.DatabaseExecutor;
+import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Transaction;
+import org.briarproject.bramble.api.db.TransactionManager;
+import org.briarproject.bramble.api.lifecycle.IoExecutor;
+import org.briarproject.bramble.api.lifecycle.LifecycleManager;
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.GroupId;
+import org.briarproject.bramble.api.system.AndroidExecutor;
+import org.briarproject.briar.android.viewmodel.DbViewModel;
+import org.briarproject.briar.android.viewmodel.LiveEvent;
+import org.briarproject.briar.android.viewmodel.LiveResult;
+import org.briarproject.briar.android.viewmodel.MutableLiveEvent;
+import org.briarproject.briar.api.feed.Feed;
+import org.briarproject.briar.api.feed.FeedManager;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.Executor;
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
+
+import androidx.annotation.Nullable;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+
+import static java.util.logging.Level.WARNING;
+import static java.util.logging.Logger.getLogger;
+import static org.briarproject.bramble.util.LogUtils.logDuration;
+import static org.briarproject.bramble.util.LogUtils.logException;
+import static org.briarproject.bramble.util.LogUtils.now;
+import static org.briarproject.briar.android.blog.RssFeedViewModel.ImportResult.EXISTS;
+import static org.briarproject.briar.android.blog.RssFeedViewModel.ImportResult.FAILED;
+import static org.briarproject.briar.android.blog.RssFeedViewModel.ImportResult.IMPORTED;
+
+@NotNullByDefault
+class RssFeedViewModel extends DbViewModel {
+ enum ImportResult {IMPORTED, FAILED, EXISTS}
+
+ private static final Logger LOG =
+ getLogger(RssFeedViewModel.class.getName());
+
+ private final FeedManager feedManager;
+ private final Executor ioExecutor;
+ private final Executor dbExecutor;
+
+ private final MutableLiveData>> feeds =
+ new MutableLiveData<>();
+
+ @Nullable
+ private volatile String urlFailedImport = null;
+ private final MutableLiveData isImporting =
+ new MutableLiveData<>(false);
+ private final MutableLiveEvent importResult =
+ new MutableLiveEvent<>();
+
+ @Inject
+ RssFeedViewModel(Application app,
+ FeedManager feedManager,
+ @IoExecutor Executor ioExecutor,
+ @DatabaseExecutor Executor dbExecutor,
+ LifecycleManager lifecycleManager,
+ TransactionManager db,
+ AndroidExecutor androidExecutor) {
+ super(app, dbExecutor, lifecycleManager, db, androidExecutor);
+ this.feedManager = feedManager;
+ this.ioExecutor = ioExecutor;
+ this.dbExecutor = dbExecutor;
+
+ loadFeeds();
+ }
+
+ @Nullable
+ String validateAndNormaliseUrl(String url) {
+ if (!Patterns.WEB_URL.matcher(url).matches()) return null;
+ try {
+ return new URL(url).toString();
+ } catch (MalformedURLException e) {
+ return null;
+ }
+ }
+
+ LiveData>> getFeeds() {
+ return feeds;
+ }
+
+ private void loadFeeds() {
+ loadFromDb(this::loadFeeds, feeds::setValue);
+ }
+
+ @DatabaseExecutor
+ private List loadFeeds(Transaction txn) throws DbException {
+ long start = now();
+ List feeds = feedManager.getFeeds(txn);
+ Collections.sort(feeds);
+ logDuration(LOG, "Loading feeds", start);
+ return feeds;
+ }
+
+ void removeFeed(GroupId groupId) {
+ dbExecutor.execute(() -> {
+ List updated = removeListItems(getList(feeds), feed -> {
+ if (feed.getBlogId().equals(groupId)) {
+ try {
+ feedManager.removeFeed(feed);
+ return true;
+ } catch (DbException e) {
+ handleException(e);
+ }
+ }
+ return false;
+ });
+ if (updated != null) {
+ feeds.postValue(new LiveResult<>(updated));
+ }
+ });
+ }
+
+ LiveEvent getImportResult() {
+ return importResult;
+ }
+
+ LiveData getIsImporting() {
+ return isImporting;
+ }
+
+ void importFeed(String url) {
+ isImporting.setValue(true);
+ urlFailedImport = null;
+ ioExecutor.execute(() -> {
+ try {
+ if (exists(url)) {
+ importResult.postEvent(EXISTS);
+ return;
+ }
+ Feed feed = feedManager.addFeed(url);
+ List updated = addListItem(getList(feeds), feed);
+ if (updated != null) {
+ Collections.sort(updated);
+ feeds.postValue(new LiveResult<>(updated));
+ }
+ importResult.postEvent(IMPORTED);
+ } catch (DbException | IOException e) {
+ logException(LOG, WARNING, e);
+ urlFailedImport = url;
+ importResult.postEvent(FAILED);
+ } finally {
+ isImporting.postValue(false);
+ }
+ });
+ }
+
+ void retryImportFeed() {
+ if (urlFailedImport == null) {
+ throw new AssertionError();
+ }
+ importFeed(urlFailedImport);
+ }
+
+ private boolean exists(String url) {
+ List list = getList(feeds);
+ if (list != null) {
+ for (Feed feed : list) {
+ if (url.equals(feed.getUrl())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+}
diff --git a/briar-android/src/main/res/layout/activity_rss_feed_import.xml b/briar-android/src/main/res/layout/fragment_rss_feed_import.xml
similarity index 94%
rename from briar-android/src/main/res/layout/activity_rss_feed_import.xml
rename to briar-android/src/main/res/layout/fragment_rss_feed_import.xml
index 725c991b2b1d6656e4f0ce180fc25dad6c56c4b5..9ee118e4db597033c9630775f9cc9d4286fd9ab1 100644
--- a/briar-android/src/main/res/layout/activity_rss_feed_import.xml
+++ b/briar-android/src/main/res/layout/fragment_rss_feed_import.xml
@@ -5,8 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
- android:padding="@dimen/margin_medium"
- tools:context=".android.blog.RssFeedImportActivity">
+ android:padding="@dimen/margin_medium">
+
diff --git a/briar-android/src/main/res/menu/blogs_feed_actions.xml b/briar-android/src/main/res/menu/blogs_feed_actions.xml
index 22cf36961f6ccd40bc17eb4cc353c148951c7893..5daa3f73b4fcdf1b47288c1f9ba8dcdd6181a0b3 100644
--- a/briar-android/src/main/res/menu/blogs_feed_actions.xml
+++ b/briar-android/src/main/res/menu/blogs_feed_actions.xml
@@ -10,13 +10,8 @@
app:showAsAction="always"/>
-
-
\ No newline at end of file
diff --git a/briar-android/src/main/res/values-ar/strings.xml b/briar-android/src/main/res/values-ar/strings.xml
index 08562cc75cb295c132d9bd4308b183a8d0effbf6..84bc65e6acc91f41c77da4008594c8f80def30d0 100644
--- a/briar-android/src/main/res/values-ar/strings.xml
+++ b/briar-android/src/main/res/values-ar/strings.xml
@@ -461,14 +461,12 @@
إستيراد
ادخال رابط تحديثات RSS
معذرة! حدث خطأ في استيراد التحديثات.
- إدارة تحديثات RSS
تم استيراد:
المؤلف/ة:
آخر تحديث:
ازالة الخلاصة
هل أنت متأكد/ة من رغبتك في حذف هذه الخلاصة؟\n\nالمنشورات ستحذف من جهازك وليس من أجهزة الآخرين.\n\nأي جهة اتصال قمت/ي بمشاركة هذه الخلاصة معها قد لا تتمكن من استلام التحديثات.
حذف
- لا يمكن حذف الخلاصة!
لا خلاصات RSS للعرض\n\nالرجاء لمس علامة + لإستيراد خلاصة.
حدث خطأ في جلب خلاصاتك. الرجاء المحاولة لاحقًا.
diff --git a/briar-android/src/main/res/values-az/strings.xml b/briar-android/src/main/res/values-az/strings.xml
index 7d98403dd6bc5283f3862b8e021b7d969407b294..435e92c098cebbd587d5f124c0acd5eae5ff1ce2 100644
--- a/briar-android/src/main/res/values-az/strings.xml
+++ b/briar-android/src/main/res/values-az/strings.xml
@@ -348,13 +348,11 @@
İdxal
RSS kanalın linkini daxil edin
Üzr istəyirik! Feed-inizdə idxal bir xəta baş verdi.
- RSS Feeds idarəetmə
İdxal olundu:
Müəllif:
Son yeniləmə:
Feed\'i sil
Sil
- Feed silinmədi
Xeyr RSS əks etdirmir\n\nİdxal etmək üçün + düyməsinə toxunun
Kanal yükləmədə bir problem var. Zəhmət olmasa bir az sonra yenə cəhd edin.
diff --git a/briar-android/src/main/res/values-bg/strings.xml b/briar-android/src/main/res/values-bg/strings.xml
index 5a815155ffe34443822918230e50a768e6f862bc..a69357e2965924bf7be82ddba22c50ab68d46550 100644
--- a/briar-android/src/main/res/values-bg/strings.xml
+++ b/briar-android/src/main/res/values-bg/strings.xml
@@ -238,13 +238,11 @@
Внасяне
Въведете URL адреса на RSS емисията
Възникна грешка при внасянето на емисия.
- Управление на RSS емисии
Внесена:
Автор:
Последно актуализиране:
Премахване на емисия
Премахване
- Емисията не можа да бъде изтрита!
Възникна проблем при зареждането на емисиите ви. Моля, опитайте пак по-късно.
diff --git a/briar-android/src/main/res/values-bs/strings.xml b/briar-android/src/main/res/values-bs/strings.xml
index 10a43b106f9a2b931c68e5133f8ae0da1e65f643..336a6c1be32b998fcd31b675d6ea78542090b191 100644
--- a/briar-android/src/main/res/values-bs/strings.xml
+++ b/briar-android/src/main/res/values-bs/strings.xml
@@ -332,14 +332,12 @@
Uvezi
Unesi URL od RSS kanala
Žao nam je! Došlo je do greške pri unosu vašeg kanala.
- Upravljanje RSS kanalima
Uvezeno:
Autor:
Zadnje ažuriranje:
Uklonite kanal
Jeste li sigurni da želite da uklonite kanal?\n\nPostovi će biti uklonjeni sa vašeg uređaja ali ne is uređaja drugih ljudi.\n\nKontakti kojima ste podijelili ovaj blog će možda prestati da dobijaju novosti.
Ukloni
- Kanal nije bilo moguće ukloniti!
Nema RSS kanala za prikazivanje\n\nDotaknite + ikonu da uvezete kanal
Došlo je do problema pri učitavanju vaših kanala. Probajte opet kasnije.
diff --git a/briar-android/src/main/res/values-ca/strings.xml b/briar-android/src/main/res/values-ca/strings.xml
index be6a52432ecdc9f28af38f6851f5a7d86a941b52..9e0f0898633e7aa42b597b376844977500b09b5e 100644
--- a/briar-android/src/main/res/values-ca/strings.xml
+++ b/briar-android/src/main/res/values-ca/strings.xml
@@ -421,14 +421,12 @@ Així que l\'actualitzi li veureu una icona diferent .
Subscriu-me
Escriviu l\'URL del canal de notícies RSS
Ens sap greu! S\'ha produït un error en subscriure-us al vostre canal de notícies.
- Gestiona els canals de notícies RSS
Importat:
Autor:
Darrera actualització:
Suprimeix la subscripció al canal de notícies
Segur que voleu suprimir la subscripció a aquest canal de notícies?\n\nLes notícies d\'aquest canal s\'eliminaran del vostre dispositiu però no del d\'altres persones.\n\nEls contactes amb els que hàgeu compartit aquest canal poden deixar de rebre les actualitzacions.
Suprimeix la subscripció
- La subscripció al canal de notícies no s\'ha pogut suprimir.
No hi ha cap notícia per mostrar\n\nFeu un toc sobre la icona + per subscriure-us a un canal de notícies
S\'ha produït un problema en actualitzar els vostres canals de notícies. Torneu-ho a provar més endavant.
diff --git a/briar-android/src/main/res/values-cs/strings.xml b/briar-android/src/main/res/values-cs/strings.xml
index 73610748a9ee3dea067c343ab752037f89447ed1..d40259c2d27ea8d2ed1c4cae1f463ff6efa5683e 100644
--- a/briar-android/src/main/res/values-cs/strings.xml
+++ b/briar-android/src/main/res/values-cs/strings.xml
@@ -302,13 +302,11 @@
Import
Zadejte URL adresu RSS kanálu
Omlouváme se! Vyskytla se chyba při importu vašeho kanálu.
- Správa RSS kanálů
Importováno:
Autor:
Naposledy aktualizováno:
Odstranit kanál
Odstranit
- Kanál nemohl být odstraněn !
Žádné RSS kanály k zobrazení\n\nKlikněte na ikonu + pro nahrání příspěvků
Vyskytl se problém s načtením vašeho kanálu příspěvků. Zkuste to prosím později.
diff --git a/briar-android/src/main/res/values-de/strings.xml b/briar-android/src/main/res/values-de/strings.xml
index 0d014c9e887449af76806cebc6e8a2fd872fa01d..c418224b29e455ea6690439f0b3cb6e40268ec50 100644
--- a/briar-android/src/main/res/values-de/strings.xml
+++ b/briar-android/src/main/res/values-de/strings.xml
@@ -457,14 +457,12 @@
Importieren
URL des RSS-Feeds eingeben
Es tut uns Leid! Es gab einen Fehler beim Importieren deines Feeds.
- RSS-Feeds verwalten
Importiert:
Autor:
Letzte Aktualisierung:
Feed entfernen
Bist du sicher, dass du diesen Feed löschen willst?\n\nBeiträge werden von deinem Gerät entfernt, aber nicht von den Geräten anderer Personen.\n\nAlle Kontakte, für die du diesen Feed freigegeben hast, können keine Updates mehr erhalten.
Aufheben
- Der Feed konnte nicht gelöscht werden!
Keine RSS-Feeds vorhanden\n\nTippe auf das + Symbol, um einen Feed zu importieren
Es gab ein Problem beim Laden deiner Feeds. Bitte versuche es später erneut.
diff --git a/briar-android/src/main/res/values-es/strings.xml b/briar-android/src/main/res/values-es/strings.xml
index f6a6f7bdd904d644f4ecc22792afa71c69abff99..864613ef5daa6f69de548c7df55e12f1c4dff820 100644
--- a/briar-android/src/main/res/values-es/strings.xml
+++ b/briar-android/src/main/res/values-es/strings.xml
@@ -457,14 +457,12 @@
Importar
Introduce la URL del canal RSS
¡Lo sentimos! Hubo un error importando tu canal.
- Administrar canales RSS
Importado:
Autor:
Última actualización:
Eliminar canal RSS
¿Estás seguro de que quieres quitar este canal RSS?\n\nLos mensajes se eliminarán de tu dispositivo, pero no de los dispositivos de otras personas.\n\nEs posible que los contactos con los que hayas compartido este canal dejen de recibir actualizaciones.
Eliminar
- ¡El canal no pudo ser eliminado!
No hay canales RSS que mostrar\n\nGolpea el icono + para importar uno
Hubo un problema cargando tus canales RSS. Por favor, prueba más tarde.
diff --git a/briar-android/src/main/res/values-eu/strings.xml b/briar-android/src/main/res/values-eu/strings.xml
index f317cdd4f28576f8c57e06c55298c0233cf673dd..f270f40e91127f9663fbc1ef1c2f940c387e8a5f 100644
--- a/briar-android/src/main/res/values-eu/strings.xml
+++ b/briar-android/src/main/res/values-eu/strings.xml
@@ -395,14 +395,12 @@
Inportatu
Sartu RSS jarioaren URLa
Sentitzen dugu! Zure jarioa inportatzean errore bat gertatu da.
- Kudeatu RSS jarioak
Inportatuta:
Egilea:
Azken eguneratzea:
Kendu jarioa
Ziur zaude jario hau kendu nahi duzula?\n\nSarrerak zure gailutik kenduko dira baina ez besteen gailuetatik.\n\nJario hau beste inorekin partekatu baduzu agian eguneratzeak jasotzeari utziko diote.
Kendu
- Ezin izan da jarioa ezabatu!
Ez dago erakusteko RSS jariorik\n\nSakatu + ikonoa jario bat inportatzeko
Arazo bat egon da zure jarioak kargatzean. Saiatu berriro geroago.
diff --git a/briar-android/src/main/res/values-fa/strings.xml b/briar-android/src/main/res/values-fa/strings.xml
index 454d7ee5df543bb57f8793645476906ab79dc37d..1ce2d7226533a7e4b749550bfb4353817b2253d5 100644
--- a/briar-android/src/main/res/values-fa/strings.xml
+++ b/briar-android/src/main/res/values-fa/strings.xml
@@ -488,7 +488,6 @@
وارد کردن
آدرس خوراک RSS را وارد کنید
متاسفیم! وارد کردن خوراک شما با خطا مواجه شده است.
- مدیریت خوراک های RSS
وارد شده:
نویسنده:
آخرین به روز رسانی:
@@ -499,7 +498,6 @@
هر مخاطبی که با آن این خوراک را به اشتراک گذاشته اید ممکن است دیگر آپدیت دریافت نکند.
حذف
- خوراک نمی تواند پاک شود!
هیچ خوراک RSS برای نمایش وجود ندارد
برای وارد کردن خوراک روی آیکون + ضربه بزنید
diff --git a/briar-android/src/main/res/values-fi/strings.xml b/briar-android/src/main/res/values-fi/strings.xml
index 0a5b356aa9ae59dd6fd2e036b6bf722fe328cffa..7b064f02c752267c939c47f0fe3b163fc9fa13ce 100644
--- a/briar-android/src/main/res/values-fi/strings.xml
+++ b/briar-android/src/main/res/values-fi/strings.xml
@@ -314,14 +314,12 @@
Tuo
Syötä RSS syötteen URL osoite
Pahoittelemme! Syötteen noutamisessa tapahtui virhe.
- Muokkaa RSS syötteitä
Tuotu:
Tekijä:
Viimeksi päivitetty:
Poista syöte
Oletko varma, että haluat poistaa tämän syötteen?\n\nKirjoitukset poistuvat sinun laitteelta, mutta ei muiden laitteilta.\n\nKäyttäjät joiden kanssa olet jakanut tämän syötteen eivät välttämättä saa uusia päivityksiä.
Poista
- Syötteen poistaminen epäonnistui!
Ei RSS syötteitä\n\nNapauta + nappia lisätäksesi syötteen
Syötteiden lataamisessa tapahtui virhe. Yritä myöhemmin uudelleen.
diff --git a/briar-android/src/main/res/values-fr/strings.xml b/briar-android/src/main/res/values-fr/strings.xml
index 9681398dc8e28d63e2d70935d1c55a8e34d32e03..20390c653924927b4cee6b6a20b8a1da576cdb99 100644
--- a/briar-android/src/main/res/values-fr/strings.xml
+++ b/briar-android/src/main/res/values-fr/strings.xml
@@ -453,14 +453,12 @@
Importer
Saisir l’URL du fil RSS
Nous sommes désolés ! Une erreur est survenue lors de l’importation de votre fil.
- Gérer les fils RSS
Importés :
Auteur :
Dernière mise à jour :
Supprimer le fil
Voulez-vous vraiment supprimer ce fil ?\nLes billets seront supprimés de votre appareil mais pas des appareils d’autrui.\n\nLes contacts avec qui vous avez partagé ce fil pourraient ne plus en recevoir les mises à jour.
Supprimer
- Impossible de supprimer le fil !
Aucun fil RSS à afficher\n\nTouchez l’icône + pour importer un fil
Un problème est survenu lors du chargement de vos fils. Veuillez réessayer plus tard.
diff --git a/briar-android/src/main/res/values-gl/strings.xml b/briar-android/src/main/res/values-gl/strings.xml
index 5aedba8cd2388bda4de6d1f7bfec61c7ff8a21ed..25d48dcc4863f1d194908790dad2314418065493 100644
--- a/briar-android/src/main/res/values-gl/strings.xml
+++ b/briar-android/src/main/res/values-gl/strings.xml
@@ -454,14 +454,12 @@
Importar
Escribe o URL da fonte RSS
Lamentámolo! Algo fallou ao importar a fonte.
- Xestionar Fontes RSS
Importado:
Autor/a:
Última actualización:
Eliminar fonte
Tes a certeza de querer eliminar esta fonte?\n\nAs entradas eliminaranse do teu dispositivo pero non dos dispositivos doutras persoas\n\nTodas as persoas coas que compartiches esta fonte poderían deixar de recibir actualizacións.
Eliminar
- Non se puido eliminar a fonte!
Sen fontes RSS que mostrar\n\nToque na icona + para importar unha fonte
Aconteceu un problema ao cargar as túas fontes. Por favor, inténtao máis tarde.
diff --git a/briar-android/src/main/res/values-he/strings.xml b/briar-android/src/main/res/values-he/strings.xml
index eda80446a1a0635703cda30b78c57444f690a427..a99bb958f982cfda2974922ae0479724cc21b78e 100644
--- a/briar-android/src/main/res/values-he/strings.xml
+++ b/briar-android/src/main/res/values-he/strings.xml
@@ -444,14 +444,12 @@
ייבא
הכנס את כתובת האתר של הזנת ה־RSS
אנחנו מצטערים! הייתה שגיאה ביבוא ההזנה שלך.
- נהל הזנות RSS
מיובא:
מחבר:
עודכן לאחרונה:
הסר הזנה
האם אכן ברצונך להסיר הזנה זו?\n\nרשומות יוסרו ממכשירך אבל לא ממכשירים של אנשים אחרים.\n\nאנשי קשר כלשהם ששיתפת איתם הזנה זו עלולים להפסיק לקבל עדכונים.
הסר
- ההזנה לא יכלה להימחק!
אין הזנות RSS להראות\n\nהקש על הצלמית + כדי לייבא הזנה
הייתה בעיה בטעינת ההזנות שלך. אנא נסה שוב מאוחר יותר.
diff --git a/briar-android/src/main/res/values-hi/strings.xml b/briar-android/src/main/res/values-hi/strings.xml
index 6c4ca9f1198c46ca504769a0735e9c5171187273..5b1b8ad146762e4eb572baba7ea4e64cc50d0177 100644
--- a/briar-android/src/main/res/values-hi/strings.xml
+++ b/briar-android/src/main/res/values-hi/strings.xml
@@ -378,14 +378,12 @@
आयात
आरएसएस फ़ीड का यूआरएल दर्ज करें
हमें खेद है! आपकी फ़ीड आयात करने में एक त्रुटि हुई
- आरएसएस फ़ीड प्रबंधित करें
आयातित:
लेखक:
आखरी अपडेट:
फ़ीड निकालें
क्या आप वाकई इस फीड को हटाना चाहते हैं? \ N \ n पोस्ट आपके डिवाइस से हटा दिए जाएंगे, लेकिन अन्य लोगों के डिवाइस से नहीं। \ N \ n आपके द्वारा इस फ़ीड को साझा करने वाले किसी भी संपर्क को अपडेट प्राप्त करना बंद हो सकता है।
हटाना
- फीड हटाया नहीं जा सका!
कोई आरएसएस फ़ीड दिखाने के लिए फ़ीड नहीं करता \ n \ n फ़ीड आयात करने के लिए + आइकन टैप करें
आपकी फ़ीड लोड करने में एक समस्या थी बाद में पुन: प्रयास करें।
diff --git a/briar-android/src/main/res/values-hu/strings.xml b/briar-android/src/main/res/values-hu/strings.xml
index a74869f38e2b1947c5395a1fec217db3b52f5110..097282e149396cdb34731f8b22ff8fd8f04fb696 100644
--- a/briar-android/src/main/res/values-hu/strings.xml
+++ b/briar-android/src/main/res/values-hu/strings.xml
@@ -461,7 +461,6 @@ Kapcsolatai, akivel megosztotta ezt a blogot, lehet nem kapnak többé frissít
Importálás
Adja meg az RSS feed URL címét
Elnézését kérjük! Probléma akadt a feed-je importálásával.
- RSS feed-ek kezelés
Importálva:
Szerző:
Utolsó frissítés:
@@ -469,7 +468,6 @@ Kapcsolatai, akivel megosztotta ezt a blogot, lehet nem kapnak többé frissít
Biztosan eltávolítja ezt a feed-et?
\n\nA bejegyzések törlődni fognak az Ön eszközéről, de nem a többi ember eszközéről.\n\nKapcsolatai, akivel megosztotta ezt a feed-et, lehet nem kapnak többé frissítést.
Eltávolít
- A feed nem törölhető!
Nincs megjelenítendő
Hiba történt a feed-jei betöltésével. Kérjük próbálja újra később.
diff --git a/briar-android/src/main/res/values-is/strings.xml b/briar-android/src/main/res/values-is/strings.xml
index a59787bd7a9f90804d259baa19ef5b00606808de..8e4f37f472d50dfcfc059ec0a3847f86523eef55 100644
--- a/briar-android/src/main/res/values-is/strings.xml
+++ b/briar-android/src/main/res/values-is/strings.xml
@@ -454,14 +454,12 @@
Flytja inn
Settu inn slóðina á RSS-streymið
Því miður! Það kom upp villa við að flytja inn streymið.
- Sýsla með RSS-streymi
Flutt inn:
Höfundur:
Síðast uppfært:
Fjarlægja streymi
Ertu viss um að þú viljir fjarlægja þetta streymi?\n\nFærslur verða fjarlægðar af tækinu þínu en ekki tækjum annars fólks.\n\nAllir tengiliðir sem þú hefur deilt þessu streymi með gætu hætt að fá uppfærslur.
Fjarlægja
- Ekki var hægt að eyða streyminu!
Engin RSS-streymi til að birta\n\nÝttu á + táknið til að flytja inn streymi
Vandamál hefur komið upp með að hlaða inn streymunum þínum. Reyndu aftur síðar.
diff --git a/briar-android/src/main/res/values-it/strings.xml b/briar-android/src/main/res/values-it/strings.xml
index dd6a47308a58be576d7dd8ecc3739eab5fa07b15..13500bdfaf3d283c9ea5ebed96a574e0de3a9fd2 100644
--- a/briar-android/src/main/res/values-it/strings.xml
+++ b/briar-android/src/main/res/values-it/strings.xml
@@ -420,14 +420,12 @@
Importa
Inserire l\'URL dell\'RSS feed
Ci dispiace! C\'è stato un errore nell\'importazione del tuo feed.
- Gestisci gli RSS Feed
Importato:
Autore:
Ultimo Aggiornamento:
Rimuovi feed
Sei sicuro di voler rimuovere questo feed?\n\nI post saranno rimossi dal tuo dispositivo ma non dai dispositivi delle altre persone.\n\nTutti i contatti con cui hai condiviso questo feed potrebbero smettere di ricevere aggiornamenti.
Rimuovi
- Non è stato possibile cancellare il feed!
Nessun feed RSS da mostrare\n\nClicca l\'icona + per importare un feed
C\'è stato un problema nel caricare i tuoi feeds. Per favore riprova fra poco.
diff --git a/briar-android/src/main/res/values-ja/strings.xml b/briar-android/src/main/res/values-ja/strings.xml
index cba15adcd3c5211af09a3599f4aefda49b703035..3e5cd347c7c1bc3e815da739b916f2a5c7079053 100644
--- a/briar-android/src/main/res/values-ja/strings.xml
+++ b/briar-android/src/main/res/values-ja/strings.xml
@@ -369,14 +369,12 @@
インポート
RSSフィードのURLを入力してください
申し訳ありません! フィードのインポート中にエラーが発生しました。
- RSSフィードを管理
インポート済み:
著者:
最終更新:
フィードを削除
このフィードを削除してもよろしいですか?\n\n投稿はデバイスから削除されますが、他の人のデバイスからは削除されません。\n\nこのフィードを共有した人は更新の受信を停止されます。
解除
- フィードを削除できませんでした!
表示するRSSフィードはありません\n\n「+」アイコンをタップしてフィードをインポートします
フィードの読み込み中に問題が発生しました。 後でもう一度やり直してください。
diff --git a/briar-android/src/main/res/values-ko/strings.xml b/briar-android/src/main/res/values-ko/strings.xml
index 29800e59d5cc15e9e323a41cd1775d7bd9fc4a1a..d8e111d14a4979705c01203761c954bc793f2e63 100644
--- a/briar-android/src/main/res/values-ko/strings.xml
+++ b/briar-android/src/main/res/values-ko/strings.xml
@@ -410,14 +410,12 @@
가져오기
RSS 피드 URL을 입력하세요
죄송합니다! 피드를 불러오는 과정에서 문제가 있었습니다.
- RSS 피드 관리하기
다음을 불러왔습니다:
작성자:
최종 업데이트:
피드 제거하기
정말로 이 피드를 제거하시겠어요?\n\n기기에서 게시물은 제거되지만 다른 사람의 기기에서는 제거되지 않습니다.\n\n이 피드를 공유하던 지인이 업데이트를 받지 못하게 될 수 있습니다.
제거하기
- 피드를 삭제할 수 없었습니다!
보여드릴 RSS 피드가 없습니다\n\n+ 상징을 눌러 피드를 불러오세요
피드를 불러오는 과정에서 문제가 있었습니다. 나중에 다시 시도해 주세요.
diff --git a/briar-android/src/main/res/values-lt/strings.xml b/briar-android/src/main/res/values-lt/strings.xml
index 2a80a7f271deaaf7afcad891c29c90fea3efd9d9..bf2041ca70fe5347c21307b4659f40b3cc8193be 100644
--- a/briar-android/src/main/res/values-lt/strings.xml
+++ b/briar-android/src/main/res/values-lt/strings.xml
@@ -481,14 +481,12 @@
Importuoti
Įveskite RSS kanalo URL
Atleiskite! Importuojant jūsų kanalą, įvyko klaida.
- Tvarkyti RSS kanalus
Importuota:
Autorius:
Paskutinį kartą atnaujinta:
Šalinti kanalą
Ar tikrai norite pašalinti šį kanalą?\n\nĮrašai bus pašalinti iš jūsų įrenginio, tačiau liks kitų žmonių įrenginiuose.\n\nBet kokie adresatai, su kuriais bendrinote šį kanalą, gali nustoti gauti atnaujinimus.
Šalinti
- Nepavyko ištrinti kanalo!
Nėra rodytinų RSS kanalų\n\nNorėdami importuoti kanalą, bakstelėkite + piktogramą
Įkeliant jūsų kanalus, atsirado problemų. Vėliau bandykite dar kartą.
diff --git a/briar-android/src/main/res/values-mk/strings.xml b/briar-android/src/main/res/values-mk/strings.xml
index d5cbdce327cb5e4f94d4fa81624128d7f7f4e143..964e1aa6fc65eb9965b06541fd97fd7d9c2e8648 100644
--- a/briar-android/src/main/res/values-mk/strings.xml
+++ b/briar-android/src/main/res/values-mk/strings.xml
@@ -419,14 +419,12 @@
Увези
Внеси URL на RSS тековник
Жал ни е! Настана гршка при увезувањето на вашиот тековник.
- Уредување на RSS тековници
Увезени:
Автор:
Последен пат ажуриран:
Отстрани тековник
Дали сте сигурни дека сакате да го отстраните овој тековник?\n\nОбјавите ќе бидат отстранети од вашиот уред но не и од уредите на другите луѓе.\n\nБило кои од контактите со кои сте го споделиле овој тековник може да престанат да добиваат ажурирања.
Отстрани
- Тековникот не може да биде избришан!
Нема RSS тековници за прикажување\n\nДопрете ја + иконата за да увезете тековник
Настана проблем при вчитувањето на вашите тековници. Ве молиме обидете се повторно подоцна.
diff --git a/briar-android/src/main/res/values-nb/strings.xml b/briar-android/src/main/res/values-nb/strings.xml
index f0e4c10cb4b85162eb53b981444a490cbc8051cb..5a4325a65124fdd4a137b38fdb564646977f652a 100644
--- a/briar-android/src/main/res/values-nb/strings.xml
+++ b/briar-android/src/main/res/values-nb/strings.xml
@@ -259,13 +259,11 @@
Importer
Skriv inn nettadresse for RSS-strøm
Vi beklager! Feil under importering av strøm.
- Behandle RSS-strømmer
Importert:
Forfatter:
Sist oppdatert:
Fjern strøm
Fjern
- Strømmen kunne ikke fjernes!
Feil ved lasting av dine strømmer. Prøv igjen senere.
Vis
diff --git a/briar-android/src/main/res/values-nl/strings.xml b/briar-android/src/main/res/values-nl/strings.xml
index 131fb8f04b769582c8ea9906ace83de883743c50..2b5ab0bdb8eec00c0be8c53b695f07cd4f26ec6a 100644
--- a/briar-android/src/main/res/values-nl/strings.xml
+++ b/briar-android/src/main/res/values-nl/strings.xml
@@ -420,14 +420,12 @@
Importeer
Voer de URL van de RSS-feed in
Excuses! Er trad een fout op bij het importeren van je feed.
- Beheer RSS-feeds
Geïmporteerd:
Auteur:
Laatst bijgewerkt:
Verwijder feed
Weet je zeker dat je deze feed wil verwijderen?\n\nPosts zullen van je apparaat worden verwijderd maar niet van apparaten van andere mensen.\n\nContacten met wie je deze feed hebt gedeeld zullen geen updates meer ontvangen.
Verwijderen
- De feed kon niet worden verwijderd.
Geen RSS-feeds om te tonen\n\nTik op het +-icoon om een feed te importeren
Er was een probleem met het laden van je feeds. Probeer het alsjeblieft later nog een keer.
diff --git a/briar-android/src/main/res/values-oc/strings.xml b/briar-android/src/main/res/values-oc/strings.xml
index d1a716a4a092a2f0a1211041666dd3a06135b49c..d317574767886edb719fa5ce15c569b75e52631f 100644
--- a/briar-android/src/main/res/values-oc/strings.xml
+++ b/briar-android/src/main/res/values-oc/strings.xml
@@ -392,7 +392,6 @@ Volètz suprimir vòstre compte e ne crear un nòu ?\n
Importar
Marcar l’URL del flux RSS
Una error s’es produisida en importar lo flux
- Gerir lo flux RSS
Importat :
Autor :
Darrièra mesa a jorn :
@@ -402,7 +401,6 @@ levadas de vòstre aparelh mas pas dels aparelhs del monde.\n\nTotes los
contactes qu’avètz partejat aqueste flux quitaràn benlèu de recebre las mesas
a jorn.
Suprimir
- Impossible de suprimir lo flux !
Cap de flux RSS de far veire.\n\nTocatz l’icòna + per n’importar un
Error en cargar vòstres fluxes. Ensajatz mai tard.
diff --git a/briar-android/src/main/res/values-pl/strings.xml b/briar-android/src/main/res/values-pl/strings.xml
index ac82e1218cee8be689a05493ece0b6c62e52612b..e4f71af3175f53c27b74876ac06a3ce405e6e77e 100644
--- a/briar-android/src/main/res/values-pl/strings.xml
+++ b/briar-android/src/main/res/values-pl/strings.xml
@@ -400,14 +400,12 @@
Zaimportuj
Wprowadź adres URL do kanału RSS
Przepraszamy! Wystąpił błąd podczas importowania twojego kanału RSS
- Zarządzaj kanałami RSS
Zaimportowane:
Autor:
Ostatnio Zaktualizowane:
Usuń kanał RSS
Jesteś pewny, że chcesz usunąć ten kanał RSS?\n\nPosty będą usunięte z Twojego urządzenia, ale nie z urządzeń innych ludzi.\n\nWszystkie kontakty którym udostępniłeś ten kanał mogą przestać otrzymywać jego uaktualnienia
Usuń
- Kanał nie mógł zostać usunięty!
Brak RSS do wyświetlenia\n\nDotknij ikonki + aby zaimportować kanał.
Wystąpił problem podczas ładowania twoich kanałów RSS. Proszę spróbować ponownie później.
diff --git a/briar-android/src/main/res/values-pt-rBR/strings.xml b/briar-android/src/main/res/values-pt-rBR/strings.xml
index 562d714e425cc1020d8955dfa70530b1bb145270..0e0539129aa4b4eb99a315156dbff39a733dda1e 100644
--- a/briar-android/src/main/res/values-pt-rBR/strings.xml
+++ b/briar-android/src/main/res/values-pt-rBR/strings.xml
@@ -420,14 +420,12 @@
Importar
Entre a URL do feed RSS
Nós lamentamos! Houve um erro ao importar seu Feed.
- Gerenciar Feeds RSS
Importado:
Autor:
Última Atualização:
Remover Feed
Você tem certeza que deseja remover este feed?\n\nOs posts serão removidos do seus dispositivo mas não dos dispositivos de outras pessoas.\n\nContatos com quem você tenha compartilhado este feed vão parar de receber atualizações dele.
Remover
- O Feed não pode ser deletado!
Nenhum feed RSS para ser exibido\n\nPressione o ícone + para importar um feed
Houve um problema ao carregar seus Feeds. Por favor tente novamente.
diff --git a/briar-android/src/main/res/values-ro/strings.xml b/briar-android/src/main/res/values-ro/strings.xml
index 0e56c945e0b9a757d418efd2f9fa0e751533a4b1..5c6f1a45e6f70ef29616bf7be1af8072480a7156 100644
--- a/briar-android/src/main/res/values-ro/strings.xml
+++ b/briar-android/src/main/res/values-ro/strings.xml
@@ -445,14 +445,12 @@
Importă
Introduceți URL-ul fluxului RSS
Ne pare rău! A apărut o eroare la importul fluxului dumneavoastră.
- Administrare fluxuri RSS
Importat:
Autor:
Actualizat ultima dată:
Șterge flux
Sunteți siguri că doriți să eliminați acest flux?\n\nMesajele vor fi eliminate de pe dispozitiv, dar nu și de pe dispozitivele altor persoane.\n\nOrice persoană de contact către care ați distribuit acest flux s-ar putea sa nu mai primească actualizări.
Eliminare
- Fluxul nu a putut fi șters!
Nici un flux RSS de arătat\n\nAtingeți iconița + pentru a adăuga un flux
A apărut o eroare la încărcarea fluxurilor dumneavoastră. Vă rugăm să încercați din nou mai târziu.
diff --git a/briar-android/src/main/res/values-ru/strings.xml b/briar-android/src/main/res/values-ru/strings.xml
index da557b24dc6a1ffa30a8a5fa204d79f335ffa663..bd0707b46c40d5bbff313439ce0fc945840e9255 100644
--- a/briar-android/src/main/res/values-ru/strings.xml
+++ b/briar-android/src/main/res/values-ru/strings.xml
@@ -476,14 +476,12 @@
Импорт
Введите URL-адрес RSS-ленты
Мы сожалеем! Произошла ошибка при импорте ленты.
- Управление RSS-лентами
Импортирован:
Автор:
Последнее обновление:
Удалить RSS-ленту
Вы уверены, что хотите удалить эту ленту?\n\nПосты будут удалены только с вашего устройства.\n\nВсе контакты, с которыми вы поделились этой лентой, могут перестать получать обновления.
Удалить
- Не удалось удалить ленту!
Нет RSS-лент для отображения\n\nКоснитесь значка + для импорта ленты
Ошибка при загрузке вашей ленты. Повторите попытку позже.
diff --git a/briar-android/src/main/res/values-sq/strings.xml b/briar-android/src/main/res/values-sq/strings.xml
index 618b314cb916d7f78c063360a2b415951381ff3a..6252bc96e001e738fa29c4f6fc6507199cf276e3 100644
--- a/briar-android/src/main/res/values-sq/strings.xml
+++ b/briar-android/src/main/res/values-sq/strings.xml
@@ -457,14 +457,12 @@
Importo
Jepni URL-në e prurjes RSS
Na ndjeni! Pati një gabim me importimin e prurjes tuaj.
- Administroni Prurje RSS
Të importuara:
Autor:
Përditësuar Së Fundi:
Hiqe Prurjen
Jeni i sigurt se doni të hiqet kjo prurje?\n\nPostimet do të hiqen nga pajisja juaj, por jo nga pajisjet e personave të tjerë.\n\nÇfarëdo kontaktesh me të cilët e keni ndarë këtë prurje mund të reshtin së marri përditësime.
Hiqe
- S\’u fshi dot prurja!
S’ka prurje RSS për shfaqje\n\nPrekni ikonën + që të importohet një prurje
Pati një problem me ngarkimin e prurjeve tuaja. Ju lutemi, riprovoni më vonë.
diff --git a/briar-android/src/main/res/values-sr/strings.xml b/briar-android/src/main/res/values-sr/strings.xml
index b4c9ade7c63afd7331714900ccaea0c04ef4b4c6..4889c4717705b6fd16eecbf4de58112a305108ea 100644
--- a/briar-android/src/main/res/values-sr/strings.xml
+++ b/briar-android/src/main/res/values-sr/strings.xml
@@ -340,7 +340,6 @@ Kontakti kojima ste podijelili ovaj blog će možda prestati da dobijaju novosti
Uvezi
Unesi URL od RSS kanala
Žao nam je! Došlo je do greške pri unosu vašeg kanala.
- Rukujte RSS kanalima
Uvezeno:
Autor:
Zadnje ažuriranje:
@@ -351,7 +350,6 @@ Postovi će biti uklonjeni sa vašeg uređaja ali ne is uređaja drugih ljudi.
Kontakti kojima ste podijelili ovaj blog će možda prestati da dobijaju novosti.
Ukloni
- Kanal nije bilo moguće ukloniti!
Nema RSS kanala za prikazivanje
Dotaknite + ikonu da uvezete kanal
diff --git a/briar-android/src/main/res/values-sv/strings.xml b/briar-android/src/main/res/values-sv/strings.xml
index 00f548e404972763dab960a4252df42931d41c2a..f926de3905a29fbe003af1b8ba9327fe8959881d 100644
--- a/briar-android/src/main/res/values-sv/strings.xml
+++ b/briar-android/src/main/res/values-sv/strings.xml
@@ -420,14 +420,12 @@
Importera
Skriv URL till RSS-flödet
Tyvärr! Något gick fel när flödet skulle importeras.
- Hantera RSS-flöden
Importerade:
Författare:
Senast uppdaterad:
Ta bort flöde
Är du säker på att du vill ta bort det här flödet?\n\nInlägg kommer att tas bort från din enhet, men inte från andras.\n\nKontakter som du har delat det här flödet med kommer kanske inte längre få uppdateringar från det.
&Ta bort
- Flödet kunde ej tas bort!
Inga RSS-flöden\n\nTryck plus-ikonen (+) för att importera ett flöde
Något gick fel när dina flöden skulle laddas. Försök ingen senare.
diff --git a/briar-android/src/main/res/values-sw/strings.xml b/briar-android/src/main/res/values-sw/strings.xml
index 13d48c5a430cca681f7640bee442054add860fcd..c85bda54893d1e67a3d94fe0f63a884d1fb0f840 100644
--- a/briar-android/src/main/res/values-sw/strings.xml
+++ b/briar-android/src/main/res/values-sw/strings.xml
@@ -400,7 +400,6 @@ Umepoteza nenosiri.
Ingiza
Ingiza URL za RSS taarifa
Samahani! Kulikuwa na hitilafu wakati wakuingiza taarifa
- Simamia taarifa za RSS
Zilizoingizwa
Mwandishi:
huwisho la mwisho
@@ -408,7 +407,6 @@ Umepoteza nenosiri.
Ondoa taarifa
Unauhakika unataka kutoa hii taarifa?\n\nChapisho lako litaondolewa kwenye kifaa chako ila sio kwenye vifaa vya watu wengine.\n\nMawasiliano yoyote utliokwisha kuyaunganisha wanaweza wasiendelea kupata taarifa.
Ondoa
- Taharifa haziwezekani kuzifuta!
Hakuna RSS taharifa zaku onyesha\n\nBonyeza + ikoni kuleta taharifa
Kulikuwa na tatizo la kufungua taharifa . Tafathali jaribu baadae kidogo.
diff --git a/briar-android/src/main/res/values-tr/strings.xml b/briar-android/src/main/res/values-tr/strings.xml
index 588a6e32c354102bfe558b356b8f81ce07d24a5a..6a4322bfdfe3c63e0caccae3b61fd6ce4e9eea3c 100644
--- a/briar-android/src/main/res/values-tr/strings.xml
+++ b/briar-android/src/main/res/values-tr/strings.xml
@@ -454,14 +454,12 @@
İçe Aktar
RSS beslemesi URL\'sini girin
Üzgünüz! RSS beslemeniz içe aktarılırken bir hata oluştu.
- RSS Beslemelerini Yönet
İçe Aktarıldı:
Yazar:
Son Güncelleme:
Beslemeyi Kaldır
Bu beslemeyi kaldırmak istediğinizden emin misiniz?\n\nGönderiler sizin aygıtınızdan değil, diğer insanların aygıtlarından kaldırılacaktır.\n\nBu beslemeyi paylaştığınız kişiler güncellemeleri alması durabilir.
Kaldır
- Besleme silinemedi!
Gösterilecek RSS beslemesi yok\n\nBir beslemeyi içe aktarmak için + simgesine dokunun
Beslemeleriniz yüklenirken bir hata oluştu. Lütfen daha sonra tekrar deneyin.
diff --git a/briar-android/src/main/res/values-uk/strings.xml b/briar-android/src/main/res/values-uk/strings.xml
index b30074bd8e4eb4a7825e9fc0e313a22b39134d1c..a6e90580422596be5cf2039747474cc4627e5f8b 100644
--- a/briar-android/src/main/res/values-uk/strings.xml
+++ b/briar-android/src/main/res/values-uk/strings.xml
@@ -400,14 +400,12 @@
Імпортувати
Введіть URL-посилання RSS-стрічки
Нам шкода! Виникла помилка під час імпорту вашої стрічки.
- Kерувати RSS-стрічками
Імпортовано:
Автор:
Востаннє оновлювалося:
Видалити стрічку
Ви впевнені, що хочете видалити цю стрічку?\n\nДописи буде видалено з вашого пристрою, але не з пристроїв інших осіб.\n\nБудь-хто з контактів, з якими ви поділилися цією стрічкою, можуть припинити отримувати оноволення.
Вилучити
- Ця стрічка не може бути видалена!
Немає RSS-стрічок до відображення\n\nНатисніть на символ \"+\", щоб імпортувати стрічку
Під час завантаження ваших стрічок виникла проблема. Будь ласка, спробуйте пізніше.
diff --git a/briar-android/src/main/res/values-zh-rCN/strings.xml b/briar-android/src/main/res/values-zh-rCN/strings.xml
index 20507e7c11802279a1e6163857442922881ca6cd..e54ebef6a7f6ae627f52f57e6fee26551d96c98f 100644
--- a/briar-android/src/main/res/values-zh-rCN/strings.xml
+++ b/briar-android/src/main/res/values-zh-rCN/strings.xml
@@ -444,14 +444,12 @@
导入
输入 RSS 订阅源链接
抱歉!导入订阅源时发生错误。
- 管理 RSS 订阅源
已导入:
作者:
最后更新于:
删除订阅源
确认要删除该订阅源吗?\n\n博文将从您的设备上移除,但仍将存在于其他人的设备。\n\n那些经过您的分享而订阅该源的联系人可能不会再收到更新。
删除
- 该订阅源无法被删除!
尚无订阅源可供显示\n\n轻按 + 号导入一个订阅源
加载订阅源时出错。请稍候再试。
diff --git a/briar-android/src/main/res/values-zh-rTW/strings.xml b/briar-android/src/main/res/values-zh-rTW/strings.xml
index e511457dc8dad8ead3120a45845d15da3a163494..4a68d8821e14dafd6d52bb533fa8ae368f290ca0 100644
--- a/briar-android/src/main/res/values-zh-rTW/strings.xml
+++ b/briar-android/src/main/res/values-zh-rTW/strings.xml
@@ -362,14 +362,12 @@
導入
輸入 RSS 訂閱源鏈接
抱歉!導入訂閱源時發生錯誤。
- 管理 RSS 訂閱源
已導入:
作者:
最後更新於:
刪除訂閱源
確認要刪除該訂閱源嗎?\n\n博文將從您的裝置上移除,但仍將存在於其他人的裝置。\n\n那些經過您的分享而訂閱該源的聯絡人可能不會再收到更新。
刪除
- 無法刪除這訂閱源!
尚無訂閱源可供顯示\n\n輕按 + 號導入訂閱源
加載訂閱源時出錯。請稍候再試。
diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml
index 5d0e5c0ece195f3207a5aa9dd07e9fecaa533eb8..42af8d838fc5cb7885b536418866cebf9362219c 100644
--- a/briar-android/src/main/res/values/strings.xml
+++ b/briar-android/src/main/res/values/strings.xml
@@ -486,14 +486,14 @@
Import
Enter the URL of the RSS feed
We are sorry! There was an error importing your feed.
- Manage RSS Feeds
+ That feed is already imported.
+ RSS Feeds
Imported:
Author:
Last Updated:
Remove Feed
Are you sure that you want to remove this feed?\n\nPosts will be removed from your device but not from other people\'s devices.\n\nAny contacts you\'ve shared this feed with might stop receiving updates.
Remove
- The feed could not be deleted!
No RSS feeds to show\n\nTap the + icon to import a feed
There was a problem loading your feeds. Please try again later.
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/feed/Feed.java b/briar-api/src/main/java/org/briarproject/briar/api/feed/Feed.java
index 9be4387eafccb4fd4106ccbf087d1dc9fb5d59a0..ef747723d68894752c796c296e71d17bd8a3b19c 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/feed/Feed.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/feed/Feed.java
@@ -10,7 +10,7 @@ import javax.annotation.concurrent.Immutable;
@Immutable
@NotNullByDefault
-public class Feed {
+public class Feed implements Comparable {
private final String url;
private final Blog blog;
@@ -94,4 +94,13 @@ public class Feed {
return false;
}
+ @Override
+ public int compareTo(Feed o) {
+ if (this == o) return 0;
+ long aTime = getAdded(), bTime = o.getAdded();
+ if (aTime > bTime) return -1;
+ if (aTime < bTime) return 1;
+ return 0;
+ }
+
}
diff --git a/briar-api/src/main/java/org/briarproject/briar/api/feed/FeedManager.java b/briar-api/src/main/java/org/briarproject/briar/api/feed/FeedManager.java
index 98adcea29e040f1c73d03ec8e7b6ad8994bf9e53..f0fcf5cd383910587936006dcdb7dabe77542d70 100644
--- a/briar-api/src/main/java/org/briarproject/briar/api/feed/FeedManager.java
+++ b/briar-api/src/main/java/org/briarproject/briar/api/feed/FeedManager.java
@@ -1,6 +1,7 @@
package org.briarproject.briar.api.feed;
import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Transaction;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.ClientId;
@@ -23,7 +24,7 @@ public interface FeedManager {
/**
* Adds an RSS feed as a new dedicated blog.
*/
- void addFeed(String url) throws DbException, IOException;
+ Feed addFeed(String url) throws DbException, IOException;
/**
* Removes an RSS feed.
@@ -35,4 +36,8 @@ public interface FeedManager {
*/
List getFeeds() throws DbException;
+ /**
+ * Returns a list of all added RSS feeds
+ */
+ List getFeeds(Transaction txn) throws DbException;
}
diff --git a/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java
index b2ac62c83805126cfe0a950d71350c23e155ad03..b694908a20a57aed85fb1d14159d7ea1615eea74 100644
--- a/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java
@@ -166,7 +166,7 @@ class FeedManagerImpl implements FeedManager, EventListener, OpenDatabaseHook,
}
@Override
- public void addFeed(String url) throws DbException, IOException {
+ public Feed addFeed(String url) throws DbException, IOException {
// fetch syndication feed to get its metadata
SyndFeed f = fetchSyndFeed(url);
@@ -198,6 +198,8 @@ class FeedManagerImpl implements FeedManager, EventListener, OpenDatabaseHook,
} finally {
db.endTransaction(txn);
}
+
+ return updatedFeed;
}
@Override
@@ -232,18 +234,11 @@ class FeedManagerImpl implements FeedManager, EventListener, OpenDatabaseHook,
@Override
public List getFeeds() throws DbException {
- List feeds;
- Transaction txn = db.startTransaction(true);
- try {
- feeds = getFeeds(txn);
- db.commitTransaction(txn);
- } finally {
- db.endTransaction(txn);
- }
- return feeds;
+ return db.transactionWithResult(true, this::getFeeds);
}
- private List getFeeds(Transaction txn) throws DbException {
+ @Override
+ public List getFeeds(Transaction txn) throws DbException {
List feeds = new ArrayList<>();
Group g = getLocalGroup();
try {
diff --git a/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java
index 42bc69ef82c5a991bbaa06552080885dc9d37bf4..fb94c9b82a10ccd3db009221ba32cfa605e4b276 100644
--- a/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java
+++ b/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java
@@ -17,6 +17,7 @@ import org.briarproject.bramble.api.sync.Message;
import org.briarproject.bramble.api.system.Clock;
import org.briarproject.bramble.api.system.TaskScheduler;
import org.briarproject.bramble.test.BrambleMockTestCase;
+import org.briarproject.bramble.test.DbExpectations;
import org.briarproject.bramble.test.ImmediateExecutor;
import org.briarproject.briar.api.blog.Blog;
import org.briarproject.briar.api.blog.BlogManager;
@@ -145,17 +146,14 @@ public class FeedManagerImplTest extends BrambleMockTestCase {
BdfDictionary feedsDict =
BdfDictionary.of(new BdfEntry(KEY_FEEDS, feedList));
expectGetLocalGroup();
- context.checking(new Expectations() {{
- oneOf(db).startTransaction(true);
- will(returnValue(txn));
+ context.checking(new DbExpectations() {{
+ oneOf(db).transactionWithResult(with(true), withDbCallable(txn));
oneOf(clientHelper).getGroupMetadataAsDictionary(txn, localGroupId);
will(returnValue(feedsDict));
if (feedList.size() == 1) {
oneOf(feedFactory).createFeed(feedDict);
will(returnValue(feed));
}
- oneOf(db).commitTransaction(txn);
- oneOf(db).endTransaction(txn);
}});
}