1 Commits

Author SHA1 Message Date
Sem van der Hoeven
0b9bba63a3 added all daos 2020-12-14 15:07:53 +01:00
15 changed files with 190 additions and 204 deletions

View File

@@ -35,6 +35,8 @@ dependencies {
implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$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 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1' implementation 'com.google.android.material:material:1.2.1'

View File

@@ -1,23 +1,34 @@
package com.a1.nextlocation.data; package com.a1.nextlocation.data;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity; import androidx.room.Entity;
import androidx.room.Ignore; import androidx.room.Ignore;
import androidx.room.PrimaryKey; import androidx.room.PrimaryKey;
import androidx.room.TypeConverters;
import com.a1.nextlocation.data.db.CouponListTypeConverter;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@Entity @Entity(tableName = "userdata")
public class Data { public class Data {
@PrimaryKey @PrimaryKey
@NonNull @NonNull
@ColumnInfo(name = "distance_traveled")
private float distanceTraveled; private float distanceTraveled;
@ColumnInfo(name = "locations_visited")
private int locationsVisited; private int locationsVisited;
@ColumnInfo(name = "total_time")
private int totalTime; private int totalTime;
@TypeConverters(CouponListTypeConverter.class)
private List<Coupon> couponList; private List<Coupon> couponList;
@Ignore @Ignore
@@ -34,6 +45,7 @@ public class Data {
this.distanceTraveled = 0; this.distanceTraveled = 0;
this.locationsVisited = 0; this.locationsVisited = 0;
this.totalTime = 0; this.totalTime = 0;
couponList = new ArrayList<>();
} }

View File

@@ -4,6 +4,9 @@ import androidx.annotation.NonNull;
import androidx.room.ColumnInfo; import androidx.room.ColumnInfo;
import androidx.room.Entity; import androidx.room.Entity;
import androidx.room.PrimaryKey; import androidx.room.PrimaryKey;
import androidx.room.TypeConverters;
import com.a1.nextlocation.data.db.LocationListTypeConverter;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -17,6 +20,7 @@ public class Route {
@NonNull @NonNull
private String name; private String name;
@TypeConverters(LocationListTypeConverter.class)
private List<Location> locations; private List<Location> locations;
@ColumnInfo(name = "total_distance") @ColumnInfo(name = "total_distance")

View File

@@ -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<Coupon> toRoutesList(String data) {
if (data == null) {
return Collections.emptyList();
}
Type listType = new TypeToken<List<Coupon>>() {}.getType();
return gson.fromJson(data,listType);
}
@TypeConverter
public static String fromRoutesList(List<Coupon> list) {
return gson.toJson(list);
}
}

View File

@@ -8,9 +8,11 @@ import androidx.room.RoomDatabase;
import androidx.sqlite.db.SupportSQLiteDatabase; import androidx.sqlite.db.SupportSQLiteDatabase;
import com.a1.nextlocation.data.Coupon; import com.a1.nextlocation.data.Coupon;
import com.a1.nextlocation.data.Data;
import com.a1.nextlocation.data.Location; import com.a1.nextlocation.data.Location;
import com.a1.nextlocation.data.Route; import com.a1.nextlocation.data.Route;
import com.a1.nextlocation.data.db.dao.CouponDao; 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.LocationDao;
import com.a1.nextlocation.data.db.dao.RouteDao; import com.a1.nextlocation.data.db.dao.RouteDao;
@@ -20,12 +22,13 @@ import java.util.concurrent.Executors;
/** /**
* @author Sem * @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 class Database extends RoomDatabase {
public abstract RouteDao routeDao(); public abstract RouteDao routeDao();
public abstract CouponDao couponDao(); public abstract CouponDao couponDao();
public abstract LocationDao locationDao(); public abstract LocationDao locationDao();
public abstract DataDao dataDao();
private static volatile Database INSTANCE; private static volatile Database INSTANCE;
private static final int NUMBER_OF_THREADS = 4; private static final int NUMBER_OF_THREADS = 4;

View File

@@ -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<Location> toLocationList(String data) {
if (data == null) {
return Collections.emptyList();
}
Type listType = new TypeToken<List<Location>>() {}.getType();
return gson.fromJson(data,listType);
}
@TypeConverter
public static String fromLocationList(List<Location> list) {
return gson.toJson(list);
}
}

View File

@@ -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();
}

View File

@@ -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;
}
}

View File

@@ -1,10 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M8,5v14l11,-7z"/>
</vector>

View File

@@ -1,83 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/primaryColour"
tools:context=".fragments.RouteDetailFragment">
<ImageButton
android:id="@+id/routeDetailBackButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="@drawable/ic_back_button_24"
app:layout_constraintBottom_toBottomOf="@+id/routeTitle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/routeTitle"
app:layout_constraintEnd_toStartOf="@id/routeTitle"
/>
<TextView
android:id="@+id/routeTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="250dp"
android:text="titel"
android:textSize="20sp"
app:layout_constraintBottom_toTopOf="@+id/routeDetailImage"
app:layout_constraintEnd_toStartOf="@+id/routeDetailText"
app:layout_constraintStart_toEndOf="@id/routeDetailBackButton"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/routeDetailImage"
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_marginEnd="350dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/routeDetailText"
android:layout_width="0dp"
android:layout_height="10dp"
android:layout_marginStart="50dp"
android:layout_marginEnd="50dp"
android:layout_marginBottom="200dp"
android:text=""
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/routeDetailImage"
app:layout_constraintTop_toTopOf="parent" />
<ImageButton
android:id="@+id/startRouteButton"
android:src="@drawable/ic_baseline_play_arrow_24"
android:backgroundTint="@color/primaryColour"
android:scaleX="5"
android:scaleY="5"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_marginStart="350dp"
app:layout_constraintBottom_toBottomOf="@+id/startRouteText"
app:layout_constraintEnd_toStartOf="@id/startRouteText"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/startRouteText" />
<TextView
android:id="@+id/startRouteText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:text="@string/start_route"
android:textSize="50sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/startRouteButton"
app:layout_constraintTop_toBottomOf="@id/routeDetailImage" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -31,14 +31,16 @@
<TextView <TextView
android:id="@+id/detail_location_text" android:id="@+id/detail_location_text"
android:layout_width="match_parent" android:layout_width="378dp"
android:layout_margin="20dp" android:layout_height="379dp"
android:layout_height="wrap_content"
android:background="@color/secondaryColour" android:background="@color/secondaryColour"
android:text="Detail tekst" android:text="Detail tekst"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.484"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/detail_location_image" /> app:layout_constraintTop_toBottomOf="@+id/detail_location_image"
app:layout_constraintVertical_bias="0.446" />
<ImageButton <ImageButton
android:id="@+id/detail_location_back_button" android:id="@+id/detail_location_back_button"

View File

@@ -1,40 +1,48 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/primaryColour" android:background="@color/primaryColour"
tools:context=".fragments.RouteFragment"> tools:context=".fragments.RouteFragment">
<ImageButton <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/routeBackButton" android:layout_width="match_parent"
android:layout_width="wrap_content" android:layout_height="match_parent">
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="@drawable/ic_back_button_24"
android:text="Back"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView <ImageButton
android:id="@+id/routeTitle" android:id="@+id/routeBackButton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="9dp" android:background="@drawable/ic_back_button_24"
android:text="titel" android:backgroundTint="@color/buttonColour"
android:textSize="20sp" android:text="Back"
app:layout_constraintStart_toEndOf="@id/routeBackButton" android:layout_margin="10dp"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.recyclerview.widget.RecyclerView <TextView
android:id="@+id/routeListRV" android:id="@+id/routeTitle"
android:layout_width="0dp" android:layout_width="wrap_content"
android:layout_height="0dp" android:layout_height="wrap_content"
android:background="@color/primaryColour" android:text="titel"
app:layout_constraintBottom_toBottomOf="parent" android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent" android:layout_margin="9dp"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toEndOf="@id/routeBackButton"
app:layout_constraintTop_toBottomOf="@+id/routeBackButton" /> app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout> <androidx.recyclerview.widget.RecyclerView
android:id="@+id/routeListRV"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/primaryColour"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/routeBackButton" />
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>

View File

@@ -1,81 +1,14 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/primaryColour"
tools:context=".fragments.RouteDetailFragment"> tools:context=".fragments.RouteDetailFragment">
<ImageButton <!-- TODO: Update blank fragment layout -->
android:id="@+id/routeDetailBackButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="100dp"
android:background="@drawable/ic_back_button_24"
app:layout_constraintBottom_toBottomOf="@id/routeTitle"
app:layout_constraintEnd_toStartOf="@id/routeTitle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/routeTitle" />
<TextView <TextView
android:id="@+id/routeTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="titel"
android:textSize="20sp"
app:layout_constraintBottom_toTopOf="@+id/routeDetailImage"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_margin="40dp"
android:id="@+id/routeDetailImage"
app:layout_constraintTop_toBottomOf="@id/routeDetailBackButton"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/routeDetailText"
/>
<TextView
android:id="@+id/routeDetailText"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:layout_marginHorizontal="20dp" android:text="@string/hello_blank_fragment" />
android:layout_marginBottom="100dp"
app:layout_constraintBottom_toTopOf="@id/startRouteText"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/routeDetailImage" />
<ImageButton </FrameLayout>
android:id="@+id/startRouteButton"
android:backgroundTint="@color/primaryColour"
android:scaleX="5"
android:scaleY="5"
android:layout_width="70dp"
android:layout_height="70dp"
android:layout_margin="20dp"
app:layout_constraintBottom_toBottomOf="@+id/startRouteText"
app:layout_constraintEnd_toStartOf="@+id/startRouteText"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/startRouteText"
android:src="@drawable/ic_baseline_play_arrow_24"
/>
<TextView
android:id="@+id/startRouteText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:text="@string/start_route"
android:textSize="50sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/startRouteButton"
app:layout_constraintTop_toBottomOf="@id/routeDetailText" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -16,5 +16,4 @@
<string name="totale_tijd">Totale tijd:</string> <string name="totale_tijd">Totale tijd:</string>
<string name="coupons_gespaard">Coupons gespaard:</string> <string name="coupons_gespaard">Coupons gespaard:</string>
<string name="coupons">Coupons</string> <string name="coupons">Coupons</string>
<string name="start_route">Start Route</string>
</resources> </resources>

View File

@@ -1,6 +1,6 @@
#Tue Dec 08 10:31:45 CET 2020 #Mon Dec 14 14:48:57 CET 2020
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists 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