refine: use listview and add progress dailog