diff --git a/app/build.gradle b/app/build.gradle
index 75ac6a0..2006b06 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -42,6 +42,10 @@ dependencies {
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
+ //Lombok
+ implementation 'org.projectlombok:lombok:1.18.20'
+ annotationProcessor 'org.projectlombok:lombok:1.18.20'
+
//Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4c736d3..435ed0c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,36 +1,40 @@
-
+ package="eu.csc.personalapp">
+ android:allowBackup="true"
+ android:icon="@mipmap/ic_launcher"
+ android:label="@string/app_name"
+ android:roundIcon="@mipmap/ic_launcher_round"
+ android:supportsRtl="true"
+ android:theme="@style/Theme.PersonalApp">
-
-
-
-
-
-
+ android:name=".ui.main.MainActivity"
+ android:label="@string/title_activity_main"
-
+ android:theme="@style/Theme.PersonalApp.NoActionBar">
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/eu/csc/personalapp/services/rest/RetrofitApiClient.java b/app/src/main/java/eu/csc/personalapp/services/rest/RetrofitApiClient.java
index 55d85fe..ab10c97 100644
--- a/app/src/main/java/eu/csc/personalapp/services/rest/RetrofitApiClient.java
+++ b/app/src/main/java/eu/csc/personalapp/services/rest/RetrofitApiClient.java
@@ -1,4 +1,17 @@
package eu.csc.personalapp.services.rest;
+import eu.csc.personalapp.services.rest.data.APICustomer;
+import io.reactivex.Single;
+import retrofit2.http.GET;
+import retrofit2.http.Path;
+import retrofit2.http.Query;
+
+
public interface RetrofitApiClient {
+
+ @GET("person/{customer}")
+ Single getPersonData(@Path("customer") int personId,
+ @Query("api_key") String apiKey);
+
+
}
diff --git a/app/src/main/java/eu/csc/personalapp/services/rest/RetrofitApiClientFactory.java b/app/src/main/java/eu/csc/personalapp/services/rest/RetrofitApiClientFactory.java
index 1a1034b..3df89da 100644
--- a/app/src/main/java/eu/csc/personalapp/services/rest/RetrofitApiClientFactory.java
+++ b/app/src/main/java/eu/csc/personalapp/services/rest/RetrofitApiClientFactory.java
@@ -23,6 +23,4 @@ public class RetrofitApiClientFactory {
return retrofit.create(RetrofitApiClient.class);
}
-
-
}
diff --git a/app/src/main/java/eu/csc/personalapp/services/rest/data/APICustomer.java b/app/src/main/java/eu/csc/personalapp/services/rest/data/APICustomer.java
new file mode 100644
index 0000000..dd82f78
--- /dev/null
+++ b/app/src/main/java/eu/csc/personalapp/services/rest/data/APICustomer.java
@@ -0,0 +1,20 @@
+package eu.csc.personalapp.services.rest.data;
+
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+@Getter
+@Setter
+public class APICustomer implements Serializable {
+
+ private String login;
+ private String firstname;
+ private String lastname;
+ private String email;
+
+
+
+}
diff --git a/app/src/main/java/eu/csc/personalapp/services/rest/data/ApiCustomerVehicle.java b/app/src/main/java/eu/csc/personalapp/services/rest/data/ApiCustomerVehicle.java
new file mode 100644
index 0000000..b0e882a
--- /dev/null
+++ b/app/src/main/java/eu/csc/personalapp/services/rest/data/ApiCustomerVehicle.java
@@ -0,0 +1,21 @@
+package eu.csc.personalapp.services.rest.data;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.NonNull;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+@Getter
+@Setter
+@NoArgsConstructor
+public class ApiCustomerVehicle implements Serializable {
+
+ private String model;
+ private String brand;
+ private byte[] image;
+ private String vin;
+ private String licensePlate;
+
+}
diff --git a/app/src/main/java/eu/csc/personalapp/services/rest/data/ApiEventUploadRequest.java b/app/src/main/java/eu/csc/personalapp/services/rest/data/ApiEventUploadRequest.java
new file mode 100644
index 0000000..e2b52c5
--- /dev/null
+++ b/app/src/main/java/eu/csc/personalapp/services/rest/data/ApiEventUploadRequest.java
@@ -0,0 +1,22 @@
+package eu.csc.personalapp.services.rest.data;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.io.File;
+import java.io.Serializable;
+
+@Getter
+@Setter
+@NoArgsConstructor
+public class ApiEventUploadRequest implements Serializable {
+
+
+ private byte[] eventFile;
+
+ public ApiEventUploadRequest(byte[] eventFile) {
+ this.eventFile = eventFile;
+ }
+
+}
diff --git a/app/src/main/java/eu/csc/personalapp/services/rest/data/ApiEventUploadResponse.java b/app/src/main/java/eu/csc/personalapp/services/rest/data/ApiEventUploadResponse.java
new file mode 100644
index 0000000..e3a8ce9
--- /dev/null
+++ b/app/src/main/java/eu/csc/personalapp/services/rest/data/ApiEventUploadResponse.java
@@ -0,0 +1,18 @@
+package eu.csc.personalapp.services.rest.data;
+
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+@Getter
+@Setter
+@NoArgsConstructor
+public class ApiEventUploadResponse implements Serializable {
+
+ private String pin;
+ private String message;
+ private boolean success;
+
+}
diff --git a/app/src/main/java/eu/csc/personalapp/ui/login/LoginActivity.java b/app/src/main/java/eu/csc/personalapp/ui/login/LoginActivity.java
index 1971ac2..78228b7 100644
--- a/app/src/main/java/eu/csc/personalapp/ui/login/LoginActivity.java
+++ b/app/src/main/java/eu/csc/personalapp/ui/login/LoginActivity.java
@@ -117,6 +117,8 @@ public class LoginActivity extends AppCompatActivity {
private void updateUiWithUser(LoggedInUserView model) {
String welcome = getString(R.string.welcome) + model.getDisplayName();
+
+
// TODO : initiate successful logged in experience
Toast.makeText(getApplicationContext(), welcome, Toast.LENGTH_LONG).show();
}
diff --git a/app/src/main/java/eu/csc/personalapp/ui/main/MainActivity.java b/app/src/main/java/eu/csc/personalapp/ui/main/MainActivity.java
new file mode 100644
index 0000000..06c3a40
--- /dev/null
+++ b/app/src/main/java/eu/csc/personalapp/ui/main/MainActivity.java
@@ -0,0 +1,65 @@
+package eu.csc.personalapp.ui.main;
+
+import android.os.Bundle;
+import android.view.View;
+import android.view.Menu;
+
+import com.google.android.material.floatingactionbutton.FloatingActionButton;
+import com.google.android.material.snackbar.Snackbar;
+import com.google.android.material.navigation.NavigationView;
+
+import androidx.navigation.NavController;
+import androidx.navigation.Navigation;
+import androidx.navigation.ui.AppBarConfiguration;
+import androidx.navigation.ui.NavigationUI;
+import androidx.drawerlayout.widget.DrawerLayout;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
+
+import eu.csc.personalapp.R;
+
+public class MainActivity extends AppCompatActivity {
+
+ private AppBarConfiguration mAppBarConfiguration;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ Toolbar toolbar = findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
+ FloatingActionButton fab = findViewById(R.id.fab);
+ fab.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
+ .setAction("Action", null).show();
+ }
+ });
+ DrawerLayout drawer = findViewById(R.id.drawer_layout);
+ NavigationView navigationView = findViewById(R.id.nav_view);
+ // Passing each menu ID as a set of Ids because each
+ // menu should be considered as top level destinations.
+ mAppBarConfiguration = new AppBarConfiguration.Builder(
+ R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
+ .setDrawerLayout(drawer)
+ .build();
+ NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
+ NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
+ NavigationUI.setupWithNavController(navigationView, navController);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.main, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onSupportNavigateUp() {
+ NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
+ return NavigationUI.navigateUp(navController, mAppBarConfiguration)
+ || super.onSupportNavigateUp();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/eu/csc/personalapp/ui/main/gallery/GalleryFragment.java b/app/src/main/java/eu/csc/personalapp/ui/main/gallery/GalleryFragment.java
new file mode 100644
index 0000000..d8cde19
--- /dev/null
+++ b/app/src/main/java/eu/csc/personalapp/ui/main/gallery/GalleryFragment.java
@@ -0,0 +1,35 @@
+package eu.csc.personalapp.ui.main.gallery;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.lifecycle.Observer;
+import androidx.lifecycle.ViewModelProvider;
+
+import eu.csc.personalapp.R;
+
+
+public class GalleryFragment extends Fragment {
+
+ private GalleryViewModel galleryViewModel;
+
+ public View onCreateView(@NonNull LayoutInflater inflater,
+ ViewGroup container, Bundle savedInstanceState) {
+ galleryViewModel = new ViewModelProvider(this).get(GalleryViewModel.class);
+ View root = inflater.inflate(R.layout.fragment_gallery, container, false);
+ final TextView textView = root.findViewById(R.id.text_gallery);
+ galleryViewModel.getText().observe(getViewLifecycleOwner(), new Observer() {
+ @Override
+ public void onChanged(@Nullable String s) {
+ textView.setText(s);
+ }
+ });
+ return root;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/eu/csc/personalapp/ui/main/gallery/GalleryViewModel.java b/app/src/main/java/eu/csc/personalapp/ui/main/gallery/GalleryViewModel.java
new file mode 100644
index 0000000..5bbdb80
--- /dev/null
+++ b/app/src/main/java/eu/csc/personalapp/ui/main/gallery/GalleryViewModel.java
@@ -0,0 +1,19 @@
+package eu.csc.personalapp.ui.main.gallery;
+
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+import androidx.lifecycle.ViewModel;
+
+public class GalleryViewModel extends ViewModel {
+
+ private MutableLiveData mText;
+
+ public GalleryViewModel() {
+ mText = new MutableLiveData<>();
+ mText.setValue("This is gallery fragment");
+ }
+
+ public LiveData getText() {
+ return mText;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/eu/csc/personalapp/ui/main/home/HomeFragment.java b/app/src/main/java/eu/csc/personalapp/ui/main/home/HomeFragment.java
new file mode 100644
index 0000000..469784f
--- /dev/null
+++ b/app/src/main/java/eu/csc/personalapp/ui/main/home/HomeFragment.java
@@ -0,0 +1,36 @@
+package eu.csc.personalapp.ui.main.home;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.lifecycle.Observer;
+import androidx.lifecycle.ViewModelProvider;
+
+import eu.csc.personalapp.R;
+
+
+public class HomeFragment extends Fragment {
+
+ private HomeViewModel homeViewModel;
+
+ public View onCreateView(@NonNull LayoutInflater inflater,
+ ViewGroup container, Bundle savedInstanceState) {
+ homeViewModel =
+ new ViewModelProvider(this).get(HomeViewModel.class);
+ View root = inflater.inflate(R.layout.fragment_home, container, false);
+ final TextView textView = root.findViewById(R.id.text_home);
+ homeViewModel.getText().observe(getViewLifecycleOwner(), new Observer() {
+ @Override
+ public void onChanged(@Nullable String s) {
+ textView.setText(s);
+ }
+ });
+ return root;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/eu/csc/personalapp/ui/main/home/HomeViewModel.java b/app/src/main/java/eu/csc/personalapp/ui/main/home/HomeViewModel.java
new file mode 100644
index 0000000..066ab8a
--- /dev/null
+++ b/app/src/main/java/eu/csc/personalapp/ui/main/home/HomeViewModel.java
@@ -0,0 +1,19 @@
+package eu.csc.personalapp.ui.main.home;
+
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+import androidx.lifecycle.ViewModel;
+
+public class HomeViewModel extends ViewModel {
+
+ private MutableLiveData mText;
+
+ public HomeViewModel() {
+ mText = new MutableLiveData<>();
+ mText.setValue("This is home fragment");
+ }
+
+ public LiveData getText() {
+ return mText;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/eu/csc/personalapp/ui/main/slideshow/SlideshowFragment.java b/app/src/main/java/eu/csc/personalapp/ui/main/slideshow/SlideshowFragment.java
new file mode 100644
index 0000000..0d327e3
--- /dev/null
+++ b/app/src/main/java/eu/csc/personalapp/ui/main/slideshow/SlideshowFragment.java
@@ -0,0 +1,36 @@
+package eu.csc.personalapp.ui.main.slideshow;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.lifecycle.Observer;
+import androidx.lifecycle.ViewModelProvider;
+
+import eu.csc.personalapp.R;
+
+
+public class SlideshowFragment extends Fragment {
+
+ private SlideshowViewModel slideshowViewModel;
+
+ public View onCreateView(@NonNull LayoutInflater inflater,
+ ViewGroup container, Bundle savedInstanceState) {
+ slideshowViewModel =
+ new ViewModelProvider(this).get(SlideshowViewModel.class);
+ View root = inflater.inflate(R.layout.fragment_slideshow, container, false);
+ final TextView textView = root.findViewById(R.id.text_slideshow);
+ slideshowViewModel.getText().observe(getViewLifecycleOwner(), new Observer() {
+ @Override
+ public void onChanged(@Nullable String s) {
+ textView.setText(s);
+ }
+ });
+ return root;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/eu/csc/personalapp/ui/main/slideshow/SlideshowViewModel.java b/app/src/main/java/eu/csc/personalapp/ui/main/slideshow/SlideshowViewModel.java
new file mode 100644
index 0000000..1433636
--- /dev/null
+++ b/app/src/main/java/eu/csc/personalapp/ui/main/slideshow/SlideshowViewModel.java
@@ -0,0 +1,19 @@
+package eu.csc.personalapp.ui.main.slideshow;
+
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+import androidx.lifecycle.ViewModel;
+
+public class SlideshowViewModel extends ViewModel {
+
+ private MutableLiveData mText;
+
+ public SlideshowViewModel() {
+ mText = new MutableLiveData<>();
+ mText.setValue("This is slideshow fragment");
+ }
+
+ public LiveData getText() {
+ return mText;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v21/ic_menu_camera.xml b/app/src/main/res/drawable-v21/ic_menu_camera.xml
new file mode 100644
index 0000000..634fe92
--- /dev/null
+++ b/app/src/main/res/drawable-v21/ic_menu_camera.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable-v21/ic_menu_gallery.xml b/app/src/main/res/drawable-v21/ic_menu_gallery.xml
new file mode 100644
index 0000000..03c7709
--- /dev/null
+++ b/app/src/main/res/drawable-v21/ic_menu_gallery.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable-v21/ic_menu_slideshow.xml b/app/src/main/res/drawable-v21/ic_menu_slideshow.xml
new file mode 100644
index 0000000..5e9e163
--- /dev/null
+++ b/app/src/main/res/drawable-v21/ic_menu_slideshow.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml
new file mode 100644
index 0000000..6d81870
--- /dev/null
+++ b/app/src/main/res/drawable/side_nav_bar.xml
@@ -0,0 +1,9 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..01e2945
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_register.xml b/app/src/main/res/layout/activity_register.xml
new file mode 100644
index 0000000..08e75fd
--- /dev/null
+++ b/app/src/main/res/layout/activity_register.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml
new file mode 100644
index 0000000..6c0126b
--- /dev/null
+++ b/app/src/main/res/layout/app_bar_main.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml
new file mode 100644
index 0000000..04b67fd
--- /dev/null
+++ b/app/src/main/res/layout/content_main.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_first.xml b/app/src/main/res/layout/fragment_first.xml
index eea7f45..d2accdf 100644
--- a/app/src/main/res/layout/fragment_first.xml
+++ b/app/src/main/res/layout/fragment_first.xml
@@ -7,23 +7,92 @@
android:layout_height="match_parent"
tools:context=".FirstFragment">
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+