Metadata-editor / src /

main.c

/*
 * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
 *
 * Licensed under the Apache License, Version 2.0 (the License);
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an AS IS BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "$(appName)-ref.h"
#include <glib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <storage.h>
#include <metadata_editor.h>

typedef struct appdata {
	Evas_Object *win;
	Evas_Object *conform;
	Evas_Object *layout;
	Evas_Object *nf;
} appdata_s;

Evas_Object *t_path;
Evas_Object *item_artist;
Evas_Object *item_title;
Evas_Object *item_album;
Evas_Object *item_genre;
Evas_Object *item_composer;
Evas_Object *item_copyright;
Evas_Object *item_year;
Evas_Object *item_description;
Evas_Object *item_track;
Evas_Object *item_comment;
Evas_Object *item_conductor;
Evas_Object *item_lyrics;
Evas_Object *cbox;

static void
win_delete_request_cb(void *data , Evas_Object *obj , void *event_info)
{
	ui_app_exit();
}

static Eina_Bool
nf_it_pop_cb(void *data, Elm_Object_Item *it)
{
	appdata_s *ad = data;
	/* Don't pop the last view but hide window */
	elm_win_lower(ad->win);
	return EINA_FALSE;
}

static void
err_popup(int ret)
{
	char err_val[50] = {0, };
	Evas_Object *popup = elm_popup_add(cbox);

	elm_object_style_set(popup, "toast");
	evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	snprintf(err_val, sizeof(err_val), "<font_size=30>Operation failed [%d]</font/>", ret);
	elm_object_text_set(popup, err_val);
	elm_popup_timeout_set(popup, 2.0);
	evas_object_smart_callback_add(popup, "timeout", NULL, NULL);

	evas_object_show(popup);
}

static void
noti_popup(const char *msg)
{
	Evas_Object *popup = elm_popup_add(cbox);

	elm_object_style_set(popup, "toast");
	evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	elm_object_text_set(popup, msg);
	elm_popup_timeout_set(popup, 2.0);
	evas_object_smart_callback_add(popup, "timeout", NULL, NULL);

	evas_object_show(popup);
}

static bool _storage_cb(int storage_id, storage_type_e type, storage_state_e state, const char *path, void *user_data)
{
	if(STORAGE_TYPE_INTERNAL == type) {
		int *internal_storage_id = (int *)user_data;
		if(NULL != internal_storage_id) {
			*internal_storage_id = storage_id;
		}
		return false;
	} else {
		return true;
	}
}


static void
update_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
	int ret = METADATA_EDITOR_ERROR_NONE;
	metadata_editor_h metadata = NULL;
	char full_path[100] = {0, };
	char *media_path = NULL;
	int internal_storage_id = -1;

	ret = storage_foreach_device_supported(_storage_cb, &internal_storage_id);
	if(STORAGE_ERROR_NONE != ret) {
		dlog_print(DLOG_ERROR, LOG_TAG, "storage_foreach_device_supported() failed! Error code = %d", ret);
		return;
	}

	ret = storage_get_root_directory(internal_storage_id, &media_path);
	if(STORAGE_ERROR_NONE != ret) {
		dlog_print(DLOG_ERROR, LOG_TAG, "storage_get_root_directory() failed! Error code = %d", ret);
		return;
	}

	ret = metadata_editor_create(&metadata);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	snprintf(full_path, sizeof(full_path), "%s/%s", media_path, elm_object_text_get(t_path));
	ret = metadata_editor_set_path(metadata, full_path);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}

	if(media_path) {
		free(media_path);
		media_path = NULL;
	}

	ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_ARTIST, elm_object_text_get(item_artist));
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_TITLE, elm_object_text_get(item_title));
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_ALBUM, elm_object_text_get(item_album));
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_GENRE, elm_object_text_get(item_genre));
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_AUTHOR, elm_object_text_get(item_composer));
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_COPYRIGHT, elm_object_text_get(item_copyright));
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_DATE, elm_object_text_get(item_year));
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_DESCRIPTION, elm_object_text_get(item_description));
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_TRACK_NUM, elm_object_text_get(item_track));
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_COMMENT, elm_object_text_get(item_comment));
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_CONDUCTOR, elm_object_text_get(item_conductor));
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	ret = metadata_editor_set_metadata(metadata, METADATA_EDITOR_ATTR_UNSYNCLYRICS, elm_object_text_get(item_lyrics));
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}

	ret = metadata_editor_update_metadata(metadata);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	ret = metadata_editor_destroy(metadata);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	noti_popup("<font_size=30>Update successful</font/>");
}

static void
get_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
	int ret = METADATA_EDITOR_ERROR_NONE;
	metadata_editor_h metadata = NULL;
	char full_path[100] = {0, };
	char *artist = NULL;
	char *title = NULL;
	char *album = NULL;
	char *genre = NULL;
	char *composer = NULL;
	char *copyright = NULL;
	char *date = NULL;
	char *description = NULL;
	char *comment = NULL;
	char *track_num = NULL;
	char *conductor = NULL;
	char *lyric = NULL;
	char *media_path = NULL;
	int internal_storage_id = -1;

	ret = storage_foreach_device_supported(_storage_cb, &internal_storage_id);
	if(STORAGE_ERROR_NONE != ret) {
		dlog_print(DLOG_ERROR, LOG_TAG, "storage_foreach_device_supported() failed! Error code = %d", ret);
		return;
	}

	ret = storage_get_root_directory(internal_storage_id, &media_path);
	if(STORAGE_ERROR_NONE != ret) {
		dlog_print(DLOG_ERROR, LOG_TAG, "storage_get_root_directory() failed! Error code = %d", ret);
		return;
	}

	ret = metadata_editor_create(&metadata);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	snprintf(full_path, sizeof(full_path), "%s/%s", media_path, elm_object_text_get(t_path));
	ret = metadata_editor_set_path(metadata, full_path);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}

	ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_ARTIST, &artist);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	elm_object_text_set(item_artist, artist);
	ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_TITLE, &title);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	elm_object_text_set(item_title, title);
	ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_ALBUM, &album);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	elm_object_text_set(item_album, album);
	ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_GENRE, &genre);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	elm_object_text_set(item_genre, genre);
	ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_AUTHOR, &composer);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	elm_object_text_set(item_composer, composer);
	ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_COPYRIGHT, &copyright);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	elm_object_text_set(item_copyright, copyright);
	ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_DATE, &date);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	elm_object_text_set(item_year, date);
	ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_DESCRIPTION, &description);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	elm_object_text_set(item_description, description);
	ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_TRACK_NUM, &track_num);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	elm_object_text_set(item_track, track_num);
	ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_COMMENT, &comment);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	elm_object_text_set(item_comment, comment);
	ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_CONDUCTOR, &conductor);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	elm_object_text_set(item_conductor, conductor);
	ret = metadata_editor_get_metadata(metadata, METADATA_EDITOR_ATTR_UNSYNCLYRICS, &lyric);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	elm_object_text_set(item_lyrics, lyric);

	metadata_editor_destroy(metadata);
	if(ret != METADATA_EDITOR_ERROR_NONE) {
		err_popup(ret);
		return;
	}
	noti_popup("<font_size=30>Read Successful</font/>");
	
	if(media_path) {
		free(media_path);
		media_path = NULL;
	}
}

static Evas_Object*
create_box(appdata_s *ad)
{
	Evas_Object *box;

	box = elm_box_add(ad->nf);
	elm_box_padding_set(box, 20, 20);
	elm_object_content_set(ad->nf, box);
	elm_box_horizontal_set(box, EINA_FALSE);
	evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_show(box);

	Evas_Object *abox = elm_box_add(box);
	Evas_Object *bbox = elm_box_add(box);
	cbox = elm_box_add(box);

	// Create a box for adding content
	elm_box_padding_set(abox, 10, 10);
	elm_box_horizontal_set(abox, EINA_TRUE);
	evas_object_size_hint_align_set(abox, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(abox, EVAS_HINT_EXPAND, 0.1);
	evas_object_show(abox);
	// Insert item
	Evas_Object *l_path = elm_label_add(abox);
	elm_object_text_set(l_path, "<font_size=30>Path</font/>");
	evas_object_size_hint_align_set(l_path, 0.5, 0.5);
	evas_object_size_hint_weight_set(l_path, 0.2, EVAS_HINT_EXPAND);
	evas_object_show(l_path);

	t_path = elm_entry_add(abox);
	char *path = "test.mp3";
	elm_object_text_set(t_path, path);
	evas_object_size_hint_align_set(t_path, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(t_path, 0.6, EVAS_HINT_EXPAND);
	evas_object_show(t_path);

	Evas_Object *bt_get = elm_button_add(abox);
	elm_object_text_set(bt_get, "<font_size=30>Get</font/>");
	elm_box_horizontal_set(bt_get, EINA_FALSE);
	evas_object_size_hint_align_set(bt_get, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(bt_get, 0.2, EVAS_HINT_EXPAND);
	evas_object_smart_callback_add(bt_get, "clicked", get_clicked_cb, NULL);
	evas_object_show(bt_get);

	// Create a box for adding content
	elm_box_padding_set(bbox, 10, 10);
	evas_object_size_hint_align_set(bbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(bbox, EVAS_HINT_EXPAND, 0.8);
	evas_object_show(bbox);

	Evas_Object *scroller = elm_scroller_add(bbox);
	evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
	elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
	elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_ON);
	evas_object_show(scroller);

	Evas_Object *content = elm_box_add(scroller);
	evas_object_size_hint_weight_set(content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_size_hint_align_set(content, EVAS_HINT_FILL, EVAS_HINT_FILL);
//	evas_object_show(content);
	elm_object_content_set(scroller, content);


	// Inser ITEM
	Evas_Object *title = elm_box_add(content);
	elm_box_horizontal_set(title, EINA_TRUE);
	evas_object_size_hint_align_set(title, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(title, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_show(title);

	Evas_Object *lbl_title = elm_label_add(title);
	elm_object_text_set(lbl_title, "<font_size=30> Title</font/>");
	evas_object_size_hint_align_set(lbl_title, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(lbl_title, 0.2, EVAS_HINT_EXPAND);
	evas_object_show(lbl_title);

	item_title = elm_entry_add(title);
	elm_object_text_set(item_title, NULL);
	evas_object_size_hint_align_set(item_title, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(item_title, 0.8, EVAS_HINT_EXPAND);
	evas_object_show(item_title);

	Evas_Object *artist = elm_box_add(content);
	elm_box_horizontal_set(artist, EINA_TRUE);
	evas_object_size_hint_align_set(artist, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(artist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_show(artist);

	Evas_Object *lbl_artist = elm_label_add(artist);
	elm_object_text_set(lbl_artist, "<font_size=30> Artist</font/>");
	evas_object_size_hint_align_set(lbl_artist, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(lbl_artist, 0.2, EVAS_HINT_EXPAND);
	evas_object_show(lbl_artist);

	item_artist = elm_entry_add(artist);
	elm_object_text_set(item_artist, NULL);
	evas_object_size_hint_align_set(item_artist, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(item_artist, 0.8, EVAS_HINT_EXPAND);
	evas_object_show(item_artist);

	Evas_Object *album = elm_box_add(content);
	elm_box_horizontal_set(album, EINA_TRUE);
	evas_object_size_hint_align_set(album, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(album, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_show(album);

	Evas_Object *lbl_album = elm_label_add(album);
	elm_object_text_set(lbl_album, "<font_size=30> Album</font/>");
	evas_object_size_hint_align_set(lbl_album, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(lbl_album, 0.2, EVAS_HINT_EXPAND);
	evas_object_show(lbl_album);

	item_album = elm_entry_add(album);
	elm_object_text_set(item_album, NULL);
	evas_object_size_hint_align_set(item_album, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(item_album, 0.8, EVAS_HINT_EXPAND);
	evas_object_show(item_album);

	Evas_Object *genre = elm_box_add(content);
	elm_box_horizontal_set(genre, EINA_TRUE);
	evas_object_size_hint_align_set(genre, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(genre, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_show(genre);

	Evas_Object *lbl_genre = elm_label_add(genre);
	elm_object_text_set(lbl_genre, "<font_size=30> Genre</font/>");
	evas_object_size_hint_align_set(lbl_genre, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(lbl_genre, 0.2, EVAS_HINT_EXPAND);
	evas_object_show(lbl_genre);

	item_genre = elm_entry_add(genre);
	elm_object_text_set(item_genre, NULL);
	evas_object_size_hint_align_set(item_genre, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(item_genre, 0.8, EVAS_HINT_EXPAND);
	evas_object_show(item_genre);

	Evas_Object *composer = elm_box_add(content);
	elm_box_horizontal_set(composer, EINA_TRUE);
	evas_object_size_hint_align_set(composer, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(composer, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_show(composer);

	Evas_Object *lbl_composer = elm_label_add(composer);
	elm_object_text_set(lbl_composer, "<font_size=30> Composer</font/>");
	evas_object_size_hint_align_set(lbl_composer, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(lbl_composer, 0.2, EVAS_HINT_EXPAND);
	evas_object_show(lbl_composer);

	item_composer = elm_entry_add(composer);
	elm_object_text_set(item_composer, NULL);
	evas_object_size_hint_align_set(item_composer, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(item_composer, 0.8, EVAS_HINT_EXPAND);
	evas_object_show(item_composer);

	Evas_Object *copyright = elm_box_add(content);
	elm_box_horizontal_set(copyright, EINA_TRUE);
	evas_object_size_hint_align_set(copyright, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(copyright, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_show(copyright);

	Evas_Object *lbl_copyright = elm_label_add(copyright);
	elm_object_text_set(lbl_copyright, "<font_size=30> Copyright</font/>");
	evas_object_size_hint_align_set(lbl_copyright, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(lbl_copyright, 0.2, EVAS_HINT_EXPAND);
	evas_object_show(lbl_copyright);

	item_copyright = elm_entry_add(copyright);
	elm_object_text_set(item_copyright, NULL);
	evas_object_size_hint_align_set(item_copyright, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(item_copyright, 0.8, EVAS_HINT_EXPAND);
	evas_object_show(item_copyright);

	Evas_Object *year = elm_box_add(content);
	elm_box_horizontal_set(year, EINA_TRUE);
	evas_object_size_hint_align_set(year, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(year, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_show(year);

	Evas_Object *lbl_year = elm_label_add(year);
	elm_object_text_set(lbl_year, "<font_size=30> Year</font/>");
	evas_object_size_hint_align_set(lbl_year, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(lbl_year, 0.2, EVAS_HINT_EXPAND);
	evas_object_show(lbl_year);

	item_year = elm_entry_add(year);
	elm_object_text_set(item_year, NULL);
	evas_object_size_hint_align_set(item_year, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(item_year, 0.8, EVAS_HINT_EXPAND);
	evas_object_show(item_year);

	Evas_Object *description = elm_box_add(content);
	elm_box_horizontal_set(description, EINA_TRUE);
	evas_object_size_hint_align_set(description, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(description, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_show(description);

	Evas_Object *lbl_description = elm_label_add(description);
	elm_object_text_set(lbl_description, "<font_size=30> Description</font/>");
	evas_object_size_hint_align_set(lbl_description, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(lbl_description, 0.2, EVAS_HINT_EXPAND);
	evas_object_show(lbl_description);

	item_description = elm_entry_add(description);
	elm_object_text_set(item_description, NULL);
	evas_object_size_hint_align_set(item_description, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(item_description, 0.8, EVAS_HINT_EXPAND);
	evas_object_show(item_description);

	Evas_Object *track = elm_box_add(content);
	elm_box_horizontal_set(track, EINA_TRUE);
	evas_object_size_hint_align_set(track, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(track, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_show(track);

	Evas_Object *lbl_track = elm_label_add(track);
	elm_object_text_set(lbl_track, "<font_size=30> Track</font/>");
	evas_object_size_hint_align_set(lbl_track, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(lbl_track, 0.2, EVAS_HINT_EXPAND);
	evas_object_show(lbl_track);

	item_track = elm_entry_add(track);
	elm_object_text_set(item_track, NULL);
	evas_object_size_hint_align_set(item_track, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(item_track, 0.8, EVAS_HINT_EXPAND);
	evas_object_show(item_track);

	Evas_Object *comment = elm_box_add(content);
	elm_box_horizontal_set(comment, EINA_TRUE);
	evas_object_size_hint_align_set(comment, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(comment, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_show(comment);

	Evas_Object *lbl_comment = elm_label_add(comment);
	elm_object_text_set(lbl_comment, "<font_size=30> Comment</font/>");
	evas_object_size_hint_align_set(lbl_comment, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(lbl_comment, 0.2, EVAS_HINT_EXPAND);
	evas_object_show(lbl_comment);

	item_comment = elm_entry_add(comment);
	elm_object_text_set(item_comment, NULL);
	evas_object_size_hint_align_set(item_comment, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(item_comment, 0.8, EVAS_HINT_EXPAND);
	evas_object_show(item_comment);

	Evas_Object *conductor = elm_box_add(content);
	elm_box_horizontal_set(conductor, EINA_TRUE);
	evas_object_size_hint_align_set(conductor, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(conductor, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_show(conductor);

	Evas_Object *lbl_conductor = elm_label_add(conductor);
	elm_object_text_set(lbl_conductor, "<font_size=30> Conductor</font/>");
	evas_object_size_hint_align_set(lbl_conductor, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(lbl_conductor, 0.2, EVAS_HINT_EXPAND);
	evas_object_show(lbl_conductor);

	item_conductor = elm_entry_add(conductor);
	elm_object_text_set(item_conductor, NULL);
	evas_object_size_hint_align_set(item_conductor, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(item_conductor, 0.8, EVAS_HINT_EXPAND);
	evas_object_show(item_conductor);

	Evas_Object *lyrics = elm_box_add(content);
	elm_box_horizontal_set(lyrics, EINA_TRUE);
	evas_object_size_hint_align_set(lyrics, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(lyrics, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_show(lyrics);

	Evas_Object *lbl_lyrics = elm_label_add(lyrics);
	elm_object_text_set(lbl_lyrics, "<font_size=30> Lyrics</font/>");
	evas_object_size_hint_align_set(lbl_lyrics, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(lbl_lyrics, 0.2, EVAS_HINT_EXPAND);
	evas_object_show(lbl_lyrics);

	item_lyrics = elm_entry_add(lyrics);
	elm_object_text_set(item_lyrics, NULL);
	evas_object_size_hint_align_set(item_lyrics, EVAS_HINT_FILL, 0.5);
	evas_object_size_hint_weight_set(item_lyrics, 0.8, EVAS_HINT_EXPAND);
	evas_object_show(item_lyrics);

	// Create a box for adding content
	evas_object_size_hint_align_set(cbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(cbox, EVAS_HINT_EXPAND, 0.1);
	evas_object_show(cbox);

	Evas_Object *bt_update = elm_button_add(cbox);
	elm_object_text_set(bt_update, "<font_size=30>Update Metadata</font/>");
	evas_object_size_hint_align_set(bt_update, EVAS_HINT_FILL, EVAS_HINT_FILL);
	evas_object_size_hint_weight_set(bt_update, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	evas_object_smart_callback_add(bt_update, "clicked", update_clicked_cb, NULL);
	evas_object_show(bt_update);

	elm_box_pack_end(box, abox);
	elm_box_pack_end(abox, l_path);
	elm_box_pack_end(abox, t_path);
	elm_box_pack_end(abox, bt_get);

	elm_box_pack_end(box, bbox);
	elm_box_pack_end(bbox, scroller);
	elm_box_pack_end(scroller, content);
	elm_box_pack_end(content, title);
	elm_box_pack_end(title, lbl_title);
	elm_box_pack_end(title, item_title);
	elm_box_pack_end(content, artist);
	elm_box_pack_end(artist, lbl_artist);
	elm_box_pack_end(artist, item_artist);
	elm_box_pack_end(content, album);
	elm_box_pack_end(album, lbl_album);
	elm_box_pack_end(album, item_album);
	elm_box_pack_end(content, genre);
	elm_box_pack_end(genre, lbl_genre);
	elm_box_pack_end(genre, item_genre);
	elm_box_pack_end(content, composer);
	elm_box_pack_end(composer, lbl_composer);
	elm_box_pack_end(composer, item_composer);
	elm_box_pack_end(content, copyright);
	elm_box_pack_end(copyright, lbl_copyright);
	elm_box_pack_end(copyright, item_copyright);
	elm_box_pack_end(content, year);
	elm_box_pack_end(year, lbl_year);
	elm_box_pack_end(year, item_year);
	elm_box_pack_end(content, description);
	elm_box_pack_end(description, lbl_description);
	elm_box_pack_end(description, item_description);
	elm_box_pack_end(content, track);
	elm_box_pack_end(track, lbl_track);
	elm_box_pack_end(track, item_track);
	elm_box_pack_end(content, comment);
	elm_box_pack_end(comment, lbl_comment);
	elm_box_pack_end(comment, item_comment);
	elm_box_pack_end(content, conductor);
	elm_box_pack_end(conductor, lbl_conductor);
	elm_box_pack_end(conductor, item_conductor);
	elm_box_pack_end(content, lyrics);
	elm_box_pack_end(lyrics, lbl_lyrics);
	elm_box_pack_end(lyrics, item_lyrics);

	elm_box_pack_end(box, cbox);
	elm_box_pack_end(cbox, bt_update);

	return box;
}

static Evas_Object*
create_main_view(appdata_s *ad)
{
	Elm_Object_Item *nf_it;
	Evas_Object *box;

	ad->nf = elm_naviframe_add(ad->conform);
	eext_object_event_callback_add(ad->nf, EEXT_CALLBACK_BACK, eext_naviframe_back_cb, ad);

	box = create_box(ad);
	nf_it = elm_naviframe_item_push(ad->nf, "Metadata Editor", NULL, NULL, box, NULL);
	elm_naviframe_item_pop_cb_set(nf_it, nf_it_pop_cb, ad);

	return ad->nf;
}

static void
create_base_gui(appdata_s *ad)
{
	Evas_Object *bg;

	/* Window */
	ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE);
	elm_win_conformant_set(ad->win, EINA_TRUE);
	elm_win_autodel_set(ad->win, EINA_TRUE);

	if (elm_win_wm_rotation_supported_get(ad->win)) {
		int rots[4] = { 0, 90, 180, 270 };
		elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4);
	}

	evas_object_smart_callback_add(ad->win, "delete,request", win_delete_request_cb, NULL);

	/* Conformant */
	ad->conform = elm_conformant_add(ad->win);
	elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW);
	elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_OPAQUE);
	evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
	elm_win_resize_object_add(ad->win, ad->conform);
	evas_object_show(ad->conform);

	/* Indicator BG */
	bg = elm_bg_add(ad->conform);
	elm_object_style_set(bg, "indicator/headerbg");
	elm_object_part_content_set(ad->conform, "elm.swallow.indicator_bg", bg);
	evas_object_show(bg);

	/* Naviframe */
	ad->nf = create_main_view(ad);
	elm_object_content_set(ad->conform, ad->nf);

	/* Show window after base gui is set up */
	evas_object_show(ad->win);
}

static bool
app_create(void *data)
{
	/* Hook to take necessary actions before main event loop starts
	   Initialize UI resources and application's data
	   If this function returns true, the main loop of application starts
	   If this function returns false, the application is terminated */
	appdata_s *ad = data;

	create_base_gui(ad);

	return true;
}

static void
app_control(app_control_h app_control , void *data)
{
	/* Handle the launch request. */
}

static void
app_pause(void *data)
{
	/* Take necessary actions when application becomes invisible. */
}

static void
app_resume(void *data)
{
	/* Take necessary actions when application becomes visible. */
}

static void
app_terminate(void *data)
{
	/* Release all resources. */
}

static void
ui_app_lang_changed(app_event_info_h event_info, void *user_data)
{
	/*APP_EVENT_LANGUAGE_CHANGED*/
	char *locale = NULL;
	system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &locale);
	elm_language_set(locale);
	free(locale);
	return;
}

static void
ui_app_orient_changed(app_event_info_h event_info, void *user_data)
{
	/*APP_EVENT_DEVICE_ORIENTATION_CHANGED*/
	return;
}

static void
ui_app_region_changed(app_event_info_h event_info, void *user_data)
{
	/*APP_EVENT_REGION_FORMAT_CHANGED*/
}

static void
ui_app_low_battery(app_event_info_h event_info, void *user_data)
{
	/*APP_EVENT_LOW_BATTERY*/
}

static void
ui_app_low_memory(app_event_info_h event_info, void *user_data)
{
	/*APP_EVENT_LOW_MEMORY*/
}

int
main(int argc, char *argv[])
{
	appdata_s ad = {0,};
	int ret = 0;

	ui_app_lifecycle_callback_s event_callback = {0,};
	app_event_handler_h handlers[5] = {NULL, };

	event_callback.create = app_create;
	event_callback.terminate = app_terminate;
	event_callback.pause = app_pause;
	event_callback.resume = app_resume;
	event_callback.app_control = app_control;

	ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, ui_app_low_battery, &ad);
	ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, ui_app_low_memory, &ad);
	ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, ui_app_orient_changed, &ad);
	ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, ui_app_lang_changed, &ad);
	ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, ui_app_region_changed, &ad);
	ui_app_remove_event_handler(handlers[APP_EVENT_LOW_MEMORY]);

	ret = ui_app_main(argc, argv, &event_callback, &ad);
	if (ret != APP_ERROR_NONE) {
		dlog_print(DLOG_ERROR, LOG_TAG, "ui_app_main() is failed. err = %d", ret);
	}

	return ret;
}