import datetime import json import os import re import shutil import subprocess import time debug = True path = os.path.dirname(__file__) with open(os.path.join(path,'defaults.json')) as d,open(os.path.join(path,'keycodes.json')) as k: defaults = json.load(d) keycodes = json.load(k) exe = defaults['exe'] for key,value in defaults['local'].items(): defaults['local'][key] = os.path.expandvars(value) def decode_parcel(s): bytes_pat = re.compile(r'(? 0: self.__dict__.update(infos[self.serial]) break time.sleep(1) def send_keycode(self,code): try: keycode = keycodes[code] except KeyError: keycode = str(code) self.shell("input","keyevent",keycode) def unlock_phone(self,pin): if self.mode != 'recovery': if not decode_parcel(self.shell('service','call', 'power','12',out=True)): self.send_keycode('power') if decode_parcel(self.shell('service','call','trust','7',out=True)): self.send_keycode('space') self.shell("input","text",str(pin)) self.send_keycode('enter') #end of convenience #twrp def backup(self,*partitions,name = None): if self.mode != 'recovery': self.reboot('recovery') backupdir = defaults['local']['TWRP'] options_dict = { "system": "S", "data": "D", "cache": "C", "recovery": "R", "spec_part_1": "1", "spec_part_2": "2", "spec_part_3": "3", "boot": "B", "as": "A" } options = "".join(options_dict[option] for option in partitions) if not name: name = "backup_"+datetime.datetime.today().strftime(defaults['date_format']) filename = os.path.join(backupdir,name) self.shell("twrp","backup",options,name) phone_dir = "/data/media/0/TWRP/BACKUPS/{serial}/{name}".format(serial = self.serial,name = name) self.move(phone_dir,filename) def wipe(self,partition): if self.mode != 'recovery': self.reboot('recovery') self.shell("twrp","wipe",partition) def install(self,name): if self.mode != 'recovery': self.reboot('recovery') if os.path.exists(name): local_name = name name = os.path.split(name)[-1] update_path = '{}/{}'.format(defaults['remote']['updates'],name) if not self.exists(update_path): self.push(local_name,defaults['remote']['updates']) else: update_path = '{}/{}'.format(defaults['remote']['updates'],name) self.shell("twrp","install",update_path) #end of twrp if __name__ == "__main__" and debug: d = device.prim_device()