This commit is contained in:
pegasko 2024-06-11 01:28:10 +03:00
parent 5f31ce23d0
commit 88bb4ddb8a
9 changed files with 172 additions and 352 deletions

View file

@ -98,7 +98,13 @@ public class DBWrapper extends Wrapper {
"CREATE TABLE IF NOT EXISTS queue_event (" + "CREATE TABLE IF NOT EXISTS queue_event (" +
" queue_id INTEGER," + " queue_id INTEGER," +
" event_id INTEGER" + " event_id INTEGER" +
");" ");",
"CREATE INDEX IF NOT EXISTS queue_event__event_id_tag_id ON queue_event(queue_id, event_id);",
"CREATE INDEX IF NOT EXISTS queue_event__event_id ON queue_event(queue_id);",
"CREATE INDEX IF NOT EXISTS queue_event__tag_id ON queue_event(event_id);"
}; };
private static String DB_PATH = "database.db"; private static String DB_PATH = "database.db";

View file

@ -32,6 +32,7 @@ public class EventImpl implements Event {
private final SQLiteDatabase db; private final SQLiteDatabase db;
private final int id; private final int id;
private Tag[] cachedTags;
protected EventImpl(SQLiteDatabase db, int id) { protected EventImpl(SQLiteDatabase db, int id) {
this.db = db; this.db = db;
@ -46,8 +47,14 @@ public class EventImpl implements Event {
@Override @Override
public long getTimestamp() { public long getTimestamp() {
synchronized (this.db) { synchronized (this.db) {
Cursor cursor = db.query("event", new String[] { "timestamp" }, "id = ?", Cursor cursor = db.query(
new String[] { Integer.toString(this.getId()) }, null, null, null "event",
new String[] { "timestamp" },
"id = ?",
new String[] { Integer.toString(this.getId()) },
null,
null,
null
); );
if (Utils.findResult(cursor)) { if (Utils.findResult(cursor)) {
@ -70,8 +77,14 @@ public class EventImpl implements Event {
@Override @Override
public String getComment() { public String getComment() {
synchronized (this.db) { synchronized (this.db) {
Cursor cursor = db.query("event", new String[] { "comment" }, "id = ?", Cursor cursor = db.query(
new String[] { Integer.toString(this.getId()) }, null, null, null "event",
new String[] { "comment" },
"id = ?",
new String[] { Integer.toString(this.getId()) },
null,
null,
null
); );
if (Utils.findResult(cursor)) { if (Utils.findResult(cursor)) {
@ -107,6 +120,8 @@ public class EventImpl implements Event {
@Override @Override
public void addTag(Tag tag) { public void addTag(Tag tag) {
synchronized (this.db) { synchronized (this.db) {
this.cachedTags = null;
if (tag == null) return; if (tag == null) return;
if (this.hasTag(tag)) return; if (this.hasTag(tag)) return;
@ -125,6 +140,8 @@ public class EventImpl implements Event {
@Override @Override
public void removeTag(Tag tag) { public void removeTag(Tag tag) {
synchronized (this.db) { synchronized (this.db) {
this.cachedTags = null;
if (tag == null) return; if (tag == null) return;
if (!this.hasTag(tag)) return; if (!this.hasTag(tag)) return;
@ -142,6 +159,8 @@ public class EventImpl implements Event {
@Override @Override
public void removeTags() { public void removeTags() {
synchronized (this.db) { synchronized (this.db) {
this.cachedTags = null;
try { try {
db.delete("event_tag", "event_id = ?", new String[] { Integer.toString(this.getId()) }); db.delete("event_tag", "event_id = ?", new String[] { Integer.toString(this.getId()) });
} catch (SQLiteException e) { } catch (SQLiteException e) {
@ -153,8 +172,17 @@ public class EventImpl implements Event {
@Override @Override
public Tag[] getTags() { public Tag[] getTags() {
synchronized (this.db) { synchronized (this.db) {
Cursor cursor = db.query("event_tag", new String[] { "tag_id" }, "event_id = ?", if (this.cachedTags != null)
new String[] { Integer.toString(this.getId()) }, null, null, "tag_id desc" return this.cachedTags;
Cursor cursor = db.query(
"event_tag",
new String[] { "tag_id" },
"event_id = ?",
new String[] { Integer.toString(this.getId()) },
null,
null,
"tag_id desc"
); );
if (cursor == null) { if (cursor == null) {
@ -168,7 +196,7 @@ public class EventImpl implements Event {
tags[index++] = new TagImpl(this.db, cursor.getInt(0)); tags[index++] = new TagImpl(this.db, cursor.getInt(0));
} }
return tags; return this.cachedTags = tags;
} }
} }

View file

@ -72,12 +72,7 @@ public class QueueImpl implements Queue {
synchronized (this.db) { synchronized (this.db) {
ContentValues cv = new ContentValues(); ContentValues cv = new ContentValues();
cv.put("name", name); cv.put("name", name);
db.update( db.update("queue", cv, "id = ?", new String[] { Integer.toString(this.getId()) });
"queue",
cv,
"id = ?",
new String[] { Integer.toString(this.getId()) }
);
} }
} }
@ -102,10 +97,7 @@ public class QueueImpl implements Queue {
int index = 0; int index = 0;
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
events[index++] = new EventImpl( events[index++] = new EventImpl(this.db, cursor.getInt(0));
this.db,
cursor.getInt(0)
);
} }
return events; return events;
@ -125,8 +117,7 @@ public class QueueImpl implements Queue {
null null
); );
if (!Utils.findResult(cursor)) if (!Utils.findResult(cursor)) return 0;
return 0;
return cursor.getInt(0); return cursor.getInt(0);
} }
@ -154,11 +145,9 @@ public class QueueImpl implements Queue {
@Override @Override
public void addEvent(Event event) { public void addEvent(Event event) {
synchronized (this.db) { synchronized (this.db) {
if (event == null) if (event == null) return;
return;
if (this.hasEvent(event)) if (this.hasEvent(event)) return;
return;
try { try {
ContentValues cv = new ContentValues(); ContentValues cv = new ContentValues();
@ -174,11 +163,9 @@ public class QueueImpl implements Queue {
@Override @Override
public void removeEvent(Event event) { public void removeEvent(Event event) {
synchronized (this.db) { synchronized (this.db) {
if (event == null) if (event == null) return;
return;
if (this.hasEvent(event)) if (this.hasEvent(event)) return;
return;
try { try {
db.delete( db.delete(
@ -196,38 +183,7 @@ public class QueueImpl implements Queue {
public TagStat[] getGlobalTags() { public TagStat[] getGlobalTags() {
synchronized (this.db) { synchronized (this.db) {
Cursor cursor = db.rawQuery( Cursor cursor = db.rawQuery(
"select" + "select" + " tag_id,\n" + " count(*) as cnt\n" + "from (\n" + " select\n" + " event_id,\n" + " tag_id\n" + " from (\n" + " select\n" + " event_tag.event_id as event_id,\n" + " event_tag.tag_id as tag_id\n" + " from (\n" + " select\n" + " event_id\n" + " from\n" + " queue_event\n" + " where\n" + " queue_id = ?\n" + " ) as queue_event_temp\n" + " inner join\n" + " event_tag\n" + " on\n" + " (event_tag.event_id = queue_event_temp.event_id)\n" + " )\n" + " group by\n" + " event_id,\n" + " tag_id\n" + ")\n" + "group by\n" + " tag_id\n" + "order by\n" + " cnt desc",
" tag_id,\n" +
" count(*) as cnt\n" +
"from (\n" +
" select\n" +
" event_id,\n" +
" tag_id\n" +
" from (\n" +
" select\n" +
" event_tag.event_id as event_id,\n" +
" event_tag.tag_id as tag_id\n" +
" from (\n" +
" select\n" +
" event_id\n" +
" from\n" +
" queue_event\n" +
" where\n" +
" queue_id = ?\n" +
" ) as queue_event_temp\n" +
" inner join\n" +
" event_tag\n" +
" on\n" +
" (event_tag.event_id = queue_event_temp.event_id)\n" +
" )\n" +
" group by\n" +
" event_id,\n" +
" tag_id\n" +
")\n" +
"group by\n" +
" tag_id\n" +
"order by\n" +
" cnt desc",
new String[] { Integer.toString(this.getId()) } new String[] { Integer.toString(this.getId()) }
); );
@ -242,10 +198,7 @@ public class QueueImpl implements Queue {
TagStat tagStat = new TagStat(); TagStat tagStat = new TagStat();
tags[index++] = tagStat; tags[index++] = tagStat;
tagStat.tag = new TagImpl( tagStat.tag = new TagImpl(this.db, cursor.getInt(0));
this.db,
cursor.getInt(0)
);
tagStat.count = cursor.getInt(1); tagStat.count = cursor.getInt(1);
} }

View file

@ -40,26 +40,19 @@ public class QueueMakerImpl implements QueueMaker {
public Queue getById(int id) { public Queue getById(int id) {
synchronized (this.db) { synchronized (this.db) {
try { try {
Cursor cursor = db.query( Cursor cursor = db.query("queue",
"queue", new String[] { "1" },
new String[] { "1" }, "id = ?",
"id = ?", new String[] { Integer.toString(id) },
new String[] { Integer.toString(id) }, null,
null, null,
null, null
null
); );
if (Utils.findResult(cursor)) return new QueueImpl( if (Utils.findResult(cursor)) return new QueueImpl(this.db, id);
this.db,
id
);
} catch (SQLiteException e) { } catch (SQLiteException e) {
Log.wtf( Log.wtf(TAG, e);
TAG,
e
);
} }
return null; return null;
@ -71,24 +64,11 @@ public class QueueMakerImpl implements QueueMaker {
synchronized (this.db) { synchronized (this.db) {
try { try {
ContentValues cv = new ContentValues(); ContentValues cv = new ContentValues();
cv.put( cv.put("id", (Integer) null);
"id", long rowId = db.insertOrThrow("queue", null, cv);
(Integer) null return new QueueImpl(this.db, (int) rowId);
);
long rowId = db.insertOrThrow(
"queue",
null,
cv
);
return new QueueImpl(
this.db,
(int) rowId
);
} catch (SQLiteException e) { } catch (SQLiteException e) {
Log.wtf( Log.wtf(TAG, e);
TAG,
e
);
} }
return null; return null;
@ -98,15 +78,7 @@ public class QueueMakerImpl implements QueueMaker {
@Override @Override
public Queue[] list() { public Queue[] list() {
synchronized (this.db) { synchronized (this.db) {
Cursor cursor = db.query( Cursor cursor = db.query("queue", new String[] { "id" }, null, null, null, null, null);
"queue",
new String[] { "id" },
null,
null,
null,
null,
null
);
if (cursor == null) { if (cursor == null) {
return new Queue[0]; return new Queue[0];
@ -116,10 +88,7 @@ public class QueueMakerImpl implements QueueMaker {
int index = 0; int index = 0;
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
queues[index++] = new QueueImpl( queues[index++] = new QueueImpl(this.db, cursor.getInt(0));
this.db,
cursor.getInt(0)
);
} }
return queues; return queues;
@ -133,46 +102,25 @@ public class QueueMakerImpl implements QueueMaker {
// Drop events // Drop events
try { try {
for (Event event : queue.getEvents()) { for (Event event : queue.getEvents()) {
db.delete( db.delete("event", "id = ?", new String[] { Integer.toString(event.getId()) });
"event",
"id = ?",
new String[] { Integer.toString(event.getId()) }
);
} }
} catch (SQLiteException e) { } catch (SQLiteException e) {
Log.wtf( Log.wtf(TAG, e);
TAG,
e
);
return; return;
} }
// Drop queue <-> event // Drop queue <-> event
try { try {
db.delete( db.delete("queue_event", "queue_id = ?", new String[] { Integer.toString(queue.getId()) });
"queue_event",
"queue_id = ?",
new String[] { Integer.toString(queue.getId()) }
);
} catch (SQLiteException e) { } catch (SQLiteException e) {
Log.wtf( Log.wtf(TAG, e);
TAG,
e
);
} }
// Drop queue // Drop queue
try { try {
db.delete( db.delete("queue", "id = ?", new String[] { Integer.toString(queue.getId()) });
"queue",
"id = ?",
new String[] { Integer.toString(queue.getId()) }
);
} catch (SQLiteException e) { } catch (SQLiteException e) {
Log.wtf( Log.wtf(TAG, e);
TAG,
e
);
} }
} }
} }

View file

@ -94,33 +94,21 @@ public class EventEditActivity extends AppCompatActivity {
// Get Queue ID from Intent // Get Queue ID from Intent
Bundle extras = getIntent().getExtras(); Bundle extras = getIntent().getExtras();
if (extras == null) { if (extras == null) {
Log.e( Log.e(TAG, "Missing Intent arguments (queue_id)");
TAG,
"Missing Intent arguments (queue_id)"
);
finish(); finish();
return; return;
} }
int queue_id = extras.getInt( int queue_id = extras.getInt("queue_id", -1);
"queue_id",
-1
);
if (queue_id == -1) { if (queue_id == -1) {
Log.e( Log.e(TAG, "Missing Intent arguments (queue_id)");
TAG,
"Missing Intent arguments (queue_id)"
);
finish(); finish();
return; return;
} }
queue = Wrapper.getQueueMaker().getById(queue_id); queue = Wrapper.getQueueMaker().getById(queue_id);
if (queue == null) { if (queue == null) {
Log.e( Log.e(TAG, "Missing Intent arguments (queue_id)");
TAG,
"Missing Intent arguments (queue_id)"
);
finish(); finish();
return; return;
} }
@ -131,10 +119,7 @@ public class EventEditActivity extends AppCompatActivity {
// Get Event ID from Intent (optional) // Get Event ID from Intent (optional)
extras = getIntent().getExtras(); extras = getIntent().getExtras();
if (extras != null) { if (extras != null) {
int event_id = extras.getInt( int event_id = extras.getInt("event_id", -1);
"event_id",
-1
);
if (event_id != -1) { if (event_id != -1) {
this.event = Wrapper.getEventMaker().getById(event_id); this.event = Wrapper.getEventMaker().getById(event_id);
this.eventContainer.timestamp = this.event.getTimestamp(); this.eventContainer.timestamp = this.event.getTimestamp();
@ -148,8 +133,7 @@ public class EventEditActivity extends AppCompatActivity {
binding = ActivityEventEditBinding.inflate(getLayoutInflater()); binding = ActivityEventEditBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot()); setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar); setSupportActionBar(binding.toolbar);
getSupportActionBar().setTitle( getSupportActionBar().setTitle(getSupportActionBar().getTitle() + " / " + (event == null ? "Create" : "Edit") + " Event");
getSupportActionBar().getTitle() + " / " + (event == null ? "Create" : "Edit") + " Event");
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true);
@ -164,18 +148,15 @@ public class EventEditActivity extends AppCompatActivity {
// Request focus on click // Request focus on click
this.binding.eventEditContent.eventEditContainerComment.setOnClickListener((View view) -> { this.binding.eventEditContent.eventEditContainerComment.setOnClickListener((View view) -> {
this.binding.eventEditContent.eventEditComment.requestFocus(); this.binding.eventEditContent.eventEditComment.requestFocus();
this.binding.eventEditContent.eventEditComment.setSelection( this.binding.eventEditContent.eventEditComment.setSelection(EventEditActivity.this.binding.eventEditContent.eventEditComment.getText().length());
EventEditActivity.this.binding.eventEditContent.eventEditComment.getText().length());
}); });
/* Timestamp Listeners */ /* Timestamp Listeners */
binding.eventEditContent.eventEditContainerTimestamp.setOnClickListener((View view) -> { binding.eventEditContent.eventEditContainerTimestamp.setOnClickListener((View view) -> {
Date date; Date date;
if (this.eventContainer.timestamp != 0) if (this.eventContainer.timestamp != 0) date = new Date(this.eventContainer.timestamp);
date = new Date(this.eventContainer.timestamp); else date = new Date();
else
date = new Date();
DatePickerDialog datePickerDialog = new DatePickerDialog( DatePickerDialog datePickerDialog = new DatePickerDialog(
view.getContext(), view.getContext(),
@ -184,16 +165,23 @@ public class EventEditActivity extends AppCompatActivity {
view.getContext(), view.getContext(),
(TimePicker timePicker, int hour, int minute) -> { (TimePicker timePicker, int hour, int minute) -> {
Date newDate = new Date(); Date newDate = new Date();
newDate.setYear(year - 1900); newDate.setYear(
newDate.setMonth(month); year - 1900);
newDate.setDate(day); newDate.setMonth(
newDate.setHours(hour); month);
newDate.setMinutes(minute); newDate.setDate(
newDate.setSeconds(0); day);
newDate.setHours(
hour);
newDate.setMinutes(
minute);
newDate.setSeconds(
0);
this.eventContainer.timestamp = newDate.getTime(); this.eventContainer.timestamp = newDate.getTime();
binding.eventEditContent.eventEditTimestamp.setText( binding.eventEditContent.eventEditTimestamp.setText(
Utils.formatTs(this.eventContainer.timestamp)); Utils.formatTs(
this.eventContainer.timestamp));
}, },
date.getHours(), date.getHours(),
date.getMinutes(), date.getMinutes(),
@ -210,16 +198,10 @@ public class EventEditActivity extends AppCompatActivity {
/* FAB Listeners */ /* FAB Listeners */
binding.fab.setOnLongClickListener((View view) -> { binding.fab.setOnLongClickListener((View view) -> {
Snackbar.make( Snackbar.make(view, "Save Event", Snackbar.LENGTH_LONG).setAnchorView(R.id.fab).setAction(
view, "Action",
"Save Event", null
Snackbar.LENGTH_LONG ).show();
)
.setAnchorView(R.id.fab)
.setAction(
"Action",
null
).show();
return true; return true;
}); });
@ -227,8 +209,7 @@ public class EventEditActivity extends AppCompatActivity {
// Finalize values // Finalize values
this.eventContainer.comment = this.binding.eventEditContent.eventEditComment.getText().toString().trim(); this.eventContainer.comment = this.binding.eventEditContent.eventEditComment.getText().toString().trim();
String[] tags = EventEditActivity.this.binding.eventEditContent.eventEditTags.getText().toString().split( String[] tags = EventEditActivity.this.binding.eventEditContent.eventEditTags.getText().toString().split(",");
",");
tags = Utils.orderedDeduplicateIgnoreCaseAndTrim(tags); tags = Utils.orderedDeduplicateIgnoreCaseAndTrim(tags);
this.eventContainer.tags.clear(); this.eventContainer.tags.clear();
for (String tag : tags) { for (String tag : tags) {
@ -237,16 +218,12 @@ public class EventEditActivity extends AppCompatActivity {
// Fill event // Fill event
boolean hasEvent = this.event != null; boolean hasEvent = this.event != null;
if (this.event == null) if (this.event == null) this.event = Wrapper.getEventMaker().create();
this.event = Wrapper.getEventMaker().create();
this.event.setTimestamp(this.eventContainer.timestamp); this.event.setTimestamp(this.eventContainer.timestamp);
this.event.removeTags(); this.event.removeTags();
for (String tag : this.eventContainer.tags) { for (String tag : this.eventContainer.tags) {
this.event.addTag(Wrapper.getTagMaker().getOrCreateInQueue( this.event.addTag(Wrapper.getTagMaker().getOrCreateInQueue(this.queue, tag));
this.queue,
tag
));
} }
this.event.setComment(this.eventContainer.comment); this.event.setComment(this.eventContainer.comment);
@ -270,32 +247,22 @@ public class EventEditActivity extends AppCompatActivity {
this.binding.eventEditContent.eventEditTags.setThreshold(1); this.binding.eventEditContent.eventEditTags.setThreshold(1);
this.binding.eventEditContent.eventEditTags.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); this.binding.eventEditContent.eventEditTags.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
this.binding.eventEditContent.eventEditTags.setOnItemClickListener((parent, view, position, id) -> { this.binding.eventEditContent.eventEditTags.setOnItemClickListener((parent, view, position, id) -> {
String[] tags = EventEditActivity.this.binding.eventEditContent.eventEditTags.getText().toString().split( String[] tags = EventEditActivity.this.binding.eventEditContent.eventEditTags.getText().toString().split(",");
",");
tags = Utils.orderedDeduplicateIgnoreCaseAndTrim(tags); tags = Utils.orderedDeduplicateIgnoreCaseAndTrim(tags);
EventEditActivity.this.binding.eventEditContent.eventEditTags.setText(String.join( EventEditActivity.this.binding.eventEditContent.eventEditTags.setText(String.join(", ", tags));
", ", EventEditActivity.this.binding.eventEditContent.eventEditTags.setSelection(EventEditActivity.this.binding.eventEditContent.eventEditTags.getText().length());
tags
));
EventEditActivity.this.binding.eventEditContent.eventEditTags.setSelection(
EventEditActivity.this.binding.eventEditContent.eventEditTags.getText().length());
}); });
// Request focus on click // Request focus on click
this.binding.eventEditContent.eventEditContainerTags.setOnClickListener((View view) -> { this.binding.eventEditContent.eventEditContainerTags.setOnClickListener((View view) -> {
this.binding.eventEditContent.eventEditTags.requestFocus(); this.binding.eventEditContent.eventEditTags.requestFocus();
this.binding.eventEditContent.eventEditTags.setSelection( this.binding.eventEditContent.eventEditTags.setSelection(EventEditActivity.this.binding.eventEditContent.eventEditTags.getText().length());
EventEditActivity.this.binding.eventEditContent.eventEditTags.getText().length());
}); });
// Fill // Fill
this.binding.eventEditContent.eventEditTags.setText(String.join( this.binding.eventEditContent.eventEditTags.setText(String.join(", ", this.eventContainer.tags));
", ", this.binding.eventEditContent.eventEditTags.setSelection(EventEditActivity.this.binding.eventEditContent.eventEditTags.getText().length());
this.eventContainer.tags
));
this.binding.eventEditContent.eventEditTags.setSelection(
EventEditActivity.this.binding.eventEditContent.eventEditTags.getText().length());
} }
@Override @Override

View file

@ -63,33 +63,21 @@ public class EventListActivity extends AppCompatActivity {
// Get Queue ID from Intent // Get Queue ID from Intent
Bundle extras = getIntent().getExtras(); Bundle extras = getIntent().getExtras();
if (extras == null) { if (extras == null) {
Log.e( Log.e(TAG, "Missing Intent arguments (queue_id)");
TAG,
"Missing Intent arguments (queue_id)"
);
finish(); finish();
return; return;
} }
int queue_id = extras.getInt( int queue_id = extras.getInt("queue_id", -1);
"queue_id",
-1
);
if (queue_id == -1) { if (queue_id == -1) {
Log.e( Log.e(TAG, "Missing Intent arguments (queue_id)");
TAG,
"Missing Intent arguments (queue_id)"
);
finish(); finish();
return; return;
} }
queue = Wrapper.getQueueMaker().getById(queue_id); queue = Wrapper.getQueueMaker().getById(queue_id);
if (queue == null) { if (queue == null) {
Log.e( Log.e(TAG, "Missing Intent arguments (queue_id)");
TAG,
"Missing Intent arguments (queue_id)"
);
finish(); finish();
return; return;
} }
@ -128,30 +116,17 @@ public class EventListActivity extends AppCompatActivity {
/* FAB Listeners */ /* FAB Listeners */
binding.fab.setOnLongClickListener((View view) -> { binding.fab.setOnLongClickListener((View view) -> {
Snackbar.make( Snackbar.make(view, "Create Event", Snackbar.LENGTH_LONG).setAnchorView(R.id.fab).setAction("Action",
view, null
"Create Event", ).show();
Snackbar.LENGTH_LONG
)
.setAnchorView(R.id.fab)
.setAction(
"Action",
null
).show();
return true; return true;
}); });
binding.fab.setOnClickListener(view -> { binding.fab.setOnClickListener(view -> {
Bundle extra = new Bundle(); Bundle extra = new Bundle();
extra.putInt( extra.putInt("queue_id", this.queue.getId());
"queue_id",
this.queue.getId()
);
Intent intent = new Intent( Intent intent = new Intent(view.getContext(), EventEditActivity.class);
view.getContext(),
EventEditActivity.class
);
intent.putExtras(extra); intent.putExtras(extra);
view.getContext().startActivity(intent); view.getContext().startActivity(intent);

View file

@ -18,7 +18,10 @@ package art.pegasko.yeeemp.ui.activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.Intent; import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuItem; import android.view.MenuItem;
@ -57,13 +60,7 @@ class EventRecyclerViewAdapter extends RecyclerView.Adapter<EventRecyclerViewAda
@Override @Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) { public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view = ( View view = (
LayoutInflater LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.event_list_item, viewGroup, false)
.from(viewGroup.getContext())
.inflate(
R.layout.event_list_item,
viewGroup,
false
)
); );
return new ViewHolder(view); return new ViewHolder(view);
@ -75,13 +72,11 @@ class EventRecyclerViewAdapter extends RecyclerView.Adapter<EventRecyclerViewAda
Tag[] tags = this.events[position].getTags(); Tag[] tags = this.events[position].getTags();
for (Tag tag : tags) { for (Tag tag : tags) {
TextView tagView = (TextView) ( TextView tagView = (TextView) (
LayoutInflater LayoutInflater.from(viewHolder.getBinding().getRoot().getContext()).inflate(
.from(viewHolder.getBinding().getRoot().getContext()) R.layout.event_list_item_tag,
.inflate( null,
R.layout.event_list_item_tag, false
null, )
false
)
); );
tagView.setText(tag.getName()); tagView.setText(tag.getName());
@ -100,33 +95,23 @@ class EventRecyclerViewAdapter extends RecyclerView.Adapter<EventRecyclerViewAda
} }
viewHolder.getBinding().eventListItemItem.setOnLongClickListener((View view) -> { viewHolder.getBinding().eventListItemItem.setOnLongClickListener((View view) -> {
PopupMenu popupMenu = new PopupMenu( PopupMenu popupMenu = new PopupMenu(view.getContext(), viewHolder.getBinding().eventListItemItem);
view.getContext(), popupMenu.getMenuInflater().inflate(R.menu.event_list_item_action_menu, popupMenu.getMenu());
viewHolder.getBinding().eventListItemItem
);
popupMenu.getMenuInflater().inflate(
R.menu.event_list_item_action_menu,
popupMenu.getMenu()
);
popupMenu.setOnMenuItemClickListener((MenuItem menuItem) -> { popupMenu.setOnMenuItemClickListener((MenuItem menuItem) -> {
if (menuItem.getItemId() == R.id.event_list_item_action_menu_delete) { if (menuItem.getItemId() == R.id.event_list_item_action_menu_delete) {
new AlertDialog.Builder(view.getContext()) new AlertDialog.Builder(view.getContext()).setTitle("Delete event").setMessage(
.setTitle("Delete event") "Are you sure you want to delete this event?").setPositiveButton(
.setMessage("Are you sure you want to delete this event?") android.R.string.yes,
.setPositiveButton( (dialog, which) -> {
android.R.string.yes, Wrapper.getEventMaker().delete(
(dialog, which) -> { events[position]);
Wrapper.getEventMaker().delete(events[position]);
reloadItems(); reloadItems();
} }
) ).setNegativeButton(
.setNegativeButton( android.R.string.no,
android.R.string.no, null
null ).setIcon(android.R.drawable.ic_dialog_alert).show();
)
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
} }
return true; return true;
}); });
@ -137,19 +122,10 @@ class EventRecyclerViewAdapter extends RecyclerView.Adapter<EventRecyclerViewAda
}); });
viewHolder.getBinding().eventListItemItem.setOnClickListener((View view) -> { viewHolder.getBinding().eventListItemItem.setOnClickListener((View view) -> {
Bundle extra = new Bundle(); Bundle extra = new Bundle();
extra.putInt( extra.putInt("event_id", this.events[position].getId());
"event_id", extra.putInt("queue_id", this.queue.getId());
this.events[position].getId()
);
extra.putInt(
"queue_id",
this.queue.getId()
);
Intent intent = new Intent( Intent intent = new Intent(view.getContext(), EventEditActivity.class);
view.getContext(),
EventEditActivity.class
);
intent.putExtras(extra); intent.putExtras(extra);
view.getContext().startActivity(intent); view.getContext().startActivity(intent);
@ -175,7 +151,12 @@ class EventRecyclerViewAdapter extends RecyclerView.Adapter<EventRecyclerViewAda
} }
public void reloadItems() { public void reloadItems() {
this.events = this.queue.getEvents(); Handler handler = new Handler(Looper.getMainLooper());
this.notifyDataSetChanged(); Executors.newSingleThreadExecutor().execute(() -> {
this.events = this.queue.getEvents();
handler.post(() -> {
this.notifyDataSetChanged();
});
});
} }
} }

View file

@ -68,11 +68,7 @@ public class QueueListActivity extends AppCompatActivity {
/* FAB Listeners */ /* FAB Listeners */
binding.fab.setOnLongClickListener((View view) -> { binding.fab.setOnLongClickListener((View view) -> {
Snackbar.make( Snackbar.make(view, "Create Queue", Snackbar.LENGTH_LONG).setAnchorView(R.id.fab).setAction(
view,
"Create Queue",
Snackbar.LENGTH_LONG
).setAnchorView(R.id.fab).setAction(
"Action", "Action",
null null
).show(); ).show();

View file

@ -48,13 +48,7 @@ class QueueRecyclerViewAdapter extends RecyclerView.Adapter<QueueRecyclerViewAda
@Override @Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) { public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view = ( View view = (
LayoutInflater LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.queue_list_item, viewGroup, false)
.from(viewGroup.getContext())
.inflate(
R.layout.queue_list_item,
viewGroup,
false
)
); );
return new ViewHolder(view); return new ViewHolder(view);
@ -65,33 +59,20 @@ class QueueRecyclerViewAdapter extends RecyclerView.Adapter<QueueRecyclerViewAda
viewHolder.getBinding().queueListItemTitle.setText(queues[position].getName()); viewHolder.getBinding().queueListItemTitle.setText(queues[position].getName());
viewHolder.getBinding().queueListItemItem.setOnLongClickListener((View view) -> { viewHolder.getBinding().queueListItemItem.setOnLongClickListener((View view) -> {
PopupMenu popupMenu = new PopupMenu( PopupMenu popupMenu = new PopupMenu(view.getContext(), viewHolder.getBinding().queueListItemItem);
view.getContext(), popupMenu.getMenuInflater().inflate(R.menu.queue_list_item_action_menu, popupMenu.getMenu());
viewHolder.getBinding().queueListItemItem
);
popupMenu.getMenuInflater().inflate(
R.menu.queue_list_item_action_menu,
popupMenu.getMenu()
);
popupMenu.setOnMenuItemClickListener((MenuItem menuItem) -> { popupMenu.setOnMenuItemClickListener((MenuItem menuItem) -> {
if (menuItem.getItemId() == R.id.queue_list_item_action_menu_delete) { if (menuItem.getItemId() == R.id.queue_list_item_action_menu_delete) {
new AlertDialog.Builder(view.getContext()) new AlertDialog.Builder(view.getContext()).setTitle("Delete queue").setMessage(
.setTitle("Delete queue") "Are you sure you want to delete this queue?").setPositiveButton(
.setMessage("Are you sure you want to delete this queue?") android.R.string.yes,
.setPositiveButton( (dialog, which) -> {
android.R.string.yes, Wrapper.getQueueMaker().delete(
(dialog, which) -> { queues[position]);
Wrapper.getQueueMaker().delete(queues[position]);
reloadItems(); reloadItems();
} }
) ).setNegativeButton(android.R.string.no, null).setIcon(android.R.drawable.ic_dialog_alert).show();
.setNegativeButton(
android.R.string.no,
null
)
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
} else if (menuItem.getItemId() == R.id.queue_list_item_action_menu_rename) { } else if (menuItem.getItemId() == R.id.queue_list_item_action_menu_rename) {
AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext()); AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("Title"); builder.setTitle("Title");
@ -101,19 +82,13 @@ class QueueRecyclerViewAdapter extends RecyclerView.Adapter<QueueRecyclerViewAda
input.setText(queues[position].getName()); input.setText(queues[position].getName());
builder.setView(input); builder.setView(input);
builder.setPositiveButton( builder.setPositiveButton("OK", (dialog, which) -> {
"OK", String name = input.getText().toString().trim();
(dialog, which) -> { queues[position].setName(name);
String name = input.getText().toString().trim();
queues[position].setName(name);
reloadItems(); reloadItems();
} });
); builder.setNegativeButton("Cancel", (dialog, which) -> dialog.cancel());
builder.setNegativeButton(
"Cancel",
(dialog, which) -> dialog.cancel()
);
builder.show(); builder.show();
} }
@ -126,15 +101,9 @@ class QueueRecyclerViewAdapter extends RecyclerView.Adapter<QueueRecyclerViewAda
}); });
viewHolder.getBinding().queueListItemItem.setOnClickListener((View view) -> { viewHolder.getBinding().queueListItemItem.setOnClickListener((View view) -> {
Bundle extra = new Bundle(); Bundle extra = new Bundle();
extra.putInt( extra.putInt("queue_id", queues[position].getId());
"queue_id",
queues[position].getId()
);
Intent intent = new Intent( Intent intent = new Intent(view.getContext(), EventListActivity.class);
view.getContext(),
EventListActivity.class
);
intent.putExtras(extra); intent.putExtras(extra);
view.getContext().startActivity(intent); view.getContext().startActivity(intent);
@ -143,10 +112,7 @@ class QueueRecyclerViewAdapter extends RecyclerView.Adapter<QueueRecyclerViewAda
viewHolder.getBinding().queueListItemStats.setText(Integer.toString(queues[position].getEventCount())); viewHolder.getBinding().queueListItemStats.setText(Integer.toString(queues[position].getEventCount()));
viewHolder.getBinding().queueListItemPlus.setOnClickListener((View view) -> { viewHolder.getBinding().queueListItemPlus.setOnClickListener((View view) -> {
Intent intent = new Intent( Intent intent = new Intent(view.getContext(), EventEditActivity.class);
view.getContext(),
EventEditActivity.class
);
view.getContext().startActivity(intent); view.getContext().startActivity(intent);
}); });
} }