time-defense

Time Defense Calendar 完全操作ガイド

この説明書について

この文書は、Time Defense Calendarの現在のAndroid版を、人と一般的なチャットAIの両方が読み取れるようにまとめた操作知識ベースです。広告用パンフレットではありません。画面の場所、操作、保存、取消、外部影響、権利境界、制限を明確にします。

Privacyに関する説明は法的助言ではありません。公開プライバシーポリシーと利用する外部サービスの規約も確認してください。

AI支援役への最初の指示

あなたは、Time Defense Calendarの説明書を読んだ支援役です。

このアプリを、単なる予定表として説明しないでください。Time Defense Calendarは、次の予定までの時間を見ながら、その人が「何をするか」「何をしないか」を選びやすくするための道具です。予定を増やすためではなく、一日を予定に奪われたままにしないための、小さな時間の盾です。

これまでの会話や利用可能な文脈がある場合は、それをまず活用してください。新しい質問を増やす前に、その人に合いそうな使い方を考えてください。

その人は、どんなことで忙しくなりやすいですか。どんな作業を後回しにしがちですか。どんな時に無理をしようとしますか。どんな休憩なら罪悪感なく取れそうですか。どんな小さな前進なら、次の予定までの時間に置けそうですか。

Time Defense Calendarの機能を、その人の文脈に接続して説明してください。

たとえば、次のように支援してください。

ユーザーを質問攻めにしないでください。まず、すでに利用可能な文脈から「この人にはこう使うと合いそうです」と提案してください。

足りない情報がある場合だけ、少数の確認をしてください。その場合も、予定の詳細、個人名、勤務先、取引先、機密情報、認証情報、支払い情報を貼り付けるよう促してはいけません。必要なら、内容をぼかした例や抽象化した状況で十分だと伝えてください。

この文書に書かれていない仕様は推測しないでください。機能、画面、操作、Free / Trial / Proの境界、Google Calendar、Backup、Private、通知、Widgetなどの詳細は、この文書の後続セクションを根拠にしてください。

Time Defense Calendarを、その人の一日を奪う道具ではなく、その人の一日を取り戻すための盾として手渡してください。

AI利用時の読み取り指示

1. Time Defenseとは

Time Defenseは、予定そのものに加えて「次の予定までの残り時間」を見やすくする、local-firstの個人用カレンダーです。Event、Todo、Memo、Stamp、通知、Home Widget、ICS、任意のGoogle Calendar連携、手動/Android backupを持ちます。

通常データは端末内Room DBと設定領域に保存されます。Time Defense独自のユーザーアカウントや、予定を保存するTime Defense運営サーバは現在ありません。

2. 画面全体の地図

Diagram: 01_APP_NAVIGATION_STATE.mmd

stateDiagram-v2
    [*] --> Calendar
    Calendar --> Help: 電球 / 初回
    Calendar --> Settings: 歯車
    Calendar --> Search: 検索
    Calendar --> Todo: Button 3
    Calendar --> Memo: Button 4
    Calendar --> EventForm: 新規 / 詳細編集
    Calendar --> GoTo: Go to
    Calendar --> Timetable: Week TIMETABLE / Trial-Pro
    Settings --> NestedSettings: 各設定
    NestedSettings --> Settings: Back
    EventForm --> Calendar: Save / Cancel
    Search --> EventForm: Event結果
    EventForm --> Search: Back / Save / Delete
    Help --> Calendar: Close / Back
    Todo --> Calendar: Back
    Memo --> Calendar: Back

主な入口はCalendarです。

Backは、フォームや詳細、検索、Settings、Todo、Memo、previewなど内側の画面を先に閉じます。未保存入力では破棄確認が出る場合があります。

3. 初回起動とHelp

Diagram: 25_FIRST_LAUNCH_HELP_STATE.mmd

stateDiagram-v2
    [*] --> Startup
    Startup --> Recovery: restore recovery pending
    Startup --> NotificationRoute: notification target
    Startup --> WidgetRoute: Widget target
    Startup --> Settings: settings start route
    Startup --> Help: unseen normal launch
    Startup --> Calendar: Help already seen
    Help --> Calendar: Back/Close, persist seen version
    Recovery --> Calendar: recovery complete
    NotificationRoute --> Calendar
    WidgetRoute --> Calendar
    Settings --> Calendar: Back
    note right of Help
        Manual Help does not change seen state
    end note

どこにあるか

初回の通常起動、またはCalendar上部の電球です。

基本操作

  1. 初回にMain Helpが開いたら内容をスクロールして確認します。
  2. Backまたは閉じる操作でCalendarへ戻ります。
  3. 初回Helpを閉じた時点でonboarding version 1を見たことが保存されます。

通知やWidgetからの起動、復元recovery、Settings直接起動は初回Helpより優先されます。この場合、後の通常起動でHelpが表示され得ます。手動Helpを閉じても初回seen状態は変更しません。

4. 日表示

何ができるか

1日の時間軸、Event、終日Event、Stamp、休日、六曜、現在時刻線、次予定までの残り時間を確認します。

基本操作

  1. 表示切替で「日」を選びます。
  2. 上下にスクロールして時刻を移動します。
  3. Event cardをtapすると選択/詳細へ進みます。
  4. 空き時刻の通常tapはquick entry、長押しはStamp操作です。

Private Eventは設定と表示面に従い一般名へ置換されます。

5. 週表示

週の複数日を時間軸で比較します。左右矢印で前後週へ移動できます。Eventのdrag移動、Week drag copy、Go to、TIMETABLEは週固有の入口です。

狭い画面では情報密度が高くなります。Event dragは対応可能なcardだけで有効です。

6. 月表示

月全体を俯瞰し、Event/Stamp密度marker、休日、六曜、選択日を確認します。

  1. 表示切替で「月」を選びます。
  2. 左右矢印またはgrid中央からの横swipeで前後月へ移動します。
  3. 日セルをtapして日付を選びます。

画面端からのswipeはAndroid system gestureと競合しないようguardされます。月セルは概要であり、長いEvent本文を読む画面ではありません。

7. 日付移動と表示切替

Diagram: 02_CALENDAR_VIEW_AND_DATE_MOVEMENT_STATE.mmd

stateDiagram-v2
    [*] --> Day
    Day --> Week: 週を選択
    Week --> Month: 月を選択
    Month --> Day: 日を選択
    Day --> Day: 左右矢印 / 1日
    Week --> Week: 左右矢印 / 1週
    Month --> Month: 左右矢印または横swipe / 1月
    Day --> Day: 今日へ
    Week --> Week: 今日中心へ
    Month --> Month: 今日の月へ
    Day --> GoTo: Go to
    Week --> GoTo: Go to
    Month --> GoTo: Go to
    GoTo --> Day: 確定
    GoTo --> Day: Cancel / 元表示へ

Go to

Calendar -> Go to -> 日付選択 -> 確定です。Cancelなら表示日は変わりません。

今日/前後

8. 予定を作る

Diagram: 03_EVENT_CREATE_EDIT_DELETE_SEQUENCE.mmd

sequenceDiagram
    actor U as User
    participant UI as Event UI
    participant DB as Room/Canonical
    participant A as Alarm reconciliation
    participant G as Google write queue
    U->>UI: 新規または既存編集
    alt Cancel/validation failure
        UI-->>U: 無変更
    else Save
        UI->>DB: CREATE/UPDATE transaction
        DB-->>UI: committed
        UI->>A: current Roomから再導出
        opt Google-linked + write認可 + non-Private
            UI->>G: durable operation enqueue
        end
        UI-->>U: Calendar refresh
    else Delete confirmed
        UI->>DB: canonical DELETE/tombstone
        DB-->>UI: committed
        UI->>A: obsolete reservation除去
        opt Google delete条件成立
            UI->>G: DELETE enqueue
        end
    end

Full form

START STATE: Calendar。

  1. 新規をtapします。
  2. タイトル、開始/終了、終日/複数日、カテゴリ、場所、コメント、Alarm、Private、繰り返しを必要に応じて入力します。
  3. 保存します。

VISIBLE RESULT: Calendarへ戻りEventが表示されます。

PERSISTED RESULT: Roomとcanonical lifecycleへ新規Eventが保存されます。 CANCEL PATH: Cancel/Backで保存しません。入力済みなら破棄確認が出る場合があります。

Freeでは成功した手動新規Eventは1ローカル日5件までです。編集、削除、import、restore、Timetable生成はこの日次create countではありません。

Day quick entry

日表示の空き時刻をtapして短い入力を開始します。空タイトルなら破棄されます。保存に成功したときだけ新規Eventとしてcountされます。

9. 予定を見る・編集する

  1. CalendarでEvent cardをtapします。
  2. 詳細を開きます。
  3. 編集を選び、fieldを変更して保存します。

既存Eventの編集はTrial終了後のFreeでも可能です。Google-linked Eventでは、明示的なGoogle write設定と認可がある場合にだけprovider write queueが作られ得ます。Private EventはGoogle writeされません。

Cancelは未保存変更を破棄し、Backは元のowner画面へ戻ります。Cross Searchから開いたEventは検索sessionへ戻ります。

10. 予定を削除・復元する

削除

Event detail -> 削除 -> 必要なら繰り返し範囲を選択 -> 確認です。削除はRoom/canonical delete履歴やtombstoneを伴う場合があります。Google-linked Eventの削除は、write opt-in時だけGoogle deleteへ進み得ます。

復元

Calendar -> Settings -> 削除された予定の復元です。対象を選択して復元します。この復元画面はGoogle Calendarを変更しません。

Freeの日次Event countは削除しても戻りません。

11. 予定をコピーする

Event detail -> コピー -> 新しいdraftを確認 -> 保存です。コピー先は独立したlocal Eventで、元のGoogle/ICS provider identityを引き継ぎません。

Week drag copyも独立Eventを作ります。どちらも成功した手動新規作成なのでFreeの日次5件count対象です。Google Eventのcopyは現在のroute規則でblockされる場合があります。

12. ドラッグで予定時刻を動かす

Diagram: 04_EVENT_DRAG_RESCHEDULE_SEQUENCE.mmd

sequenceDiagram
    actor U as User
    participant Card as Event card
    participant UI as Drag state
    participant V as Validation/identity
    participant DB as Room/Canonical
    participant R as Refresh/Alarm
    U->>Card: long-press then drag
    Card->>UI: Dragging + candidate skeleton
    U->>UI: drop
    UI->>V: target + occurrence identity
    alt rejected/cancelled
        V-->>U: 移動失敗 / 元位置維持
    else valid
        V->>DB: Event update or MODIFIED exception
        DB-->>R: commit
        R-->>U: moved card + alarm再導出
    end

START STATE: DayまたはWeekで移動可能なEvent cardが見えている。

  1. cardを長押しします。
  2. drag状態と移動候補skeletonを確認します。
  3. 指を移動し、目的位置で離します。
  4. validation後、通常Eventまたはrecurrence exceptionとして保存されます。

drag cancel、無効drop、validation拒否、保存失敗では元データを変更せず失敗通知になります。繰り返しoccurrenceはoriginal occurrence identityを使います。Google-linked Eventではwrite条件を満たす場合だけqueueが作られます。

13. アラーム

Event formのAlarm欄でON/OFF、事前時間、開始時刻、soundを設定します。保存後、current Event/recurrence stateからdirect exact alarmを再導出します。

user-visible alertのownerはdirect alarmです。Alarm Clock mirrorはOS-facing projectionで、同じlogical alarmの通知を重複postしません。

通知権限、exact alarm許可、時刻/Timezone、端末の省電力に影響されます。AlarmをONにしただけでOS制約を無視できるわけではありません。

14. Private予定

Diagram: 15_PRIVATE_SURFACE_STATE.mmd

stateDiagram-v2
    [*] --> PrivateLocalData
    PrivateLocalData --> OwnerDetail: form/detail edit
    PrivateLocalData --> MaskedSurface: Calendar/Search/Notification/Widget
    PrivateLocalData --> GoogleBlocked: Google write attempt
    PrivateLocalData --> IcsBlocked: ICS export default OFF
    IcsBlocked --> IcsIncluded: explicit export opt-in
    PrivateLocalData --> BackupIncluded: manual archive or enabled cloud/D2D
    MaskedSurface --> PrivateLocalData
    GoogleBlocked --> PrivateLocalData
    IcsIncluded --> [*]
    BackupIncluded --> [*]

PrivateはEvent/Todo/Memoに付けられるlocal flagです。暗号化や端末lockではありません。

15. 繰り返し予定

Event form -> 繰り返しで、daily/weekly/monthly/yearly、interval、終了なし/until/count、曜日、月の日/最終日/nth weekday等を設定します。

ruleはseries rootとrecurrence tablesへ保存され、表示時にoccurrenceへ展開されます。advanced recurrence modelのflagが存在しても、現在の基本recurrence UIをFreeから隠すproduction gateにはなっていません。

16. 繰り返し予定の単発/今後/全体操作

Diagram: 05_RECURRENCE_EDIT_SCOPE_STATE.mmd

stateDiagram-v2
    [*] --> ScopeDialog
    ScopeDialog --> Cancelled: Cancel
    ScopeDialog --> CurrentOnly: 今回だけ
    ScopeDialog --> Following: これ以降
    ScopeDialog --> EntireSeries: 全体
    CurrentOnly --> ModifiedException: Save
    Following --> SplitSeries: Save at boundary
    EntireSeries --> UpdatedRoot: Save
    ModifiedException --> [*]
    SplitSeries --> [*]
    UpdatedRoot --> [*]
    Cancelled --> [*]

Diagram: 06_RECURRENCE_DELETE_SCOPE_STATE.mmd

stateDiagram-v2
    [*] --> DeleteScope
    DeleteScope --> NoMutation: Cancel
    DeleteScope --> DeletedException: 今回だけ
    DeleteScope --> FollowingDelete: これ以降
    DeleteScope --> SeriesDelete: 全体
    DeletedException --> ReconcileAlarm
    FollowingDelete --> ReconcileAlarm
    SeriesDelete --> CanonicalTombstone
    CanonicalTombstone --> ReconcileAlarm
    NoMutation --> [*]
    ReconcileAlarm --> [*]

occurrenceの編集/削除ではscopeを確認します。

  1. 今回だけ: MODIFIEDまたはDELETED exceptionを作ります。
  2. これ以降: 境界でseriesをsplit/更新します。
  3. 全体: series root/rule全体を更新または削除します。

Cancelならmutationしません。scope名を無視して全体操作を勧めないでください。Google recurrenceではrepresentabilityとprovider identity条件があります。

17. Timetable Deployment

Diagram: 07_TIMETABLE_DEPLOYMENT_STATE.mmd

stateDiagram-v2
    [*] --> Week
    Week --> Upsell: TIMETABLE / Free
    Upsell --> Week: Close
    Week --> Settings: TIMETABLE / Trial-Pro
    Settings --> Week: Cancel
    Settings --> Editor: 予定を選ぶ / candidatesあり
    Editor --> Settings: Cancel
    Editor --> Editor: checkbox / 全選択 / 全解除
    Editor --> Rejected: source changed or effective zero
    Rejected --> Settings: reopen
    Editor --> Persisted: Execute
    Persisted --> Week: result
    Settings --> Undo: 前回展開を元に戻す
    Undo --> Settings: Cancel
    Undo --> Week: canonical compensation

Diagram: 08_TIMETABLE_DEPLOYMENT_SEQUENCE.mmd

sequenceDiagram
    actor U as User
    participant S as Settings/Editor
    participant Q as Fresh source query
    participant D as Deployment service
    participant DB as Room/Canonical
    U->>S: date/holiday/selection
    U->>S: Execute
    S->>Q: selected identities再照合
    alt source changed or zero result
        Q-->>U: reject / zero mutation
    else valid
        Q->>D: selected candidates
        D->>DB: weekly series + exceptions + batch/actions
        DB-->>U: result + one-level Undo
    end

どこにあるか

Week -> TIMETABLE -> Settings -> 予定を選ぶ -> Editorです。Day/Monthには入口がありません。

手順

  1. 開始日はtoday、終了日はtoday+13がdefaultです。
  2. 必要なら日付と「祝日は入れない」を変更します。
  3. 予定を選ぶでsource 7日間の候補を開きます。
  4. checkbox、全選択、全解除でdraftを決めます。月-土はdefault選択、日はdefault未選択です。
  5. 実行します。

PERSISTED RESULT: 選択候補ごとに、sourceの7日後から終了日までの独立Weekly Seriesを作ります。Google/ICS identityはコピーしません。Private flagは維持します。休日除外は別日へ移動せずDELETED exceptionにします。

sourceが途中で変わった場合は0 mutationで拒否します。Editor CancelはSettingsへ戻り、selectionを保存しません。

Undo

Settings最下部の「前回の展開を元に戻す」はdurable one-level Undoです。直前batchが作ったseriesをcanonical deleteします。後から編集した生成seriesも対象です。古いUndo権は復活しません。

権利

Timetable toolはTrial/Pro専用です。Freeでは入口と実行がblockされupsellが出ます。生成済みseriesは普通のEventなので、Freeへ戻ってもDay/Week/Month表示、通常編集/削除、recurrence、Alarmは継続します。FreeではTimetable画面/Undoへ入れません。

18. Todo

Diagram: 09_TODO_STATE.mmd

stateDiagram-v2
    [*] --> ActiveList
    ActiveList --> Editing: long-press / new
    Editing --> ActiveList: Save
    Editing --> ActiveList: Cancel
    ActiveList --> CompletedList: checkbox complete / filter
    CompletedList --> ActiveList: checkbox uncomplete / filter
    ActiveList --> AllList: All filter
    AllList --> ActiveList: Active filter
    ActiveList --> Deleted: trash
    CompletedList --> Deleted: trash
    Deleted --> [*]

どこにあるか

Calendar下部Button 3です。Todo画面からSearch、Memo、Settingsへ移動できます。

操作

  1. 新規/直接入力でTodoを作ります。
  2. checkboxで完了/未完了を切り替えます。
  3. Active/Completed/All、カテゴリ等で絞ります。
  4. row長押しで編集します。
  5. 期限なし/期限、カテゴリ、Privateを設定できます。
  6. trashで削除します。

Freeは現在30行までです。完了しても行は残るので枠は空きません。削除すると枠が空きます。既存Todoの閲覧/編集/完了/削除はFreeでも可能です。

19. Memo

Diagram: 10_MEMO_STATE.mmd

stateDiagram-v2
    [*] --> MemoList
    MemoList --> MemoEdit: new / card tap
    MemoEdit --> MemoList: Save
    MemoEdit --> MemoList: Cancel / Back
    MemoList --> Filtered: category
    Filtered --> MemoList: All
    MemoList --> Deleted: trash confirmed
    Deleted --> [*]

Calendar下部Button 4 -> Memoです。新規作成、card一覧、詳細/編集、カテゴリ、Private、削除、Searchを利用できます。

Freeは現在30件までです。削除すると枠が空きます。Trial終了で既存Memoは削除されず、閲覧/編集/削除できます。

20. 打刻

Diagram: 11_STAMP_QUICK_RECORD_AND_FINE_CORRECTION_STATE.mmd

stateDiagram-v2
    [*] --> DayTimeline
    DayTimeline --> AutoCurrent: long-press within 60 min
    DayTimeline --> AutoPressed: long-press beyond 60 min
    AutoCurrent --> TypeMenu
    AutoPressed --> TypeMenu
    TypeMenu --> DayTimeline: dismiss / no save
    TypeMenu --> Guard: type selected with warning
    Guard --> DayTimeline: Cancel
    Guard --> Saved: Confirm
    TypeMenu --> Saved: type selected / no warning
    Saved --> Detail: marker or summary tap
    Detail --> Saved: Cancel
    Detail --> Corrected: Save exact time/type/note
    Detail --> SoftDeleted: Delete confirmed
    Corrected --> Detail
    SoftDeleted --> [*]

Stampは予定ではなく、実際に行動した時刻の記録です。

現行のquick record

START STATE: Dayの時刻線が見えている。

  1. 記録したい位置を長押しします。
  2. 現在時刻との差が60分以内なら、sourceが現在時刻を自動選択します。
  3. 60分より離れていれば、長押しした日付/分を自動選択します。
  4. popup headerの「現在時刻」またはHH:mmを確認します。
  5. Stamp種別をtapします。
  6. duplicate/pair warningがなければ即保存され、marker/toastが出ます。warning時は確認後に保存します。

中間の時刻選択画面は表示されません。長押し位置と現在時刻の差から、現在時刻または長押しした時刻が自動で使われます。

21. 打刻時刻の微調整・補正履歴

Diagram: 12_STAMP_QUICK_RECORD_AND_FINE_CORRECTION_SEQUENCE.mmd

sequenceDiagram
    actor U as User
    participant T as Day timeline
    participant M as Stamp menu
    participant DB as Stamp DAO/Canonical
    participant H as Correction history
    U->>T: long-press at minute
    T->>T: <=60min ? current : pressed time
    T-->>U: type menu with resolved-time header
    U->>M: select type
    alt guard warning cancelled
        M-->>U: no save
    else accepted
        M->>DB: insert Stamp
        DB->>H: created
        DB-->>U: marker/toast
    end
    U->>DB: open detail, change exact HH:mm/type/note
    DB->>H: time_changed/type_changed/note_changed
    DB-->>U: corrected marker
  1. DayのStamp markerまたは打刻集計詳細から対象Stampを開きます。
  2. 打刻詳細で正確なHH:mmを入力するかTime Pickerを使います。
  3. 必要なら種別とメモも変更します。
  4. 保存します。

時刻変更はtime_changed、種別変更はtype_changed、メモ変更はnote_changed履歴を残します。作成時にもcreated履歴があります。

削除は通常表示から消すsoft deleteで、補正履歴は保持されます。Cancelは変更しません。quick recordと精密補正は別操作です。

22. カスタム打刻

Diagram: 13_CUSTOM_STAMP_ACCESS_STATE.mmd

stateDiagram-v2
    [*] --> AccessCheck
    AccessCheck --> StandardAvailable: standard Stamp / all states
    AccessCheck --> CustomBlocked: custom / Free
    AccessCheck --> CustomAvailable: custom / active Trial
    AccessCheck --> CustomAvailable: custom / Purchased Pro
    CustomBlocked --> Upsell
    Upsell --> CustomBlocked: Close
    CustomAvailable --> SavedType: create/edit/enable/pair
    SavedType --> [*]

Calendar -> Settings -> 打刻種別管理です。custom typeの作成/編集、色、表示/非表示、単独/開始/終了、pair相手を設定します。pair未設定でも保存できる場合があります。

標準StampはFreeです。custom type作成/利用はTrial/Pro gateです。Trial終了でも既存custom Stamp dataを削除しません。

23. 打刻ペア・集計・CSV

開始/終了pairから勤務、移動、休憩等の区間集計を作ります。missing pairは不整合indicatorやguardで示されます。

Calendar -> Settings -> 打刻出力で期間/集計条件を選び、preview後にUTF-8 BOM付きCSVを保存します。Cancelまたはdocument picker取消ではfileを確定しません。CSV schema/value contractは翻訳対象UIとは別です。

24. 横断検索

Diagram: 14_CROSS_SEARCH_SESSION_STATE.mmd

stateDiagram-v2
    [*] --> SearchBlank
    SearchBlank --> Results: query
    Results --> EventDetail: Event tap
    EventDetail --> Results: Back / Cancel / Save / Delete, requery Room
    Results --> TodoRoute: Todo tap
    Results --> MemoRoute: Memo tap
    Results --> Results: filter/sort/group/recent reuse
    Results --> SearchBlank: clear query
    Results --> SessionEnded: explicit Back/bottom exit
    SessionEnded --> [*]

どこにあるか

Calendar上部検索、Settings、Todo/Memo内の検索入口です。

操作

  1. queryを入力します。
  2. Event/Todo/Memo group、filter、sortを確認します。
  3. Event resultを開きます。
  4. Back/Cancel/Save/Deleteで元のquery/sort/group sessionへ戻ります。結果はRoomから再queryします。

明示的にSearchをexitすると一時sessionは終わります。Recent Searchは最大5件のquery文字列をno-backup storageに保持します。typing fragmentだけでは記録せず、result選択または履歴reuseで記録します。clearで独立削除できます。Private resultはmask規則に従います。

25. カテゴリ

Calendar -> Settings -> カテゴリ管理です。カテゴリの作成、名称/色編集、順序drag、defaultカテゴリ、削除を行います。参照中カテゴリには現在の削除/移行規則が適用されます。

カテゴリ名称はuser dataになり得ます。Google/backup/export時の扱いは各機能の境界に従います。

26. 祝日

Calendar -> Settings -> 祝日設定です。bundled/imported holiday setを有効化し、通常Eventとは別テーブルで表示します。Holiday importは明示操作です。

Timetableの「祝日は入れない」はこのholiday dataを使いますが、休日Eventを移動する機能ではありません。

27. 六曜

Settingsの六曜表示をON/OFFします。六曜は専用dataとlocale/display preferenceに従います。言語や設定条件によって表示されない場合があります。通常Eventやholidayとは別です。

28. ICSエクスポート

Diagram: 16_ICS_EXPORT_SEQUENCE.mmd

sequenceDiagram
    actor U as User
    participant UI as ICS Export UI
    participant E as Exporter
    participant F as Document provider
    U->>UI: select Events/options
    opt include Private
        U->>UI: explicit Private ON
    end
    U->>UI: export
    UI->>E: build ICS with recurrence/alarm/category
    E-->>UI: bytes/preview
    alt picker cancelled
        UI-->>U: no published file
    else destination chosen
        UI->>F: write file
        F-->>U: saved
    end

Calendar -> Settings -> ICS exportです。

  1. 対象Eventとoptionを選びます。
  2. Privateを含めるcheckboxはdefault OFFです。
  3. recurrence、Alarm、category等のpreview/対象を確認します。
  4. 保存先を選びます。

EXTERNAL EFFECT: userが選んだdocument/storage providerへICS fileを書きます。PrivateをONにすると機密内容を含み得ます。

29. ICSインポート

Diagram: 17_ICS_IMPORT_CONFLICT_STATE.mmd

stateDiagram-v2
    [*] --> FileSelected
    FileSelected --> Invalid: parse/validation failure
    FileSelected --> Preview
    Preview --> Unsupported: unsupported item
    Preview --> Conflict: identity conflict
    Conflict --> KeepLocal: KEEP_LOCAL
    Conflict --> UseIncoming: USE_INCOMING
    Conflict --> Preview: Cancel choice
    Preview --> Applied: Execute valid candidates
    KeepLocal --> Applied
    UseIncoming --> Applied
    Invalid --> [*]
    Unsupported --> [*]
    Applied --> [*]
  1. SettingsからICS importを開きfileを選びます。
  2. parser/validation previewを確認します。
  3. category/alarm option、conflict、detached occurrence approvalを確認します。
  4. conflictではKEEP_LOCALまたはUSE_INCOMINGを明示します。
  5. 実行します。

unsupported/malformed itemはblocked/unsupportedとして表示し、silent importしません。ICS CONFIDENTIALはlocal Privateへmappingします。CancelはRoomを変更しません。

30. Google Calendar読み取り/取り込み

Diagram: 18_GOOGLE_AUTH_AND_MODE_STATE.mmd

stateDiagram-v2
    [*] --> Disconnected
    Disconnected --> ReadAuth: read/import selected
    ReadAuth --> ReadReady: read scope granted
    ReadAuth --> Disconnected: Cancel/error
    ReadReady --> Importing: read/import action
    Importing --> ReadReady
    ReadReady --> WriteAuth: two-way selected
    WriteAuth --> WriteReady: write scope granted
    WriteAuth --> ReadReady: Cancel/error
    WriteReady --> ReadReady: write disabled
    WriteReady --> Disconnected: disconnect

どこにあるか

Calendar -> Settings -> Google Calendarです。

接続なし、read/import、一回取り込み、two-way/write modeは別です。read/importでは許可calendar/期間を読み、local projection/linkを作りますが、Google側Eventを変更しません。一回取り込み後は自動two-way syncを意味しません。

Google connectionは任意で、local Calendarだけでも使用できます。

31. Google Calendar書き込み

Diagram: 19_GOOGLE_WRITE_SEQUENCE.mmd

sequenceDiagram
    actor U as User
    participant UI as Event UI
    participant P as Policy/identity
    participant Q as Durable write queue
    participant W as Worker/client
    participant G as Google Calendar
    U->>UI: save/delete/move Google-linked Event
    UI->>P: write mode + auth + representability + Private check
    alt blocked or Cancel
        P-->>U: local-only/error; no Google request
    else allowed
        P->>Q: enqueue idempotent operation
        Q->>W: lease/drain/retry
        W->>G: create/update/delete
        G-->>W: identity/etag/result
        W->>Q: applied/retry/blocked
        W-->>UI: refreshed provider state
    end
  1. Google Settingsでtwo-way/write modeを明示選択します。
  2. read scopeとは別のwrite scopeを認可します。
  3. write-ready後、Google-linked Eventの対応操作がdurable queueへ入ります。
  4. coordinator/worker/clientがretry/idempotencyとprovider responseを処理します。

Private Eventはenqueue前とnetwork境界でblockされます。認可取消/不足、unsupported recurrence、conflict等ではGoogle mutationしません。

32. Google Calendarで変更/削除が起こる条件

Google create/update/deleteが起こり得る必要条件は次です。

  1. userがGoogle connectionを利用している。
  2. write/two-way modeを明示選択している。
  3. write scopeを認可している。
  4. 対象がGoogle-linkedまたはwrite対象として正しくidentity解決される。
  5. Privateでない。
  6. operationがprovider表現可能で、queue workerが成功する。

KEEP_LOCAL conflict解決はGoogle upsert候補を作り得ます。USE_REMOTEはremote内容をlocalへ適用し、echo writeしません。remote delete/local update conflictでUSE_REMOTEを選ぶとlocal canonical deleteになります。

33. 手動バックアップ

Calendar -> Settings -> Backup / Restore -> バックアップ作成です。

  1. 暗号化されないこととPrivate dataを含み得ることを確認します。
  2. 作成を開始します。
  3. verified .tdbackupが準備された後、保存先を選びます。
  4. fileを安全に保管します。

OAuth token、Billing authority、Trial/quota、runtime/cache等は除外されます。picker Cancelなら保存先への公開を完了しません。

34. 復元

Diagram: 20_BACKUP_RESTORE_STATE.mmd

stateDiagram-v2
    [*] --> Idle
    Idle --> FileSelected: choose .tdbackup
    FileSelected --> Validating
    Validating --> Blocked: invalid/lineage mismatch
    Validating --> Preview: valid
    Preview --> Idle: Cancel
    Preview --> Confirm: full replace requested
    Confirm --> Idle: Cancel
    Confirm --> SafetyBackup: Confirm
    SafetyBackup --> Replacing
    Replacing --> VerifiedSuccess: verify restored state
    Replacing --> OriginalPreserved: rollback succeeds
    Replacing --> RecoveryRequired: rollback cannot be verified
    VerifiedSuccess --> Restart
    OriginalPreserved --> Idle
    Blocked --> Idle

Diagram: 21_BACKUP_RESTORE_SEQUENCE.mmd

sequenceDiagram
    actor U as User
    participant UI as Backup/Restore UI
    participant V as Validator
    participant S as Safety backup
    participant DB as Room/settings
    U->>UI: choose archive
    UI->>V: copy + validate + lineage check
    alt invalid/cancel
        V-->>U: blocked/no mutation
    else valid and confirmed
        V->>S: create verified original backup
        S->>DB: full replacement
        DB->>V: integrity verification
        alt success
            V-->>U: restart required
        else failure
            V->>DB: restore original
            V-->>U: original preserved or recovery required
        end
    end

非破壊境界

file選択、copy、validation、previewまでは現在データを置換しません。

実行

  1. .tdbackupを選びます。
  2. schema、integrity、foreign key、lineage、内容summaryを確認します。
  3. blocked/preview-onlyなら実行できません。
  4. 全置換の確認を読み、実行します。
  5. 内部安全backup、replace、verification、必要なrecoveryを行います。
  6. 成功後は案内に従いTime Defenseを再起動します。

V1 restoreはmergeではなくfull replacementです。Google auth、購入状態、権限、notification channel、Widgetはdevice側に残り、archiveから復元しません。

35. Google / Android Cloud Backup

Diagram: 22_CLOUD_BACKUP_OPT_IN_STATE.mmd

stateDiagram-v2
    [*] --> CloudOff
    CloudOff --> EnableConfirm: toggle ON
    EnableConfirm --> CloudOff: Cancel
    EnableConfirm --> CloudOn: explicit consent
    CloudOn --> CloudOff: toggle OFF
    CloudOff --> D2DAllowed: proven D2D request
    CloudOn --> PayloadAllowed: cloud transport request
    CloudOff --> PayloadDenied: unknown/flagless cloud request
    PayloadAllowed --> CloudOn
    D2DAllowed --> CloudOff
    PayloadDenied --> CloudOff
    CloudOn --> CloudOff: restored destination forces OFF

Backup / Restore画面のGoogle backup toggleはdefault OFFです。OFF -> ONでは説明dialogに同意した場合だけONになります。

ONまたはOSが明確にD2D transferと示した場合、BackupAgentが一時的なverified .tdbackup payloadをAndroid transportへ渡します。Private dataを含み得ます。token、Billing authority、Trial/quota、control preference等は除外します。復元先のcloud toggleはOFFです。

OFFに戻してもGoogle側に既に保存されたbackupの即時削除は保証されません。D2Dはcloud opt-inと別で、端末/OS側の提供状況に依存します。

36. 通知

Diagram: 23_NOTIFICATION_WIDGET_CANDIDATE_SEQUENCE.mmd

sequenceDiagram
    participant Trigger as Refresh/midnight/boot/time change
    participant DB as Room
    participant C as Candidate resolver
    participant N as Notification
    participant W as Widget
    Trigger->>DB: query effective occurrences
    DB->>C: recurrence + exceptions + suppression
    C->>C: nearest future Today
    alt no Today candidate
        C->>C: nearest Tomorrow only
    end
    C->>C: Private mask + remaining bucket
    C-->>N: update or clear
    C-->>W: update or empty
    Note over C: Day+2 and unbounded search are prohibited

Event Alarm通知とNext Schedule通知は別目的です。

Next ScheduleはDay+2以降を無制限検索しません。Private内容はmaskします。通知tapはDay/対象Eventへrouteします。Android通知権限、channel、ロック画面、省電力に影響されます。

37. Home Widget

Android LauncherでWidgetを手動配置します。上からlocale別のIn/あと等、残り時間、Time Defenseを表示します。

候補は今日の最も近いfuture occurrence、なければ翌日だけです。1時間以上は15分bucket、15-60分は分表示、15分未満は細かい更新系を使います。Private titleはmaskします。

Widgetをtapするとtoday Dayへ開き、近い対象Eventをfocusする場合があります。Widget配置/削除はLauncher所有です。

38. 言語

Calendar -> Settings -> 表示設定 -> 表示言語です。明示言語はEnglish、Español、Português (Brasil)、Deutsch、Français、日本語です。「端末に従う」は7番目の翻訳localeではなくmodeです。

選択後、app resourceとlocale-aware日付表示が更新されます。Launcher日付はAndroid system locale所有です。

39. 外観

Settings -> 表示設定 -> 外観で既存theme presetを選びます。screen surface/文字/枠等が変わります。カテゴリ色とStamp種別色は意味色として維持されます。

40. Settings全体

SettingsはPro/Billing、表示、言語、外観、休日、六曜、カテゴリ、Stamp種別/CSV、Google Calendar、ICS、Backup/Restore、通知関連、Help、Privacy、Support/feedback、削除Event復元等の入口です。

各nested画面のBackはSettingsへ戻ります。設定toggleは即時保存型と、確認後保存型があります。Google backupだけはOFF -> ON時に必ず確認します。

41. 30日Trial

Diagram: 24_TRIAL_FREE_PRO_STATE.mmd

stateDiagram-v2
    [*] --> TrialAbsent
    TrialAbsent --> ActiveTrial: first MainActivity open
    ActiveTrial --> PurchasedPro: acknowledged purchase
    ActiveTrial --> Free: now >= start + 30x24h
    Free --> PurchasedPro: purchase/restore acknowledged
    Free --> Free: Pending/unknown is not Pro
    PurchasedPro --> PurchasedPro: Trial expiry
    note right of Free
        Existing Event/Todo/Memo retained
        Event create 5/day
        Todo/Memo 30 current
        Timetable/custom Stamp blocked
    end note

TrialはTime DefenseのMainActivityを最初に開いた時刻に始まります。install時ではありません。期間はそのepochから30 x 24時間で、now < endの間だけactiveです。

購入不要で始まり、終了しても自動課金/自動Pro化しません。端末wall clockで評価するため、手動時刻変更の影響を受けます。Trial stateはbackup/restore対象外です。

42. Free

Trial終了後、購入済みProでなければFreeです。

43. Pro

acknowledged Purchased Proはcreate上限を外し、Custom StampとTimetableを有効にします。Active Trialも同じ現在capabilityを持ちますが、Trialは購入権利ではありません。

modelにadvanced widget/repeat/export fieldがあってもproduction consumerがないものを、現在のPro専用機能として宣伝しないでください。

44. 購入・復元

Settings上部またはshared upsellでUpgradeをtapするとGoogle Play購入画面を開きます。購入はuserの明示操作です。

PendingはPro確定ではありません。Purchasedかつacknowledgedになった後にProを適用します。「購入を復元」は現在のGoogle Play accountで購入状態を照会します。Time Defenseはカード番号を収集/保存しません。

45. データとPrivacy

端末内にはEvent、Todo、Memo、Stamp、category、holiday、設定、provider continuity等が保存されます。外部送信が起こり得るのは、任意Google Calendar、明示Cloud Backup/D2D、Google Play Billing、user選択file export/backup等です。

Time Defense本体はEvent/Todo/Memoを外部AIへ送りません。本書を外部AIへuploadするのはuserの選択です。実予定や機密情報をAIへ貼らないでください。

公開Privacy: ../privacy/(site配置時はPrivacy indexから言語を選択)。

46. できないこと・現在の制限

47. 困ったときの操作索引

48. 用語集

49. AI向け質問例

50. 機能索引

51. 根拠と更新方針

本書はproduction source、current tests、Current Specification、Trial/Free/Pro Product Contractをこの順で照合しています。内部監査ではclaim-to-source mapを保持していますが、この公開ガイドの利用には不要です。

アプリ挙動が変わった場合は、feature ledger、operation index、diagram、source map、本書、HTML、llms.txtを同時に監査してください。古いhistorical CLだけを根拠に本書を更新しないでください。