Skip to content

Commit

Permalink
Insertion and Deletion of Event triggers on a background thread
Browse files Browse the repository at this point in the history
- need to have regular lookups to remove deleted event trigger files
  from storage.

Signed-off-by: Arka Prava Basu <[email protected]>
  • Loading branch information
archie94 committed Sep 9, 2018
1 parent 0fe3478 commit 7ea2fea
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 54 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.havenapp.main.database.async

import android.os.AsyncTask
import org.havenapp.main.HavenApp
import org.havenapp.main.model.EventTrigger

/**
* Created by Arka Prava Basu <[email protected]> on 8/9/18.
*/
class EventTriggerDeleteAsync(private val callback: DeleteCallback)
: AsyncTask<EventTrigger, Unit, Unit>() {
override fun doInBackground(vararg params: EventTrigger) {
HavenApp.dataBaseInstance.getEventTriggerDAO().delete(params.get(0))
// todo delete file here?
}

override fun onPostExecute(result: Unit?) {
callback.onEventTriggerDeleted()
}

interface DeleteCallback {
fun onEventTriggerDeleted()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.havenapp.main.database.async

import android.os.AsyncTask
import org.havenapp.main.HavenApp
import org.havenapp.main.model.EventTrigger

/**
* Created by Arka Prava Basu <[email protected]> on 8/9/18.
*/
class EventTriggerInsertAsync(private val callback: InsertCallback)
: AsyncTask<EventTrigger, Unit, Long>() {
override fun doInBackground(vararg params: EventTrigger): Long {
return HavenApp.dataBaseInstance.getEventTriggerDAO().insert(params.get(0))
}

override fun onPostExecute(result: Long) {
callback.onEventTriggerInserted(result)
}

interface InsertCallback {
fun onEventTriggerInserted(eventTriggerId: Long)
}
}
14 changes: 0 additions & 14 deletions src/main/java/org/havenapp/main/model/Event.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.havenapp.main.model

import android.arch.lifecycle.LiveData
import android.arch.lifecycle.Transformations
import android.arch.persistence.room.ColumnInfo
import android.arch.persistence.room.Entity
import android.arch.persistence.room.Ignore
Expand Down Expand Up @@ -46,18 +44,6 @@ class Event {
return mEventTriggers
}

/**
* Perform a db lookup for event triggers corresponding to this event.
* Unlike [getEventTriggers] this method performs a non blocking db lookup and
* returns a lifecycle aware data holder for list of [EventTrigger]s
*/
fun getEventTriggersAsync(): LiveData<MutableList<EventTrigger>> {
return Transformations.map(HavenApp.dataBaseInstance.getEventTriggerDAO().getEventTriggerListAsync(id)) {
mEventTriggers = it
it
}
}

fun getEventTriggerCount(): Int {
if (mEventTriggers.size == 0) {
return getEventTriggers().size
Expand Down
52 changes: 12 additions & 40 deletions src/main/java/org/havenapp/main/ui/EventActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.StrictMode;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
Expand All @@ -17,12 +16,13 @@
import android.support.v7.widget.helper.ItemTouchHelper;
import android.text.TextUtils;
import android.view.MenuItem;
import android.view.View;

import com.stfalcon.frescoimageviewer.ImageViewer;

import org.havenapp.main.R;
import org.havenapp.main.database.HavenEventDB;
import org.havenapp.main.database.async.EventTriggerDeleteAsync;
import org.havenapp.main.database.async.EventTriggerInsertAsync;
import org.havenapp.main.model.Event;
import org.havenapp.main.model.EventTrigger;
import org.havenapp.main.resources.IResourceManager;
Expand All @@ -38,7 +38,6 @@ public class EventActivity extends AppCompatActivity implements EventTriggerAdap
private RecyclerView mRecyclerView;
private Event mEvent;
private List<EventTrigger> eventTriggerList = new ArrayList<>();
private Handler mHandler = new Handler();
private EventTriggerAdapter mAdapter;

private ArrayList<Uri> eventTriggerImagePaths;
Expand Down Expand Up @@ -78,6 +77,9 @@ protected void onCreate(Bundle savedInstanceState) {
HavenEventDB.getDatabase(this).getEventDAO().findByIdAsync(eventId)
.observe(this, eventObserver);

HavenEventDB.getDatabase(this).getEventTriggerDAO().getEventTriggerListAsync(eventId)
.observe(this, eventTriggerListObserver);

FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(view -> shareEvent());

Expand All @@ -98,12 +100,10 @@ public boolean onOptionsItemSelected(MenuItem item) {
}

/**
* On event fetched update {@link #mEvent} and fetch corresponding event triggers,
* set Activity title
* On event fetched update {@link #mEvent} and set Activity title
*/
private void onEventFetched(@NonNull Event event) {
mEvent = event;
mEvent.getEventTriggersAsync().observe(this, eventTriggerListObserver);
setTitle(mEvent.getMStartTime().toLocaleString());
}

Expand Down Expand Up @@ -158,41 +158,13 @@ public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {

private void deleteEventTrigger (final EventTrigger eventTrigger, final int position)
{
new EventTriggerDeleteAsync(() -> onEventDeleted(eventTrigger)).execute(eventTrigger);
}

final Runnable runnableDelete = new Runnable ()
{
public void run ()
{

if (eventTrigger.getMPath() != null) {
new File(eventTrigger.getMPath()).delete();
}
HavenEventDB.getDatabase(EventActivity.this)
.getEventTriggerDAO().delete(eventTrigger);

}
};

mHandler.postDelayed(runnableDelete,3000);

eventTriggerList.remove(position);
mAdapter.notifyItemRemoved(position);

HavenEventDB.getDatabase(EventActivity.this)
.getEventTriggerDAO().delete(eventTrigger);

Snackbar.make(mRecyclerView, "Event Trigger deleted", Snackbar.LENGTH_SHORT)
.setAction("UNDO", new View.OnClickListener() {
@Override
public void onClick(View v) {
mHandler.removeCallbacks(runnableDelete);
long eventTriggerId = HavenEventDB.getDatabase(EventActivity.this)
.getEventTriggerDAO().insert(eventTrigger);
eventTrigger.setId(eventTriggerId);
eventTriggerList.add(position, eventTrigger);
mAdapter.notifyItemInserted(position);
}
})
private void onEventDeleted(EventTrigger eventTrigger) {
Snackbar.make(mRecyclerView, R.string.event_trigger_deleted, Snackbar.LENGTH_SHORT)
.setAction(R.string.undo, v -> new EventTriggerInsertAsync(eventTrigger::setId)
.execute(eventTrigger))
.show();
}

Expand Down
1 change: 1 addition & 0 deletions src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -158,5 +158,6 @@
<string name="title_activity_video_player">VideoPlayerActivity</string>
<string name="config_storage_path">Storage Folder Path</string>
<string name="config_storage_page_hint">Where captured media is stored</string>
<string name="event_trigger_deleted">Event Trigger deleted</string>

</resources>

0 comments on commit 7ea2fea

Please sign in to comment.