diff --git a/app/src/main/java/org/linphone/activities/MainActivity.java b/app/src/main/java/org/linphone/activities/MainActivity.java index b490dc3bb..1cfdca41f 100644 --- a/app/src/main/java/org/linphone/activities/MainActivity.java +++ b/app/src/main/java/org/linphone/activities/MainActivity.java @@ -75,7 +75,7 @@ import org.linphone.utils.PushNotificationUtils; public abstract class MainActivity extends LinphoneGenericActivity implements StatusBarFragment.MenuClikedListener, SideMenuFragment.QuitClikedListener { private static final int MAIN_PERMISSIONS = 1; - private static final int FRAGMENT_SPECIFIC_PERMISSION = 2; + protected static final int FRAGMENT_SPECIFIC_PERMISSION = 2; private TextView mMissedCalls; private TextView mMissedMessages; @@ -467,7 +467,7 @@ public abstract class MainActivity extends LinphoneGenericActivity // Permissions - private boolean checkPermission(String permission) { + public boolean checkPermission(String permission) { int granted = getPackageManager().checkPermission(permission, getPackageName()); Log.i( "[Permission] " diff --git a/app/src/main/java/org/linphone/settings/SettingsActivity.java b/app/src/main/java/org/linphone/settings/SettingsActivity.java index ef432fc85..57a5abd27 100644 --- a/app/src/main/java/org/linphone/settings/SettingsActivity.java +++ b/app/src/main/java/org/linphone/settings/SettingsActivity.java @@ -19,9 +19,11 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +import android.Manifest; import android.app.Fragment; import android.app.FragmentManager; import android.content.Intent; +import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.provider.Settings; @@ -30,6 +32,7 @@ import org.linphone.R; import org.linphone.activities.MainActivity; import org.linphone.compatibility.Compatibility; import org.linphone.core.tools.Log; +import org.linphone.utils.LinphoneUtils; public class SettingsActivity extends MainActivity { private static final int PERMISSIONS_REQUEST_OVERLAY = 206; @@ -108,6 +111,30 @@ public class SettingsActivity extends MainActivity { super.onActivityResult(requestCode, resultCode, data); } + @Override + public void onRequestPermissionsResult( + int requestCode, String[] permissions, int[] grantResults) { + if (permissions.length <= 0) return; + if (requestCode == MainActivity.FRAGMENT_SPECIFIC_PERMISSION) { + for (int i = 0; i < permissions.length; i++) { + Log.i( + "[Permission] " + + permissions[i] + + " is " + + (grantResults[i] == PackageManager.PERMISSION_GRANTED + ? "granted" + : "denied")); + if (permissions[i].equals(Manifest.permission.CAMERA) + && grantResults[i] == PackageManager.PERMISSION_GRANTED) { + LinphoneUtils.reloadVideoDevices(); + LinphonePreferences.instance().setVideoPreviewEnabled(true); + } + } + } else { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + } + } + private void handleIntentExtras(Bundle extras) { if (extras != null && extras.containsKey("Account")) { int accountIndex = extras.getInt("Account"); diff --git a/app/src/main/java/org/linphone/settings/VideoSettingsFragment.java b/app/src/main/java/org/linphone/settings/VideoSettingsFragment.java index 282721cab..f59bc15fc 100644 --- a/app/src/main/java/org/linphone/settings/VideoSettingsFragment.java +++ b/app/src/main/java/org/linphone/settings/VideoSettingsFragment.java @@ -19,6 +19,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +import android.Manifest; import android.os.Bundle; import android.text.InputType; import android.view.LayoutInflater; @@ -117,7 +118,17 @@ public class VideoSettingsFragment extends SettingsFragment { new SettingListenerBase() { @Override public void onBoolValueChanged(boolean newValue) { - mPrefs.setVideoPreviewEnabled(newValue); + if (newValue) { + if (!((SettingsActivity) getActivity()) + .checkPermission(Manifest.permission.CAMERA)) { + ((SettingsActivity) getActivity()) + .requestPermissionIfNotGranted(Manifest.permission.CAMERA); + } else { + mPrefs.setVideoPreviewEnabled(true); + } + } else { + mPrefs.setVideoPreviewEnabled(false); + } } });