From 1896c410a370d65e66ac596fbb3f8f603344c119 Mon Sep 17 00:00:00 2001 From: yb Date: Tue, 4 May 2021 03:01:43 +0200 Subject: [PATCH] init --- app/build.gradle | 4 + app/src/main/AndroidManifest.xml | 50 +++++----- .../services/rest/RetrofitApiClient.java | 13 +++ .../rest/RetrofitApiClientFactory.java | 2 - .../services/rest/data/APICustomer.java | 20 ++++ .../rest/data/ApiCustomerVehicle.java | 21 +++++ .../rest/data/ApiEventUploadRequest.java | 22 +++++ .../rest/data/ApiEventUploadResponse.java | 18 ++++ .../personalapp/ui/login/LoginActivity.java | 2 + .../csc/personalapp/ui/main/MainActivity.java | 65 +++++++++++++ .../ui/main/gallery/GalleryFragment.java | 35 +++++++ .../ui/main/gallery/GalleryViewModel.java | 19 ++++ .../ui/main/home/HomeFragment.java | 36 +++++++ .../ui/main/home/HomeViewModel.java | 19 ++++ .../ui/main/slideshow/SlideshowFragment.java | 36 +++++++ .../ui/main/slideshow/SlideshowViewModel.java | 19 ++++ .../main/res/drawable-v21/ic_menu_camera.xml | 12 +++ .../main/res/drawable-v21/ic_menu_gallery.xml | 9 ++ .../res/drawable-v21/ic_menu_slideshow.xml | 9 ++ app/src/main/res/drawable/side_nav_bar.xml | 9 ++ app/src/main/res/layout/activity_main.xml | 24 +++++ app/src/main/res/layout/activity_register.xml | 67 +++++++++++++ app/src/main/res/layout/app_bar_main.xml | 33 +++++++ app/src/main/res/layout/content_main.xml | 20 ++++ app/src/main/res/layout/fragment_first.xml | 93 ++++++++++++++++--- app/src/main/res/layout/fragment_gallery.xml | 22 +++++ app/src/main/res/layout/fragment_home.xml | 22 +++++ .../main/res/layout/fragment_slideshow.xml | 22 +++++ app/src/main/res/layout/nav_header_main.xml | 35 +++++++ .../main/res/menu/activity_main_drawer.xml | 20 ++++ app/src/main/res/menu/main.xml | 9 ++ .../main/res/navigation/mobile_navigation.xml | 25 +++++ app/src/main/res/values/dimens.xml | 2 + app/src/main/res/values/drawables.xml | 8 ++ app/src/main/res/values/strings.xml | 11 +++ app/src/main/res/values/themes.xml | 7 +- gradlew | 0 37 files changed, 801 insertions(+), 39 deletions(-) create mode 100644 app/src/main/java/eu/csc/personalapp/services/rest/data/APICustomer.java create mode 100644 app/src/main/java/eu/csc/personalapp/services/rest/data/ApiCustomerVehicle.java create mode 100644 app/src/main/java/eu/csc/personalapp/services/rest/data/ApiEventUploadRequest.java create mode 100644 app/src/main/java/eu/csc/personalapp/services/rest/data/ApiEventUploadResponse.java create mode 100644 app/src/main/java/eu/csc/personalapp/ui/main/MainActivity.java create mode 100644 app/src/main/java/eu/csc/personalapp/ui/main/gallery/GalleryFragment.java create mode 100644 app/src/main/java/eu/csc/personalapp/ui/main/gallery/GalleryViewModel.java create mode 100644 app/src/main/java/eu/csc/personalapp/ui/main/home/HomeFragment.java create mode 100644 app/src/main/java/eu/csc/personalapp/ui/main/home/HomeViewModel.java create mode 100644 app/src/main/java/eu/csc/personalapp/ui/main/slideshow/SlideshowFragment.java create mode 100644 app/src/main/java/eu/csc/personalapp/ui/main/slideshow/SlideshowViewModel.java create mode 100644 app/src/main/res/drawable-v21/ic_menu_camera.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_gallery.xml create mode 100644 app/src/main/res/drawable-v21/ic_menu_slideshow.xml create mode 100644 app/src/main/res/drawable/side_nav_bar.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/activity_register.xml create mode 100644 app/src/main/res/layout/app_bar_main.xml create mode 100644 app/src/main/res/layout/content_main.xml create mode 100644 app/src/main/res/layout/fragment_gallery.xml create mode 100644 app/src/main/res/layout/fragment_home.xml create mode 100644 app/src/main/res/layout/fragment_slideshow.xml create mode 100644 app/src/main/res/layout/nav_header_main.xml create mode 100644 app/src/main/res/menu/activity_main_drawer.xml create mode 100644 app/src/main/res/menu/main.xml create mode 100644 app/src/main/res/navigation/mobile_navigation.xml create mode 100644 app/src/main/res/values/drawables.xml mode change 100755 => 100644 gradlew 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 @@ + + + + + + + + + +