From 1bc6a1c72130932833eaa1da017af20e17143b63 Mon Sep 17 00:00:00 2001 From: joaomiranda Date: Wed, 26 Nov 2025 10:36:45 +0000 Subject: [PATCH] =?UTF-8?q?Conclus=C3=A3o=20do=20processo=20de=20registo?= =?UTF-8?q?=20e=20adi=C3=A7=C3=A3o=20do=20ecr=C3=A3=20principal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 7 ++ app/src/main/AndroidManifest.xml | 18 ++--- .../example/vdcscore/CriarContaActivity.java | 13 ++++ .../com/example/vdcscore/MainActivity.java | 66 +++++++++++++++++++ .../vdcscore/ui/gallery/GalleryFragment.java | 37 +++++++++++ .../vdcscore/ui/gallery/GalleryViewModel.java | 19 ++++++ .../vdcscore/ui/home/HomeFragment.java | 37 +++++++++++ .../vdcscore/ui/home/HomeViewModel.java | 19 ++++++ .../ui/slideshow/SlideshowFragment.java | 37 +++++++++++ .../ui/slideshow/SlideshowViewModel.java | 19 ++++++ app/src/main/res/drawable/ic_menu_camera.xml | 12 ++++ app/src/main/res/drawable/ic_menu_gallery.xml | 9 +++ .../main/res/drawable/ic_menu_slideshow.xml | 9 +++ app/src/main/res/drawable/side_nav_bar.xml | 9 +++ app/src/main/res/layout/activity_main.xml | 25 +++++++ app/src/main/res/layout/app_bar_main.xml | 34 ++++++++++ app/src/main/res/layout/content_main.xml | 20 ++++++ 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-land/dimens.xml | 3 + app/src/main/res/values-w1240dp/dimens.xml | 3 + app/src/main/res/values-w600dp/dimens.xml | 3 + app/src/main/res/values/dimens.xml | 8 +++ app/src/main/res/values/strings.xml | 11 ++++ app/src/main/res/values/themes.xml | 9 +++ gradle/libs.versions.toml | 8 +++ 31 files changed, 582 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/com/example/vdcscore/MainActivity.java create mode 100644 app/src/main/java/com/example/vdcscore/ui/gallery/GalleryFragment.java create mode 100644 app/src/main/java/com/example/vdcscore/ui/gallery/GalleryViewModel.java create mode 100644 app/src/main/java/com/example/vdcscore/ui/home/HomeFragment.java create mode 100644 app/src/main/java/com/example/vdcscore/ui/home/HomeViewModel.java create mode 100644 app/src/main/java/com/example/vdcscore/ui/slideshow/SlideshowFragment.java create mode 100644 app/src/main/java/com/example/vdcscore/ui/slideshow/SlideshowViewModel.java create mode 100644 app/src/main/res/drawable/ic_menu_camera.xml create mode 100644 app/src/main/res/drawable/ic_menu_gallery.xml create mode 100644 app/src/main/res/drawable/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/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-land/dimens.xml create mode 100644 app/src/main/res/values-w1240dp/dimens.xml create mode 100644 app/src/main/res/values-w600dp/dimens.xml create mode 100644 app/src/main/res/values/dimens.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d25ed1d..4b5858a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -30,6 +30,9 @@ android { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + buildFeatures { + viewBinding = true + } } dependencies { @@ -43,6 +46,10 @@ dependencies { implementation(libs.credentials.play.services.auth) implementation(libs.googleid) implementation(libs.firebase.database) + implementation(libs.lifecycle.livedata.ktx) + implementation(libs.lifecycle.viewmodel.ktx) + implementation(libs.navigation.fragment) + implementation(libs.navigation.ui) testImplementation(libs.junit) androidTestImplementation(libs.ext.junit) androidTestImplementation(libs.espresso.core) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 99f2d2d..52d4761 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,22 +11,24 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.VdcScore"> - + - - - - + + - - + \ No newline at end of file diff --git a/app/src/main/java/com/example/vdcscore/CriarContaActivity.java b/app/src/main/java/com/example/vdcscore/CriarContaActivity.java index 1643e4a..f72fe63 100644 --- a/app/src/main/java/com/example/vdcscore/CriarContaActivity.java +++ b/app/src/main/java/com/example/vdcscore/CriarContaActivity.java @@ -14,6 +14,8 @@ import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; +import com.google.firebase.auth.FirebaseAuth; + public class CriarContaActivity extends AppCompatActivity { @Override @@ -57,7 +59,18 @@ public class CriarContaActivity extends AppCompatActivity { return; } + FirebaseAuth auth = FirebaseAuth.getInstance(); + auth.createUserWithEmailAndPassword(email, pass).addOnCompleteListener(CriarContaActivity.this, task -> { + if (task.isSuccessful()) { + Intent intent= new Intent(CriarContaActivity.this, MainActivity.class); + startActivity(intent); + finish(); + } else { + Toast.makeText(CriarContaActivity.this, "Erro ao criar conta!", Toast.LENGTH_SHORT).show(); + } + + }); } }); diff --git a/app/src/main/java/com/example/vdcscore/MainActivity.java b/app/src/main/java/com/example/vdcscore/MainActivity.java new file mode 100644 index 0000000..9d66b83 --- /dev/null +++ b/app/src/main/java/com/example/vdcscore/MainActivity.java @@ -0,0 +1,66 @@ +package com.example.vdcscore; + +import android.os.Bundle; +import android.view.View; +import android.view.Menu; + +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 com.example.vdcscore.databinding.ActivityMainBinding; + +public class MainActivity extends AppCompatActivity { + + private AppBarConfiguration mAppBarConfiguration; + private ActivityMainBinding binding; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + binding = ActivityMainBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); + + setSupportActionBar(binding.appBarMain.toolbar); + binding.appBarMain.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) + .setAnchorView(R.id.fab).show(); + } + }); + DrawerLayout drawer = binding.drawerLayout; + NavigationView navigationView = binding.navView; + // 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) + .setOpenableLayout(drawer) + .build(); + NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_content_main); + 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_content_main); + return NavigationUI.navigateUp(navController, mAppBarConfiguration) + || super.onSupportNavigateUp(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/vdcscore/ui/gallery/GalleryFragment.java b/app/src/main/java/com/example/vdcscore/ui/gallery/GalleryFragment.java new file mode 100644 index 0000000..2956b7e --- /dev/null +++ b/app/src/main/java/com/example/vdcscore/ui/gallery/GalleryFragment.java @@ -0,0 +1,37 @@ +package com.example.vdcscore.ui.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.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; + +import com.example.vdcscore.databinding.FragmentGalleryBinding; + +public class GalleryFragment extends Fragment { + + private FragmentGalleryBinding binding; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + GalleryViewModel galleryViewModel = + new ViewModelProvider(this).get(GalleryViewModel.class); + + binding = FragmentGalleryBinding.inflate(inflater, container, false); + View root = binding.getRoot(); + + final TextView textView = binding.textGallery; + galleryViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); + return root; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/vdcscore/ui/gallery/GalleryViewModel.java b/app/src/main/java/com/example/vdcscore/ui/gallery/GalleryViewModel.java new file mode 100644 index 0000000..0a22385 --- /dev/null +++ b/app/src/main/java/com/example/vdcscore/ui/gallery/GalleryViewModel.java @@ -0,0 +1,19 @@ +package com.example.vdcscore.ui.gallery; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class GalleryViewModel extends ViewModel { + + private final 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/com/example/vdcscore/ui/home/HomeFragment.java b/app/src/main/java/com/example/vdcscore/ui/home/HomeFragment.java new file mode 100644 index 0000000..a2f7e67 --- /dev/null +++ b/app/src/main/java/com/example/vdcscore/ui/home/HomeFragment.java @@ -0,0 +1,37 @@ +package com.example.vdcscore.ui.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.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; + +import com.example.vdcscore.databinding.FragmentHomeBinding; + +public class HomeFragment extends Fragment { + + private FragmentHomeBinding binding; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + HomeViewModel 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(), textView::setText); + return root; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/vdcscore/ui/home/HomeViewModel.java b/app/src/main/java/com/example/vdcscore/ui/home/HomeViewModel.java new file mode 100644 index 0000000..f079629 --- /dev/null +++ b/app/src/main/java/com/example/vdcscore/ui/home/HomeViewModel.java @@ -0,0 +1,19 @@ +package com.example.vdcscore.ui.home; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class HomeViewModel extends ViewModel { + + private final 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/com/example/vdcscore/ui/slideshow/SlideshowFragment.java b/app/src/main/java/com/example/vdcscore/ui/slideshow/SlideshowFragment.java new file mode 100644 index 0000000..c44c47d --- /dev/null +++ b/app/src/main/java/com/example/vdcscore/ui/slideshow/SlideshowFragment.java @@ -0,0 +1,37 @@ +package com.example.vdcscore.ui.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.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; + +import com.example.vdcscore.databinding.FragmentSlideshowBinding; + +public class SlideshowFragment extends Fragment { + + private FragmentSlideshowBinding binding; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + SlideshowViewModel slideshowViewModel = + new ViewModelProvider(this).get(SlideshowViewModel.class); + + binding = FragmentSlideshowBinding.inflate(inflater, container, false); + View root = binding.getRoot(); + + final TextView textView = binding.textSlideshow; + slideshowViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); + return root; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + binding = null; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/vdcscore/ui/slideshow/SlideshowViewModel.java b/app/src/main/java/com/example/vdcscore/ui/slideshow/SlideshowViewModel.java new file mode 100644 index 0000000..5e5f374 --- /dev/null +++ b/app/src/main/java/com/example/vdcscore/ui/slideshow/SlideshowViewModel.java @@ -0,0 +1,19 @@ +package com.example.vdcscore.ui.slideshow; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class SlideshowViewModel extends ViewModel { + + private final 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/ic_menu_camera.xml b/app/src/main/res/drawable/ic_menu_camera.xml new file mode 100644 index 0000000..634fe92 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_camera.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_menu_gallery.xml b/app/src/main/res/drawable/ic_menu_gallery.xml new file mode 100644 index 0000000..03c7709 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_gallery.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_menu_slideshow.xml b/app/src/main/res/drawable/ic_menu_slideshow.xml new file mode 100644 index 0000000..5e9e163 --- /dev/null +++ b/app/src/main/res/drawable/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..6c7dd7c --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml new file mode 100644 index 0000000..8739806 --- /dev/null +++ b/app/src/main/res/layout/app_bar_main.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml new file mode 100644 index 0000000..6e0ea39 --- /dev/null +++ b/app/src/main/res/layout/content_main.xml @@ -0,0 +1,20 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_gallery.xml b/app/src/main/res/layout/fragment_gallery.xml new file mode 100644 index 0000000..643fe25 --- /dev/null +++ b/app/src/main/res/layout/fragment_gallery.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..f3d9b08 --- /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_slideshow.xml b/app/src/main/res/layout/fragment_slideshow.xml new file mode 100644 index 0000000..2141a33 --- /dev/null +++ b/app/src/main/res/layout/fragment_slideshow.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/nav_header_main.xml b/app/src/main/res/layout/nav_header_main.xml new file mode 100644 index 0000000..c145545 --- /dev/null +++ b/app/src/main/res/layout/nav_header_main.xml @@ -0,0 +1,35 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml new file mode 100644 index 0000000..d7f2df2 --- /dev/null +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -0,0 +1,20 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml new file mode 100644 index 0000000..412d5f8 --- /dev/null +++ b/app/src/main/res/menu/main.xml @@ -0,0 +1,9 @@ + + + + \ 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..5b488c0 --- /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-land/dimens.xml b/app/src/main/res/values-land/dimens.xml new file mode 100644 index 0000000..22d7f00 --- /dev/null +++ b/app/src/main/res/values-land/dimens.xml @@ -0,0 +1,3 @@ + + 48dp + \ No newline at end of file diff --git a/app/src/main/res/values-w1240dp/dimens.xml b/app/src/main/res/values-w1240dp/dimens.xml new file mode 100644 index 0000000..d73f4a3 --- /dev/null +++ b/app/src/main/res/values-w1240dp/dimens.xml @@ -0,0 +1,3 @@ + + 200dp + \ No newline at end of file diff --git a/app/src/main/res/values-w600dp/dimens.xml b/app/src/main/res/values-w600dp/dimens.xml new file mode 100644 index 0000000..22d7f00 --- /dev/null +++ b/app/src/main/res/values-w600dp/dimens.xml @@ -0,0 +1,3 @@ + + 48dp + \ 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..4ab4520 --- /dev/null +++ b/app/src/main/res/values/dimens.xml @@ -0,0 +1,8 @@ + + + 16dp + 16dp + 8dp + 176dp + 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 853ff8c..b28f898 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,14 @@ VdcScore + MainActivity + Open navigation drawer + Close navigation drawer + Android Studio + android.studio@android.com + Navigation header + Settings + + Home + Gallery + Slideshow \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 620db53..9df340f 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -6,4 +6,13 @@ + +