package com.fastaccess.ui.modules.repos.issues.create; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.TextInputLayout; import android.support.v4.app.Fragment; import android.view.MotionEvent; import android.view.View; import com.fastaccess.R; import com.fastaccess.data.dao.model.Issue; import com.fastaccess.data.dao.model.PullRequest; import com.fastaccess.helper.ActivityHelper; import com.fastaccess.helper.AppHelper; import com.fastaccess.helper.BundleConstant; import com.fastaccess.helper.Bundler; import com.fastaccess.helper.InputHelper; import com.fastaccess.provider.markdown.MarkDownProvider; import com.fastaccess.ui.base.BaseActivity; import com.fastaccess.ui.modules.editor.EditorActivity; import com.fastaccess.ui.widgets.FontTextView; import butterknife.BindView; import butterknife.OnClick; import butterknife.OnTouch; import icepick.State; /** * Created by Kosh on 19 Feb 2017, 12:33 PM */ public class CreateIssueActivity extends BaseActivity<CreateIssueMvp.View, CreateIssuePresenter> implements CreateIssueMvp.View { @BindView(R.id.title) TextInputLayout title; @BindView(R.id.description) FontTextView description; @BindView(R.id.submit) View submit; @State String repoId; @State String login; @State Issue issue; @State PullRequest pullRequest; @State boolean isFeedback; private CharSequence savedText; public static void startForResult(@NonNull Fragment fragment, @NonNull String login, @NonNull String repoId) { Intent intent = new Intent(fragment.getContext(), CreateIssueActivity.class); intent.putExtras(Bundler.start() .put(BundleConstant.EXTRA, login) .put(BundleConstant.ID, repoId) .put(BundleConstant.EXTRA_TWO, login.equalsIgnoreCase("k0shk0sh") && repoId.equalsIgnoreCase("FastHub")) .end()); View view = fragment.getActivity() != null ? fragment.getActivity().findViewById(R.id.fab) : null; if (view != null) { ActivityHelper.startReveal(fragment, intent, view, BundleConstant.REQUEST_CODE); } else { fragment.startActivityForResult(intent, BundleConstant.REQUEST_CODE); } } public static void startForResult(@NonNull Activity activity, @NonNull String login, @NonNull String repoId, @Nullable Issue issueModel) { if (issueModel != null) { Intent intent = new Intent(activity, CreateIssueActivity.class); intent.putExtras(Bundler.start() .put(BundleConstant.EXTRA, login) .put(BundleConstant.ID, repoId) .put(BundleConstant.ITEM, issueModel) .end()); View view = activity.findViewById(R.id.fab); if (view != null) { startForResult(activity, intent, view); } else { activity.startActivityForResult(intent, BundleConstant.REQUEST_CODE); } } } public static void startForResult(@NonNull Activity activity, @NonNull String login, @NonNull String repoId, @Nullable PullRequest pullRequestModel) { if (pullRequestModel != null) { Intent intent = new Intent(activity, CreateIssueActivity.class); intent.putExtras(Bundler.start() .put(BundleConstant.EXTRA, login) .put(BundleConstant.ID, repoId) .put(BundleConstant.ITEM, pullRequestModel) .end()); View view = activity.findViewById(R.id.fab); if (view != null) { startForResult(activity, intent, view); } else { activity.startActivityForResult(intent, BundleConstant.REQUEST_CODE); } } } @NonNull public static Intent getIntent(@NonNull Context context, @NonNull String login, @NonNull String repoId) { Intent intent = new Intent(context, CreateIssueActivity.class); intent.putExtras(Bundler.start() .put(BundleConstant.EXTRA, login) .put(BundleConstant.ID, repoId) .put(BundleConstant.EXTRA_TWO, true) .end()); return intent; } @NonNull public static Intent startForResult(@NonNull Activity activity) { String login = "k0shk0sh"; // FIXME: 23/02/2017 hardcoded String repoId = "FastHub";// FIXME: 23/02/2017 hardcoded Intent intent = new Intent(activity, CreateIssueActivity.class); intent.putExtras(Bundler.start() .put(BundleConstant.EXTRA, login) .put(BundleConstant.ID, repoId) .put(BundleConstant.EXTRA_TWO, true) .end()); return intent; } public static void startForResult(@NonNull Activity activity, @NonNull Intent intent, @NonNull View view) { ActivityHelper.startReveal(activity, intent, view, BundleConstant.REQUEST_CODE); } @Override public void onSetCode(@NonNull CharSequence charSequence) { this.savedText = charSequence; MarkDownProvider.setMdText(description, InputHelper.toString(charSequence)); } @Override public void onTitleError(boolean isEmptyTitle) { title.setError(isEmptyTitle ? getString(R.string.required_field) : null); } @Override public void onDescriptionError(boolean isEmptyDesc) { description.setError(isEmptyDesc ? getString(R.string.required_field) : null); } @Override public void onSuccessSubmission(Issue issueModel) { hideProgress(); Intent intent = new Intent(); intent.putExtras(Bundler.start() .put(BundleConstant.ITEM, issueModel) .end()); setResult(RESULT_OK, intent); finish(); showMessage(R.string.success, R.string.successfully_submitted); } @Override public void onSuccessSubmission(PullRequest issueModel) { hideProgress(); Intent intent = new Intent(); intent.putExtras(Bundler.start() .put(BundleConstant.ITEM, issueModel) .end()); setResult(RESULT_OK, intent); finish(); showMessage(R.string.success, R.string.successfully_submitted); } @NonNull @Override public CreateIssuePresenter providePresenter() { return new CreateIssuePresenter(); } @Override protected int layout() { return R.layout.create_issue_layout; } @Override protected boolean isTransparent() { return false; } @Override protected boolean canBack() { return true; } @Override protected boolean isSecured() { return false; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { Bundle bundle = getIntent().getExtras(); login = bundle.getString(BundleConstant.EXTRA); repoId = bundle.getString(BundleConstant.ID); isFeedback = bundle.getBoolean(BundleConstant.EXTRA_TWO); if (bundle.getParcelable(BundleConstant.ITEM) != null) { if (bundle.getParcelable(BundleConstant.ITEM) instanceof Issue) { issue = bundle.getParcelable(BundleConstant.ITEM); setTitle(getString(R.string.update_issue)); } else if (bundle.getParcelable(BundleConstant.ITEM) instanceof PullRequest) { pullRequest = bundle.getParcelable(BundleConstant.ITEM); setTitle(getString(R.string.update_pull_request)); } } if (issue != null) { if (!InputHelper.isEmpty(issue.getTitle())) { if (title.getEditText() != null) title.getEditText().setText(issue.getTitle()); } if (!InputHelper.isEmpty(issue.getBody())) { onSetCode(issue.getBody()); } } if (pullRequest != null) { if (!InputHelper.isEmpty(pullRequest.getTitle())) { if (title.getEditText() != null) title.getEditText().setText(pullRequest.getTitle()); } if (!InputHelper.isEmpty(pullRequest.getBody())) { onSetCode(pullRequest.getBody()); } } } if (isFeedback) setTitle(R.string.submit_feedback); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); AppHelper.hideKeyboard(title); getPresenter().onActivityForResult(resultCode, requestCode, data); } @OnTouch(R.id.description) boolean onTouch(MotionEvent event) { if (isFeedback && InputHelper.isEmpty(savedText)) { savedText = AppHelper.getFastHubIssueTemplate(); } if (event.getAction() == MotionEvent.ACTION_UP) { Intent intent = new Intent(this, EditorActivity.class); intent.putExtras(Bundler.start() .put(BundleConstant.EXTRA, InputHelper.toString(savedText)) .put(BundleConstant.EXTRA_TYPE, BundleConstant.ExtraTYpe.FOR_RESULT_EXTRA) .end()); ActivityHelper.startReveal(this, intent, submit, BundleConstant.REQUEST_CODE); return true; } return false; } @OnClick(R.id.submit) public void onClick() { getPresenter().onSubmit(InputHelper.toString(title), savedText, login, repoId, issue, pullRequest); } }