package com.kenny.openimgur.fragments;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TextInputLayout;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import com.kenny.openimgur.R;
import com.kenny.openimgur.ui.adapters.TopicsAdapter;
import com.kenny.openimgur.api.ApiClient;
import com.kenny.openimgur.api.responses.TopicResponse;
import com.kenny.openimgur.classes.ImgurTopic;
import com.kenny.openimgur.classes.UploadListener;
import com.kenny.openimgur.util.LogUtil;
import com.kenny.openimgur.util.SqlHelper;
import java.util.List;
import butterknife.BindView;
import butterknife.OnCheckedChanged;
import butterknife.OnClick;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
/**
* Created by Kenny-PC on 7/4/2015.
*/
public class UploadInfoFragment extends BaseFragment {
@BindView(R.id.title)
EditText mTitle;
@BindView(R.id.desc)
EditText mDesc;
@BindView(R.id.titleInputLayout)
TextInputLayout mTitleInputLayout;
@BindView(R.id.topicSpinner)
Spinner mTopicSpinner;
@BindView(R.id.gallerySwitch)
CheckBox mGallerySwitch;
@BindView(R.id.topicHeader)
View mTopicHeader;
private UploadListener mListener;
public static UploadInfoFragment newInstance() {
return new UploadInfoFragment();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof UploadListener) mListener = (UploadListener) activity;
}
@Override
public void onDetach() {
mListener = null;
super.onDetach();
}
@Override
public void onPause() {
mTitle.setCursorVisible(false);
mDesc.setCursorVisible(false);
super.onPause();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_upload_info, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
checkForTopics();
}
@OnCheckedChanged(R.id.gallerySwitch)
public void onCheckChanged(boolean checked) {
if (checked && user == null) {
mGallerySwitch.setChecked(false);
Snackbar.make(getActivity().findViewById(android.R.id.content), R.string.upload_gallery_no_user, Snackbar.LENGTH_LONG).show();
return;
}
int visibility = checked ? View.VISIBLE : View.GONE;
mTopicSpinner.setVisibility(visibility);
mTopicHeader.setVisibility(visibility);
}
@OnClick(R.id.upload)
public void onUploadClick() {
String title = mTitle.getText().toString();
String desc = mDesc.getText().toString();
ImgurTopic topic = null;
SpinnerAdapter adapter = mTopicSpinner.getAdapter();
if (adapter != null && !adapter.isEmpty()) {
int selectedPosition = mTopicSpinner.getSelectedItemPosition();
topic = (ImgurTopic) adapter.getItem(selectedPosition > -1 ? selectedPosition : 0);
}
if (mGallerySwitch.isChecked()) {
if (TextUtils.isEmpty(title)) {
mTitleInputLayout.setError(getString(R.string.upload_gallery_no_title));
} else {
if (mListener != null) mListener.onUpload(true, title, desc, topic);
}
} else {
if (mListener != null) mListener.onUpload(false, title, desc, topic);
}
}
/**
* Checks if we have cached topics to display for the info fragment
*/
private void checkForTopics() {
List<ImgurTopic> topics = SqlHelper.getInstance(getActivity()).getTopics();
if (topics.isEmpty()) {
LogUtil.v(TAG, "No topics found, fetching");
ApiClient.getService().getDefaultTopics().enqueue(new Callback<TopicResponse>() {
@Override
public void onResponse(Call<TopicResponse> call, Response<TopicResponse> response) {
if (isAdded() && response != null && response.body() != null) {
SqlHelper sql = SqlHelper.getInstance(getActivity());
sql.addTopics(response.body().data);
List<ImgurTopic> topics = sql.getTopics();
mTopicSpinner.setAdapter(new TopicsAdapter(getActivity(), topics));
}
}
@Override
public void onFailure(Call<TopicResponse> call, Throwable t) {
LogUtil.e(TAG, "Failed to receive topics", t);
}
});
} else {
LogUtil.v(TAG, "Topics in database");
mTopicSpinner.setAdapter(new TopicsAdapter(getActivity(), topics));
}
}
}