У меня есть ссылка на диалог оповещения, которую я хочу отклонить. У меня проблема в том, что я не могу просто удалить ссылку на нее из моего диалога, вот код из моего фрагмента, чтобы вы могли понять, почему -
@OnClick(R.id.verification_button_got_it)
void onBtnGotItClicked(View view) {
if (!checkBoxAge.isChecked()) {
checkBoxAge.setTextColor(ContextCompat.getColor(checkBoxAge.getContext(), R.color.accent_red));
return;
}
showProgressDialog();
if (getContext() instanceof VerificationPageListener) {
((VerificationPageListener) getContext()).onPageAgreed();
}
}
private void showProgressDialog(){
if (mBuilder == null) {
mBuilder = new AlertDialog.Builder(App.getAppContext());
}
mBuilder.setCancelable(false);
mBuilder.setView(R.layout.custom_proggress_dialog);
mDialog = mBuilder.create();
mDialog.show();
}
В тот момент, когда вы видите "onPageAgreed() "- это точка, в которой данные отправляются на сервер для проверки IMEI устройства с целью проверки, поэтому, если я закрываю диалоговое окно в этой точке, диалоговое окно вообще не будет отображаться, потому что оно будет немедленным.
Как я уже сказал, это фрагмент, который находится поверх действия, поэтому действие обрабатывает всю проверку через базу данных. Вот код действия, обрабатывающего базу данных, проверяющего и перемещающего результаты в докладчик -
@Override
public void onPageAgreed() {
// current page is accepted, move to next
int cur = viewPager.getCurrentItem();
if (cur == adapter.getCount() - 1) {
// ask for permission
requestPhoneState();
} else {
// move to next
viewPager.setCurrentItem(cur + 1, true);
}
}
private void requestPhoneState() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, RC_PERMISSION_READ_STATE);
} else {
// retrieve IMEI
accessDeviceIdAndVerifyDB(this);
}
}
@Override
protected void onRequestPermissionsResultPostResume(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResultPostResume(requestCode, permissions, grantResults);
if (requestCode == RC_PERMISSION_READ_STATE
&& permissions.length > 0 && StringUtils.equals(permissions[0], Manifest.permission.READ_PHONE_STATE)
&& grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// granted, read IMEI
accessDeviceIdAndVerifyDB(this);
} else {
// failed
onErrorDeviceIdNotGrantedPermission();
}
}
private void accessDeviceIdAndVerifyDB(Activity activity) {
if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
TelephonyManager telephonyManager = (TelephonyManager) activity.getSystemService(Context.TELEPHONY_SERVICE);
if (telephonyManager != null) {
@SuppressLint("HardwareIds") String deviceId = telephonyManager.getDeviceId();
if (StringUtils.isNotBlank(deviceId)) {
checkDeviceIdWithDB(deviceId);
}
}
}
}
private void checkDeviceIdWithDB(String deviceId) {
presenter.onDeviceIdReceived(deviceId);
}
Кажется, что я застрял в цикле, где мне нужно переместить ссылку на мой диалог по всейнесколько классов только для того, чтобы отменить его, который кажется действительно сломанным. Как мне проще отменить мой диалог?
edit -
Я добавил этот код до того, как завершается действие -
@Override
public void sendDeviceIdResult(String deviceId, boolean isAlreadyExist) {
int currentItem = viewPager.getCurrentItem();
Fragment item = adapter.getItem(currentItem);
if (item instanceof PhoneStateAndAgeVerificationFragment) {
Dialog dialog = ((PhoneStateAndAgeVerificationFragment) item).getProgressDialog();
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
}
Intent intent = new Intent();
intent.putExtra(KEY_DEVICE_ID, deviceId);
intent.putExtra(KEY_IS_SUCCESS, !isAlreadyExist);
setResult(RESULT_OK, intent);
finish();
}
, но на этомУкажите, что мой диалог всегда нулевой, и я не могу понять, будет ли он в этом случае всегда нулевым, а проверка избыточна или я делаю что-то не так?