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

Commit 02c7423b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "[CEC Configuration] Add 'tv_send_standby_on_sleep' option" into sc-dev...

Merge "[CEC Configuration] Add 'tv_send_standby_on_sleep' option" into sc-dev am: e363da12 am: e79d6165

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13415229

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Ibd054271951b08aa0387a1bfc2b6e4151140f11f
parents cebe3dd1 e79d6165
Loading
Loading
Loading
Loading
+77 −1
Original line number Diff line number Diff line
@@ -503,6 +503,29 @@ public final class HdmiControlManager {
    @Retention(RetentionPolicy.SOURCE)
    public @interface TvWakeOnOneTouchPlay {}

    // -- Whether TV should send <Standby> on sleep.
    /**
     * Sending <Standby> on sleep.
     *
     * @hide
     */
    public static final int TV_SEND_STANDBY_ON_SLEEP_ENABLED = 1;
    /**
     * Not sending <Standby> on sleep.
     *
     * @hide
     */
    public static final int TV_SEND_STANDBY_ON_SLEEP_DISABLED = 0;
    /**
     * @hide
     */
    @IntDef(prefix = { "TV_SEND_STANDBY_ON_SLEEP_" }, value = {
            TV_SEND_STANDBY_ON_SLEEP_ENABLED,
            TV_SEND_STANDBY_ON_SLEEP_DISABLED
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface TvSendStandbyOnSleep {}

    // -- The RC profile of a TV panel.
    /**
     * RC profile none.
@@ -746,6 +769,14 @@ public final class HdmiControlManager {
     */
    public static final String CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY =
            "tv_wake_on_one_touch_play";
    /**
     * Name of a setting deciding whether the device will also turn off other CEC devices
     * when it goes to standby mode.
     *
     * @hide
     */
    public static final String CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP =
            "tv_send_standby_on_sleep";
    /**
     * Name of a setting representing the RC profile of a TV panel.
     *
@@ -805,12 +836,13 @@ public final class HdmiControlManager {
        CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING,
        CEC_SETTING_NAME_VOLUME_CONTROL_MODE,
        CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY,
        CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP,
        CEC_SETTING_NAME_RC_PROFILE_TV,
        CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU,
        CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_SETUP_MENU,
        CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_CONTENTS_MENU,
        CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_TOP_MENU,
        CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU
        CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_MEDIA_CONTEXT_SENSITIVE_MENU,
    })
    public @interface CecSettingName {}

@@ -2158,4 +2190,48 @@ public final class HdmiControlManager {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Set the current status of TV send <Standby> on Sleep.
     *
     * <p>Sets whether the device will also turn off other CEC devices
     * when it goes to standby mode.
     *
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.HDMI_CEC)
    public void setTvSendStandbyOnSleep(@NonNull @TvSendStandbyOnSleep int value) {
        if (mService == null) {
            Log.e(TAG, "HdmiControlService is not available");
            throw new RuntimeException("HdmiControlService is not available");
        }
        try {
            mService.setCecSettingIntValue(CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP, value);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Get the current status of TV send &lt;Standby&gt; on Sleep.
     *
     * <p>Reflects whether the device will also turn off other CEC devices
     * when it goes to standby mode.
     *
     * @hide
     */
    @NonNull
    @TvSendStandbyOnSleep
    @RequiresPermission(android.Manifest.permission.HDMI_CEC)
    public int getTvSendStandbyOnSleep() {
        if (mService == null) {
            Log.e(TAG, "HdmiControlService is not available");
            throw new RuntimeException("HdmiControlService is not available");
        }
        try {
            return mService.getCecSettingIntValue(CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }
}
+4 −0
Original line number Diff line number Diff line
@@ -303,6 +303,8 @@ public class HdmiCecConfig {
                return STORAGE_SHARED_PREFS;
            case HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY:
                return STORAGE_GLOBAL_SETTINGS;
            case HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP:
                return STORAGE_GLOBAL_SETTINGS;
            case HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_TV:
                return STORAGE_SHARED_PREFS;
            case HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU:
@@ -338,6 +340,8 @@ public class HdmiCecConfig {
                return setting.getName();
            case HdmiControlManager.CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY:
                return Global.HDMI_CONTROL_AUTO_WAKEUP_ENABLED;
            case HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP:
                return Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED;
            case HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_TV:
                return setting.getName();
            case HdmiControlManager.CEC_SETTING_NAME_RC_PROFILE_SOURCE_HANDLES_ROOT_MENU:
+0 −2
Original line number Diff line number Diff line
@@ -956,8 +956,6 @@ abstract class HdmiCecLocalDevice {
        }
    }

    void setAutoDeviceOff(boolean enabled) {}

    /**
     * Called when a hot-plug event issued.
     *
+4 −19
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import android.hardware.tv.cec.V1_0.SendMessageResult;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.os.SystemProperties;
import android.provider.Settings.Global;
import android.sysprop.HdmiProperties;
import android.util.Slog;

@@ -56,9 +55,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
    // Lazily initialized - should call getWakeLock() to get the instance.
    private ActiveWakeLock mWakeLock;

    // If true, turn off TV upon standby. False by default.
    private boolean mAutoTvOff;

    // Determines what action should be taken upon receiving Routing Control messages.
    @VisibleForTesting
    protected HdmiProperties.playback_device_action_on_routing_control_values
@@ -68,12 +64,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {

    HdmiCecLocalDevicePlayback(HdmiControlService service) {
        super(service, HdmiDeviceInfo.DEVICE_PLAYBACK);

        mAutoTvOff = mService.readBooleanSetting(Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED, false);

        // The option is false by default. Update settings db as well to have the right
        // initial setting on UI.
        mService.writeBooleanSetting(Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED, mAutoTvOff);
    }

    @Override
@@ -154,7 +144,10 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
        // Invalidate the internal active source record when goes to standby
        mService.setActiveSource(Constants.ADDR_INVALID, Constants.INVALID_PHYSICAL_ADDRESS,
                "HdmiCecLocalDevicePlayback#onStandby()");
        if (initiatedByCec || !mAutoTvOff || !wasActiveSource) {
        boolean mTvSendStandbyOnSleep = mService.getHdmiCecConfig().getIntValue(
                HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP)
                    == HdmiControlManager.TV_SEND_STANDBY_ON_SLEEP_ENABLED;
        if (initiatedByCec || !mTvSendStandbyOnSleep || !wasActiveSource) {
            return;
        }
        switch (standbyAction) {
@@ -200,13 +193,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
        }
    }

    @Override
    @ServiceThreadOnly
    void setAutoDeviceOff(boolean enabled) {
        assertRunOnServiceThread();
        mAutoTvOff = enabled;
    }

    @Override
    @CallSuper
    @ServiceThreadOnly
@@ -425,7 +411,6 @@ public class HdmiCecLocalDevicePlayback extends HdmiCecLocalDeviceSource {
    protected void dump(final IndentingPrintWriter pw) {
        super.dump(pw);
        pw.println("isActiveSource(): " + isActiveSource());
        pw.println("mAutoTvOff:" + mAutoTvOff);
    }

    // Wrapper interface over PowerManager.WakeLock
+5 −14
Original line number Diff line number Diff line
@@ -89,9 +89,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
    @GuardedBy("mLock")
    private boolean mSystemAudioMute = false;

    // If true, TV going to standby mode puts other devices also to standby.
    private boolean mAutoDeviceOff;

    private final HdmiCecStandbyModeHandler mStandbyHandler;

    // If true, do not do routing control/send active source for internal source.
@@ -156,8 +153,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
    HdmiCecLocalDeviceTv(HdmiControlService service) {
        super(service, HdmiDeviceInfo.DEVICE_TV);
        mPrevPortId = Constants.INVALID_PORT_ID;
        mAutoDeviceOff = mService.readBooleanSetting(Global.HDMI_CONTROL_AUTO_DEVICE_OFF_ENABLED,
                true);
        mSystemAudioControlFeatureEnabled =
                mService.readBooleanSetting(Global.HDMI_SYSTEM_AUDIO_CONTROL_ENABLED, true);
        mStandbyHandler = new HdmiCecStandbyModeHandler(service, this);
@@ -1202,13 +1197,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
        }
    }

    @Override
    @ServiceThreadOnly
    void setAutoDeviceOff(boolean enabled) {
        assertRunOnServiceThread();
        mAutoDeviceOff = enabled;
    }

    @ServiceThreadOnly
    boolean getAutoWakeup() {
        assertRunOnServiceThread();
@@ -1286,7 +1274,11 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
        if (!mService.isControlEnabled()) {
            return;
        }
        if (!initiatedByCec && mAutoDeviceOff) {
        boolean sendStandbyOnSleep =
                mService.getHdmiCecConfig().getIntValue(
                    HdmiControlManager.CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP)
                        == HdmiControlManager.TV_SEND_STANDBY_ON_SLEEP_ENABLED;
        if (!initiatedByCec && sendStandbyOnSleep) {
            mService.sendCecCommand(HdmiCecMessageBuilder.buildStandby(
                    mAddress, Constants.ADDR_BROADCAST));
        }
@@ -1545,7 +1537,6 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
        pw.println("mArcFeatureEnabled: " + mArcFeatureEnabled);
        pw.println("mSystemAudioMute: " + mSystemAudioMute);
        pw.println("mSystemAudioControlFeatureEnabled: " + mSystemAudioControlFeatureEnabled);
        pw.println("mAutoDeviceOff: " + mAutoDeviceOff);
        pw.println("mSkipRoutingControl: " + mSkipRoutingControl);
        pw.println("mPrevPortId: " + mPrevPortId);
    }
Loading