diff --git a/android/src/main/java/com/incomingcall/IncomingCallModule.java b/android/src/main/java/com/incomingcall/IncomingCallModule.java index 97858a9..0a4dd78 100644 --- a/android/src/main/java/com/incomingcall/IncomingCallModule.java +++ b/android/src/main/java/com/incomingcall/IncomingCallModule.java @@ -50,13 +50,21 @@ public void display(String uuid, String name, String avatar, String info, int ti i.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED + WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD + WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); - i.putExtras(bundle); reactContext.startActivity(i); } } + @ReactMethod + public void dismiss() { + + if (UnlockScreenActivity.active) { + UnlockScreenActivity.getInstance().dismissIncoming(); + } + return; + } + private Context getAppContext() { return this.reactContext.getApplicationContext(); } diff --git a/android/src/main/java/com/incomingcall/UnlockScreenActivity.java b/android/src/main/java/com/incomingcall/UnlockScreenActivity.java index 2c2c71a..addbd78 100755 --- a/android/src/main/java/com/incomingcall/UnlockScreenActivity.java +++ b/android/src/main/java/com/incomingcall/UnlockScreenActivity.java @@ -1,34 +1,28 @@ package com.incomingcall; import android.app.KeyguardManager; -import android.content.Intent; +import android.media.AudioManager; +import android.media.Ringtone; +import android.media.RingtoneManager; import android.os.Build; import android.os.Bundle; +import android.os.VibrationEffect; import android.util.Log; import android.view.WindowManager; import android.widget.ImageView; import android.widget.TextView; import android.view.View; -import android.net.Uri; import android.os.Vibrator; import android.content.Context; -import android.media.MediaPlayer; -import android.provider.Settings; -import java.util.List; + import java.util.Timer; import java.util.TimerTask; - import android.app.Activity; - import androidx.appcompat.app.AppCompatActivity; -import android.app.ActivityManager; -import android.app.ActivityManager.RunningAppProcessInfo; import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.WritableMap; -import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.modules.core.DeviceEventManagerModule; import com.squareup.picasso.Picasso; @@ -42,19 +36,24 @@ public class UnlockScreenActivity extends AppCompatActivity implements UnlockScr private Integer timeout = 0; private String uuid = ""; static boolean active = false; - private static Vibrator v = (Vibrator) IncomingCallModule.reactContext.getSystemService(Context.VIBRATOR_SERVICE); - private long[] pattern = {0, 1000, 800}; - private static MediaPlayer player = MediaPlayer.create(IncomingCallModule.reactContext, Settings.System.DEFAULT_RINGTONE_URI); + private static Vibrator vibrator; + private static Ringtone ringtone; private static Activity fa; private Timer timer; + static UnlockScreenActivity instance; + + + public static UnlockScreenActivity getInstance() { + return instance; + } @Override public void onStart() { super.onStart(); if (this.timeout > 0) { - this.timer = new Timer(); - this.timer.schedule(new TimerTask() { + timer = new Timer(); + timer.schedule(new TimerTask() { @Override public void run() { // this code will be executed after timeout seconds @@ -63,6 +62,7 @@ public void run() { }, timeout); } active = true; + instance = this; } @Override @@ -76,7 +76,6 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); fa = this; - setContentView(R.layout.activity_call_incoming); tvName = findViewById(R.id.tvName); @@ -111,17 +110,15 @@ protected void onCreate(Bundle savedInstanceState) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); - v.vibrate(pattern, 0); - player.start(); + startRinging(); + AnimateImage acceptCallBtn = findViewById(R.id.ivAcceptCall); acceptCallBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { try { - v.cancel(); - player.stop(); - player.prepareAsync(); + stopRinging(); acceptDialing(); } catch (Exception e) { WritableMap params = Arguments.createMap(); @@ -136,9 +133,7 @@ public void onClick(View view) { rejectCallBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - v.cancel(); - player.stop(); - player.prepareAsync(); + stopRinging(); dismissDialing(); } }); @@ -151,12 +146,37 @@ public void onBackPressed() { } public void dismissIncoming() { - v.cancel(); - player.stop(); - player.prepareAsync(); + stopRinging(); dismissDialing(); } + private void startRinging() { + long[] pattern = {0, 1000, 800}; + vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); + int ringerMode = ((AudioManager) getSystemService(Context.AUDIO_SERVICE)).getRingerMode(); + if(ringerMode == AudioManager.RINGER_MODE_SILENT) return; + + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + VibrationEffect vibe = VibrationEffect.createWaveform(pattern, 2); + vibrator.vibrate(vibe); + }else{ + vibrator.vibrate(pattern, 0); + } + if(ringerMode == AudioManager.RINGER_MODE_VIBRATE) return; + + ringtone = RingtoneManager.getRingtone(this, RingtoneManager.getActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE)); + ringtone.play(); + } + + private void stopRinging() { + if (vibrator != null){ + vibrator.cancel(); + } + int ringerMode = ((AudioManager) getSystemService(Context.AUDIO_SERVICE)).getRingerMode(); + if(ringerMode != AudioManager.RINGER_MODE_NORMAL) return; + ringtone.stop(); + } + private void acceptDialing() { WritableMap params = Arguments.createMap(); params.putBoolean("accept", true);