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' } } }