)]}'
{
  "commit": "e9067774b0231da9c3d10f2dfd1c1c49d63bfbea",
  "tree": "ae34259db6e97f92a86c72275ca8cead47fce78b",
  "parents": [
    "97ae1fc5210670aa8a23919c8975a6bc654f67b8"
  ],
  "author": {
    "name": "chrisdecenzo",
    "email": "61757564+chrisdecenzo@users.noreply.github.com",
    "time": "Mon Jul 20 14:02:15 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Jul 20 14:02:15 2026 -0700"
  },
  "message": "feat(tv-app): Implement new Content Launcher features (#73015)\n\n* feat(tv-app): Implement new Content Launcher features\n\n- Add HandleContentReplicationRequest and HandlePlayPreset command handlers\n- Add HandleGetMovable (returns true) and HandleGetPresets (returns\n  example preset list) attribute handlers\n- Update kEndpointFeatureMap to 0x00FF (all features) and\n  kClusterRevision to 3\n- Add Movable and Presets attributes to dynamic endpoint declaration\n- Add ContentReplicationRequest, PlayPreset, and ContentReplicationResponse\n  to dynamic endpoint command lists\n\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\n\nfor more information, see https://pre-commit.ci\n\n* feat(tv-app): Add Content Launcher new features to Android implementation\n\n- Add contentReplicationRequest, playPreset, getMovable, getPresets\n  to Java ContentLaunchManager interface and stub implementation\n- Add ContentLaunchPreset Java class for preset data\n- Update ContentLauncherManager JNI bridge with new method IDs and\n  implementations that call through to Java\n- Update AppContentLauncherManager with HandleGetMovable and\n  HandleGetPresets implementations\n- Update kEndpointFeatureMap to 0x00FF and kClusterRevision to 3\n\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\n\nfor more information, see https://pre-commit.ci\n\n* Address review: use TEMPORARY_RETURN_IGNORED and Metadata.h kRevision\n\n- Replace (void) casts with TEMPORARY_RETURN_IGNORED for nodiscard\n- Use chip::app::Clusters::ContentLauncher::kRevision from Metadata.h\n  instead of hardcoded kClusterRevision constant\n- Remove stale TODO comment\n\n* fix: Add ContentLaunchPreset.java to Android BUILD.gn\n\n* fix: Remove unavailable Metadata.h include, use literal revision\n\n* Restyled by google-java-format\n\n* test: Add YAML test steps for new Content Launcher features\n\nAdd test steps for:\n- Read Movable attribute (expects true)\n- Read Presets attribute (validates readable)\n- ContentReplicationRequest command (validates invocable)\n- PlayPreset command with PresetID\u003d1 (validates invocable)\n\n* test: Add unit tests for Content Launcher server delegate\n\nTest the delegate interface methods including:\n- Default HandleGetMovable returns false\n- Override HandleGetMovable returns true\n- HandleGetPresets is callable (default returns empty list)\n- HandleGetSupportedStreamingProtocols returns configured value\n- GetFeatureMap returns configured value\n- GetClusterRevision returns expected value\n\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\n\nfor more information, see https://pre-commit.ci\n\n* fix: PlayPreset returns plain status response, not LauncherResponse\n\nPer the spec, PlayPreset has no cluster-specific response type —\nit returns a regular IM status. Change HandlePlayPreset delegate\nsignature to take CommandHandler + CommandPath and call AddStatus\ndirectly, matching the spec behavior.\n\n* Restore TODO comment for kEndpointFeatureMap\n\n* Use kRevision from Metadata.h for cluster revision fallback\n\n* Address review comments:\n\n- Use _span literal for string constants instead of CharSpan::fromCharString\n- Use explicit Feature enum constants instead of 0x00FF for feature maps\n- Use kRevision from Metadata.h for cluster revision in AppContentLauncherManager\n- Replace TEMPORARY_RETURN_IGNORED and (void) with LogErrorOnFailure\n- Extract JNI class/field IDs outside loop for efficiency\n\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\n\nfor more information, see https://pre-commit.ci\n\n* fix: Use kRevision from Metadata.h in Android ContentLauncherManager\n\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\n\nfor more information, see https://pre-commit.ci\n\n* Address review: use BitFlags for feature map readability\n\nReplace the to_underlying(...) | ... chain with BitFlags\u003cFeature\u003e(...).Raw()\nso enabled features are visually clear and named.\n\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\n\nfor more information, see https://pre-commit.ci\n\n---------\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nCo-authored-by: Restyled.io \u003ccommits@restyled.io\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "913cd10f6749f21d5ef270896a2b1a2be1f70a66",
      "old_mode": 33188,
      "old_path": "examples/tv-app/android/BUILD.gn",
      "new_id": "28d9dde1f1f37b1c9602ce0e7c0152f2f44d3d55",
      "new_mode": 33188,
      "new_path": "examples/tv-app/android/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "bebc71f676ea61687f0799076b93dc656666efd1",
      "old_mode": 33188,
      "old_path": "examples/tv-app/android/include/content-launcher/AppContentLauncherManager.cpp",
      "new_id": "73e4bc47a748f6ea621b9d252d7a6f882a925e9a",
      "new_mode": 33188,
      "new_path": "examples/tv-app/android/include/content-launcher/AppContentLauncherManager.cpp"
    },
    {
      "type": "modify",
      "old_id": "47e6c9f913d2dcd397b4425a52aa29d9a3a30bd8",
      "old_mode": 33188,
      "old_path": "examples/tv-app/android/include/content-launcher/AppContentLauncherManager.h",
      "new_id": "54872db98fd242c0f6cd861cbe51d838bdbf6847",
      "new_mode": 33188,
      "new_path": "examples/tv-app/android/include/content-launcher/AppContentLauncherManager.h"
    },
    {
      "type": "modify",
      "old_id": "b1c3a8cac64a4b7fdda27faa605bb7bc7598e0fe",
      "old_mode": 33188,
      "old_path": "examples/tv-app/android/java/ContentLauncherManager.cpp",
      "new_id": "26f1385562d7916ea9951cf781564bc221ee1c26",
      "new_mode": 33188,
      "new_path": "examples/tv-app/android/java/ContentLauncherManager.cpp"
    },
    {
      "type": "modify",
      "old_id": "c31a1d41b6bdaa8ec6b763b9eae9c8e3c9f979a3",
      "old_mode": 33188,
      "old_path": "examples/tv-app/android/java/ContentLauncherManager.h",
      "new_id": "14beecb7afcf03481e44adbc0df62a2b275c5267",
      "new_mode": 33188,
      "new_path": "examples/tv-app/android/java/ContentLauncherManager.h"
    },
    {
      "type": "modify",
      "old_id": "d1628cc3d36a88bf33ec5820d5e260881f67d76e",
      "old_mode": 33261,
      "old_path": "examples/tv-app/android/java/src/com/matter/tv/server/tvapp/ContentLaunchManager.java",
      "new_id": "de698966d932f055ec7318615e5957b0bfa491ad",
      "new_mode": 33261,
      "new_path": "examples/tv-app/android/java/src/com/matter/tv/server/tvapp/ContentLaunchManager.java"
    },
    {
      "type": "modify",
      "old_id": "e8179b4a63e3de867159a290e31cfb02ee07fc6c",
      "old_mode": 33188,
      "old_path": "examples/tv-app/android/java/src/com/matter/tv/server/tvapp/ContentLaunchManagerStub.java",
      "new_id": "3760a46d9d455990058f661303853ac32ebff15a",
      "new_mode": 33188,
      "new_path": "examples/tv-app/android/java/src/com/matter/tv/server/tvapp/ContentLaunchManagerStub.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "49812bcd9f1221be2d855c0286b542bc4a4291cd",
      "new_mode": 33188,
      "new_path": "examples/tv-app/android/java/src/com/matter/tv/server/tvapp/ContentLaunchPreset.java"
    },
    {
      "type": "modify",
      "old_id": "d6746539fefde4c659f2f869e31aff78fa4859a2",
      "old_mode": 33188,
      "old_path": "examples/tv-app/tv-common/clusters/content-launcher/ContentLauncherManager.cpp",
      "new_id": "516f6ca0b1579c311b591fb6807e81900c80a735",
      "new_mode": 33188,
      "new_path": "examples/tv-app/tv-common/clusters/content-launcher/ContentLauncherManager.cpp"
    },
    {
      "type": "modify",
      "old_id": "bd186accd2f185f42b7e26264f2ac2987af20639",
      "old_mode": 33188,
      "old_path": "examples/tv-app/tv-common/clusters/content-launcher/ContentLauncherManager.h",
      "new_id": "83db02a932945e460a1044990b233d8f591b2eda",
      "new_mode": 33188,
      "new_path": "examples/tv-app/tv-common/clusters/content-launcher/ContentLauncherManager.h"
    },
    {
      "type": "modify",
      "old_id": "1bf9d11a336525976471da04cce4f77e11d42bca",
      "old_mode": 33188,
      "old_path": "examples/tv-app/tv-common/src/AppTv.cpp",
      "new_id": "c00f965aaf56135d73aeeb851f70e05964efe143",
      "new_mode": 33188,
      "new_path": "examples/tv-app/tv-common/src/AppTv.cpp"
    },
    {
      "type": "modify",
      "old_id": "f4a35e1ebf046db8009ecf926415edc03198d9c9",
      "old_mode": 33188,
      "old_path": "src/BUILD.gn",
      "new_id": "d8a988937458b9c0656e15e167ba09d56782cef0",
      "new_mode": 33188,
      "new_path": "src/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "43fcad8b80ddddcc45e736bc52fb7e765da9dd22",
      "old_mode": 33188,
      "old_path": "src/app/clusters/content-launch-server/content-launch-delegate.h",
      "new_id": "5b0b18b991a1c4d32b6fafccacbccc1ef0856bde",
      "new_mode": 33188,
      "new_path": "src/app/clusters/content-launch-server/content-launch-delegate.h"
    },
    {
      "type": "modify",
      "old_id": "7109400da540d72e11bf79319b7e6d64d9528dfb",
      "old_mode": 33188,
      "old_path": "src/app/clusters/content-launch-server/content-launch-server.cpp",
      "new_id": "20560540744a8d2feb26a4a05613a5a81d097fa9",
      "new_mode": 33188,
      "new_path": "src/app/clusters/content-launch-server/content-launch-server.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c976d17e774fe73ec301dd0b3f7151530495fa12",
      "new_mode": 33188,
      "new_path": "src/app/clusters/content-launch-server/tests/BUILD.gn"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "10f95996225a1c9e0f60b8418a29f07fb4e10e73",
      "new_mode": 33188,
      "new_path": "src/app/clusters/content-launch-server/tests/TestContentLaunchServer.cpp"
    },
    {
      "type": "modify",
      "old_id": "05e28d7f2a0f867d9e180ee51b84e295ae3a4f5c",
      "old_mode": 33188,
      "old_path": "src/app/tests/suites/TV_ContentLauncherCluster.yaml",
      "new_id": "7cda9ff119d78a69d6edd11ac31c0303af82ff98",
      "new_mode": 33188,
      "new_path": "src/app/tests/suites/TV_ContentLauncherCluster.yaml"
    }
  ]
}
