Keep preferred address for HdmiControlService
Uses SystemProperties to store/retrieve preferred logical address
Bug: 15843075
Bug: 15844858
Change-Id: Ie1304805cbec4e11ef4b44a5cceb108121c60581
This commit is contained in:
@@ -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 */ }
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user