Skip to content

Commit 41395b5

Browse files
committed
Registering and unregistering listeners based on activity lifecycle instead of view attach
1 parent 8e073d9 commit 41395b5

File tree

1 file changed

+41
-7
lines changed

1 file changed

+41
-7
lines changed

ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutView.java

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.snabble.sdk.ui.checkout;
22

3+
import android.app.Activity;
4+
import android.app.Application;
35
import android.app.ProgressDialog;
46
import android.content.Context;
57
import android.content.DialogInterface;
@@ -16,6 +18,8 @@
1618
import io.snabble.sdk.ui.R;
1719
import io.snabble.sdk.ui.SnabbleUI;
1820
import io.snabble.sdk.ui.utils.DelayedProgressDialog;
21+
import io.snabble.sdk.ui.utils.UIUtils;
22+
import io.snabble.sdk.utils.SimpleActivityLifecycleCallbacks;
1923

2024
public class CheckoutView extends FrameLayout implements Checkout.OnCheckoutStateChangedListener {
2125
private ViewAnimator viewAnimator;
@@ -126,22 +130,52 @@ public void displayView(View view) {
126130
ViewGroup.LayoutParams.MATCH_PARENT));
127131
}
128132

133+
public void registerListeners() {
134+
checkout.addOnCheckoutStateChangedListener(this);
135+
progressDialog.setOnCancelListener(onCancelListener);
136+
}
137+
138+
public void unregisterListeners() {
139+
checkout.removeOnCheckoutStateChangedListener(this);
140+
141+
progressDialog.setOnCancelListener(null);
142+
progressDialog.dismiss();
143+
}
144+
129145
@Override
130-
protected void onAttachedToWindow() {
146+
public void onAttachedToWindow() {
131147
super.onAttachedToWindow();
132148

133-
checkout.addOnCheckoutStateChangedListener(this);
149+
Application application = (Application) getContext().getApplicationContext();
150+
application.registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
134151

135-
progressDialog.setOnCancelListener(onCancelListener);
152+
registerListeners();
136153
}
137154

138155
@Override
139-
protected void onDetachedFromWindow() {
156+
public void onDetachedFromWindow() {
140157
super.onDetachedFromWindow();
141158

142-
checkout.removeOnCheckoutStateChangedListener(this);
159+
Application application = (Application) getContext().getApplicationContext();
160+
application.unregisterActivityLifecycleCallbacks(activityLifecycleCallbacks);
143161

144-
progressDialog.setOnCancelListener(null);
145-
progressDialog.dismiss();
162+
unregisterListeners();
146163
}
164+
165+
private Application.ActivityLifecycleCallbacks activityLifecycleCallbacks =
166+
new SimpleActivityLifecycleCallbacks() {
167+
@Override
168+
public void onActivityStarted(Activity activity) {
169+
if (UIUtils.getHostActivity(getContext()) == activity) {
170+
registerListeners();
171+
}
172+
}
173+
174+
@Override
175+
public void onActivityStopped(Activity activity) {
176+
if (UIUtils.getHostActivity(getContext()) == activity) {
177+
unregisterListeners();
178+
}
179+
}
180+
};
147181
}

0 commit comments

Comments
 (0)