package com.xda.one.ui;
import com.squareup.picasso.Picasso;
import com.xda.one.R;
import com.xda.one.api.model.interfaces.Forum;
import com.xda.one.api.model.response.ResponseUserProfile;
import com.xda.one.loader.UserProfileLoader;
import com.xda.one.ui.helper.ActionModeHelper;
import com.xda.one.util.FragmentUtils;
import com.xda.one.util.UIUtils;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.support.v4.view.ViewCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.view.ActionMode;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.XDALinerLayoutManager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import java.util.ArrayList;
import java.util.List;
public class MyDeviceFragment extends Fragment
implements LoaderManager.LoaderCallbacks<ResponseUserProfile> {
private ActionModeHelper mModeHelper;
private RecyclerView mRecyclerView;
private ForumAdapter<Forum> mAdapter;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mModeHelper = new ActionModeHelper(getActivity(),
new ActionModeCallback(), new ClickListener(),
ActionModeHelper.SelectionMode.SINGLE);
mAdapter = new ForumAdapter<>(getActivity(), mModeHelper, mModeHelper, mModeHelper,
new ImageViewDeviceDelegate(), new SubscribeButtonDelegate());
}
@Override
public View onCreateView(final LayoutInflater inflater, @Nullable final ViewGroup container,
@Nullable final Bundle savedInstanceState) {
return inflater.inflate(R.layout.my_device_fragment, container, false);
}
@Override
public void onViewCreated(final View view, @Nullable final Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mRecyclerView = (RecyclerView) view.findViewById(android.R.id.list);
mRecyclerView.setLayoutManager(new XDALinerLayoutManager(getActivity()));
mRecyclerView.setAdapter(mAdapter);
ViewCompat.setOverScrollMode(mRecyclerView, ViewCompat.OVER_SCROLL_NEVER);
mModeHelper.setRecyclerView(mRecyclerView);
final ActionBar actionBar = UIUtils.getSupportActionBar(getActivity());
actionBar.setTitle(R.string.my_devices);
actionBar.setSubtitle(null);
getLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<ResponseUserProfile> onCreateLoader(final int i, final Bundle bundle) {
return new UserProfileLoader(getActivity(), null);
}
@Override
public void onLoadFinished(final Loader<ResponseUserProfile> responseUserProfileLoader,
final ResponseUserProfile profile) {
mAdapter.clear();
if (profile != null) {
mAdapter.addAll(profile.getDevices());
}
UIUtils.updateEmptyViewState(getView(), mRecyclerView, mAdapter.getItemCount());
}
@Override
public void onLoaderReset(final Loader<ResponseUserProfile> responseUserProfileLoader) {
}
private class SubscribeButtonDelegate implements ForumAdapter.SubscribeButtonDelegate {
@Override
public void setupSubscribeButton(final ImageView subscribeButton, final Forum forum) {
subscribeButton.setVisibility(View.GONE);
}
}
private class ImageViewDeviceDelegate implements ForumAdapter.ImageViewDeviceDelegate {
@Override
public void setupImageViewDevice(final ImageView imageView, final Forum forum) {
Picasso.with(getActivity())
.load(forum.getImageUrl())
.placeholder(R.drawable.phone)
.error(R.drawable.phone)
.into(imageView);
}
}
private class ClickListener implements View.OnClickListener {
@Override
public void onClick(final View v) {
final int position = mRecyclerView.getChildPosition(v);
if (position == RecyclerView.NO_POSITION) {
return;
}
final Forum forum = mAdapter.getForum(position);
final List<String> hierarchy = new ArrayList<>();
FragmentUtils.switchToForumContent(getFragmentManager(), null,
hierarchy, null, forum);
}
}
private class ActionModeCallback extends ActionModeHelper.RecyclerViewActionModeCallback {
@Override
public boolean onCreateActionMode(final ActionMode actionMode, final Menu menu) {
return true;
}
@Override
public boolean onPrepareActionMode(final ActionMode actionMode, final Menu menu) {
return true;
}
@Override
public boolean onActionItemClicked(final ActionMode actionMode, final MenuItem menuItem) {
return true;
}
@Override
public void onCheckedStateChanged(final ActionMode actionMode, int position,
boolean isNowChecked) {
}
}
}