Request read external storage permission needed to access device ringtone

This commit is contained in:
Sylvain Berfini 2016-07-20 17:41:52 +02:00
parent 348f63ef71
commit 3244418765
3 changed files with 31 additions and 3 deletions

View file

@ -106,6 +106,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
private static final int PERMISSIONS_REQUEST_SYNC = 207; private static final int PERMISSIONS_REQUEST_SYNC = 207;
private static final int PERMISSIONS_REQUEST_CONTACTS = 208; private static final int PERMISSIONS_REQUEST_CONTACTS = 208;
private static final int PERMISSIONS_RECORD_AUDIO_ECHO_CANCELLER = 209; private static final int PERMISSIONS_RECORD_AUDIO_ECHO_CANCELLER = 209;
private static final int PERMISSIONS_READ_EXTERNAL_STORAGE_DEVICE_RINGTONE = 210;
private static LinphoneActivity instance; private static LinphoneActivity instance;
@ -1198,6 +1199,10 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
checkAndRequestPermission(Manifest.permission.RECORD_AUDIO, PERMISSIONS_RECORD_AUDIO_ECHO_CANCELLER); checkAndRequestPermission(Manifest.permission.RECORD_AUDIO, PERMISSIONS_RECORD_AUDIO_ECHO_CANCELLER);
} }
public void checkAndRequestReadExternalStoragePermissionForDeviceRingtone() {
checkAndRequestPermission(Manifest.permission.READ_EXTERNAL_STORAGE, PERMISSIONS_READ_EXTERNAL_STORAGE_DEVICE_RINGTONE);
}
public void checkAndRequestPermissionsToSendImage() { public void checkAndRequestPermissionsToSendImage() {
ArrayList<String> permissionsList = new ArrayList<String>(); ArrayList<String> permissionsList = new ArrayList<String>();
@ -1269,6 +1274,9 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
((SettingsFragment) fragment).echoCalibrationFail(); ((SettingsFragment) fragment).echoCalibrationFail();
} }
break; break;
case PERMISSIONS_READ_EXTERNAL_STORAGE_DEVICE_RINGTONE:
((SettingsFragment) fragment).enableDeviceRingtone(grantResults[0] == PackageManager.PERMISSION_GRANTED);
break;
} }
} }

View file

@ -43,7 +43,9 @@ import org.linphone.core.TunnelConfig;
import org.linphone.mediastream.Log; import org.linphone.mediastream.Log;
import org.linphone.purchase.Purchasable; import org.linphone.purchase.Purchasable;
import android.Manifest;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager;
/** /**
* @author Sylvain Berfini * @author Sylvain Berfini
@ -1339,7 +1341,8 @@ public class LinphonePreferences {
} }
public boolean isDeviceRingtoneEnabled() { public boolean isDeviceRingtoneEnabled() {
return getConfig().getBool("app", "device_ringtone", true); int readExternalStorage = mContext.getPackageManager().checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE, mContext.getPackageName());
return getConfig().getBool("app", "device_ringtone", true) && readExternalStorage == PackageManager.PERMISSION_GRANTED;
} }
public void enableDeviceRingtone(boolean enable) { public void enableDeviceRingtone(boolean enable) {

View file

@ -804,13 +804,30 @@ public class SettingsFragment extends PreferencesListFragment {
setPreferenceDefaultValueAndSummary(R.string.pref_voice_mail_key, mPrefs.getVoiceMailUri()); setPreferenceDefaultValueAndSummary(R.string.pref_voice_mail_key, mPrefs.getVoiceMailUri());
} }
public void enableDeviceRingtone(boolean enabled) {
LinphonePreferences.instance().enableDeviceRingtone(enabled);
LinphoneManager.getInstance().enableDeviceRingtone(enabled);
((CheckBoxPreference)findPreference(getString(R.string.pref_device_ringtone_key))).setChecked(enabled);
}
private void setCallPreferencesListener() { private void setCallPreferencesListener() {
findPreference(getString(R.string.pref_device_ringtone_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { findPreference(getString(R.string.pref_device_ringtone_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean use = (Boolean) newValue; boolean use = (Boolean) newValue;
mPrefs.enableDeviceRingtone(use); if (use) {
LinphoneManager.getInstance().enableDeviceRingtone(use); int readExternalStorage = getActivity().getPackageManager().checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE, getActivity().getPackageName());
if (readExternalStorage == PackageManager.PERMISSION_GRANTED) {
mPrefs.enableDeviceRingtone(true);
LinphoneManager.getInstance().enableDeviceRingtone(true);
} else {
LinphoneActivity.instance().checkAndRequestReadExternalStoragePermissionForDeviceRingtone();
}
} else {
mPrefs.enableDeviceRingtone(false);
LinphoneManager.getInstance().enableDeviceRingtone(false);
}
return true; return true;
} }
}); });