diff --git a/.idea/misc.xml b/.idea/misc.xml index d5d35ec..860da66 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + diff --git a/app/build.gradle b/app/build.gradle index 4935f4d..bae8461 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,6 +26,9 @@ sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + buildFeatures { + viewBinding true + } } dependencies { @@ -33,6 +36,10 @@ implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.1' + implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1' + implementation 'androidx.navigation:navigation-fragment:2.3.5' + implementation 'androidx.navigation:navigation-ui:2.3.5' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 30db0fc..7959094 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,19 +3,22 @@ package="org.ntlab.acanthus_client"> - + + diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/MainActivity.java b/app/src/main/java/org/ntlab/acanthus_client/views/MainActivity.java index 03b3e4c..c5cbeb8 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/MainActivity.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/MainActivity.java @@ -1,16 +1,39 @@ package org.ntlab.acanthus_client.views; -import androidx.appcompat.app.AppCompatActivity; - import android.os.Bundle; +import com.google.android.material.bottomnavigation.BottomNavigationView; + import org.ntlab.acanthus_client.R; +import org.ntlab.acanthus_client.databinding.ActivityMain3Binding; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.navigation.NavController; +import androidx.navigation.Navigation; +import androidx.navigation.ui.AppBarConfiguration; +import androidx.navigation.ui.NavigationUI; + public class MainActivity extends AppCompatActivity { + private ActivityMain3Binding binding; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); + + binding = ActivityMain3Binding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + BottomNavigationView navView = findViewById(R.id.nav_view); + // Passing each menu ID as a set of Ids because each + // menu should be considered as top level destinations. + AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder( + R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications) + .build(); + NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main3); + NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration); + NavigationUI.setupWithNavController(binding.navView, navController); } + } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/ui/dashboard/DashboardFragment.java b/app/src/main/java/org/ntlab/acanthus_client/views/ui/dashboard/DashboardFragment.java new file mode 100644 index 0000000..fa3b1b0 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/ui/dashboard/DashboardFragment.java @@ -0,0 +1,46 @@ +package org.ntlab.acanthus_client.views.ui.dashboard; + +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 org.ntlab.acanthus_client.databinding.FragmentDashboardBinding; +import org.ntlab.acanthus_client.R; + +public class DashboardFragment extends Fragment { + + private DashboardViewModel dashboardViewModel; + private FragmentDashboardBinding binding; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + dashboardViewModel = + new ViewModelProvider(this).get(DashboardViewModel.class); + + binding = FragmentDashboardBinding.inflate(inflater, container, false); + View root = binding.getRoot(); + + final TextView textView = binding.textDashboard; + dashboardViewModel.getText().observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(@Nullable String s) { + textView.setText(s); + } + }); + return root; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/ui/dashboard/DashboardViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/ui/dashboard/DashboardViewModel.java new file mode 100644 index 0000000..0ad27f4 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/ui/dashboard/DashboardViewModel.java @@ -0,0 +1,19 @@ +package org.ntlab.acanthus_client.views.ui.dashboard; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class DashboardViewModel extends ViewModel { + + private MutableLiveData mText; + + public DashboardViewModel() { + mText = new MutableLiveData<>(); + mText.setValue("This is dashboard fragment"); + } + + public LiveData getText() { + return mText; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/ui/home/HomeFragment.java b/app/src/main/java/org/ntlab/acanthus_client/views/ui/home/HomeFragment.java new file mode 100644 index 0000000..9089874 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/ui/home/HomeFragment.java @@ -0,0 +1,47 @@ +package org.ntlab.acanthus_client.views.ui.home; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import org.ntlab.acanthus_client.databinding.FragmentHomeBinding; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import org.ntlab.acanthus_client.R; + +public class HomeFragment extends Fragment { + + private HomeViewModel homeViewModel; + private FragmentHomeBinding binding; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + homeViewModel = + new ViewModelProvider(this).get(HomeViewModel.class); + + binding = FragmentHomeBinding.inflate(inflater, container, false); + View root = binding.getRoot(); + + final TextView textView = binding.textHome; + homeViewModel.getText().observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(@Nullable String s) { + textView.setText(s); + } + }); + return root; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/ui/home/HomeViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/ui/home/HomeViewModel.java new file mode 100644 index 0000000..7336f79 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/ui/home/HomeViewModel.java @@ -0,0 +1,19 @@ +package org.ntlab.acanthus_client.views.ui.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/org/ntlab/acanthus_client/views/ui/notifications/NotificationsFragment.java b/app/src/main/java/org/ntlab/acanthus_client/views/ui/notifications/NotificationsFragment.java new file mode 100644 index 0000000..5a7134f --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/ui/notifications/NotificationsFragment.java @@ -0,0 +1,46 @@ +package org.ntlab.acanthus_client.views.ui.notifications; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import org.ntlab.acanthus_client.databinding.FragmentNotificationsBinding; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; +import org.ntlab.acanthus_client.R; + +public class NotificationsFragment extends Fragment { + + private NotificationsViewModel notificationsViewModel; + private FragmentNotificationsBinding binding; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + notificationsViewModel = + new ViewModelProvider(this).get(NotificationsViewModel.class); + + binding = FragmentNotificationsBinding.inflate(inflater, container, false); + View root = binding.getRoot(); + + final TextView textView = binding.textNotifications; + notificationsViewModel.getText().observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(@Nullable String s) { + textView.setText(s); + } + }); + return root; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } +} \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/ui/notifications/NotificationsViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/ui/notifications/NotificationsViewModel.java new file mode 100644 index 0000000..13680c3 --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/ui/notifications/NotificationsViewModel.java @@ -0,0 +1,19 @@ +package org.ntlab.acanthus_client.views.ui.notifications; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class NotificationsViewModel extends ViewModel { + + private MutableLiveData mText; + + public NotificationsViewModel() { + mText = new MutableLiveData<>(); + mText.setValue("This is notifications fragment"); + } + + public LiveData getText() { + return mText; + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_dashboard_black_24dp.xml b/app/src/main/res/drawable/ic_dashboard_black_24dp.xml new file mode 100644 index 0000000..46fc8de --- /dev/null +++ b/app/src/main/res/drawable/ic_dashboard_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_black_24dp.xml b/app/src/main/res/drawable/ic_home_black_24dp.xml new file mode 100644 index 0000000..f8bb0b5 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_notifications_black_24dp.xml b/app/src/main/res/drawable/ic_notifications_black_24dp.xml new file mode 100644 index 0000000..78b75c3 --- /dev/null +++ b/app/src/main/res/drawable/ic_notifications_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_main3.xml b/app/src/main/res/layout/activity_main3.xml new file mode 100644 index 0000000..631f7b1 --- /dev/null +++ b/app/src/main/res/layout/activity_main3.xml @@ -0,0 +1,33 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_dashboard.xml b/app/src/main/res/layout/fragment_dashboard.xml new file mode 100644 index 0000000..edccbdb --- /dev/null +++ b/app/src/main/res/layout/fragment_dashboard.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml new file mode 100644 index 0000000..1c6c8d2 --- /dev/null +++ b/app/src/main/res/layout/fragment_home.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_notifications.xml b/app/src/main/res/layout/fragment_notifications.xml new file mode 100644 index 0000000..afe2594 --- /dev/null +++ b/app/src/main/res/layout/fragment_notifications.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml new file mode 100644 index 0000000..fb6d040 --- /dev/null +++ b/app/src/main/res/menu/bottom_nav_menu.xml @@ -0,0 +1,19 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml new file mode 100644 index 0000000..b858274 --- /dev/null +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -0,0 +1,25 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..e00c2dd --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,5 @@ + + + 16dp + 16dp + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 68155cc..2691eda 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,7 @@ Acanthus + MainActivity + Home + Dashboard + Notifications \ No newline at end of file