Skip to content

Commit e3d1541

Browse files
icc-guerreroGeraint White
authored andcommitted
Fix crash reported in issue bkdev98#24. Change ringtone manager bkdev98#25
1 parent f3e01fe commit e3d1541

File tree

2 files changed

+57
-24
lines changed

2 files changed

+57
-24
lines changed

android/src/main/java/com/incomingcall/IncomingCallModule.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,21 @@ public void display(String uuid, String name, String avatar, String info, int ti
5050
i.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED +
5151
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD +
5252
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
53-
5453
i.putExtras(bundle);
5554
reactContext.startActivity(i);
5655

5756
}
5857
}
5958

59+
@ReactMethod
60+
public void dismiss() {
61+
62+
if (UnlockScreenActivity.active) {
63+
UnlockScreenActivity.getInstance().dismissIncoming();
64+
}
65+
return;
66+
}
67+
6068
private Context getAppContext() {
6169
return this.reactContext.getApplicationContext();
6270
}

android/src/main/java/com/incomingcall/UnlockScreenActivity.java

Lines changed: 48 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,30 @@
11
package com.incomingcall;
22

33
import android.app.KeyguardManager;
4-
import android.content.Intent;
4+
import android.media.AudioManager;
5+
import android.media.Ringtone;
6+
import android.media.RingtoneManager;
57
import android.os.Build;
68
import android.os.Bundle;
9+
import android.os.VibrationEffect;
710
import android.util.Log;
811
import android.view.WindowManager;
912
import android.widget.ImageView;
1013
import android.widget.TextView;
1114
import android.view.View;
12-
import android.net.Uri;
1315
import android.os.Vibrator;
1416
import android.content.Context;
1517
import android.media.MediaPlayer;
1618
import android.provider.Settings;
1719
import java.util.List;
1820
import java.util.Timer;
1921
import java.util.TimerTask;
20-
2122
import android.app.Activity;
22-
2323
import androidx.appcompat.app.AppCompatActivity;
24-
import android.app.ActivityManager;
25-
import android.app.ActivityManager.RunningAppProcessInfo;
2624

2725
import com.facebook.react.bridge.Arguments;
28-
import com.facebook.react.bridge.ReactContext;
2926
import com.facebook.react.bridge.ReadableMap;
3027
import com.facebook.react.bridge.WritableMap;
31-
import com.facebook.react.bridge.ReactApplicationContext;
3228
import com.facebook.react.modules.core.DeviceEventManagerModule;
3329

3430
import com.squareup.picasso.Picasso;
@@ -42,19 +38,24 @@ public class UnlockScreenActivity extends AppCompatActivity implements UnlockScr
4238
private Integer timeout = 0;
4339
private String uuid = "";
4440
static boolean active = false;
45-
private static Vibrator v = (Vibrator) IncomingCallModule.reactContext.getSystemService(Context.VIBRATOR_SERVICE);
46-
private long[] pattern = {0, 1000, 800};
47-
private static MediaPlayer player = MediaPlayer.create(IncomingCallModule.reactContext, Settings.System.DEFAULT_RINGTONE_URI);
41+
private static Vibrator vibrator;
42+
private static Ringtone ringtone;
4843
private static Activity fa;
4944
private Timer timer;
45+
static UnlockScreenActivity instance;
46+
47+
48+
public static UnlockScreenActivity getInstance() {
49+
return instance;
50+
}
5051

5152

5253
@Override
5354
public void onStart() {
5455
super.onStart();
5556
if (this.timeout > 0) {
56-
this.timer = new Timer();
57-
this.timer.schedule(new TimerTask() {
57+
timer = new Timer();
58+
timer.schedule(new TimerTask() {
5859
@Override
5960
public void run() {
6061
// this code will be executed after timeout seconds
@@ -63,6 +64,7 @@ public void run() {
6364
}, timeout);
6465
}
6566
active = true;
67+
instance = this;
6668
}
6769

6870
@Override
@@ -76,7 +78,6 @@ protected void onCreate(Bundle savedInstanceState) {
7678
super.onCreate(savedInstanceState);
7779

7880
fa = this;
79-
8081
setContentView(R.layout.activity_call_incoming);
8182

8283
tvName = findViewById(R.id.tvName);
@@ -111,17 +112,16 @@ protected void onCreate(Bundle savedInstanceState) {
111112
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
112113
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
113114

114-
v.vibrate(pattern, 0);
115-
player.start();
115+
ringPhone();
116+
116117

117118
AnimateImage acceptCallBtn = findViewById(R.id.ivAcceptCall);
118119
acceptCallBtn.setOnClickListener(new View.OnClickListener() {
119120
@Override
120121
public void onClick(View view) {
121122
try {
122-
v.cancel();
123-
player.stop();
124-
player.prepareAsync();
123+
vibrator.cancel();
124+
ringtone.stop();
125125
acceptDialing();
126126
} catch (Exception e) {
127127
WritableMap params = Arguments.createMap();
@@ -136,9 +136,7 @@ public void onClick(View view) {
136136
rejectCallBtn.setOnClickListener(new View.OnClickListener() {
137137
@Override
138138
public void onClick(View view) {
139-
v.cancel();
140-
player.stop();
141-
player.prepareAsync();
139+
stopRinging();
142140
dismissDialing();
143141
}
144142
});
@@ -157,7 +155,34 @@ public void dismissIncoming() {
157155
dismissDialing();
158156
}
159157

160-
private void acceptDialing() {
158+
private void ringPhone(){
159+
long[] pattern = {0, 1000, 800};
160+
vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
161+
int ringerMode = ((AudioManager) getSystemService(Context.AUDIO_SERVICE)).getRingerMode();
162+
if(ringerMode == AudioManager.RINGER_MODE_SILENT) return;
163+
164+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
165+
VibrationEffect vibe = VibrationEffect.createWaveform(pattern, 2);
166+
vibrator.vibrate(vibe);
167+
}else{
168+
vibrator.vibrate(pattern, 0);
169+
}
170+
if(ringerMode == AudioManager.RINGER_MODE_VIBRATE) return;
171+
172+
ringtone = RingtoneManager.getRingtone(this, RingtoneManager.getActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE));
173+
ringtone.play();
174+
}
175+
176+
private void stopRinging() {
177+
if (vibrator != null){
178+
vibrator.cancel();
179+
}
180+
int ringerMode = ((AudioManager) getSystemService(Context.AUDIO_SERVICE)).getRingerMode();
181+
if(ringerMode != AudioManager.RINGER_MODE_NORMAL) return;
182+
ringtone.stop();
183+
}
184+
185+
private void acceptDialing() {
161186
WritableMap params = Arguments.createMap();
162187
params.putBoolean("accept", true);
163188
params.putString("uuid", uuid);

0 commit comments

Comments
 (0)