Skip to content
This repository was archived by the owner on Aug 24, 2025. It is now read-only.

Commit b65fc2b

Browse files
committed
Refactor: AbstractActivity takes care of viewBinding.
1 parent 6a3e1bd commit b65fc2b

20 files changed

+89
-152
lines changed

src/main/java/de/dennisguse/opentracks/AboutActivity.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@
1010
import de.dennisguse.opentracks.ui.util.ViewUtils;
1111
import de.dennisguse.opentracks.util.SystemUtils;
1212

13-
public class AboutActivity extends AbstractActivity {
14-
15-
private AboutBinding viewBinding;
13+
public class AboutActivity extends AbstractActivity<AboutBinding> {
1614

1715
@Override
1816
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -31,14 +29,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
3129
}
3230

3331
@NonNull
34-
protected View createRootView() {
35-
viewBinding = AboutBinding.inflate(getLayoutInflater());
36-
return viewBinding.getRoot();
37-
}
38-
39-
@Override
40-
protected void onDestroy() {
41-
super.onDestroy();
42-
viewBinding = null;
32+
protected AboutBinding createRootView() {
33+
return AboutBinding.inflate(getLayoutInflater());
4334
}
4435
}

src/main/java/de/dennisguse/opentracks/AbstractActivity.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,15 @@
2626
import androidx.core.view.ViewCompat;
2727
import androidx.core.view.ViewGroupCompat;
2828
import androidx.core.view.WindowInsetsCompat;
29+
import androidx.viewbinding.ViewBinding;
2930

3031
import de.dennisguse.opentracks.services.announcement.TTSManager;
3132
import de.dennisguse.opentracks.settings.PreferencesUtils;
3233

3334
// TODO Make ViewBinding a generic attribute and set to null in onDestroy()
34-
public abstract class AbstractActivity extends AppCompatActivity {
35+
public abstract class AbstractActivity<T extends ViewBinding> extends AppCompatActivity {
36+
37+
protected T viewBinding;
3538

3639
@Override
3740
protected void onCreate(Bundle savedInstanceState) {
@@ -44,13 +47,14 @@ protected void onCreate(Bundle savedInstanceState) {
4447
// Set volume control stream for text to speech
4548
setVolumeControlStream(TTSManager.AUDIO_STREAM);
4649

47-
View rootView = createRootView();
48-
setContentView(rootView);
50+
viewBinding = createRootView();
51+
setContentView(viewBinding.getRoot());
4952

50-
edge2edgeApplyInsets(rootView);
53+
edge2edgeApplyInsets();
5154
}
5255

53-
private void edge2edgeApplyInsets(View rootView) {
56+
private void edge2edgeApplyInsets() {
57+
View rootView = viewBinding.getRoot();
5458
ViewCompat.setOnApplyWindowInsetsListener(rootView, (view, windowInsets) -> {
5559
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.displayCutout() | WindowInsetsCompat.Type.ime());
5660
view.setPadding(insets.left, insets.top, insets.right, insets.bottom);
@@ -67,5 +71,11 @@ public boolean onSupportNavigateUp() {
6771
}
6872

6973
@NonNull
70-
protected abstract View createRootView();
74+
protected abstract T createRootView();
75+
76+
@Override
77+
protected void onDestroy() {
78+
super.onDestroy();
79+
viewBinding = null;
80+
}
7181
}

src/main/java/de/dennisguse/opentracks/AbstractTrackDeleteActivity.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616

1717
package de.dennisguse.opentracks;
1818

19+
import android.view.View;
1920
import android.widget.Toast;
2021

22+
import androidx.viewbinding.ViewBinding;
2123
import androidx.work.Data;
2224
import androidx.work.OneTimeWorkRequest;
2325
import androidx.work.WorkManager;
@@ -41,7 +43,7 @@
4143
* @author Jimmy Shih
4244
*/
4345
//TODO Check if this class is still such a good idea; inheritance might limit maintainability
44-
public abstract class AbstractTrackDeleteActivity extends AbstractActivity implements ConfirmDeleteCaller {
46+
public abstract class AbstractTrackDeleteActivity<T extends ViewBinding> extends AbstractActivity<T> implements ConfirmDeleteCaller {
4547

4648
protected void deleteTracks(Track.Id... trackIds) {
4749
ConfirmDeleteDialogFragment.showDialog(getSupportFragmentManager(), trackIds);

src/main/java/de/dennisguse/opentracks/HelpActivity.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,18 @@
99
import de.dennisguse.opentracks.databinding.HelpBinding;
1010
import de.dennisguse.opentracks.ui.util.ViewUtils;
1111

12-
public class HelpActivity extends AbstractActivity {
13-
14-
private HelpBinding helpBinding;
12+
public class HelpActivity extends AbstractActivity<HelpBinding> {
1513

1614
@Override
1715
public void onCreate(@Nullable Bundle savedInstanceState) {
1816
super.onCreate(savedInstanceState);
19-
setSupportActionBar(helpBinding.bottomAppBarLayout.bottomAppBar);
17+
setSupportActionBar(viewBinding.bottomAppBarLayout.bottomAppBar);
2018
ViewUtils.makeClickableLinks(findViewById(android.R.id.content));
2119
}
2220

2321
@NonNull
2422
@Override
25-
protected View createRootView() {
26-
helpBinding = HelpBinding.inflate(getLayoutInflater());
27-
return helpBinding.getRoot();
23+
protected HelpBinding createRootView() {
24+
return HelpBinding.inflate(getLayoutInflater());
2825
}
2926
}

src/main/java/de/dennisguse/opentracks/ShowErrorActivity.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,10 @@
1515

1616
import de.dennisguse.opentracks.databinding.ActivityShowErrorBinding;
1717

18-
public class ShowErrorActivity extends AbstractActivity {
18+
public class ShowErrorActivity extends AbstractActivity<ActivityShowErrorBinding> {
1919

2020
public static final String EXTRA_ERROR_TEXT = "error";
2121

22-
private ActivityShowErrorBinding viewBinding;
23-
2422
@Override
2523
public void onCreate(final Bundle savedInstanceState) {
2624
super.onCreate(savedInstanceState);
@@ -32,9 +30,8 @@ public void onCreate(final Bundle savedInstanceState) {
3230

3331
@NonNull
3432
@Override
35-
protected View createRootView() {
36-
viewBinding = ActivityShowErrorBinding.inflate(getLayoutInflater());
37-
return viewBinding.getRoot();
33+
protected ActivityShowErrorBinding createRootView() {
34+
return ActivityShowErrorBinding.inflate(getLayoutInflater());
3835
}
3936

4037
private String createErrorTitle() {

src/main/java/de/dennisguse/opentracks/TrackEditActivity.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
*
3838
* @author Leif Hendrik Wilden
3939
*/
40-
public class TrackEditActivity extends AbstractActivity implements ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller {
40+
public class TrackEditActivity extends AbstractActivity<TrackEditBinding> implements ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller {
4141

4242
public static final String EXTRA_TRACK_ID = "track_id";
4343

@@ -49,8 +49,6 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit
4949
private Track track;
5050
private ActivityType activityType;
5151

52-
private TrackEditBinding viewBinding;
53-
5452
@Override
5553
protected void onCreate(Bundle bundle) {
5654
super.onCreate(bundle);
@@ -125,9 +123,8 @@ public void onSaveInstanceState(@NonNull Bundle outState) {
125123

126124
@NonNull
127125
@Override
128-
protected View createRootView() {
129-
viewBinding = TrackEditBinding.inflate(getLayoutInflater());
130-
return viewBinding.getRoot();
126+
protected TrackEditBinding createRootView() {
127+
return TrackEditBinding.inflate(getLayoutInflater());
131128
}
132129

133130
private void setActivityTypeIcon(ActivityType activityType) {

src/main/java/de/dennisguse/opentracks/TrackListActivity.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,14 @@
7272
*
7373
* @author Leif Hendrik Wilden
7474
*/
75-
public class TrackListActivity extends AbstractTrackDeleteActivity implements ConfirmDeleteDialogFragment.ConfirmDeleteCaller {
75+
public class TrackListActivity extends AbstractTrackDeleteActivity<TrackListBinding> implements ConfirmDeleteDialogFragment.ConfirmDeleteCaller {
7676

7777
private static final String TAG = TrackListActivity.class.getSimpleName();
7878

7979
// The following are set in onCreate
8080
private TrackRecordingServiceConnection recordingStatusConnection;
8181
private TrackListAdapter adapter;
8282

83-
private TrackListBinding viewBinding;
84-
8583
// Preferences
8684
private UnitSystem unitSystem = UnitSystem.defaultUnitSystem();
8785

@@ -166,6 +164,13 @@ protected void onCreate(Bundle savedInstanceState) {
166164
}
167165
});
168166

167+
viewBinding.trackListSearchView.getEditText().setOnEditorActionListener((v, actionId, event) -> {
168+
searchQuery = viewBinding.trackListSearchView.getEditText().getText().toString();
169+
viewBinding.trackListSearchView.hide();
170+
loadData();
171+
return true;
172+
});
173+
169174
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
170175
adapter = new TrackListAdapter(this, viewBinding.trackList, recordingStatus, unitSystem);
171176
viewBinding.trackList.setLayoutManager(layoutManager);
@@ -248,24 +253,14 @@ protected void onStop() {
248253
@Override
249254
protected void onDestroy() {
250255
super.onDestroy();
251-
viewBinding = null;
252256
recordingStatusConnection = null;
253257
adapter = null;
254258
}
255259

256260
@NonNull
257261
@Override
258-
protected View createRootView() {
259-
viewBinding = TrackListBinding.inflate(getLayoutInflater());
260-
261-
viewBinding.trackListSearchView.getEditText().setOnEditorActionListener((v, actionId, event) -> {
262-
searchQuery = viewBinding.trackListSearchView.getEditText().getText().toString();
263-
viewBinding.trackListSearchView.hide();
264-
loadData();
265-
return true;
266-
});
267-
268-
return viewBinding.getRoot();
262+
protected TrackListBinding createRootView() {
263+
return TrackListBinding.inflate(getLayoutInflater());
269264
}
270265

271266
@Override

src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
* @author Rodrigo Damazio
5757
*/
5858
//TODO Should not use TrackRecordingServiceConnection; only used to determine if there is NO current recording, to enable resume functionality.
59-
public class TrackRecordedActivity extends AbstractTrackDeleteActivity implements ConfirmDeleteDialogFragment.ConfirmDeleteCaller, TrackDataHubInterface {
59+
public class TrackRecordedActivity extends AbstractTrackDeleteActivity<TrackRecordedBinding> implements ConfirmDeleteDialogFragment.ConfirmDeleteCaller, TrackDataHubInterface {
6060

6161
private static final String TAG = TrackRecordedActivity.class.getSimpleName();
6262

@@ -68,8 +68,6 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement
6868

6969
private TrackDataHub trackDataHub;
7070

71-
private TrackRecordedBinding viewBinding;
72-
7371
private Track.Id trackId;
7472
private RecordingStatus recordingStatus = TrackRecordingService.STATUS_DEFAULT;
7573

@@ -138,9 +136,8 @@ protected void onSaveInstanceState(@NonNull Bundle outState) {
138136

139137
@NonNull
140138
@Override
141-
protected View createRootView() {
142-
viewBinding = TrackRecordedBinding.inflate(getLayoutInflater());
143-
return viewBinding.getRoot();
139+
protected TrackRecordedBinding createRootView() {
140+
return TrackRecordedBinding.inflate(getLayoutInflater());
144141
}
145142

146143
@Override

src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
* @author Leif Hendrik Wilden
5757
* @author Rodrigo Damazio
5858
*/
59-
public class TrackRecordingActivity extends AbstractActivity implements ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller, TrackDataHubInterface {
59+
public class TrackRecordingActivity extends AbstractActivity<TrackRecordingBinding> implements ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller, TrackDataHubInterface {
6060

6161
public static final String EXTRA_TRACK_ID = "track_id";
6262

@@ -66,13 +66,11 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc
6666

6767
private Snackbar snackbar;
6868

69-
// The following are setFrequency in onCreate
69+
// The following are set in onCreate
7070
private ContentProviderUtils contentProviderUtils;
7171
private TrackRecordingServiceConnection trackRecordingServiceConnection;
7272
private TrackDataHub trackDataHub;
7373

74-
private TrackRecordingBinding viewBinding;
75-
7674
private Track.Id trackId;
7775

7876
private RecordingStatus recordingStatus = TrackRecordingService.STATUS_DEFAULT;
@@ -245,15 +243,13 @@ protected void onStop() {
245243
@Override
246244
protected void onDestroy() {
247245
super.onDestroy();
248-
viewBinding = null;
249246
trackRecordingServiceConnection = null;
250247
}
251248

252249
@NonNull
253250
@Override
254-
protected View createRootView() {
255-
viewBinding = TrackRecordingBinding.inflate(getLayoutInflater());
256-
return viewBinding.getRoot();
251+
protected TrackRecordingBinding createRootView() {
252+
return TrackRecordingBinding.inflate(getLayoutInflater());
257253
}
258254

259255
@Override

src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,12 @@
2323
import de.dennisguse.opentracks.util.IntentUtils;
2424
import de.dennisguse.opentracks.util.StringUtils;
2525

26-
public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller {
26+
public class TrackStoppedActivity extends AbstractTrackDeleteActivity<TrackStoppedBinding> implements ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller {
2727

2828
private static final String TAG = TrackStoppedActivity.class.getSimpleName();
2929

3030
public static final String EXTRA_TRACK_ID = "track_id";
3131

32-
private TrackStoppedBinding viewBinding;
33-
3432
private Track.Id trackId;
3533

3634
@Override
@@ -113,9 +111,8 @@ private void storeTrackMetaData(ContentProviderUtils contentProviderUtils, Track
113111

114112
@NonNull
115113
@Override
116-
protected View createRootView() {
117-
viewBinding = TrackStoppedBinding.inflate(getLayoutInflater());
118-
return viewBinding.getRoot();
114+
protected TrackStoppedBinding createRootView() {
115+
return TrackStoppedBinding.inflate(getLayoutInflater());
119116
}
120117

121118
private void setActivityTypeIcon(ActivityType activityType) {

0 commit comments

Comments
 (0)