From aff867cb30455cb090b68692ddf5243f02dd6121 Mon Sep 17 00:00:00 2001 From: Andres Guerrero Date: Mon, 24 May 2021 11:41:04 +0200 Subject: [PATCH 1/5] Ringtone fix --- .../incomingcall/UnlockScreenActivity.java | 59 +++++++++++-------- 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/android/src/main/java/com/incomingcall/UnlockScreenActivity.java b/android/src/main/java/com/incomingcall/UnlockScreenActivity.java index 952961d..34e7e6a 100755 --- a/android/src/main/java/com/incomingcall/UnlockScreenActivity.java +++ b/android/src/main/java/com/incomingcall/UnlockScreenActivity.java @@ -1,15 +1,17 @@ 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; @@ -17,18 +19,12 @@ 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,9 +38,9 @@ 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 AudioManager am; + private static Ringtone ringtone; private static Activity fa; private Timer timer; @@ -76,6 +72,7 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); fa = this; + am = (AudioManager)getSystemService(Context.AUDIO_SERVICE); setContentView(R.layout.activity_call_incoming); @@ -111,17 +108,16 @@ 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(); + ringPhone(); + AnimateImage acceptCallBtn = findViewById(R.id.ivAcceptCall); acceptCallBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { try { - v.cancel(); - player.stop(); - player.prepareAsync(); + vibrator.cancel(); + ringtone.stop(); acceptDialing(); } catch (Exception e) { WritableMap params = Arguments.createMap(); @@ -136,9 +132,8 @@ public void onClick(View view) { rejectCallBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - v.cancel(); - player.stop(); - player.prepareAsync(); + vibrator.cancel(); + ringtone.stop(); dismissDialing(); } }); @@ -151,13 +146,31 @@ public void onBackPressed() { } public static void dismissIncoming() { - v.cancel(); - player.stop(); - player.prepareAsync(); + vibrator.cancel(); + ringtone.stop(); fa.finish(); } - private void acceptDialing() { + private void ringPhone(){ + 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 acceptDialing() { WritableMap params = Arguments.createMap(); params.putBoolean("accept", true); params.putString("uuid", uuid); From ee54ee52f14d5041f617746440fcb9a8b1691711 Mon Sep 17 00:00:00 2001 From: Andres Guerrero Date: Wed, 26 May 2021 14:56:16 +0200 Subject: [PATCH 2/5] Refactor --- .../src/main/java/com/incomingcall/UnlockScreenActivity.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/android/src/main/java/com/incomingcall/UnlockScreenActivity.java b/android/src/main/java/com/incomingcall/UnlockScreenActivity.java index 4eb62a2..bc534c5 100755 --- a/android/src/main/java/com/incomingcall/UnlockScreenActivity.java +++ b/android/src/main/java/com/incomingcall/UnlockScreenActivity.java @@ -129,8 +129,7 @@ public void onClick(View view) { rejectCallBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - vibrator.cancel(); - ringtone.stop(); + stopRinging(); dismissDialing(); } }); From 069f6aac63cd5c0966c7fa15e7d64c7a2edc235f Mon Sep 17 00:00:00 2001 From: Andres Guerrero Date: Wed, 26 May 2021 15:03:23 +0200 Subject: [PATCH 3/5] Remove dead code --- .../src/main/java/com/incomingcall/UnlockScreenActivity.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/android/src/main/java/com/incomingcall/UnlockScreenActivity.java b/android/src/main/java/com/incomingcall/UnlockScreenActivity.java index bc534c5..4be72ec 100755 --- a/android/src/main/java/com/incomingcall/UnlockScreenActivity.java +++ b/android/src/main/java/com/incomingcall/UnlockScreenActivity.java @@ -37,7 +37,6 @@ public class UnlockScreenActivity extends AppCompatActivity implements UnlockScr private String uuid = ""; static boolean active = false; private static Vibrator vibrator; - private AudioManager am; private static Ringtone ringtone; private static Activity fa; private Timer timer; @@ -70,8 +69,6 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); fa = this; - am = (AudioManager)getSystemService(Context.AUDIO_SERVICE); - setContentView(R.layout.activity_call_incoming); tvName = findViewById(R.id.tvName); From 81514d6db131b695cce2190c48ee81c2fea8329e Mon Sep 17 00:00:00 2001 From: Andres Guerrero Date: Fri, 4 Jun 2021 09:40:21 +0200 Subject: [PATCH 4/5] Add dismiss call method --- .../main/java/com/incomingcall/IncomingCallModule.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/android/src/main/java/com/incomingcall/IncomingCallModule.java b/android/src/main/java/com/incomingcall/IncomingCallModule.java index 97858a9..8be6640 100644 --- a/android/src/main/java/com/incomingcall/IncomingCallModule.java +++ b/android/src/main/java/com/incomingcall/IncomingCallModule.java @@ -57,6 +57,14 @@ public void display(String uuid, String name, String avatar, String info, int ti } } + @ReactMethod + public void dismiss() { + if (UnlockScreenActivity.active) { + UnlockScreenActivity.dismissIncoming(); + } + return; + } + private Context getAppContext() { return this.reactContext.getApplicationContext(); } From 62d1359491ef7dd5a8e2736165b7b7d3b815e64b Mon Sep 17 00:00:00 2001 From: Andres Guerrero Date: Mon, 7 Jun 2021 13:59:25 +0200 Subject: [PATCH 5/5] Fix ringer issue. Fixed dismiss RCT Method --- .../java/com/incomingcall/IncomingCallModule.java | 4 ++-- .../java/com/incomingcall/UnlockScreenActivity.java | 13 ++++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/android/src/main/java/com/incomingcall/IncomingCallModule.java b/android/src/main/java/com/incomingcall/IncomingCallModule.java index 8be6640..0a4dd78 100644 --- a/android/src/main/java/com/incomingcall/IncomingCallModule.java +++ b/android/src/main/java/com/incomingcall/IncomingCallModule.java @@ -50,7 +50,6 @@ 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); @@ -59,8 +58,9 @@ public void display(String uuid, String name, String avatar, String info, int ti @ReactMethod public void dismiss() { + if (UnlockScreenActivity.active) { - UnlockScreenActivity.dismissIncoming(); + UnlockScreenActivity.getInstance().dismissIncoming(); } return; } diff --git a/android/src/main/java/com/incomingcall/UnlockScreenActivity.java b/android/src/main/java/com/incomingcall/UnlockScreenActivity.java index 4be72ec..addbd78 100755 --- a/android/src/main/java/com/incomingcall/UnlockScreenActivity.java +++ b/android/src/main/java/com/incomingcall/UnlockScreenActivity.java @@ -40,14 +40,20 @@ public class UnlockScreenActivity extends AppCompatActivity implements UnlockScr 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 @@ -56,6 +62,7 @@ public void run() { }, timeout); } active = true; + instance = this; } @Override @@ -166,7 +173,7 @@ private void stopRinging() { vibrator.cancel(); } int ringerMode = ((AudioManager) getSystemService(Context.AUDIO_SERVICE)).getRingerMode(); - if(ringerMode == AudioManager.RINGER_MODE_SILENT) return; + if(ringerMode != AudioManager.RINGER_MODE_NORMAL) return; ringtone.stop(); }