package io.kaif.mobile.view.share;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
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.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import com.jakewharton.rxbinding.widget.RxTextView;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import io.kaif.mobile.KaifApplication;
import io.kaif.mobile.R;
import io.kaif.mobile.app.BaseFragment;
import io.kaif.mobile.model.Zone;
import io.kaif.mobile.model.exception.DuplicateArticleUrlException;
import io.kaif.mobile.view.daemon.ArticleDaemon;
import io.kaif.mobile.view.daemon.ZoneDaemon;
public class ShareExternalLinkFragment extends BaseFragment {
public static ShareExternalLinkFragment newInstance() {
ShareExternalLinkFragment fragment = new ShareExternalLinkFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
@BindView(R.id.title)
EditText titleEditText;
@BindView(R.id.url)
EditText urlEditText;
@BindView(R.id.zone_name)
Spinner zoneNameSpinner;
@Inject
ArticleDaemon articleDaemon;
@Inject
ZoneDaemon zoneDaemon;
private Pattern urlPattern = Pattern.compile(".*(http[^\\s]+).*");
public ShareExternalLinkFragment() {
// Required empty public constructor
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_share, menu);
MenuItem shareBtn = menu.findItem(R.id.action_share);
shareBtn.setEnabled(false);
RxTextView.textChanges(titleEditText)
.map(t -> t.length() >= 3)
.distinctUntilChanged()
.subscribe(shareBtn::setEnabled);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_share) {
createArticle(false);
return true;
}
return super.onOptionsItemSelected(item);
}
private void createArticle(boolean forceCreate) {
bind(articleDaemon.createExternalLink(urlEditText.getText().toString(),
titleEditText.getText().toString(),
(String) zoneNameSpinner.getSelectedItem(),
forceCreate)).subscribe(aVoid -> getActivity().finish(), throwable -> {
if (throwable instanceof DuplicateArticleUrlException) {
notifyDuplicatePostAndResend();
return;
}
Toast.makeText(getActivity(), throwable.toString(), Toast.LENGTH_SHORT).show();
});
}
private void notifyDuplicatePostAndResend() {
new AlertDialog.Builder(getActivity()).setTitle(R.string.warning)
.setMessage(R.string.url_exist)
.setPositiveButton(R.string.force_create, (dialog, whichButton) -> {
createArticle(true);
})
.setNegativeButton(R.string.dialog_cancel, (dialog, whichButton) -> {
})
.create()
.show();
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
final View view = inflater.inflate(R.layout.fragment_share_external_link, container, false);
ButterKnife.bind(this, view);
KaifApplication.getInstance().beans().inject(this);
setupView();
fillContent();
return view;
}
private void setupView() {
}
private void fillContent() {
Bundle bundle = getActivity().getIntent().getExtras();
String rawUrl = bundle.getString(Intent.EXTRA_TEXT);
Matcher matcher = urlPattern.matcher(rawUrl);
if (matcher.matches()) {
String cleanUrl = matcher.group(1);
String subject = bundle.getString(Intent.EXTRA_SUBJECT);
titleEditText.setText(subject);
urlEditText.setText(cleanUrl);
}
bind(zoneDaemon.listAll()).subscribe(zones -> {
final ArrayAdapter<String> zoneAdapter = new ArrayAdapter<>(getActivity(),
android.R.layout.simple_spinner_item);
for (Zone zone : zones) {
zoneAdapter.add(zone.getName());
}
zoneAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
zoneNameSpinner.setAdapter(zoneAdapter);
}, throwable -> {
throwable.printStackTrace();
Toast.makeText(getActivity(), throwable.toString(), Toast.LENGTH_SHORT).show();
});
}
}