am 9d7acf98: am 4db2f706: am 2dac2b7d: Merge "Call onPhoneDestroyed when the service is unbound." into lmp-dev

* commit '9d7acf9892f2a79ef54ddd20e951458551475978':
  Call onPhoneDestroyed when the service is unbound.
This commit is contained in:
Santos Cordon
2014-08-28 04:17:22 +00:00
committed by Android Git Automerger
3 changed files with 33 additions and 2 deletions

View File

@@ -743,6 +743,16 @@ public final class Call {
fireStartActivity(intent);
}
/** {@hide} */
final void internalSetDisconnected() {
if (mState != Call.STATE_DISCONNECTED) {
mState = Call.STATE_DISCONNECTED;
fireStateChanged(mState);
fireCallDestroyed();
mPhone.internalRemoveCall(this);
}
}
private void fireStateChanged(int newState) {
for (Listener listener : mListeners) {
listener.onStateChanged(this, newState);

View File

@@ -163,6 +163,16 @@ public abstract class InCallService extends Service {
return new InCallServiceBinder();
}
@Override
public boolean onUnbind(Intent intent) {
Phone oldPhone = mPhone;
mPhone = null;
oldPhone.destroy();
onPhoneDestroyed(oldPhone);
return false;
}
/**
* Obtain the {@code Phone} associated with this {@code InCallService}.
*

View File

@@ -20,7 +20,6 @@ import android.annotation.SystemApi;
import android.app.PendingIntent;
import android.util.ArrayMap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -83,7 +82,7 @@ public final class Phone {
// A List allows us to keep the Calls in a stable iteration order so that casually developed
// user interface components do not incur any spurious jank
private final List<Call> mCalls = new ArrayList<>();
private final List<Call> mCalls = new CopyOnWriteArrayList<>();
// An unmodifiable view of the above List can be safely shared with subclass implementations
private final List<Call> mUnmodifiableCalls = Collections.unmodifiableList(mCalls);
@@ -159,6 +158,18 @@ public final class Phone {
}
}
/**
* Called to destroy the phone and cleanup any lingering calls.
* @hide
*/
final void destroy() {
for (Call call : mCalls) {
if (call.getState() != Call.STATE_DISCONNECTED) {
call.internalSetDisconnected();
}
}
}
/**
* Adds a listener to this {@code Phone}.
*