/* == This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
*
* Copyright 2013, Enno Gottschalk <mrmaffen@googlemail.com>
*
* Tomahawk is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Tomahawk is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Tomahawk. If not, see <http://www.gnu.org/licenses/>.
*/
package org.tomahawk.tomahawk_android.fragments;
import org.jdeferred.DoneCallback;
import org.tomahawk.libtomahawk.authentication.AuthenticatorManager;
import org.tomahawk.libtomahawk.authentication.HatchetAuthenticatorUtils;
import org.tomahawk.libtomahawk.infosystem.InfoRequestData;
import org.tomahawk.libtomahawk.infosystem.InfoSystem;
import org.tomahawk.libtomahawk.infosystem.User;
import org.tomahawk.tomahawk_android.R;
import org.tomahawk.tomahawk_android.TomahawkApp;
import org.tomahawk.tomahawk_android.utils.FragmentInfo;
import org.tomahawk.tomahawk_android.utils.PreferenceUtils;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
public class UserPagerFragment extends PagerFragment {
private User mUser;
/**
* Called, when this {@link org.tomahawk.tomahawk_android.fragments.UserPagerFragment}'s {@link
* android.view.View} has been created
*/
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getActivity().setTitle("");
int initialPage = -1;
if (getArguments() != null) {
if (getArguments().containsKey(TomahawkFragment.CONTAINER_FRAGMENT_PAGE)) {
initialPage = getArguments().getInt(TomahawkFragment.CONTAINER_FRAGMENT_PAGE);
}
if (getArguments().containsKey(TomahawkFragment.USER) && !TextUtils
.isEmpty(getArguments().getString(TomahawkFragment.USER))) {
mUser = User.getUserById(getArguments().getString(TomahawkFragment.USER));
if (mUser == null) {
getActivity().getSupportFragmentManager().popBackStack();
return;
} else if (mUser.getName() == null) {
String requestId = InfoSystem.get().resolve(mUser);
if (requestId != null) {
mCorrespondingRequestIds.add(requestId);
}
}
}
}
User.getSelf().done(new DoneCallback<User>() {
@Override
public void onDone(User user) {
if (user != null && user.getFollowings() == null) {
String requestId = InfoSystem.get().resolveFollowings(user);
if (requestId != null) {
mCorrespondingRequestIds.add(requestId);
}
}
}
});
mFollowButtonListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
final HatchetAuthenticatorUtils authUtils =
(HatchetAuthenticatorUtils) AuthenticatorManager.get()
.getAuthenticatorUtils(TomahawkApp.PLUGINNAME_HATCHET);
User.getSelf().done(new DoneCallback<User>() {
@Override
public void onDone(User user) {
if (user.getFollowings() != null
&& user.getFollowings().containsKey(mUser)) {
String relationshipId = user.getFollowings().get(mUser);
InfoSystem.get().deleteRelationship(authUtils, relationshipId);
mShowFakeNotFollowing = true;
mShowFakeFollowing = false;
} else {
InfoSystem.get().sendRelationshipPostStruct(authUtils, mUser);
mShowFakeNotFollowing = false;
mShowFakeFollowing = true;
}
}
});
showContentHeader(mUser);
}
};
showContentHeader(mUser);
List<FragmentInfoList> fragmentInfoLists = new ArrayList<>();
FragmentInfoList fragmentInfoList = new FragmentInfoList();
FragmentInfo fragmentInfo = new FragmentInfo();
fragmentInfo.mClass = SocialActionsFragment.class;
fragmentInfo.mTitle = getString(R.string.activity);
fragmentInfo.mBundle = getChildFragmentBundle();
fragmentInfo.mBundle.putString(TomahawkFragment.USER, mUser.getCacheKey());
fragmentInfo.mBundle
.putInt(TomahawkFragment.SHOW_MODE, SocialActionsFragment.SHOW_MODE_SOCIALACTIONS);
fragmentInfo.mIconResId = R.drawable.ic_action_activity;
fragmentInfoList.addFragmentInfo(fragmentInfo);
fragmentInfoLists.add(fragmentInfoList);
fragmentInfoList = new FragmentInfoList();
fragmentInfo = new FragmentInfo();
fragmentInfo.mClass = AlbumsFragment.class;
fragmentInfo.mTitle = getString(R.string.drawer_title_collection);
fragmentInfo.mBundle = getChildFragmentBundle();
fragmentInfo.mBundle.putString(TomahawkFragment.USER, mUser.getCacheKey());
fragmentInfo.mIconResId = R.drawable.ic_action_collection;
fragmentInfoList.addFragmentInfo(fragmentInfo);
fragmentInfo = new FragmentInfo();
fragmentInfo.mClass = PlaylistsFragment.class;
fragmentInfo.mTitle = getString(R.string.drawer_title_playlists);
fragmentInfo.mBundle = getChildFragmentBundle();
fragmentInfo.mBundle.putString(TomahawkFragment.USER, mUser.getCacheKey());
fragmentInfo.mIconResId = R.drawable.ic_action_playlist;
fragmentInfoList.addFragmentInfo(fragmentInfo);
fragmentInfo = new FragmentInfo();
fragmentInfo.mClass = PlaylistEntriesFragment.class;
fragmentInfo.mTitle = getString(R.string.history);
fragmentInfo.mBundle = getChildFragmentBundle();
fragmentInfo.mBundle.putInt(TomahawkFragment.SHOW_MODE,
PlaylistEntriesFragment.SHOW_MODE_PLAYBACKLOG);
fragmentInfo.mBundle.putString(TomahawkFragment.USER, mUser.getCacheKey());
fragmentInfo.mIconResId = R.drawable.ic_action_history;
fragmentInfoList.addFragmentInfo(fragmentInfo);
fragmentInfo = new FragmentInfo();
fragmentInfo.mClass = PlaylistEntriesFragment.class;
fragmentInfo.mTitle = getString(R.string.drawer_title_lovedtracks);
fragmentInfo.mBundle = getChildFragmentBundle();
fragmentInfo.mBundle.putInt(TomahawkFragment.SHOW_MODE,
PlaylistEntriesFragment.SHOW_MODE_LOVEDITEMS);
fragmentInfo.mBundle.putString(TomahawkFragment.USER, mUser.getCacheKey());
fragmentInfo.mIconResId = R.drawable.ic_action_favorites;
fragmentInfoList.addFragmentInfo(fragmentInfo);
fragmentInfoList.setCurrent(
PreferenceUtils.getInt(PreferenceUtils.USERPAGER_SELECTOR_POSITION));
fragmentInfoLists.add(fragmentInfoList);
fragmentInfoList = new FragmentInfoList();
fragmentInfo = new FragmentInfo();
fragmentInfo.mClass = UsersFragment.class;
fragmentInfo.mTitle = getString(R.string.followers);
fragmentInfo.mBundle = getChildFragmentBundle();
fragmentInfo.mBundle.putInt(TomahawkFragment.SHOW_MODE,
UsersFragment.SHOW_MODE_TYPE_FOLLOWERS);
fragmentInfo.mBundle.putString(TomahawkFragment.USER, mUser.getCacheKey());
fragmentInfo.mIconResId = R.drawable.ic_action_friend;
fragmentInfoList.addFragmentInfo(fragmentInfo);
fragmentInfo = new FragmentInfo();
fragmentInfo.mClass = UsersFragment.class;
fragmentInfo.mTitle = getString(R.string.following);
fragmentInfo.mBundle = getChildFragmentBundle();
fragmentInfo.mBundle.putInt(TomahawkFragment.SHOW_MODE,
UsersFragment.SHOW_MODE_TYPE_FOLLOWINGS);
fragmentInfo.mBundle.putString(TomahawkFragment.USER, mUser.getCacheKey());
fragmentInfo.mIconResId = R.drawable.ic_action_friend;
fragmentInfoList.addFragmentInfo(fragmentInfo);
fragmentInfoLists.add(fragmentInfoList);
setupPager(fragmentInfoLists, initialPage, PreferenceUtils.USERPAGER_SELECTOR_POSITION, 1);
}
@Override
protected void onInfoSystemResultsReported(InfoRequestData infoRequestData) {
InfoRequestData sentLoggedOp = InfoSystem.get()
.getSentLoggedOpById(infoRequestData.getRequestId());
if (sentLoggedOp != null
&& sentLoggedOp.getType() == InfoRequestData.INFOREQUESTDATA_TYPE_RELATIONSHIPS
&& (sentLoggedOp.getHttpType() == InfoRequestData.HTTPTYPE_DELETE
|| sentLoggedOp.getHttpType() == InfoRequestData.HTTPTYPE_POST)) {
User.getSelf().done(new DoneCallback<User>() {
@Override
public void onDone(User user) {
String requestId = InfoSystem.get().resolveFollowings(user);
if (requestId != null) {
mCorrespondingRequestIds.add(requestId);
}
}
});
}
if (mCorrespondingRequestIds.contains(infoRequestData.getRequestId())) {
if (infoRequestData.getType() == InfoRequestData.INFOREQUESTDATA_TYPE_USERS_FOLLOWS) {
mShowFakeFollowing = false;
mShowFakeNotFollowing = false;
}
}
showContentHeader(mUser);
}
}