summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java18
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiControlService.java28
2 files changed, 38 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
index 850ff10..73f5cfd 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
@@ -418,17 +418,25 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
@ServiceThreadOnly
protected boolean handleGetMenuLanguage(HdmiCecMessage message) {
assertRunOnServiceThread();
- HdmiCecMessage command = HdmiCecMessageBuilder.buildSetMenuLanguageCommand(
- mAddress, Locale.getDefault().getISO3Language());
// TODO: figure out how to handle failed to get language code.
- if (command != null) {
- mService.sendCecCommand(command);
- } else {
+ if (!broadcastMenuLanguage(Locale.getDefault().getISO3Language())) {
Slog.w(TAG, "Failed to respond to <Get Menu Language>: " + message.toString());
}
return true;
}
+ @ServiceThreadOnly
+ boolean broadcastMenuLanguage(String language) {
+ assertRunOnServiceThread();
+ HdmiCecMessage command = HdmiCecMessageBuilder.buildSetMenuLanguageCommand(
+ mAddress, language);
+ if (command != null) {
+ mService.sendCecCommand(command);
+ return true;
+ }
+ return false;
+ }
+
@Override
@ServiceThreadOnly
protected boolean handleReportPhysicalAddress(HdmiCecMessage message) {
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
index 8bbc404..5b99f14 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -78,6 +78,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Locale;
/**
* Provides a service for sending and processing HDMI control messages,
@@ -123,7 +124,7 @@ public final class HdmiControlService extends SystemService {
void onPollingFinished(List<Integer> ackedAddress);
}
- private class PowerStateReceiver extends BroadcastReceiver {
+ private class HdmiControlBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
@@ -137,6 +138,12 @@ public final class HdmiControlService extends SystemService {
onWakeUp();
}
break;
+ case Intent.ACTION_CONFIGURATION_CHANGED:
+ String language = Locale.getDefault().getISO3Language();
+ if (!mLanguage.equals(language)) {
+ onLanguageChanged(language);
+ }
+ break;
}
}
}
@@ -238,12 +245,16 @@ public final class HdmiControlService extends SystemService {
private HdmiCecMessageValidator mMessageValidator;
- private final PowerStateReceiver mPowerStateReceiver = new PowerStateReceiver();
+ private final HdmiControlBroadcastReceiver
+ mHdmiControlBroadcastReceiver = new HdmiControlBroadcastReceiver();
@ServiceThreadOnly
private int mPowerStatus = HdmiControlManager.POWER_STATUS_STANDBY;
@ServiceThreadOnly
+ private String mLanguage = Locale.getDefault().getISO3Language();
+
+ @ServiceThreadOnly
private boolean mStandbyMessageReceived = false;
@ServiceThreadOnly
@@ -307,7 +318,8 @@ public final class HdmiControlService extends SystemService {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
- getContext().registerReceiver(mPowerStateReceiver, filter);
+ filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
+ getContext().registerReceiver(mHdmiControlBroadcastReceiver, filter);
}
}
@@ -1697,6 +1709,16 @@ public final class HdmiControlService extends SystemService {
});
}
+ @ServiceThreadOnly
+ private void onLanguageChanged(String language) {
+ assertRunOnServiceThread();
+ mLanguage = language;
+
+ if (isTvDevice()) {
+ tv().broadcastMenuLanguage(language);
+ }
+ }
+
private void disableDevices(PendingActionClearedCallback callback) {
if (mCecController != null) {
for (HdmiCecLocalDevice device : mCecController.getLocalDeviceList()) {