prevent crashes after detach in manage security token fragment

This commit is contained in:
Vincent Breitmoser
2017-09-27 20:14:58 +02:00
parent a155201400
commit 4a0c61a478
3 changed files with 16 additions and 5 deletions

View File

@@ -30,6 +30,7 @@ import org.sufficientlysecure.keychain.ui.token.ManageSecurityTokenFragment.Stat
class ManageSecurityTokenContract { class ManageSecurityTokenContract {
interface ManageSecurityTokenMvpPresenter { interface ManageSecurityTokenMvpPresenter {
void setView(ManageSecurityTokenMvpView createSecurityTokenImportFragment); void setView(ManageSecurityTokenMvpView createSecurityTokenImportFragment);
void detach();
void onActivityCreated(); void onActivityCreated();
void onClickRetry(); void onClickRetry();

View File

@@ -145,7 +145,7 @@ public class ManageSecurityTokenFragment extends Fragment implements ManageSecur
public void onDestroyView() { public void onDestroyView() {
super.onDestroyView(); super.onDestroyView();
presenter.setView(null); presenter.detach();
} }
@Override @Override

View File

@@ -81,6 +81,16 @@ class ManageSecurityTokenPresenter implements ManageSecurityTokenMvpPresenter {
this.view = view; this.view = view;
} }
@Override
public void detach() {
this.view = null;
loaderManager.destroyLoader(LOADER_LOCAL);
loaderManager.destroyLoader(LOADER_URI);
loaderManager.destroyLoader(LOADER_KEYSERVER);
loaderManager.destroyLoader(LOADER_CONTENT_URI);
}
@Override @Override
public void onActivityCreated() { public void onActivityCreated() {
if (!checkedKeyStatus || !searchedLocally || !searchedAtUri || !searchedKeyservers) { if (!checkedKeyStatus || !searchedLocally || !searchedAtUri || !searchedKeyservers) {
@@ -143,6 +153,10 @@ class ManageSecurityTokenPresenter implements ManageSecurityTokenMvpPresenter {
new Handler().postDelayed(new Runnable() { new Handler().postDelayed(new Runnable() {
@Override @Override
public void run() { public void run() {
if (view == null) {
return;
}
performKeyCheck(); performKeyCheck();
} }
}, 1000); }, 1000);
@@ -220,10 +234,6 @@ class ManageSecurityTokenPresenter implements ManageSecurityTokenMvpPresenter {
@Override @Override
public void onLoadFinished(Loader<KeyRetrievalResult> loader, KeyRetrievalResult data) { public void onLoadFinished(Loader<KeyRetrievalResult> loader, KeyRetrievalResult data) {
if (view == null) {
return;
}
switch (loader.getId()) { switch (loader.getId()) {
case LOADER_LOCAL: { case LOADER_LOCAL: {
searchedLocally = true; searchedLocally = true;