Skip to content

Commit d62fbf3

Browse files
refactor: migrate screens to fragments and navigation
1 parent 902fbc9 commit d62fbf3

File tree

12 files changed

+87
-188
lines changed

12 files changed

+87
-188
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -257,15 +257,6 @@
257257
android:exported="false"
258258
android:label="@string/grid_view"
259259
android:parentActivityName=".ui.screens.android.lessons.views.grid.GirdViewActivity" />
260-
<activity
261-
android:name=".ui.screens.settings.SettingsActivity"
262-
android:exported="false"
263-
android:label="@string/settings"
264-
android:parentActivityName=".ui.screens.settings.SettingsActivity">
265-
<intent-filter>
266-
<action android:name="android.intent.action.APPLICATION_PREFERENCES" />
267-
</intent-filter>
268-
</activity>
269260
<activity
270261
android:name=".ui.screens.help.HelpActivity"
271262
android:exported="false"
@@ -276,11 +267,6 @@
276267
android:exported="false"
277268
android:label="@string/switches"
278269
android:parentActivityName=".ui.screens.android.lessons.buttons.switches.SwitchActivity" />
279-
<activity
280-
android:name=".ui.screens.support.SupportActivity"
281-
android:exported="false"
282-
android:label="@string/support_us"
283-
android:parentActivityName=".ui.screens.support.SupportActivity" />
284270
<activity
285271
android:name=".ui.screens.android.lessons.buttons.buttons.ButtonsActivity"
286272
android:exported="false"
@@ -322,11 +308,6 @@
322308
android:exported="false"
323309
android:label="@string/navigation_drawer"
324310
android:parentActivityName=".ui.screens.android.lessons.navigation.drawer.NavigationDrawerActivity" />
325-
<activity
326-
android:name=".ui.screens.quiz.QuizActivity"
327-
android:exported="false"
328-
android:label="@string/quiz_title"
329-
android:parentActivityName=".ui.screens.quiz.QuizActivity" />
330311

331312
<receiver
332313
android:name=".notifications.receivers.QuizReminderReceiver"

app/src/main/java/com/d4rk/androidtutorials/java/notifications/workers/QuizReminderWorker.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@
44
import android.app.NotificationManager;
55
import android.app.PendingIntent;
66
import android.content.Context;
7-
import android.content.Intent;
87
import android.os.Build;
98

109
import androidx.annotation.NonNull;
1110
import androidx.annotation.RequiresApi;
1211
import androidx.core.app.NotificationCompat;
12+
import androidx.navigation.NavDeepLinkBuilder;
1313
import androidx.work.Worker;
1414
import androidx.work.WorkerParameters;
1515

1616
import com.d4rk.androidtutorials.java.R;
17-
import com.d4rk.androidtutorials.java.ui.screens.quiz.QuizActivity;
17+
import com.d4rk.androidtutorials.java.ui.screens.main.MainActivity;
1818

1919
/**
2020
* Worker that displays the daily quiz reminder notification.
@@ -39,9 +39,11 @@ public Result doWork() {
3939
);
4040
manager.createNotificationChannel(channel);
4141

42-
Intent intent = new Intent(getApplicationContext(), QuizActivity.class);
43-
PendingIntent pendingIntent = PendingIntent.getActivity(
44-
getApplicationContext(), 0, intent, PendingIntent.FLAG_IMMUTABLE);
42+
PendingIntent pendingIntent = new NavDeepLinkBuilder(getApplicationContext())
43+
.setComponentName(MainActivity.class)
44+
.setGraph(R.navigation.mobile_navigation)
45+
.setDestination(R.id.navigation_quiz)
46+
.createPendingIntent();
4547

4648
NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(), channelId)
4749
.setSmallIcon(R.drawable.ic_check_circle)

app/src/main/java/com/d4rk/androidtutorials/java/ui/components/navigation/BottomSheetMenuFragment.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import com.d4rk.androidtutorials.java.BuildConfig;
1313
import com.d4rk.androidtutorials.java.R;
1414
import com.d4rk.androidtutorials.java.databinding.BottomSheetMenuBinding;
15-
import com.d4rk.androidtutorials.java.ui.screens.settings.SettingsActivity;
15+
import androidx.navigation.fragment.NavHostFragment;
1616
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
1717

1818
public class BottomSheetMenuFragment extends BottomSheetDialogFragment {
@@ -26,8 +26,12 @@ public View onCreateView(@NonNull LayoutInflater inflater,
2626
binding = BottomSheetMenuBinding.inflate(inflater, container, false);
2727

2828
binding.menuSettings.setOnClickListener(v -> {
29-
Intent intent = new Intent(requireContext(), SettingsActivity.class);
30-
startActivity(intent);
29+
NavHostFragment navHostFragment = (NavHostFragment) requireActivity()
30+
.getSupportFragmentManager()
31+
.findFragmentById(R.id.nav_host_fragment_activity_main);
32+
if (navHostFragment != null) {
33+
navHostFragment.getNavController().navigate(R.id.navigation_settings);
34+
}
3135
dismiss();
3236
});
3337

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import com.d4rk.androidtutorials.java.ui.components.navigation.BottomSheetMenuFragment;
3636
import com.d4rk.androidtutorials.java.ui.screens.startup.StartupActivity;
3737
import com.d4rk.androidtutorials.java.ui.screens.startup.StartupViewModel;
38-
import com.d4rk.androidtutorials.java.ui.screens.support.SupportActivity;
3938
import com.d4rk.androidtutorials.java.utils.ConsentUtils;
4039
import com.d4rk.androidtutorials.java.utils.EdgeToEdgeDelegate;
4140
import com.google.android.gms.ads.AdRequest;
@@ -254,7 +253,9 @@ public boolean onCreateOptionsMenu(android.view.Menu menu) {
254253
@Override
255254
public boolean onOptionsItemSelected(android.view.MenuItem item) {
256255
if (item.getItemId() == R.id.support) {
257-
startActivity(new Intent(this, SupportActivity.class));
256+
if (navController != null) {
257+
navController.navigate(R.id.navigation_support);
258+
}
258259
return true;
259260
}
260261
return super.onOptionsItemSelected(item);
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,54 @@
11
package com.d4rk.androidtutorials.java.ui.screens.quiz;
22

33
import android.os.Bundle;
4-
import android.view.MenuItem;
4+
import android.view.LayoutInflater;
5+
import android.view.View;
6+
import android.view.ViewGroup;
7+
import android.widget.TextView;
58

69
import androidx.annotation.NonNull;
7-
import androidx.appcompat.app.ActionBar;
8-
import androidx.appcompat.app.AppCompatActivity;
10+
import androidx.annotation.Nullable;
11+
import androidx.fragment.app.Fragment;
912
import androidx.lifecycle.ViewModelProvider;
13+
import androidx.navigation.fragment.NavHostFragment;
1014

15+
import com.airbnb.lottie.LottieAnimationView;
1116
import com.d4rk.androidtutorials.java.R;
1217
import com.d4rk.androidtutorials.java.data.model.QuizQuestion;
13-
import com.d4rk.androidtutorials.java.databinding.ActivityQuizBinding;
18+
import com.d4rk.androidtutorials.java.databinding.FragmentQuizBinding;
1419
import com.d4rk.androidtutorials.java.utils.EdgeToEdgeDelegate;
1520
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
16-
import android.view.LayoutInflater;
17-
import android.view.View;
18-
import android.widget.TextView;
19-
import com.airbnb.lottie.LottieAnimationView;
2021

21-
/**
22-
* Activity that displays a simple multiple-choice quiz.
23-
*/
2422
import dagger.hilt.android.AndroidEntryPoint;
2523

2624
@AndroidEntryPoint
27-
public class QuizActivity extends AppCompatActivity {
25+
public class QuizFragment extends Fragment {
2826

29-
private ActivityQuizBinding binding;
27+
private FragmentQuizBinding binding;
3028
private QuizViewModel viewModel;
3129

30+
@Nullable
3231
@Override
33-
protected void onCreate(Bundle savedInstanceState) {
34-
super.onCreate(savedInstanceState);
35-
binding = ActivityQuizBinding.inflate(getLayoutInflater());
36-
setContentView(binding.getRoot());
32+
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
33+
@Nullable Bundle savedInstanceState) {
34+
binding = FragmentQuizBinding.inflate(inflater, container, false);
3735

38-
EdgeToEdgeDelegate edgeToEdgeDelegate = new EdgeToEdgeDelegate(this);
36+
EdgeToEdgeDelegate edgeToEdgeDelegate = new EdgeToEdgeDelegate(requireActivity());
3937
edgeToEdgeDelegate.applyEdgeToEdge(binding.container);
4038

41-
ActionBar actionBar = getSupportActionBar();
42-
if (actionBar != null) {
43-
actionBar.setDisplayHomeAsUpEnabled(true);
44-
}
45-
4639
viewModel = new ViewModelProvider(this).get(QuizViewModel.class);
4740
if (viewModel.getTotalQuestions() == 0) {
48-
new MaterialAlertDialogBuilder(this)
41+
new MaterialAlertDialogBuilder(requireContext())
4942
.setMessage(R.string.quiz_no_more_questions)
50-
.setPositiveButton(android.R.string.ok, (d, w) -> finish())
43+
.setPositiveButton(android.R.string.ok, (d, w) -> NavHostFragment.findNavController(this).popBackStack())
5144
.setCancelable(false)
5245
.show();
53-
return;
46+
} else {
47+
showQuestion(viewModel.getCurrentQuestion());
48+
binding.buttonNext.setOnClickListener(v -> onNextClicked());
5449
}
55-
showQuestion(viewModel.getCurrentQuestion());
5650

57-
binding.buttonNext.setOnClickListener(v -> onNextClicked());
51+
return binding.getRoot();
5852
}
5953

6054
private void onNextClicked() {
@@ -94,24 +88,21 @@ private void showQuestion(QuizQuestion question) {
9488
private void showResult() {
9589
int score = viewModel.getScore().getValue();
9690
int total = viewModel.getTotalQuestions();
97-
View view = LayoutInflater.from(this).inflate(R.layout.dialog_quiz_result, null, false);
91+
View view = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_quiz_result, null, false);
9892
TextView textResult = view.findViewById(R.id.text_result);
9993
textResult.setText(getString(R.string.quiz_finished, score, total));
10094
LottieAnimationView animationView = view.findViewById(R.id.animation_success);
10195
animationView.playAnimation();
102-
new MaterialAlertDialogBuilder(this)
96+
new MaterialAlertDialogBuilder(requireContext())
10397
.setView(view)
104-
.setPositiveButton(android.R.string.ok, (d, w) -> finish())
98+
.setPositiveButton(android.R.string.ok, (d, w) -> NavHostFragment.findNavController(this).popBackStack())
10599
.setCancelable(false)
106100
.show();
107101
}
108102

109103
@Override
110-
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
111-
if (item.getItemId() == android.R.id.home) {
112-
finish();
113-
return true;
114-
}
115-
return super.onOptionsItemSelected(item);
104+
public void onDestroyView() {
105+
super.onDestroyView();
106+
binding = null;
116107
}
117108
}

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/settings/SettingsActivity.java

Lines changed: 0 additions & 84 deletions
This file was deleted.

0 commit comments

Comments
 (0)