diff --git a/app/build.gradle b/app/build.gradle index 1115b64..ed7975e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -35,6 +35,8 @@ dependencies { implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" + //gson + implementation 'com.google.code.gson:gson:2.8.6' implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' diff --git a/app/src/main/java/com/a1/nextlocation/data/Data.java b/app/src/main/java/com/a1/nextlocation/data/Data.java index 7f4b5eb..aefc7d5 100644 --- a/app/src/main/java/com/a1/nextlocation/data/Data.java +++ b/app/src/main/java/com/a1/nextlocation/data/Data.java @@ -1,23 +1,34 @@ package com.a1.nextlocation.data; import androidx.annotation.NonNull; +import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.Ignore; import androidx.room.PrimaryKey; +import androidx.room.TypeConverters; +import com.a1.nextlocation.data.db.CouponListTypeConverter; + +import java.util.ArrayList; import java.util.List; -@Entity +@Entity(tableName = "userdata") public class Data { @PrimaryKey @NonNull + @ColumnInfo(name = "distance_traveled") private float distanceTraveled; + @ColumnInfo(name = "locations_visited") private int locationsVisited; + + @ColumnInfo(name = "total_time") private int totalTime; + + @TypeConverters(CouponListTypeConverter.class) private List couponList; @Ignore @@ -34,6 +45,7 @@ public class Data { this.distanceTraveled = 0; this.locationsVisited = 0; this.totalTime = 0; + couponList = new ArrayList<>(); } diff --git a/app/src/main/java/com/a1/nextlocation/data/Route.java b/app/src/main/java/com/a1/nextlocation/data/Route.java index c1d1bf0..745c2e6 100644 --- a/app/src/main/java/com/a1/nextlocation/data/Route.java +++ b/app/src/main/java/com/a1/nextlocation/data/Route.java @@ -4,6 +4,9 @@ import androidx.annotation.NonNull; import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.PrimaryKey; +import androidx.room.TypeConverters; + +import com.a1.nextlocation.data.db.LocationListTypeConverter; import org.jetbrains.annotations.NotNull; @@ -17,6 +20,7 @@ public class Route { @NonNull private String name; + @TypeConverters(LocationListTypeConverter.class) private List locations; @ColumnInfo(name = "total_distance") diff --git a/app/src/main/java/com/a1/nextlocation/data/db/CouponListTypeConverter.java b/app/src/main/java/com/a1/nextlocation/data/db/CouponListTypeConverter.java new file mode 100644 index 0000000..347ca39 --- /dev/null +++ b/app/src/main/java/com/a1/nextlocation/data/db/CouponListTypeConverter.java @@ -0,0 +1,33 @@ +package com.a1.nextlocation.data.db; + +import androidx.room.TypeConverter; + +import com.a1.nextlocation.data.Coupon; +import com.a1.nextlocation.data.Route; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.Collections; +import java.util.List; + +public class CouponListTypeConverter { + private static Gson gson = new Gson(); + + @TypeConverter + public static List toRoutesList(String data) { + if (data == null) { + return Collections.emptyList(); + } + Type listType = new TypeToken>() {}.getType(); + + return gson.fromJson(data,listType); + } + + @TypeConverter + public static String fromRoutesList(List list) { + return gson.toJson(list); + } + + +} diff --git a/app/src/main/java/com/a1/nextlocation/data/db/Database.java b/app/src/main/java/com/a1/nextlocation/data/db/Database.java index 7ab918c..ed6180f 100644 --- a/app/src/main/java/com/a1/nextlocation/data/db/Database.java +++ b/app/src/main/java/com/a1/nextlocation/data/db/Database.java @@ -8,9 +8,11 @@ import androidx.room.RoomDatabase; import androidx.sqlite.db.SupportSQLiteDatabase; import com.a1.nextlocation.data.Coupon; +import com.a1.nextlocation.data.Data; import com.a1.nextlocation.data.Location; import com.a1.nextlocation.data.Route; import com.a1.nextlocation.data.db.dao.CouponDao; +import com.a1.nextlocation.data.db.dao.DataDao; import com.a1.nextlocation.data.db.dao.LocationDao; import com.a1.nextlocation.data.db.dao.RouteDao; @@ -20,12 +22,13 @@ import java.util.concurrent.Executors; /** * @author Sem */ -@androidx.room.Database(entities = {Coupon.class,Route.class, Location.class},version = 1,exportSchema = false) +@androidx.room.Database(entities = {Coupon.class,Route.class, Location.class, Data.class},version = 1,exportSchema = false) public abstract class Database extends RoomDatabase { public abstract RouteDao routeDao(); public abstract CouponDao couponDao(); public abstract LocationDao locationDao(); + public abstract DataDao dataDao(); private static volatile Database INSTANCE; private static final int NUMBER_OF_THREADS = 4; diff --git a/app/src/main/java/com/a1/nextlocation/data/db/LocationListTypeConverter.java b/app/src/main/java/com/a1/nextlocation/data/db/LocationListTypeConverter.java new file mode 100644 index 0000000..7f7c9b5 --- /dev/null +++ b/app/src/main/java/com/a1/nextlocation/data/db/LocationListTypeConverter.java @@ -0,0 +1,31 @@ +package com.a1.nextlocation.data.db; + +import androidx.room.TypeConverter; + +import com.a1.nextlocation.data.Location; +import com.a1.nextlocation.data.Route; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.Collections; +import java.util.List; + +public class LocationListTypeConverter { + private static Gson gson = new Gson(); + + @TypeConverter + public static List toLocationList(String data) { + if (data == null) { + return Collections.emptyList(); + } + Type listType = new TypeToken>() {}.getType(); + + return gson.fromJson(data,listType); + } + + @TypeConverter + public static String fromLocationList(List list) { + return gson.toJson(list); + } +} diff --git a/app/src/main/java/com/a1/nextlocation/data/db/dao/DataDao.java b/app/src/main/java/com/a1/nextlocation/data/db/dao/DataDao.java new file mode 100644 index 0000000..e46c99c --- /dev/null +++ b/app/src/main/java/com/a1/nextlocation/data/db/dao/DataDao.java @@ -0,0 +1,28 @@ +package com.a1.nextlocation.data.db.dao; + +import androidx.room.Dao; +import androidx.room.Insert; +import androidx.room.OnConflictStrategy; +import androidx.room.Query; +import androidx.room.Update; + +import com.a1.nextlocation.data.Data; + +@Dao +public interface DataDao { + + @Insert(onConflict = OnConflictStrategy.REPLACE) + void insertAll(Data... datas); + + @Update + void update(Data data); + + @Query("DELETE FROM userdata") + void delete(); + + @Query("SELECT * FROM userdata LIMIT 1") + Data getData(); + + + +} diff --git a/app/src/main/java/com/a1/nextlocation/data/db/repositories/DataRepository.java b/app/src/main/java/com/a1/nextlocation/data/db/repositories/DataRepository.java new file mode 100644 index 0000000..d22f560 --- /dev/null +++ b/app/src/main/java/com/a1/nextlocation/data/db/repositories/DataRepository.java @@ -0,0 +1,24 @@ +package com.a1.nextlocation.data.db.repositories; + +import android.content.Context; + +import com.a1.nextlocation.data.Data; +import com.a1.nextlocation.data.db.Database; +import com.a1.nextlocation.data.db.dao.DataDao; + +public class DataRepository { + private DataDao mDataDao; + private Data data; + + public DataRepository(Context context) { + Database db = Database.getDatabase(context); + mDataDao = db.dataDao(); + data = mDataDao.getData(); + } + + public Data getData() { + return data; + } + + +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7477164..1eeef45 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Dec 08 10:31:45 CET 2020 +#Mon Dec 14 14:48:57 CET 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip