package shts.jp.android.nogifeed.fragments;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.Toast;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import rx.subscriptions.CompositeSubscription;
import shts.jp.android.nogifeed.R;
import shts.jp.android.nogifeed.activities.ConfigureActivity;
import shts.jp.android.nogifeed.activities.MemberDetailActivity;
import shts.jp.android.nogifeed.adapters.AllMemberGridListAdapter;
import shts.jp.android.nogifeed.api.NogiFeedApiClient;
import shts.jp.android.nogifeed.models.Member;
import shts.jp.android.nogifeed.models.Members;
import shts.jp.android.nogifeed.providers.FavoriteContentObserver;
import shts.jp.android.nogifeed.providers.dao.Favorites;
import shts.jp.android.nogifeed.providers.dao.ProfileWidgets;
public class AllMemberGridListFragment extends Fragment {
private static final String TAG = AllMemberGridListFragment.class.getSimpleName();
private GridView gridView;
private AllMemberGridListAdapter gridAdapter;
private SwipeRefreshLayout swipeRefreshLayout;
private CompositeSubscription subscriptions = new CompositeSubscription();
public enum Type {
UNKNOWN,
ALL_MEMBER,
ADD_FAVORITE,
ADD_WIDGET;
static Type from(String typeText) {
if (TextUtils.isEmpty(typeText)) return UNKNOWN;
if (typeText.equals(ALL_MEMBER.name())) {
return ALL_MEMBER;
} else if (typeText.equals(ADD_FAVORITE.name())) {
return ADD_FAVORITE;
} else if (typeText.equals(ADD_WIDGET.name())) {
return ADD_WIDGET;
}
return UNKNOWN;
}
}
private Type type;
private FavoriteContentObserver favoriteContentObserver = new FavoriteContentObserver() {
@Override
public void onChangeState(@State int state) {
if (gridAdapter != null) gridAdapter.notifyDataSetChanged();
}
};
public static AllMemberGridListFragment newInstance(Type type) {
AllMemberGridListFragment allMemberGridListFragment
= new AllMemberGridListFragment();
Bundle bundle = new Bundle();
bundle.putString("type", type.name());
allMemberGridListFragment.setArguments(bundle);
return allMemberGridListFragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.type = Type.from(getArguments().getString("type"));
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_all_member_list, null);
if (type == Type.ADD_FAVORITE) {
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
toolbar.setVisibility(View.VISIBLE);
toolbar.setTitleTextColor(getResources().getColor(R.color.primary));
toolbar.setTitle(R.string.choose_member);
toolbar.setNavigationIcon(R.drawable.ic_clear_purple_700_18dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().finish();
}
});
} else if (type == Type.ADD_WIDGET) {
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
toolbar.setVisibility(View.VISIBLE);
toolbar.setTitleTextColor(getResources().getColor(R.color.primary));
toolbar.setTitle(R.string.select_widget_title);
toolbar.setNavigationIcon(R.drawable.ic_clear_purple_700_18dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().finish();
}
});
}
// SwipeRefreshLayoutの設定
swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.refresh);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
getAllMembers();
}
});
swipeRefreshLayout.setColorSchemeResources(R.color.primary);
swipeRefreshLayout.post(new Runnable() {
@Override public void run() {
swipeRefreshLayout.setRefreshing(true);
}
});
gridView = (GridView) view.findViewById(R.id.gridview);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
final Member member = (Member) gridView.getItemAtPosition(i);
switch (type) {
case ALL_MEMBER:
startActivity(MemberDetailActivity
.getStartIntent(getActivity(), member));
break;
case ADD_FAVORITE:
getActivity().setResult(Activity.RESULT_OK);
Favorites.toggle(getContext(), member);
break;
case ADD_WIDGET:
if (ProfileWidgets.exist(getContext(), member)) {
Toast.makeText(getActivity(), R.string.already_set_same_widget, Toast.LENGTH_SHORT).show();
return;
}
ConfigureActivity activity = (ConfigureActivity) getActivity();
activity.setConfigure(member);
break;
}
}
});
getAllMembers();
return view;
}
@Override
public void onResume() {
super.onResume();
favoriteContentObserver.register(getContext());
}
@Override
public void onPause() {
favoriteContentObserver.unregister(getContext());
super.onPause();
}
@Override
public void onDestroyView() {
subscriptions.unsubscribe();
super.onDestroyView();
}
private void getAllMembers() {
subscriptions.add(NogiFeedApiClient.getAllMembers()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Members>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Members members) {
swipeRefreshLayout.setRefreshing(false);
if (members != null) {
gridAdapter = new AllMemberGridListAdapter(getActivity(), members);
gridView.setAdapter(gridAdapter);
}
}
}));
}
}