Get added feeds from add feed activity result to start syncing them when going back to the main activity

This commit is contained in:
Shinokuni 2019-03-12 15:19:21 +01:00
parent 0869631d95
commit 710eb18dc0
5 changed files with 76 additions and 31 deletions

View File

@ -1,6 +1,7 @@
package com.readrops.app.activities;
import android.arch.lifecycle.ViewModelProviders;
import android.content.Intent;
import android.support.design.widget.TextInputEditText;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
@ -40,6 +41,8 @@ public class AddFeedActivity extends AppCompatActivity implements View.OnClickLi
private ItemAdapter<ParsingResult> itemAdapter;
private AddFeedsViewModel viewModel;
private ArrayList<Feed> feedsToUpdate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -76,6 +79,8 @@ public class AddFeedActivity extends AppCompatActivity implements View.OnClickLi
recyclerView.setLayoutManager(layoutManager);
DividerItemDecoration decoration = new DividerItemDecoration(this, ((LinearLayoutManager) layoutManager).getOrientation());
recyclerView.addItemDecoration(decoration);
feedsToUpdate = new ArrayList<>();
}
@Override
@ -124,7 +129,7 @@ public class AddFeedActivity extends AppCompatActivity implements View.OnClickLi
@Override
public void onSuccess(List<Feed> feeds) {
feedsToUpdate.addAll(feeds);
}
@Override
@ -173,6 +178,7 @@ public class AddFeedActivity extends AppCompatActivity implements View.OnClickLi
@Override
public void onBackPressed() {
exit();
finish();
super.onBackPressed();
}
@ -181,10 +187,20 @@ public class AddFeedActivity extends AppCompatActivity implements View.OnClickLi
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
exit();
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
private void exit() {
if (feedsToUpdate.size() > 0) {
Intent intent = new Intent();
intent.putParcelableArrayListExtra("feedIds", feedsToUpdate);
setResult(RESULT_OK, intent);
}
}
}

View File

@ -5,6 +5,7 @@ import android.arch.lifecycle.ViewModelProvider;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.NavigationView;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
@ -26,6 +27,7 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader;
import com.bumptech.glide.util.ViewPreloadSizeProvider;
import com.github.clans.fab.FloatingActionMenu;
import com.readrops.app.database.entities.Feed;
import com.readrops.app.views.AddFeedDialog;
import com.readrops.app.views.MainItemListAdapter;
import com.readrops.app.viewmodels.MainViewModel;
@ -50,6 +52,7 @@ import io.reactivex.schedulers.Schedulers;
public class MainActivity extends AppCompatActivity implements SimpleCallback, SwipeRefreshLayout.OnRefreshListener {
public static final String TAG = MainActivity.class.getSimpleName();
public static final int ADD_FEED_REQUEST = 1;
private RecyclerView recyclerView;
private MainItemListAdapter adapter;
@ -199,10 +202,6 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S
});
}
private void updateList() {
}
@Override
public void onSuccess() {
refreshLayout.setRefreshing(false);
@ -219,7 +218,45 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S
public void onRefresh() {
Log.d(TAG, "syncing started");
viewModel.sync()
sync(null);
}
public void displayAddFeedDialog(View view) {
actionMenu.close(true);
//Dialog dialog = new AddFeedDialog(this, R.layout.add_feed_layout);
//dialog.show();
Intent intent = new Intent(this, AddFeedActivity.class);
startActivityForResult(intent, ADD_FEED_REQUEST);
}
public void addFolder(View view) {
actionMenu.close(true);
Intent intent = new Intent(this, ManageFeedsActivity.class);
startActivity(intent);
}
public void insertNewFeed(ParsingResult result) {
refreshLayout.setRefreshing(true);
viewModel.addFeed(result);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode == ADD_FEED_REQUEST && resultCode == RESULT_OK) {
ArrayList<Feed> feeds = data.getParcelableArrayListExtra("feedIds");
if (feeds != null && feeds.size() > 0) {
refreshLayout.setRefreshing(true);
sync(feeds);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
private void sync(List<Feed> feeds) {
viewModel.sync(feeds)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new DisposableCompletableObserver() {
@ -236,24 +273,4 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S
}
});
}
public void displayAddFeedDialog(View view) {
actionMenu.close(true);
//Dialog dialog = new AddFeedDialog(this, R.layout.add_feed_layout);
//dialog.show();
Intent intent = new Intent(this, AddFeedActivity.class);
startActivity(intent);
}
public void addFolder(View view) {
actionMenu.close(true);
Intent intent = new Intent(this, ManageFeedsActivity.class);
startActivity(intent);
}
public void insertNewFeed(ParsingResult result) {
refreshLayout.setRefreshing(true);
viewModel.addFeed(result);
}
}

View File

@ -27,6 +27,9 @@ public interface FeedDao {
@Query("Delete From Feed Where id = :feedId")
void delete(int feedId);
@Query("Select case When :feedUrl In (Select url from Feed) Then 'true' else 'false' end")
String feedExists(String feedUrl);
@Query("Select count(*) from Feed")
int getFeedCount();

View File

@ -118,7 +118,9 @@ public class LocalFeedRepository extends ARepository implements QueryCallback {
RSSQueryResult queryResult = rssNet.queryUrl(result.getUrl(), new HashMap<>());
if (queryResult != null && queryResult.getException() == null) {
insertedFeeds.add(insertFeed(queryResult.getFeed(), queryResult.getRssType()));
Feed feed = insertFeed(queryResult.getFeed(), queryResult.getRssType());
if (feed != null)
insertedFeeds.add(feed);
}
}
@ -220,9 +222,16 @@ public class LocalFeedRepository extends ARepository implements QueryCallback {
break;
}
setFavIconUtils(dbFeed);
dbFeed.setId((int)(database.feedDao().insert(dbFeed)));
if (Boolean.valueOf(database.feedDao().feedExists(dbFeed.getUrl())))
return null; // feed already inserted
setFavIconUtils(dbFeed);
// we need empty headers to query the feed just after, without any 304 result
dbFeed.setEtag(null);
dbFeed.setLastModified(null);
dbFeed.setId((int)(database.feedDao().insert(dbFeed)));
return dbFeed;
}

View File

@ -36,8 +36,8 @@ public class MainViewModel extends AndroidViewModel {
repository.setCallback(simpleCallback);
}
public Completable sync() {
return repository.sync(null);
public Completable sync(List<Feed> feeds) {
return repository.sync(feeds);
}
public void addFeed(ParsingResult parsingResult) {