11package com .incomingcall ;
22
33import android .app .KeyguardManager ;
4- import android .content .Intent ;
4+ import android .media .AudioManager ;
5+ import android .media .Ringtone ;
6+ import android .media .RingtoneManager ;
57import android .os .Build ;
68import android .os .Bundle ;
9+ import android .os .VibrationEffect ;
710import android .util .Log ;
811import android .view .WindowManager ;
912import android .widget .ImageView ;
1013import android .widget .TextView ;
1114import android .view .View ;
12- import android .net .Uri ;
1315import android .os .Vibrator ;
1416import android .content .Context ;
1517import android .media .MediaPlayer ;
1618import android .provider .Settings ;
1719import java .util .List ;
1820import java .util .Timer ;
1921import java .util .TimerTask ;
20-
2122import android .app .Activity ;
22-
2323import androidx .appcompat .app .AppCompatActivity ;
24- import android .app .ActivityManager ;
25- import android .app .ActivityManager .RunningAppProcessInfo ;
2624
2725import com .facebook .react .bridge .Arguments ;
28- import com .facebook .react .bridge .ReactContext ;
2926import com .facebook .react .bridge .ReadableMap ;
3027import com .facebook .react .bridge .WritableMap ;
31- import com .facebook .react .bridge .ReactApplicationContext ;
3228import com .facebook .react .modules .core .DeviceEventManagerModule ;
3329
3430import 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