예제 #1
0
int wikilib_run(void)
{
	int sleep;
	long time_now;
	struct wl_input_event ev;
	int more_events = 0;
	unsigned long last_event_time = 0;
	int rc;


	/*
	 * test searching code...
	 */
	article_buf_pointer = NULL;
	search_init();
	history_list_init();
	malloc_status_simple();
	print_intro();
#ifndef INCLUDED_FROM_KERNEL
	if (!load_init_article(idx_init_article))
	{
		display_mode = DISPLAY_MODE_ARTICLE;
		last_display_mode = DISPLAY_MODE_INDEX;
	}
#endif
	render_string(SUBTITLE_FONT_IDX, -1, 55, MESSAGE_TYPE_A_WORD, strlen(MESSAGE_TYPE_A_WORD), 0);

	for (;;) {
		if (more_events)
			sleep = 0;
		else
		sleep = 1;
		if (!more_events && display_mode == DISPLAY_MODE_ARTICLE && render_article_with_pcf())
			sleep = 0;
		else if (!more_events && display_mode == DISPLAY_MODE_INDEX && render_search_result_with_pcf())
			sleep = 0;
		else if (!more_events && display_mode == DISPLAY_MODE_HISTORY && render_history_with_pcf())
			sleep = 0;
		if (finger_move_speed != 0)
		{
			scroll_article();
			sleep = 0;
		}

#ifdef INCLUDED_FROM_KERNEL
		time_now = get_time_ticks();
		if(display_mode == DISPLAY_MODE_INDEX)
		{
		    if (press_delete_button && get_search_string_len()>0)
		    {
			 sleep = 0;
			 if(time_diff(time_now, start_search_time) > seconds_to_ticks(3.5))
			 {
			     if (!clear_search_string())
			     {
				search_string_changed_remove = true;
				search_reload_ex(SEARCH_RELOAD_NORMAL);
			     }
			     press_delete_button = false;
			 }
			 else if (time_diff(time_now, start_search_time) > seconds_to_ticks(0.5) &&
				time_diff(time_now, last_delete_time) > seconds_to_ticks(0.25))
			 {
			     if (!search_remove_char(0))
			     {
				     search_string_changed_remove = true;
				     search_reload_ex(SEARCH_RELOAD_NO_POPULATE);
			     }
			     last_delete_time = time_now;
			 }
		    }
		}
		else if (display_mode == DISPLAY_MODE_RESTRICTED)
		{
		    if (press_delete_button && get_password_string_len()>0)
		    {
			 sleep = 0;
			 time_now = get_time_ticks();
			 if(time_diff(time_now, start_search_time) > seconds_to_ticks(3.5))
			 {
			     clear_password_string();
			     press_delete_button = false;
			 }
			 else if (time_diff(time_now, start_search_time) > seconds_to_ticks(0.5) &&
				time_diff(time_now, last_delete_time) > seconds_to_ticks(0.25))
			 {
			     password_remove_char();
			     last_delete_time = time_now;
			 }
		    }
		}

#endif

		if (!more_events && display_mode == DISPLAY_MODE_INDEX && fetch_search_result(0, 0, 0))
		{
		    sleep = 0;
		}

		if (keyboard_key_reset_invert(KEYBOARD_RESET_INVERT_CHECK)) // check if need to reset invert
			sleep = 0;

		if (check_invert_link()) // check if need to invert link
			sleep = 0;

		if (sleep)
		{
			if (time_diff(get_time_ticks(), last_event_time) > seconds_to_ticks(15))
				rc = history_list_save(HISTORY_SAVE_POWER_OFF);
			else
				rc = history_list_save(HISTORY_SAVE_NORMAL);
			if (rc > 0)
			{
#ifdef INCLUDED_FROM_KERNEL
				delay_us(200000); // for some reason, save may not work if no delay
#endif
			}
			else if (rc < 0)
				sleep = 0; // waiting for last_event_time timeout to save the history
		}

		wl_input_wait(&ev, sleep);
		more_events = 1;
		switch (ev.type) {
		case WL_INPUT_EV_TYPE_CURSOR:
			handle_cursor(&ev);
			last_event_time = get_time_ticks();
			break;
		case WL_INPUT_EV_TYPE_KEYBOARD:
			if (ev.key_event.value != 0)
			{
				b_show_scroll_bar = 0;
				handle_key_release(ev.key_event.keycode);
			}
			last_event_time = get_time_ticks();
			break;
		case WL_INPUT_EV_TYPE_TOUCH:
			handle_touch(&ev);
			last_event_time = ev.touch_event.ticks;
			break;
		default:
			more_events = 0;
			break;
		}
	}

	/* never reached */
	return 0;
}
예제 #2
0
void handle_password_key(char keycode)
{
	switch (restricted_screen_mode)
	{
	case RESTRICTED_SCREEN_FIRST_TIME_PASSWORD:
	case RESTRICTED_SCREEN_SET_PASSWORD:
	case RESTRICTED_SCREEN_CONFIRM_PASSWORD:
	case RESTRICTED_SCREEN_CHECK_PASSWORD:
	case RESTRICTED_SCREEN_CHANGE_PASSWORD:
		if (keycode == 'Y') {
			if (restricted_screen_mode == RESTRICTED_SCREEN_FIRST_TIME_PASSWORD)
			{
				password_str_len = 0;
				keyboard_set_mode(KEYBOARD_PASSWORD_CHAR);
				enter_password_screen(get_nls_text("set_password"));
				restricted_screen_mode = RESTRICTED_SCREEN_SET_PASSWORD;
			}
			else if (restricted_screen_mode == RESTRICTED_SCREEN_SET_PASSWORD && password_str_len > 0)
			{
				restricted_screen_mode = RESTRICTED_SCREEN_CONFIRM_PASSWORD;
				strcpy(password1, password_string);
				password_str_len = 0;
				if (restriction_filter_off == -1)
					enter_password_screen(get_nls_text("re_enter_password"));
				else
					enter_password_screen(get_nls_text("re_enter_new_password"));
			}
			else if (restricted_screen_mode == RESTRICTED_SCREEN_CONFIRM_PASSWORD && password_str_len > 0)
			{
				if (strcmp(password1, password_string))
				{
					password_str_len = 0;
					restricted_screen_mode = RESTRICTED_SCREEN_SET_PASSWORD;
					enter_password_screen(get_nls_text("passwords_not_match"));
				}
				else
				{
					restriction_filter_off = 0;
					save_password(1);
					restricted_screen_mode = RESTRICTED_SCREEN_FILTER_ON_OFF;
					filter_on_off();
				}
			}
			else if (password_str_len > 0)
			{
				check_password();
			}
		} else if (keycode == WL_KEY_BACKSPACE) {
			password_remove_char();
		} else if (is_supported_search_char(keycode)) {
			password_add_char(tolower(keycode));
		}
		break;
	case RESTRICTED_SCREEN_FILTER_ON_OFF:
		if (keycode == 'Y') {
			restriction_filter_off = 0;
			if (init_filtering)
			{
				init_filtering = 0;
				search_set_selection(-1);
				display_mode = DISPLAY_MODE_INDEX;
				keyboard_set_mode(wiki_default_keyboard());
				repaint_search();
			}
			else
			{
				display_mode = DISPLAY_MODE_ARTICLE;
				display_retrieved_article(saved_idx_article);
			}
		} else if (keycode == 'N') {
			restriction_filter_off = 1;
			save_password(2);
			if (init_filtering)
			{
				init_filtering = 0;
				search_set_selection(-1);
				display_mode = DISPLAY_MODE_INDEX;
				keyboard_set_mode(wiki_default_keyboard());
				repaint_search();
			}
			else
			{
				display_mode = DISPLAY_MODE_ARTICLE;
				display_retrieved_article(saved_idx_article);
			}
		}
		break;
	case RESTRICTED_SCREEN_FILTER_OPTION:
		if (keycode == 'Y') {
			filter_option_to_set = FILTER_OPTION_TO_SET_ON;
			password_str_len = 0;
			check_password();
		}
		else if (keycode == 'N') {
			filter_option_to_set = FILTER_OPTION_TO_SET_OFF;
			password_str_len = 0;
			check_password();
		}
		if (keycode == 'P') {
			password_str_len = 0;
			keyboard_set_mode(KEYBOARD_PASSWORD_CHAR);
			enter_password_screen(get_nls_text("enter_old_password"));
			restricted_screen_mode = RESTRICTED_SCREEN_CHANGE_PASSWORD;
		}
		break;
	default:
		break;
	}
}