androidtvremote2 0.1.2__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {androidtvremote2-0.1.2/src/androidtvremote2.egg-info → androidtvremote2-0.2.1}/PKG-INFO +5 -3
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/README.md +2 -1
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/pyproject.toml +5 -4
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2/androidtv_remote.py +12 -0
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2/polo_pb2.py +0 -1
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2/polo_pb2.pyi +37 -30
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2/remote.py +39 -2
- androidtvremote2-0.2.1/src/androidtvremote2/remotemessage_pb2.py +75 -0
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2/remotemessage_pb2.pyi +76 -48
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1/src/androidtvremote2.egg-info}/PKG-INFO +5 -3
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/demo.py +5 -2
- androidtvremote2-0.1.2/src/androidtvremote2/remotemessage_pb2.py +0 -74
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/LICENSE +0 -0
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/setup.cfg +0 -0
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2/__init__.py +0 -0
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2/base.py +0 -0
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2/certificate_generator.py +0 -0
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2/const.py +0 -0
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2/exceptions.py +0 -0
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2/pairing.py +0 -0
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2.egg-info/SOURCES.txt +0 -0
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2.egg-info/dependency_links.txt +0 -0
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2.egg-info/requires.txt +0 -0
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2.egg-info/top_level.txt +0 -0
- {androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/tests/test_androidtv_remote.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: androidtvremote2
|
|
3
|
-
Version: 0.1
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: A Python library for interacting with Android TV using the Android TV Remote protocol v2
|
|
5
5
|
Author-email: tronikos <tronikos@gmail.com>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -12,6 +12,7 @@ License-File: LICENSE
|
|
|
12
12
|
Requires-Dist: aiofiles>=0.8
|
|
13
13
|
Requires-Dist: cryptography>=3
|
|
14
14
|
Requires-Dist: protobuf>=4.21
|
|
15
|
+
Dynamic: license-file
|
|
15
16
|
|
|
16
17
|
# androidtvremote2
|
|
17
18
|
|
|
@@ -52,12 +53,13 @@ python -m grpc_tools.protoc src/androidtvremote2/*.proto --python_out=src/androi
|
|
|
52
53
|
|
|
53
54
|
# Run pre-commit
|
|
54
55
|
python -m pip install pre-commit
|
|
56
|
+
pre-commit autoupdate
|
|
55
57
|
pre-commit install
|
|
56
58
|
pre-commit run --all-files
|
|
57
59
|
|
|
58
60
|
# Alternative: run formatter, lint, and type checking
|
|
59
61
|
python -m pip install isort black flake8 ruff mypy
|
|
60
|
-
isort . ; black . ; flake8 . ; ruff . --fix ; mypy --install-types .
|
|
62
|
+
isort . ; black . ; flake8 . ; ruff check . --fix ; mypy --install-types .
|
|
61
63
|
|
|
62
64
|
# Run tests
|
|
63
65
|
python -m pip install pytest
|
|
@@ -37,12 +37,13 @@ python -m grpc_tools.protoc src/androidtvremote2/*.proto --python_out=src/androi
|
|
|
37
37
|
|
|
38
38
|
# Run pre-commit
|
|
39
39
|
python -m pip install pre-commit
|
|
40
|
+
pre-commit autoupdate
|
|
40
41
|
pre-commit install
|
|
41
42
|
pre-commit run --all-files
|
|
42
43
|
|
|
43
44
|
# Alternative: run formatter, lint, and type checking
|
|
44
45
|
python -m pip install isort black flake8 ruff mypy
|
|
45
|
-
isort . ; black . ; flake8 . ; ruff . --fix ; mypy --install-types .
|
|
46
|
+
isort . ; black . ; flake8 . ; ruff check . --fix ; mypy --install-types .
|
|
46
47
|
|
|
47
48
|
# Run tests
|
|
48
49
|
python -m pip install pytest
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "androidtvremote2"
|
|
3
|
-
version = "0.1
|
|
3
|
+
version = "0.2.1"
|
|
4
4
|
license = {text = "Apache-2.0"}
|
|
5
5
|
authors = [
|
|
6
6
|
{ name="tronikos", email="tronikos@gmail.com" },
|
|
@@ -36,6 +36,7 @@ target-version = "py311"
|
|
|
36
36
|
exclude = ["*_pb2.py", "*_pb2_grpc.py", "*.pyi"]
|
|
37
37
|
line-length = 127
|
|
38
38
|
|
|
39
|
+
[tool.ruff.lint]
|
|
39
40
|
select = [
|
|
40
41
|
"B007", # Loop control variable {name} not used within loop body
|
|
41
42
|
"B014", # Exception handler with duplicate exception
|
|
@@ -68,12 +69,12 @@ ignore = [
|
|
|
68
69
|
'UP007', # Non PEP604 annotations
|
|
69
70
|
]
|
|
70
71
|
|
|
71
|
-
[tool.ruff.flake8-pytest-style]
|
|
72
|
+
[tool.ruff.lint.flake8-pytest-style]
|
|
72
73
|
fixture-parentheses = false
|
|
73
74
|
|
|
74
|
-
[tool.ruff.per-file-ignores]
|
|
75
|
+
[tool.ruff.lint.per-file-ignores]
|
|
75
76
|
# Allow for demo script to write to stdout
|
|
76
77
|
"demo.py" = ["T201"]
|
|
77
78
|
|
|
78
|
-
[tool.ruff.mccabe]
|
|
79
|
+
[tool.ruff.lint.mccabe]
|
|
79
80
|
max-complexity = 25
|
|
@@ -394,6 +394,18 @@ class AndroidTVRemote:
|
|
|
394
394
|
raise ConnectionClosed("Called send_key_command after disconnect")
|
|
395
395
|
self._remote_message_protocol.send_key_command(key_code, direction)
|
|
396
396
|
|
|
397
|
+
def send_text(self, text: str) -> None:
|
|
398
|
+
"""Send text to Android TV.
|
|
399
|
+
|
|
400
|
+
:param text: text to be sent.
|
|
401
|
+
:raises ConnectionClosed: if client is disconnected.
|
|
402
|
+
:may not work as expected if virtual keyboard is present on the Android TV screen
|
|
403
|
+
"""
|
|
404
|
+
if not self._remote_message_protocol:
|
|
405
|
+
LOGGER.debug("Called send_text after disconnect")
|
|
406
|
+
raise ConnectionClosed("Called send_text after disconnect")
|
|
407
|
+
self._remote_message_protocol.send_text(text)
|
|
408
|
+
|
|
397
409
|
def send_launch_app_command(self, app_link_or_app_id: str) -> None:
|
|
398
410
|
"""Launch an app on Android TV.
|
|
399
411
|
|
|
@@ -19,7 +19,6 @@ _globals = globals()
|
|
|
19
19
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
20
20
|
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'polo_pb2', _globals)
|
|
21
21
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
22
|
-
|
|
23
22
|
DESCRIPTOR._options = None
|
|
24
23
|
DESCRIPTOR._serialized_options = b'\n\035com.google.polo.wire.protobufB\tPoloProtoH\003'
|
|
25
24
|
_globals['_OUTERMESSAGE']._serialized_start=35
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
@generated by mypy-protobuf. Do not edit manually!
|
|
3
3
|
isort:skip_file
|
|
4
4
|
Copyright 2009 Google Inc. All Rights Reserved."""
|
|
5
|
+
|
|
5
6
|
import builtins
|
|
6
7
|
import collections.abc
|
|
7
8
|
import google.protobuf.descriptor
|
|
@@ -18,7 +19,7 @@ else:
|
|
|
18
19
|
|
|
19
20
|
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
|
20
21
|
|
|
21
|
-
@
|
|
22
|
+
@typing.final
|
|
22
23
|
class OuterMessage(google.protobuf.message.Message):
|
|
23
24
|
"""OuterMessage - base outer message type used in the protocol."""
|
|
24
25
|
|
|
@@ -58,11 +59,13 @@ class OuterMessage(google.protobuf.message.Message):
|
|
|
58
59
|
@property
|
|
59
60
|
def pairing_request(self) -> global___PairingRequest:
|
|
60
61
|
"""Initialization phase"""
|
|
62
|
+
|
|
61
63
|
@property
|
|
62
64
|
def pairing_request_ack(self) -> global___PairingRequestAck: ...
|
|
63
65
|
@property
|
|
64
66
|
def options(self) -> global___Options:
|
|
65
67
|
"""Configuration phase"""
|
|
68
|
+
|
|
66
69
|
@property
|
|
67
70
|
def configuration(self) -> global___Configuration: ...
|
|
68
71
|
@property
|
|
@@ -70,6 +73,7 @@ class OuterMessage(google.protobuf.message.Message):
|
|
|
70
73
|
@property
|
|
71
74
|
def secret(self) -> global___Secret:
|
|
72
75
|
"""Pairing phase"""
|
|
76
|
+
|
|
73
77
|
@property
|
|
74
78
|
def secret_ack(self) -> global___SecretAck: ...
|
|
75
79
|
def __init__(
|
|
@@ -85,12 +89,12 @@ class OuterMessage(google.protobuf.message.Message):
|
|
|
85
89
|
secret: global___Secret | None = ...,
|
|
86
90
|
secret_ack: global___SecretAck | None = ...,
|
|
87
91
|
) -> None: ...
|
|
88
|
-
def HasField(self, field_name:
|
|
89
|
-
def ClearField(self, field_name:
|
|
92
|
+
def HasField(self, field_name: typing.Literal["configuration", b"configuration", "configuration_ack", b"configuration_ack", "options", b"options", "pairing_request", b"pairing_request", "pairing_request_ack", b"pairing_request_ack", "protocol_version", b"protocol_version", "secret", b"secret", "secret_ack", b"secret_ack", "status", b"status"]) -> builtins.bool: ...
|
|
93
|
+
def ClearField(self, field_name: typing.Literal["configuration", b"configuration", "configuration_ack", b"configuration_ack", "options", b"options", "pairing_request", b"pairing_request", "pairing_request_ack", b"pairing_request_ack", "protocol_version", b"protocol_version", "secret", b"secret", "secret_ack", b"secret_ack", "status", b"status"]) -> None: ...
|
|
90
94
|
|
|
91
95
|
global___OuterMessage = OuterMessage
|
|
92
96
|
|
|
93
|
-
@
|
|
97
|
+
@typing.final
|
|
94
98
|
class PairingRequest(google.protobuf.message.Message):
|
|
95
99
|
"""
|
|
96
100
|
Initialization messages
|
|
@@ -112,12 +116,12 @@ class PairingRequest(google.protobuf.message.Message):
|
|
|
112
116
|
service_name: builtins.str | None = ...,
|
|
113
117
|
client_name: builtins.str | None = ...,
|
|
114
118
|
) -> None: ...
|
|
115
|
-
def HasField(self, field_name:
|
|
116
|
-
def ClearField(self, field_name:
|
|
119
|
+
def HasField(self, field_name: typing.Literal["client_name", b"client_name", "service_name", b"service_name"]) -> builtins.bool: ...
|
|
120
|
+
def ClearField(self, field_name: typing.Literal["client_name", b"client_name", "service_name", b"service_name"]) -> None: ...
|
|
117
121
|
|
|
118
122
|
global___PairingRequest = PairingRequest
|
|
119
123
|
|
|
120
|
-
@
|
|
124
|
+
@typing.final
|
|
121
125
|
class PairingRequestAck(google.protobuf.message.Message):
|
|
122
126
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
123
127
|
|
|
@@ -129,12 +133,12 @@ class PairingRequestAck(google.protobuf.message.Message):
|
|
|
129
133
|
*,
|
|
130
134
|
server_name: builtins.str | None = ...,
|
|
131
135
|
) -> None: ...
|
|
132
|
-
def HasField(self, field_name:
|
|
133
|
-
def ClearField(self, field_name:
|
|
136
|
+
def HasField(self, field_name: typing.Literal["server_name", b"server_name"]) -> builtins.bool: ...
|
|
137
|
+
def ClearField(self, field_name: typing.Literal["server_name", b"server_name"]) -> None: ...
|
|
134
138
|
|
|
135
139
|
global___PairingRequestAck = PairingRequestAck
|
|
136
140
|
|
|
137
|
-
@
|
|
141
|
+
@typing.final
|
|
138
142
|
class Options(google.protobuf.message.Message):
|
|
139
143
|
"""
|
|
140
144
|
Configuration messages
|
|
@@ -157,7 +161,7 @@ class Options(google.protobuf.message.Message):
|
|
|
157
161
|
ROLE_TYPE_INPUT: Options.RoleType.ValueType # 1
|
|
158
162
|
ROLE_TYPE_OUTPUT: Options.RoleType.ValueType # 2
|
|
159
163
|
|
|
160
|
-
@
|
|
164
|
+
@typing.final
|
|
161
165
|
class Encoding(google.protobuf.message.Message):
|
|
162
166
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
163
167
|
|
|
@@ -190,20 +194,22 @@ class Options(google.protobuf.message.Message):
|
|
|
190
194
|
type: global___Options.Encoding.EncodingType.ValueType | None = ...,
|
|
191
195
|
symbol_length: builtins.int | None = ...,
|
|
192
196
|
) -> None: ...
|
|
193
|
-
def HasField(self, field_name:
|
|
194
|
-
def ClearField(self, field_name:
|
|
197
|
+
def HasField(self, field_name: typing.Literal["symbol_length", b"symbol_length", "type", b"type"]) -> builtins.bool: ...
|
|
198
|
+
def ClearField(self, field_name: typing.Literal["symbol_length", b"symbol_length", "type", b"type"]) -> None: ...
|
|
195
199
|
|
|
196
200
|
INPUT_ENCODINGS_FIELD_NUMBER: builtins.int
|
|
197
201
|
OUTPUT_ENCODINGS_FIELD_NUMBER: builtins.int
|
|
198
202
|
PREFERRED_ROLE_FIELD_NUMBER: builtins.int
|
|
203
|
+
preferred_role: global___Options.RoleType.ValueType
|
|
204
|
+
"""Preferred role, if any."""
|
|
199
205
|
@property
|
|
200
206
|
def input_encodings(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Options.Encoding]:
|
|
201
207
|
"""List of encodings this endpoint accepts when serving as an input device."""
|
|
208
|
+
|
|
202
209
|
@property
|
|
203
210
|
def output_encodings(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Options.Encoding]:
|
|
204
211
|
"""List of encodings this endpoint can generate as an output device."""
|
|
205
|
-
|
|
206
|
-
"""Preferred role, if any."""
|
|
212
|
+
|
|
207
213
|
def __init__(
|
|
208
214
|
self,
|
|
209
215
|
*,
|
|
@@ -211,36 +217,37 @@ class Options(google.protobuf.message.Message):
|
|
|
211
217
|
output_encodings: collections.abc.Iterable[global___Options.Encoding] | None = ...,
|
|
212
218
|
preferred_role: global___Options.RoleType.ValueType | None = ...,
|
|
213
219
|
) -> None: ...
|
|
214
|
-
def HasField(self, field_name:
|
|
215
|
-
def ClearField(self, field_name:
|
|
220
|
+
def HasField(self, field_name: typing.Literal["preferred_role", b"preferred_role"]) -> builtins.bool: ...
|
|
221
|
+
def ClearField(self, field_name: typing.Literal["input_encodings", b"input_encodings", "output_encodings", b"output_encodings", "preferred_role", b"preferred_role"]) -> None: ...
|
|
216
222
|
|
|
217
223
|
global___Options = Options
|
|
218
224
|
|
|
219
|
-
@
|
|
225
|
+
@typing.final
|
|
220
226
|
class Configuration(google.protobuf.message.Message):
|
|
221
227
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
222
228
|
|
|
223
229
|
ENCODING_FIELD_NUMBER: builtins.int
|
|
224
230
|
CLIENT_ROLE_FIELD_NUMBER: builtins.int
|
|
225
|
-
@property
|
|
226
|
-
def encoding(self) -> global___Options.Encoding:
|
|
227
|
-
"""The encoding to be used in this session."""
|
|
228
231
|
client_role: global___Options.RoleType.ValueType
|
|
229
232
|
"""The role of the client (ie, the one initiating pairing). This implies the
|
|
230
233
|
peer (server) acts as the complementary role.
|
|
231
234
|
"""
|
|
235
|
+
@property
|
|
236
|
+
def encoding(self) -> global___Options.Encoding:
|
|
237
|
+
"""The encoding to be used in this session."""
|
|
238
|
+
|
|
232
239
|
def __init__(
|
|
233
240
|
self,
|
|
234
241
|
*,
|
|
235
242
|
encoding: global___Options.Encoding | None = ...,
|
|
236
243
|
client_role: global___Options.RoleType.ValueType | None = ...,
|
|
237
244
|
) -> None: ...
|
|
238
|
-
def HasField(self, field_name:
|
|
239
|
-
def ClearField(self, field_name:
|
|
245
|
+
def HasField(self, field_name: typing.Literal["client_role", b"client_role", "encoding", b"encoding"]) -> builtins.bool: ...
|
|
246
|
+
def ClearField(self, field_name: typing.Literal["client_role", b"client_role", "encoding", b"encoding"]) -> None: ...
|
|
240
247
|
|
|
241
248
|
global___Configuration = Configuration
|
|
242
249
|
|
|
243
|
-
@
|
|
250
|
+
@typing.final
|
|
244
251
|
class ConfigurationAck(google.protobuf.message.Message):
|
|
245
252
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
246
253
|
|
|
@@ -250,7 +257,7 @@ class ConfigurationAck(google.protobuf.message.Message):
|
|
|
250
257
|
|
|
251
258
|
global___ConfigurationAck = ConfigurationAck
|
|
252
259
|
|
|
253
|
-
@
|
|
260
|
+
@typing.final
|
|
254
261
|
class Secret(google.protobuf.message.Message):
|
|
255
262
|
"""
|
|
256
263
|
Pairing messages
|
|
@@ -265,12 +272,12 @@ class Secret(google.protobuf.message.Message):
|
|
|
265
272
|
*,
|
|
266
273
|
secret: builtins.bytes | None = ...,
|
|
267
274
|
) -> None: ...
|
|
268
|
-
def HasField(self, field_name:
|
|
269
|
-
def ClearField(self, field_name:
|
|
275
|
+
def HasField(self, field_name: typing.Literal["secret", b"secret"]) -> builtins.bool: ...
|
|
276
|
+
def ClearField(self, field_name: typing.Literal["secret", b"secret"]) -> None: ...
|
|
270
277
|
|
|
271
278
|
global___Secret = Secret
|
|
272
279
|
|
|
273
|
-
@
|
|
280
|
+
@typing.final
|
|
274
281
|
class SecretAck(google.protobuf.message.Message):
|
|
275
282
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
276
283
|
|
|
@@ -281,7 +288,7 @@ class SecretAck(google.protobuf.message.Message):
|
|
|
281
288
|
*,
|
|
282
289
|
secret: builtins.bytes | None = ...,
|
|
283
290
|
) -> None: ...
|
|
284
|
-
def HasField(self, field_name:
|
|
285
|
-
def ClearField(self, field_name:
|
|
291
|
+
def HasField(self, field_name: typing.Literal["secret", b"secret"]) -> builtins.bool: ...
|
|
292
|
+
def ClearField(self, field_name: typing.Literal["secret", b"secret"]) -> None: ...
|
|
286
293
|
|
|
287
294
|
global___SecretAck = SecretAck
|
|
@@ -15,11 +15,18 @@ from google.protobuf.message import DecodeError
|
|
|
15
15
|
|
|
16
16
|
from .base import ProtobufProtocol
|
|
17
17
|
from .const import LOGGER
|
|
18
|
-
from .remotemessage_pb2 import
|
|
18
|
+
from .remotemessage_pb2 import (
|
|
19
|
+
RemoteDirection,
|
|
20
|
+
RemoteEditInfo,
|
|
21
|
+
RemoteImeBatchEdit,
|
|
22
|
+
RemoteImeObject,
|
|
23
|
+
RemoteKeyCode,
|
|
24
|
+
RemoteMessage,
|
|
25
|
+
)
|
|
19
26
|
|
|
20
27
|
LOG_PING_REQUESTS = False
|
|
21
28
|
ERROR_SUGGESTION_MSG = (
|
|
22
|
-
"Try clearing the storage of the Android TV
|
|
29
|
+
"Try clearing the storage of the Android TV Remote Service system app. "
|
|
23
30
|
"On the Android TV device, go to Settings > Apps > See all apps > Show system apps. "
|
|
24
31
|
"Then, select Android TV Remote Service > Storage > Clear data/storage."
|
|
25
32
|
)
|
|
@@ -82,6 +89,8 @@ class RemoteProtocol(ProtobufProtocol):
|
|
|
82
89
|
self.current_app = ""
|
|
83
90
|
self.device_info: dict[str, str] = {}
|
|
84
91
|
self.volume_info: dict[str, str | bool | int] = {}
|
|
92
|
+
self.ime_counter: int = 0
|
|
93
|
+
self.ime_field_counter: int = 0
|
|
85
94
|
self._loop = loop
|
|
86
95
|
self._idle_disconnect_task: asyncio.Task | None = None
|
|
87
96
|
self._reset_idle_disconnect_task()
|
|
@@ -110,6 +119,31 @@ class RemoteProtocol(ProtobufProtocol):
|
|
|
110
119
|
msg.remote_key_inject.direction = direction # type: ignore[assignment]
|
|
111
120
|
self._send_message(msg)
|
|
112
121
|
|
|
122
|
+
def send_text(self, text: str) -> None:
|
|
123
|
+
"""Send a text string to Android TV via the input method.
|
|
124
|
+
|
|
125
|
+
The text length is used for both `start` and `end` in the RemoteImeObject.
|
|
126
|
+
The `ime_counter` and `ime_field_counter` values are taken from self (batch_edit_info response),
|
|
127
|
+
which is populated when a message with a remote_ime_batch_edit field is received.
|
|
128
|
+
|
|
129
|
+
:param text: The text string to be sent.
|
|
130
|
+
"""
|
|
131
|
+
if not text:
|
|
132
|
+
raise ValueError("Text cannot be empty")
|
|
133
|
+
|
|
134
|
+
self._reset_idle_disconnect_task()
|
|
135
|
+
msg = RemoteMessage()
|
|
136
|
+
param_value = len(text) - 1
|
|
137
|
+
ime_object = RemoteImeObject(start=param_value, end=param_value, value=text)
|
|
138
|
+
edit_info = RemoteEditInfo(insert=1, text_field_status=ime_object)
|
|
139
|
+
batch_edit = RemoteImeBatchEdit(
|
|
140
|
+
ime_counter=self.ime_counter,
|
|
141
|
+
field_counter=self.ime_field_counter,
|
|
142
|
+
edit_info=[edit_info],
|
|
143
|
+
)
|
|
144
|
+
msg.remote_ime_batch_edit.CopyFrom(batch_edit)
|
|
145
|
+
self._send_message(msg)
|
|
146
|
+
|
|
113
147
|
def send_launch_app_command(self, app_link: str) -> None:
|
|
114
148
|
"""Launch an app on Android TV.
|
|
115
149
|
|
|
@@ -165,6 +199,9 @@ class RemoteProtocol(ProtobufProtocol):
|
|
|
165
199
|
elif msg.HasField("remote_ime_key_inject"):
|
|
166
200
|
self.current_app = msg.remote_ime_key_inject.app_info.app_package
|
|
167
201
|
self._on_current_app_updated(self.current_app)
|
|
202
|
+
elif msg.HasField("remote_ime_batch_edit"):
|
|
203
|
+
self.ime_counter = msg.remote_ime_batch_edit.ime_counter
|
|
204
|
+
self.ime_field_counter = msg.remote_ime_batch_edit.field_counter
|
|
168
205
|
elif msg.HasField("remote_set_volume_level"):
|
|
169
206
|
self.volume_info = {
|
|
170
207
|
"level": msg.remote_set_volume_level.volume_level,
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: remotemessage.proto
|
|
4
|
+
"""Generated protocol buffer code."""
|
|
5
|
+
from google.protobuf import descriptor as _descriptor
|
|
6
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
7
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
8
|
+
from google.protobuf.internal import builder as _builder
|
|
9
|
+
# @@protoc_insertion_point(imports)
|
|
10
|
+
|
|
11
|
+
_sym_db = _symbol_database.Default()
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13remotemessage.proto\x12\x06remote\".\n\x1aRemoteAppLinkLaunchRequest\x12\x10\n\x08\x61pp_link\x18\x01 \x01(\t\"!\n\x1fRemoteResetPreferredAudioDevice\"\x1f\n\x1dRemoteSetPreferredAudioDevice\"\x19\n\x17RemoteAdjustVolumeLevel\"\xb4\x01\n\x14RemoteSetVolumeLevel\x12\x10\n\x08unknown1\x18\x01 \x01(\r\x12\x10\n\x08unknown2\x18\x02 \x01(\r\x12\x14\n\x0cplayer_model\x18\x03 \x01(\t\x12\x10\n\x08unknown4\x18\x04 \x01(\r\x12\x10\n\x08unknown5\x18\x05 \x01(\r\x12\x12\n\nvolume_max\x18\x06 \x01(\r\x12\x14\n\x0cvolume_level\x18\x07 \x01(\r\x12\x14\n\x0cvolume_muted\x18\x08 \x01(\x08\"\x1e\n\x0bRemoteStart\x12\x0f\n\x07started\x18\x01 \x01(\x08\"\x10\n\x0eRemoteVoiceEnd\"\x14\n\x12RemoteVoicePayload\"\x12\n\x10RemoteVoiceBegin\"v\n\x15RemoteTextFieldStatus\x12\x15\n\rcounter_field\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\t\x12\r\n\x05start\x18\x03 \x01(\x05\x12\x0b\n\x03\x65nd\x18\x04 \x01(\x05\x12\x0c\n\x04int5\x18\x05 \x01(\x05\x12\r\n\x05label\x18\x06 \x01(\t\"W\n\x14RemoteImeShowRequest\x12?\n\x18remote_text_field_status\x18\x02 \x01(\x0b\x32\x1d.remote.RemoteTextFieldStatus\"T\n\x0eRemoteEditInfo\x12\x0e\n\x06insert\x18\x01 \x01(\x05\x12\x32\n\x11text_field_status\x18\x02 \x01(\x0b\x32\x17.remote.RemoteImeObject\"<\n\x0fRemoteImeObject\x12\r\n\x05start\x18\x01 \x01(\x05\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x05\x12\r\n\x05value\x18\x03 \x01(\t\"k\n\x12RemoteImeBatchEdit\x12\x13\n\x0bime_counter\x18\x01 \x01(\x05\x12\x15\n\rfield_counter\x18\x02 \x01(\x05\x12)\n\tedit_info\x18\x03 \x03(\x0b\x32\x16.remote.RemoteEditInfo\"\x99\x01\n\rRemoteAppInfo\x12\x0f\n\x07\x63ounter\x18\x01 \x01(\x05\x12\x0c\n\x04int2\x18\x02 \x01(\x05\x12\x0c\n\x04int3\x18\x03 \x01(\x05\x12\x0c\n\x04int4\x18\x04 \x01(\t\x12\x0c\n\x04int7\x18\x07 \x01(\x05\x12\x0c\n\x04int8\x18\x08 \x01(\x05\x12\r\n\x05label\x18\n \x01(\t\x12\x13\n\x0b\x61pp_package\x18\x0c \x01(\t\x12\r\n\x05int13\x18\r \x01(\x05\"w\n\x12RemoteImeKeyInject\x12\'\n\x08\x61pp_info\x18\x01 \x01(\x0b\x32\x15.remote.RemoteAppInfo\x12\x38\n\x11text_field_status\x18\x02 \x01(\x0b\x32\x1d.remote.RemoteTextFieldStatus\"f\n\x0fRemoteKeyInject\x12\'\n\x08key_code\x18\x01 \x01(\x0e\x32\x15.remote.RemoteKeyCode\x12*\n\tdirection\x18\x02 \x01(\x0e\x32\x17.remote.RemoteDirection\"\"\n\x12RemotePingResponse\x12\x0c\n\x04val1\x18\x01 \x01(\x05\"/\n\x11RemotePingRequest\x12\x0c\n\x04val1\x18\x01 \x01(\x05\x12\x0c\n\x04val2\x18\x02 \x01(\x05\"!\n\x0fRemoteSetActive\x12\x0e\n\x06\x61\x63tive\x18\x01 \x01(\x05\"\x80\x01\n\x10RemoteDeviceInfo\x12\r\n\x05model\x18\x01 \x01(\t\x12\x0e\n\x06vendor\x18\x02 \x01(\t\x12\x10\n\x08unknown1\x18\x03 \x01(\x05\x12\x10\n\x08unknown2\x18\x04 \x01(\t\x12\x14\n\x0cpackage_name\x18\x05 \x01(\t\x12\x13\n\x0b\x61pp_version\x18\x06 \x01(\t\"O\n\x0fRemoteConfigure\x12\r\n\x05\x63ode1\x18\x01 \x01(\x05\x12-\n\x0b\x64\x65vice_info\x18\x02 \x01(\x0b\x32\x18.remote.RemoteDeviceInfo\"D\n\x0bRemoteError\x12\r\n\x05value\x18\x01 \x01(\x08\x12&\n\x07message\x18\x02 \x01(\x0b\x32\x15.remote.RemoteMessage\"\xc1\x08\n\rRemoteMessage\x12\x31\n\x10remote_configure\x18\x01 \x01(\x0b\x32\x17.remote.RemoteConfigure\x12\x32\n\x11remote_set_active\x18\x02 \x01(\x0b\x32\x17.remote.RemoteSetActive\x12)\n\x0cremote_error\x18\x03 \x01(\x0b\x32\x13.remote.RemoteError\x12\x36\n\x13remote_ping_request\x18\x08 \x01(\x0b\x32\x19.remote.RemotePingRequest\x12\x38\n\x14remote_ping_response\x18\t \x01(\x0b\x32\x1a.remote.RemotePingResponse\x12\x32\n\x11remote_key_inject\x18\n \x01(\x0b\x32\x17.remote.RemoteKeyInject\x12\x39\n\x15remote_ime_key_inject\x18\x14 \x01(\x0b\x32\x1a.remote.RemoteImeKeyInject\x12\x39\n\x15remote_ime_batch_edit\x18\x15 \x01(\x0b\x32\x1a.remote.RemoteImeBatchEdit\x12=\n\x17remote_ime_show_request\x18\x16 \x01(\x0b\x32\x1c.remote.RemoteImeShowRequest\x12\x34\n\x12remote_voice_begin\x18\x1e \x01(\x0b\x32\x18.remote.RemoteVoiceBegin\x12\x38\n\x14remote_voice_payload\x18\x1f \x01(\x0b\x32\x1a.remote.RemoteVoicePayload\x12\x30\n\x10remote_voice_end\x18 \x01(\x0b\x32\x16.remote.RemoteVoiceEnd\x12)\n\x0cremote_start\x18( \x01(\x0b\x32\x13.remote.RemoteStart\x12=\n\x17remote_set_volume_level\x18\x32 \x01(\x0b\x32\x1c.remote.RemoteSetVolumeLevel\x12\x43\n\x1aremote_adjust_volume_level\x18\x33 \x01(\x0b\x32\x1f.remote.RemoteAdjustVolumeLevel\x12P\n!remote_set_preferred_audio_device\x18< \x01(\x0b\x32%.remote.RemoteSetPreferredAudioDevice\x12T\n#remote_reset_preferred_audio_device\x18= \x01(\x0b\x32\'.remote.RemoteResetPreferredAudioDevice\x12J\n\x1eremote_app_link_launch_request\x18Z \x01(\x0b\x32\".remote.RemoteAppLinkLaunchRequest*\xe7\x37\n\rRemoteKeyCode\x12\x13\n\x0fKEYCODE_UNKNOWN\x10\x00\x12\x15\n\x11KEYCODE_SOFT_LEFT\x10\x01\x12\x16\n\x12KEYCODE_SOFT_RIGHT\x10\x02\x12\x10\n\x0cKEYCODE_HOME\x10\x03\x12\x10\n\x0cKEYCODE_BACK\x10\x04\x12\x10\n\x0cKEYCODE_CALL\x10\x05\x12\x13\n\x0fKEYCODE_ENDCALL\x10\x06\x12\r\n\tKEYCODE_0\x10\x07\x12\r\n\tKEYCODE_1\x10\x08\x12\r\n\tKEYCODE_2\x10\t\x12\r\n\tKEYCODE_3\x10\n\x12\r\n\tKEYCODE_4\x10\x0b\x12\r\n\tKEYCODE_5\x10\x0c\x12\r\n\tKEYCODE_6\x10\r\x12\r\n\tKEYCODE_7\x10\x0e\x12\r\n\tKEYCODE_8\x10\x0f\x12\r\n\tKEYCODE_9\x10\x10\x12\x10\n\x0cKEYCODE_STAR\x10\x11\x12\x11\n\rKEYCODE_POUND\x10\x12\x12\x13\n\x0fKEYCODE_DPAD_UP\x10\x13\x12\x15\n\x11KEYCODE_DPAD_DOWN\x10\x14\x12\x15\n\x11KEYCODE_DPAD_LEFT\x10\x15\x12\x16\n\x12KEYCODE_DPAD_RIGHT\x10\x16\x12\x17\n\x13KEYCODE_DPAD_CENTER\x10\x17\x12\x15\n\x11KEYCODE_VOLUME_UP\x10\x18\x12\x17\n\x13KEYCODE_VOLUME_DOWN\x10\x19\x12\x11\n\rKEYCODE_POWER\x10\x1a\x12\x12\n\x0eKEYCODE_CAMERA\x10\x1b\x12\x11\n\rKEYCODE_CLEAR\x10\x1c\x12\r\n\tKEYCODE_A\x10\x1d\x12\r\n\tKEYCODE_B\x10\x1e\x12\r\n\tKEYCODE_C\x10\x1f\x12\r\n\tKEYCODE_D\x10 \x12\r\n\tKEYCODE_E\x10!\x12\r\n\tKEYCODE_F\x10\"\x12\r\n\tKEYCODE_G\x10#\x12\r\n\tKEYCODE_H\x10$\x12\r\n\tKEYCODE_I\x10%\x12\r\n\tKEYCODE_J\x10&\x12\r\n\tKEYCODE_K\x10\'\x12\r\n\tKEYCODE_L\x10(\x12\r\n\tKEYCODE_M\x10)\x12\r\n\tKEYCODE_N\x10*\x12\r\n\tKEYCODE_O\x10+\x12\r\n\tKEYCODE_P\x10,\x12\r\n\tKEYCODE_Q\x10-\x12\r\n\tKEYCODE_R\x10.\x12\r\n\tKEYCODE_S\x10/\x12\r\n\tKEYCODE_T\x10\x30\x12\r\n\tKEYCODE_U\x10\x31\x12\r\n\tKEYCODE_V\x10\x32\x12\r\n\tKEYCODE_W\x10\x33\x12\r\n\tKEYCODE_X\x10\x34\x12\r\n\tKEYCODE_Y\x10\x35\x12\r\n\tKEYCODE_Z\x10\x36\x12\x11\n\rKEYCODE_COMMA\x10\x37\x12\x12\n\x0eKEYCODE_PERIOD\x10\x38\x12\x14\n\x10KEYCODE_ALT_LEFT\x10\x39\x12\x15\n\x11KEYCODE_ALT_RIGHT\x10:\x12\x16\n\x12KEYCODE_SHIFT_LEFT\x10;\x12\x17\n\x13KEYCODE_SHIFT_RIGHT\x10<\x12\x0f\n\x0bKEYCODE_TAB\x10=\x12\x11\n\rKEYCODE_SPACE\x10>\x12\x0f\n\x0bKEYCODE_SYM\x10?\x12\x14\n\x10KEYCODE_EXPLORER\x10@\x12\x14\n\x10KEYCODE_ENVELOPE\x10\x41\x12\x11\n\rKEYCODE_ENTER\x10\x42\x12\x0f\n\x0bKEYCODE_DEL\x10\x43\x12\x11\n\rKEYCODE_GRAVE\x10\x44\x12\x11\n\rKEYCODE_MINUS\x10\x45\x12\x12\n\x0eKEYCODE_EQUALS\x10\x46\x12\x18\n\x14KEYCODE_LEFT_BRACKET\x10G\x12\x19\n\x15KEYCODE_RIGHT_BRACKET\x10H\x12\x15\n\x11KEYCODE_BACKSLASH\x10I\x12\x15\n\x11KEYCODE_SEMICOLON\x10J\x12\x16\n\x12KEYCODE_APOSTROPHE\x10K\x12\x11\n\rKEYCODE_SLASH\x10L\x12\x0e\n\nKEYCODE_AT\x10M\x12\x0f\n\x0bKEYCODE_NUM\x10N\x12\x17\n\x13KEYCODE_HEADSETHOOK\x10O\x12\x11\n\rKEYCODE_FOCUS\x10P\x12\x10\n\x0cKEYCODE_PLUS\x10Q\x12\x10\n\x0cKEYCODE_MENU\x10R\x12\x18\n\x14KEYCODE_NOTIFICATION\x10S\x12\x12\n\x0eKEYCODE_SEARCH\x10T\x12\x1c\n\x18KEYCODE_MEDIA_PLAY_PAUSE\x10U\x12\x16\n\x12KEYCODE_MEDIA_STOP\x10V\x12\x16\n\x12KEYCODE_MEDIA_NEXT\x10W\x12\x1a\n\x16KEYCODE_MEDIA_PREVIOUS\x10X\x12\x18\n\x14KEYCODE_MEDIA_REWIND\x10Y\x12\x1e\n\x1aKEYCODE_MEDIA_FAST_FORWARD\x10Z\x12\x10\n\x0cKEYCODE_MUTE\x10[\x12\x13\n\x0fKEYCODE_PAGE_UP\x10\\\x12\x15\n\x11KEYCODE_PAGE_DOWN\x10]\x12\x17\n\x13KEYCODE_PICTSYMBOLS\x10^\x12\x1a\n\x16KEYCODE_SWITCH_CHARSET\x10_\x12\x14\n\x10KEYCODE_BUTTON_A\x10`\x12\x14\n\x10KEYCODE_BUTTON_B\x10\x61\x12\x14\n\x10KEYCODE_BUTTON_C\x10\x62\x12\x14\n\x10KEYCODE_BUTTON_X\x10\x63\x12\x14\n\x10KEYCODE_BUTTON_Y\x10\x64\x12\x14\n\x10KEYCODE_BUTTON_Z\x10\x65\x12\x15\n\x11KEYCODE_BUTTON_L1\x10\x66\x12\x15\n\x11KEYCODE_BUTTON_R1\x10g\x12\x15\n\x11KEYCODE_BUTTON_L2\x10h\x12\x15\n\x11KEYCODE_BUTTON_R2\x10i\x12\x19\n\x15KEYCODE_BUTTON_THUMBL\x10j\x12\x19\n\x15KEYCODE_BUTTON_THUMBR\x10k\x12\x18\n\x14KEYCODE_BUTTON_START\x10l\x12\x19\n\x15KEYCODE_BUTTON_SELECT\x10m\x12\x17\n\x13KEYCODE_BUTTON_MODE\x10n\x12\x12\n\x0eKEYCODE_ESCAPE\x10o\x12\x17\n\x13KEYCODE_FORWARD_DEL\x10p\x12\x15\n\x11KEYCODE_CTRL_LEFT\x10q\x12\x16\n\x12KEYCODE_CTRL_RIGHT\x10r\x12\x15\n\x11KEYCODE_CAPS_LOCK\x10s\x12\x17\n\x13KEYCODE_SCROLL_LOCK\x10t\x12\x15\n\x11KEYCODE_META_LEFT\x10u\x12\x16\n\x12KEYCODE_META_RIGHT\x10v\x12\x14\n\x10KEYCODE_FUNCTION\x10w\x12\x11\n\rKEYCODE_SYSRQ\x10x\x12\x11\n\rKEYCODE_BREAK\x10y\x12\x15\n\x11KEYCODE_MOVE_HOME\x10z\x12\x14\n\x10KEYCODE_MOVE_END\x10{\x12\x12\n\x0eKEYCODE_INSERT\x10|\x12\x13\n\x0fKEYCODE_FORWARD\x10}\x12\x16\n\x12KEYCODE_MEDIA_PLAY\x10~\x12\x17\n\x13KEYCODE_MEDIA_PAUSE\x10\x7f\x12\x18\n\x13KEYCODE_MEDIA_CLOSE\x10\x80\x01\x12\x18\n\x13KEYCODE_MEDIA_EJECT\x10\x81\x01\x12\x19\n\x14KEYCODE_MEDIA_RECORD\x10\x82\x01\x12\x0f\n\nKEYCODE_F1\x10\x83\x01\x12\x0f\n\nKEYCODE_F2\x10\x84\x01\x12\x0f\n\nKEYCODE_F3\x10\x85\x01\x12\x0f\n\nKEYCODE_F4\x10\x86\x01\x12\x0f\n\nKEYCODE_F5\x10\x87\x01\x12\x0f\n\nKEYCODE_F6\x10\x88\x01\x12\x0f\n\nKEYCODE_F7\x10\x89\x01\x12\x0f\n\nKEYCODE_F8\x10\x8a\x01\x12\x0f\n\nKEYCODE_F9\x10\x8b\x01\x12\x10\n\x0bKEYCODE_F10\x10\x8c\x01\x12\x10\n\x0bKEYCODE_F11\x10\x8d\x01\x12\x10\n\x0bKEYCODE_F12\x10\x8e\x01\x12\x15\n\x10KEYCODE_NUM_LOCK\x10\x8f\x01\x12\x15\n\x10KEYCODE_NUMPAD_0\x10\x90\x01\x12\x15\n\x10KEYCODE_NUMPAD_1\x10\x91\x01\x12\x15\n\x10KEYCODE_NUMPAD_2\x10\x92\x01\x12\x15\n\x10KEYCODE_NUMPAD_3\x10\x93\x01\x12\x15\n\x10KEYCODE_NUMPAD_4\x10\x94\x01\x12\x15\n\x10KEYCODE_NUMPAD_5\x10\x95\x01\x12\x15\n\x10KEYCODE_NUMPAD_6\x10\x96\x01\x12\x15\n\x10KEYCODE_NUMPAD_7\x10\x97\x01\x12\x15\n\x10KEYCODE_NUMPAD_8\x10\x98\x01\x12\x15\n\x10KEYCODE_NUMPAD_9\x10\x99\x01\x12\x1a\n\x15KEYCODE_NUMPAD_DIVIDE\x10\x9a\x01\x12\x1c\n\x17KEYCODE_NUMPAD_MULTIPLY\x10\x9b\x01\x12\x1c\n\x17KEYCODE_NUMPAD_SUBTRACT\x10\x9c\x01\x12\x17\n\x12KEYCODE_NUMPAD_ADD\x10\x9d\x01\x12\x17\n\x12KEYCODE_NUMPAD_DOT\x10\x9e\x01\x12\x19\n\x14KEYCODE_NUMPAD_COMMA\x10\x9f\x01\x12\x19\n\x14KEYCODE_NUMPAD_ENTER\x10\xa0\x01\x12\x1a\n\x15KEYCODE_NUMPAD_EQUALS\x10\xa1\x01\x12\x1e\n\x19KEYCODE_NUMPAD_LEFT_PAREN\x10\xa2\x01\x12\x1f\n\x1aKEYCODE_NUMPAD_RIGHT_PAREN\x10\xa3\x01\x12\x18\n\x13KEYCODE_VOLUME_MUTE\x10\xa4\x01\x12\x11\n\x0cKEYCODE_INFO\x10\xa5\x01\x12\x17\n\x12KEYCODE_CHANNEL_UP\x10\xa6\x01\x12\x19\n\x14KEYCODE_CHANNEL_DOWN\x10\xa7\x01\x12\x14\n\x0fKEYCODE_ZOOM_IN\x10\xa8\x01\x12\x15\n\x10KEYCODE_ZOOM_OUT\x10\xa9\x01\x12\x0f\n\nKEYCODE_TV\x10\xaa\x01\x12\x13\n\x0eKEYCODE_WINDOW\x10\xab\x01\x12\x12\n\rKEYCODE_GUIDE\x10\xac\x01\x12\x10\n\x0bKEYCODE_DVR\x10\xad\x01\x12\x15\n\x10KEYCODE_BOOKMARK\x10\xae\x01\x12\x15\n\x10KEYCODE_CAPTIONS\x10\xaf\x01\x12\x15\n\x10KEYCODE_SETTINGS\x10\xb0\x01\x12\x15\n\x10KEYCODE_TV_POWER\x10\xb1\x01\x12\x15\n\x10KEYCODE_TV_INPUT\x10\xb2\x01\x12\x16\n\x11KEYCODE_STB_POWER\x10\xb3\x01\x12\x16\n\x11KEYCODE_STB_INPUT\x10\xb4\x01\x12\x16\n\x11KEYCODE_AVR_POWER\x10\xb5\x01\x12\x16\n\x11KEYCODE_AVR_INPUT\x10\xb6\x01\x12\x15\n\x10KEYCODE_PROG_RED\x10\xb7\x01\x12\x17\n\x12KEYCODE_PROG_GREEN\x10\xb8\x01\x12\x18\n\x13KEYCODE_PROG_YELLOW\x10\xb9\x01\x12\x16\n\x11KEYCODE_PROG_BLUE\x10\xba\x01\x12\x17\n\x12KEYCODE_APP_SWITCH\x10\xbb\x01\x12\x15\n\x10KEYCODE_BUTTON_1\x10\xbc\x01\x12\x15\n\x10KEYCODE_BUTTON_2\x10\xbd\x01\x12\x15\n\x10KEYCODE_BUTTON_3\x10\xbe\x01\x12\x15\n\x10KEYCODE_BUTTON_4\x10\xbf\x01\x12\x15\n\x10KEYCODE_BUTTON_5\x10\xc0\x01\x12\x15\n\x10KEYCODE_BUTTON_6\x10\xc1\x01\x12\x15\n\x10KEYCODE_BUTTON_7\x10\xc2\x01\x12\x15\n\x10KEYCODE_BUTTON_8\x10\xc3\x01\x12\x15\n\x10KEYCODE_BUTTON_9\x10\xc4\x01\x12\x16\n\x11KEYCODE_BUTTON_10\x10\xc5\x01\x12\x16\n\x11KEYCODE_BUTTON_11\x10\xc6\x01\x12\x16\n\x11KEYCODE_BUTTON_12\x10\xc7\x01\x12\x16\n\x11KEYCODE_BUTTON_13\x10\xc8\x01\x12\x16\n\x11KEYCODE_BUTTON_14\x10\xc9\x01\x12\x16\n\x11KEYCODE_BUTTON_15\x10\xca\x01\x12\x16\n\x11KEYCODE_BUTTON_16\x10\xcb\x01\x12\x1c\n\x17KEYCODE_LANGUAGE_SWITCH\x10\xcc\x01\x12\x18\n\x13KEYCODE_MANNER_MODE\x10\xcd\x01\x12\x14\n\x0fKEYCODE_3D_MODE\x10\xce\x01\x12\x15\n\x10KEYCODE_CONTACTS\x10\xcf\x01\x12\x15\n\x10KEYCODE_CALENDAR\x10\xd0\x01\x12\x12\n\rKEYCODE_MUSIC\x10\xd1\x01\x12\x17\n\x12KEYCODE_CALCULATOR\x10\xd2\x01\x12\x1c\n\x17KEYCODE_ZENKAKU_HANKAKU\x10\xd3\x01\x12\x11\n\x0cKEYCODE_EISU\x10\xd4\x01\x12\x15\n\x10KEYCODE_MUHENKAN\x10\xd5\x01\x12\x13\n\x0eKEYCODE_HENKAN\x10\xd6\x01\x12\x1e\n\x19KEYCODE_KATAKANA_HIRAGANA\x10\xd7\x01\x12\x10\n\x0bKEYCODE_YEN\x10\xd8\x01\x12\x0f\n\nKEYCODE_RO\x10\xd9\x01\x12\x11\n\x0cKEYCODE_KANA\x10\xda\x01\x12\x13\n\x0eKEYCODE_ASSIST\x10\xdb\x01\x12\x1c\n\x17KEYCODE_BRIGHTNESS_DOWN\x10\xdc\x01\x12\x1a\n\x15KEYCODE_BRIGHTNESS_UP\x10\xdd\x01\x12\x1e\n\x19KEYCODE_MEDIA_AUDIO_TRACK\x10\xde\x01\x12\x12\n\rKEYCODE_SLEEP\x10\xdf\x01\x12\x13\n\x0eKEYCODE_WAKEUP\x10\xe0\x01\x12\x14\n\x0fKEYCODE_PAIRING\x10\xe1\x01\x12\x1b\n\x16KEYCODE_MEDIA_TOP_MENU\x10\xe2\x01\x12\x0f\n\nKEYCODE_11\x10\xe3\x01\x12\x0f\n\nKEYCODE_12\x10\xe4\x01\x12\x19\n\x14KEYCODE_LAST_CHANNEL\x10\xe5\x01\x12\x1c\n\x17KEYCODE_TV_DATA_SERVICE\x10\xe6\x01\x12\x19\n\x14KEYCODE_VOICE_ASSIST\x10\xe7\x01\x12\x1d\n\x18KEYCODE_TV_RADIO_SERVICE\x10\xe8\x01\x12\x18\n\x13KEYCODE_TV_TELETEXT\x10\xe9\x01\x12\x1c\n\x17KEYCODE_TV_NUMBER_ENTRY\x10\xea\x01\x12\"\n\x1dKEYCODE_TV_TERRESTRIAL_ANALOG\x10\xeb\x01\x12#\n\x1eKEYCODE_TV_TERRESTRIAL_DIGITAL\x10\xec\x01\x12\x19\n\x14KEYCODE_TV_SATELLITE\x10\xed\x01\x12\x1c\n\x17KEYCODE_TV_SATELLITE_BS\x10\xee\x01\x12\x1c\n\x17KEYCODE_TV_SATELLITE_CS\x10\xef\x01\x12!\n\x1cKEYCODE_TV_SATELLITE_SERVICE\x10\xf0\x01\x12\x17\n\x12KEYCODE_TV_NETWORK\x10\xf1\x01\x12\x1d\n\x18KEYCODE_TV_ANTENNA_CABLE\x10\xf2\x01\x12\x1c\n\x17KEYCODE_TV_INPUT_HDMI_1\x10\xf3\x01\x12\x1c\n\x17KEYCODE_TV_INPUT_HDMI_2\x10\xf4\x01\x12\x1c\n\x17KEYCODE_TV_INPUT_HDMI_3\x10\xf5\x01\x12\x1c\n\x17KEYCODE_TV_INPUT_HDMI_4\x10\xf6\x01\x12!\n\x1cKEYCODE_TV_INPUT_COMPOSITE_1\x10\xf7\x01\x12!\n\x1cKEYCODE_TV_INPUT_COMPOSITE_2\x10\xf8\x01\x12!\n\x1cKEYCODE_TV_INPUT_COMPONENT_1\x10\xf9\x01\x12!\n\x1cKEYCODE_TV_INPUT_COMPONENT_2\x10\xfa\x01\x12\x1b\n\x16KEYCODE_TV_INPUT_VGA_1\x10\xfb\x01\x12!\n\x1cKEYCODE_TV_AUDIO_DESCRIPTION\x10\xfc\x01\x12(\n#KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP\x10\xfd\x01\x12*\n%KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN\x10\xfe\x01\x12\x19\n\x14KEYCODE_TV_ZOOM_MODE\x10\xff\x01\x12\x1d\n\x18KEYCODE_TV_CONTENTS_MENU\x10\x80\x02\x12\"\n\x1dKEYCODE_TV_MEDIA_CONTEXT_MENU\x10\x81\x02\x12!\n\x1cKEYCODE_TV_TIMER_PROGRAMMING\x10\x82\x02\x12\x11\n\x0cKEYCODE_HELP\x10\x83\x02\x12\x1e\n\x19KEYCODE_NAVIGATE_PREVIOUS\x10\x84\x02\x12\x1a\n\x15KEYCODE_NAVIGATE_NEXT\x10\x85\x02\x12\x18\n\x13KEYCODE_NAVIGATE_IN\x10\x86\x02\x12\x19\n\x14KEYCODE_NAVIGATE_OUT\x10\x87\x02\x12\x19\n\x14KEYCODE_STEM_PRIMARY\x10\x88\x02\x12\x13\n\x0eKEYCODE_STEM_1\x10\x89\x02\x12\x13\n\x0eKEYCODE_STEM_2\x10\x8a\x02\x12\x13\n\x0eKEYCODE_STEM_3\x10\x8b\x02\x12\x19\n\x14KEYCODE_DPAD_UP_LEFT\x10\x8c\x02\x12\x1b\n\x16KEYCODE_DPAD_DOWN_LEFT\x10\x8d\x02\x12\x1a\n\x15KEYCODE_DPAD_UP_RIGHT\x10\x8e\x02\x12\x1c\n\x17KEYCODE_DPAD_DOWN_RIGHT\x10\x8f\x02\x12\x1f\n\x1aKEYCODE_MEDIA_SKIP_FORWARD\x10\x90\x02\x12 \n\x1bKEYCODE_MEDIA_SKIP_BACKWARD\x10\x91\x02\x12\x1f\n\x1aKEYCODE_MEDIA_STEP_FORWARD\x10\x92\x02\x12 \n\x1bKEYCODE_MEDIA_STEP_BACKWARD\x10\x93\x02\x12\x17\n\x12KEYCODE_SOFT_SLEEP\x10\x94\x02\x12\x10\n\x0bKEYCODE_CUT\x10\x95\x02\x12\x11\n\x0cKEYCODE_COPY\x10\x96\x02\x12\x12\n\rKEYCODE_PASTE\x10\x97\x02\x12!\n\x1cKEYCODE_SYSTEM_NAVIGATION_UP\x10\x98\x02\x12#\n\x1eKEYCODE_SYSTEM_NAVIGATION_DOWN\x10\x99\x02\x12#\n\x1eKEYCODE_SYSTEM_NAVIGATION_LEFT\x10\x9a\x02\x12$\n\x1fKEYCODE_SYSTEM_NAVIGATION_RIGHT\x10\x9b\x02\x12\x15\n\x10KEYCODE_ALL_APPS\x10\x9c\x02\x12\x14\n\x0fKEYCODE_REFRESH\x10\x9d\x02\x12\x16\n\x11KEYCODE_THUMBS_UP\x10\x9e\x02\x12\x18\n\x13KEYCODE_THUMBS_DOWN\x10\x9f\x02\x12\x1b\n\x16KEYCODE_PROFILE_SWITCH\x10\xa0\x02\x12\x18\n\x13KEYCODE_VIDEO_APP_1\x10\xa1\x02\x12\x18\n\x13KEYCODE_VIDEO_APP_2\x10\xa2\x02\x12\x18\n\x13KEYCODE_VIDEO_APP_3\x10\xa3\x02\x12\x18\n\x13KEYCODE_VIDEO_APP_4\x10\xa4\x02\x12\x18\n\x13KEYCODE_VIDEO_APP_5\x10\xa5\x02\x12\x18\n\x13KEYCODE_VIDEO_APP_6\x10\xa6\x02\x12\x18\n\x13KEYCODE_VIDEO_APP_7\x10\xa7\x02\x12\x18\n\x13KEYCODE_VIDEO_APP_8\x10\xa8\x02\x12\x1b\n\x16KEYCODE_FEATURED_APP_1\x10\xa9\x02\x12\x1b\n\x16KEYCODE_FEATURED_APP_2\x10\xaa\x02\x12\x1b\n\x16KEYCODE_FEATURED_APP_3\x10\xab\x02\x12\x1b\n\x16KEYCODE_FEATURED_APP_4\x10\xac\x02\x12\x17\n\x12KEYCODE_DEMO_APP_1\x10\xad\x02\x12\x17\n\x12KEYCODE_DEMO_APP_2\x10\xae\x02\x12\x17\n\x12KEYCODE_DEMO_APP_3\x10\xaf\x02\x12\x17\n\x12KEYCODE_DEMO_APP_4\x10\xb0\x02*Q\n\x0fRemoteDirection\x12\x15\n\x11UNKNOWN_DIRECTION\x10\x00\x12\x0e\n\nSTART_LONG\x10\x01\x12\x0c\n\x08\x45ND_LONG\x10\x02\x12\t\n\x05SHORT\x10\x03\x62\x06proto3')
|
|
17
|
+
|
|
18
|
+
_globals = globals()
|
|
19
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
20
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'remotemessage_pb2', _globals)
|
|
21
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
22
|
+
DESCRIPTOR._options = None
|
|
23
|
+
_globals['_REMOTEKEYCODE']._serialized_start=2791
|
|
24
|
+
_globals['_REMOTEKEYCODE']._serialized_end=9934
|
|
25
|
+
_globals['_REMOTEDIRECTION']._serialized_start=9936
|
|
26
|
+
_globals['_REMOTEDIRECTION']._serialized_end=10017
|
|
27
|
+
_globals['_REMOTEAPPLINKLAUNCHREQUEST']._serialized_start=31
|
|
28
|
+
_globals['_REMOTEAPPLINKLAUNCHREQUEST']._serialized_end=77
|
|
29
|
+
_globals['_REMOTERESETPREFERREDAUDIODEVICE']._serialized_start=79
|
|
30
|
+
_globals['_REMOTERESETPREFERREDAUDIODEVICE']._serialized_end=112
|
|
31
|
+
_globals['_REMOTESETPREFERREDAUDIODEVICE']._serialized_start=114
|
|
32
|
+
_globals['_REMOTESETPREFERREDAUDIODEVICE']._serialized_end=145
|
|
33
|
+
_globals['_REMOTEADJUSTVOLUMELEVEL']._serialized_start=147
|
|
34
|
+
_globals['_REMOTEADJUSTVOLUMELEVEL']._serialized_end=172
|
|
35
|
+
_globals['_REMOTESETVOLUMELEVEL']._serialized_start=175
|
|
36
|
+
_globals['_REMOTESETVOLUMELEVEL']._serialized_end=355
|
|
37
|
+
_globals['_REMOTESTART']._serialized_start=357
|
|
38
|
+
_globals['_REMOTESTART']._serialized_end=387
|
|
39
|
+
_globals['_REMOTEVOICEEND']._serialized_start=389
|
|
40
|
+
_globals['_REMOTEVOICEEND']._serialized_end=405
|
|
41
|
+
_globals['_REMOTEVOICEPAYLOAD']._serialized_start=407
|
|
42
|
+
_globals['_REMOTEVOICEPAYLOAD']._serialized_end=427
|
|
43
|
+
_globals['_REMOTEVOICEBEGIN']._serialized_start=429
|
|
44
|
+
_globals['_REMOTEVOICEBEGIN']._serialized_end=447
|
|
45
|
+
_globals['_REMOTETEXTFIELDSTATUS']._serialized_start=449
|
|
46
|
+
_globals['_REMOTETEXTFIELDSTATUS']._serialized_end=567
|
|
47
|
+
_globals['_REMOTEIMESHOWREQUEST']._serialized_start=569
|
|
48
|
+
_globals['_REMOTEIMESHOWREQUEST']._serialized_end=656
|
|
49
|
+
_globals['_REMOTEEDITINFO']._serialized_start=658
|
|
50
|
+
_globals['_REMOTEEDITINFO']._serialized_end=742
|
|
51
|
+
_globals['_REMOTEIMEOBJECT']._serialized_start=744
|
|
52
|
+
_globals['_REMOTEIMEOBJECT']._serialized_end=804
|
|
53
|
+
_globals['_REMOTEIMEBATCHEDIT']._serialized_start=806
|
|
54
|
+
_globals['_REMOTEIMEBATCHEDIT']._serialized_end=913
|
|
55
|
+
_globals['_REMOTEAPPINFO']._serialized_start=916
|
|
56
|
+
_globals['_REMOTEAPPINFO']._serialized_end=1069
|
|
57
|
+
_globals['_REMOTEIMEKEYINJECT']._serialized_start=1071
|
|
58
|
+
_globals['_REMOTEIMEKEYINJECT']._serialized_end=1190
|
|
59
|
+
_globals['_REMOTEKEYINJECT']._serialized_start=1192
|
|
60
|
+
_globals['_REMOTEKEYINJECT']._serialized_end=1294
|
|
61
|
+
_globals['_REMOTEPINGRESPONSE']._serialized_start=1296
|
|
62
|
+
_globals['_REMOTEPINGRESPONSE']._serialized_end=1330
|
|
63
|
+
_globals['_REMOTEPINGREQUEST']._serialized_start=1332
|
|
64
|
+
_globals['_REMOTEPINGREQUEST']._serialized_end=1379
|
|
65
|
+
_globals['_REMOTESETACTIVE']._serialized_start=1381
|
|
66
|
+
_globals['_REMOTESETACTIVE']._serialized_end=1414
|
|
67
|
+
_globals['_REMOTEDEVICEINFO']._serialized_start=1417
|
|
68
|
+
_globals['_REMOTEDEVICEINFO']._serialized_end=1545
|
|
69
|
+
_globals['_REMOTECONFIGURE']._serialized_start=1547
|
|
70
|
+
_globals['_REMOTECONFIGURE']._serialized_end=1626
|
|
71
|
+
_globals['_REMOTEERROR']._serialized_start=1628
|
|
72
|
+
_globals['_REMOTEERROR']._serialized_end=1696
|
|
73
|
+
_globals['_REMOTEMESSAGE']._serialized_start=1699
|
|
74
|
+
_globals['_REMOTEMESSAGE']._serialized_end=2788
|
|
75
|
+
# @@protoc_insertion_point(module_scope)
|
{androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2/remotemessage_pb2.pyi
RENAMED
|
@@ -4,8 +4,11 @@ isort:skip_file
|
|
|
4
4
|
Copied from https://github.com/louis49/androidtv-remote/blob/main/src/remote/remotemessage.proto
|
|
5
5
|
Comments on RemoteKeyCode enum added from https://android.googlesource.com/platform/frameworks/native/+/master/include/android/keycodes.h
|
|
6
6
|
"""
|
|
7
|
+
|
|
7
8
|
import builtins
|
|
9
|
+
import collections.abc
|
|
8
10
|
import google.protobuf.descriptor
|
|
11
|
+
import google.protobuf.internal.containers
|
|
9
12
|
import google.protobuf.internal.enum_type_wrapper
|
|
10
13
|
import google.protobuf.message
|
|
11
14
|
import sys
|
|
@@ -1760,7 +1763,7 @@ END_LONG: RemoteDirection.ValueType # 2
|
|
|
1760
1763
|
SHORT: RemoteDirection.ValueType # 3
|
|
1761
1764
|
global___RemoteDirection = RemoteDirection
|
|
1762
1765
|
|
|
1763
|
-
@
|
|
1766
|
+
@typing.final
|
|
1764
1767
|
class RemoteAppLinkLaunchRequest(google.protobuf.message.Message):
|
|
1765
1768
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1766
1769
|
|
|
@@ -1771,11 +1774,11 @@ class RemoteAppLinkLaunchRequest(google.protobuf.message.Message):
|
|
|
1771
1774
|
*,
|
|
1772
1775
|
app_link: builtins.str = ...,
|
|
1773
1776
|
) -> None: ...
|
|
1774
|
-
def ClearField(self, field_name:
|
|
1777
|
+
def ClearField(self, field_name: typing.Literal["app_link", b"app_link"]) -> None: ...
|
|
1775
1778
|
|
|
1776
1779
|
global___RemoteAppLinkLaunchRequest = RemoteAppLinkLaunchRequest
|
|
1777
1780
|
|
|
1778
|
-
@
|
|
1781
|
+
@typing.final
|
|
1779
1782
|
class RemoteResetPreferredAudioDevice(google.protobuf.message.Message):
|
|
1780
1783
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1781
1784
|
|
|
@@ -1785,7 +1788,7 @@ class RemoteResetPreferredAudioDevice(google.protobuf.message.Message):
|
|
|
1785
1788
|
|
|
1786
1789
|
global___RemoteResetPreferredAudioDevice = RemoteResetPreferredAudioDevice
|
|
1787
1790
|
|
|
1788
|
-
@
|
|
1791
|
+
@typing.final
|
|
1789
1792
|
class RemoteSetPreferredAudioDevice(google.protobuf.message.Message):
|
|
1790
1793
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1791
1794
|
|
|
@@ -1795,7 +1798,7 @@ class RemoteSetPreferredAudioDevice(google.protobuf.message.Message):
|
|
|
1795
1798
|
|
|
1796
1799
|
global___RemoteSetPreferredAudioDevice = RemoteSetPreferredAudioDevice
|
|
1797
1800
|
|
|
1798
|
-
@
|
|
1801
|
+
@typing.final
|
|
1799
1802
|
class RemoteAdjustVolumeLevel(google.protobuf.message.Message):
|
|
1800
1803
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1801
1804
|
|
|
@@ -1805,7 +1808,7 @@ class RemoteAdjustVolumeLevel(google.protobuf.message.Message):
|
|
|
1805
1808
|
|
|
1806
1809
|
global___RemoteAdjustVolumeLevel = RemoteAdjustVolumeLevel
|
|
1807
1810
|
|
|
1808
|
-
@
|
|
1811
|
+
@typing.final
|
|
1809
1812
|
class RemoteSetVolumeLevel(google.protobuf.message.Message):
|
|
1810
1813
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1811
1814
|
|
|
@@ -1837,11 +1840,11 @@ class RemoteSetVolumeLevel(google.protobuf.message.Message):
|
|
|
1837
1840
|
volume_level: builtins.int = ...,
|
|
1838
1841
|
volume_muted: builtins.bool = ...,
|
|
1839
1842
|
) -> None: ...
|
|
1840
|
-
def ClearField(self, field_name:
|
|
1843
|
+
def ClearField(self, field_name: typing.Literal["player_model", b"player_model", "unknown1", b"unknown1", "unknown2", b"unknown2", "unknown4", b"unknown4", "unknown5", b"unknown5", "volume_level", b"volume_level", "volume_max", b"volume_max", "volume_muted", b"volume_muted"]) -> None: ...
|
|
1841
1844
|
|
|
1842
1845
|
global___RemoteSetVolumeLevel = RemoteSetVolumeLevel
|
|
1843
1846
|
|
|
1844
|
-
@
|
|
1847
|
+
@typing.final
|
|
1845
1848
|
class RemoteStart(google.protobuf.message.Message):
|
|
1846
1849
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1847
1850
|
|
|
@@ -1852,11 +1855,11 @@ class RemoteStart(google.protobuf.message.Message):
|
|
|
1852
1855
|
*,
|
|
1853
1856
|
started: builtins.bool = ...,
|
|
1854
1857
|
) -> None: ...
|
|
1855
|
-
def ClearField(self, field_name:
|
|
1858
|
+
def ClearField(self, field_name: typing.Literal["started", b"started"]) -> None: ...
|
|
1856
1859
|
|
|
1857
1860
|
global___RemoteStart = RemoteStart
|
|
1858
1861
|
|
|
1859
|
-
@
|
|
1862
|
+
@typing.final
|
|
1860
1863
|
class RemoteVoiceEnd(google.protobuf.message.Message):
|
|
1861
1864
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1862
1865
|
|
|
@@ -1866,7 +1869,7 @@ class RemoteVoiceEnd(google.protobuf.message.Message):
|
|
|
1866
1869
|
|
|
1867
1870
|
global___RemoteVoiceEnd = RemoteVoiceEnd
|
|
1868
1871
|
|
|
1869
|
-
@
|
|
1872
|
+
@typing.final
|
|
1870
1873
|
class RemoteVoicePayload(google.protobuf.message.Message):
|
|
1871
1874
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1872
1875
|
|
|
@@ -1876,7 +1879,7 @@ class RemoteVoicePayload(google.protobuf.message.Message):
|
|
|
1876
1879
|
|
|
1877
1880
|
global___RemoteVoicePayload = RemoteVoicePayload
|
|
1878
1881
|
|
|
1879
|
-
@
|
|
1882
|
+
@typing.final
|
|
1880
1883
|
class RemoteVoiceBegin(google.protobuf.message.Message):
|
|
1881
1884
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1882
1885
|
|
|
@@ -1886,7 +1889,7 @@ class RemoteVoiceBegin(google.protobuf.message.Message):
|
|
|
1886
1889
|
|
|
1887
1890
|
global___RemoteVoiceBegin = RemoteVoiceBegin
|
|
1888
1891
|
|
|
1889
|
-
@
|
|
1892
|
+
@typing.final
|
|
1890
1893
|
class RemoteTextFieldStatus(google.protobuf.message.Message):
|
|
1891
1894
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1892
1895
|
|
|
@@ -1912,11 +1915,11 @@ class RemoteTextFieldStatus(google.protobuf.message.Message):
|
|
|
1912
1915
|
int5: builtins.int = ...,
|
|
1913
1916
|
label: builtins.str = ...,
|
|
1914
1917
|
) -> None: ...
|
|
1915
|
-
def ClearField(self, field_name:
|
|
1918
|
+
def ClearField(self, field_name: typing.Literal["counter_field", b"counter_field", "end", b"end", "int5", b"int5", "label", b"label", "start", b"start", "value", b"value"]) -> None: ...
|
|
1916
1919
|
|
|
1917
1920
|
global___RemoteTextFieldStatus = RemoteTextFieldStatus
|
|
1918
1921
|
|
|
1919
|
-
@
|
|
1922
|
+
@typing.final
|
|
1920
1923
|
class RemoteImeShowRequest(google.protobuf.message.Message):
|
|
1921
1924
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1922
1925
|
|
|
@@ -1928,27 +1931,53 @@ class RemoteImeShowRequest(google.protobuf.message.Message):
|
|
|
1928
1931
|
*,
|
|
1929
1932
|
remote_text_field_status: global___RemoteTextFieldStatus | None = ...,
|
|
1930
1933
|
) -> None: ...
|
|
1931
|
-
def HasField(self, field_name:
|
|
1932
|
-
def ClearField(self, field_name:
|
|
1934
|
+
def HasField(self, field_name: typing.Literal["remote_text_field_status", b"remote_text_field_status"]) -> builtins.bool: ...
|
|
1935
|
+
def ClearField(self, field_name: typing.Literal["remote_text_field_status", b"remote_text_field_status"]) -> None: ...
|
|
1933
1936
|
|
|
1934
1937
|
global___RemoteImeShowRequest = RemoteImeShowRequest
|
|
1935
1938
|
|
|
1936
|
-
@
|
|
1939
|
+
@typing.final
|
|
1937
1940
|
class RemoteEditInfo(google.protobuf.message.Message):
|
|
1938
1941
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1939
1942
|
|
|
1940
1943
|
INSERT_FIELD_NUMBER: builtins.int
|
|
1944
|
+
TEXT_FIELD_STATUS_FIELD_NUMBER: builtins.int
|
|
1941
1945
|
insert: builtins.int
|
|
1946
|
+
@property
|
|
1947
|
+
def text_field_status(self) -> global___RemoteImeObject: ...
|
|
1942
1948
|
def __init__(
|
|
1943
1949
|
self,
|
|
1944
1950
|
*,
|
|
1945
1951
|
insert: builtins.int = ...,
|
|
1952
|
+
text_field_status: global___RemoteImeObject | None = ...,
|
|
1946
1953
|
) -> None: ...
|
|
1947
|
-
def
|
|
1954
|
+
def HasField(self, field_name: typing.Literal["text_field_status", b"text_field_status"]) -> builtins.bool: ...
|
|
1955
|
+
def ClearField(self, field_name: typing.Literal["insert", b"insert", "text_field_status", b"text_field_status"]) -> None: ...
|
|
1948
1956
|
|
|
1949
1957
|
global___RemoteEditInfo = RemoteEditInfo
|
|
1950
1958
|
|
|
1951
|
-
@
|
|
1959
|
+
@typing.final
|
|
1960
|
+
class RemoteImeObject(google.protobuf.message.Message):
|
|
1961
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1962
|
+
|
|
1963
|
+
START_FIELD_NUMBER: builtins.int
|
|
1964
|
+
END_FIELD_NUMBER: builtins.int
|
|
1965
|
+
VALUE_FIELD_NUMBER: builtins.int
|
|
1966
|
+
start: builtins.int
|
|
1967
|
+
end: builtins.int
|
|
1968
|
+
value: builtins.str
|
|
1969
|
+
def __init__(
|
|
1970
|
+
self,
|
|
1971
|
+
*,
|
|
1972
|
+
start: builtins.int = ...,
|
|
1973
|
+
end: builtins.int = ...,
|
|
1974
|
+
value: builtins.str = ...,
|
|
1975
|
+
) -> None: ...
|
|
1976
|
+
def ClearField(self, field_name: typing.Literal["end", b"end", "start", b"start", "value", b"value"]) -> None: ...
|
|
1977
|
+
|
|
1978
|
+
global___RemoteImeObject = RemoteImeObject
|
|
1979
|
+
|
|
1980
|
+
@typing.final
|
|
1952
1981
|
class RemoteImeBatchEdit(google.protobuf.message.Message):
|
|
1953
1982
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1954
1983
|
|
|
@@ -1958,20 +1987,19 @@ class RemoteImeBatchEdit(google.protobuf.message.Message):
|
|
|
1958
1987
|
ime_counter: builtins.int
|
|
1959
1988
|
field_counter: builtins.int
|
|
1960
1989
|
@property
|
|
1961
|
-
def edit_info(self) -> global___RemoteEditInfo: ...
|
|
1990
|
+
def edit_info(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___RemoteEditInfo]: ...
|
|
1962
1991
|
def __init__(
|
|
1963
1992
|
self,
|
|
1964
1993
|
*,
|
|
1965
1994
|
ime_counter: builtins.int = ...,
|
|
1966
1995
|
field_counter: builtins.int = ...,
|
|
1967
|
-
edit_info: global___RemoteEditInfo | None = ...,
|
|
1996
|
+
edit_info: collections.abc.Iterable[global___RemoteEditInfo] | None = ...,
|
|
1968
1997
|
) -> None: ...
|
|
1969
|
-
def
|
|
1970
|
-
def ClearField(self, field_name: typing_extensions.Literal["edit_info", b"edit_info", "field_counter", b"field_counter", "ime_counter", b"ime_counter"]) -> None: ...
|
|
1998
|
+
def ClearField(self, field_name: typing.Literal["edit_info", b"edit_info", "field_counter", b"field_counter", "ime_counter", b"ime_counter"]) -> None: ...
|
|
1971
1999
|
|
|
1972
2000
|
global___RemoteImeBatchEdit = RemoteImeBatchEdit
|
|
1973
2001
|
|
|
1974
|
-
@
|
|
2002
|
+
@typing.final
|
|
1975
2003
|
class RemoteAppInfo(google.protobuf.message.Message):
|
|
1976
2004
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
1977
2005
|
|
|
@@ -2006,11 +2034,11 @@ class RemoteAppInfo(google.protobuf.message.Message):
|
|
|
2006
2034
|
app_package: builtins.str = ...,
|
|
2007
2035
|
int13: builtins.int = ...,
|
|
2008
2036
|
) -> None: ...
|
|
2009
|
-
def ClearField(self, field_name:
|
|
2037
|
+
def ClearField(self, field_name: typing.Literal["app_package", b"app_package", "counter", b"counter", "int13", b"int13", "int2", b"int2", "int3", b"int3", "int4", b"int4", "int7", b"int7", "int8", b"int8", "label", b"label"]) -> None: ...
|
|
2010
2038
|
|
|
2011
2039
|
global___RemoteAppInfo = RemoteAppInfo
|
|
2012
2040
|
|
|
2013
|
-
@
|
|
2041
|
+
@typing.final
|
|
2014
2042
|
class RemoteImeKeyInject(google.protobuf.message.Message):
|
|
2015
2043
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
2016
2044
|
|
|
@@ -2026,12 +2054,12 @@ class RemoteImeKeyInject(google.protobuf.message.Message):
|
|
|
2026
2054
|
app_info: global___RemoteAppInfo | None = ...,
|
|
2027
2055
|
text_field_status: global___RemoteTextFieldStatus | None = ...,
|
|
2028
2056
|
) -> None: ...
|
|
2029
|
-
def HasField(self, field_name:
|
|
2030
|
-
def ClearField(self, field_name:
|
|
2057
|
+
def HasField(self, field_name: typing.Literal["app_info", b"app_info", "text_field_status", b"text_field_status"]) -> builtins.bool: ...
|
|
2058
|
+
def ClearField(self, field_name: typing.Literal["app_info", b"app_info", "text_field_status", b"text_field_status"]) -> None: ...
|
|
2031
2059
|
|
|
2032
2060
|
global___RemoteImeKeyInject = RemoteImeKeyInject
|
|
2033
2061
|
|
|
2034
|
-
@
|
|
2062
|
+
@typing.final
|
|
2035
2063
|
class RemoteKeyInject(google.protobuf.message.Message):
|
|
2036
2064
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
2037
2065
|
|
|
@@ -2045,11 +2073,11 @@ class RemoteKeyInject(google.protobuf.message.Message):
|
|
|
2045
2073
|
key_code: global___RemoteKeyCode.ValueType = ...,
|
|
2046
2074
|
direction: global___RemoteDirection.ValueType = ...,
|
|
2047
2075
|
) -> None: ...
|
|
2048
|
-
def ClearField(self, field_name:
|
|
2076
|
+
def ClearField(self, field_name: typing.Literal["direction", b"direction", "key_code", b"key_code"]) -> None: ...
|
|
2049
2077
|
|
|
2050
2078
|
global___RemoteKeyInject = RemoteKeyInject
|
|
2051
2079
|
|
|
2052
|
-
@
|
|
2080
|
+
@typing.final
|
|
2053
2081
|
class RemotePingResponse(google.protobuf.message.Message):
|
|
2054
2082
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
2055
2083
|
|
|
@@ -2060,11 +2088,11 @@ class RemotePingResponse(google.protobuf.message.Message):
|
|
|
2060
2088
|
*,
|
|
2061
2089
|
val1: builtins.int = ...,
|
|
2062
2090
|
) -> None: ...
|
|
2063
|
-
def ClearField(self, field_name:
|
|
2091
|
+
def ClearField(self, field_name: typing.Literal["val1", b"val1"]) -> None: ...
|
|
2064
2092
|
|
|
2065
2093
|
global___RemotePingResponse = RemotePingResponse
|
|
2066
2094
|
|
|
2067
|
-
@
|
|
2095
|
+
@typing.final
|
|
2068
2096
|
class RemotePingRequest(google.protobuf.message.Message):
|
|
2069
2097
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
2070
2098
|
|
|
@@ -2078,11 +2106,11 @@ class RemotePingRequest(google.protobuf.message.Message):
|
|
|
2078
2106
|
val1: builtins.int = ...,
|
|
2079
2107
|
val2: builtins.int = ...,
|
|
2080
2108
|
) -> None: ...
|
|
2081
|
-
def ClearField(self, field_name:
|
|
2109
|
+
def ClearField(self, field_name: typing.Literal["val1", b"val1", "val2", b"val2"]) -> None: ...
|
|
2082
2110
|
|
|
2083
2111
|
global___RemotePingRequest = RemotePingRequest
|
|
2084
2112
|
|
|
2085
|
-
@
|
|
2113
|
+
@typing.final
|
|
2086
2114
|
class RemoteSetActive(google.protobuf.message.Message):
|
|
2087
2115
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
2088
2116
|
|
|
@@ -2093,11 +2121,11 @@ class RemoteSetActive(google.protobuf.message.Message):
|
|
|
2093
2121
|
*,
|
|
2094
2122
|
active: builtins.int = ...,
|
|
2095
2123
|
) -> None: ...
|
|
2096
|
-
def ClearField(self, field_name:
|
|
2124
|
+
def ClearField(self, field_name: typing.Literal["active", b"active"]) -> None: ...
|
|
2097
2125
|
|
|
2098
2126
|
global___RemoteSetActive = RemoteSetActive
|
|
2099
2127
|
|
|
2100
|
-
@
|
|
2128
|
+
@typing.final
|
|
2101
2129
|
class RemoteDeviceInfo(google.protobuf.message.Message):
|
|
2102
2130
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
2103
2131
|
|
|
@@ -2123,11 +2151,11 @@ class RemoteDeviceInfo(google.protobuf.message.Message):
|
|
|
2123
2151
|
package_name: builtins.str = ...,
|
|
2124
2152
|
app_version: builtins.str = ...,
|
|
2125
2153
|
) -> None: ...
|
|
2126
|
-
def ClearField(self, field_name:
|
|
2154
|
+
def ClearField(self, field_name: typing.Literal["app_version", b"app_version", "model", b"model", "package_name", b"package_name", "unknown1", b"unknown1", "unknown2", b"unknown2", "vendor", b"vendor"]) -> None: ...
|
|
2127
2155
|
|
|
2128
2156
|
global___RemoteDeviceInfo = RemoteDeviceInfo
|
|
2129
2157
|
|
|
2130
|
-
@
|
|
2158
|
+
@typing.final
|
|
2131
2159
|
class RemoteConfigure(google.protobuf.message.Message):
|
|
2132
2160
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
2133
2161
|
|
|
@@ -2142,12 +2170,12 @@ class RemoteConfigure(google.protobuf.message.Message):
|
|
|
2142
2170
|
code1: builtins.int = ...,
|
|
2143
2171
|
device_info: global___RemoteDeviceInfo | None = ...,
|
|
2144
2172
|
) -> None: ...
|
|
2145
|
-
def HasField(self, field_name:
|
|
2146
|
-
def ClearField(self, field_name:
|
|
2173
|
+
def HasField(self, field_name: typing.Literal["device_info", b"device_info"]) -> builtins.bool: ...
|
|
2174
|
+
def ClearField(self, field_name: typing.Literal["code1", b"code1", "device_info", b"device_info"]) -> None: ...
|
|
2147
2175
|
|
|
2148
2176
|
global___RemoteConfigure = RemoteConfigure
|
|
2149
2177
|
|
|
2150
|
-
@
|
|
2178
|
+
@typing.final
|
|
2151
2179
|
class RemoteError(google.protobuf.message.Message):
|
|
2152
2180
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
2153
2181
|
|
|
@@ -2162,12 +2190,12 @@ class RemoteError(google.protobuf.message.Message):
|
|
|
2162
2190
|
value: builtins.bool = ...,
|
|
2163
2191
|
message: global___RemoteMessage | None = ...,
|
|
2164
2192
|
) -> None: ...
|
|
2165
|
-
def HasField(self, field_name:
|
|
2166
|
-
def ClearField(self, field_name:
|
|
2193
|
+
def HasField(self, field_name: typing.Literal["message", b"message"]) -> builtins.bool: ...
|
|
2194
|
+
def ClearField(self, field_name: typing.Literal["message", b"message", "value", b"value"]) -> None: ...
|
|
2167
2195
|
|
|
2168
2196
|
global___RemoteError = RemoteError
|
|
2169
2197
|
|
|
2170
|
-
@
|
|
2198
|
+
@typing.final
|
|
2171
2199
|
class RemoteMessage(google.protobuf.message.Message):
|
|
2172
2200
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
2173
2201
|
|
|
@@ -2247,7 +2275,7 @@ class RemoteMessage(google.protobuf.message.Message):
|
|
|
2247
2275
|
remote_reset_preferred_audio_device: global___RemoteResetPreferredAudioDevice | None = ...,
|
|
2248
2276
|
remote_app_link_launch_request: global___RemoteAppLinkLaunchRequest | None = ...,
|
|
2249
2277
|
) -> None: ...
|
|
2250
|
-
def HasField(self, field_name:
|
|
2251
|
-
def ClearField(self, field_name:
|
|
2278
|
+
def HasField(self, field_name: typing.Literal["remote_adjust_volume_level", b"remote_adjust_volume_level", "remote_app_link_launch_request", b"remote_app_link_launch_request", "remote_configure", b"remote_configure", "remote_error", b"remote_error", "remote_ime_batch_edit", b"remote_ime_batch_edit", "remote_ime_key_inject", b"remote_ime_key_inject", "remote_ime_show_request", b"remote_ime_show_request", "remote_key_inject", b"remote_key_inject", "remote_ping_request", b"remote_ping_request", "remote_ping_response", b"remote_ping_response", "remote_reset_preferred_audio_device", b"remote_reset_preferred_audio_device", "remote_set_active", b"remote_set_active", "remote_set_preferred_audio_device", b"remote_set_preferred_audio_device", "remote_set_volume_level", b"remote_set_volume_level", "remote_start", b"remote_start", "remote_voice_begin", b"remote_voice_begin", "remote_voice_end", b"remote_voice_end", "remote_voice_payload", b"remote_voice_payload"]) -> builtins.bool: ...
|
|
2279
|
+
def ClearField(self, field_name: typing.Literal["remote_adjust_volume_level", b"remote_adjust_volume_level", "remote_app_link_launch_request", b"remote_app_link_launch_request", "remote_configure", b"remote_configure", "remote_error", b"remote_error", "remote_ime_batch_edit", b"remote_ime_batch_edit", "remote_ime_key_inject", b"remote_ime_key_inject", "remote_ime_show_request", b"remote_ime_show_request", "remote_key_inject", b"remote_key_inject", "remote_ping_request", b"remote_ping_request", "remote_ping_response", b"remote_ping_response", "remote_reset_preferred_audio_device", b"remote_reset_preferred_audio_device", "remote_set_active", b"remote_set_active", "remote_set_preferred_audio_device", b"remote_set_preferred_audio_device", "remote_set_volume_level", b"remote_set_volume_level", "remote_start", b"remote_start", "remote_voice_begin", b"remote_voice_begin", "remote_voice_end", b"remote_voice_end", "remote_voice_payload", b"remote_voice_payload"]) -> None: ...
|
|
2252
2280
|
|
|
2253
2281
|
global___RemoteMessage = RemoteMessage
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: androidtvremote2
|
|
3
|
-
Version: 0.1
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: A Python library for interacting with Android TV using the Android TV Remote protocol v2
|
|
5
5
|
Author-email: tronikos <tronikos@gmail.com>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -12,6 +12,7 @@ License-File: LICENSE
|
|
|
12
12
|
Requires-Dist: aiofiles>=0.8
|
|
13
13
|
Requires-Dist: cryptography>=3
|
|
14
14
|
Requires-Dist: protobuf>=4.21
|
|
15
|
+
Dynamic: license-file
|
|
15
16
|
|
|
16
17
|
# androidtvremote2
|
|
17
18
|
|
|
@@ -52,12 +53,13 @@ python -m grpc_tools.protoc src/androidtvremote2/*.proto --python_out=src/androi
|
|
|
52
53
|
|
|
53
54
|
# Run pre-commit
|
|
54
55
|
python -m pip install pre-commit
|
|
56
|
+
pre-commit autoupdate
|
|
55
57
|
pre-commit install
|
|
56
58
|
pre-commit run --all-files
|
|
57
59
|
|
|
58
60
|
# Alternative: run formatter, lint, and type checking
|
|
59
61
|
python -m pip install isort black flake8 ruff mypy
|
|
60
|
-
isort . ; black . ; flake8 . ; ruff . --fix ; mypy --install-types .
|
|
62
|
+
isort . ; black . ; flake8 . ; ruff check . --fix ; mypy --install-types .
|
|
61
63
|
|
|
62
64
|
# Run tests
|
|
63
65
|
python -m pip install pytest
|
|
@@ -35,7 +35,8 @@ async def _bind_keyboard(remote: AndroidTVRemote) -> None:
|
|
|
35
35
|
"\n- 'd': Disney+"
|
|
36
36
|
"\n- 'a': Amazon Prime Video"
|
|
37
37
|
"\n- 'k': Kodi"
|
|
38
|
-
"\n- 'q': quit
|
|
38
|
+
"\n- 'q': quit"
|
|
39
|
+
"\n- 't': send text 'Hello world' to Android TV\n\n"
|
|
39
40
|
)
|
|
40
41
|
key_mappings = {
|
|
41
42
|
keyboard.Key.up: "DPAD_UP",
|
|
@@ -85,6 +86,8 @@ async def _bind_keyboard(remote: AndroidTVRemote) -> None:
|
|
|
85
86
|
remote.send_launch_app_command("com.amazon.amazonvideo.livingroom")
|
|
86
87
|
elif key.char == "k":
|
|
87
88
|
remote.send_launch_app_command("org.xbmc.kodi")
|
|
89
|
+
elif key.char == "t":
|
|
90
|
+
remote.send_text("Hello World!")
|
|
88
91
|
|
|
89
92
|
|
|
90
93
|
async def _host_from_zeroconf(timeout: float) -> str:
|
|
@@ -107,7 +110,7 @@ async def _host_from_zeroconf(timeout: float) -> str:
|
|
|
107
110
|
await info.async_request(zeroconf, 3000)
|
|
108
111
|
if info:
|
|
109
112
|
addresses = [
|
|
110
|
-
"
|
|
113
|
+
f"{addr}:{cast(int, info.port)}"
|
|
111
114
|
for addr in info.parsed_scoped_addresses()
|
|
112
115
|
]
|
|
113
116
|
print(f" Name: {name}")
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
-
# source: remotemessage.proto
|
|
4
|
-
"""Generated protocol buffer code."""
|
|
5
|
-
from google.protobuf import descriptor as _descriptor
|
|
6
|
-
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
7
|
-
from google.protobuf import symbol_database as _symbol_database
|
|
8
|
-
from google.protobuf.internal import builder as _builder
|
|
9
|
-
# @@protoc_insertion_point(imports)
|
|
10
|
-
|
|
11
|
-
_sym_db = _symbol_database.Default()
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13remotemessage.proto\x12\x06remote\".\n\x1aRemoteAppLinkLaunchRequest\x12\x10\n\x08\x61pp_link\x18\x01 \x01(\t\"!\n\x1fRemoteResetPreferredAudioDevice\"\x1f\n\x1dRemoteSetPreferredAudioDevice\"\x19\n\x17RemoteAdjustVolumeLevel\"\xb4\x01\n\x14RemoteSetVolumeLevel\x12\x10\n\x08unknown1\x18\x01 \x01(\r\x12\x10\n\x08unknown2\x18\x02 \x01(\r\x12\x14\n\x0cplayer_model\x18\x03 \x01(\t\x12\x10\n\x08unknown4\x18\x04 \x01(\r\x12\x10\n\x08unknown5\x18\x05 \x01(\r\x12\x12\n\nvolume_max\x18\x06 \x01(\r\x12\x14\n\x0cvolume_level\x18\x07 \x01(\r\x12\x14\n\x0cvolume_muted\x18\x08 \x01(\x08\"\x1e\n\x0bRemoteStart\x12\x0f\n\x07started\x18\x01 \x01(\x08\"\x10\n\x0eRemoteVoiceEnd\"\x14\n\x12RemoteVoicePayload\"\x12\n\x10RemoteVoiceBegin\"v\n\x15RemoteTextFieldStatus\x12\x15\n\rcounter_field\x18\x01 \x01(\x05\x12\r\n\x05value\x18\x02 \x01(\t\x12\r\n\x05start\x18\x03 \x01(\x05\x12\x0b\n\x03\x65nd\x18\x04 \x01(\x05\x12\x0c\n\x04int5\x18\x05 \x01(\x05\x12\r\n\x05label\x18\x06 \x01(\t\"W\n\x14RemoteImeShowRequest\x12?\n\x18remote_text_field_status\x18\x02 \x01(\x0b\x32\x1d.remote.RemoteTextFieldStatus\" \n\x0eRemoteEditInfo\x12\x0e\n\x06insert\x18\x02 \x01(\x05\"k\n\x12RemoteImeBatchEdit\x12\x13\n\x0bime_counter\x18\x01 \x01(\x05\x12\x15\n\rfield_counter\x18\x02 \x01(\x05\x12)\n\tedit_info\x18\x03 \x01(\x0b\x32\x16.remote.RemoteEditInfo\"\x99\x01\n\rRemoteAppInfo\x12\x0f\n\x07\x63ounter\x18\x01 \x01(\x05\x12\x0c\n\x04int2\x18\x02 \x01(\x05\x12\x0c\n\x04int3\x18\x03 \x01(\x05\x12\x0c\n\x04int4\x18\x04 \x01(\t\x12\x0c\n\x04int7\x18\x07 \x01(\x05\x12\x0c\n\x04int8\x18\x08 \x01(\x05\x12\r\n\x05label\x18\n \x01(\t\x12\x13\n\x0b\x61pp_package\x18\x0c \x01(\t\x12\r\n\x05int13\x18\r \x01(\x05\"w\n\x12RemoteImeKeyInject\x12\'\n\x08\x61pp_info\x18\x01 \x01(\x0b\x32\x15.remote.RemoteAppInfo\x12\x38\n\x11text_field_status\x18\x02 \x01(\x0b\x32\x1d.remote.RemoteTextFieldStatus\"f\n\x0fRemoteKeyInject\x12\'\n\x08key_code\x18\x01 \x01(\x0e\x32\x15.remote.RemoteKeyCode\x12*\n\tdirection\x18\x02 \x01(\x0e\x32\x17.remote.RemoteDirection\"\"\n\x12RemotePingResponse\x12\x0c\n\x04val1\x18\x01 \x01(\x05\"/\n\x11RemotePingRequest\x12\x0c\n\x04val1\x18\x01 \x01(\x05\x12\x0c\n\x04val2\x18\x02 \x01(\x05\"!\n\x0fRemoteSetActive\x12\x0e\n\x06\x61\x63tive\x18\x01 \x01(\x05\"\x80\x01\n\x10RemoteDeviceInfo\x12\r\n\x05model\x18\x01 \x01(\t\x12\x0e\n\x06vendor\x18\x02 \x01(\t\x12\x10\n\x08unknown1\x18\x03 \x01(\x05\x12\x10\n\x08unknown2\x18\x04 \x01(\t\x12\x14\n\x0cpackage_name\x18\x05 \x01(\t\x12\x13\n\x0b\x61pp_version\x18\x06 \x01(\t\"O\n\x0fRemoteConfigure\x12\r\n\x05\x63ode1\x18\x01 \x01(\x05\x12-\n\x0b\x64\x65vice_info\x18\x02 \x01(\x0b\x32\x18.remote.RemoteDeviceInfo\"D\n\x0bRemoteError\x12\r\n\x05value\x18\x01 \x01(\x08\x12&\n\x07message\x18\x02 \x01(\x0b\x32\x15.remote.RemoteMessage\"\xc1\x08\n\rRemoteMessage\x12\x31\n\x10remote_configure\x18\x01 \x01(\x0b\x32\x17.remote.RemoteConfigure\x12\x32\n\x11remote_set_active\x18\x02 \x01(\x0b\x32\x17.remote.RemoteSetActive\x12)\n\x0cremote_error\x18\x03 \x01(\x0b\x32\x13.remote.RemoteError\x12\x36\n\x13remote_ping_request\x18\x08 \x01(\x0b\x32\x19.remote.RemotePingRequest\x12\x38\n\x14remote_ping_response\x18\t \x01(\x0b\x32\x1a.remote.RemotePingResponse\x12\x32\n\x11remote_key_inject\x18\n \x01(\x0b\x32\x17.remote.RemoteKeyInject\x12\x39\n\x15remote_ime_key_inject\x18\x14 \x01(\x0b\x32\x1a.remote.RemoteImeKeyInject\x12\x39\n\x15remote_ime_batch_edit\x18\x15 \x01(\x0b\x32\x1a.remote.RemoteImeBatchEdit\x12=\n\x17remote_ime_show_request\x18\x16 \x01(\x0b\x32\x1c.remote.RemoteImeShowRequest\x12\x34\n\x12remote_voice_begin\x18\x1e \x01(\x0b\x32\x18.remote.RemoteVoiceBegin\x12\x38\n\x14remote_voice_payload\x18\x1f \x01(\x0b\x32\x1a.remote.RemoteVoicePayload\x12\x30\n\x10remote_voice_end\x18 \x01(\x0b\x32\x16.remote.RemoteVoiceEnd\x12)\n\x0cremote_start\x18( \x01(\x0b\x32\x13.remote.RemoteStart\x12=\n\x17remote_set_volume_level\x18\x32 \x01(\x0b\x32\x1c.remote.RemoteSetVolumeLevel\x12\x43\n\x1aremote_adjust_volume_level\x18\x33 \x01(\x0b\x32\x1f.remote.RemoteAdjustVolumeLevel\x12P\n!remote_set_preferred_audio_device\x18< \x01(\x0b\x32%.remote.RemoteSetPreferredAudioDevice\x12T\n#remote_reset_preferred_audio_device\x18= \x01(\x0b\x32\'.remote.RemoteResetPreferredAudioDevice\x12J\n\x1eremote_app_link_launch_request\x18Z \x01(\x0b\x32\".remote.RemoteAppLinkLaunchRequest*\xe7\x37\n\rRemoteKeyCode\x12\x13\n\x0fKEYCODE_UNKNOWN\x10\x00\x12\x15\n\x11KEYCODE_SOFT_LEFT\x10\x01\x12\x16\n\x12KEYCODE_SOFT_RIGHT\x10\x02\x12\x10\n\x0cKEYCODE_HOME\x10\x03\x12\x10\n\x0cKEYCODE_BACK\x10\x04\x12\x10\n\x0cKEYCODE_CALL\x10\x05\x12\x13\n\x0fKEYCODE_ENDCALL\x10\x06\x12\r\n\tKEYCODE_0\x10\x07\x12\r\n\tKEYCODE_1\x10\x08\x12\r\n\tKEYCODE_2\x10\t\x12\r\n\tKEYCODE_3\x10\n\x12\r\n\tKEYCODE_4\x10\x0b\x12\r\n\tKEYCODE_5\x10\x0c\x12\r\n\tKEYCODE_6\x10\r\x12\r\n\tKEYCODE_7\x10\x0e\x12\r\n\tKEYCODE_8\x10\x0f\x12\r\n\tKEYCODE_9\x10\x10\x12\x10\n\x0cKEYCODE_STAR\x10\x11\x12\x11\n\rKEYCODE_POUND\x10\x12\x12\x13\n\x0fKEYCODE_DPAD_UP\x10\x13\x12\x15\n\x11KEYCODE_DPAD_DOWN\x10\x14\x12\x15\n\x11KEYCODE_DPAD_LEFT\x10\x15\x12\x16\n\x12KEYCODE_DPAD_RIGHT\x10\x16\x12\x17\n\x13KEYCODE_DPAD_CENTER\x10\x17\x12\x15\n\x11KEYCODE_VOLUME_UP\x10\x18\x12\x17\n\x13KEYCODE_VOLUME_DOWN\x10\x19\x12\x11\n\rKEYCODE_POWER\x10\x1a\x12\x12\n\x0eKEYCODE_CAMERA\x10\x1b\x12\x11\n\rKEYCODE_CLEAR\x10\x1c\x12\r\n\tKEYCODE_A\x10\x1d\x12\r\n\tKEYCODE_B\x10\x1e\x12\r\n\tKEYCODE_C\x10\x1f\x12\r\n\tKEYCODE_D\x10 \x12\r\n\tKEYCODE_E\x10!\x12\r\n\tKEYCODE_F\x10\"\x12\r\n\tKEYCODE_G\x10#\x12\r\n\tKEYCODE_H\x10$\x12\r\n\tKEYCODE_I\x10%\x12\r\n\tKEYCODE_J\x10&\x12\r\n\tKEYCODE_K\x10\'\x12\r\n\tKEYCODE_L\x10(\x12\r\n\tKEYCODE_M\x10)\x12\r\n\tKEYCODE_N\x10*\x12\r\n\tKEYCODE_O\x10+\x12\r\n\tKEYCODE_P\x10,\x12\r\n\tKEYCODE_Q\x10-\x12\r\n\tKEYCODE_R\x10.\x12\r\n\tKEYCODE_S\x10/\x12\r\n\tKEYCODE_T\x10\x30\x12\r\n\tKEYCODE_U\x10\x31\x12\r\n\tKEYCODE_V\x10\x32\x12\r\n\tKEYCODE_W\x10\x33\x12\r\n\tKEYCODE_X\x10\x34\x12\r\n\tKEYCODE_Y\x10\x35\x12\r\n\tKEYCODE_Z\x10\x36\x12\x11\n\rKEYCODE_COMMA\x10\x37\x12\x12\n\x0eKEYCODE_PERIOD\x10\x38\x12\x14\n\x10KEYCODE_ALT_LEFT\x10\x39\x12\x15\n\x11KEYCODE_ALT_RIGHT\x10:\x12\x16\n\x12KEYCODE_SHIFT_LEFT\x10;\x12\x17\n\x13KEYCODE_SHIFT_RIGHT\x10<\x12\x0f\n\x0bKEYCODE_TAB\x10=\x12\x11\n\rKEYCODE_SPACE\x10>\x12\x0f\n\x0bKEYCODE_SYM\x10?\x12\x14\n\x10KEYCODE_EXPLORER\x10@\x12\x14\n\x10KEYCODE_ENVELOPE\x10\x41\x12\x11\n\rKEYCODE_ENTER\x10\x42\x12\x0f\n\x0bKEYCODE_DEL\x10\x43\x12\x11\n\rKEYCODE_GRAVE\x10\x44\x12\x11\n\rKEYCODE_MINUS\x10\x45\x12\x12\n\x0eKEYCODE_EQUALS\x10\x46\x12\x18\n\x14KEYCODE_LEFT_BRACKET\x10G\x12\x19\n\x15KEYCODE_RIGHT_BRACKET\x10H\x12\x15\n\x11KEYCODE_BACKSLASH\x10I\x12\x15\n\x11KEYCODE_SEMICOLON\x10J\x12\x16\n\x12KEYCODE_APOSTROPHE\x10K\x12\x11\n\rKEYCODE_SLASH\x10L\x12\x0e\n\nKEYCODE_AT\x10M\x12\x0f\n\x0bKEYCODE_NUM\x10N\x12\x17\n\x13KEYCODE_HEADSETHOOK\x10O\x12\x11\n\rKEYCODE_FOCUS\x10P\x12\x10\n\x0cKEYCODE_PLUS\x10Q\x12\x10\n\x0cKEYCODE_MENU\x10R\x12\x18\n\x14KEYCODE_NOTIFICATION\x10S\x12\x12\n\x0eKEYCODE_SEARCH\x10T\x12\x1c\n\x18KEYCODE_MEDIA_PLAY_PAUSE\x10U\x12\x16\n\x12KEYCODE_MEDIA_STOP\x10V\x12\x16\n\x12KEYCODE_MEDIA_NEXT\x10W\x12\x1a\n\x16KEYCODE_MEDIA_PREVIOUS\x10X\x12\x18\n\x14KEYCODE_MEDIA_REWIND\x10Y\x12\x1e\n\x1aKEYCODE_MEDIA_FAST_FORWARD\x10Z\x12\x10\n\x0cKEYCODE_MUTE\x10[\x12\x13\n\x0fKEYCODE_PAGE_UP\x10\\\x12\x15\n\x11KEYCODE_PAGE_DOWN\x10]\x12\x17\n\x13KEYCODE_PICTSYMBOLS\x10^\x12\x1a\n\x16KEYCODE_SWITCH_CHARSET\x10_\x12\x14\n\x10KEYCODE_BUTTON_A\x10`\x12\x14\n\x10KEYCODE_BUTTON_B\x10\x61\x12\x14\n\x10KEYCODE_BUTTON_C\x10\x62\x12\x14\n\x10KEYCODE_BUTTON_X\x10\x63\x12\x14\n\x10KEYCODE_BUTTON_Y\x10\x64\x12\x14\n\x10KEYCODE_BUTTON_Z\x10\x65\x12\x15\n\x11KEYCODE_BUTTON_L1\x10\x66\x12\x15\n\x11KEYCODE_BUTTON_R1\x10g\x12\x15\n\x11KEYCODE_BUTTON_L2\x10h\x12\x15\n\x11KEYCODE_BUTTON_R2\x10i\x12\x19\n\x15KEYCODE_BUTTON_THUMBL\x10j\x12\x19\n\x15KEYCODE_BUTTON_THUMBR\x10k\x12\x18\n\x14KEYCODE_BUTTON_START\x10l\x12\x19\n\x15KEYCODE_BUTTON_SELECT\x10m\x12\x17\n\x13KEYCODE_BUTTON_MODE\x10n\x12\x12\n\x0eKEYCODE_ESCAPE\x10o\x12\x17\n\x13KEYCODE_FORWARD_DEL\x10p\x12\x15\n\x11KEYCODE_CTRL_LEFT\x10q\x12\x16\n\x12KEYCODE_CTRL_RIGHT\x10r\x12\x15\n\x11KEYCODE_CAPS_LOCK\x10s\x12\x17\n\x13KEYCODE_SCROLL_LOCK\x10t\x12\x15\n\x11KEYCODE_META_LEFT\x10u\x12\x16\n\x12KEYCODE_META_RIGHT\x10v\x12\x14\n\x10KEYCODE_FUNCTION\x10w\x12\x11\n\rKEYCODE_SYSRQ\x10x\x12\x11\n\rKEYCODE_BREAK\x10y\x12\x15\n\x11KEYCODE_MOVE_HOME\x10z\x12\x14\n\x10KEYCODE_MOVE_END\x10{\x12\x12\n\x0eKEYCODE_INSERT\x10|\x12\x13\n\x0fKEYCODE_FORWARD\x10}\x12\x16\n\x12KEYCODE_MEDIA_PLAY\x10~\x12\x17\n\x13KEYCODE_MEDIA_PAUSE\x10\x7f\x12\x18\n\x13KEYCODE_MEDIA_CLOSE\x10\x80\x01\x12\x18\n\x13KEYCODE_MEDIA_EJECT\x10\x81\x01\x12\x19\n\x14KEYCODE_MEDIA_RECORD\x10\x82\x01\x12\x0f\n\nKEYCODE_F1\x10\x83\x01\x12\x0f\n\nKEYCODE_F2\x10\x84\x01\x12\x0f\n\nKEYCODE_F3\x10\x85\x01\x12\x0f\n\nKEYCODE_F4\x10\x86\x01\x12\x0f\n\nKEYCODE_F5\x10\x87\x01\x12\x0f\n\nKEYCODE_F6\x10\x88\x01\x12\x0f\n\nKEYCODE_F7\x10\x89\x01\x12\x0f\n\nKEYCODE_F8\x10\x8a\x01\x12\x0f\n\nKEYCODE_F9\x10\x8b\x01\x12\x10\n\x0bKEYCODE_F10\x10\x8c\x01\x12\x10\n\x0bKEYCODE_F11\x10\x8d\x01\x12\x10\n\x0bKEYCODE_F12\x10\x8e\x01\x12\x15\n\x10KEYCODE_NUM_LOCK\x10\x8f\x01\x12\x15\n\x10KEYCODE_NUMPAD_0\x10\x90\x01\x12\x15\n\x10KEYCODE_NUMPAD_1\x10\x91\x01\x12\x15\n\x10KEYCODE_NUMPAD_2\x10\x92\x01\x12\x15\n\x10KEYCODE_NUMPAD_3\x10\x93\x01\x12\x15\n\x10KEYCODE_NUMPAD_4\x10\x94\x01\x12\x15\n\x10KEYCODE_NUMPAD_5\x10\x95\x01\x12\x15\n\x10KEYCODE_NUMPAD_6\x10\x96\x01\x12\x15\n\x10KEYCODE_NUMPAD_7\x10\x97\x01\x12\x15\n\x10KEYCODE_NUMPAD_8\x10\x98\x01\x12\x15\n\x10KEYCODE_NUMPAD_9\x10\x99\x01\x12\x1a\n\x15KEYCODE_NUMPAD_DIVIDE\x10\x9a\x01\x12\x1c\n\x17KEYCODE_NUMPAD_MULTIPLY\x10\x9b\x01\x12\x1c\n\x17KEYCODE_NUMPAD_SUBTRACT\x10\x9c\x01\x12\x17\n\x12KEYCODE_NUMPAD_ADD\x10\x9d\x01\x12\x17\n\x12KEYCODE_NUMPAD_DOT\x10\x9e\x01\x12\x19\n\x14KEYCODE_NUMPAD_COMMA\x10\x9f\x01\x12\x19\n\x14KEYCODE_NUMPAD_ENTER\x10\xa0\x01\x12\x1a\n\x15KEYCODE_NUMPAD_EQUALS\x10\xa1\x01\x12\x1e\n\x19KEYCODE_NUMPAD_LEFT_PAREN\x10\xa2\x01\x12\x1f\n\x1aKEYCODE_NUMPAD_RIGHT_PAREN\x10\xa3\x01\x12\x18\n\x13KEYCODE_VOLUME_MUTE\x10\xa4\x01\x12\x11\n\x0cKEYCODE_INFO\x10\xa5\x01\x12\x17\n\x12KEYCODE_CHANNEL_UP\x10\xa6\x01\x12\x19\n\x14KEYCODE_CHANNEL_DOWN\x10\xa7\x01\x12\x14\n\x0fKEYCODE_ZOOM_IN\x10\xa8\x01\x12\x15\n\x10KEYCODE_ZOOM_OUT\x10\xa9\x01\x12\x0f\n\nKEYCODE_TV\x10\xaa\x01\x12\x13\n\x0eKEYCODE_WINDOW\x10\xab\x01\x12\x12\n\rKEYCODE_GUIDE\x10\xac\x01\x12\x10\n\x0bKEYCODE_DVR\x10\xad\x01\x12\x15\n\x10KEYCODE_BOOKMARK\x10\xae\x01\x12\x15\n\x10KEYCODE_CAPTIONS\x10\xaf\x01\x12\x15\n\x10KEYCODE_SETTINGS\x10\xb0\x01\x12\x15\n\x10KEYCODE_TV_POWER\x10\xb1\x01\x12\x15\n\x10KEYCODE_TV_INPUT\x10\xb2\x01\x12\x16\n\x11KEYCODE_STB_POWER\x10\xb3\x01\x12\x16\n\x11KEYCODE_STB_INPUT\x10\xb4\x01\x12\x16\n\x11KEYCODE_AVR_POWER\x10\xb5\x01\x12\x16\n\x11KEYCODE_AVR_INPUT\x10\xb6\x01\x12\x15\n\x10KEYCODE_PROG_RED\x10\xb7\x01\x12\x17\n\x12KEYCODE_PROG_GREEN\x10\xb8\x01\x12\x18\n\x13KEYCODE_PROG_YELLOW\x10\xb9\x01\x12\x16\n\x11KEYCODE_PROG_BLUE\x10\xba\x01\x12\x17\n\x12KEYCODE_APP_SWITCH\x10\xbb\x01\x12\x15\n\x10KEYCODE_BUTTON_1\x10\xbc\x01\x12\x15\n\x10KEYCODE_BUTTON_2\x10\xbd\x01\x12\x15\n\x10KEYCODE_BUTTON_3\x10\xbe\x01\x12\x15\n\x10KEYCODE_BUTTON_4\x10\xbf\x01\x12\x15\n\x10KEYCODE_BUTTON_5\x10\xc0\x01\x12\x15\n\x10KEYCODE_BUTTON_6\x10\xc1\x01\x12\x15\n\x10KEYCODE_BUTTON_7\x10\xc2\x01\x12\x15\n\x10KEYCODE_BUTTON_8\x10\xc3\x01\x12\x15\n\x10KEYCODE_BUTTON_9\x10\xc4\x01\x12\x16\n\x11KEYCODE_BUTTON_10\x10\xc5\x01\x12\x16\n\x11KEYCODE_BUTTON_11\x10\xc6\x01\x12\x16\n\x11KEYCODE_BUTTON_12\x10\xc7\x01\x12\x16\n\x11KEYCODE_BUTTON_13\x10\xc8\x01\x12\x16\n\x11KEYCODE_BUTTON_14\x10\xc9\x01\x12\x16\n\x11KEYCODE_BUTTON_15\x10\xca\x01\x12\x16\n\x11KEYCODE_BUTTON_16\x10\xcb\x01\x12\x1c\n\x17KEYCODE_LANGUAGE_SWITCH\x10\xcc\x01\x12\x18\n\x13KEYCODE_MANNER_MODE\x10\xcd\x01\x12\x14\n\x0fKEYCODE_3D_MODE\x10\xce\x01\x12\x15\n\x10KEYCODE_CONTACTS\x10\xcf\x01\x12\x15\n\x10KEYCODE_CALENDAR\x10\xd0\x01\x12\x12\n\rKEYCODE_MUSIC\x10\xd1\x01\x12\x17\n\x12KEYCODE_CALCULATOR\x10\xd2\x01\x12\x1c\n\x17KEYCODE_ZENKAKU_HANKAKU\x10\xd3\x01\x12\x11\n\x0cKEYCODE_EISU\x10\xd4\x01\x12\x15\n\x10KEYCODE_MUHENKAN\x10\xd5\x01\x12\x13\n\x0eKEYCODE_HENKAN\x10\xd6\x01\x12\x1e\n\x19KEYCODE_KATAKANA_HIRAGANA\x10\xd7\x01\x12\x10\n\x0bKEYCODE_YEN\x10\xd8\x01\x12\x0f\n\nKEYCODE_RO\x10\xd9\x01\x12\x11\n\x0cKEYCODE_KANA\x10\xda\x01\x12\x13\n\x0eKEYCODE_ASSIST\x10\xdb\x01\x12\x1c\n\x17KEYCODE_BRIGHTNESS_DOWN\x10\xdc\x01\x12\x1a\n\x15KEYCODE_BRIGHTNESS_UP\x10\xdd\x01\x12\x1e\n\x19KEYCODE_MEDIA_AUDIO_TRACK\x10\xde\x01\x12\x12\n\rKEYCODE_SLEEP\x10\xdf\x01\x12\x13\n\x0eKEYCODE_WAKEUP\x10\xe0\x01\x12\x14\n\x0fKEYCODE_PAIRING\x10\xe1\x01\x12\x1b\n\x16KEYCODE_MEDIA_TOP_MENU\x10\xe2\x01\x12\x0f\n\nKEYCODE_11\x10\xe3\x01\x12\x0f\n\nKEYCODE_12\x10\xe4\x01\x12\x19\n\x14KEYCODE_LAST_CHANNEL\x10\xe5\x01\x12\x1c\n\x17KEYCODE_TV_DATA_SERVICE\x10\xe6\x01\x12\x19\n\x14KEYCODE_VOICE_ASSIST\x10\xe7\x01\x12\x1d\n\x18KEYCODE_TV_RADIO_SERVICE\x10\xe8\x01\x12\x18\n\x13KEYCODE_TV_TELETEXT\x10\xe9\x01\x12\x1c\n\x17KEYCODE_TV_NUMBER_ENTRY\x10\xea\x01\x12\"\n\x1dKEYCODE_TV_TERRESTRIAL_ANALOG\x10\xeb\x01\x12#\n\x1eKEYCODE_TV_TERRESTRIAL_DIGITAL\x10\xec\x01\x12\x19\n\x14KEYCODE_TV_SATELLITE\x10\xed\x01\x12\x1c\n\x17KEYCODE_TV_SATELLITE_BS\x10\xee\x01\x12\x1c\n\x17KEYCODE_TV_SATELLITE_CS\x10\xef\x01\x12!\n\x1cKEYCODE_TV_SATELLITE_SERVICE\x10\xf0\x01\x12\x17\n\x12KEYCODE_TV_NETWORK\x10\xf1\x01\x12\x1d\n\x18KEYCODE_TV_ANTENNA_CABLE\x10\xf2\x01\x12\x1c\n\x17KEYCODE_TV_INPUT_HDMI_1\x10\xf3\x01\x12\x1c\n\x17KEYCODE_TV_INPUT_HDMI_2\x10\xf4\x01\x12\x1c\n\x17KEYCODE_TV_INPUT_HDMI_3\x10\xf5\x01\x12\x1c\n\x17KEYCODE_TV_INPUT_HDMI_4\x10\xf6\x01\x12!\n\x1cKEYCODE_TV_INPUT_COMPOSITE_1\x10\xf7\x01\x12!\n\x1cKEYCODE_TV_INPUT_COMPOSITE_2\x10\xf8\x01\x12!\n\x1cKEYCODE_TV_INPUT_COMPONENT_1\x10\xf9\x01\x12!\n\x1cKEYCODE_TV_INPUT_COMPONENT_2\x10\xfa\x01\x12\x1b\n\x16KEYCODE_TV_INPUT_VGA_1\x10\xfb\x01\x12!\n\x1cKEYCODE_TV_AUDIO_DESCRIPTION\x10\xfc\x01\x12(\n#KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP\x10\xfd\x01\x12*\n%KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN\x10\xfe\x01\x12\x19\n\x14KEYCODE_TV_ZOOM_MODE\x10\xff\x01\x12\x1d\n\x18KEYCODE_TV_CONTENTS_MENU\x10\x80\x02\x12\"\n\x1dKEYCODE_TV_MEDIA_CONTEXT_MENU\x10\x81\x02\x12!\n\x1cKEYCODE_TV_TIMER_PROGRAMMING\x10\x82\x02\x12\x11\n\x0cKEYCODE_HELP\x10\x83\x02\x12\x1e\n\x19KEYCODE_NAVIGATE_PREVIOUS\x10\x84\x02\x12\x1a\n\x15KEYCODE_NAVIGATE_NEXT\x10\x85\x02\x12\x18\n\x13KEYCODE_NAVIGATE_IN\x10\x86\x02\x12\x19\n\x14KEYCODE_NAVIGATE_OUT\x10\x87\x02\x12\x19\n\x14KEYCODE_STEM_PRIMARY\x10\x88\x02\x12\x13\n\x0eKEYCODE_STEM_1\x10\x89\x02\x12\x13\n\x0eKEYCODE_STEM_2\x10\x8a\x02\x12\x13\n\x0eKEYCODE_STEM_3\x10\x8b\x02\x12\x19\n\x14KEYCODE_DPAD_UP_LEFT\x10\x8c\x02\x12\x1b\n\x16KEYCODE_DPAD_DOWN_LEFT\x10\x8d\x02\x12\x1a\n\x15KEYCODE_DPAD_UP_RIGHT\x10\x8e\x02\x12\x1c\n\x17KEYCODE_DPAD_DOWN_RIGHT\x10\x8f\x02\x12\x1f\n\x1aKEYCODE_MEDIA_SKIP_FORWARD\x10\x90\x02\x12 \n\x1bKEYCODE_MEDIA_SKIP_BACKWARD\x10\x91\x02\x12\x1f\n\x1aKEYCODE_MEDIA_STEP_FORWARD\x10\x92\x02\x12 \n\x1bKEYCODE_MEDIA_STEP_BACKWARD\x10\x93\x02\x12\x17\n\x12KEYCODE_SOFT_SLEEP\x10\x94\x02\x12\x10\n\x0bKEYCODE_CUT\x10\x95\x02\x12\x11\n\x0cKEYCODE_COPY\x10\x96\x02\x12\x12\n\rKEYCODE_PASTE\x10\x97\x02\x12!\n\x1cKEYCODE_SYSTEM_NAVIGATION_UP\x10\x98\x02\x12#\n\x1eKEYCODE_SYSTEM_NAVIGATION_DOWN\x10\x99\x02\x12#\n\x1eKEYCODE_SYSTEM_NAVIGATION_LEFT\x10\x9a\x02\x12$\n\x1fKEYCODE_SYSTEM_NAVIGATION_RIGHT\x10\x9b\x02\x12\x15\n\x10KEYCODE_ALL_APPS\x10\x9c\x02\x12\x14\n\x0fKEYCODE_REFRESH\x10\x9d\x02\x12\x16\n\x11KEYCODE_THUMBS_UP\x10\x9e\x02\x12\x18\n\x13KEYCODE_THUMBS_DOWN\x10\x9f\x02\x12\x1b\n\x16KEYCODE_PROFILE_SWITCH\x10\xa0\x02\x12\x18\n\x13KEYCODE_VIDEO_APP_1\x10\xa1\x02\x12\x18\n\x13KEYCODE_VIDEO_APP_2\x10\xa2\x02\x12\x18\n\x13KEYCODE_VIDEO_APP_3\x10\xa3\x02\x12\x18\n\x13KEYCODE_VIDEO_APP_4\x10\xa4\x02\x12\x18\n\x13KEYCODE_VIDEO_APP_5\x10\xa5\x02\x12\x18\n\x13KEYCODE_VIDEO_APP_6\x10\xa6\x02\x12\x18\n\x13KEYCODE_VIDEO_APP_7\x10\xa7\x02\x12\x18\n\x13KEYCODE_VIDEO_APP_8\x10\xa8\x02\x12\x1b\n\x16KEYCODE_FEATURED_APP_1\x10\xa9\x02\x12\x1b\n\x16KEYCODE_FEATURED_APP_2\x10\xaa\x02\x12\x1b\n\x16KEYCODE_FEATURED_APP_3\x10\xab\x02\x12\x1b\n\x16KEYCODE_FEATURED_APP_4\x10\xac\x02\x12\x17\n\x12KEYCODE_DEMO_APP_1\x10\xad\x02\x12\x17\n\x12KEYCODE_DEMO_APP_2\x10\xae\x02\x12\x17\n\x12KEYCODE_DEMO_APP_3\x10\xaf\x02\x12\x17\n\x12KEYCODE_DEMO_APP_4\x10\xb0\x02*Q\n\x0fRemoteDirection\x12\x15\n\x11UNKNOWN_DIRECTION\x10\x00\x12\x0e\n\nSTART_LONG\x10\x01\x12\x0c\n\x08\x45ND_LONG\x10\x02\x12\t\n\x05SHORT\x10\x03\x62\x06proto3')
|
|
17
|
-
|
|
18
|
-
_globals = globals()
|
|
19
|
-
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
20
|
-
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'remotemessage_pb2', _globals)
|
|
21
|
-
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
22
|
-
|
|
23
|
-
DESCRIPTOR._options = None
|
|
24
|
-
_globals['_REMOTEKEYCODE']._serialized_start=2677
|
|
25
|
-
_globals['_REMOTEKEYCODE']._serialized_end=9820
|
|
26
|
-
_globals['_REMOTEDIRECTION']._serialized_start=9822
|
|
27
|
-
_globals['_REMOTEDIRECTION']._serialized_end=9903
|
|
28
|
-
_globals['_REMOTEAPPLINKLAUNCHREQUEST']._serialized_start=31
|
|
29
|
-
_globals['_REMOTEAPPLINKLAUNCHREQUEST']._serialized_end=77
|
|
30
|
-
_globals['_REMOTERESETPREFERREDAUDIODEVICE']._serialized_start=79
|
|
31
|
-
_globals['_REMOTERESETPREFERREDAUDIODEVICE']._serialized_end=112
|
|
32
|
-
_globals['_REMOTESETPREFERREDAUDIODEVICE']._serialized_start=114
|
|
33
|
-
_globals['_REMOTESETPREFERREDAUDIODEVICE']._serialized_end=145
|
|
34
|
-
_globals['_REMOTEADJUSTVOLUMELEVEL']._serialized_start=147
|
|
35
|
-
_globals['_REMOTEADJUSTVOLUMELEVEL']._serialized_end=172
|
|
36
|
-
_globals['_REMOTESETVOLUMELEVEL']._serialized_start=175
|
|
37
|
-
_globals['_REMOTESETVOLUMELEVEL']._serialized_end=355
|
|
38
|
-
_globals['_REMOTESTART']._serialized_start=357
|
|
39
|
-
_globals['_REMOTESTART']._serialized_end=387
|
|
40
|
-
_globals['_REMOTEVOICEEND']._serialized_start=389
|
|
41
|
-
_globals['_REMOTEVOICEEND']._serialized_end=405
|
|
42
|
-
_globals['_REMOTEVOICEPAYLOAD']._serialized_start=407
|
|
43
|
-
_globals['_REMOTEVOICEPAYLOAD']._serialized_end=427
|
|
44
|
-
_globals['_REMOTEVOICEBEGIN']._serialized_start=429
|
|
45
|
-
_globals['_REMOTEVOICEBEGIN']._serialized_end=447
|
|
46
|
-
_globals['_REMOTETEXTFIELDSTATUS']._serialized_start=449
|
|
47
|
-
_globals['_REMOTETEXTFIELDSTATUS']._serialized_end=567
|
|
48
|
-
_globals['_REMOTEIMESHOWREQUEST']._serialized_start=569
|
|
49
|
-
_globals['_REMOTEIMESHOWREQUEST']._serialized_end=656
|
|
50
|
-
_globals['_REMOTEEDITINFO']._serialized_start=658
|
|
51
|
-
_globals['_REMOTEEDITINFO']._serialized_end=690
|
|
52
|
-
_globals['_REMOTEIMEBATCHEDIT']._serialized_start=692
|
|
53
|
-
_globals['_REMOTEIMEBATCHEDIT']._serialized_end=799
|
|
54
|
-
_globals['_REMOTEAPPINFO']._serialized_start=802
|
|
55
|
-
_globals['_REMOTEAPPINFO']._serialized_end=955
|
|
56
|
-
_globals['_REMOTEIMEKEYINJECT']._serialized_start=957
|
|
57
|
-
_globals['_REMOTEIMEKEYINJECT']._serialized_end=1076
|
|
58
|
-
_globals['_REMOTEKEYINJECT']._serialized_start=1078
|
|
59
|
-
_globals['_REMOTEKEYINJECT']._serialized_end=1180
|
|
60
|
-
_globals['_REMOTEPINGRESPONSE']._serialized_start=1182
|
|
61
|
-
_globals['_REMOTEPINGRESPONSE']._serialized_end=1216
|
|
62
|
-
_globals['_REMOTEPINGREQUEST']._serialized_start=1218
|
|
63
|
-
_globals['_REMOTEPINGREQUEST']._serialized_end=1265
|
|
64
|
-
_globals['_REMOTESETACTIVE']._serialized_start=1267
|
|
65
|
-
_globals['_REMOTESETACTIVE']._serialized_end=1300
|
|
66
|
-
_globals['_REMOTEDEVICEINFO']._serialized_start=1303
|
|
67
|
-
_globals['_REMOTEDEVICEINFO']._serialized_end=1431
|
|
68
|
-
_globals['_REMOTECONFIGURE']._serialized_start=1433
|
|
69
|
-
_globals['_REMOTECONFIGURE']._serialized_end=1512
|
|
70
|
-
_globals['_REMOTEERROR']._serialized_start=1514
|
|
71
|
-
_globals['_REMOTEERROR']._serialized_end=1582
|
|
72
|
-
_globals['_REMOTEMESSAGE']._serialized_start=1585
|
|
73
|
-
_globals['_REMOTEMESSAGE']._serialized_end=2674
|
|
74
|
-
# @@protoc_insertion_point(module_scope)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2/certificate_generator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2.egg-info/requires.txt
RENAMED
|
File without changes
|
{androidtvremote2-0.1.2 → androidtvremote2-0.2.1}/src/androidtvremote2.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|