diff --git a/src/main/java/ru/touchin/roboswag/components/telephony/IsCallingObserver.java b/src/main/java/ru/touchin/roboswag/components/telephony/IsCallingObserver.java index b68d815..6608a5f 100644 --- a/src/main/java/ru/touchin/roboswag/components/telephony/IsCallingObserver.java +++ b/src/main/java/ru/touchin/roboswag/components/telephony/IsCallingObserver.java @@ -19,13 +19,14 @@ package ru.touchin.roboswag.components.telephony; +import android.Manifest; import android.content.Context; import android.support.annotation.NonNull; +import android.support.annotation.RequiresPermission; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import rx.Observable; -import rx.subjects.BehaviorSubject; /** * Created by Gavriil Sitnikov on 02/11/2015. @@ -37,25 +38,27 @@ public final class IsCallingObserver { return state != TelephonyManager.CALL_STATE_IDLE; } - private final BehaviorSubject isCallingSubject = BehaviorSubject.create(); private final Observable isCallingObservable; public IsCallingObserver(@NonNull final Context context) { - final TelephonyManager phoneStateManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); - phoneStateManager.listen(new PhoneStateListener() { - @Override - public void onCallStateChanged(final int state, final String incomingNumber) { - super.onCallStateChanged(state, incomingNumber); - isCallingSubject.onNext(isCallingState(state)); - } - }, PhoneStateListener.LISTEN_CALL_STATE); - isCallingSubject.onNext(isCallingState(phoneStateManager.getCallState())); - isCallingObservable = isCallingSubject + isCallingObservable = Observable + .create(subscriber -> { + final TelephonyManager phoneStateManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + phoneStateManager.listen(new PhoneStateListener() { + @Override + public void onCallStateChanged(final int state, final String incomingNumber) { + super.onCallStateChanged(state, incomingNumber); + subscriber.onNext(isCallingState(state)); + } + }, PhoneStateListener.LISTEN_CALL_STATE); + subscriber.onNext(isCallingState(phoneStateManager.getCallState())); + }) .distinctUntilChanged() .replay(1) .refCount(); } + @RequiresPermission(Manifest.permission.READ_PHONE_STATE) @NonNull public Observable observeIsCalling() { return isCallingObservable;