1919import android .os .PowerManager ;
2020import android .os .PowerManager .WakeLock ;
2121import android .os .Build ;
22+ import android .os .Handler ;
2223import android .provider .Settings ;
2324import android .support .annotation .Nullable ;
2425import android .support .v4 .app .ActivityCompat ;
4445
4546import java .lang .reflect .Field ;
4647import java .lang .reflect .Method ;
48+ import java .lang .Runnable ;
4749import java .io .File ;
4850import java .util .Map ;
4951import java .util .HashMap ;
@@ -103,6 +105,7 @@ public class InCallManagerModule extends ReactContextBaseJavaModule implements L
103105 private MyPlayerInterface mRingtone ;
104106 private MyPlayerInterface mRingback ;
105107 private MyPlayerInterface mBusytone ;
108+ private Handler mRingtoneCountDownHandler ;
106109 private String media = "audio" ;
107110 private static String recordPermission = "unknow" ;
108111 private static String cameraPermission = "unknow" ;
@@ -1062,7 +1065,7 @@ public void stopBusytone() {
10621065 }
10631066
10641067 @ ReactMethod
1065- public void startRingtone (final String ringtoneUriType ) {
1068+ public void startRingtone (final String ringtoneUriType , final int seconds ) {
10661069 try {
10671070 Log .d (TAG , "startRingtone(): UriType=" + ringtoneUriType );
10681071 if (mRingtone != null ) {
@@ -1105,6 +1108,20 @@ public void startRingtone(final String ringtoneUriType) {
11051108 releasePokeFullWakeLock ();
11061109 acquireFullWakeLock ();
11071110 mRingtone .startPlay (data );
1111+
1112+ if (seconds > 0 ) {
1113+ mRingtoneCountDownHandler = new Handler ();
1114+ mRingtoneCountDownHandler .postDelayed (new Runnable () {
1115+ public void run () {
1116+ try {
1117+ Log .d (TAG , String .format ("mRingtoneCountDownHandler.stopRingtone() timeout after %d seconds" , seconds ));
1118+ stopRingtone ();
1119+ } catch (Exception e ) {
1120+ Log .d (TAG , "mRingtoneCountDownHandler.stopRingtone() failed." );
1121+ }
1122+ }
1123+ }, seconds * 1000 );
1124+ }
11081125 } catch (Exception e ) {
11091126 releaseFullWakeLock ();
11101127 Log .d (TAG , "startRingtone() failed" );
@@ -1119,6 +1136,10 @@ public void stopRingtone() {
11191136 mRingtone = null ;
11201137 restoreOriginalAudioSetup ();
11211138 }
1139+ if (mRingtoneCountDownHandler != null ) {
1140+ mRingtoneCountDownHandler .removeCallbacksAndMessages (null );
1141+ mRingtoneCountDownHandler = null ;
1142+ }
11221143 releaseFullWakeLock ();
11231144 } catch (Exception e ) {
11241145 Log .d (TAG , "stopRingtone() failed" );
0 commit comments