package com.cleveroad.sample.ui.dialogs; import android.app.Activity; import android.content.Intent; import android.graphics.drawable.ColorDrawable; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.TextInputEditText; import android.support.design.widget.TextInputLayout; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.TextView; import com.cleveroad.sample.R; import java.util.Objects; import static com.cleveroad.sample.datasource.Constants.EXTRA_COLUMN_NUMBER; import static com.cleveroad.sample.datasource.Constants.EXTRA_ROW_NUMBER; import static com.cleveroad.sample.datasource.Constants.EXTRA_TITLE; import static com.cleveroad.sample.datasource.Constants.EXTRA_VALUE; import static com.cleveroad.sample.datasource.Constants.REQUEST_CODE_ADD_COLUMN; import static com.cleveroad.sample.datasource.Constants.REQUEST_CODE_ADD_ROW; import static com.cleveroad.sample.datasource.Constants.REQUEST_CODE_DELETE_COLUMN; import static com.cleveroad.sample.datasource.Constants.REQUEST_CODE_DELETE_ROW; import static com.cleveroad.sample.datasource.Constants.REQUEST_CODE_EDIT_SONG; public class EditItemDialog extends DialogFragment implements View.OnClickListener { private static final int ZERO_COLUMN_OR_ROW = 0; private String mTitle; private String mValue; private int mColumn; private int mRow; private TextInputLayout mTilValue; private TextInputEditText mEtValue; private TextView mTvDelete; private TextView mTvAdd; public static EditItemDialog newInstance(int row, int column, String title, String value) { EditItemDialog dialog = new EditItemDialog(); Bundle args = new Bundle(); args.putInt(EXTRA_COLUMN_NUMBER, column); args.putInt(EXTRA_ROW_NUMBER, row); args.putString(EXTRA_TITLE, title); args.putString(EXTRA_VALUE, value); dialog.setArguments(args); return dialog; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle args = getArguments(); if (args != null) { mColumn = args.getInt(EXTRA_COLUMN_NUMBER); mRow = args.getInt(EXTRA_ROW_NUMBER); mTitle = args.getString(EXTRA_TITLE); mValue = args.getString(EXTRA_VALUE); } } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //noinspection ConstantConditions getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); View view = inflater.inflate(R.layout.dialog_edit_item, container, false); mTilValue = view.findViewById(R.id.tilValue); mEtValue = view.findViewById(R.id.etValue); mTvDelete = view.findViewById(R.id.tvDelete); mTvAdd = view.findViewById(R.id.tvAdd); mTvDelete.setOnClickListener(this); mTvAdd.setOnClickListener(this); view.findViewById(R.id.bPositive).setOnClickListener(this); view.findViewById(R.id.bNegative).setOnClickListener(this); return view; } @Override public void onResume() { super.onResume(); Window window = getDialog().getWindow(); if (window != null) { DisplayMetrics dm = new DisplayMetrics(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Objects.requireNonNull(getActivity()).getWindowManager().getDefaultDisplay().getMetrics(dm); } int height = dm.heightPixels; int width = dm.widthPixels; window.setLayout(width, height); window.setLayout((int) (width * 0.8), (int) (height * 0.9)); } } @Override public void onStart() { super.onStart(); updateUiAccordingToModel(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bPositive: sendResult(); break; case R.id.bNegative: Fragment fragment = getParentFragment(); if (fragment != null) { fragment.onActivityResult(REQUEST_CODE_EDIT_SONG, Activity.RESULT_CANCELED, null); } break; case R.id.tvDelete: delete(); break; case R.id.tvAdd: add(); break; default: //do nothing } dismiss(); } private void updateUiAccordingToModel() { mTilValue.setHint(mTitle); mEtValue.setText(mValue); if (mColumn == ZERO_COLUMN_OR_ROW) { mTvDelete.setText(getString(R.string.delete_row)); mTvAdd.setText(getString(R.string.add_row)); } else if (mRow == ZERO_COLUMN_OR_ROW) { mTvDelete.setText(getString(R.string.delete_column)); mTvAdd.setText(getString(R.string.add_column)); } else { mTvDelete.setVisibility(View.GONE); mTvAdd.setVisibility(View.GONE); } } private void delete() { if (mColumn == ZERO_COLUMN_OR_ROW) { sendResult(EXTRA_ROW_NUMBER, mRow, REQUEST_CODE_DELETE_ROW); } else if (mRow == ZERO_COLUMN_OR_ROW) { sendResult(EXTRA_COLUMN_NUMBER, mColumn, REQUEST_CODE_DELETE_COLUMN); } } private void add() { if (mColumn == ZERO_COLUMN_OR_ROW) { sendResult(EXTRA_ROW_NUMBER, mRow, REQUEST_CODE_ADD_ROW); } else if (mRow == ZERO_COLUMN_OR_ROW) { sendResult(EXTRA_COLUMN_NUMBER, mColumn, REQUEST_CODE_ADD_COLUMN); } } private void sendResult() { Fragment fragment = getParentFragment(); if (fragment != null) { Intent intent = new Intent(); String str = mEtValue.getText().toString().trim(); intent.putExtra(EXTRA_VALUE, str.isEmpty() ? " " : str); intent.putExtra(EXTRA_COLUMN_NUMBER, mColumn); intent.putExtra(EXTRA_ROW_NUMBER, mRow); fragment.onActivityResult(REQUEST_CODE_EDIT_SONG, Activity.RESULT_OK, intent); } } private void sendResult(String extra, int data, int requestCode) { Fragment fragment = getParentFragment(); if (fragment != null) { Intent intent = new Intent(); intent.putExtra(extra, data); fragment.onActivityResult(requestCode, Activity.RESULT_OK, intent); } } }