package com.alorma.github.ui.fragment.detail.repo;
import android.app.Fragment;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckedTextView;
import android.widget.EditText;
import com.alorma.github.R;
import com.alorma.github.sdk.bean.dto.request.RepoRequestDTO;
import com.alorma.github.ui.popup.GitIgnorePopup;
import com.mikepenz.iconics.IconicsDrawable;
import com.mikepenz.octicons_typeface_library.Octicons;
/**
* Created by Bernat on 28/09/2014.
*/
public class RepoCreateFragment extends Fragment implements View.OnClickListener, GitIgnorePopup.OnGitIgnoresListener {
private CheckedTextView repoPrivateCheck;
private CheckedTextView repoIssuesCheck;
private CheckedTextView repoWikiCheck;
private CheckedTextView repoDownloadsCheck;
private EditText editTitle;
private EditText editBody;
private Button buttonAddGitignore;
private Button buttonAddLicense;
private String definedIgnore;
private ArrayAdapter<String> ignoresAdapter;
private GitIgnorePopup gitIgnorePopup;
private String definedLicense;
public static RepoCreateFragment newInstance() {
return new RepoCreateFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.repo_create_fragment, null, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
findViews(view);
}
private void findViews(View view) {
editTitle = (EditText) view.findViewById(R.id.editTitle);
editBody = (EditText) view.findViewById(R.id.editBody);
buttonAddGitignore = (Button) view.findViewById(R.id.add_gitignore);
buttonAddLicense = (Button) view.findViewById(R.id.add_license);
buttonAddGitignore.setOnClickListener(this);
buttonAddLicense.setOnClickListener(this);
findChecks(view);
}
private void findChecks(View view) {
repoPrivateCheck = (CheckedTextView) view.findViewById(R.id.repoPrivateCheck);
repoIssuesCheck = (CheckedTextView) view.findViewById(R.id.repoIssuesCheck);
repoWikiCheck = (CheckedTextView) view.findViewById(R.id.repoWikiCheck);
repoDownloadsCheck = (CheckedTextView) view.findViewById(R.id.repoDownloadsCheck);
repoPrivateCheck.setCheckMarkDrawable(R.drawable.btn_check_material);
repoIssuesCheck.setCheckMarkDrawable(R.drawable.btn_check_material);
repoWikiCheck.setCheckMarkDrawable(R.drawable.btn_check_material);
repoDownloadsCheck.setCheckMarkDrawable(R.drawable.btn_check_material);
repoPrivateCheck.setOnClickListener(this);
repoIssuesCheck.setOnClickListener(this);
repoWikiCheck.setOnClickListener(this);
repoDownloadsCheck.setOnClickListener(this);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.new_issue_comment, menu);
MenuItem itemSend = menu.findItem(R.id.action_send);
if (itemSend != null) {
IconicsDrawable iconDrawable = new IconicsDrawable(getActivity(), Octicons.Icon.oct_plus);
iconDrawable.color(Color.WHITE);
iconDrawable.actionBarSize();
itemSend.setIcon(iconDrawable);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
if (item.getItemId() == R.id.action_send) {
createGithubRepo();
}
return true;
}
private void createGithubRepo() {
String title = editTitle.getText().toString();
String description = editBody.getText().toString();
boolean isPrivate = repoPrivateCheck.isChecked();
boolean hasIssues = repoIssuesCheck.isChecked();
boolean hasWiki = repoWikiCheck.isChecked();
boolean hasDownloads = repoDownloadsCheck.isChecked();
RepoRequestDTO repoRequestDTO = new RepoRequestDTO();
repoRequestDTO.name = title;
repoRequestDTO.description = description;
repoRequestDTO.isPrivate = isPrivate;
repoRequestDTO.gitignore_template = definedIgnore;
repoRequestDTO.has_issues = hasIssues;
repoRequestDTO.has_wiki = hasWiki;
repoRequestDTO.has_downloads = hasDownloads;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.repoPrivateCheck:
changeCheckedState(v);
break;
case R.id.repoIssuesCheck:
changeCheckedState(v);
break;
case R.id.repoWikiCheck:
changeCheckedState(v);
break;
case R.id.repoDownloadsCheck:
changeCheckedState(v);
break;
case R.id.add_gitignore:
loadIgnores(v);
break;
case R.id.add_license:
loadLicenses(v);
break;
}
}
private void loadIgnores(View v) {
buttonAddGitignore.setEnabled(false);
if (gitIgnorePopup == null) {
gitIgnorePopup = new GitIgnorePopup(getActivity());
gitIgnorePopup.setAnchorView(v);
gitIgnorePopup.setOnGitIgnoresListener(this);
}
gitIgnorePopup.show();
}
private void loadLicenses(View v) {
}
private void changeCheckedState(View v) {
CheckedTextView ctv = (CheckedTextView) v;
changeCheckedState(ctv, !ctv.isChecked());
}
private void changeCheckedState(CheckedTextView ctv, boolean checked) {
ctv.setChecked(checked);
}
@Override
public void onGitIgnoreClear() {
definedIgnore = null;
buttonAddGitignore.setText(R.string.add_gitignore);
buttonAddGitignore.setEnabled(true);
}
@Override
public void onGitIgnoreSelected(String s) {
definedIgnore = s;
buttonAddGitignore.setText(s);
buttonAddGitignore.setEnabled(true);
}
@Override
public void onGitIgnoreFailed(Throwable error) {
buttonAddGitignore.setEnabled(true);
}
@Override
public void onGitIgnoreDismissed() {
buttonAddGitignore.setEnabled(true);
if (definedIgnore == null) {
buttonAddGitignore.setText(R.string.add_gitignore);
}
}
}