/*
* Copyright (c) 2015 Ushahidi Inc
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option)
* any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program in the file LICENSE-AGPL. If not, see
* https://www.gnu.org/licenses/agpl-3.0.html
*/
package com.ushahidi.platform.mobile.app.presentation.view.ui.fragment;
import com.addhen.android.raiburari.presentation.ui.fragment.BaseFragment;
import com.squareup.picasso.Picasso;
import com.ushahidi.platform.mobile.app.R;
import com.ushahidi.platform.mobile.app.presentation.UshahidiApplication;
import com.ushahidi.platform.mobile.app.presentation.di.components.post.UserProfileComponent;
import com.ushahidi.platform.mobile.app.presentation.model.UserProfileModel;
import com.ushahidi.platform.mobile.app.presentation.state.LoadUserProfileEvent;
import com.ushahidi.platform.mobile.app.presentation.state.NoAccessTokenEvent;
import com.ushahidi.platform.mobile.app.presentation.state.RxEventBus;
import com.ushahidi.platform.mobile.app.presentation.util.GravatarUtility;
import com.ushahidi.platform.mobile.app.presentation.view.ui.activity.PostActivity;
import com.ushahidi.platform.mobile.app.presentation.view.ui.navigation.Launcher;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.widget.AppCompatTextView;
import android.view.View;
import android.widget.ImageView;
import javax.inject.Inject;
import butterknife.ButterKnife;
import butterknife.OnClick;
import rx.subscriptions.CompositeSubscription;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static butterknife.ButterKnife.findById;
/**
* Fragment for showing logged User profile prompt user to login
*
* @author Ushahidi Team <team@ushahidi.com>
*/
public class UserProfileFragment extends BaseFragment {
@Inject
Launcher mLauncher;
RxEventBus mRxEventBus;
// User profile
private View mLoginLayout;
private View mUserProfileLayout;
// So we can close the nav drawer
private DrawerLayout mDrawerLayout;
private CompositeSubscription mSubscriptions = new CompositeSubscription();
public UserProfileFragment() {
super(R.layout.fragment_user_profile, 0);
}
public static UserProfileFragment newInstance() {
return new UserProfileFragment();
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mLoginLayout = findById(view, R.id.layout_user_login);
mUserProfileLayout = findById(view, R.id.layout_user_profile);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initialize();
mRxEventBus = UshahidiApplication.getRxEventBusInstance();
}
@Override
public void onStart() {
super.onStart();
mSubscriptions = new CompositeSubscription();
mSubscriptions
.add(mRxEventBus.toObservable().subscribe(event -> {
if (event instanceof LoadUserProfileEvent) {
LoadUserProfileEvent loadUserProfileEvent
= (LoadUserProfileEvent) event;
if (loadUserProfileEvent.getUserProfileModel() != null) {
showUserProfile(loadUserProfileEvent.getUserProfileModel());
} else {
showLogin();
}
}
if (event instanceof NoAccessTokenEvent) {
showLogin();
}
}));
}
@Override
public void onStop() {
super.onStop();
if (!mSubscriptions.isUnsubscribed()) {
mSubscriptions.unsubscribe();
}
}
@Override
public void onDestroy() {
super.onDestroy();
if (!mSubscriptions.isUnsubscribed()) {
mSubscriptions.unsubscribe();
}
}
private void initialize() {
getUserProfileComponent(UserProfileComponent.class).inject(this);
}
public void setDrawerLayout(DrawerLayout drawerLayout) {
mDrawerLayout = drawerLayout;
}
private void showLogin() {
if (mLoginLayout == null) {
return;
}
mLoginLayout.setVisibility(VISIBLE);
mUserProfileLayout.setVisibility(GONE);
mLoginLayout.setOnClickListener(view -> {
mLauncher.launchLogin();
mDrawerLayout.closeDrawers();
});
}
private void showUserProfile(UserProfileModel profile) {
if (mUserProfileLayout == null) {
return;
}
mLoginLayout.setVisibility(GONE);
mUserProfileLayout.setVisibility(VISIBLE);
AppCompatTextView usernameTextView = findById(mUserProfileLayout, R.id.user_username);
AppCompatTextView roleTextView = findById(mUserProfileLayout, R.id.user_role);
usernameTextView.setText(profile.getUsername());
roleTextView.setText(profile.getRole().getValue());
ImageView avatarImageView = findById(mUserProfileLayout, R.id.user_profile_image);
if (profile.getEmail() != null) {
Picasso.with(getActivity()).load(GravatarUtility.url(profile.getEmail()))
.into(avatarImageView);
}
}
private <C> C getUserProfileComponent(Class<C> componentType) {
return componentType.cast(((PostActivity) getActivity()).getUserProfileComponent());
}
@OnClick(R.id.layout_user_profile)
void onUserProfileClick() {
mDrawerLayout.closeDrawers();
}
@OnClick(R.id.layout_user_login)
void onLoginClick() {
mDrawerLayout.closeDrawers();
mLauncher.launchLogin();
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
}
}