def hermit_enable_accessibility(self): """ Turn on accessibility service for Hermit. Raises: RequestHumanTakeover: If failed and user should do it manually. """ logger.hr('Enable accessibility service') interval = Timer(0.3) timeout = Timer(10, count=10).start() while 1: h = self.dump_hierarchy_adb() interval.wait() interval.reset() def appear(xpath): return bool(HierarchyButton(h, xpath)) def appear_then_click(xpath): b = HierarchyButton(h, xpath) if b: point = random_rectangle_point(b.button) logger.info(f'Click {point2str(*point)} @ {b}') self.click_adb(*point) return True else: return False if appear_then_click( '//*[@text="Hermit" and @resource-id="android:id/title"]'): continue if appear_then_click( '//*[@class="android.widget.Switch" and @checked="false"]' ): continue if appear_then_click('//*[@resource-id="android:id/button1"]'): # Just plain click here # Can't use uiautomator once hermit has access to accessibility service, # or uiautomator will get the access. break if appear( '//*[@class="android.widget.Switch" and @checked="true"]'): raise HermitError( 'Accessibility service already enable but get error') # End if timeout.reached(): logger.critical( 'Unable to turn on accessibility service for Hermit') logger.critical( '\n\n' 'Please do this manually:\n' '1. Find "Hermit" in accessibility setting and click it\n' '2. Turn it ON and click OK\n' '3. Switch back to AzurLane\n') raise RequestHumanTakeover
def globe_wait_until_stable(self): prev = self.globe_camera interval = Timer(1) confirm = Timer(0.5, count=1).start() for n in range(10): if not interval.reached(): interval.wait() interval.reset() self.globe_update() # End if np.linalg.norm(np.subtract(self.globe_camera, prev)) < 10: if confirm.reached(): logger.info('Globe map stabled') break else: confirm.reset() if self.handle_zone_pinned(): continue prev = self.globe_camera