Correctly start and stop listening for repo update events during swap.
This fixes the following bugs: * `BroadcastReceiver` was never being created due to incorrect guard condition `if (pollForUpdatesReceiver != null)` (should have been `== null`). * Called `unregisterReceiver` rather than `registerReceiver`. * Even if it did work, it didn't make an effort to unregister the receiver. In addition, the creation and listening with the `BroadcastReceiver is now done in a way similar to the other swap views: * Create it as a `final` member variable. * `registerReceiver` when view is inflated. * `unregisterReceiver` when view is detached.
This commit is contained in:
parent
cfe2f71e4d
commit
d46efb1d84
@ -118,10 +118,22 @@ public class SwapAppsView extends ListView implements
|
|||||||
|
|
||||||
displayImageOptions = Utils.getImageLoadingOptions().build();
|
displayImageOptions = Utils.getImageLoadingOptions().build();
|
||||||
|
|
||||||
|
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
|
||||||
|
pollForUpdatesReceiver, new IntentFilter(UpdateService.LOCAL_ACTION_STATUS));
|
||||||
|
|
||||||
schedulePollForUpdates();
|
schedulePollForUpdates();
|
||||||
}
|
}
|
||||||
|
|
||||||
private BroadcastReceiver pollForUpdatesReceiver;
|
/**
|
||||||
|
* Remove relevant listeners/receivers/etc so that they do not receive and process events
|
||||||
|
* when this view is not in use.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onDetachedFromWindow() {
|
||||||
|
super.onDetachedFromWindow();
|
||||||
|
|
||||||
|
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(pollForUpdatesReceiver);
|
||||||
|
}
|
||||||
|
|
||||||
private void pollForUpdates() {
|
private void pollForUpdates() {
|
||||||
if (adapter.getCount() > 1 ||
|
if (adapter.getCount() > 1 ||
|
||||||
@ -132,37 +144,6 @@ public class SwapAppsView extends ListView implements
|
|||||||
|
|
||||||
Utils.debugLog(TAG, "Polling swap repo to see if it has any updates.");
|
Utils.debugLog(TAG, "Polling swap repo to see if it has any updates.");
|
||||||
getActivity().getService().refreshSwap();
|
getActivity().getService().refreshSwap();
|
||||||
if (pollForUpdatesReceiver != null) {
|
|
||||||
pollForUpdatesReceiver = new BroadcastReceiver() {
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
int statusCode = intent.getIntExtra(UpdateService.EXTRA_STATUS_CODE, -1);
|
|
||||||
switch (statusCode) {
|
|
||||||
case UpdateService.STATUS_COMPLETE_WITH_CHANGES:
|
|
||||||
Utils.debugLog(TAG, "Swap repo has updates, notifying the list adapter.");
|
|
||||||
getActivity().runOnUiThread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
adapter.notifyDataSetChanged();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(pollForUpdatesReceiver);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case UpdateService.STATUS_ERROR_GLOBAL:
|
|
||||||
// TODO: Well, if we can't get the index, we probably can't swapp apps.
|
|
||||||
// Tell the user somethign helpful?
|
|
||||||
break;
|
|
||||||
|
|
||||||
case UpdateService.STATUS_COMPLETE_AND_SAME:
|
|
||||||
schedulePollForUpdates();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
// TODO: Unregister this properly, not just when successful (see swithc statement above)
|
|
||||||
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(pollForUpdatesReceiver);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void schedulePollForUpdates() {
|
private void schedulePollForUpdates() {
|
||||||
@ -486,4 +467,31 @@ public class SwapAppsView extends ListView implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final BroadcastReceiver pollForUpdatesReceiver = new BroadcastReceiver() {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
int statusCode = intent.getIntExtra(UpdateService.EXTRA_STATUS_CODE, -1);
|
||||||
|
switch (statusCode) {
|
||||||
|
case UpdateService.STATUS_COMPLETE_WITH_CHANGES:
|
||||||
|
Utils.debugLog(TAG, "Swap repo has updates, notifying the list adapter.");
|
||||||
|
getActivity().runOnUiThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
|
||||||
|
case UpdateService.STATUS_ERROR_GLOBAL:
|
||||||
|
// TODO: Well, if we can't get the index, we probably can't swapp apps.
|
||||||
|
// Tell the user something helpful?
|
||||||
|
break;
|
||||||
|
|
||||||
|
case UpdateService.STATUS_COMPLETE_AND_SAME:
|
||||||
|
schedulePollForUpdates();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user