Search in sources :

Example 56 with ServiceThreadOnly

use of com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly in project android_frameworks_base by AOSPA.

the class HdmiCecLocalDeviceTv method clearDeviceInfoList.

// Clear all device info.
@ServiceThreadOnly
private void clearDeviceInfoList() {
    assertRunOnServiceThread();
    for (HdmiDeviceInfo info : mSafeExternalInputs) {
        invokeDeviceEventListener(info, HdmiControlManager.DEVICE_EVENT_REMOVE_DEVICE);
    }
    mDeviceInfos.clear();
    updateSafeDeviceInfoList();
}
Also used : HdmiDeviceInfo(android.hardware.hdmi.HdmiDeviceInfo) ServiceThreadOnly(com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly)

Example 57 with ServiceThreadOnly

use of com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly in project android_frameworks_base by crdroidandroid.

the class HdmiCecLocalDevicePlayback method handleSetMenuLanguage.

@ServiceThreadOnly
protected boolean handleSetMenuLanguage(HdmiCecMessage message) {
    assertRunOnServiceThread();
    if (!SET_MENU_LANGUAGE) {
        return false;
    }
    try {
        String iso3Language = new String(message.getParams(), 0, 3, "US-ASCII");
        Locale currentLocale = mService.getContext().getResources().getConfiguration().locale;
        if (currentLocale.getISO3Language().equals(iso3Language)) {
            // due to the limitation of CEC. See the warning below.
            return true;
        }
        // Don't use Locale.getAvailableLocales() since it returns a locale
        // which is not available on Settings.
        final List<LocaleInfo> localeInfos = LocalePicker.getAllAssetLocales(mService.getContext(), false);
        for (LocaleInfo localeInfo : localeInfos) {
            if (localeInfo.getLocale().getISO3Language().equals(iso3Language)) {
                // WARNING: CEC adopts ISO/FDIS-2 for language code, while Android requires
                // additional country variant to pinpoint the locale. This keeps the right
                // locale from being chosen. 'eng' in the CEC command, for instance,
                // will always be mapped to en-AU among other variants like en-US, en-GB,
                // an en-IN, which may not be the expected one.
                LocalePicker.updateLocale(localeInfo.getLocale());
                return true;
            }
        }
        Slog.w(TAG, "Can't handle <Set Menu Language> of " + iso3Language);
        return false;
    } catch (UnsupportedEncodingException e) {
        Slog.w(TAG, "Can't handle <Set Menu Language>", e);
        return false;
    }
}
Also used : Locale(java.util.Locale) LocaleInfo(com.android.internal.app.LocalePicker.LocaleInfo) UnsupportedEncodingException(java.io.UnsupportedEncodingException) ServiceThreadOnly(com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly)

Example 58 with ServiceThreadOnly

use of com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly in project android_frameworks_base by crdroidandroid.

the class HdmiCecLocalDeviceTv method handleActiveSource.

@Override
@ServiceThreadOnly
protected boolean handleActiveSource(HdmiCecMessage message) {
    assertRunOnServiceThread();
    int logicalAddress = message.getSource();
    int physicalAddress = HdmiUtils.twoBytesToInt(message.getParams());
    HdmiDeviceInfo info = getCecDeviceInfo(logicalAddress);
    if (info == null) {
        if (!handleNewDeviceAtTheTailOfActivePath(physicalAddress)) {
            HdmiLogger.debug("Device info %X not found; buffering the command", logicalAddress);
            mDelayedMessageBuffer.add(message);
        }
    } else if (isInputReady(info.getId()) || info.getDeviceType() == HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM) {
        updateDevicePowerStatus(logicalAddress, HdmiControlManager.POWER_STATUS_ON);
        ActiveSource activeSource = ActiveSource.of(logicalAddress, physicalAddress);
        ActiveSourceHandler.create(this, null).process(activeSource, info.getDeviceType());
    } else {
        HdmiLogger.debug("Input not ready for device: %X; buffering the command", info.getId());
        mDelayedMessageBuffer.add(message);
    }
    return true;
}
Also used : HdmiDeviceInfo(android.hardware.hdmi.HdmiDeviceInfo) ServiceThreadOnly(com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly)

Example 59 with ServiceThreadOnly

use of com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly in project android_frameworks_base by crdroidandroid.

the class HdmiControlService method disableHdmiControlService.

@ServiceThreadOnly
private void disableHdmiControlService() {
    disableDevices(new PendingActionClearedCallback() {

        @Override
        public void onCleared(HdmiCecLocalDevice device) {
            assertRunOnServiceThread();
            mCecController.flush(new Runnable() {

                @Override
                public void run() {
                    mCecController.setOption(OPTION_CEC_ENABLE, DISABLED);
                    mMhlController.setOption(OPTION_MHL_ENABLE, DISABLED);
                    clearLocalDevices();
                }
            });
        }
    });
}
Also used : PendingActionClearedCallback(com.android.server.hdmi.HdmiCecLocalDevice.PendingActionClearedCallback) ServiceThreadOnly(com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly)

Example 60 with ServiceThreadOnly

use of com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly in project android_frameworks_base by crdroidandroid.

the class HdmiControlService method allocateLogicalAddress.

@ServiceThreadOnly
private void allocateLogicalAddress(final ArrayList<HdmiCecLocalDevice> allocatingDevices, final int initiatedBy) {
    assertRunOnServiceThread();
    mCecController.clearLogicalAddress();
    final ArrayList<HdmiCecLocalDevice> allocatedDevices = new ArrayList<>();
    final int[] finished = new int[1];
    mAddressAllocated = allocatingDevices.isEmpty();
    // For TV device, select request can be invoked while address allocation or device
    // discovery is in progress. Initialize the request here at the start of allocation,
    // and process the collected requests later when the allocation and device discovery
    // is all completed.
    mSelectRequestBuffer.clear();
    for (final HdmiCecLocalDevice localDevice : allocatingDevices) {
        mCecController.allocateLogicalAddress(localDevice.getType(), localDevice.getPreferredAddress(), new AllocateAddressCallback() {

            @Override
            public void onAllocated(int deviceType, int logicalAddress) {
                if (logicalAddress == Constants.ADDR_UNREGISTERED) {
                    Slog.e(TAG, "Failed to allocate address:[device_type:" + deviceType + "]");
                } else {
                    // Set POWER_STATUS_ON to all local devices because they share lifetime
                    // with system.
                    HdmiDeviceInfo deviceInfo = createDeviceInfo(logicalAddress, deviceType, HdmiControlManager.POWER_STATUS_ON);
                    localDevice.setDeviceInfo(deviceInfo);
                    mCecController.addLocalDevice(deviceType, localDevice);
                    mCecController.addLogicalAddress(logicalAddress);
                    allocatedDevices.add(localDevice);
                }
                // Address allocation completed for all devices. Notify each device.
                if (allocatingDevices.size() == ++finished[0]) {
                    mAddressAllocated = true;
                    if (initiatedBy != INITIATED_BY_HOTPLUG) {
                        // In case of the hotplug we don't call onInitializeCecComplete()
                        // since we reallocate the logical address only.
                        onInitializeCecComplete(initiatedBy);
                    }
                    notifyAddressAllocated(allocatedDevices, initiatedBy);
                    mCecMessageBuffer.processMessages();
                }
            }
        });
    }
}
Also used : HdmiDeviceInfo(android.hardware.hdmi.HdmiDeviceInfo) ArrayList(java.util.ArrayList) AllocateAddressCallback(com.android.server.hdmi.HdmiCecController.AllocateAddressCallback) ServiceThreadOnly(com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly)

Aggregations

ServiceThreadOnly (com.android.server.hdmi.HdmiAnnotations.ServiceThreadOnly)135 HdmiDeviceInfo (android.hardware.hdmi.HdmiDeviceInfo)110 HdmiPortInfo (android.hardware.hdmi.HdmiPortInfo)15 PendingActionClearedCallback (com.android.server.hdmi.HdmiCecLocalDevice.PendingActionClearedCallback)10 UnsupportedEncodingException (java.io.UnsupportedEncodingException)10 ArrayList (java.util.ArrayList)10 Intent (android.content.Intent)5 IHdmiControlCallback (android.hardware.hdmi.IHdmiControlCallback)5 RemoteException (android.os.RemoteException)5 ArraySet (android.util.ArraySet)5 SparseArray (android.util.SparseArray)5 SparseIntArray (android.util.SparseIntArray)5 LocaleInfo (com.android.internal.app.LocalePicker.LocaleInfo)5 DeviceDiscoveryCallback (com.android.server.hdmi.DeviceDiscoveryAction.DeviceDiscoveryCallback)5 AllocateAddressCallback (com.android.server.hdmi.HdmiCecController.AllocateAddressCallback)5 Locale (java.util.Locale)5