mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 04:43:54 +01:00
Always remove TextWatcher when finished with it.
This commit is contained in:
parent
40c1ea375a
commit
94e0e5e254
4 changed files with 113 additions and 105 deletions
|
|
@ -30,9 +30,10 @@ public class LoginActivity extends AccountAuthenticatorActivity {
|
||||||
|
|
||||||
private Button loginButton;
|
private Button loginButton;
|
||||||
private EditText usernameEdit;
|
private EditText usernameEdit;
|
||||||
EditText passwordEdit;
|
private EditText passwordEdit;
|
||||||
EditText twoFactorEdit;
|
private EditText twoFactorEdit;
|
||||||
ProgressDialog progressDialog;
|
ProgressDialog progressDialog;
|
||||||
|
private LoginTextWatcher textWatcher = new LoginTextWatcher();
|
||||||
|
|
||||||
private CommonsApplication app;
|
private CommonsApplication app;
|
||||||
|
|
||||||
|
|
@ -53,10 +54,9 @@ public class LoginActivity extends AccountAuthenticatorActivity {
|
||||||
|
|
||||||
prefs = getSharedPreferences("fr.free.nrw.commons", MODE_PRIVATE);
|
prefs = getSharedPreferences("fr.free.nrw.commons", MODE_PRIVATE);
|
||||||
|
|
||||||
TextWatcher loginEnabler = newLoginTextWatcher();
|
usernameEdit.addTextChangedListener(textWatcher);
|
||||||
usernameEdit.addTextChangedListener(loginEnabler);
|
passwordEdit.addTextChangedListener(textWatcher);
|
||||||
passwordEdit.addTextChangedListener(loginEnabler);
|
twoFactorEdit.addTextChangedListener(textWatcher);
|
||||||
twoFactorEdit.addTextChangedListener(loginEnabler);
|
|
||||||
passwordEdit.setOnEditorActionListener( newLoginInputActionListener() );
|
passwordEdit.setOnEditorActionListener( newLoginInputActionListener() );
|
||||||
|
|
||||||
loginButton.setOnClickListener(new View.OnClickListener() {
|
loginButton.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
@ -71,27 +71,24 @@ public class LoginActivity extends AccountAuthenticatorActivity {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private TextWatcher newLoginTextWatcher() {
|
private class LoginTextWatcher implements TextWatcher {
|
||||||
return new TextWatcher() {
|
|
||||||
@Override
|
@Override
|
||||||
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) { }
|
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onTextChanged(CharSequence charSequence, int start, int count, int after) { }
|
public void onTextChanged(CharSequence charSequence, int start, int count, int after) {
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void afterTextChanged(Editable editable) {
|
public void afterTextChanged(Editable editable) {
|
||||||
if(
|
if (usernameEdit.getText().length() != 0 && passwordEdit.getText().length() != 0 &&
|
||||||
usernameEdit.getText().length() != 0 &&
|
(BuildConfig.DEBUG || twoFactorEdit.getText().length() != 0 || twoFactorEdit.getVisibility() != View.VISIBLE)) {
|
||||||
passwordEdit.getText().length() != 0 &&
|
|
||||||
( BuildConfig.DEBUG || twoFactorEdit.getText().length() != 0 || twoFactorEdit.getVisibility() != View.VISIBLE )
|
|
||||||
) {
|
|
||||||
loginButton.setEnabled(true);
|
loginButton.setEnabled(true);
|
||||||
} else {
|
} else {
|
||||||
loginButton.setEnabled(false);
|
loginButton.setEnabled(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private TextView.OnEditorActionListener newLoginInputActionListener() {
|
private TextView.OnEditorActionListener newLoginInputActionListener() {
|
||||||
|
|
@ -138,6 +135,9 @@ public class LoginActivity extends AccountAuthenticatorActivity {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
usernameEdit.removeTextChangedListener(textWatcher);
|
||||||
|
passwordEdit.removeTextChangedListener(textWatcher);
|
||||||
|
twoFactorEdit.removeTextChangedListener(textWatcher);
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package fr.free.nrw.commons.category;
|
package fr.free.nrw.commons.category;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.ContentProviderClient;
|
import android.content.ContentProviderClient;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
|
@ -58,6 +57,7 @@ public class CategorizationFragment extends Fragment {
|
||||||
ProgressBar categoriesSearchInProgress;
|
ProgressBar categoriesSearchInProgress;
|
||||||
TextView categoriesNotFoundView;
|
TextView categoriesNotFoundView;
|
||||||
TextView categoriesSkip;
|
TextView categoriesSkip;
|
||||||
|
private CategoryTextWatcher textWatcher = new CategoryTextWatcher();
|
||||||
|
|
||||||
CategoriesAdapter categoriesAdapter;
|
CategoriesAdapter categoriesAdapter;
|
||||||
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2);
|
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2);
|
||||||
|
|
@ -442,21 +442,7 @@ public class CategorizationFragment extends Fragment {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
categoriesFilter.addTextChangedListener(new TextWatcher() {
|
categoriesFilter.addTextChangedListener(textWatcher);
|
||||||
@Override
|
|
||||||
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
|
|
||||||
startUpdatingCategoryList();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterTextChanged(Editable editable) {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
startUpdatingCategoryList();
|
startUpdatingCategoryList();
|
||||||
|
|
||||||
|
|
@ -469,14 +455,6 @@ public class CategorizationFragment extends Fragment {
|
||||||
inflater.inflate(R.menu.fragment_categorization, menu);
|
inflater.inflate(R.menu.fragment_categorization, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
setHasOptionsMenu(true);
|
|
||||||
getActivity().setTitle(R.string.categories_activity_title);
|
|
||||||
client = getActivity().getContentResolver().acquireContentProviderClient(CategoryContentProvider.AUTHORITY);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
|
@ -498,6 +476,12 @@ public class CategorizationFragment extends Fragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
categoriesFilter.removeTextChangedListener(textWatcher);
|
||||||
|
super.onDestroyView();
|
||||||
|
}
|
||||||
|
|
||||||
public void backButtonDialog() {
|
public void backButtonDialog() {
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||||
|
|
||||||
|
|
@ -581,8 +565,27 @@ public class CategorizationFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(Activity activity) {
|
public void onActivityCreated(Bundle savedInstanceState) {
|
||||||
super.onAttach(activity);
|
super.onActivityCreated(savedInstanceState);
|
||||||
onCategoriesSaveHandler = (OnCategoriesSaveHandler) activity;
|
setHasOptionsMenu(true);
|
||||||
|
onCategoriesSaveHandler = (OnCategoriesSaveHandler) getActivity();
|
||||||
|
getActivity().setTitle(R.string.categories_activity_title);
|
||||||
|
client = getActivity().getContentResolver().acquireContentProviderClient(CategoryContentProvider.AUTHORITY);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class CategoryTextWatcher implements TextWatcher {
|
||||||
|
@Override
|
||||||
|
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
|
||||||
|
startUpdatingCategoryList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterTextChanged(Editable editable) {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ public class MultipleUploadListFragment extends Fragment {
|
||||||
private GridView photosGrid;
|
private GridView photosGrid;
|
||||||
private PhotoDisplayAdapter photosAdapter;
|
private PhotoDisplayAdapter photosAdapter;
|
||||||
private EditText baseTitle;
|
private EditText baseTitle;
|
||||||
|
private TitleTextWatcher textWatcher = new TitleTextWatcher();
|
||||||
|
|
||||||
private Point photoSize;
|
private Point photoSize;
|
||||||
private MediaDetailPagerFragment.MediaDetailProvider detailProvider;
|
private MediaDetailPagerFragment.MediaDetailProvider detailProvider;
|
||||||
|
|
@ -88,7 +89,6 @@ public class MultipleUploadListFragment extends Fragment {
|
||||||
holder = (UploadHolderView)view.getTag();
|
holder = (UploadHolderView)view.getTag();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Contribution up = (Contribution)this.getItem(i);
|
Contribution up = (Contribution)this.getItem(i);
|
||||||
|
|
||||||
if(holder.imageUri == null || !holder.imageUri.equals(up.getLocalUri())) {
|
if(holder.imageUri == null || !holder.imageUri.equals(up.getLocalUri())) {
|
||||||
|
|
@ -161,37 +161,16 @@ public class MultipleUploadListFragment extends Fragment {
|
||||||
photoSize = calculatePicDimension(detailProvider.getTotalMediaCount());
|
photoSize = calculatePicDimension(detailProvider.getTotalMediaCount());
|
||||||
photosGrid.setColumnWidth(photoSize.x);
|
photosGrid.setColumnWidth(photoSize.x);
|
||||||
|
|
||||||
baseTitle.addTextChangedListener(new TextWatcher() {
|
baseTitle.addTextChangedListener(textWatcher);
|
||||||
@Override
|
|
||||||
public void beforeTextChanged(CharSequence charSequence, int i1, int i2, int i3) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTextChanged(CharSequence charSequence, int i1, int i2, int i3) {
|
|
||||||
for(int i = 0; i < detailProvider.getTotalMediaCount(); i++) {
|
|
||||||
Contribution up = (Contribution) detailProvider.getMediaAtPosition(i);
|
|
||||||
Boolean isDirty = (Boolean)up.getTag("isDirty");
|
|
||||||
if(isDirty == null || !isDirty) {
|
|
||||||
if(!TextUtils.isEmpty(charSequence)) {
|
|
||||||
up.setFilename(charSequence.toString() + " - " + ((Integer)up.getTag("sequence") + 1));
|
|
||||||
} else {
|
|
||||||
up.setFilename("");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
detailProvider.notifyDatasetChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterTextChanged(Editable editable) {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
baseTitle.removeTextChangedListener(textWatcher);
|
||||||
|
super.onDestroyView();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||||
super.onCreateOptionsMenu(menu, inflater);
|
super.onCreateOptionsMenu(menu, inflater);
|
||||||
|
|
@ -219,4 +198,29 @@ public class MultipleUploadListFragment extends Fragment {
|
||||||
setHasOptionsMenu(true);
|
setHasOptionsMenu(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class TitleTextWatcher implements TextWatcher {
|
||||||
|
@Override
|
||||||
|
public void beforeTextChanged(CharSequence charSequence, int i1, int i2, int i3) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTextChanged(CharSequence charSequence, int i1, int i2, int i3) {
|
||||||
|
for(int i = 0; i < detailProvider.getTotalMediaCount(); i++) {
|
||||||
|
Contribution up = (Contribution) detailProvider.getMediaAtPosition(i);
|
||||||
|
Boolean isDirty = (Boolean)up.getTag("isDirty");
|
||||||
|
if(isDirty == null || !isDirty) {
|
||||||
|
if(!TextUtils.isEmpty(charSequence)) {
|
||||||
|
up.setFilename(charSequence.toString() + " - " + ((Integer)up.getTag("sequence") + 1));
|
||||||
|
} else {
|
||||||
|
up.setFilename("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
detailProvider.notifyDatasetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterTextChanged(Editable editable) {
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package fr.free.nrw.commons.upload;
|
package fr.free.nrw.commons.upload;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
|
@ -53,6 +52,7 @@ public class SingleUploadFragment extends Fragment {
|
||||||
@BindView(R.id.licenseSpinner) Spinner licenseSpinner;
|
@BindView(R.id.licenseSpinner) Spinner licenseSpinner;
|
||||||
|
|
||||||
private OnUploadActionInitiated uploadActionInitiatedHandler;
|
private OnUploadActionInitiated uploadActionInitiatedHandler;
|
||||||
|
private TitleTextWatcher textWatcher = new TitleTextWatcher();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||||
|
|
@ -125,28 +125,19 @@ public class SingleUploadFragment extends Fragment {
|
||||||
Timber.d("Position: %d %s", position, getString(Utils.licenseNameFor(license)));
|
Timber.d("Position: %d %s", position, getString(Utils.licenseNameFor(license)));
|
||||||
licenseSpinner.setSelection(position);
|
licenseSpinner.setSelection(position);
|
||||||
|
|
||||||
TextWatcher uploadEnabler = new TextWatcher() {
|
titleEdit.addTextChangedListener(textWatcher);
|
||||||
@Override
|
|
||||||
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterTextChanged(Editable editable) {
|
|
||||||
if(getActivity() != null) {
|
|
||||||
getActivity().invalidateOptionsMenu();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
titleEdit.addTextChangedListener(uploadEnabler);
|
|
||||||
|
|
||||||
setLicenseSummary(license);
|
setLicenseSummary(license);
|
||||||
|
|
||||||
return rootView;
|
return rootView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroyView() {
|
||||||
|
titleEdit.removeTextChangedListener(textWatcher);
|
||||||
|
super.onDestroyView();
|
||||||
|
}
|
||||||
|
|
||||||
@OnItemSelected(R.id.licenseSpinner) void onLicenseSelected(AdapterView<?> parent, View view, int position, long id) {
|
@OnItemSelected(R.id.licenseSpinner) void onLicenseSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||||
String licenseName = parent.getItemAtPosition(position).toString();
|
String licenseName = parent.getItemAtPosition(position).toString();
|
||||||
|
|
||||||
|
|
@ -206,9 +197,10 @@ public class SingleUploadFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(Activity activity) {
|
public void onActivityCreated(Bundle savedInstanceState) {
|
||||||
super.onAttach(activity);
|
super.onActivityCreated(savedInstanceState);
|
||||||
uploadActionInitiatedHandler = (OnUploadActionInitiated) activity;
|
setHasOptionsMenu(true);
|
||||||
|
uploadActionInitiatedHandler = (OnUploadActionInitiated) getActivity();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -223,9 +215,18 @@ public class SingleUploadFragment extends Fragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class TitleTextWatcher implements TextWatcher {
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { }
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
setHasOptionsMenu(true);
|
@Override
|
||||||
|
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterTextChanged(Editable editable) {
|
||||||
|
if(getActivity() != null) {
|
||||||
|
getActivity().invalidateOptionsMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue