19
19
import android .os .PowerManager ;
20
20
import android .os .PowerManager .WakeLock ;
21
21
import android .os .Build ;
22
+ import android .os .Handler ;
22
23
import android .provider .Settings ;
23
24
import android .support .annotation .Nullable ;
24
25
import android .support .v4 .app .ActivityCompat ;
44
45
45
46
import java .lang .reflect .Field ;
46
47
import java .lang .reflect .Method ;
48
+ import java .lang .Runnable ;
47
49
import java .io .File ;
48
50
import java .util .Map ;
49
51
import java .util .HashMap ;
@@ -103,6 +105,7 @@ public class InCallManagerModule extends ReactContextBaseJavaModule implements L
103
105
private MyPlayerInterface mRingtone ;
104
106
private MyPlayerInterface mRingback ;
105
107
private MyPlayerInterface mBusytone ;
108
+ private Handler mRingtoneCountDownHandler ;
106
109
private String media = "audio" ;
107
110
private static String recordPermission = "unknow" ;
108
111
private static String cameraPermission = "unknow" ;
@@ -1062,7 +1065,7 @@ public void stopBusytone() {
1062
1065
}
1063
1066
1064
1067
@ ReactMethod
1065
- public void startRingtone (final String ringtoneUriType ) {
1068
+ public void startRingtone (final String ringtoneUriType , final int seconds ) {
1066
1069
try {
1067
1070
Log .d (TAG , "startRingtone(): UriType=" + ringtoneUriType );
1068
1071
if (mRingtone != null ) {
@@ -1105,6 +1108,20 @@ public void startRingtone(final String ringtoneUriType) {
1105
1108
releasePokeFullWakeLock ();
1106
1109
acquireFullWakeLock ();
1107
1110
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
+ }
1108
1125
} catch (Exception e ) {
1109
1126
releaseFullWakeLock ();
1110
1127
Log .d (TAG , "startRingtone() failed" );
@@ -1119,6 +1136,10 @@ public void stopRingtone() {
1119
1136
mRingtone = null ;
1120
1137
restoreOriginalAudioSetup ();
1121
1138
}
1139
+ if (mRingtoneCountDownHandler != null ) {
1140
+ mRingtoneCountDownHandler .removeCallbacksAndMessages (null );
1141
+ mRingtoneCountDownHandler = null ;
1142
+ }
1122
1143
releaseFullWakeLock ();
1123
1144
} catch (Exception e ) {
1124
1145
Log .d (TAG , "stopRingtone() failed" );
0 commit comments