package com.kenny.openimgur.fragments;
import android.app.DialogFragment;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Message;
import android.support.annotation.Nullable;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.format.DateUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.kenny.openimgur.R;
import com.kenny.openimgur.classes.ImgurHandler;
import com.kenny.openimgur.util.ImageUtil;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
/**
* Created by Kenny-PC on 6/28/2015.
*/
public class UploadLinkDialogFragment extends DialogFragment implements TextWatcher {
public static final String TAG = UploadLinkDialogFragment.class.getSimpleName();
private static final String KEY_LINK = "link";
private static final long TEXT_DELAY = DateUtils.SECOND_IN_MILLIS;
@BindView(R.id.link)
EditText mLink;
@BindView(R.id.loadingContainer)
View mLoadingContainer;
@BindView(R.id.linkValidation)
TextView mLinkValidation;
@BindView(R.id.add)
Button mAddButton;
@BindView(R.id.loadingIndicator)
ProgressBar mLoadingIndicator;
private Unbinder mUnbinder;
public static DialogFragment newInstance(@Nullable String link) {
UploadLinkDialogFragment fragment = new UploadLinkDialogFragment();
if (!TextUtils.isEmpty(link)) {
Bundle args = new Bundle(1);
args.putString(KEY_LINK, link);
fragment.setArguments(args);
}
return fragment;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
if (getDialog() == null) {
setShowsDialog(false);
}
super.onActivityCreated(savedInstanceState);
}
@Override
public void onStart() {
super.onStart();
if (getDialog() == null) return;
getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return inflater.inflate(R.layout.fragment_link_dialog, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mUnbinder = ButterKnife.bind(this, view);
mLink.addTextChangedListener(this);
Bundle args = getArguments();
if (args != null && args.containsKey(KEY_LINK)) {
mLink.setText(args.getString(KEY_LINK, null));
}
}
@Override
public void onDestroyView() {
if (mUnbinder != null) mUnbinder.unbind();
super.onDestroyView();
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// NOOP
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
mAddButton.setEnabled(false);
if (!TextUtils.isEmpty(s.toString())) {
mHandler.removeMessages(ImgurHandler.MESSAGE_SEARCH_URL);
mHandler.sendMessageDelayed(mHandler.obtainMessage(ImgurHandler.MESSAGE_SEARCH_URL, s.toString()), TEXT_DELAY);
}
}
@Override
public void afterTextChanged(Editable s) {
// NOOP
}
@OnClick({R.id.cancel, R.id.add})
public void onClick(View view) {
switch (view.getId()) {
case R.id.add:
if (getParentFragment() instanceof UploadFragment) ((UploadFragment) getParentFragment()).onLinkAdded(mLink.getText().toString());
// Intentional fall through
case R.id.cancel:
dismissAllowingStateLoss();
break;
}
}
private ImgurHandler mHandler = new ImgurHandler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MESSAGE_SEARCH_URL:
ImageUtil.getImageLoader(getActivity()).loadImage((String) msg.obj, new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
if (!isAdded()) return;
mLoadingContainer.setVisibility(View.VISIBLE);
mLoadingIndicator.setVisibility(View.VISIBLE);
mLinkValidation.setText(R.string.upload_checking_link);
}
@Override
public void onLoadingFailed(String s, View view, FailReason failReason) {
if (!isAdded()) return;
mAddButton.setEnabled(false);
mLoadingIndicator.setVisibility(View.INVISIBLE);
mLinkValidation.setText(R.string.upload_invalid_link);
}
@Override
public void onLoadingComplete(String url, View view, Bitmap bitmap) {
if (!isAdded()) return;
mAddButton.setEnabled(true);
mLoadingIndicator.setVisibility(View.INVISIBLE);
mLinkValidation.setText(R.string.upload_valid_link);
}
@Override
public void onLoadingCancelled(String s, View view) {
if (!isAdded()) return;
mAddButton.setEnabled(false);
mLoadingIndicator.setVisibility(View.INVISIBLE);
mLinkValidation.setText(R.string.upload_invalid_link);
}
});
break;
}
}
};
}