Skip to content

Commit

Permalink
Make db querries from ListActivity on background thread
Browse files Browse the repository at this point in the history
Signed-off-by: Arka Prava Basu <[email protected]>
  • Loading branch information
archie94 committed Sep 2, 2018
1 parent 8161171 commit 762f06c
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 62 deletions.
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -148,4 +148,6 @@ dependencies {
// Room
implementation "android.arch.persistence.room:runtime:1.1.1"
kapt "android.arch.persistence.room:compiler:1.1.1"
implementation "android.arch.lifecycle:runtime:1.1.1"
implementation "android.arch.lifecycle:extensions:1.1.1"
}
112 changes: 55 additions & 57 deletions src/main/java/org/havenapp/main/ListActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package org.havenapp.main;

import android.annotation.SuppressLint;
import android.arch.lifecycle.Observer;
import android.content.Intent;
import android.database.sqlite.SQLiteException;
import android.graphics.Color;
Expand All @@ -26,6 +27,7 @@
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.content.ContextCompat;
Expand Down Expand Up @@ -77,6 +79,21 @@ public class ListActivity extends AppCompatActivity {

private Handler handler = new Handler();

private Observer<List<Event>> eventListObserver = events -> {
if (events != null) {
setEventListToRecyclerView(events);
}
};

private Observer<Integer> eventCountObserver = count -> {
if (count != null && count > events.size()) {
fetchEventList();
showNonEmptyState();
} else if (count != null && count == 0) {
showEmptyState();
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Expand Down Expand Up @@ -150,34 +167,53 @@ public void onClick(View v) {
showOnboarding();
}

try {
events = HavenEventDB.getDatabase(this).getEventDAO().getAllEventDesc();
initializeRecyclerViewComponents();

if (events.size() > 0) {
findViewById(R.id.empty_view).setVisibility(View.GONE);
}
fetchEventList();
}

adapter = new EventAdapter(events, resourceManager);
recyclerView.setVisibility(View.VISIBLE);
recyclerView.setAdapter(adapter);
private void initializeRecyclerViewComponents() {
adapter = new EventAdapter(events, resourceManager);
recyclerView.setVisibility(View.VISIBLE);
recyclerView.setAdapter(adapter);

adapter.SetOnItemClickListener((view, position) -> {

adapter.SetOnItemClickListener(new EventAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Intent i = new Intent(ListActivity.this, EventActivity.class);
i.putExtra("eventid", events.get(position).getId());
modifyPos = position;

Intent i = new Intent(ListActivity.this, EventActivity.class);
i.putExtra("eventid", events.get(position).getId());
modifyPos = position;
startActivity(i);
});
}

startActivity(i);
}
});
private void setEventListToRecyclerView(@NonNull List<Event> events) {
this.events = events;

if (events.size() > 0) {
findViewById(R.id.empty_view).setVisibility(View.GONE);
}

adapter.setEvents(events);
}

private void fetchEventList() {
try {
HavenEventDB.getDatabase(this).getEventDAO().getAllEventDesc()
.observe(this, eventListObserver);
} catch (SQLiteException sqe) {
Log.d(getClass().getName(), "database not yet initiatied", sqe);
}
}

private void showEmptyState() {
recyclerView.setVisibility(View.GONE);
findViewById(R.id.empty_view).setVisibility(View.VISIBLE);
}

private void showNonEmptyState() {
recyclerView.setVisibility(View.VISIBLE);
findViewById(R.id.empty_view).setVisibility(View.GONE);
}

private void deleteEvent (final Event event, final int position)
Expand Down Expand Up @@ -243,50 +279,12 @@ protected void onResume() {
super.onResume();

resourceManager = new ResourceManager(this);
final long newCount = HavenEventDB.getDatabase(this).getEventDAO().count();

if (newCount > events.size()) {
events = HavenEventDB.getDatabase(this).getEventDAO().getAllEventDesc();
adapter = new EventAdapter(events, resourceManager);
recyclerView.setAdapter(adapter);

adapter.SetOnItemClickListener(new EventAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {

Intent i = new Intent(ListActivity.this, EventActivity.class);
i.putExtra("eventid", events.get(position).getId());
modifyPos = position;

startActivity(i);
}
});
/**
// Just load the last added note (new)
Event event = Event.last(Event.class);
events.add(0,event);
adapter.notifyItemInserted(0);
adapter.notifyDataSetChanged();
initialCount = newCount;
**/

recyclerView.setVisibility(View.VISIBLE);
findViewById(R.id.empty_view).setVisibility(View.GONE);
}
else if (newCount == 0)
{
recyclerView.setVisibility(View.GONE);
findViewById(R.id.empty_view).setVisibility(View.VISIBLE);
}
HavenEventDB.getDatabase(this).getEventDAO().count().observe(this, eventCountObserver);

if (modifyPos != -1) {
//Event.set(modifyPos, Event.listAll(Event.class).get(modifyPos));
adapter.notifyItemChanged(modifyPos);
}


}

@SuppressLint("SimpleDateFormat")
Expand Down Expand Up @@ -396,4 +394,4 @@ else if (!TextUtils.isEmpty(preferences.getSmsNumber())) {

}
}
}
}
5 changes: 3 additions & 2 deletions src/main/java/org/havenapp/main/dao/EventDAO.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.havenapp.main.dao

import android.arch.lifecycle.LiveData
import android.arch.persistence.room.*
import org.havenapp.main.model.Event

Expand All @@ -25,8 +26,8 @@ interface EventDAO {
fun getAllEvent() : List<Event>

@Query("SELECT * FROM EVENT ORDER BY ID DESC")
fun getAllEventDesc() : List<Event>
fun getAllEventDesc() : LiveData<List<Event>>

@Query("SELECT COUNT(*) FROM EVENT")
fun count() : Int
fun count() : LiveData<Int>
}
4 changes: 2 additions & 2 deletions src/main/java/org/havenapp/main/dao/EventTriggerDAO.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,5 @@ interface EventTriggerDAO {
fun getEventTriggerList(eventId: Long?) : MutableList<EventTrigger>

@Query("SELECT * FROM EVENT_TRIGGER")
fun getAllEventTriggers() : MutableList<EventTrigger>
}
fun getAllEventTriggers() : MutableList<EventTrigger> // todo remove this for now
}
3 changes: 2 additions & 1 deletion src/main/java/org/havenapp/main/ui/EventAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class EventAdapter extends RecyclerView.Adapter<EventAdapter.EventVH> {

private OnItemClickListener clickListener;

public EventAdapter(List<Event> events, @NonNull IResourceManager resourceManager) {
public EventAdapter(@NonNull List<Event> events, @NonNull IResourceManager resourceManager) {
this.events = events;
this.resourceManager = resourceManager;
}
Expand Down Expand Up @@ -83,5 +83,6 @@ public void SetOnItemClickListener(final OnItemClickListener itemClickListener)

public void setEvents(List<Event> events) {
this.events = events;
notifyDataSetChanged();
}
}

0 comments on commit 762f06c

Please sign in to comment.