Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5b8b0df7 authored by Andrew Lee's avatar Andrew Lee Committed by Android (Google) Code Review
Browse files

Merge "Add handler parameter for callbacks." into mnc-dev

parents 7dc7d09b 011728fc
Loading
Loading
Loading
Loading
+5 −1
Original line number Original line Diff line number Diff line
@@ -30257,6 +30257,7 @@ package android.telecom {
    method public void playDtmfTone(char);
    method public void playDtmfTone(char);
    method public void postDialContinue(boolean);
    method public void postDialContinue(boolean);
    method public void registerCallback(android.telecom.Call.Callback);
    method public void registerCallback(android.telecom.Call.Callback);
    method public void registerCallback(android.telecom.Call.Callback, android.os.Handler);
    method public void reject(boolean, java.lang.String);
    method public void reject(boolean, java.lang.String);
    method public void splitFromConference();
    method public void splitFromConference();
    method public void stopDtmfTone();
    method public void stopDtmfTone();
@@ -30564,6 +30565,7 @@ package android.telecom {
  public static abstract class InCallService.VideoCall {
  public static abstract class InCallService.VideoCall {
    ctor public InCallService.VideoCall();
    ctor public InCallService.VideoCall();
    method public abstract void registerCallback(android.telecom.InCallService.VideoCall.Callback);
    method public abstract void registerCallback(android.telecom.InCallService.VideoCall.Callback);
    method public abstract void registerCallback(android.telecom.InCallService.VideoCall.Callback, android.os.Handler);
    method public abstract void requestCallDataUsage();
    method public abstract void requestCallDataUsage();
    method public abstract void requestCameraCapabilities();
    method public abstract void requestCameraCapabilities();
    method public abstract void sendSessionModifyRequest(android.telecom.VideoProfile);
    method public abstract void sendSessionModifyRequest(android.telecom.VideoProfile);
@@ -30574,7 +30576,7 @@ package android.telecom {
    method public abstract void setPauseImage(java.lang.String);
    method public abstract void setPauseImage(java.lang.String);
    method public abstract void setPreviewSurface(android.view.Surface);
    method public abstract void setPreviewSurface(android.view.Surface);
    method public abstract void setZoom(float);
    method public abstract void setZoom(float);
    method public abstract void unregisterCallback();
    method public abstract void unregisterCallback(android.telecom.InCallService.VideoCall.Callback);
  }
  }
  public static abstract class InCallService.VideoCall.Callback {
  public static abstract class InCallService.VideoCall.Callback {
@@ -30662,6 +30664,7 @@ package android.telecom {
    method public void merge();
    method public void merge();
    method public void playDtmfTone(char);
    method public void playDtmfTone(char);
    method public final void registerCallback(android.telecom.RemoteConference.Callback);
    method public final void registerCallback(android.telecom.RemoteConference.Callback);
    method public final void registerCallback(android.telecom.RemoteConference.Callback, android.os.Handler);
    method public void separate(android.telecom.RemoteConnection);
    method public void separate(android.telecom.RemoteConnection);
    method public void setAudioState(android.telecom.AudioState);
    method public void setAudioState(android.telecom.AudioState);
    method public void stopDtmfTone();
    method public void stopDtmfTone();
@@ -30701,6 +30704,7 @@ package android.telecom {
    method public void playDtmfTone(char);
    method public void playDtmfTone(char);
    method public void postDialContinue(boolean);
    method public void postDialContinue(boolean);
    method public void registerCallback(android.telecom.RemoteConnection.Callback);
    method public void registerCallback(android.telecom.RemoteConnection.Callback);
    method public void registerCallback(android.telecom.RemoteConnection.Callback, android.os.Handler);
    method public void reject();
    method public void reject();
    method public void setAudioState(android.telecom.AudioState);
    method public void setAudioState(android.telecom.AudioState);
    method public void stopDtmfTone();
    method public void stopDtmfTone();
+5 −1
Original line number Original line Diff line number Diff line
@@ -32371,6 +32371,7 @@ package android.telecom {
    method public void playDtmfTone(char);
    method public void playDtmfTone(char);
    method public void postDialContinue(boolean);
    method public void postDialContinue(boolean);
    method public void registerCallback(android.telecom.Call.Callback);
    method public void registerCallback(android.telecom.Call.Callback);
    method public void registerCallback(android.telecom.Call.Callback, android.os.Handler);
    method public void reject(boolean, java.lang.String);
    method public void reject(boolean, java.lang.String);
    method public deprecated void removeListener(android.telecom.Call.Listener);
    method public deprecated void removeListener(android.telecom.Call.Listener);
    method public void splitFromConference();
    method public void splitFromConference();
@@ -32687,6 +32688,7 @@ package android.telecom {
  public static abstract class InCallService.VideoCall {
  public static abstract class InCallService.VideoCall {
    ctor public InCallService.VideoCall();
    ctor public InCallService.VideoCall();
    method public abstract void registerCallback(android.telecom.InCallService.VideoCall.Callback);
    method public abstract void registerCallback(android.telecom.InCallService.VideoCall.Callback);
    method public abstract void registerCallback(android.telecom.InCallService.VideoCall.Callback, android.os.Handler);
    method public abstract void requestCallDataUsage();
    method public abstract void requestCallDataUsage();
    method public abstract void requestCameraCapabilities();
    method public abstract void requestCameraCapabilities();
    method public abstract void sendSessionModifyRequest(android.telecom.VideoProfile);
    method public abstract void sendSessionModifyRequest(android.telecom.VideoProfile);
@@ -32697,7 +32699,7 @@ package android.telecom {
    method public abstract void setPauseImage(java.lang.String);
    method public abstract void setPauseImage(java.lang.String);
    method public abstract void setPreviewSurface(android.view.Surface);
    method public abstract void setPreviewSurface(android.view.Surface);
    method public abstract void setZoom(float);
    method public abstract void setZoom(float);
    method public abstract void unregisterCallback();
    method public abstract void unregisterCallback(android.telecom.InCallService.VideoCall.Callback);
  }
  }
  public static abstract class InCallService.VideoCall.Callback {
  public static abstract class InCallService.VideoCall.Callback {
@@ -32805,6 +32807,7 @@ package android.telecom {
    method public void merge();
    method public void merge();
    method public void playDtmfTone(char);
    method public void playDtmfTone(char);
    method public final void registerCallback(android.telecom.RemoteConference.Callback);
    method public final void registerCallback(android.telecom.RemoteConference.Callback);
    method public final void registerCallback(android.telecom.RemoteConference.Callback, android.os.Handler);
    method public void separate(android.telecom.RemoteConnection);
    method public void separate(android.telecom.RemoteConnection);
    method public void setAudioState(android.telecom.AudioState);
    method public void setAudioState(android.telecom.AudioState);
    method public void stopDtmfTone();
    method public void stopDtmfTone();
@@ -32844,6 +32847,7 @@ package android.telecom {
    method public void playDtmfTone(char);
    method public void playDtmfTone(char);
    method public void postDialContinue(boolean);
    method public void postDialContinue(boolean);
    method public void registerCallback(android.telecom.RemoteConnection.Callback);
    method public void registerCallback(android.telecom.RemoteConnection.Callback);
    method public void registerCallback(android.telecom.RemoteConnection.Callback, android.os.Handler);
    method public void reject();
    method public void reject();
    method public void setAudioState(android.telecom.AudioState);
    method public void setAudioState(android.telecom.AudioState);
    method public void stopDtmfTone();
    method public void stopDtmfTone();
+111 −28
Original line number Original line Diff line number Diff line
@@ -19,10 +19,12 @@ package android.telecom;
import android.annotation.SystemApi;
import android.annotation.SystemApi;
import android.net.Uri;
import android.net.Uri;
import android.os.Bundle;
import android.os.Bundle;
import android.os.Handler;


import java.lang.String;
import java.lang.String;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.List;
import java.util.Map;
import java.util.Map;
import java.util.Objects;
import java.util.Objects;
@@ -608,7 +610,7 @@ public final class Call {
    private final List<String> mChildrenIds = new ArrayList<>();
    private final List<String> mChildrenIds = new ArrayList<>();
    private final List<Call> mChildren = new ArrayList<>();
    private final List<Call> mChildren = new ArrayList<>();
    private final List<Call> mUnmodifiableChildren = Collections.unmodifiableList(mChildren);
    private final List<Call> mUnmodifiableChildren = Collections.unmodifiableList(mChildren);
    private final List<Callback> mCallbacks = new CopyOnWriteArrayList<>();
    private final List<CallbackRecord<Callback>> mCallbackRecords = new CopyOnWriteArrayList<>();
    private final List<Call> mConferenceableCalls = new ArrayList<>();
    private final List<Call> mConferenceableCalls = new ArrayList<>();
    private final List<Call> mUnmodifiableConferenceableCalls =
    private final List<Call> mUnmodifiableConferenceableCalls =
            Collections.unmodifiableList(mConferenceableCalls);
            Collections.unmodifiableList(mConferenceableCalls);
@@ -850,7 +852,20 @@ public final class Call {
     * @param callback A {@code Callback}.
     * @param callback A {@code Callback}.
     */
     */
    public void registerCallback(Callback callback) {
    public void registerCallback(Callback callback) {
        mCallbacks.add(callback);
        registerCallback(callback, new Handler());
    }

    /**
     * Registers a callback to this {@code Call}.
     *
     * @param callback A {@code Callback}.
     * @param handler A handler which command and status changes will be delivered to.
     */
    public void registerCallback(Callback callback, Handler handler) {
        unregisterCallback(callback);
        if (callback != null && handler != null) {
            mCallbackRecords.add(new CallbackRecord<Callback>(callback, handler));
        }
    }
    }


    /**
    /**
@@ -860,7 +875,12 @@ public final class Call {
     */
     */
    public void unregisterCallback(Callback callback) {
    public void unregisterCallback(Callback callback) {
        if (callback != null) {
        if (callback != null) {
            mCallbacks.remove(callback);
            for (CallbackRecord<Callback> record : mCallbackRecords) {
                if (record.getCallback() == callback) {
                    mCallbackRecords.remove(record);
                    break;
                }
            }
        }
        }
    }
    }


@@ -1021,57 +1041,120 @@ public final class Call {
        }
        }
    }
    }


    private void fireStateChanged(int newState) {
    private void fireStateChanged(final int newState) {
        for (Callback callback : mCallbacks) {
        for (CallbackRecord<Callback> record : mCallbackRecords) {
            callback.onStateChanged(this, newState);
            final Call call = this;
            final Callback callback = record.getCallback();
            record.getHandler().post(new Runnable() {
                @Override
                public void run() {
                    callback.onStateChanged(call, newState);
                }
            });
        }
        }
    }
    }


    private void fireParentChanged(Call newParent) {
    private void fireParentChanged(final Call newParent) {
        for (Callback callback : mCallbacks) {
        for (CallbackRecord<Callback> record : mCallbackRecords) {
            callback.onParentChanged(this, newParent);
            final Call call = this;
            final Callback callback = record.getCallback();
            record.getHandler().post(new Runnable() {
                @Override
                public void run() {
                    callback.onParentChanged(call, newParent);
                }
            });
        }
        }
    }
    }


    private void fireChildrenChanged(List<Call> children) {
    private void fireChildrenChanged(final List<Call> children) {
        for (Callback callback : mCallbacks) {
        for (CallbackRecord<Callback> record : mCallbackRecords) {
            callback.onChildrenChanged(this, children);
            final Call call = this;
            final Callback callback = record.getCallback();
            record.getHandler().post(new Runnable() {
                @Override
                public void run() {
                    callback.onChildrenChanged(call, children);
                }
            });
        }
        }
    }
    }


    private void fireDetailsChanged(Details details) {
    private void fireDetailsChanged(final Details details) {
        for (Callback callback : mCallbacks) {
        for (CallbackRecord<Callback> record : mCallbackRecords) {
            callback.onDetailsChanged(this, details);
            final Call call = this;
            final Callback callback = record.getCallback();
            record.getHandler().post(new Runnable() {
                @Override
                public void run() {
                    callback.onDetailsChanged(call, details);
                }
            });
        }
        }
    }
    }


    private void fireCannedTextResponsesLoaded(List<String> cannedTextResponses) {
    private void fireCannedTextResponsesLoaded(final List<String> cannedTextResponses) {
        for (Callback callback : mCallbacks) {
        for (CallbackRecord<Callback> record : mCallbackRecords) {
            callback.onCannedTextResponsesLoaded(this, cannedTextResponses);
            final Call call = this;
            final Callback callback = record.getCallback();
            record.getHandler().post(new Runnable() {
                @Override
                public void run() {
                    callback.onCannedTextResponsesLoaded(call, cannedTextResponses);
                }
            });
        }
        }
    }
    }


    private void fireVideoCallChanged(InCallService.VideoCall videoCall) {
    private void fireVideoCallChanged(final InCallService.VideoCall videoCall) {
        for (Callback callback : mCallbacks) {
        for (CallbackRecord<Callback> record : mCallbackRecords) {
            callback.onVideoCallChanged(this, videoCall);
            final Call call = this;
            final Callback callback = record.getCallback();
            record.getHandler().post(new Runnable() {
                @Override
                public void run() {
                    callback.onVideoCallChanged(call, videoCall);
                }
            });
        }
        }
    }
    }


    private void firePostDialWait(String remainingPostDialSequence) {
    private void firePostDialWait(final String remainingPostDialSequence) {
        for (Callback callback : mCallbacks) {
        for (CallbackRecord<Callback> record : mCallbackRecords) {
            callback.onPostDialWait(this, remainingPostDialSequence);
            final Call call = this;
            final Callback callback = record.getCallback();
            record.getHandler().post(new Runnable() {
                @Override
                public void run() {
                    callback.onPostDialWait(call, remainingPostDialSequence);
                }
            });
        }
        }
    }
    }


    private void fireCallDestroyed() {
    private void fireCallDestroyed() {
        for (Callback callback : mCallbacks) {
        for (CallbackRecord<Callback> record: mCallbackRecords) {
            callback.onCallDestroyed(this);
            final Call call = this;
            final Callback callback = record.getCallback();
            record.getHandler().post(new Runnable() {
                @Override
                public void run() {
                    callback.onCallDestroyed(call);
                }
            });
        }
        }
    }
    }


    private void fireConferenceableCallsChanged() {
    private void fireConferenceableCallsChanged() {
        for (Callback callback : mCallbacks) {
        for (CallbackRecord<Callback> record : mCallbackRecords) {
            callback.onConferenceableCallsChanged(this, mUnmodifiableConferenceableCalls);
            final Call call = this;
            final Callback callback = record.getCallback();
            record.getHandler().post(new Runnable() {
                @Override
                public void run() {
                    callback.onConferenceableCallsChanged(call, mUnmodifiableConferenceableCalls);
                }
            });
        }
        }
    }
    }
}
}
+44 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.telecom;

import android.os.Handler;


/**
 * This class is used to associate a generic callback of type T with a handler to which commands and
 * status updates will be delivered to.
 *
 * @hide
 */
class CallbackRecord<T> {
    private final T mCallback;
    private final Handler mHandler;

    public CallbackRecord(T callback, Handler handler) {
        mCallback = callback;
        mHandler = handler;
    }

    public T getCallback() {
        return mCallback;
    }

    public Handler getHandler() {
        return mHandler;
    }
}
+12 −1
Original line number Original line Diff line number Diff line
@@ -362,6 +362,9 @@ public abstract class InCallService extends Service {
     */
     */
    public static abstract class VideoCall {
    public static abstract class VideoCall {


        /** @hide */
        public abstract void destroy();

        /**
        /**
         * Registers a callback to receive commands and state changes for video calls.
         * Registers a callback to receive commands and state changes for video calls.
         *
         *
@@ -369,10 +372,18 @@ public abstract class InCallService extends Service {
         */
         */
        public abstract void registerCallback(VideoCall.Callback callback);
        public abstract void registerCallback(VideoCall.Callback callback);


        /**
         * Registers a callback to receive commands and state changes for video calls.
         *
         * @param callback The video call callback.
         * @param handler A handler which commands and status changes will be delivered to.
         */
        public abstract void registerCallback(VideoCall.Callback callback, Handler handler);

        /**
        /**
         * Clears the video call listener set via {@link #registerCallback}.
         * Clears the video call listener set via {@link #registerCallback}.
         */
         */
        public abstract void unregisterCallback();
        public abstract void unregisterCallback(VideoCall.Callback callback);


        /**
        /**
         * Sets the camera to be used for video recording in a video call.
         * Sets the camera to be used for video recording in a video call.
Loading