diff --git a/android/app/build.gradle b/android/app/build.gradle
index 7df7c843..440624fe 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -40,6 +40,8 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
+ implementation 'androidx.legacy:legacy-support-v4:1.0.0'
+ implementation 'org.jetbrains:annotations:15.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
@@ -64,4 +66,11 @@ dependencies {
// PDF reader Library
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
+
+ // Bubble Navigation - Bottom Navigation
+ implementation 'com.gauravk.bubblenavigation:bubblenavigation:1.0.7'
+
+ // Android Chart Library For Statistics
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
+
}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index a3fef807..05a5f289 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -10,10 +10,9 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Aether">
-
+
-
diff --git a/android/app/src/main/java/life/nsu/aether/SplashActivity.java b/android/app/src/main/java/life/nsu/aether/SplashActivity.java
index 533d6d8d..cb7503c1 100644
--- a/android/app/src/main/java/life/nsu/aether/SplashActivity.java
+++ b/android/app/src/main/java/life/nsu/aether/SplashActivity.java
@@ -8,12 +8,14 @@
package life.nsu.aether;
+import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
import life.nsu.aether.viewModels.SplashActivityViewModel;
+import life.nsu.aether.views.home.HomeActivity;
public class SplashActivity extends AppCompatActivity {
@@ -26,5 +28,7 @@ protected void onCreate(Bundle savedInstanceState) {
viewModel = new ViewModelProvider(this).get(SplashActivityViewModel.class);
+ // Temporary redirect for test purposes
+ startActivity(new Intent(this, HomeActivity.class));
}
}
\ No newline at end of file
diff --git a/android/app/src/main/java/life/nsu/aether/utils/adapters/HomePageFragmentSliderAdapter.java b/android/app/src/main/java/life/nsu/aether/utils/adapters/HomePageFragmentSliderAdapter.java
new file mode 100644
index 00000000..014d5b8b
--- /dev/null
+++ b/android/app/src/main/java/life/nsu/aether/utils/adapters/HomePageFragmentSliderAdapter.java
@@ -0,0 +1,36 @@
+/*
+ * HomePageFragmentSliderAdapter Created by Samiur Prapon
+ * Last modified 24/7/21, 3:02 pm
+ * Copyright (c) 2021. All rights reserved.
+ *
+ */
+
+package life.nsu.aether.utils.adapters;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentStatePagerAdapter;
+
+import java.util.ArrayList;
+
+public class HomePageFragmentSliderAdapter extends FragmentStatePagerAdapter {
+
+ ArrayList fragments;
+
+ public HomePageFragmentSliderAdapter(ArrayList fragments, FragmentManager fm, int behavior) {
+ super(fm, behavior);
+ this.fragments = fragments;
+ }
+
+ @NonNull
+ @Override
+ public Fragment getItem(int position) {
+ return fragments.get(position);
+ }
+
+ @Override
+ public int getCount() {
+ return fragments.size();
+ }
+}
diff --git a/android/app/src/main/java/life/nsu/aether/views/RegistrationActivity.java b/android/app/src/main/java/life/nsu/aether/views/RegistrationActivity.java
index 418ca409..a8b727b0 100644
--- a/android/app/src/main/java/life/nsu/aether/views/RegistrationActivity.java
+++ b/android/app/src/main/java/life/nsu/aether/views/RegistrationActivity.java
@@ -61,7 +61,6 @@ protected void onCreate(Bundle savedInstanceState) {
// mSignUp.setError(null);
new Handler(Looper.myLooper()).postDelayed(() -> {
viewModel.register(email, password, type);
-
// loadingDialog.hide();
}, 250);
diff --git a/android/app/src/main/java/life/nsu/aether/views/fragments/ClassesFragment.java b/android/app/src/main/java/life/nsu/aether/views/fragments/ClassesFragment.java
new file mode 100644
index 00000000..e083d35b
--- /dev/null
+++ b/android/app/src/main/java/life/nsu/aether/views/fragments/ClassesFragment.java
@@ -0,0 +1,73 @@
+/*
+ * ClassesFragment Created by Samiur Prapon
+ * Last modified 17/7/21, 11:12 am
+ * Copyright (c) 2021. All rights reserved.
+ *
+ */
+
+package life.nsu.aether.views.fragments;
+
+import android.os.Bundle;
+
+import androidx.fragment.app.Fragment;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import life.nsu.aether.R;
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Use the {@link ClassesFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class ClassesFragment extends Fragment {
+
+ // TODO: Rename parameter arguments, choose names that match
+ // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+ // TODO: Rename and change types of parameters
+ private String mParam1;
+ private String mParam2;
+
+ public ClassesFragment() {
+ // Required empty public constructor
+ }
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment ClassesFragment.
+ */
+ // TODO: Rename and change types and number of parameters
+ public static ClassesFragment newInstance(String param1, String param2) {
+ ClassesFragment fragment = new ClassesFragment();
+ Bundle args = new Bundle();
+ args.putString(ARG_PARAM1, param1);
+ args.putString(ARG_PARAM2, param2);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ mParam1 = getArguments().getString(ARG_PARAM1);
+ mParam2 = getArguments().getString(ARG_PARAM2);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_classes, container, false);
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/java/life/nsu/aether/views/fragments/CoursesFragment.java b/android/app/src/main/java/life/nsu/aether/views/fragments/CoursesFragment.java
new file mode 100644
index 00000000..29c68b27
--- /dev/null
+++ b/android/app/src/main/java/life/nsu/aether/views/fragments/CoursesFragment.java
@@ -0,0 +1,73 @@
+/*
+ * CoursesFragment Created by Samiur Prapon
+ * Last modified 17/7/21, 11:12 am
+ * Copyright (c) 2021. All rights reserved.
+ *
+ */
+
+package life.nsu.aether.views.fragments;
+
+import android.os.Bundle;
+
+import androidx.fragment.app.Fragment;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import life.nsu.aether.R;
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Use the {@link CoursesFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class CoursesFragment extends Fragment {
+
+ // TODO: Rename parameter arguments, choose names that match
+ // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+ // TODO: Rename and change types of parameters
+ private String mParam1;
+ private String mParam2;
+
+ public CoursesFragment() {
+ // Required empty public constructor
+ }
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment CoursesFragment.
+ */
+ // TODO: Rename and change types and number of parameters
+ public static CoursesFragment newInstance(String param1, String param2) {
+ CoursesFragment fragment = new CoursesFragment();
+ Bundle args = new Bundle();
+ args.putString(ARG_PARAM1, param1);
+ args.putString(ARG_PARAM2, param2);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ mParam1 = getArguments().getString(ARG_PARAM1);
+ mParam2 = getArguments().getString(ARG_PARAM2);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_courses, container, false);
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/java/life/nsu/aether/views/fragments/ExamFragment.java b/android/app/src/main/java/life/nsu/aether/views/fragments/ExamFragment.java
new file mode 100644
index 00000000..6a41b9ef
--- /dev/null
+++ b/android/app/src/main/java/life/nsu/aether/views/fragments/ExamFragment.java
@@ -0,0 +1,73 @@
+/*
+ * ExamFragment Created by Samiur Prapon
+ * Last modified 17/7/21, 11:12 am
+ * Copyright (c) 2021. All rights reserved.
+ *
+ */
+
+package life.nsu.aether.views.fragments;
+
+import android.os.Bundle;
+
+import androidx.fragment.app.Fragment;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import life.nsu.aether.R;
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Use the {@link ExamFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class ExamFragment extends Fragment {
+
+ // TODO: Rename parameter arguments, choose names that match
+ // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+ // TODO: Rename and change types of parameters
+ private String mParam1;
+ private String mParam2;
+
+ public ExamFragment() {
+ // Required empty public constructor
+ }
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment ExamFragment.
+ */
+ // TODO: Rename and change types and number of parameters
+ public static ExamFragment newInstance(String param1, String param2) {
+ ExamFragment fragment = new ExamFragment();
+ Bundle args = new Bundle();
+ args.putString(ARG_PARAM1, param1);
+ args.putString(ARG_PARAM2, param2);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ mParam1 = getArguments().getString(ARG_PARAM1);
+ mParam2 = getArguments().getString(ARG_PARAM2);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_exam, container, false);
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/java/life/nsu/aether/views/fragments/HomeFragment.java b/android/app/src/main/java/life/nsu/aether/views/fragments/HomeFragment.java
new file mode 100644
index 00000000..14acc099
--- /dev/null
+++ b/android/app/src/main/java/life/nsu/aether/views/fragments/HomeFragment.java
@@ -0,0 +1,153 @@
+/*
+ * HomeFragment Created by Sharif Rafid
+ * Last modified 17/7/21, 11:11 am
+ * Copyright (c) 2021. All rights reserved.
+ *
+ */
+
+package life.nsu.aether.views.fragments;
+
+import android.graphics.Color;
+import android.graphics.Typeface;
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Spinner;
+
+import com.github.mikephil.charting.charts.LineChart;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.data.Entry;
+import com.github.mikephil.charting.data.LineData;
+import com.github.mikephil.charting.data.LineDataSet;
+import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
+import com.github.mikephil.charting.utils.ColorTemplate;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+
+import life.nsu.aether.R;
+
+public class HomeFragment extends Fragment {
+
+ private Spinner dateTypesSpinner;
+ private LineChart lineChart;
+
+ public HomeFragment() {
+ // Required empty public constructor
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_home, container, false);
+ }
+
+ @Override
+ public void onViewCreated(@NonNull @org.jetbrains.annotations.NotNull View view, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
+ // When the view is created we can start working with the fragment
+ initiliazeVariables(view);
+ initializeLogic();
+ }
+
+ private void initializeLogic() {
+ loadSpinnerData();
+ loadChartGraphData();
+ }
+
+ private void loadChartGraphData() {
+// apply styling
+ // lineChart.setValueTypeface(mTf);
+ lineChart.getDescription().setEnabled(false);
+ lineChart.setDrawGridBackground(false);
+
+ Typeface mTf = Typeface.MONOSPACE;
+
+ XAxis xAxis = lineChart.getXAxis();
+ xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
+ xAxis.setTypeface(mTf);
+ xAxis.setDrawGridLines(false);
+ xAxis.setDrawAxisLine(true);
+
+ YAxis leftAxis = lineChart.getAxisLeft();
+ leftAxis.setTypeface(mTf);
+ leftAxis.setLabelCount(5, false);
+ leftAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
+
+ YAxis rightAxis = lineChart.getAxisRight();
+ rightAxis.setTypeface(mTf);
+ rightAxis.setLabelCount(5, false);
+ rightAxis.setDrawGridLines(false);
+ rightAxis.setAxisMinimum(0f); // this replaces setStartAtZero(true)
+
+ // set data
+ lineChart.setData((LineData) generateDataLine(5));
+
+ // do not forget to refresh the chart
+ // lineChart.invalidate();
+ lineChart.animateX(750);
+ }
+
+ private LineData generateDataLine(int cnt) {
+
+ ArrayList values1 = new ArrayList<>();
+
+ for (int i = 0; i < 12; i++) {
+ values1.add(new Entry(i, (int) (Math.random() * 65) + 40));
+ }
+
+ LineDataSet d1 = new LineDataSet(values1, "New DataSet " + cnt + ", (1)");
+ d1.setLineWidth(2.5f);
+ d1.setCircleRadius(4.5f);
+ d1.setHighLightColor(Color.BLACK);
+ d1.setMode(LineDataSet.Mode.CUBIC_BEZIER);
+ d1.setCircleColor(Color.rgb(245,245,247));
+ d1.setCircleHoleColor(Color.rgb(245,245,247));
+ d1.setDrawValues(false);
+
+ ArrayList sets = new ArrayList<>();
+ sets.add(d1);
+
+ return new LineData(sets);
+ }
+
+ private void loadSpinnerData() {
+ ArrayList dateTypesArrayList = new ArrayList();
+ dateTypesArrayList.add("Daily");
+ dateTypesArrayList.add("Weekly");
+ dateTypesArrayList.add("Monthly");
+ dateTypesArrayList.add("Yearly");
+ ArrayAdapter spinnerAdapter = new ArrayAdapter(getActivity(), R.layout.custom_spinner_view,
+ dateTypesArrayList);
+ spinnerAdapter.setDropDownViewResource(R.layout.custom_spinner_item_view);
+ dateTypesSpinner.setAdapter(spinnerAdapter);
+ dateTypesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView> parent, View view, int position, long id) {
+ switch (position){
+ case 0 :
+ }
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parent) {
+
+ }
+ });
+ }
+
+ private void initiliazeVariables(@NotNull View view) {
+ dateTypesSpinner = view.findViewById(R.id.spinner_1);
+ lineChart = view.findViewById(R.id.chart);
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/java/life/nsu/aether/views/fragments/MoreFragment.java b/android/app/src/main/java/life/nsu/aether/views/fragments/MoreFragment.java
new file mode 100644
index 00000000..2b7b86a7
--- /dev/null
+++ b/android/app/src/main/java/life/nsu/aether/views/fragments/MoreFragment.java
@@ -0,0 +1,73 @@
+/*
+ * MoreFragment Created by Sharif Rafid
+ * Last modified 25/7/21, 11:07 pm
+ * Copyright (c) 2021. All rights reserved.
+ *
+ */
+
+package life.nsu.aether.views.fragments;
+
+import android.os.Bundle;
+
+import androidx.fragment.app.Fragment;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import life.nsu.aether.R;
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Use the {@link MoreFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class MoreFragment extends Fragment {
+
+ // TODO: Rename parameter arguments, choose names that match
+ // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+ // TODO: Rename and change types of parameters
+ private String mParam1;
+ private String mParam2;
+
+ public MoreFragment() {
+ // Required empty public constructor
+ }
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment MoreFragment.
+ */
+ // TODO: Rename and change types and number of parameters
+ public static MoreFragment newInstance(String param1, String param2) {
+ MoreFragment fragment = new MoreFragment();
+ Bundle args = new Bundle();
+ args.putString(ARG_PARAM1, param1);
+ args.putString(ARG_PARAM2, param2);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ mParam1 = getArguments().getString(ARG_PARAM1);
+ mParam2 = getArguments().getString(ARG_PARAM2);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_more, container, false);
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/java/life/nsu/aether/views/home/HomeActivity.java b/android/app/src/main/java/life/nsu/aether/views/home/HomeActivity.java
new file mode 100644
index 00000000..020d19c0
--- /dev/null
+++ b/android/app/src/main/java/life/nsu/aether/views/home/HomeActivity.java
@@ -0,0 +1,106 @@
+/*
+ * HomeActivity Created by Sharif Rafid
+ * Last modified 17/7/21, 10:46 am
+ * Copyright (c) 2021. All rights reserved.
+ *
+ */
+
+package life.nsu.aether.views.home;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentStatePagerAdapter;
+import androidx.viewpager.widget.ViewPager;
+
+import android.os.Bundle;
+import android.view.View;
+
+import com.gauravk.bubblenavigation.BubbleNavigationLinearView;
+import com.gauravk.bubblenavigation.BubbleToggleView;
+import com.gauravk.bubblenavigation.listener.BubbleNavigationChangeListener;
+
+import java.util.ArrayList;
+
+import life.nsu.aether.R;
+import life.nsu.aether.utils.adapters.HomePageFragmentSliderAdapter;
+import life.nsu.aether.views.fragments.ClassesFragment;
+import life.nsu.aether.views.fragments.CoursesFragment;
+import life.nsu.aether.views.fragments.ExamFragment;
+import life.nsu.aether.views.fragments.HomeFragment;
+import life.nsu.aether.views.fragments.MoreFragment;
+
+import static androidx.fragment.app.FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT;
+
+public class HomeActivity extends AppCompatActivity {
+
+ private ViewPager fragmentContainerViewPagerHome;
+ private BubbleNavigationLinearView bubbleNavigationLinearViewHome;
+ private BubbleToggleView bubbleToggleViewHome, bubbleToggleViewBooks, bubbleToggleViewClass, bubbleToggleViewExam, bubbleToggleViewMore;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_home);
+ initializeVariables();
+ initiateLogics();
+ }
+
+ private void initiateLogics() {
+ loadViewPagerAndFragments();
+ }
+
+ private void loadViewPagerAndFragments() {
+ //Adding the fragments to array list
+ ArrayList fragmentArrayList = new ArrayList<>();
+ fragmentArrayList.add(new HomeFragment());
+ fragmentArrayList.add(new CoursesFragment());
+ fragmentArrayList.add(new ClassesFragment());
+ fragmentArrayList.add(new ExamFragment());
+ fragmentArrayList.add(new MoreFragment());
+
+ //Creating adapter for viewpager for showing the fragments
+ HomePageFragmentSliderAdapter homePageFragmentSliderAdapter = new HomePageFragmentSliderAdapter(fragmentArrayList, getSupportFragmentManager(), BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
+
+ // Setting the adapter
+ fragmentContainerViewPagerHome.setAdapter(homePageFragmentSliderAdapter);
+
+ // This listener is mainly for changing the state of the bottom navigation view item states
+ // When the user swipes the view and navigates throughout the fragment
+ fragmentContainerViewPagerHome.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ // Changing the state of the navigation view
+ bubbleNavigationLinearViewHome.setCurrentActiveItem(position);
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+
+ }
+ });
+
+ //This is also for the same reason changing the state of the viewpager when the nav item changes
+ bubbleNavigationLinearViewHome.setNavigationChangeListener(new BubbleNavigationChangeListener() {
+ @Override
+ public void onNavigationChanged(View view, int position) {
+ //Setting the fragment to the view pager
+ fragmentContainerViewPagerHome.setCurrentItem(position);
+ }
+ });
+ }
+
+ private void initializeVariables() {
+ fragmentContainerViewPagerHome = findViewById(R.id.fragment_container_view_pager);
+ bubbleNavigationLinearViewHome = findViewById(R.id.bottom_navigation_view_container);
+ bubbleToggleViewHome = findViewById(R.id.bottom_navigation_view_item_home);
+ bubbleToggleViewBooks = findViewById(R.id.bottom_navigation_view_item_books);
+ bubbleToggleViewClass = findViewById(R.id.bottom_navigation_view_item_class);
+ bubbleToggleViewExam = findViewById(R.id.bottom_navigation_view_item_exam);
+ bubbleToggleViewMore = findViewById(R.id.bottom_navigation_view_item_more);
+ }
+}
\ No newline at end of file
diff --git a/android/app/src/main/res/drawable/bubble_bottom_navigation_item_transition_background_item.xml b/android/app/src/main/res/drawable/bubble_bottom_navigation_item_transition_background_item.xml
new file mode 100644
index 00000000..f413fea8
--- /dev/null
+++ b/android/app/src/main/res/drawable/bubble_bottom_navigation_item_transition_background_item.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/drawable/curved_home_item_bg.xml b/android/app/src/main/res/drawable/curved_home_item_bg.xml
new file mode 100644
index 00000000..21c99614
--- /dev/null
+++ b/android/app/src/main/res/drawable/curved_home_item_bg.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/drawable/curved_white_image_item_bg.xml b/android/app/src/main/res/drawable/curved_white_image_item_bg.xml
new file mode 100644
index 00000000..93485ced
--- /dev/null
+++ b/android/app/src/main/res/drawable/curved_white_image_item_bg.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/drawable/home_background_oval.xml b/android/app/src/main/res/drawable/home_background_oval.xml
new file mode 100644
index 00000000..6ac960da
--- /dev/null
+++ b/android/app/src/main/res/drawable/home_background_oval.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/drawable/home_page_person_character_image.xml b/android/app/src/main/res/drawable/home_page_person_character_image.xml
new file mode 100644
index 00000000..33fd12f1
--- /dev/null
+++ b/android/app/src/main/res/drawable/home_page_person_character_image.xml
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/res/drawable/ic_arrows.xml b/android/app/src/main/res/drawable/ic_arrows.xml
new file mode 100644
index 00000000..4989da4b
--- /dev/null
+++ b/android/app/src/main/res/drawable/ic_arrows.xml
@@ -0,0 +1,16 @@
+
+
+
+
diff --git a/android/app/src/main/res/drawable/ic_books.xml b/android/app/src/main/res/drawable/ic_books.xml
new file mode 100644
index 00000000..2d0d8972
--- /dev/null
+++ b/android/app/src/main/res/drawable/ic_books.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
diff --git a/android/app/src/main/res/drawable/ic_books__1_.xml b/android/app/src/main/res/drawable/ic_books__1_.xml
new file mode 100644
index 00000000..c7fad628
--- /dev/null
+++ b/android/app/src/main/res/drawable/ic_books__1_.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/res/drawable/ic_classroom.xml b/android/app/src/main/res/drawable/ic_classroom.xml
new file mode 100644
index 00000000..87038520
--- /dev/null
+++ b/android/app/src/main/res/drawable/ic_classroom.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/android/app/src/main/res/drawable/ic_drop_down_24.xml b/android/app/src/main/res/drawable/ic_drop_down_24.xml
new file mode 100644
index 00000000..3abc794f
--- /dev/null
+++ b/android/app/src/main/res/drawable/ic_drop_down_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/android/app/src/main/res/drawable/ic_home.xml b/android/app/src/main/res/drawable/ic_home.xml
new file mode 100644
index 00000000..7a3c6c10
--- /dev/null
+++ b/android/app/src/main/res/drawable/ic_home.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/android/app/src/main/res/drawable/ic_more.xml b/android/app/src/main/res/drawable/ic_more.xml
new file mode 100644
index 00000000..55d4be8f
--- /dev/null
+++ b/android/app/src/main/res/drawable/ic_more.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/android/app/src/main/res/drawable/ic_test.xml b/android/app/src/main/res/drawable/ic_test.xml
new file mode 100644
index 00000000..17b412fe
--- /dev/null
+++ b/android/app/src/main/res/drawable/ic_test.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/res/drawable/spinner_bg.xml b/android/app/src/main/res/drawable/spinner_bg.xml
new file mode 100644
index 00000000..8877b8dd
--- /dev/null
+++ b/android/app/src/main/res/drawable/spinner_bg.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/font/baloobhai_regular.ttf b/android/app/src/main/res/font/baloobhai_regular.ttf
new file mode 100644
index 00000000..18c4ae55
Binary files /dev/null and b/android/app/src/main/res/font/baloobhai_regular.ttf differ
diff --git a/android/app/src/main/res/layout/activity_home.xml b/android/app/src/main/res/layout/activity_home.xml
new file mode 100644
index 00000000..371f6eff
--- /dev/null
+++ b/android/app/src/main/res/layout/activity_home.xml
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/layout/custom_spinner_item_view.xml b/android/app/src/main/res/layout/custom_spinner_item_view.xml
new file mode 100644
index 00000000..9a9d19a9
--- /dev/null
+++ b/android/app/src/main/res/layout/custom_spinner_item_view.xml
@@ -0,0 +1,17 @@
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/layout/custom_spinner_view.xml b/android/app/src/main/res/layout/custom_spinner_view.xml
new file mode 100644
index 00000000..b8439679
--- /dev/null
+++ b/android/app/src/main/res/layout/custom_spinner_view.xml
@@ -0,0 +1,16 @@
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/layout/fragment_classes.xml b/android/app/src/main/res/layout/fragment_classes.xml
new file mode 100644
index 00000000..567f3930
--- /dev/null
+++ b/android/app/src/main/res/layout/fragment_classes.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/layout/fragment_courses.xml b/android/app/src/main/res/layout/fragment_courses.xml
new file mode 100644
index 00000000..94336bdb
--- /dev/null
+++ b/android/app/src/main/res/layout/fragment_courses.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/layout/fragment_exam.xml b/android/app/src/main/res/layout/fragment_exam.xml
new file mode 100644
index 00000000..d207ac12
--- /dev/null
+++ b/android/app/src/main/res/layout/fragment_exam.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/layout/fragment_home.xml b/android/app/src/main/res/layout/fragment_home.xml
new file mode 100644
index 00000000..948d0a9a
--- /dev/null
+++ b/android/app/src/main/res/layout/fragment_home.xml
@@ -0,0 +1,273 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/layout/fragment_more.xml b/android/app/src/main/res/layout/fragment_more.xml
new file mode 100644
index 00000000..5a845fea
--- /dev/null
+++ b/android/app/src/main/res/layout/fragment_more.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml
index 01146b07..0a9cc966 100644
--- a/android/app/src/main/res/values/colors.xml
+++ b/android/app/src/main/res/values/colors.xml
@@ -335,4 +335,12 @@
#212121
#1a1a1a
+ #F37172
+ #FFFFFF
+ #FFFFFF
+ #4DFFFFFF
+ #F5F5F7
+ #1D1D1D
+ #F3F3F3
+
\ No newline at end of file
diff --git a/android/app/src/main/res/values/dimens.xml b/android/app/src/main/res/values/dimens.xml
new file mode 100644
index 00000000..006e82e8
--- /dev/null
+++ b/android/app/src/main/res/values/dimens.xml
@@ -0,0 +1,10 @@
+
+
+
+ 8dp
+
\ No newline at end of file
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index 6b3dcfc9..27f99e4b 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -19,5 +19,13 @@
Already a member?
Sign in
Forget Password?
+
+ Hello blank fragment
+
+ Home
+ Courses
+ Class
+ Exam
+ More
\ No newline at end of file
diff --git a/android/app/src/main/res/values/themes.xml b/android/app/src/main/res/values/themes.xml
index e4efeb09..7277066b 100644
--- a/android/app/src/main/res/values/themes.xml
+++ b/android/app/src/main/res/values/themes.xml
@@ -21,4 +21,13 @@
- true
+
\ No newline at end of file
diff --git a/android/build.gradle b/android/build.gradle
index 82681e4c..05e7b0ba 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -23,6 +23,7 @@ allprojects {
repositories {
google()
jcenter()
+ maven { url 'https://jitpack.io' }
}
}