Code Monkey home page Code Monkey logo

itimeu's Introduction

I Time U

1. I Time U 는 어떤 앱인가?

I Time U는 To do list와 Pomodoro 기법을 합친 시간 관리 어플리케이션이다.

2. I Time U의 목적

I Time U는 타이머 애플리케이션으로 사용자가 할 일(Task)을 손쉽게 관리하도록 하고, 사용자의 집중을 도우며, 일에 대한 성취감을 느낄 수 있도록 만든다는 목적을 갖는다. 이는 포모도로 기법1) 을 어플리케이션에 적용함으로써 실현할 수 있다.

3. I Time U 지원 버전

아이스크림 샌드위치(Android 4.0.3/API 15) ~ 오레오(Android 8.0/API 26)

4. I Time U 사용자 매뉴얼

Intro

(1) I TIME U 최초 실행 시 보여지는 인트로.

intro_pages 포모도로에 친숙하지 않은 사용자를 위해 핵심적인 개념을 담은 가이드라인을 제공한다.

List

(1) Blank list

할 일이 추가되지 않은 상태의 빈 리스트이다. 구성은 다음과 같다.
  • 달성률: 최상단에 위치해 있으며 화면의 날짜에 해당하는 (달성한 포모도로의 단위 합)/(총 포모도로의 단위 합) 의 백분율과 실제 단위를 보여준다.

  • 날짜: 표시되는 날짜에 해당하는 할 일 리스트를 화면에 보여준다. 좌/우 클릭으로 이전 날짜/다음 날짜로 이동할 수 있으며, 가운데 날짜를 클릭 시 달력 다이얼로그가 띄워진다. 날짜 선택 시 해당 날짜의 리스트로 이동할 수 있다.

  • 할 일 추가 버튼: 버튼을 클릭하면 할 일을 추가할 수 있게 된다.

(2) Add

할 일을 추가하기 위한 액티비티이다. 구성은 다음과 같다.
  • 할 일의 이름: 해야 할 일의 이름을 입력한다. 필수값으로, 누락될 경우 shake 애니메이션이 발생하며 할 일을 추가할 수 없게 된다.

  • 할 일에 대한 세부사항: 해야 할 일의 세부사항을 입력한다. 작성하지 않아도 무방하다.

  • 포모도로: 몇 번의 포모도로를 수행할 지 결정한다. 최소 1회, 최대 20회까지 설정할 수 있다.

  • 날짜: 할 일을 등록할 날짜를 선택한다. 자유로운 날짜 선택이 가능하다.

(3) Edit

할 일/마무리 된 일의 내용을 수정한다. 구성은 (2) Add 와 동일하다.
  • 포모도로 추가사항: 이미 완료된 포모도로보다 작은 단위를 선택할 수 없다.

(4) List

할 일 / 진행 중인 일 / 완료한 일이 리스트에 나열된다. 상태는 다음과 같다.
  • 할 일: (총 포모도로의 수) > (완료한 포모도로의 수) 이면서, 타이머에 등록되어 일을 진행하고 있지 않은 상태이다. 클릭 시 타이머로 이동한다.

  • 진행 중인 일: 타이머에 등록되어 일이 진행되고 있는 상태이다. 클릭 시 타이머로 이동한다.

  • 완료한 일: (총 포모도로의 수) = (완료한 포모도로의 수) 로 일이 완료된 상태이다. 클릭해도 타이머로 이동하지 않는다. (토스트 메세지 출력)

  • 할 일 / 진행 중인 일 / 완료한 일을 길게 클릭할 경우: 해당 일을 수정 / 삭제 할 수 있는 메뉴가 나타난다. 단, 진행 중인 일에서는 수정 / 삭제를 클릭해도 해당 액션을 수행할 수 없다. (토스트 메세지 출력)



Timer

(1) 타이머 시작 및 진행

  • 리스트에서 클릭된 작업은 타이머에서 그 이름이 표시된다.
  • START 버튼을 누르면 타이머가 작동되고, 프로세스 바가 늘어난다.
  • STOP 버튼을 누르면 현재 작업은 취소되고, 포모도로가 작업을 시작하지 않았음으로 표시된다.

  • 작업이 시작되면 상태 알람 줄에 현재 남은 시간과 작업 이름이 표시된다.
  • 작업이 완료됐을 때 진동 또는 알람이 울리면서 작업이 완료되었음을 알린다.

(2) Short break time

  • 한 포모도로가 마무리되면 리스트에 완료됐음이 표시되고 휴식 시간이 시작된다.
  • 버튼의 작동은 포모도로 세션 때와 동일하다.

(3) Long break time

  • 포모도로 작업이 설정된 세션 반복 수만큼 도달하면 긴 쉬는 시간이 시작된다.

Statistics

(1) Week

오늘 날짜를 포함한 이전 일주일의 기록을 그래프로 나타낸다. 그래프의 데이터는 해당 날짜 별 `목표한 총 포모도로의 합`과 `완료한 총 포모도로의 합`으로 구성된다.

(2) Month

오늘 날짜를 포함한 이전 한 달의 기록을 그래프로 나타낸다. 데이터 구성은 (1) Week 와 동일하다.

(3) Custom

Blank graph

커스텀 통계는 사용자가 시작 날짜와 끝 날짜를 선택해야 그래프가 활성화된다.

시작 날짜를 달력 다이얼로그에서 선택하고, 마찬가지로 끝 날짜를 선택하면 그래프가 생성된다. 단, 시작 날짜와 끝 날짜의 차이는 1일 이상이어야 한다. (1일 보다 작을 시 토스트 메세지 출력)



Setting

(1) general: 각 타이머에 대한 전반적 설정이다.

  • work session duration: 작업 시간의 설정이다.
  • break duration: 휴식 시간의 설정이다.
  • long break duration: 설정해둔 수만큼의 세션이 지났을 때 갖는 긴 휴식 시간의 설정이다.
  • work sessions before a long break: 긴 휴식 시간을 갖기까지 보내는 세션 수의 설정이다.

(2) when a session is over: 타이머가 끝났을 때 알림 방식을 설정한다.

  • play sound when session ends: 폰 설정에서 소리가 켜져 있을 경우 소리 알림을 보낸다.
  • vibrate when session ends: 진동 알림을 보낸다.

About

I Time U 의 정보를 보여준다. 구성은 다음과 같다.

  • Version: 앱의 버전을 나타낸다.

  • Open licenses: 앱에 사용된 오픈 소스 라이브러리와, 상업적으로 사용가능한 이미지의 라이센스를 보여준다.

  • Feedback: 앱에 대한 피드백을 줄 수 있도록 메일을 연결한다.

  • Support language: 앱이 지원하는 언어를 보여준다. 휴대폰 단말의 설정 언어에 따라 영어와 한국어를 지원한다.

1) 포모도로 기법이란?

포모도로 기법(pomodoro technique)은 시간 관리 중에서도 작업 우선순위가 아닌 시간 우선순위에 초점을 둔 테크닉이다. 짧은 작업과 짧은 휴식을 계속 반복하기 때문에 가볍게 사용할 수 있고, 직장인, 학생 등 누구나 쉽게 활용할 수 있다. 기법의 적용은 다음과 같이 이루어진다. 25분(default value) 단위로 일을 처리하고, 일 처리 직후에 짧은 쉬는시간(short break time) 5분(default value)과 4번의 일 처리 후에 긴 쉬는시간(long break time) 25분을 제공한다

일반적인 시간 관리법인 to-do list나 프랭클린 플래너 등은 시간보다 할 일 자체에 무게를 두는데, 그 일을 시작하고 집중하게 할 만한 동기와 압력은 제공하지 못한다. 그러므로 이러한 기법들에 시간을 우선으로 하는 포모도로를 합하면, 전체적인 할 일은 리스트로 관리하되 개별의 일들은 포모도로를 통해 완료하도록 할 수 있으며, 이는 결과적으로 생산성 향상으로 이어진다.

itimeu's People

Contributors

jiunoh avatar lynring24 avatar snowflake-1117 avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar

itimeu's Issues

[About] 완료

About은

  1. Version(현재 앱의 버전)
  2. Open licenses(사용한 오픈소스 라이브러리)
  3. Feedback(이메일 피드백) 의 요소를 가지며, 구성 화면은 다음과 같습니다.

[Readme.md] 문서 작성

다음은 Readme.md 문서에 작성될 내용입니다.

I Time U

1. I Time U 는 어떤 앱인가?

I Time U는 To do list와 Pomodoro 기법을 합친 시간 관리 어플리케이션이다.

2. I Time U의 목적

I Time U는 타이머 애플리케이션으로 사용자가 할 일(Task)을 손쉽게 관리하도록 하고, 사용자의 집중을 도우며, 일에 대한 성취감을 느낄 수 있도록 만든다는 목적을 갖는다. 이는 포모도로 기법1) 을 어플리케이션에 적용함으로써 실현할 수 있다.

3. I Time U 사용자 매뉴얼

Intro

intro_pages

I TIME U 최초 실행 시 보여지는 인트로이다. 포모도로에 친숙하지 않은 사용자를 위해 핵심적인 개념을 담은 가이드라인을 제공한다.

List

(1) Blank list

할 일이 추가되지 않은 상태의 빈 리스트이다. 구성은 다음과 같다.
  • 달성률: 최상단에 위치해 있으며 화면의 날짜에 해당하는 (달성한 포모도로의 단위 합)/(총 포모도로의 단위 합) 의 백분율과 실제 단위를 보여준다.

  • 날짜: 표시되는 날짜에 해당하는 할 일 리스트를 화면에 보여준다. 좌/우 클릭으로 이전 날짜/다음 날짜로 이동할 수 있으며, 가운데 날짜를 클릭 시 달력 다이얼로그가 띄워진다. 날짜 선택 시 해당 날짜의 리스트로 이동할 수 있다.

  • 할 일 추가 버튼: 버튼을 클릭하면 할 일을 추가할 수 있게 된다.

(2) Add

할 일을 추가하기 위한 액티비티이다. 구성은 다음과 같다.
  • 할 일의 이름: 해야 할 일의 이름을 입력한다. 필수값으로, 누락될 경우 shake 애니메이션이 발생하며 할 일을 추가할 수 없게 된다.

  • 할 일에 대한 세부사항: 해야 할 일의 세부사항을 입력한다. 작성하지 않아도 무방하다.

  • 포모도로: 몇 번의 포모도로를 수행할 지 결정한다. 최소 1회, 최대 20회까지 설정할 수 있다.

  • 날짜: 할 일을 등록할 날짜를 선택한다. 자유로운 날짜 선택이 가능하다.

(3) Edit

할 일/마무리 된 일의 내용을 수정한다. 구성은 (2) Add 와 동일하다.
  • 포모도로 추가사항: 이미 완료된 포모도로보다 작은 단위를 선택할 수 없다.

(4) List

할 일 / 진행 중인 일 / 완료한 일이 리스트에 나열된다. 상태는 다음과 같다.
  • 할 일: (총 포모도로의 수) > (완료한 포모도로의 수) 이면서, 타이머에 등록되어 일을 진행하고 있지 않은 상태이다. 클릭 시 타이머로 이동한다.

  • 진행 중인 일: 타이머에 등록되어 일이 진행되고 있는 상태이다. 클릭 시 타이머로 이동한다.

  • 완료한 일: (총 포모도로의 수) = (완료한 포모도로의 수) 로 일이 완료된 상태이다. 클릭해도 타이머로 이동하지 않는다. (토스트 메세지 출력)

  • 할 일 / 진행 중인 일 / 완료한 일을 길게 클릭할 경우: 해당 일을 수정 / 삭제 할 수 있는 메뉴가 나타난다. 단, 진행 중인 일에서는 수정 / 삭제를 클릭해도 해당 액션을 수행할 수 없다. (토스트 메세지 출력)

Statistics

(1) Week

오늘 날짜를 포함한 이전 일주일의 기록을 그래프로 나타낸다. 그래프의 데이터는 해당 날짜 별 `목표한 총 포모도로의 합`과 '완료한 총 포모도로의 합`으로 구성된다.

(2) Month

오늘 날짜를 포함한 이전 한 달의 기록을 그래프로 나타낸다. 데이터 구성은 (1) Week 와 동일하다.

(3) Custom

Blank graph

커스텀 통계는 사용자가 시작 날짜와 끝 날짜를 선택해야 그래프가 활성화된다.

시작 날짜를 달력 다이얼로그에서 선택하고, 마찬가지로 끝 날짜를 선택하면 그래프가 생성된다. 단, 시작 날짜와 끝 날짜의 차이는 1일 이상이어야 한다. (1일 보다 작을 시 토스트 메세지 출력)

About

I Time U 의 정보를 보여준다. 구성은 다음과 같다.

  • Version: 앱의 버전을 나타낸다.

  • Open licenses: 앱에 사용된 오픈 소스 라이브러리와, 상업적으로 사용가능한 이미지의 라이센스를 보여준다.

  • Feedback: 앱에 대한 피드백을 줄 수 있도록 메일을 연결한다.

  • Support language: 앱이 지원하는 언어를 보여준다. 휴대폰 단말의 설정 언어에 따라 영어와 한국어를 지원한다.

1) 포모도로 기법이란?

포모도로 기법(pomodoro technique)은 시간 관리 중에서도 작업 우선순위가 아닌 시간 우선순위에 초점을 둔 테크닉이다. 짧은 작업과 짧은 휴식을 계속 반복하기 때문에 가볍게 사용할 수 있고, 직장인, 학생 등 누구나 쉽게 활용할 수 있다. 기법의 적용은 다음과 같이 이루어진다. 25분(default value) 단위로 일을 처리하고, 일 처리 직후에 짧은 쉬는시간(short break time) 5분(default value)과 4번의 일 처리 후에 긴 쉬는시간(long break time) 25분을 제공한다

일반적인 시간 관리법인 to-do list나 프랭클린 플래너 등은 시간보다 할 일 자체에 무게를 두는데, 그 일을 시작하고 집중하게 할 만한 동기와 압력은 제공하지 못한다. 그러므로 이러한 기법들에 시간을 우선으로 하는 포모도로를 합하면, 전체적인 할 일은 리스트로 관리하되 개별의 일들은 포모도로를 통해 완료하도록 할 수 있으며, 이는 결과적으로 생산성 향상으로 이어진다.

2017-08-16

  1. swap 처리 여부와 그에 따른 디자인 및 fragmnet/activity 여부 변동
  2. app을 back으로 돌림 여부 -> Thread로 처리
  3. 이번주에 어디까지 개발할지(오늘 ~ 다음주 화), 얼만큼 개발했는지
    4. Intent의 중첩 처리-> Intent Flag

List implementation details

1. 기본 화면


Done

달성률 표시

  • 리스트 날짜에 해당하는 아이템들의 (완료 포모도로 단위의 합) / (총 목표 포모도로 단위의 합)이 백분율로 표기
  • 부가로 자세한 달성 갯수가 보여짐

날짜 버튼

  • 이미지가 첨부된 버튼에 DatePicker로 선택한 날짜가 출력
  • 클릭 시 DatePickerDialog가 활성화


아이템 리스트

  • 초기에 추가한 To-do아이템이 없을 시 empty view 활성화
  • 이때 하단의 + 버튼을 클릭하면 아이템을 추가 가능
  • 아이템의 내용은 할 일의 이름, 할 일의 분량(혹은 내용), 완료 포모도로 단위/목표 포모도로 단위로 구성
  • 아이템은 하단에 추가되며 페이지를 넘어갈 시 스크롤 기능을 지원
  • 상단 날짜에 따라 아이템이 리스트에 노출됨

To Do

타이머와의 연동

  • 할 일 status 아이템 클릭시 해당 날짜와 오늘의 날짜가 동일할 경우 타이머로 넘어가는 이벤트 활성화
  • 아닐 경우 alert 다이얼로그를 띄우고 타이머로 전환되지 않음
  • 타이머 시간이 끝날 시 완료 포모도로 단위 증가
  • 타이머 시간 진행 시 status 현재로 변환
  • 목표 포모도로 단위 달성 시 status 완료로 변환 후 터치 이벤트 비활성화

2. 할 일 아이템 추가


Done

디비 생성(디비 명: ITimeU.db, 테이블 명: list)

  • id(아이템에 부여되는 아이디) : INTEGER PRIMARY KEY AUTOINCREMENT
  • name(할 일의 이름) : TEXT NOT NULL
  • quantity(할 일의 양) detail : TEXT
  • date(생성시 할당한 날짜) : TEXT
  • itemTotalUnit(목표 포모도로 단위) : INTEGER NOT NULL DEFAULT 1
  • unit(수행한 포모도로 단위) : INTEGER NOT NULL DEFAULT 0
  • status(상태) : INTEGER NOT NULL DEFAULT 0

아이템 추가 데이터베이스와 연동

  • 할 일의 이름, 할 일의 분량(혹은 내용), 목표 포모도로 단위를 사용자로부터 입력받음
  • 나머지 컬럼은 디폴트 값으로 자동 생성(다만 id는 자동 증가, date는 아이템을 추가할 때 리스트에 나오는 날짜로 저장)
  • 아이템 추가(혹은 수정) 시 작성 중 뒤로가기 버튼/취소 버튼을 누르면 아래와 같이 Confirm 다이얼로그 발생

입력 데이터 누락시

  • name은 필수 값이므로 입력 누락 시 shake 이벤트 발생
  • quantitydetail는 추가 입력 값이므로 누락 가능
  • unit(목표 포모도로 단위)는 초기값이 1, 설정 가능한 값이 1~20 이므로 잘못된 값을 입력할 수 없음

Issue

quantity를 memo로 전환하는 건 어떨지

날짜를 Add 액티비티 안에서도 수정할 수 있게 할 것인지(직관성)

3. 아이템 수정 및 삭제


Done

아이템 길게 클릭 시 수정/삭제 가능

  • 수정을 누를 시 수정 화면으로 이동(이름, 분량, 목표 포모도로 단위 수정 가능)
  • 삭제를 누를 시 Confirm 다이얼로그 발생

To Do

  • 아이템 수정 시 목표 포모도로 단위가 완료한 포모도로 단위 작을 경우 예외처리 해주기

[통계] 진행상황

input : 단위
-> dropdown / radio / text / seekbar

output: 달성률 , 그래프

List id name

1. activity_list

GridLayout

  • title_grid_layout
  • item_list_grid_layout

FloatingActionButton

  • add_fab_btn

2. add_dialog

EditText

  • name_edit_txt
  • quantity_edit_txt

Button

  • add_cancel_btn
  • add_ok_btn

타이머에서 목록으로 넘어가는 action

좌우로 스왑하는 방식 vs 메뉴바로 이동

전자가 더 직관적인거 같긴 하고, @snow-flake1117이 얘기했던 fragment를 적용
메뉴 바 > 세팅, 통계,about 이 들어감

※ app의 메인 화면은 그대로 timer로 쓰는지 의논

2017-08-09

  • 통계 UI
  • 전체적인 UI
  • 현재 진행 상태
  • TODO

[Timer] Back Press error

백 버튼을 누를 시 finish 처리는 되었지만, 아래의 에러가 발생합니다.

09-04 15:16:07.243 12877-12877/com.itti7.itimeu E/ActivityThread: Activity com.itti7.itimeu.MainActivity has leaked ServiceConnection com.itti7.itimeu.TimerFragment$2@3a90c87 that was originally bound here
                                                                  android.app.ServiceConnectionLeaked: Activity com.itti7.itimeu.MainActivity has leaked ServiceConnection com.itti7.itimeu.TimerFragment$2@3a90c87 that was originally bound here
                                                                      at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:1336)
                                                                      at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:1231)
                                                                      at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1478)
                                                                      at android.app.ContextImpl.bindService(ContextImpl.java:1450)
                                                                      at android.content.ContextWrapper.bindService(ContextWrapper.java:636)
                                                                      at com.itti7.itimeu.TimerFragment.onStart(TimerFragment.java:191)
                                                                      at android.support.v4.app.Fragment.performStart(Fragment.java:2265)
                                                                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1369)
                                                                      at android.support.v4.app.FragmentManagerImpl.performPendingDeferredStart(FragmentManager.java:1161)
                                                                      at android.support.v4.app.FragmentManagerImpl.startPendingDeferredFragments(FragmentManager.java:1678)
                                                                      at android.support.v4.app.LoaderManagerImpl$LoaderInfo.onLoadComplete(LoaderManager.java:462)
                                                                      at android.support.v4.content.Loader.deliverResult(Loader.java:126)
                                                                      at android.support.v4.content.CursorLoader.deliverResult(CursorLoader.java:105)
                                                                      at android.support.v4.content.CursorLoader.deliverResult(CursorLoader.java:37)
                                                                      at android.support.v4.content.AsyncTaskLoader.dispatchOnLoadComplete(AsyncTaskLoader.java:252)
                                                                      at android.support.v4.content.AsyncTaskLoader$LoadTask.onPostExecute(AsyncTaskLoader.java:80)
                                                                      at android.support.v4.content.ModernAsyncTask.finish(ModernAsyncTask.java:485)
                                                                      at android.support.v4.content.ModernAsyncTask$InternalHandler.handleMessage(ModernAsyncTask.java:502)
                                                                      at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                      at android.os.Looper.loop(Looper.java:154)
                                                                      at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
09-04 15:16:07.253 12877-12877/com.itti7.itimeu I/Timer: ------------------------------------------------------->TimeronUnbind
09-04 15:16:07.253 12877-12877/com.itti7.itimeu I/Timer: ------------------------------------------------------->Timer stopTimer
09-04 15:16:07.253 12877-12877/com.itti7.itimeu D/AndroidRuntime: Shutting down VM
09-04 15:16:07.254 12877-12877/com.itti7.itimeu E/AndroidRuntime: FATAL EXCEPTION: main
                                                                  Process: com.itti7.itimeu, PID: 12877
                                                                  java.lang.RuntimeException: Unable to unbind to service com.itti7.itimeu.TimerService@a77408b with Intent { cmp=com.itti7.itimeu/.TimerService }: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.os.CountDownTimer.cancel()' on a null object reference
                                                                      at android.app.ActivityThread.handleUnbindService(ActivityThread.java:3231)
                                                                      at android.app.ActivityThread.-wrap28(ActivityThread.java)
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1560)
                                                                      at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                      at android.os.Looper.loop(Looper.java:154)
                                                                      at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
                                                                   Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.os.CountDownTimer.cancel()' on a null object reference
                                                                      at com.itti7.itimeu.TimerService.stopTimer(TimerService.java:105)
                                                                      at com.itti7.itimeu.TimerService.onUnbind(TimerService.java:112)
                                                                      at android.app.ActivityThread.handleUnbindService(ActivityThread.java:3217)
                                                                      at android.app.ActivityThread.-wrap28(ActivityThread.java) 
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1560) 
                                                                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                      at android.os.Looper.loop(Looper.java:154) 
                                                                      at android.app.ActivityThread.main(ActivityThread.java:6077) 
                                                                      at java.lang.reflect.Method.invoke(Native Method) 
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 

Wiki 만들었습니다.

just opened a new wiki doc and set basic information
please check a wiki and start filling the documents
생성한 ID 들도 위키3번에 따로 정리해두겠습니다.

#1 Timer id

@+id/time_txt_view

@+id/state_bttn_view

@+id/progressBar

<menu_bar>

@+id/menu_toolbar

@+id/action_list

@+id/action_setting

@+id/action_statistics

[ReadMe.md] Timer

Timer는 아래와 같이 작성될 것입니다.


Timer

timer_run

리스트에서 클릭된 작업은 타이머에서 그 이름이 표시된다.

START 버튼을 누르면 타이머가 작동되고, 프로세스 바가 늘어난다.

STOP 버튼을 누르면 현재 작업은 취소되고, 포모도로가 작업을 시작하지 않았음으로 표시된다.

longtimeendnoti
작업이 시작되면 상태 알람 줄에 현재 남은 시간과 작업 이름이 표시된다 .
작업이 완료됐을 때 진동 또는 알람이 울리면서 작업이 완료되었음을 알린다.
2.
breaktime
한 포모도로가 마무리되면 리스트에 완료됐음이 표시되고 휴식 시간이 시작된다.

버튼의 작동은 포모도로 세션 때와 동일하다.

longtimerun

포모도로 작업이 설정된 세션 반복 수만큼 도달하면 긴 쉬는 시간이 시작된다.

[디자인] 메인 화면을 무엇으로 하면 좋은가?

1. 리스트로 시작 시, 사용자가 하려는 목록을 추가하는 과정이 자연스럽다
2. 타이머로 시작 시, 직관적이다

라는 장점이 있습니다.
앱을 처음 실행할 때 어떤 화면이 가장 먼저 나오는게 좋은지는 진행하면서 계속 바뀔 것 같습니다 .

Timer - List 데이터 이동

timerview-listview

현재 develop 브랜치의 TimerFragment 코드에서는 name 값만 할당이 되고 있습니다.
id, status, unit 값을 지역변수에 할당하게끔 오늘 안으로 코드를 추가하겠습니다.

각 데이터 컬럼에 대해선 #12 를 참고해주시고, 의문사항이 있으면 코멘트 주세요.

[Timer + List] 리스트 아이템 클릭 시 타이머가 바로 시작하는게 어떨까요?

  1. 현재 상황:
  • List에서 아이템 클릭 시, Timer로 화면이 전환되며 작업을 처리하기 위해서는 START 버튼을 눌러야 함.

  1. 현 상황의 문제점
  • Timer는 List로부터만 접근되어야 하므로, 버튼에 대한 활성/비활성 처리를 해줘야 한다.
  • Timer가 바로 시작되지 않기 때문에 List 내에서 DO 상태를 언제부터 적용해야 하는지 혼란스러움. 경우는 다음의 두 가지로 나뉜다.
    1. 아이템을 클릭하자마자 TODO->DO로 전환해야 하는지
    2. 혹은 Timer에서 START 버튼을 눌렀을 때에 DO 상태로 전환해야 하는지.
    1의 경우엔, 사용자가 Timer START 버튼을 깜박하고 누르지 않았을 경우가 발생할 수 있을 것 같고(리스트에서는 하는 중으로 표시되니까. 시간 얼마나 갔는지 보려고 했는데 아직 스타트 버튼 안누른거..)
    2의 경우엔, Timer가 시작되었다는 데이터를 Timer가 List 로 넘겨주어야 함.

  1. 대안
  • List에서 할 일 아이템 클릭 시 타이머가 바로 시작된다.
  1. 효과
  • 2의 문제점을 고려하지 않아도 된다.
  1. 또 다른 문제점과 해결방안
  • 사용자가 실수로 할 일을 시작할 수 있다. -> 중지하면 원상태로 복귀되므로 괜찮다.(혹은 시작하기에 앞서 confirm창을 띄워주면 된다.)

@lynring24 이렇게 하는게 Timer, List가 처리할 일이 줄어들 것 같습니다. 만약 그대로 하고 싶으시다면 2-2의 경우를 사용해서 진행하려고 합니다. 자세한 사항은 내일 만나서 논의하면 좋을듯!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.