diff --git a/app/src/main/java/com/readrops/app/LocalFeedRepository.java b/app/src/main/java/com/readrops/app/LocalFeedRepository.java index 21eb8f56..9499ec1b 100644 --- a/app/src/main/java/com/readrops/app/LocalFeedRepository.java +++ b/app/src/main/java/com/readrops/app/LocalFeedRepository.java @@ -3,6 +3,8 @@ package com.readrops.app; import android.app.Application; import android.arch.lifecycle.LiveData; import android.os.Handler; +import android.os.Looper; +import android.util.Log; import com.readrops.app.database.Database; import com.readrops.app.database.entities.Feed; @@ -22,6 +24,8 @@ import static com.readrops.readropslibrary.localfeed.RSSNetwork.RSSType.RSS_JSON public class LocalFeedRepository extends ARepository implements QueryCallback { + public static final String TAG = LocalFeedRepository.class.getSimpleName(); + private LiveData> items; public LocalFeedRepository(Application application) { @@ -37,19 +41,24 @@ public class LocalFeedRepository extends ARepository implements QueryCallback { @Override public void sync() { executor.execute(() -> { + Log.d(TAG, "starting background thread"); RSSNetwork request = new RSSNetwork(); + Log.d(TAG, "getting feed list"); List feeds = database.feedDao().getAllFeeds(); for (Feed feed : feeds) { try { + Log.d(TAG, "entering RSSNetwork"); request.request(feed.getUrl(), this); } catch (Exception e) { failureCallBackInMainThread(e); } } - callback.onSuccess(); + // we go back to the main thread + Handler handler = new Handler(Looper.getMainLooper()); + handler.post(() -> callback.onSuccess()); }); } @@ -100,8 +109,10 @@ public class LocalFeedRepository extends ARepository implements QueryCallback { List dbItems = Item.itemsFromRSS(items, feed); for (Item dbItem : dbItems) { - if (!Boolean.valueOf(database.itemDao().guidExist(dbItem.getGuid()))) + if (!Boolean.valueOf(database.itemDao().guidExist(dbItem.getGuid()))) { database.itemDao().insert(dbItem); + Log.d(TAG, "adding " + dbItem.getTitle()); + } } } diff --git a/app/src/main/java/com/readrops/app/MainActivity.java b/app/src/main/java/com/readrops/app/MainActivity.java index 6da77b57..9a600554 100644 --- a/app/src/main/java/com/readrops/app/MainActivity.java +++ b/app/src/main/java/com/readrops/app/MainActivity.java @@ -1,42 +1,25 @@ package com.readrops.app; import android.arch.lifecycle.ViewModelProvider; -import android.support.v7.app.AppCompatActivity; import android.os.Bundle; +import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import com.readrops.app.database.entities.Item; -import com.readrops.readropslibrary.PageParser; -import com.readrops.readropslibrary.QueryCallback; -import com.readrops.readropslibrary.Utils.Utils; -import com.readrops.readropslibrary.localfeed.AItem; -import com.readrops.readropslibrary.localfeed.RSSNetwork; -import com.readrops.readropslibrary.localfeed.atom.ATOMEntry; -import com.readrops.readropslibrary.localfeed.json.JSONFeed; -import com.readrops.readropslibrary.localfeed.json.JSONItem; -import com.readrops.readropslibrary.localfeed.rss.RSSFeed; -import com.readrops.readropslibrary.localfeed.rss.RSSItem; -import org.simpleframework.xml.Serializer; -import org.simpleframework.xml.core.Persister; - -import java.io.IOException; -import java.io.InputStream; import java.util.List; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.Response; +public class MainActivity extends AppCompatActivity implements SimpleCallback, SwipeRefreshLayout.OnRefreshListener { -public class MainActivity extends AppCompatActivity { - - String url = "https://framablog.org/"; + public static final String TAG = MainActivity.class.getSimpleName(); private RecyclerView recyclerView; private MainAdapter adapter; + private SwipeRefreshLayout refreshLayout; private List itemList; @@ -47,25 +30,16 @@ public class MainActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - /*Thread thread = new Thread(() -> { - String imageUrl = PageParser.getOGImageLink("https://usbeketrica.com/galerie/dennis-osadebe-portrait-of-a-bright-generation"); - Log.d("", ""); - - runOnUiThread(() -> { - getItems(); - }); - }); - - thread.start();*/ - viewModel = ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication()).create(MainViewModel.class); + viewModel.setSimpleCallback(this); viewModel.getItems().observe(this, (List items) -> { this.itemList = items; initRecyclerView(); }); - viewModel.sync(); + refreshLayout = findViewById(R.id.swipe_refresh_layout); + refreshLayout.setOnRefreshListener(this); } private void initRecyclerView() { @@ -79,4 +53,20 @@ public class MainActivity extends AppCompatActivity { recyclerView.setAdapter(adapter); } + + @Override + public void onSuccess() { + refreshLayout.setRefreshing(false); + } + + @Override + public void onFailure(Exception ex) { + + } + + @Override + public void onRefresh() { + Log.d(TAG, "syncing started"); + viewModel.sync(); + } } diff --git a/app/src/main/java/com/readrops/app/MainViewModel.java b/app/src/main/java/com/readrops/app/MainViewModel.java index 95bd996e..a2780cc3 100644 --- a/app/src/main/java/com/readrops/app/MainViewModel.java +++ b/app/src/main/java/com/readrops/app/MainViewModel.java @@ -2,14 +2,16 @@ package com.readrops.app; import android.app.Application; import android.arch.lifecycle.AndroidViewModel; +import android.arch.lifecycle.LifecycleOwner; import android.arch.lifecycle.LiveData; +import android.arch.lifecycle.Observer; import android.support.annotation.NonNull; import com.readrops.app.database.entities.Item; import java.util.List; -public class MainViewModel extends AndroidViewModel implements SimpleCallback { +public class MainViewModel extends AndroidViewModel { private LiveData> items; private LocalFeedRepository repository; @@ -18,7 +20,7 @@ public class MainViewModel extends AndroidViewModel implements SimpleCallback { super(application); repository = new LocalFeedRepository(application); - repository.setCallback(this); + items = repository.getItems(); } @@ -26,18 +28,11 @@ public class MainViewModel extends AndroidViewModel implements SimpleCallback { return items; } + public void setSimpleCallback(SimpleCallback simpleCallback) { + repository.setCallback(simpleCallback); + } + public void sync() { repository.sync(); } - - - @Override - public void onSuccess() { - - } - - @Override - public void onFailure(Exception ex) { - - } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index ab820059..166016e6 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,10 +1,11 @@ - + tools:context=".MainActivity" + android:id="@+id/swipe_refresh_layout"> - \ No newline at end of file + \ No newline at end of file diff --git a/readropslibrary/src/main/java/com/readrops/readropslibrary/localfeed/RSSNetwork.java b/readropslibrary/src/main/java/com/readrops/readropslibrary/localfeed/RSSNetwork.java index 236d7e14..ca986f89 100644 --- a/readropslibrary/src/main/java/com/readrops/readropslibrary/localfeed/RSSNetwork.java +++ b/readropslibrary/src/main/java/com/readrops/readropslibrary/localfeed/RSSNetwork.java @@ -1,5 +1,7 @@ package com.readrops.readropslibrary.localfeed; +import android.util.Log; + import com.google.gson.Gson; import com.readrops.readropslibrary.QueryCallback; import com.readrops.readropslibrary.Utils.Utils; @@ -19,6 +21,8 @@ import okhttp3.Response; public class RSSNetwork { + public static final String TAG = RSSNetwork.class.getName(); + /** * Request the url given in parameter. * This method is synchronous, it has to be called from another thread than the main one. @@ -29,6 +33,7 @@ public class RSSNetwork { public void request(String url, final QueryCallback callback) throws Exception { OkHttpClient okHttpClient = new OkHttpClient(); + Log.d(TAG, "starting request"); Request request = new Request.Builder().url(url).build(); Response response = okHttpClient.newCall(request).execute();