Skip to content

Commit

Permalink
Add LiveData implementation to item list in MainActivity
Browse files Browse the repository at this point in the history
  • Loading branch information
teccheck committed Apr 29, 2021
1 parent f374b70 commit e20cb53
Show file tree
Hide file tree
Showing 8 changed files with 312 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import io.github.storagereloaded.android.db.AppDatabase;
import io.github.storagereloaded.android.db.entity.DatabaseEntity;
import io.github.storagereloaded.android.db.entity.ItemEntity;
import io.github.storagereloaded.api.Database;
import io.github.storagereloaded.api.Item;
import io.github.storagereloaded.api.Location;
Expand Down Expand Up @@ -49,8 +50,8 @@ public LiveData<List<Tag>> getTags() {
return null; // TODO
}

public LiveData<List<Item>> getItemsInDatabase(int databaseId) {
return null; // TODO
public LiveData<List<ItemEntity>> getItemsInDatabase(int databaseId) {
return appDatabase.itemDao().getItemsInDatabase(databaseId);
}

public LiveData<List<Tag>> getTagsInItem(int itemId) {
Expand All @@ -65,8 +66,8 @@ public LiveData<DatabaseEntity> getDatabase(int databaseId) {
return appDatabase.databaseDao().getDatabase(databaseId);
}

public LiveData<Item> getItem(int itemId) {
return null; // TODO
public LiveData<ItemEntity> getItem(int itemId) {
return appDatabase.itemDao().getItem(itemId);
}

public LiveData<Location> getLocation(int locationId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@

import io.github.storagereloaded.android.AppExecutors;
import io.github.storagereloaded.android.db.dao.DatabaseDao;
import io.github.storagereloaded.android.db.dao.ItemDao;
import io.github.storagereloaded.android.db.entity.DatabaseEntity;
import io.github.storagereloaded.android.db.entity.ItemEntity;

@Database(entities = {DatabaseEntity.class}, version = 1)
@Database(entities = {DatabaseEntity.class, ItemEntity.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {

private static AppDatabase instance;
Expand All @@ -28,6 +30,8 @@ public abstract class AppDatabase extends RoomDatabase {

public abstract DatabaseDao databaseDao();

public abstract ItemDao itemDao();

private final MutableLiveData<Boolean> isDatabaseCreated = new MutableLiveData<>();

public static AppDatabase getInstance(Context context, AppExecutors executors) {
Expand All @@ -53,10 +57,12 @@ public void onCreate(@NonNull SupportSQLiteDatabase db) {

// For testing
List<DatabaseEntity> databases = DataGenerator.generateDatabases();
List<ItemEntity> items = DataGenerator.generateItems(databases);

// Insert data
database.runInTransaction(() -> {
database.databaseDao().insertAll(databases);
database.itemDao().insertAll(items);
});

// notify that the database was created and it's ready to be used
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,18 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import io.github.storagereloaded.android.db.entity.DatabaseEntity;
import io.github.storagereloaded.android.db.entity.ItemEntity;

public class DataGenerator {

private static final String[] FIRST = new String[]{"Test", "My ", "Electronics"};
private static final String[] FIRST = new String[]{"Test", "My", "Electronics"};
private static final String[] SECOND = new String[]{"Database", "List", "Stuff"};

private static final String[] ITEM_NAMES = new String[]{"Test Item", "Tea", "Capacitor", "App"};

public static List<DatabaseEntity> generateDatabases() {
List<DatabaseEntity> databases = new ArrayList<>(FIRST.length * SECOND.length);
for (int i = 0; i < FIRST.length; i++) {
Expand All @@ -22,4 +26,28 @@ public static List<DatabaseEntity> generateDatabases() {
}
return databases;
}

public static List<ItemEntity> generateItems(List<DatabaseEntity> databases) {
List<ItemEntity> items = new ArrayList<>();
Random rnd = new Random();

int itemId = 0;
for(DatabaseEntity database : databases) {
for(String name : ITEM_NAMES){
for (int i = 0; i < 10; i++){
ItemEntity item = new ItemEntity();
item.setId(itemId++);
item.setName(name + " " + i);
item.setDescription("Test Description");
item.setCreated(System.currentTimeMillis());
item.setLastEdited(System.currentTimeMillis());
item.setAmount(rnd.nextInt(100));
item.setDatabaseId(database.getId());
items.add(item);
}
}
}

return items;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package io.github.storagereloaded.android.db.dao;

import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;

import java.util.List;

import io.github.storagereloaded.android.db.entity.ItemEntity;

@Dao
public interface ItemDao {

@Query("SELECT * FROM items WHERE databaseId=:databaseId")
LiveData<List<ItemEntity>> getItemsInDatabase(int databaseId);

@Query("SELECT * FROM items WHERE id=:itemId")
LiveData<ItemEntity> getItem(int itemId);

@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAll(List<ItemEntity> items);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
package io.github.storagereloaded.android.db.entity;

import androidx.room.Entity;
import androidx.room.PrimaryKey;

import java.util.Objects;

import io.github.storagereloaded.android.model.Item;

@Entity(tableName = "items")
public class ItemEntity implements Item {

@PrimaryKey
private int id;
private String name;
private String description;
private String imagePath;
private int locationId;
private int amount;
private long lastEdited;
private long created;
private int databaseId;

@Override
public int getId() {
return id;
}

@Override
public void setId(int id) {
this.id = id;
}

@Override
public String getName() {
return name;
}

@Override
public void setName(String name) {
this.name = name;
}

@Override
public String getDescription() {
return description;
}

@Override
public void setDescription(String description) {
this.description = description;
}

@Override
public String getImagePath() {
return imagePath;
}

@Override
public void setImagePath(String imagePath) {
this.imagePath = imagePath;
}

@Override
public int getLocationId() {
return locationId;
}

@Override
public void setLocationId(int locationId) {
this.locationId = locationId;
}

@Override
public int getAmount() {
return amount;
}

@Override
public void setAmount(int amount) {
this.amount = amount;
}

@Override
public long getLastEdited() {
return lastEdited;
}

@Override
public void setLastEdited(long lastEdited) {
this.lastEdited = lastEdited;
}

@Override
public long getCreated() {
return created;
}

@Override
public void setCreated(long created) {
this.created = created;
}

@Override
public int getDatabaseId() {
return databaseId;
}

@Override
public void setDatabaseId(int databaseId) {
this.databaseId = databaseId;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ItemEntity that = (ItemEntity) o;
return id == that.id &&
locationId == that.locationId &&
amount == that.amount &&
lastEdited == that.lastEdited &&
created == that.created &&
databaseId == that.databaseId &&
Objects.equals(name, that.name) &&
Objects.equals(description, that.description) &&
Objects.equals(imagePath, that.imagePath);
}

@Override
public int hashCode() {
return Objects.hash(id, name, description, imagePath, locationId, amount, lastEdited, created, databaseId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package io.github.storagereloaded.android.model;

public interface Item {
int getId();

void setId(int id);

String getName();

void setName(String name);

String getDescription();

void setDescription(String description);

String getImagePath();

void setImagePath(String imagePath);

int getLocationId();

void setLocationId(int locationId);

int getAmount();

void setAmount(int amount);

long getLastEdited();

void setLastEdited(long lastEdited);

long getCreated();

void setCreated(long created);

int getDatabaseId();

void setDatabaseId(int databaseId);
}
Loading

0 comments on commit e20cb53

Please sign in to comment.