@@ -170,65 +170,78 @@ - (bool)menuIsAtTop
170170 return true ;
171171}
172172
173- - (bool )didMicroGamepadPress : (UIPressType) type
173+ - (bool )isSiri : (GCController *) controller
174174{
175- NSArray <GCController*>* controllers = [GCController controllers ];
176- if ([controllers count ] == 1 )
177- return !controllers[0 ].extendedGamepad ;
175+ return (controller.microGamepad && !controller.extendedGamepad && [@" Remote" isEqualToString: controller.vendorName]);
176+ }
178177
178+ - (bool )didMicroGamepadPress : (UIPressType)type
179+ {
179180 /* Are these presses that controllers send? */
180181 if (@available (tvOS 14.3 , *))
181182 if (type == UIPressTypePageUp || type == UIPressTypePageDown)
182183 return true ;
183184
184- bool microPress = false ;
185- bool extendedPress = false ;
186- for (GCController *controller in [GCController controllers ]) {
187- if (controller.extendedGamepad )
185+ NSArray <GCController*>* controllers = [GCController controllers ];
186+
187+ bool foundSiri = false ;
188+ bool nonSiriPress = false ;
189+ for (GCController *controller in controllers) {
190+ if ([self isSiri: controller])
191+ {
192+ foundSiri = true ;
193+ if (type == UIPressTypeSelect)
194+ return controller.microGamepad .buttonA .pressed ;
195+ else if (type == UIPressTypePlayPause)
196+ return controller.microGamepad .buttonX .pressed ;
197+ else if (@available (tvOS 13 , *)) {
198+ if (type == UIPressTypeMenu)
199+ return controller.microGamepad .buttonMenu .pressed ||
200+ controller.microGamepad .buttonMenu .isPressed ;
201+ }
202+ }
203+ else if (controller.extendedGamepad )
188204 {
189205 if (type == UIPressTypeUpArrow)
190- extendedPress |= controller.extendedGamepad .dpad .up .pressed
191- || controller.extendedGamepad .leftThumbstick .up .pressed
192- || controller.extendedGamepad .rightThumbstick .up .pressed ;
206+ nonSiriPress |= controller.extendedGamepad .dpad .up .pressed
207+ || controller.extendedGamepad .leftThumbstick .up .pressed
208+ || controller.extendedGamepad .rightThumbstick .up .pressed ;
193209 else if (type == UIPressTypeDownArrow)
194- extendedPress |= controller.extendedGamepad .dpad .down .pressed
195- || controller.extendedGamepad .leftThumbstick .down .pressed
196- || controller.extendedGamepad .rightThumbstick .down .pressed ;
210+ nonSiriPress |= controller.extendedGamepad .dpad .down .pressed
211+ || controller.extendedGamepad .leftThumbstick .down .pressed
212+ || controller.extendedGamepad .rightThumbstick .down .pressed ;
197213 else if (type == UIPressTypeLeftArrow)
198- extendedPress |= controller.extendedGamepad .dpad .left .pressed
199- || controller.extendedGamepad .leftShoulder .pressed
200- || controller.extendedGamepad .leftTrigger .pressed
201- || controller.extendedGamepad .leftThumbstick .left .pressed
202- || controller.extendedGamepad .rightThumbstick .left .pressed ;
214+ nonSiriPress |= controller.extendedGamepad .dpad .left .pressed
215+ || controller.extendedGamepad .leftShoulder .pressed
216+ || controller.extendedGamepad .leftTrigger .pressed
217+ || controller.extendedGamepad .leftThumbstick .left .pressed
218+ || controller.extendedGamepad .rightThumbstick .left .pressed ;
203219 else if (type == UIPressTypeRightArrow)
204- extendedPress |= controller.extendedGamepad .dpad .right .pressed
205- || controller.extendedGamepad .rightShoulder .pressed
206- || controller.extendedGamepad .rightTrigger .pressed
207- || controller.extendedGamepad .leftThumbstick .right .pressed
208- || controller.extendedGamepad .rightThumbstick .right .pressed ;
220+ nonSiriPress |= controller.extendedGamepad .dpad .right .pressed
221+ || controller.extendedGamepad .rightShoulder .pressed
222+ || controller.extendedGamepad .rightTrigger .pressed
223+ || controller.extendedGamepad .leftThumbstick .right .pressed
224+ || controller.extendedGamepad .rightThumbstick .right .pressed ;
209225 else if (type == UIPressTypeSelect)
210- extendedPress |= controller.extendedGamepad .buttonA .pressed ;
226+ nonSiriPress |= controller.extendedGamepad .buttonA .pressed ;
211227 else if (type == UIPressTypeMenu)
212- extendedPress |= controller.extendedGamepad .buttonB .pressed ;
228+ nonSiriPress |= controller.extendedGamepad .buttonB .pressed ;
213229 else if (type == UIPressTypePlayPause)
214- extendedPress |= controller.extendedGamepad .buttonX .pressed ;
215-
230+ nonSiriPress |= controller.extendedGamepad .buttonX .pressed ;
216231 }
217- else if (controller. microGamepad )
232+ else
218233 {
219- if (type == UIPressTypeSelect)
220- microPress |= controller.microGamepad .buttonA .pressed ;
221- else if (type == UIPressTypePlayPause)
222- microPress |= controller.microGamepad .buttonX .pressed ;
223- else if (@available (tvOS 13 , *)) {
224- if (type == UIPressTypeMenu)
225- extendedPress |= controller.microGamepad .buttonMenu .pressed ||
226- controller.microGamepad .buttonMenu .isPressed ;
227- }
234+ /* we have a remote that is not extended. some of these remotes send
235+ * spurious presses. the only way to get them to work properly is to
236+ * make the siri remote work improperly. */
237+ nonSiriPress = true ;
228238 }
229239 }
230240
231- return microPress || !extendedPress;
241+ if (!foundSiri || [controllers count ] == 1 )
242+ return foundSiri;
243+
244+ return !nonSiriPress;
232245}
233246
234247- (void )sendKeyForPress : (UIPressType)type down : (bool )down
0 commit comments