Good day!
An error occurs if you perform the following actions
1 Open the application (the list of users is empty) - Activity 1 - Fragment
2 Add new users (we will assume 2) with a choice from contacts (Permission is allowed while clicking on the contact selection button) - Activity 2 - Fragment
3 Forced through the application settings to disable the previously allowed Permission
4 Update user contact
5 An error occurs - the contact is updated with the previous user (ViewPager)
CrimePagerActivity
public class CrimePagerActivity extends AppCompatActivity {
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
List<Fragment> fragments = getSupportFragmentManager().getFragments();
if (fragments != null) {
fragments.get(fragments.size() - 1).onRequestPermissionsResult(
requestCode, permissions, grantResults);
}
}
}
CrimeFragment
public class CrimeFragment extends Fragment {
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK) return;
if (requestCode == REQUEST_CONTACT && data != null) {
Uri contactUri = data.getData();
String[] queryFields = new String[] {
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts._ID
};
Cursor c = getActivity().getContentResolver()
.query(contactUri, queryFields, null, null, null);
long contactId;
try {
if (c.getCount() == 0) {
return;
}
c.moveToFirst();
String suspect = c.getString(0);
contactId = c.getLong(1);
mCrime.setSuspect(suspect);
mSuspectButton.setText(suspect); // ERROR (SAVE IN PREV FRAFMENT) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
} finally {
c.close();
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == PERMISSION_REQUEST_READ_CONTACTS) {
if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
startActivityForResult(pickContact, REQUEST_CONTACT);
} else {
Snackbar.make(getActivity().findViewById(R.id.activity_crime_pager),
R.string.permission_read_contacts_not_granted,
Snackbar.LENGTH_SHORT).show();
}
}
}
private void requestReadContactsPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
Manifest.permission.READ_CONTACTS)) {
Snackbar.make(mActivityCrimePager, R.string.need_reed_permission_contacts,
Snackbar.LENGTH_INDEFINITE).setAction(R.string.snackbar_ok, new View.OnClickListener() {
@Override
public void onClick(View view) {
ActivityCompat.requestPermissions(getActivity(),
new String[]{Manifest.permission.READ_CONTACTS},
PERMISSION_REQUEST_READ_CONTACTS);
}
}).show();
} else {
ActivityCompat.requestPermissions(getActivity(),
new String[]{Manifest.permission.READ_CONTACTS}, PERMISSION_REQUEST_READ_CONTACTS);
}
}
}