Dbrant has uploaded a new change for review.
https://gerrit.wikimedia.org/r/271554
Change subject: Fix memory leaks (for real!), part 1.
......................................................................
Fix memory leaks (for real!), part 1.
My ongoing search has finally yielded some tangible nuggets.
Exhibit A: Adding a TextWatcher to a TextView, but never removing it! (The
TextWatcher holds a reference to the fragment, thereby leaking it)
Change-Id: I497ebd37f3059b420622416a66ee5b87a15a2d0c
---
M app/src/main/java/org/wikipedia/history/HistoryFragment.java
M app/src/main/java/org/wikipedia/savedpages/SavedPagesFragment.java
2 files changed, 78 insertions(+), 53 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia
refs/changes/54/271554/1
diff --git a/app/src/main/java/org/wikipedia/history/HistoryFragment.java
b/app/src/main/java/org/wikipedia/history/HistoryFragment.java
index d72c2d7..1d218f2 100644
--- a/app/src/main/java/org/wikipedia/history/HistoryFragment.java
+++ b/app/src/main/java/org/wikipedia/history/HistoryFragment.java
@@ -57,6 +57,7 @@
private WikipediaApp app;
private ActionMode actionMode;
+ private HistorySearchTextWatcher textWatcher = new
HistorySearchTextWatcher();
private boolean firstRun = true;
@@ -89,31 +90,6 @@
adapter = new HistoryEntryAdapter(getActivity(), null, true);
historyEntryList.setAdapter(adapter);
historyEntryList.setEmptyView(historyEmptyContainer);
-
- entryFilter.addTextChangedListener(
- new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence charSequence,
int i, int i2, int i3) {
- // Do nothing
- }
-
- @Override
- public void onTextChanged(CharSequence charSequence, int
i, int i2, int i3) {
- // Do nothing
- }
-
- @Override
- public void afterTextChanged(Editable editable) {
-
getActivity().getSupportLoaderManager().restartLoader(LOADER_ID, null,
HistoryFragment.this);
- if (editable.length() == 0) {
-
historyEmptyTitle.setText(R.string.history_empty_title);
- historyEmptyMessage.setVisibility(View.VISIBLE);
- } else {
-
historyEmptyTitle.setText(getString(R.string.history_search_empty_message,
editable.toString()));
- historyEmptyMessage.setVisibility(View.GONE);
- }
- }
- });
historyEntryList.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
@@ -184,6 +160,18 @@
getActivity().getSupportLoaderManager().initLoader(LOADER_ID, null,
this);
getActivity().getSupportLoaderManager().restartLoader(LOADER_ID, null,
this);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ entryFilter.addTextChangedListener(textWatcher);
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ entryFilter.removeTextChangedListener(textWatcher);
}
@Override
@@ -333,4 +321,28 @@
return super.onOptionsItemSelected(item);
}
}
+
+ private class HistorySearchTextWatcher implements TextWatcher {
+ @Override
+ public void beforeTextChanged(CharSequence charSequence, int i, int
i2, int i3) {
+ // Do nothing
+ }
+
+ @Override
+ public void onTextChanged(CharSequence charSequence, int i, int i2,
int i3) {
+ // Do nothing
+ }
+
+ @Override
+ public void afterTextChanged(Editable editable) {
+ getActivity().getSupportLoaderManager().restartLoader(LOADER_ID,
null, HistoryFragment.this);
+ if (editable.length() == 0) {
+ historyEmptyTitle.setText(R.string.history_empty_title);
+ historyEmptyMessage.setVisibility(View.VISIBLE);
+ } else {
+
historyEmptyTitle.setText(getString(R.string.history_search_empty_message,
editable.toString()));
+ historyEmptyMessage.setVisibility(View.GONE);
+ }
+ }
+ }
}
diff --git a/app/src/main/java/org/wikipedia/savedpages/SavedPagesFragment.java
b/app/src/main/java/org/wikipedia/savedpages/SavedPagesFragment.java
index 6dcab1b..95c05a1 100644
--- a/app/src/main/java/org/wikipedia/savedpages/SavedPagesFragment.java
+++ b/app/src/main/java/org/wikipedia/savedpages/SavedPagesFragment.java
@@ -62,6 +62,7 @@
private WikipediaApp app;
private ActionMode actionMode;
+ private SavedPageSearchTextWatcher textWatcher = new
SavedPageSearchTextWatcher();
private boolean firstRun = true;
@@ -101,8 +102,9 @@
return false;
}
savedPagesList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
- actionMode =
((AppCompatActivity)getActivity()).startSupportActionMode(new
ActionMode.Callback() {
+ actionMode = ((AppCompatActivity)
getActivity()).startSupportActionMode(new ActionMode.Callback() {
private final String actionModeTag =
"actionModeSavedPages";
+
@Override
public boolean onCreateActionMode(ActionMode mode, Menu
menu) {
mode.getMenuInflater().inflate(R.menu.menu_saved_pages_context, menu);
@@ -168,33 +170,6 @@
}
});
- entryFilter.addTextChangedListener(
- new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence charSequence,
int i, int i2, int i3) {
- // Do nothing
- }
-
- @Override
- public void onTextChanged(CharSequence charSequence, int
i, int i2, int i3) {
- // Do nothing
- }
-
- @Override
- public void afterTextChanged(Editable editable) {
-
getActivity().getSupportLoaderManager().restartLoader(LOADER_ID, null,
SavedPagesFragment.this);
- if (editable.length() == 0) {
-
savedPagesEmptyTitle.setText(R.string.saved_pages_empty_title);
- savedPagesEmptyImage.setVisibility(View.VISIBLE);
- savedPagesEmptyMessage.setVisibility(View.VISIBLE);
- } else {
-
savedPagesEmptyTitle.setText(getString(R.string.saved_pages_search_empty_message,
editable.toString()));
- savedPagesEmptyImage.setVisibility(View.GONE);
- savedPagesEmptyMessage.setVisibility(View.GONE);
- }
- }
- });
-
savedPagesList.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
@@ -211,6 +186,18 @@
getActivity().getSupportLoaderManager().initLoader(LOADER_ID, null,
this);
getActivity().getSupportLoaderManager().restartLoader(LOADER_ID, null,
this);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ entryFilter.addTextChangedListener(textWatcher);
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ entryFilter.removeTextChangedListener(textWatcher);
}
@Override
@@ -394,4 +381,30 @@
}
super.onStop();
}
+
+ private class SavedPageSearchTextWatcher implements TextWatcher {
+ @Override
+ public void beforeTextChanged(CharSequence charSequence, int i, int
i2, int i3) {
+ // Do nothing
+ }
+
+ @Override
+ public void onTextChanged(CharSequence charSequence, int i, int i2,
int i3) {
+ // Do nothing
+ }
+
+ @Override
+ public void afterTextChanged(Editable editable) {
+ getActivity().getSupportLoaderManager().restartLoader(LOADER_ID,
null, SavedPagesFragment.this);
+ if (editable.length() == 0) {
+ savedPagesEmptyTitle.setText(R.string.saved_pages_empty_title);
+ savedPagesEmptyImage.setVisibility(View.VISIBLE);
+ savedPagesEmptyMessage.setVisibility(View.VISIBLE);
+ } else {
+
savedPagesEmptyTitle.setText(getString(R.string.saved_pages_search_empty_message,
editable.toString()));
+ savedPagesEmptyImage.setVisibility(View.GONE);
+ savedPagesEmptyMessage.setVisibility(View.GONE);
+ }
+ }
+ }
}
--
To view, visit https://gerrit.wikimedia.org/r/271554
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I497ebd37f3059b420622416a66ee5b87a15a2d0c
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits