package com.gwokhou.deadline.reminderSelect; import android.app.Activity; import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import com.gwokhou.deadline.R; import com.gwokhou.deadline.dataType.RemindType; import com.gwokhou.deadline.databinding.DialogReminderBinding; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.PopupMenu; import androidx.fragment.app.DialogFragment; import androidx.lifecycle.ViewModelProviders; public class ReminderDialogFragment extends DialogFragment { public static final String EXTRA_REMIND = "EXTRA_REMIND"; private static final String ARG_REMIND_DATA = "REMIND"; private ReminderDialogViewModel mViewModel; private DialogReminderBinding mBinding; public static ReminderDialogFragment newInstance(int remindData) { Bundle args = new Bundle(); args.putInt(ARG_REMIND_DATA, remindData); ReminderDialogFragment fragment = new ReminderDialogFragment(); fragment.setArguments(args); return fragment; } @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { final int argRemind = getArguments().getInt(ARG_REMIND_DATA); View view = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_reminder, null); mBinding = DialogReminderBinding.bind(view); mViewModel = ViewModelProviders.of(this).get(ReminderDialogViewModel.class); mBinding.setViewmodel(mViewModel); mViewModel.loadData(argRemind); setupPopupMenu(); return new AlertDialog.Builder(getActivity()) .setView(view) .setTitle(R.string.reminder) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { sendResult(Activity.RESULT_OK, mViewModel.getReminder()); } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dismiss(); } }) .create(); } private void setupPopupMenu() { final PopupMenu popupMenu = new PopupMenu(getActivity(), mBinding.remindIntervalUnit, Gravity.CENTER, 0, android.R.style.Widget_Material_Light_PopupMenu_Overflow); popupMenu.inflate(R.menu.menu_reminder_units); mBinding.remindIntervalUnit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { popupMenu.show(); mViewModel.updateSelections(RemindType.SINGLE_REMIND); } }); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.action_remind_minutes: mViewModel.singleRemindUnit.set(RemindType.SINGLE_MIN); break; case R.id.action_remind_hours: mViewModel.singleRemindUnit.set(RemindType.SINGLE_HOUR); break; case R.id.action_remind_days: mViewModel.singleRemindUnit.set(RemindType.SINGLE_DAY); break; case R.id.action_remind_weeks: mViewModel.singleRemindUnit.set(RemindType.SINGLE_WEEK); break; } return true; } }); } private void sendResult(int resultCode, int typeData) { if (getTargetFragment() == null) { return; } Intent intent = new Intent(); intent.putExtra(EXTRA_REMIND, typeData); getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, intent); } }