From fac41e2adec6c580d1f81f69774f1865e867b80e Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Mon, 14 Dec 2020 10:55:39 +0100 Subject: [PATCH 01/36] [ADD] route class fields and getters / setters --- .../java/com/a1/nextlocation/data/Route.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) 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 213f3ba..2714dab 100644 --- a/app/src/main/java/com/a1/nextlocation/data/Route.java +++ b/app/src/main/java/com/a1/nextlocation/data/Route.java @@ -1,4 +1,42 @@ package com.a1.nextlocation.data; +import java.util.List; + public class Route { + private String name; + private List locations; + private float totalDistance; + private int totalTime; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getLocations() { + return locations; + } + + public void setLocations(List locations) { + this.locations = locations; + } + + public float getTotalDistance() { + return totalDistance; + } + + public void setTotalDistance(float totalDistance) { + this.totalDistance = totalDistance; + } + + public int getTotalTime() { + return totalTime; + } + + public void setTotalTime(int totalTime) { + this.totalTime = totalTime; + } } From dec62e8b9ad0c1a18462b42ce0e66e9aebee19d2 Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Mon, 14 Dec 2020 10:56:49 +0100 Subject: [PATCH 02/36] [ADD] coupon class fields and getters / setters --- .../java/com/a1/nextlocation/data/Coupon.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/src/main/java/com/a1/nextlocation/data/Coupon.java b/app/src/main/java/com/a1/nextlocation/data/Coupon.java index b980ab3..5cfcece 100644 --- a/app/src/main/java/com/a1/nextlocation/data/Coupon.java +++ b/app/src/main/java/com/a1/nextlocation/data/Coupon.java @@ -1,4 +1,23 @@ package com.a1.nextlocation.data; public class Coupon { + + private String code; + private String reward; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getReward() { + return reward; + } + + public void setReward(String reward) { + this.reward = reward; + } } From a2ffef10999cbd40cab4b882e418bb9fa356ce54 Mon Sep 17 00:00:00 2001 From: Bart Date: Mon, 14 Dec 2020 11:04:31 +0100 Subject: [PATCH 03/36] [ADD] data & location class fields and getters / setters --- .../java/com/a1/nextlocation/data/Data.java | 67 +++++++++++++++++++ .../com/a1/nextlocation/data/Location.java | 27 ++++++++ 2 files changed, 94 insertions(+) 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 8e09c97..a16b52e 100644 --- a/app/src/main/java/com/a1/nextlocation/data/Data.java +++ b/app/src/main/java/com/a1/nextlocation/data/Data.java @@ -1,4 +1,71 @@ package com.a1.nextlocation.data; +import java.util.List; + public class Data { + private float distanceTraveled; + private int locationsVisited; + private int totalTime; + private List couponList; + private Location nextLocation; + private Location lastLocation; + private Route currentRoute; + + + + public float getDistanceTraveled() { + return distanceTraveled; + } + + public void setDistanceTraveled(float distanceTraveled) { + this.distanceTraveled = distanceTraveled; + } + + public int getLocationsVisited() { + return locationsVisited; + } + + public void setLocationsVisited(int locationsVisited) { + this.locationsVisited = locationsVisited; + } + + public int getTotalTime() { + return totalTime; + } + + public void setTotalTime(int totalTime) { + this.totalTime = totalTime; + } + + public List getCouponList() { + return couponList; + } + + public void setCouponList(List couponList) { + this.couponList = couponList; + } + + public Location getNextLocation() { + return nextLocation; + } + + public void setNextLocation(Location nextLocation) { + this.nextLocation = nextLocation; + } + + public Location getLastLocation() { + return lastLocation; + } + + public void setLastLocation(Location lastLocation) { + this.lastLocation = lastLocation; + } + + public Route getCurrentRoute() { + return currentRoute; + } + + public void setCurrentRoute(Route currentRoute) { + this.currentRoute = currentRoute; + } } diff --git a/app/src/main/java/com/a1/nextlocation/data/Location.java b/app/src/main/java/com/a1/nextlocation/data/Location.java index 2375e04..c1a822f 100644 --- a/app/src/main/java/com/a1/nextlocation/data/Location.java +++ b/app/src/main/java/com/a1/nextlocation/data/Location.java @@ -1,4 +1,31 @@ package com.a1.nextlocation.data; public class Location { + private String name; + private String coordinates; + private String description; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCoordinates() { + return coordinates; + } + + public void setCoordinates(String coordinates) { + this.coordinates = coordinates; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } } From b2d3364042b4b3716d574f31a8372f90082e9fdb Mon Sep 17 00:00:00 2001 From: Bipin Date: Mon, 14 Dec 2020 11:05:40 +0100 Subject: [PATCH 04/36] Edited themes --- app/src/main/res/values/themes.xml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 30a7222..2e220ef 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -2,15 +2,10 @@ \ No newline at end of file From a8add1f58ebd3f017bef9178e3d35ac04cb8e8de Mon Sep 17 00:00:00 2001 From: Bipin Date: Mon, 14 Dec 2020 11:09:39 +0100 Subject: [PATCH 05/36] [ADD]Colours to colors file --- app/src/main/res/values/colors.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f8c6127..7f3bc58 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -7,4 +7,7 @@ #FF018786 #FF000000 #FFFFFFFF + #115571 + #31AFB4 + #14212D \ No newline at end of file From 7666e2fc1a0af137bd277ea0ae0d98606623565d Mon Sep 17 00:00:00 2001 From: Robin Koedood Date: Mon, 14 Dec 2020 11:15:45 +0100 Subject: [PATCH 06/36] [ADD]Color in theme --- app/src/main/res/values/colors.xml | 6 +++--- app/src/main/res/values/themes.xml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 7f3bc58..cf6f6b1 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -7,7 +7,7 @@ #FF018786 #FF000000 #FFFFFFFF - #115571 - #31AFB4 - #14212D + #FF115571 + #FF31AFB4 + #FF14212D \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 2e220ef..4951880 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -2,10 +2,10 @@ \ No newline at end of file From 64c8b0591a56bac6b27bd30e302ffcd5c85ee607 Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Mon, 14 Dec 2020 11:16:40 +0100 Subject: [PATCH 07/36] [ADD] constructors --- .../java/com/a1/nextlocation/data/Coupon.java | 5 +++++ .../java/com/a1/nextlocation/data/FileIO.java | 8 ++++++++ .../java/com/a1/nextlocation/data/Route.java | 20 +++++++++++++------ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/a1/nextlocation/data/Coupon.java b/app/src/main/java/com/a1/nextlocation/data/Coupon.java index 5cfcece..6e50deb 100644 --- a/app/src/main/java/com/a1/nextlocation/data/Coupon.java +++ b/app/src/main/java/com/a1/nextlocation/data/Coupon.java @@ -5,6 +5,11 @@ public class Coupon { private String code; private String reward; + public Coupon(String code, String reward) { + this.code = code; + this.reward = reward; + } + public String getCode() { return code; } diff --git a/app/src/main/java/com/a1/nextlocation/data/FileIO.java b/app/src/main/java/com/a1/nextlocation/data/FileIO.java index 71c08f6..6d6d8f9 100644 --- a/app/src/main/java/com/a1/nextlocation/data/FileIO.java +++ b/app/src/main/java/com/a1/nextlocation/data/FileIO.java @@ -1,4 +1,12 @@ package com.a1.nextlocation.data; public class FileIO { + + public static void readFileData() { + + } + + public static void writeFileData() { + + } } 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 2714dab..ed5445a 100644 --- a/app/src/main/java/com/a1/nextlocation/data/Route.java +++ b/app/src/main/java/com/a1/nextlocation/data/Route.java @@ -1,5 +1,6 @@ package com.a1.nextlocation.data; +import java.util.ArrayList; import java.util.List; public class Route { @@ -8,6 +9,17 @@ public class Route { private float totalDistance; private int totalTime; + public Route(String name) { + + this.name = name; + this.locations = new ArrayList<>(); + + } + + public void addLocation(Location location) { + this.locations.add(location); + } + public String getName() { return name; } @@ -25,18 +37,14 @@ public class Route { } public float getTotalDistance() { + //TODO calculate total distance according to all locations in list return totalDistance; } - public void setTotalDistance(float totalDistance) { - this.totalDistance = totalDistance; - } public int getTotalTime() { + //TODO calculate total time according to all locations in list return totalTime; } - public void setTotalTime(int totalTime) { - this.totalTime = totalTime; - } } From c4fd44ad7607bb5fd003107a13a765aea40a5593 Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Mon, 14 Dec 2020 11:19:11 +0100 Subject: [PATCH 08/36] added room dependency --- app/build.gradle | 6 ++++++ app/src/main/java/com/a1/nextlocation/data/Coupon.java | 1 + 2 files changed, 7 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index a452ddc..be97688 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -30,6 +30,12 @@ android { dependencies { + def room_version = "2.2.5" + + implementation "androidx.room:room-runtime:$room_version" + annotationProcessor "androidx.room:room-compiler:$room_version" + + implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' diff --git a/app/src/main/java/com/a1/nextlocation/data/Coupon.java b/app/src/main/java/com/a1/nextlocation/data/Coupon.java index 6e50deb..06a9e23 100644 --- a/app/src/main/java/com/a1/nextlocation/data/Coupon.java +++ b/app/src/main/java/com/a1/nextlocation/data/Coupon.java @@ -5,6 +5,7 @@ public class Coupon { private String code; private String reward; + public Coupon(String code, String reward) { this.code = code; this.reward = reward; From 759772097ca5dc6f22aa68b0b1180d7e1d0a1423 Mon Sep 17 00:00:00 2001 From: Bipin Date: Mon, 14 Dec 2020 11:55:03 +0100 Subject: [PATCH 09/36] menu items added --- app/src/main/res/menu/navmenu.xml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 app/src/main/res/menu/navmenu.xml diff --git a/app/src/main/res/menu/navmenu.xml b/app/src/main/res/menu/navmenu.xml new file mode 100644 index 0000000..fe187c0 --- /dev/null +++ b/app/src/main/res/menu/navmenu.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From f4d74f988035232859be1a9999b724d132d79d0b Mon Sep 17 00:00:00 2001 From: Bipin Date: Mon, 14 Dec 2020 11:55:20 +0100 Subject: [PATCH 10/36] added menu items --- app/src/main/res/layout/activity_main.xml | 37 +++++++++++++++++++---- app/src/main/res/menu/navmenu.xml | 20 ++++++++++++ app/src/main/res/values/strings.xml | 4 +++ 3 files changed, 55 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4fc2444..0d171d6 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -6,13 +6,38 @@ android:layout_height="match_parent" tools:context=".MainActivity"> - + + + + + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:menu="@menu/navmenu" + /> \ No newline at end of file diff --git a/app/src/main/res/menu/navmenu.xml b/app/src/main/res/menu/navmenu.xml index fe187c0..eb1895a 100644 --- a/app/src/main/res/menu/navmenu.xml +++ b/app/src/main/res/menu/navmenu.xml @@ -1,4 +1,24 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 51a1649..64df6ce 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,4 +2,8 @@ Next Location Hello blank fragment + Locaties + Routes + Statistieken + Instellingen \ No newline at end of file From 08215e18c58a46ea0ac2b90eafacca2d4c8f1141 Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Mon, 14 Dec 2020 12:00:01 +0100 Subject: [PATCH 11/36] added database and coupon and route daos --- .../java/com/a1/nextlocation/data/Coupon.java | 31 ++++++++--- .../java/com/a1/nextlocation/data/Route.java | 29 +++++++++- .../a1/nextlocation/data/db/CouponDao.java | 31 +++++++++++ .../data/db/CouponRepository.java | 29 ++++++++++ .../com/a1/nextlocation/data/db/Database.java | 53 +++++++++++++++++++ .../com/a1/nextlocation/data/db/RouteDao.java | 30 +++++++++++ 6 files changed, 195 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/com/a1/nextlocation/data/db/CouponDao.java create mode 100644 app/src/main/java/com/a1/nextlocation/data/db/CouponRepository.java create mode 100644 app/src/main/java/com/a1/nextlocation/data/db/Database.java create mode 100644 app/src/main/java/com/a1/nextlocation/data/db/RouteDao.java diff --git a/app/src/main/java/com/a1/nextlocation/data/Coupon.java b/app/src/main/java/com/a1/nextlocation/data/Coupon.java index 06a9e23..14456a5 100644 --- a/app/src/main/java/com/a1/nextlocation/data/Coupon.java +++ b/app/src/main/java/com/a1/nextlocation/data/Coupon.java @@ -1,29 +1,48 @@ package com.a1.nextlocation.data; +import androidx.annotation.NonNull; +import androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +import org.jetbrains.annotations.NotNull; + +@Entity(tableName = "coupon") public class Coupon { + /** + * fields need to be public for the database to be able to use them + */ + @PrimaryKey + @NonNull + @ColumnInfo(name = "code") private String code; + + @ColumnInfo(name = "reward") + @NonNull private String reward; - public Coupon(String code, String reward) { + public Coupon(@NonNull String code, @NotNull String reward) { this.code = code; this.reward = reward; } + @NonNull public String getCode() { return code; } - public void setCode(String code) { - this.code = code; - } - + @NonNull public String getReward() { return reward; } - public void setReward(String reward) { + public void setCode(@NonNull String code) { + this.code = code; + } + + public void setReward(@NonNull String reward) { this.reward = reward; } } 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 ed5445a..5223e66 100644 --- a/app/src/main/java/com/a1/nextlocation/data/Route.java +++ b/app/src/main/java/com/a1/nextlocation/data/Route.java @@ -1,15 +1,31 @@ package com.a1.nextlocation.data; +import androidx.annotation.NonNull; +import androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +import org.jetbrains.annotations.NotNull; + import java.util.ArrayList; import java.util.List; +@Entity public class Route { + + @PrimaryKey + @NonNull private String name; + private List locations; + + @ColumnInfo(name = "total_distance") private float totalDistance; + + @ColumnInfo(name = "total_time") private int totalTime; - public Route(String name) { + public Route(@NotNull String name) { this.name = name; this.locations = new ArrayList<>(); @@ -20,11 +36,12 @@ public class Route { this.locations.add(location); } + @NotNull public String getName() { return name; } - public void setName(String name) { + public void setName(@NotNull String name) { this.name = name; } @@ -47,4 +64,12 @@ public class Route { return totalTime; } + public void setTotalDistance(float totalDistance) { + this.totalDistance = totalDistance; + } + + public void setTotalTime(int totalTime) { + this.totalTime = totalTime; + } + } diff --git a/app/src/main/java/com/a1/nextlocation/data/db/CouponDao.java b/app/src/main/java/com/a1/nextlocation/data/db/CouponDao.java new file mode 100644 index 0000000..c528c54 --- /dev/null +++ b/app/src/main/java/com/a1/nextlocation/data/db/CouponDao.java @@ -0,0 +1,31 @@ +package com.a1.nextlocation.data.db; + +import androidx.lifecycle.LiveData; +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.Coupon; + +import java.util.List; + +@Dao +public interface CouponDao { + @Insert(onConflict = OnConflictStrategy.REPLACE) + void insertAll(Coupon... coupons); + + @Query("DELETE FROM coupon") + void deleteAll(); + + @Query("SELECT * FROM coupon") + LiveData> selectAll(); + + /* + to add an observer to the livedata, you can use the example from https://medium.com/mindorks/using-room-database-with-livedata-android-jetpack-cbf89b677b47 + */ + + @Query("SELECT * FROM coupon WHERE code = :code LIMIT 1") + Coupon selectCouponByCode(String code); +} diff --git a/app/src/main/java/com/a1/nextlocation/data/db/CouponRepository.java b/app/src/main/java/com/a1/nextlocation/data/db/CouponRepository.java new file mode 100644 index 0000000..b34549a --- /dev/null +++ b/app/src/main/java/com/a1/nextlocation/data/db/CouponRepository.java @@ -0,0 +1,29 @@ +package com.a1.nextlocation.data.db; + +import android.app.Application; +import android.content.Context; + +import androidx.lifecycle.LiveData; + +import com.a1.nextlocation.data.Coupon; + +import java.util.List; + +public class CouponRepository { + private CouponDao mCouponDao; + private LiveData> mAllCoupons; + + public CouponRepository(Context context) { + Database db = Database.getDatabase(context); + mCouponDao = db.couponDao(); + mAllCoupons = mCouponDao.selectAll(); + } + + public LiveData> getAllCoupons() { + return mAllCoupons; + } + + public Coupon getCoupon(String code) { + return mCouponDao.selectCouponByCode(code); + } +} 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 new file mode 100644 index 0000000..7e1ca38 --- /dev/null +++ b/app/src/main/java/com/a1/nextlocation/data/db/Database.java @@ -0,0 +1,53 @@ +package com.a1.nextlocation.data.db; + +import android.content.Context; + +import androidx.annotation.NonNull; +import androidx.room.DatabaseConfiguration; +import androidx.room.InvalidationTracker; +import androidx.room.Room; +import androidx.room.RoomDatabase; +import androidx.sqlite.db.SupportSQLiteDatabase; +import androidx.sqlite.db.SupportSQLiteOpenHelper; + +import com.a1.nextlocation.data.Coupon; +import com.a1.nextlocation.data.Route; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +@androidx.room.Database(entities = {Coupon.class,Route.class},version = 1,exportSchema = false) +public abstract class Database extends RoomDatabase { + + public abstract RouteDao routeDao(); + public abstract CouponDao couponDao(); + + private static volatile Database INSTANCE; + private static final int NUMBER_OF_THREADS = 4; + static final ExecutorService databaseWriterExecutor = Executors.newFixedThreadPool(NUMBER_OF_THREADS); + + static Database getDatabase(final Context context) { + if (INSTANCE == null){ + synchronized (Database.class) { + if (INSTANCE == null) { + + INSTANCE = Room.databaseBuilder(context.getApplicationContext(), + Database.class,"next_location_db").addCallback(callback).build(); + } + } + } + return INSTANCE; + } + + private static RoomDatabase.Callback callback = new RoomDatabase.Callback() { + @Override + public void onCreate(@NonNull SupportSQLiteDatabase db) { + super.onCreate(db); + + databaseWriterExecutor.execute(() -> { + // TODO populate our database here + }); + + } + }; +} diff --git a/app/src/main/java/com/a1/nextlocation/data/db/RouteDao.java b/app/src/main/java/com/a1/nextlocation/data/db/RouteDao.java new file mode 100644 index 0000000..03e9bfe --- /dev/null +++ b/app/src/main/java/com/a1/nextlocation/data/db/RouteDao.java @@ -0,0 +1,30 @@ +package com.a1.nextlocation.data.db; + +import androidx.lifecycle.LiveData; +import androidx.room.Dao; +import androidx.room.Insert; +import androidx.room.Query; +import androidx.room.Update; + +import com.a1.nextlocation.data.Route; + +import java.util.List; + +@Dao +public interface RouteDao { + + @Insert + void insertAll(Route... routes); + + @Query("DELETE FROM route") + void deleteAll(); + + @Query("SELECT * FROM route") + LiveData> getAll(); + + @Update + void update(Route route); + + @Query("SELECT * FROM route where name = :name LIMIT 1") + Route getRouteByName(String name); +} From 204d45ceceb561ca49fcf147840e96bae00571df Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Mon, 14 Dec 2020 12:03:47 +0100 Subject: [PATCH 12/36] added packages for dao and repository --- .../com/a1/nextlocation/data/db/Database.java | 7 ++--- .../data/db/{ => dao}/CouponDao.java | 2 +- .../data/db/{ => dao}/RouteDao.java | 5 +--- .../{ => repositories}/CouponRepository.java | 5 ++-- .../data/db/repositories/RouteRepository.java | 30 +++++++++++++++++++ 5 files changed, 38 insertions(+), 11 deletions(-) rename app/src/main/java/com/a1/nextlocation/data/db/{ => dao}/CouponDao.java (95%) rename app/src/main/java/com/a1/nextlocation/data/db/{ => dao}/RouteDao.java (86%) rename app/src/main/java/com/a1/nextlocation/data/db/{ => repositories}/CouponRepository.java (81%) create mode 100644 app/src/main/java/com/a1/nextlocation/data/db/repositories/RouteRepository.java 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 7e1ca38..e7c97a7 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 @@ -3,15 +3,14 @@ package com.a1.nextlocation.data.db; import android.content.Context; import androidx.annotation.NonNull; -import androidx.room.DatabaseConfiguration; -import androidx.room.InvalidationTracker; import androidx.room.Room; import androidx.room.RoomDatabase; import androidx.sqlite.db.SupportSQLiteDatabase; -import androidx.sqlite.db.SupportSQLiteOpenHelper; import com.a1.nextlocation.data.Coupon; import com.a1.nextlocation.data.Route; +import com.a1.nextlocation.data.db.dao.CouponDao; +import com.a1.nextlocation.data.db.dao.RouteDao; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -26,7 +25,7 @@ public abstract class Database extends RoomDatabase { private static final int NUMBER_OF_THREADS = 4; static final ExecutorService databaseWriterExecutor = Executors.newFixedThreadPool(NUMBER_OF_THREADS); - static Database getDatabase(final Context context) { + public static Database getDatabase(final Context context) { if (INSTANCE == null){ synchronized (Database.class) { if (INSTANCE == null) { diff --git a/app/src/main/java/com/a1/nextlocation/data/db/CouponDao.java b/app/src/main/java/com/a1/nextlocation/data/db/dao/CouponDao.java similarity index 95% rename from app/src/main/java/com/a1/nextlocation/data/db/CouponDao.java rename to app/src/main/java/com/a1/nextlocation/data/db/dao/CouponDao.java index c528c54..ca68438 100644 --- a/app/src/main/java/com/a1/nextlocation/data/db/CouponDao.java +++ b/app/src/main/java/com/a1/nextlocation/data/db/dao/CouponDao.java @@ -1,4 +1,4 @@ -package com.a1.nextlocation.data.db; +package com.a1.nextlocation.data.db.dao; import androidx.lifecycle.LiveData; import androidx.room.Dao; diff --git a/app/src/main/java/com/a1/nextlocation/data/db/RouteDao.java b/app/src/main/java/com/a1/nextlocation/data/db/dao/RouteDao.java similarity index 86% rename from app/src/main/java/com/a1/nextlocation/data/db/RouteDao.java rename to app/src/main/java/com/a1/nextlocation/data/db/dao/RouteDao.java index 03e9bfe..4d30dc6 100644 --- a/app/src/main/java/com/a1/nextlocation/data/db/RouteDao.java +++ b/app/src/main/java/com/a1/nextlocation/data/db/dao/RouteDao.java @@ -1,4 +1,4 @@ -package com.a1.nextlocation.data.db; +package com.a1.nextlocation.data.db.dao; import androidx.lifecycle.LiveData; import androidx.room.Dao; @@ -22,9 +22,6 @@ public interface RouteDao { @Query("SELECT * FROM route") LiveData> getAll(); - @Update - void update(Route route); - @Query("SELECT * FROM route where name = :name LIMIT 1") Route getRouteByName(String name); } diff --git a/app/src/main/java/com/a1/nextlocation/data/db/CouponRepository.java b/app/src/main/java/com/a1/nextlocation/data/db/repositories/CouponRepository.java similarity index 81% rename from app/src/main/java/com/a1/nextlocation/data/db/CouponRepository.java rename to app/src/main/java/com/a1/nextlocation/data/db/repositories/CouponRepository.java index b34549a..8219799 100644 --- a/app/src/main/java/com/a1/nextlocation/data/db/CouponRepository.java +++ b/app/src/main/java/com/a1/nextlocation/data/db/repositories/CouponRepository.java @@ -1,11 +1,12 @@ -package com.a1.nextlocation.data.db; +package com.a1.nextlocation.data.db.repositories; -import android.app.Application; import android.content.Context; import androidx.lifecycle.LiveData; import com.a1.nextlocation.data.Coupon; +import com.a1.nextlocation.data.db.dao.CouponDao; +import com.a1.nextlocation.data.db.Database; import java.util.List; diff --git a/app/src/main/java/com/a1/nextlocation/data/db/repositories/RouteRepository.java b/app/src/main/java/com/a1/nextlocation/data/db/repositories/RouteRepository.java new file mode 100644 index 0000000..0247951 --- /dev/null +++ b/app/src/main/java/com/a1/nextlocation/data/db/repositories/RouteRepository.java @@ -0,0 +1,30 @@ +package com.a1.nextlocation.data.db.repositories; + +import android.content.Context; + +import androidx.lifecycle.LiveData; + +import com.a1.nextlocation.data.Route; +import com.a1.nextlocation.data.db.Database; +import com.a1.nextlocation.data.db.dao.RouteDao; + +import java.util.List; + +public class RouteRepository { + private RouteDao mRouteDao; + private LiveData> mAllRoutes; + + public RouteRepository(Context context) { + Database db = Database.getDatabase(context); + mRouteDao = db.routeDao(); + mAllRoutes = mRouteDao.getAll(); + } + + public LiveData> getAllRoutes() { + return mAllRoutes; + } + + public Route getRouteByName(String name) { + return mRouteDao.getRouteByName(name); + } +} From 19ae360ee08d23ce5ab5108f5b122425f86ddc2a Mon Sep 17 00:00:00 2001 From: Robin Koedood Date: Mon, 14 Dec 2020 12:06:25 +0100 Subject: [PATCH 13/36] [ADD] Settings fragment --- .../fragments/SettingsFragment.java | 12 +- app/src/main/res/layout/fragment_settings.xml | 205 +++++++++++++++++- 2 files changed, 210 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/a1/nextlocation/fragments/SettingsFragment.java b/app/src/main/java/com/a1/nextlocation/fragments/SettingsFragment.java index 92fa105..3d1a436 100644 --- a/app/src/main/java/com/a1/nextlocation/fragments/SettingsFragment.java +++ b/app/src/main/java/com/a1/nextlocation/fragments/SettingsFragment.java @@ -7,7 +7,10 @@ import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.Spinner; +import com.a1.nextlocation.MainActivity; import com.a1.nextlocation.R; public class SettingsFragment extends Fragment { @@ -15,13 +18,20 @@ public class SettingsFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment + View view = getView(); + Spinner dropdown = view.findViewById(R.id.dropdown_menu_Settings); + + String[] items = new String[]{"Nederlands", "Engels", "Chinees"}; + ArrayAdapter arrayAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_dropdown_item, items); + + dropdown.setAdapter(arrayAdapter); + return inflater.inflate(R.layout.fragment_settings, container, false); } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 453d34f..34cd007 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -1,14 +1,207 @@ - - + android:id="@+id/textView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:text="Settings" + android:textColor="@color/white" + android:textSize="30sp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 23d23bead4ef5b8194d32a1bf259c92782eec7a3 Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Mon, 14 Dec 2020 12:13:15 +0100 Subject: [PATCH 14/36] added location dao and repository --- .../com/a1/nextlocation/data/Location.java | 20 ++++++++++++- .../java/com/a1/nextlocation/data/Route.java | 2 +- .../com/a1/nextlocation/data/db/Database.java | 8 ++++- .../nextlocation/data/db/dao/LocationDao.java | 27 +++++++++++++++++ .../db/repositories/LocationRepository.java | 30 +++++++++++++++++++ 5 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/a1/nextlocation/data/db/dao/LocationDao.java create mode 100644 app/src/main/java/com/a1/nextlocation/data/db/repositories/LocationRepository.java diff --git a/app/src/main/java/com/a1/nextlocation/data/Location.java b/app/src/main/java/com/a1/nextlocation/data/Location.java index c1a822f..5f839ad 100644 --- a/app/src/main/java/com/a1/nextlocation/data/Location.java +++ b/app/src/main/java/com/a1/nextlocation/data/Location.java @@ -1,15 +1,33 @@ package com.a1.nextlocation.data; +import androidx.annotation.NonNull; +import androidx.room.Entity; +import androidx.room.PrimaryKey; + +import org.jetbrains.annotations.NotNull; + +@Entity(tableName = "location") public class Location { + + @PrimaryKey + @NonNull private String name; + private String coordinates; private String description; + public Location(@NotNull String name, String coordinates, String description) { + this.name = name; + this.coordinates = coordinates; + this.description = description; + } + + @NotNull public String getName() { return name; } - public void setName(String name) { + public void setName(@NotNull String name) { this.name = name; } 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 5223e66..c1d1bf0 100644 --- a/app/src/main/java/com/a1/nextlocation/data/Route.java +++ b/app/src/main/java/com/a1/nextlocation/data/Route.java @@ -10,7 +10,7 @@ import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; -@Entity +@Entity(tableName = "route") public class Route { @PrimaryKey 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 e7c97a7..7ab918c 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,18 +8,24 @@ import androidx.room.RoomDatabase; import androidx.sqlite.db.SupportSQLiteDatabase; import com.a1.nextlocation.data.Coupon; +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.LocationDao; import com.a1.nextlocation.data.db.dao.RouteDao; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -@androidx.room.Database(entities = {Coupon.class,Route.class},version = 1,exportSchema = false) +/** + * @author Sem + */ +@androidx.room.Database(entities = {Coupon.class,Route.class, Location.class},version = 1,exportSchema = false) public abstract class Database extends RoomDatabase { public abstract RouteDao routeDao(); public abstract CouponDao couponDao(); + public abstract LocationDao locationDao(); 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/dao/LocationDao.java b/app/src/main/java/com/a1/nextlocation/data/db/dao/LocationDao.java new file mode 100644 index 0000000..c0da25c --- /dev/null +++ b/app/src/main/java/com/a1/nextlocation/data/db/dao/LocationDao.java @@ -0,0 +1,27 @@ +package com.a1.nextlocation.data.db.dao; + +import androidx.lifecycle.LiveData; +import androidx.room.Dao; +import androidx.room.Insert; +import androidx.room.OnConflictStrategy; +import androidx.room.Query; + +import com.a1.nextlocation.data.Location; + +import java.util.List; + +@Dao +public interface LocationDao { + @Insert(onConflict = OnConflictStrategy.REPLACE) + void insertAll(Location... locations); + + @Query("DELETE FROM location") + void deleteAll(); + + @Query("SELECT * FROM location") + LiveData> selectAll(); + + @Query("SELECT * FROM location WHERE name = :name LIMIT 1") + Location getLocationByName(String name); + +} diff --git a/app/src/main/java/com/a1/nextlocation/data/db/repositories/LocationRepository.java b/app/src/main/java/com/a1/nextlocation/data/db/repositories/LocationRepository.java new file mode 100644 index 0000000..7cdb548 --- /dev/null +++ b/app/src/main/java/com/a1/nextlocation/data/db/repositories/LocationRepository.java @@ -0,0 +1,30 @@ +package com.a1.nextlocation.data.db.repositories; + +import android.content.Context; + +import androidx.lifecycle.LiveData; + +import com.a1.nextlocation.data.Location; +import com.a1.nextlocation.data.db.Database; +import com.a1.nextlocation.data.db.dao.LocationDao; + +import java.util.List; + +public class LocationRepository { + private LocationDao mLocationDao; + private LiveData> mAllLocations; + + public LocationRepository(Context context) { + Database db = Database.getDatabase(context); + mLocationDao = db.locationDao(); + mAllLocations = mLocationDao.selectAll(); + } + + public LiveData> getAllLocations() { + return mAllLocations; + } + + public Location getLocationByName(String name) { + return mLocationDao.getLocationByName(name); + } +} From 6b97c21a8b266a5d35f1d5f4a1153e5a8e53241d Mon Sep 17 00:00:00 2001 From: Sem van der Hoeven Date: Mon, 14 Dec 2020 12:16:39 +0100 Subject: [PATCH 15/36] added ignores to fields that dont need to be in the database --- app/src/main/java/com/a1/nextlocation/data/Data.java | 8 ++++++++ 1 file changed, 8 insertions(+) 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 a16b52e..fa53418 100644 --- a/app/src/main/java/com/a1/nextlocation/data/Data.java +++ b/app/src/main/java/com/a1/nextlocation/data/Data.java @@ -1,5 +1,7 @@ package com.a1.nextlocation.data; +import androidx.room.Ignore; + import java.util.List; public class Data { @@ -7,8 +9,14 @@ public class Data { private int locationsVisited; private int totalTime; private List couponList; + + @Ignore private Location nextLocation; + + @Ignore private Location lastLocation; + + @Ignore private Route currentRoute; From a2365d1c1946199c860a1e87d4c20dc3733a2eef Mon Sep 17 00:00:00 2001 From: Robin Koedood Date: Mon, 14 Dec 2020 12:20:51 +0100 Subject: [PATCH 16/36] [ADD] Statistieken en settings fragments --- app/src/main/res/layout/fragment_settings.xml | 13 +- .../main/res/layout/fragment_statistic.xml | 224 +++++++++++++++++- 2 files changed, 228 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 34cd007..c1ad1cb 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -7,6 +7,16 @@ android:background="@color/primaryColour" tools:context=".fragments.SettingsFragment"> +