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

Commit af2acf04 authored by Jinsuk Kim's avatar Jinsuk Kim
Browse files

Keep preferred address for HdmiControlService

Uses SystemProperties to store/retrieve preferred logical address

Bug: 15843075
Bug: 15844858
Change-Id: Ie1304805cbec4e11ef4b44a5cceb108121c60581
parent 3ed145f4
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -203,5 +203,8 @@ final class Constants {
    //       in config.xml to allow customization.
    static final int IRT_MS = 300;

    static final String PROPERTY_PREFERRED_ADDRESS_PLAYBACK = "hdmi_cec.preferred_address.playback";
    static final String PROPERTY_PREFERRED_ADDRESS_TV = "hdmi_cec.preferred_address.tv";

    private Constants() { /* cannot be instantiated */ }
}
+0 −2
Original line number Diff line number Diff line
@@ -265,8 +265,6 @@ final class HdmiCecController {
    @ServiceThreadOnly
    void clearLogicalAddress() {
        assertRunOnServiceThread();
        // TODO: consider to backup logical address so that new logical address
        // allocation can use it as preferred address.
        for (int i = 0; i < mLocalDevices.size(); ++i) {
            mLocalDevices.valueAt(i).clearAddress();
        }
+13 −14
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.hardware.hdmi.HdmiCecDeviceInfo;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.SystemProperties;
import android.util.Slog;

import com.android.internal.annotations.GuardedBy;
@@ -108,8 +109,7 @@ abstract class HdmiCecLocalDevice {
    @ServiceThreadOnly
    void init() {
        assertRunOnServiceThread();
        mPreferredAddress = Constants.ADDR_UNREGISTERED;
        // TODO: load preferred address from permanent storage.
        mPreferredAddress = getPreferredAddress();
    }

    /**
@@ -117,6 +117,16 @@ abstract class HdmiCecLocalDevice {
     */
    protected abstract void onAddressAllocated(int logicalAddress, boolean fromBootup);

    /**
     * Get the preferred logical address from system properties.
     */
    protected abstract int getPreferredAddress();

    /**
     * Set the preferred logical address to system properties.
     */
    protected abstract void setPreferredAddress(int addr);

    /**
     * Dispatch incoming message.
     *
@@ -398,6 +408,7 @@ abstract class HdmiCecLocalDevice {
        assertRunOnServiceThread();
        mAddress = mPreferredAddress = logicalAddress;
        onAddressAllocated(logicalAddress, fromBootup);
        setPreferredAddress(logicalAddress);
    }

    @ServiceThreadOnly
@@ -426,18 +437,6 @@ abstract class HdmiCecLocalDevice {
        mAddress = Constants.ADDR_UNREGISTERED;
    }

    @ServiceThreadOnly
    void setPreferredAddress(int addr) {
        assertRunOnServiceThread();
        mPreferredAddress = addr;
    }

    @ServiceThreadOnly
    int getPreferredAddress() {
        assertRunOnServiceThread();
        return mPreferredAddress;
    }

    @ServiceThreadOnly
    void addAndStartAction(final FeatureAction action) {
        assertRunOnServiceThread();
+17 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.hardware.hdmi.HdmiCecDeviceInfo;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.IHdmiControlCallback;
import android.os.RemoteException;
import android.os.SystemProperties;
import android.util.Slog;

import com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly;
@@ -44,6 +45,22 @@ final class HdmiCecLocalDevicePlayback extends HdmiCecLocalDevice {
                mAddress, mService.getPhysicalAddress(), mDeviceType));
    }

    @Override
    @ServiceThreadOnly
    protected int getPreferredAddress() {
        assertRunOnServiceThread();
        return SystemProperties.getInt(Constants.PROPERTY_PREFERRED_ADDRESS_PLAYBACK,
                Constants.ADDR_UNREGISTERED);
    }

    @Override
    @ServiceThreadOnly
    protected void setPreferredAddress(int addr) {
        assertRunOnServiceThread();
        SystemProperties.set(Constants.PROPERTY_PREFERRED_ADDRESS_PLAYBACK,
                String.valueOf(addr));
    }

    @ServiceThreadOnly
    void oneTouchPlay(IHdmiControlCallback callback) {
        assertRunOnServiceThread();
+17 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.media.AudioPatch;
import android.media.AudioPort;
import android.media.AudioSystem;
import android.os.RemoteException;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.provider.Settings.Global;
import android.util.Slog;
@@ -108,6 +109,22 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
        // TODO: unregister audio port update listener if local device is released.
    }

    @Override
    @ServiceThreadOnly
    protected int getPreferredAddress() {
        assertRunOnServiceThread();
        return SystemProperties.getInt(Constants.PROPERTY_PREFERRED_ADDRESS_TV,
                Constants.ADDR_UNREGISTERED);
    }

    @Override
    @ServiceThreadOnly
    protected void setPreferredAddress(int addr) {
        assertRunOnServiceThread();
        SystemProperties.set(Constants.PROPERTY_PREFERRED_ADDRESS_TV,
                String.valueOf(addr));
    }

    private void registerAudioPortUpdateListener() {
        mService.getAudioManager().registerAudioPortUpdateListener(
                new OnAudioPortUpdateListener() {