// call a clean reboot void reboot_main_system(int cmd, int flags, char *arg) { verify_settings_file(); write_recovery_version(); verify_root_and_recovery(); finish_recovery(NULL); // sync() in here vold_unmount_all(); char buffer[80]; if ((unsigned)cmd == ANDROID_RB_POWEROFF) { strcpy(buffer, "shutdown,"); } else { strcpy(buffer, "reboot,"); } if (arg != NULL) { strncat(buffer, arg, sizeof(buffer)); } property_set(ANDROID_RB_PROPERTY, buffer); sleep(5); // Attempt to reboot using older methods in case the recovery // that we are updating does not support init property reboot // android_reboot() is defined in libcutils/android_reboot.c LOGI("trying legacy android_reboot() command\n"); android_reboot(cmd, flags, arg); }
// call a clean reboot void reboot_main_system(int cmd, int flags, char *arg) { write_recovery_version(); verify_root_and_recovery(); finish_recovery(NULL); // sync() in here vold_unmount_all(); android_reboot(cmd, flags, arg); }
void show_install_update_menu() { static char* headers[] = { "Install update from zip file", "", NULL }; char* install_menu_items[] = { "choose zip from sdcard", "install zip from sideload", "apply /sdcard/update.zip", "toggle signature verification", NULL, NULL }; char *other_sd = NULL; if (volume_for_path("/emmc") != NULL) { other_sd = "/emmc/"; install_menu_items[4] = "choose zip from internal sdcard"; } else if (volume_for_path("/external_sd") != NULL) { other_sd = "/external_sd/"; install_menu_items[4] = "choose zip from external sdcard"; } for (;;) { int chosen_item = get_menu_selection(headers, install_menu_items, 0, 0); switch (chosen_item) { case ITEM_SIG_CHECK: toggle_signature_check(); break; case ITEM_APPLY_UPDATE: { if (confirm_selection("Confirm install?", "Yes - Install /sdcard/update.zip")) install_zip(SDCARD_UPDATE_FILE); break; } case ITEM_CHOOSE_ZIP: show_choose_zip_menu("/sdcard/"); write_recovery_version(); break; case ITEM_APPLY_SIDELOAD: apply_from_adb(); break; case ITEM_CHOOSE_ZIP_INT: if (other_sd != NULL) show_choose_zip_menu(other_sd); break; default: return; } } }
void show_install_update_menu() { static char* headers[] = { "从SD卡选择ZIP格式文件进行刷机", "", NULL }; char* install_menu_items[] = { "从SD卡中选择一个ZIP格式刷机包", "从电脑用ADB载入刷机包", "直接应用/sdcard/update.zip刷机", "启用/禁用签名校验", NULL, NULL }; char *other_sd = NULL; if (volume_for_path("/emmc") != NULL) { other_sd = "/emmc/"; install_menu_items[4] = "从内置SD卡选择ZIP文件"; } else if (volume_for_path("/external_sd") != NULL) { other_sd = "/external_sd/"; install_menu_items[4] = "从外置SD卡选择ZIP文件"; } for (;;) { int chosen_item = get_menu_selection(headers, install_menu_items, 0, 0); switch (chosen_item) { case ITEM_SIG_CHECK: toggle_signature_check(); break; case ITEM_APPLY_UPDATE: { if (confirm_selection("确认安装?", "是-直接刷入/sdcard/update.zip")) install_zip(SDCARD_UPDATE_FILE); break; } case ITEM_CHOOSE_ZIP: show_choose_zip_menu("/sdcard/"); write_recovery_version(); break; case ITEM_APPLY_SIDELOAD: apply_from_adb(); break; case ITEM_CHOOSE_ZIP_INT: if (other_sd != NULL) show_choose_zip_menu(other_sd); break; default: return; } } }
// call a clean reboot void reboot_main_system(int cmd, int flags, char *arg) { write_recovery_version(); #ifdef BOARD_NATIVE_DUALBOOT device_verify_root_and_recovery(); #else verify_root_and_recovery(); #endif finish_recovery(NULL); // sync() in here vold_unmount_all(); android_reboot(cmd, flags, arg); }
void show_nandroid_menu() { static char* headers[] = { "Backup and Restore", "", NULL }; char* list[] = { "backup", "restore", "delete", "advanced restore", "free unused backup data", "choose default backup format", NULL, NULL, NULL, NULL, NULL, NULL, NULL }; char *other_sd = NULL; if (volume_for_path("/emmc") != NULL) { other_sd = "/emmc"; list[6] = "backup to internal sdcard"; list[7] = "restore from internal sdcard"; list[8] = "advanced restore from internal sdcard"; list[9] = "delete from internal sdcard"; } else if (volume_for_path("/external_sd") != NULL) { other_sd = "/external_sd"; list[6] = "backup to external sdcard"; list[7] = "restore from external sdcard"; list[8] = "advanced restore from external sdcard"; list[9] = "delete from external sdcard"; } #ifdef RECOVERY_EXTEND_NANDROID_MENU extend_nandroid_menu(list, 10, sizeof(list) / sizeof(char*)); #endif for (;;) { int chosen_item = get_filtered_menu_selection(headers, list, 0, 0, sizeof(list) / sizeof(char*)); if (chosen_item == GO_BACK) break; switch (chosen_item) { case 0: { char backup_path[PATH_MAX]; time_t t = time(NULL); struct tm *tmp = localtime(&t); if (tmp == NULL) { struct timeval tp; gettimeofday(&tp, NULL); sprintf(backup_path, "/sdcard/clockworkmod/backup/%d", tp.tv_sec); } else { strftime(backup_path, sizeof(backup_path), "/sdcard/clockworkmod/backup/%F.%H.%M.%S", tmp); } nandroid_backup(backup_path); write_recovery_version(); } break; case 1: show_nandroid_restore_menu("/sdcard"); write_recovery_version(); break; case 2: show_nandroid_delete_menu("/sdcard"); write_recovery_version(); break; case 3: show_nandroid_advanced_restore_menu("/sdcard"); write_recovery_version(); break; case 4: run_dedupe_gc(other_sd); break; case 5: choose_default_backup_format(); break; case 6: { char backup_path[PATH_MAX]; time_t t = time(NULL); struct tm *timeptr = localtime(&t); if (timeptr == NULL) { struct timeval tp; gettimeofday(&tp, NULL); if (other_sd != NULL) { sprintf(backup_path, "%s/clockworkmod/backup/%d", other_sd, tp.tv_sec); } else { break; } } else { if (other_sd != NULL) { char tmp[PATH_MAX]; strftime(tmp, sizeof(tmp), "clockworkmod/backup/%F.%H.%M.%S", timeptr); // this sprintf results in: // /emmc/clockworkmod/backup/%F.%H.%M.%S (time values are populated too) sprintf(backup_path, "%s/%s", other_sd, tmp); } else { break; } } nandroid_backup(backup_path); } break; case 7: if (other_sd != NULL) { show_nandroid_restore_menu(other_sd); } break; case 8: if (other_sd != NULL) { show_nandroid_advanced_restore_menu(other_sd); } break; case 9: if (other_sd != NULL) { show_nandroid_delete_menu(other_sd); } break; default: #ifdef RECOVERY_EXTEND_NANDROID_MENU handle_nandroid_menu(10, chosen_item); #endif break; } } }