Check if fragment is attached to activity on API callbacks, to prevent crashes.

This commit is contained in:
Synced Synapse 2015-01-22 22:19:28 +00:00
parent 7a4352f221
commit c7d822e68a
10 changed files with 79 additions and 51 deletions

View File

@ -155,16 +155,16 @@ public class AddonDetailsFragment extends Fragment {
action.execute(hostManager.getConnection(), new ApiCallback<AddonType.Details>() {
@Override
public void onSucess(AddonType.Details result) {
if (!isAdded()) return;
displayAddonDetails(result);
}
@Override
public void onError(int errorCode, String description) {
if (isAdded()) {
Toast.makeText(getActivity(),
String.format(getString(R.string.error_getting_addon_info), description),
Toast.LENGTH_SHORT).show();
}
if (!isAdded()) return;
Toast.makeText(getActivity(),
String.format(getString(R.string.error_getting_addon_info), description),
Toast.LENGTH_SHORT).show();
}
}, callbackHandler);
}
@ -199,6 +199,7 @@ public class AddonDetailsFragment extends Fragment {
@Override
public void onError(int errorCode, String description) {
if (!isAdded()) return;
// Got an error, show toast
Toast.makeText(getActivity(), R.string.unable_to_connect_to_xbmc, Toast.LENGTH_SHORT)
.show();
@ -213,21 +214,19 @@ public class AddonDetailsFragment extends Fragment {
action.execute(hostManager.getConnection(), new ApiCallback<String>() {
@Override
public void onSucess(String result) {
if (isAdded()) {
int messageResId = (!isEnabled) ? R.string.addon_enabled : R.string.addon_disabled;
Toast.makeText(getActivity(), messageResId, Toast.LENGTH_SHORT).show();
setupEnableButton(!isEnabled);
}
if (!isAdded()) return;
int messageResId = (!isEnabled) ? R.string.addon_enabled : R.string.addon_disabled;
Toast.makeText(getActivity(), messageResId, Toast.LENGTH_SHORT).show();
setupEnableButton(!isEnabled);
}
@Override
public void onError(int errorCode, String description) {
if (isAdded()) {
Toast.makeText(getActivity(),
String.format(getString(R.string.general_error_executing_action), description),
Toast.LENGTH_SHORT)
.show();
}
if (!isAdded()) return;
Toast.makeText(getActivity(),
String.format(getString(R.string.general_error_executing_action), description),
Toast.LENGTH_SHORT)
.show();
}
}, callbackHandler);
}

View File

@ -183,6 +183,8 @@ public class AddonListFragment extends Fragment
action.execute(hostManager.getConnection(), new ApiCallback<List<AddonType.Details>>() {
@Override
public void onSucess(List<AddonType.Details> result) {
if (!isAdded()) return;
adapter.clear();
for (AddonType.Details addon : result) {
if (addon.type.equals(AddonType.Types.UNKNOWN) ||
@ -203,14 +205,14 @@ public class AddonListFragment extends Fragment
@Override
public void onError(int errorCode, String description) {
if (isAdded()) {
// To prevent the empty text from appearing on the first load, set it now
emptyView.setText(getString(R.string.no_addons_found_refresh));
Toast.makeText(getActivity(),
String.format(getString(R.string.error_getting_addon_info), description),
Toast.LENGTH_SHORT).show();
swipeRefreshLayout.setRefreshing(false);
}
if (!isAdded()) return;
// To prevent the empty text from appearing on the first load, set it now
emptyView.setText(getString(R.string.no_addons_found_refresh));
Toast.makeText(getActivity(),
String.format(getString(R.string.error_getting_addon_info), description),
Toast.LENGTH_SHORT).show();
swipeRefreshLayout.setRefreshing(false);
}
}, callbackHandler);
}

View File

@ -263,6 +263,7 @@ public class AlbumDetailsFragment extends Fragment
action.execute(hostManager.getConnection(), new ApiCallback<String>() {
@Override
public void onSucess(String result) {
if (!isAdded()) return;
// Check whether we should switch to the remote
boolean switchToRemote = PreferenceManager
.getDefaultSharedPreferences(getActivity())
@ -277,6 +278,7 @@ public class AlbumDetailsFragment extends Fragment
@Override
public void onError(int errorCode, String description) {
if (!isAdded()) return;
// Got an error, show toast
Toast.makeText(getActivity(), R.string.unable_to_connect_to_xbmc, Toast.LENGTH_SHORT)
.show();
@ -464,6 +466,7 @@ public class AlbumDetailsFragment extends Fragment
getPlaylists.execute(hostManager.getConnection(), new ApiCallback<ArrayList<PlaylistType.GetPlaylistsReturnType>>() {
@Override
public void onSucess(ArrayList<PlaylistType.GetPlaylistsReturnType> result) {
if (!isAdded()) return;
// Ok, loop through the playlists, looking for the audio one
int audioPlaylistId = -1;
for (PlaylistType.GetPlaylistsReturnType playlist : result) {
@ -484,6 +487,7 @@ public class AlbumDetailsFragment extends Fragment
action.execute(hostManager.getConnection(), new ApiCallback<String>() {
@Override
public void onSucess(String result) {
if (!isAdded()) return;
// Got an error, show toast
Toast.makeText(getActivity(), R.string.item_added_to_playlist, Toast.LENGTH_SHORT)
.show();
@ -491,6 +495,7 @@ public class AlbumDetailsFragment extends Fragment
@Override
public void onError(int errorCode, String description) {
if (!isAdded()) return;
// Got an error, show toast
Toast.makeText(getActivity(), R.string.unable_to_connect_to_xbmc, Toast.LENGTH_SHORT)
.show();
@ -504,6 +509,7 @@ public class AlbumDetailsFragment extends Fragment
@Override
public void onError(int errorCode, String description) {
if (!isAdded()) return;
// Got an error, show toast
Toast.makeText(getActivity(), R.string.unable_to_connect_to_xbmc, Toast.LENGTH_SHORT)
.show();

View File

@ -341,6 +341,7 @@ public class MovieDetailsFragment extends Fragment
action.execute(hostManager.getConnection(), new ApiCallback<String>() {
@Override
public void onSucess(String result) {
if (!isAdded()) return;
// Check whether we should switch to the remote
boolean switchToRemote = PreferenceManager
.getDefaultSharedPreferences(getActivity())
@ -355,6 +356,7 @@ public class MovieDetailsFragment extends Fragment
@Override
public void onError(int errorCode, String description) {
if (!isAdded()) return;
// Got an error, show toast
Toast.makeText(getActivity(), R.string.unable_to_connect_to_xbmc, Toast.LENGTH_SHORT)
.show();
@ -369,6 +371,7 @@ public class MovieDetailsFragment extends Fragment
getPlaylists.execute(hostManager.getConnection(), new ApiCallback<ArrayList<PlaylistType.GetPlaylistsReturnType>>() {
@Override
public void onSucess(ArrayList<PlaylistType.GetPlaylistsReturnType> result) {
if (!isAdded()) return;
// Ok, loop through the playlists, looking for the video one
int videoPlaylistId = -1;
for (PlaylistType.GetPlaylistsReturnType playlist : result) {
@ -385,6 +388,7 @@ public class MovieDetailsFragment extends Fragment
action.execute(hostManager.getConnection(), new ApiCallback<String>() {
@Override
public void onSucess(String result) {
if (!isAdded()) return;
// Got an error, show toast
Toast.makeText(getActivity(), R.string.item_added_to_playlist, Toast.LENGTH_SHORT)
.show();
@ -392,6 +396,7 @@ public class MovieDetailsFragment extends Fragment
@Override
public void onError(int errorCode, String description) {
if (!isAdded()) return;
// Got an error, show toast
Toast.makeText(getActivity(), R.string.unable_to_connect_to_xbmc, Toast.LENGTH_SHORT)
.show();
@ -405,6 +410,7 @@ public class MovieDetailsFragment extends Fragment
@Override
public void onError(int errorCode, String description) {
if (!isAdded()) return;
// Got an error, show toast
Toast.makeText(getActivity(), R.string.unable_to_connect_to_xbmc, Toast.LENGTH_SHORT)
.show();
@ -432,9 +438,9 @@ public class MovieDetailsFragment extends Fragment
action.execute(hostManager.getConnection(), new ApiCallback<String>() {
@Override
public void onSucess(String result) {
if (!isAdded()) return;
// Force a refresh, but don't show a message
if (isAdded())
startSync(true);
startSync(true);
}
@Override

View File

@ -300,6 +300,7 @@ public class MusicVideoDetailsFragment extends Fragment
action.execute(hostManager.getConnection(), new ApiCallback<String>() {
@Override
public void onSucess(String result) {
if (!isAdded()) return;
// Check whether we should switch to the remote
boolean switchToRemote = PreferenceManager
.getDefaultSharedPreferences(getActivity())
@ -314,6 +315,7 @@ public class MusicVideoDetailsFragment extends Fragment
@Override
public void onError(int errorCode, String description) {
if (!isAdded()) return;
// Got an error, show toast
Toast.makeText(getActivity(), R.string.unable_to_connect_to_xbmc, Toast.LENGTH_SHORT)
.show();
@ -328,6 +330,7 @@ public class MusicVideoDetailsFragment extends Fragment
getPlaylists.execute(hostManager.getConnection(), new ApiCallback<ArrayList<PlaylistType.GetPlaylistsReturnType>>() {
@Override
public void onSucess(ArrayList<PlaylistType.GetPlaylistsReturnType> result) {
if (!isAdded()) return;
// Ok, loop through the playlists, looking for the video one
int videoPlaylistId = -1;
for (PlaylistType.GetPlaylistsReturnType playlist : result) {
@ -344,37 +347,32 @@ public class MusicVideoDetailsFragment extends Fragment
action.execute(hostManager.getConnection(), new ApiCallback<String>() {
@Override
public void onSucess(String result) {
if (isAdded()) {
// Got an error, show toast
Toast.makeText(getActivity(), R.string.item_added_to_playlist, Toast.LENGTH_SHORT)
.show();
}
if (!isAdded()) return;
// Got an error, show toast
Toast.makeText(getActivity(), R.string.item_added_to_playlist, Toast.LENGTH_SHORT)
.show();
}
@Override
public void onError(int errorCode, String description) {
if (isAdded()) {
// Got an error, show toast
Toast.makeText(getActivity(), R.string.unable_to_connect_to_xbmc, Toast.LENGTH_SHORT)
.show();
}
if (!isAdded()) return;
// Got an error, show toast
Toast.makeText(getActivity(), R.string.unable_to_connect_to_xbmc, Toast.LENGTH_SHORT)
.show();
}
}, callbackHandler);
} else {
if (isAdded()) {
Toast.makeText(getActivity(), R.string.no_suitable_playlist, Toast.LENGTH_SHORT)
.show();
}
Toast.makeText(getActivity(), R.string.no_suitable_playlist, Toast.LENGTH_SHORT)
.show();
}
}
@Override
public void onError(int errorCode, String description) {
if (isAdded()) {
// Got an error, show toast
Toast.makeText(getActivity(), R.string.unable_to_connect_to_xbmc, Toast.LENGTH_SHORT)
.show();
}
if (!isAdded()) return;
// Got an error, show toast
Toast.makeText(getActivity(), R.string.unable_to_connect_to_xbmc, Toast.LENGTH_SHORT)
.show();
}
}, callbackHandler);
}

View File

@ -245,6 +245,7 @@ public class NowPlayingFragment extends Fragment
private ApiCallback<Integer> defaultPlaySpeedChangedCallback = new ApiCallback<Integer>() {
@Override
public void onSucess(Integer result) {
if (!isAdded()) return;
UIUtils.setPlayPauseButtonIcon(getActivity(), playButton, result);
}
@ -311,6 +312,7 @@ public class NowPlayingFragment extends Fragment
action.execute(hostManager.getConnection(), new ApiCallback<Boolean>() {
@Override
public void onSucess(Boolean result) {
if (!isAdded()) return;
if (result) {
Resources.Theme theme = getActivity().getTheme();
TypedArray styledAttributes = theme.obtainStyledAttributes(new int[] {
@ -324,9 +326,7 @@ public class NowPlayingFragment extends Fragment
}
@Override
public void onError(int errorCode, String description) {
}
public void onError(int errorCode, String description) { }
}, callbackHandler);
}
@ -336,6 +336,7 @@ public class NowPlayingFragment extends Fragment
action.execute(hostManager.getConnection(), new ApiCallback<String>() {
@Override
public void onSucess(String result) {
if (!isAdded()) return;
// Force a refresh
hostConnectionObserver.forceRefreshResults();
}
@ -351,6 +352,7 @@ public class NowPlayingFragment extends Fragment
action.execute(hostManager.getConnection(), new ApiCallback<String>() {
@Override
public void onSucess(String result) {
if (!isAdded()) return;
hostConnectionObserver.forceRefreshResults();
}
@ -445,6 +447,7 @@ public class NowPlayingFragment extends Fragment
getProperties.execute(hostManager.getConnection(), new ApiCallback<ApplicationType.PropertyValue>() {
@Override
public void onSucess(ApplicationType.PropertyValue result) {
if (!isAdded()) return;
// Ok, we've got a version, decide which method to call
if (result.version.major < 13) {
showDownloadSubtitlesPreGotham();
@ -455,6 +458,7 @@ public class NowPlayingFragment extends Fragment
@Override
public void onError(int errorCode, String description) {
if (!isAdded()) return;
// Something went wrong
Toast.makeText(getActivity(),
String.format(getString(R.string.error_getting_properties), description),
@ -481,12 +485,14 @@ public class NowPlayingFragment extends Fragment
action.execute(hostManager.getConnection(), new ApiCallback<String>() {
@Override
public void onSucess(String result) {
if (!isAdded()) return;
// Notify enclosing activity to switch panels
nowPlayingListener.SwitchToRemotePanel();
}
@Override
public void onError(int errorCode, String description) {
if (!isAdded()) return;
Toast.makeText(getActivity(),
String.format(getString(R.string.error_executing_subtitles), description),
Toast.LENGTH_SHORT).show();

View File

@ -382,11 +382,13 @@ public class PlaylistFragment extends Fragment
getPlaylists.execute(hostManager.getConnection(), new ApiCallback<ArrayList<PlaylistType.GetPlaylistsReturnType>>() {
@Override
public void onSucess(ArrayList<PlaylistType.GetPlaylistsReturnType> result) {
if (!isAdded()) return;
getPlaylistItems(getActivePlayerResult, getItemResult, result);
}
@Override
public void onError(int errorCode, String description) {
if (!isAdded()) return;
// Oops
displayErrorGettingPlaylistMessage(description);
}
@ -434,6 +436,7 @@ public class PlaylistFragment extends Fragment
getItems.execute(hostManager.getConnection(), new ApiCallback<List<ListType.ItemsAll>>() {
@Override
public void onSucess(List<ListType.ItemsAll> result) {
if (!isAdded()) return;
// Ok, we've got all the info, save and display playlist
lastGetPlaylistItemsResult = result;
displayPlaylist(getItemResult, result);
@ -441,6 +444,7 @@ public class PlaylistFragment extends Fragment
@Override
public void onError(int errorCode, String description) {
if (!isAdded()) return;
// Oops
displayErrorGettingPlaylistMessage(description);
}

View File

@ -270,6 +270,7 @@ public class RemoteFragment extends Fragment
private ApiCallback<Integer> defaultPlaySpeedChangedCallback = new ApiCallback<Integer>() {
@Override
public void onSucess(Integer result) {
if (!isAdded()) return;
UIUtils.setPlayPauseButtonIcon(getActivity(), playButton, result);
}

View File

@ -228,7 +228,7 @@ public class SettingsFragment extends PreferenceFragment
// update UI accordingly
mSettings.hasBoughtCoffee = hasUpgrade;
setupPreferences(mSettings.hasBoughtCoffee);
if (isAdded()) setupPreferences(mSettings.hasBoughtCoffee);
mSettings.save();
}
});

View File

@ -334,6 +334,7 @@ public class TVShowEpisodeDetailsFragment extends Fragment
action.execute(hostManager.getConnection(), new ApiCallback<String>() {
@Override
public void onSucess(String result) {
if (!isAdded()) return;
// Check whether we should switch to the remote
boolean switchToRemote = PreferenceManager
.getDefaultSharedPreferences(getActivity())
@ -348,6 +349,7 @@ public class TVShowEpisodeDetailsFragment extends Fragment
@Override
public void onError(int errorCode, String description) {
if (!isAdded()) return;
// Got an error, show toast
Toast.makeText(getActivity(), R.string.unable_to_connect_to_xbmc, Toast.LENGTH_SHORT)
.show();
@ -362,6 +364,7 @@ public class TVShowEpisodeDetailsFragment extends Fragment
getPlaylists.execute(hostManager.getConnection(), new ApiCallback<ArrayList<PlaylistType.GetPlaylistsReturnType>>() {
@Override
public void onSucess(ArrayList<PlaylistType.GetPlaylistsReturnType> result) {
if (!isAdded()) return;
// Ok, loop through the playlists, looking for the video one
int videoPlaylistId = -1;
for (PlaylistType.GetPlaylistsReturnType playlist : result) {
@ -378,6 +381,7 @@ public class TVShowEpisodeDetailsFragment extends Fragment
action.execute(hostManager.getConnection(), new ApiCallback<String>() {
@Override
public void onSucess(String result) {
if (!isAdded()) return;
// Got an error, show toast
Toast.makeText(getActivity(), R.string.item_added_to_playlist, Toast.LENGTH_SHORT)
.show();
@ -385,12 +389,14 @@ public class TVShowEpisodeDetailsFragment extends Fragment
@Override
public void onError(int errorCode, String description) {
if (!isAdded()) return;
// Got an error, show toast
Toast.makeText(getActivity(), R.string.unable_to_connect_to_xbmc, Toast.LENGTH_SHORT)
.show();
}
}, callbackHandler);
} else {
if (!isAdded()) return;
Toast.makeText(getActivity(), R.string.no_suitable_playlist, Toast.LENGTH_SHORT)
.show();
}
@ -417,8 +423,8 @@ public class TVShowEpisodeDetailsFragment extends Fragment
@Override
public void onSucess(String result) {
// Force a refresh, but don't show a message
if (isAdded())
startSync(true);
if (!isAdded()) return;
startSync(true);
}
@Override