Skip to content

Commit 74d589e

Browse files
committed
fix: clear view binding references in onDestroyView to prevent memory leaks
1 parent ff6802d commit 74d589e

11 files changed

Lines changed: 55 additions & 0 deletions

File tree

changelog/unreleased/4813

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Bugfix: Resource leaks in fragment view bindings
2+
3+
View binding references have been cleared in onDestroyView() across 10 fragments to prevent memory leaks when fragment instances outlive their views.
4+
5+
https://github.com/owncloud/android/issues/4813

owncloudApp/src/main/java/com/owncloud/android/presentation/files/createshortcut/CreateShortcutDialogFragment.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ class CreateShortcutDialogFragment : DialogFragment() {
4545
return binding.root
4646
}
4747

48+
override fun onDestroyView() {
49+
super.onDestroyView()
50+
_binding = null
51+
}
52+
4853
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
4954
super.onViewCreated(view, savedInstanceState)
5055
binding.apply {

owncloudApp/src/main/java/com/owncloud/android/presentation/files/details/FileDetailsFragment.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,11 @@ class FileDetailsFragment : FileFragment() {
121121
}
122122
}
123123

124+
override fun onDestroyView() {
125+
super.onDestroyView()
126+
_binding = null
127+
}
128+
124129
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
125130
super.onViewCreated(view, savedInstanceState)
126131
isMultiPersonal = requireArguments().getBoolean(ARG_IS_MULTIPERSONAL)

owncloudApp/src/main/java/com/owncloud/android/presentation/files/filelist/MainEmptyListFragment.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ class MainEmptyListFragment : Fragment() {
4242
return binding.root
4343
}
4444

45+
override fun onDestroyView() {
46+
super.onDestroyView()
47+
_binding = null
48+
}
49+
4550
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
4651
binding.emptyDataParent.apply {
4752
listEmptyDatasetIcon.setImageResource(R.drawable.ic_folder)

owncloudApp/src/main/java/com/owncloud/android/presentation/files/removefile/RemoveFilesDialogFragment.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ class RemoveFilesDialogFragment : DialogFragment() {
5555
return binding.root
5656
}
5757

58+
override fun onDestroyView() {
59+
super.onDestroyView()
60+
_binding = null
61+
}
62+
5863
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
5964
super.onViewCreated(view, savedInstanceState)
6065

owncloudApp/src/main/java/com/owncloud/android/presentation/shares/SharesFragment.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ class SharesFragment : Fragment() {
4040
return binding.root
4141
}
4242

43+
override fun onDestroyView() {
44+
super.onDestroyView()
45+
_binding = null
46+
}
47+
4348
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
4449
initViews()
4550
}

owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/SpacesListFragment.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,11 @@ class SpacesListFragment :
138138
return binding.root
139139
}
140140

141+
override fun onDestroyView() {
142+
super.onDestroyView()
143+
_binding = null
144+
}
145+
141146
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
142147
isMultiPersonal = capabilityViewModel.checkMultiPersonal()
143148
initViews()

owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/createspace/CreateSpaceDialogFragment.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ class CreateSpaceDialogFragment : DialogFragment() {
4545
return binding.root
4646
}
4747

48+
override fun onDestroyView() {
49+
super.onDestroyView()
50+
_binding = null
51+
}
52+
4853
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
4954
super.onViewCreated(view, savedInstanceState)
5055
val currentSpace = requireArguments().getParcelable<OCSpace>(ARG_CURRENT_SPACE)

owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/members/AddMemberFragment.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ class AddMemberFragment: Fragment(), SearchMembersAdapter.SearchMembersAdapterLi
7272
return binding.root
7373
}
7474

75+
override fun onDestroyView() {
76+
super.onDestroyView()
77+
_binding = null
78+
}
79+
7580
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
7681
super.onViewCreated(view, savedInstanceState)
7782
searchMembersAdapter = SearchMembersAdapter(this)

owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/members/SpaceMembersFragment.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ class SpaceMembersFragment : Fragment(), SpaceMembersAdapter.SpaceMembersAdapter
7979
return binding.root
8080
}
8181

82+
override fun onDestroyView() {
83+
super.onDestroyView()
84+
_binding = null
85+
}
86+
8287
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
8388
super.onViewCreated(view, savedInstanceState)
8489
val accountId = requireArguments().getString(ARG_ACCOUNT_ID)

0 commit comments

Comments
 (0)