mirror of
https://github.com/readrops/Readrops.git
synced 2025-02-10 00:40:46 +01:00
Add feed insertion with multi selection in add fed activity
This commit is contained in:
parent
78f2b65a30
commit
bc263a05f8
@ -1,5 +1,8 @@
|
||||
package com.readrops.app.activities;
|
||||
|
||||
import android.arch.lifecycle.AndroidViewModel;
|
||||
import android.arch.lifecycle.ViewModelProvider;
|
||||
import android.arch.lifecycle.ViewModelProviders;
|
||||
import android.support.design.widget.TextInputEditText;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.os.Bundle;
|
||||
@ -7,29 +10,32 @@ import android.support.v7.widget.DividerItemDecoration;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.Patterns;
|
||||
import android.util.SparseBooleanArray;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.mikepenz.fastadapter.FastAdapter;
|
||||
import com.mikepenz.fastadapter.IAdapter;
|
||||
import com.mikepenz.fastadapter.adapters.ItemAdapter;
|
||||
import com.mikepenz.fastadapter.listeners.OnClickListener;
|
||||
import com.readrops.app.R;
|
||||
import com.readrops.app.utils.HtmlParser;
|
||||
import com.readrops.app.utils.Utils;
|
||||
import com.readrops.app.utils.ParsingResult;
|
||||
import com.readrops.app.viewmodels.AddFeedsViewModel;
|
||||
import com.readrops.readropslibrary.localfeed.RSSNetwork;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import io.reactivex.Scheduler;
|
||||
import io.reactivex.Single;
|
||||
import io.reactivex.SingleObserver;
|
||||
import io.reactivex.SingleOnSubscribe;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.observers.DisposableCompletableObserver;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
public class AddFeedActivity extends AppCompatActivity implements View.OnClickListener {
|
||||
@ -41,7 +47,7 @@ public class AddFeedActivity extends AppCompatActivity implements View.OnClickLi
|
||||
private RecyclerView recyclerView;
|
||||
|
||||
private ItemAdapter<ParsingResult> itemAdapter;
|
||||
|
||||
private AddFeedsViewModel viewModel;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@ -57,10 +63,20 @@ public class AddFeedActivity extends AppCompatActivity implements View.OnClickLi
|
||||
load.setOnClickListener(this);
|
||||
validate.setOnClickListener(this);
|
||||
|
||||
viewModel = ViewModelProviders.of(this).get(AddFeedsViewModel.class);
|
||||
|
||||
itemAdapter = new ItemAdapter<>();
|
||||
FastAdapter<ParsingResult> fastAdapter = FastAdapter.with(itemAdapter);
|
||||
fastAdapter.withSelectable(true);
|
||||
fastAdapter.withOnClickListener((v, adapter, item, position) -> {
|
||||
if (item.isChecked()) {
|
||||
item.setChecked(false);
|
||||
fastAdapter.notifyAdapterItemChanged(position);
|
||||
} else {
|
||||
item.setChecked(true);
|
||||
fastAdapter.notifyAdapterItemChanged(position);
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
@ -81,7 +97,7 @@ public class AddFeedActivity extends AppCompatActivity implements View.OnClickLi
|
||||
}
|
||||
break;
|
||||
case R.id.add_feed_ok:
|
||||
exit();
|
||||
insertFeeds();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -99,8 +115,27 @@ public class AddFeedActivity extends AppCompatActivity implements View.OnClickLi
|
||||
return true;
|
||||
}
|
||||
|
||||
private void exit() {
|
||||
private void insertFeeds() {
|
||||
List<ParsingResult> feedsToInsert = new ArrayList<>();
|
||||
for (ParsingResult result : itemAdapter.getAdapterItems()) {
|
||||
if (result.isChecked())
|
||||
feedsToInsert.add(result);
|
||||
}
|
||||
|
||||
viewModel.addFeeds(feedsToInsert)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new DisposableCompletableObserver() {
|
||||
@Override
|
||||
public void onComplete() {
|
||||
Toast.makeText(getApplication(), "feeds inserted", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
Toast.makeText(getApplication(), "error on feed insertion", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void loadFeed() {
|
||||
|
@ -11,6 +11,7 @@ import com.readrops.app.database.entities.Feed;
|
||||
import com.readrops.app.database.entities.Folder;
|
||||
import com.readrops.app.utils.ParsingResult;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
@ -36,6 +37,8 @@ public abstract class ARepository {
|
||||
|
||||
public abstract void addFeed(ParsingResult result);
|
||||
|
||||
public abstract Completable addFeeds(List<ParsingResult> results);
|
||||
|
||||
public abstract void updateFeed(Feed feed);
|
||||
|
||||
public abstract void updateFeedWithFolder(FeedWithFolder feedWithFolder);
|
||||
|
@ -89,6 +89,19 @@ public class LocalFeedRepository extends ARepository implements QueryCallback {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public Completable addFeeds(List<ParsingResult> results) {
|
||||
return Completable.create(emitter -> {
|
||||
for (ParsingResult result : results) {
|
||||
RSSNetwork rssNet = new RSSNetwork();
|
||||
rssNet.setCallback(this);
|
||||
rssNet.requestUrl(result.getUrl(), new HashMap<>());
|
||||
}
|
||||
|
||||
emitter.onComplete();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateFeed(Feed feed) {
|
||||
executor.execute(() -> {
|
||||
|
@ -2,6 +2,7 @@ package com.readrops.app.utils;
|
||||
|
||||
import android.support.annotation.NonNull;
|
||||
import android.view.View;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.mikepenz.fastadapter.FastAdapter;
|
||||
@ -16,6 +17,8 @@ public class ParsingResult extends AbstractItem<ParsingResult, ParsingResult.Par
|
||||
|
||||
private String label;
|
||||
|
||||
private boolean checked;
|
||||
|
||||
public ParsingResult(String url, String label) {
|
||||
this.url = url;
|
||||
this.label = label;
|
||||
@ -37,6 +40,14 @@ public class ParsingResult extends AbstractItem<ParsingResult, ParsingResult.Par
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
public void setChecked(boolean checked) {
|
||||
this.checked = checked;
|
||||
}
|
||||
|
||||
public boolean isChecked() {
|
||||
return checked;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSelectable() {
|
||||
return true;
|
||||
@ -67,18 +78,27 @@ public class ParsingResult extends AbstractItem<ParsingResult, ParsingResult.Par
|
||||
|
||||
private TextView feedLabel;
|
||||
private TextView feedUrl;
|
||||
private CheckBox checkBox;
|
||||
|
||||
public ParsingResultViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
|
||||
feedLabel = itemView.findViewById(R.id.add_feed_item_label);
|
||||
feedUrl = itemView.findViewById(R.id.add_feed_item_url);
|
||||
checkBox = itemView.findViewById(R.id.add_feed_checkbox);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bindView(ParsingResult item, List<Object> payloads) {
|
||||
feedLabel.setText(item.getLabel());
|
||||
if (item.getLabel() != null)
|
||||
feedLabel.setText(item.getLabel());
|
||||
else
|
||||
feedLabel.setVisibility(View.GONE);
|
||||
|
||||
feedUrl.setText(item.getUrl());
|
||||
|
||||
checkBox.setChecked(item.isChecked());
|
||||
checkBox.setClickable(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -0,0 +1,27 @@
|
||||
package com.readrops.app.viewmodels;
|
||||
|
||||
import android.app.Application;
|
||||
import android.arch.lifecycle.AndroidViewModel;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import com.readrops.app.repositories.LocalFeedRepository;
|
||||
import com.readrops.app.utils.ParsingResult;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import io.reactivex.Completable;
|
||||
|
||||
public class AddFeedsViewModel extends AndroidViewModel {
|
||||
|
||||
private LocalFeedRepository repository;
|
||||
|
||||
public AddFeedsViewModel(@NonNull Application application) {
|
||||
super(application);
|
||||
|
||||
repository = new LocalFeedRepository(application);
|
||||
}
|
||||
|
||||
public Completable addFeeds(List<ParsingResult> results) {
|
||||
return repository.addFeeds(results);
|
||||
}
|
||||
}
|
@ -71,7 +71,7 @@
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/add_feed_main_layout"
|
||||
android:enabled="false"/>
|
||||
android:enabled="true"/>
|
||||
|
||||
|
||||
</android.support.constraint.ConstraintLayout>
|
@ -1,35 +1,43 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?android:attr/selectableItemBackground"
|
||||
android:focusable="true"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:padding="6dp">
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/add_feed_checkbox"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/add_feed_item_label"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginBottom="6dp"
|
||||
android:layout_toEndOf="@id/add_feed_checkbox"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="Link description" />
|
||||
tools:text="Link description"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/add_feed_item_url"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_below="@id/add_feed_item_label"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_toEndOf="@id/add_feed_checkbox"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="2"
|
||||
android:minLines="1"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/add_feed_item_label"
|
||||
tools:text="feed url" />
|
||||
|
||||
</android.support.constraint.ConstraintLayout>
|
||||
</RelativeLayout>
|
Loading…
x
Reference in New Issue
Block a user