diff --git a/src/org/linphone/CallIncomingActivity.java b/src/org/linphone/CallIncomingActivity.java index 0691125d6..2e55230c4 100644 --- a/src/org/linphone/CallIncomingActivity.java +++ b/src/org/linphone/CallIncomingActivity.java @@ -54,7 +54,7 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig private LinphoneCoreListenerBase mListener; private LinearLayout acceptUnlock; private LinearLayout declineUnlock; - private boolean isActive; + private boolean isScreenActive, alreadyAcceptedOrDeniedCall; private float answerX; private float declineX; @@ -87,9 +87,9 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { - isActive = pm.isInteractive(); + isScreenActive = pm.isInteractive(); } else { - isActive = pm.isScreenOn(); + isScreenActive = pm.isScreenOn(); } final int screenWidth = getResources().getDisplayMetrics().widthPixels; @@ -102,7 +102,7 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig accept.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if(isActive) { + if(isScreenActive) { answer(); } else { decline.setVisibility(View.GONE); @@ -111,7 +111,7 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig } }); - if(!isActive) { + if(!isScreenActive) { accept.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { @@ -177,7 +177,7 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig decline.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if(isActive) { + if(isScreenActive) { decline(); } else { accept.setVisibility(View.GONE); @@ -215,6 +215,9 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig if (lc != null) { lc.addListener(mListener); } + + alreadyAcceptedOrDeniedCall = false; + mCall = null; // Only one call ringing at a time is allowed if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null) { @@ -267,11 +270,21 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig } private void decline() { + if (alreadyAcceptedOrDeniedCall) { + return; + } + alreadyAcceptedOrDeniedCall = true; + LinphoneManager.getLc().terminateCall(mCall); finish(); } private void answer() { + if (alreadyAcceptedOrDeniedCall) { + return; + } + alreadyAcceptedOrDeniedCall = true; + LinphoneCallParams params = LinphoneManager.getLc().createCallParams(mCall); boolean isLowBandwidthConnection = !LinphoneUtils.isHighBandwidthConnection(LinphoneService.instance().getApplicationContext()); diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java index 16e983611..687d9d581 100644 --- a/src/org/linphone/ChatFragment.java +++ b/src/org/linphone/ChatFragment.java @@ -192,6 +192,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC @Override public void onClick(View v) { pickImage(); + LinphoneActivity.instance().checkAndRequestCameraPermission(); } }); //registerForContextMenu(sendImage); diff --git a/src/org/linphone/ContactEditorFragment.java b/src/org/linphone/ContactEditorFragment.java index 134abcb6a..8544e3056 100644 --- a/src/org/linphone/ContactEditorFragment.java +++ b/src/org/linphone/ContactEditorFragment.java @@ -250,6 +250,7 @@ public class ContactEditorFragment extends Fragment { @Override public void onClick(View view) { pickImage(); + LinphoneActivity.instance().checkAndRequestCameraPermission(); } }); diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java index c062ce53f..2a2c6540d 100644 --- a/src/org/linphone/LinphoneActivity.java +++ b/src/org/linphone/LinphoneActivity.java @@ -101,6 +101,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta private static final int PERMISSIONS_REQUEST_RECORD_AUDIO = 201; private static final int PERMISSIONS_REQUEST_RECORD_AUDIO_INCOMING_CALL = 203; private static final int PERMISSIONS_REQUEST_EXTERNAL_FILE_STORAGE = 204; + private static final int PERMISSIONS_REQUEST_CAMERA = 205; private static LinphoneActivity instance; @@ -1149,6 +1150,12 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta checkAndRequestPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE, PERMISSIONS_REQUEST_EXTERNAL_FILE_STORAGE); } } + + public void checkAndRequestCameraPermission() { + if (getPackageManager().checkPermission(Manifest.permission.CAMERA, getPackageName()) != PackageManager.PERMISSION_GRANTED) { + checkAndRequestPermission(Manifest.permission.CAMERA, PERMISSIONS_REQUEST_CAMERA); + } + } public void checkAndRequestPermission(String permission, int result) { if (getPackageManager().checkPermission(permission, getPackageName()) != PackageManager.PERMISSION_GRANTED) {