Skip to content

Commit 03713cb

Browse files
Merge pull request #100 from MihaiCristianCondrea/codex/refactor-handler-usage-in-lessons
Ensure handlers use main looper and clean up callbacks
2 parents aee4047 + 23e9f91 commit 03713cb

File tree

26 files changed

+249
-46
lines changed

26 files changed

+249
-46
lines changed

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/alerts/alertdialog/AlertDialogActivity.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Intent;
44
import android.os.Bundle;
55
import android.os.Handler;
6+
import android.os.Looper;
67

78
import com.d4rk.androidtutorials.java.ui.components.navigation.UpNavigationActivity;
89

@@ -13,7 +14,7 @@
1314
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
1415

1516
public class AlertDialogActivity extends UpNavigationActivity {
16-
private final Handler handler = new Handler();
17+
private final Handler handler = new Handler(Looper.getMainLooper());
1718
private ActivityAlertDialogBinding binding;
1819

1920
@Override
@@ -45,4 +46,11 @@ private MaterialAlertDialogBuilder createAlertDialog() {
4546
.setPositiveButton(android.R.string.ok, null)
4647
.setNegativeButton(android.R.string.cancel, null);
4748
}
48-
}
49+
50+
51+
@Override
52+
protected void onDestroy() {
53+
super.onDestroy();
54+
handler.removeCallbacksAndMessages(null);
55+
}
56+
}

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/alerts/snackbar/SnackBarActivity.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Intent;
44
import android.os.Bundle;
55
import android.os.Handler;
6+
import android.os.Looper;
67

78
import com.d4rk.androidtutorials.java.ui.components.navigation.UpNavigationActivity;
89

@@ -13,7 +14,7 @@
1314
import com.google.android.material.snackbar.Snackbar;
1415

1516
public class SnackBarActivity extends UpNavigationActivity {
16-
private final Handler handler = new Handler();
17+
private final Handler handler = new Handler(Looper.getMainLooper());
1718
private ActivitySnackBarBinding binding;
1819

1920
@Override
@@ -39,4 +40,11 @@ protected void onCreate(Bundle savedInstanceState) {
3940

4041
handler.postDelayed(() -> binding.floatingButtonShowSyntax.shrink(), 5000);
4142
}
42-
}
43+
44+
45+
@Override
46+
protected void onDestroy() {
47+
super.onDestroy();
48+
handler.removeCallbacksAndMessages(null);
49+
}
50+
}

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/alerts/toast/ToastActivity.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Intent;
44
import android.os.Bundle;
55
import android.os.Handler;
6+
import android.os.Looper;
67
import android.widget.Toast;
78

89
import com.d4rk.androidtutorials.java.ui.components.navigation.UpNavigationActivity;
@@ -13,7 +14,7 @@
1314
import com.d4rk.androidtutorials.java.utils.EdgeToEdgeDelegate;
1415

1516
public class ToastActivity extends UpNavigationActivity {
16-
private final Handler handler = new Handler();
17+
private final Handler handler = new Handler(Looper.getMainLooper());
1718
private ActivityToastBinding binding;
1819

1920
@Override
@@ -37,4 +38,11 @@ protected void onCreate(Bundle savedInstanceState) {
3738

3839
handler.postDelayed(() -> binding.floatingButtonShowSyntax.shrink(), 5000);
3940
}
40-
}
41+
42+
43+
@Override
44+
protected void onDestroy() {
45+
super.onDestroy();
46+
handler.removeCallbacksAndMessages(null);
47+
}
48+
}

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/buttons/buttons/ButtonsActivity.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Intent;
44
import android.os.Bundle;
55
import android.os.Handler;
6+
import android.os.Looper;
67

78
import com.d4rk.androidtutorials.java.ui.components.navigation.UpNavigationActivity;
89

@@ -14,7 +15,7 @@
1415
import me.zhanghai.android.fastscroll.FastScrollerBuilder;
1516

1617
public class ButtonsActivity extends UpNavigationActivity {
17-
private final Handler handler = new Handler();
18+
private final Handler handler = new Handler(Looper.getMainLooper());
1819
private ActivityButtonsBinding binding;
1920

2021
@Override
@@ -48,4 +49,11 @@ protected void onCreate(Bundle savedInstanceState) {
4849
binding.floatingButtonShowSyntax.setOnClickListener(v -> startActivity(new Intent(ButtonsActivity.this, ButtonsCodeActivity.class)));
4950
handler.postDelayed(() -> binding.floatingButtonShowSyntax.shrink(), 5000);
5051
}
51-
}
52+
53+
54+
@Override
55+
protected void onDestroy() {
56+
super.onDestroy();
57+
handler.removeCallbacksAndMessages(null);
58+
}
59+
}

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/buttons/image/ImageButtonsActivity.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Intent;
44
import android.os.Bundle;
55
import android.os.Handler;
6+
import android.os.Looper;
67

78
import com.d4rk.androidtutorials.java.ui.components.navigation.UpNavigationActivity;
89

@@ -13,7 +14,7 @@
1314
import com.google.android.material.snackbar.Snackbar;
1415

1516
public class ImageButtonsActivity extends UpNavigationActivity {
16-
private final Handler handler = new Handler();
17+
private final Handler handler = new Handler(Looper.getMainLooper());
1718
private ActivityImageButtonsBinding binding;
1819

1920
@Override
@@ -37,4 +38,11 @@ protected void onCreate(Bundle savedInstanceState) {
3738

3839
handler.postDelayed(() -> binding.floatingButtonShowSyntax.shrink(), 5000);
3940
}
40-
}
41+
42+
43+
@Override
44+
protected void onDestroy() {
45+
super.onDestroy();
46+
handler.removeCallbacksAndMessages(null);
47+
}
48+
}

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/buttons/radio/RadioButtonsActivity.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Intent;
44
import android.os.Bundle;
55
import android.os.Handler;
6+
import android.os.Looper;
67
import android.widget.RadioButton;
78

89
import com.d4rk.androidtutorials.java.ui.components.navigation.UpNavigationActivity;
@@ -13,7 +14,7 @@
1314
import com.google.android.material.snackbar.Snackbar;
1415

1516
public class RadioButtonsActivity extends UpNavigationActivity {
16-
private final Handler handler = new Handler();
17+
private final Handler handler = new Handler(Looper.getMainLooper());
1718
private ActivityRadioButtonsBinding binding;
1819

1920
@Override
@@ -38,4 +39,11 @@ protected void onCreate(Bundle savedInstanceState) {
3839

3940
handler.postDelayed(() -> binding.floatingButtonShowSyntax.shrink(), 5000);
4041
}
41-
}
42+
43+
44+
@Override
45+
protected void onDestroy() {
46+
super.onDestroy();
47+
handler.removeCallbacksAndMessages(null);
48+
}
49+
}

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/buttons/switches/SwitchActivity.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Intent;
44
import android.os.Bundle;
55
import android.os.Handler;
6+
import android.os.Looper;
67

78
import com.d4rk.androidtutorials.java.ui.components.navigation.UpNavigationActivity;
89

@@ -15,7 +16,7 @@
1516
import me.zhanghai.android.fastscroll.FastScrollerBuilder;
1617

1718
public class SwitchActivity extends UpNavigationActivity {
18-
private final Handler handler = new Handler();
19+
private final Handler handler = new Handler(Looper.getMainLooper());
1920
private ActivitySwitchBinding binding;
2021

2122
@Override
@@ -43,4 +44,11 @@ private void setOnClickListeners() {
4344
});
4445
handler.postDelayed(() -> binding.floatingButtonShowSyntax.shrink(), 5000);
4546
}
46-
}
47+
48+
49+
@Override
50+
protected void onDestroy() {
51+
super.onDestroy();
52+
handler.removeCallbacksAndMessages(null);
53+
}
54+
}

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/clocks/chronometer/ChronometerActivity.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Intent;
44
import android.os.Bundle;
55
import android.os.Handler;
6+
import android.os.Looper;
67
import android.os.SystemClock;
78

89
import androidx.annotation.Nullable;
@@ -13,7 +14,7 @@
1314
import com.d4rk.androidtutorials.java.utils.EdgeToEdgeDelegate;
1415

1516
public class ChronometerActivity extends UpNavigationActivity {
16-
private final Handler handler = new Handler();
17+
private final Handler handler = new Handler(Looper.getMainLooper());
1718
private ActivityChronometerBinding binding;
1819

1920
@Override
@@ -36,4 +37,11 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
3637
binding.buttonStop.setOnClickListener(v -> binding.chronometer.stop());
3738
binding.buttonReset.setOnClickListener(v -> binding.chronometer.setBase(SystemClock.elapsedRealtime()));
3839
}
39-
}
40+
41+
42+
@Override
43+
protected void onDestroy() {
44+
super.onDestroy();
45+
handler.removeCallbacksAndMessages(null);
46+
}
47+
}

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/clocks/clock/ClockActivity.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Intent;
44
import android.os.Bundle;
55
import android.os.Handler;
6+
import android.os.Looper;
67

78
import com.d4rk.androidtutorials.java.ui.components.navigation.UpNavigationActivity;
89

@@ -12,7 +13,7 @@
1213
import me.zhanghai.android.fastscroll.FastScrollerBuilder;
1314

1415
public class ClockActivity extends UpNavigationActivity {
15-
private final Handler handler = new Handler();
16+
private final Handler handler = new Handler(Looper.getMainLooper());
1617
private ActivityClockBinding binding;
1718

1819
@Override
@@ -29,4 +30,11 @@ protected void onCreate(Bundle savedInstanceState) {
2930
binding.floatingButtonShowSyntax.setOnClickListener(view -> startActivity(new Intent(this, ClockCodeActivity.class)));
3031
handler.postDelayed(() -> binding.floatingButtonShowSyntax.shrink(), 5000);
3132
}
32-
}
33+
34+
35+
@Override
36+
protected void onDestroy() {
37+
super.onDestroy();
38+
handler.removeCallbacksAndMessages(null);
39+
}
40+
}

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/clocks/datepicker/DatePickerActivity.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import android.content.Intent;
55
import android.os.Bundle;
66
import android.os.Handler;
7+
import android.os.Looper;
78

89
import com.d4rk.androidtutorials.java.ui.components.navigation.UpNavigationActivity;
910

@@ -16,7 +17,7 @@
1617
import java.util.Locale;
1718

1819
public class DatePickerActivity extends UpNavigationActivity {
19-
private final Handler handler = new Handler();
20+
private final Handler handler = new Handler(Looper.getMainLooper());
2021
private final Calendar calendar = Calendar.getInstance();
2122
private final SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
2223
private ActivityDatePickerBinding binding;
@@ -54,4 +55,11 @@ protected void onCreate(Bundle savedInstanceState) {
5455
private void updateDateInView() {
5556
binding.dateTextView.setText(dateFormat.format(calendar.getTime()));
5657
}
57-
}
58+
59+
60+
@Override
61+
protected void onDestroy() {
62+
super.onDestroy();
63+
handler.removeCallbacksAndMessages(null);
64+
}
65+
}

0 commit comments

Comments
 (0)