Skip to content

Commit

Permalink
Tasks-API: Move client interface and type definitions
Browse files Browse the repository at this point in the history
This CL moves the files in ash/glanceables/tasks to ash/api/tasks,
renames the files and updates their includes, class names, and
namespaces.

Bug: b/306428340
Change-Id: I4d1669f46edfcfdee90bb5c591c318e7257478c9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4979372
Reviewed-by: Toni Barzic <tbarzic@chromium.org>
Commit-Queue: Ben Becker <benbecker@chromium.org>
Reviewed-by: Artsiom Mitrokhin <amitrokhin@chromium.org>
Reviewed-by: James Cook <jamescook@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1216393}
  • Loading branch information
Ben Becker authored and Chromium LUCI CQ committed Oct 27, 2023
1 parent 2be3601 commit bc96b7d
Show file tree
Hide file tree
Showing 33 changed files with 515 additions and 527 deletions.
10 changes: 5 additions & 5 deletions ash/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,9 @@ component("ash") {
"ambient/util/time_of_day_utils.cc",
"ambient/util/time_of_day_utils.h",
"animation/animation_change_type.h",
"api/tasks/tasks_client.h",
"api/tasks/tasks_types.cc",
"api/tasks/tasks_types.h",
"app_list/app_list_public_test_util.cc",
"app_list/app_list_public_test_util.h",
"ash_element_identifiers.cc",
Expand Down Expand Up @@ -672,9 +675,6 @@ component("ash") {
"glanceables/post_login_glanceables_metrics_recorder.h",
"glanceables/tasks/glanceables_task_view.cc",
"glanceables/tasks/glanceables_task_view.h",
"glanceables/tasks/glanceables_tasks_client.h",
"glanceables/tasks/glanceables_tasks_types.cc",
"glanceables/tasks/glanceables_tasks_types.h",
"glanceables/tasks/glanceables_tasks_view.cc",
"glanceables/tasks/glanceables_tasks_view.h",
"host/ash_window_tree_host.cc",
Expand Down Expand Up @@ -4213,6 +4213,8 @@ static_library("test_support") {
"ambient/test/mock_ambient_view_observer.h",
"ambient/test/test_ambient_client.cc",
"ambient/test/test_ambient_client.h",
"api/tasks/fake_tasks_client.cc",
"api/tasks/fake_tasks_client.h",
"app_list/app_list_test_api.cc",
"app_list/test/app_list_test_helper.cc",
"app_list/test/app_list_test_helper.h",
Expand Down Expand Up @@ -4284,8 +4286,6 @@ static_library("test_support") {
"glanceables/classroom/fake_glanceables_classroom_client.h",
"glanceables/common/test/glanceables_test_new_window_delegate.cc",
"glanceables/common/test/glanceables_test_new_window_delegate.h",
"glanceables/tasks/fake_glanceables_tasks_client.cc",
"glanceables/tasks/fake_glanceables_tasks_client.h",
"ime/test_ime_controller_client.cc",
"ime/test_ime_controller_client.h",
"in_session_auth/mock_in_session_auth_dialog_client.cc",
Expand Down
2 changes: 2 additions & 0 deletions ash/api/tasks/OWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
amitrokhin@chromium.org
tbarzic@chromium.org
170 changes: 170 additions & 0 deletions ash/api/tasks/fake_tasks_client.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ash/api/tasks/fake_tasks_client.h"

#include <list>
#include <utility>

#include "ash/api/tasks/tasks_client.h"
#include "ash/api/tasks/tasks_types.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/functional/callback_forward.h"
#include "base/notreached.h"
#include "base/strings/string_util.h"

namespace ash::api {

FakeTasksClient::FakeTasksClient(base::Time tasks_due_time) {
PopulateTasks(tasks_due_time);
PopulateTaskLists(tasks_due_time);
}

FakeTasksClient::~FakeTasksClient() = default;

void FakeTasksClient::GetTaskLists(GetTaskListsCallback callback) {
if (!paused_) {
std::move(callback).Run(task_lists_.get());
} else {
pending_get_task_lists_callbacks_.push_back(base::BindOnce(
[](ui::ListModel<TaskList>* task_lists, GetTaskListsCallback callback) {
std::move(callback).Run(task_lists);
},
task_lists_.get(), std::move(callback)));
}
}

void FakeTasksClient::GetTasks(const std::string& task_list_id,
GetTasksCallback callback) {
auto iter = tasks_in_task_lists_.find(task_list_id);
CHECK(iter != tasks_in_task_lists_.end());

if (!paused_) {
std::move(callback).Run(iter->second.get());
} else {
pending_get_tasks_callbacks_.push_back(base::BindOnce(
[](ui::ListModel<Task>* tasks, GetTasksCallback callback) {
std::move(callback).Run(tasks);
},
iter->second.get(), std::move(callback)));
}
}

void FakeTasksClient::MarkAsCompleted(const std::string& task_list_id,
const std::string& task_id,
bool completed) {
if (completed) {
pending_completed_tasks_.push_back(
base::JoinString({task_list_id, task_id}, ":"));
} else {
pending_completed_tasks_.erase(std::find(
pending_completed_tasks_.begin(), pending_completed_tasks_.end(),
base::JoinString({task_list_id, task_id}, ":")));
}
}

void FakeTasksClient::AddTask(const std::string& task_list_id,
const std::string& title) {
NOTIMPLEMENTED();
}

void FakeTasksClient::UpdateTask(const std::string& task_list_id,
const std::string& task_id,
const std::string& title,
TasksClient::UpdateTaskCallback callback) {}

void FakeTasksClient::OnGlanceablesBubbleClosed(
TasksClient::OnAllPendingCompletedTasksSavedCallback callback) {
++bubble_closed_count_;
RunPendingGetTaskListsCallbacks();
RunPendingGetTasksCallbacks();
completed_tasks_ += pending_completed_tasks_.size();
pending_completed_tasks_.clear();
std::move(callback).Run();
}

int FakeTasksClient::GetAndResetBubbleClosedCount() {
int result = bubble_closed_count_;
bubble_closed_count_ = 0;
return result;
}

size_t FakeTasksClient::RunPendingGetTasksCallbacks() {
std::list<base::OnceClosure> callbacks;
pending_get_tasks_callbacks_.swap(callbacks);
for (auto& callback : callbacks) {
std::move(callback).Run();
}
return callbacks.size();
}

size_t FakeTasksClient::RunPendingGetTaskListsCallbacks() {
std::list<base::OnceClosure> callbacks;
pending_get_task_lists_callbacks_.swap(callbacks);
for (auto& callback : callbacks) {
std::move(callback).Run();
}
return callbacks.size();
}

void FakeTasksClient::PopulateTasks(base::Time tasks_due_time) {
task_lists_ = std::make_unique<ui::ListModel<TaskList>>();

task_lists_->Add(std::make_unique<TaskList>(
"TaskListID1", "Task List 1 Title", /*updated=*/tasks_due_time));
task_lists_->Add(std::make_unique<TaskList>(
"TaskListID2", "Task List 2 Title", /*updated=*/tasks_due_time));
task_lists_->Add(std::make_unique<TaskList>("TaskListID3",
"Task List 3 Title (empty)",
/*updated=*/tasks_due_time));
task_lists_->Add(std::make_unique<TaskList>("TaskListID4",
"Task List 4 Title (empty)",
/*updated=*/tasks_due_time));
task_lists_->Add(std::make_unique<TaskList>("TaskListID5",
"Task List 5 Title (empty)",
/*updated=*/tasks_due_time));
task_lists_->Add(std::make_unique<TaskList>("TaskListID6",
"Task List 6 Title (empty)",
/*updated=*/tasks_due_time));
}

void FakeTasksClient::PopulateTaskLists(base::Time tasks_due_time) {
std::unique_ptr<ui::ListModel<Task>> task_list_1 =
std::make_unique<ui::ListModel<Task>>();
task_list_1->Add(std::make_unique<Task>(
"TaskListItem1", "Task List 1 Item 1 Title", /*completed=*/false,
/*due=*/tasks_due_time,
/*has_subtasks=*/false, /*has_email_link=*/false, /*has_notes=*/false));
task_list_1->Add(std::make_unique<Task>(
"TaskListItem2", "Task List 1 Item 2 Title", /*completed=*/false,
/*due=*/tasks_due_time,
/*has_subtasks=*/false, /*has_email_link=*/false, /*has_notes=*/false));
std::unique_ptr<ui::ListModel<Task>> task_list_2 =
std::make_unique<ui::ListModel<Task>>();
task_list_2->Add(std::make_unique<Task>(
"TaskListItem3", "Task List 2 Item 1 Title", /*completed=*/false,
/*due=*/tasks_due_time,
/*has_subtasks=*/false, /*has_email_link=*/false, /*has_notes=*/false));
task_list_2->Add(std::make_unique<Task>(
"TaskListItem4", "Task List 2 Item 2 Title", /*completed=*/false,
/*due=*/tasks_due_time,
/*has_subtasks=*/false, /*has_email_link=*/false, /*has_notes=*/false));
task_list_2->Add(std::make_unique<Task>(
"TaskListItem5", "Task List 2 Item 3 Title", /*completed=*/false,
/*due=*/tasks_due_time,
/*has_subtasks=*/false, /*has_email_link=*/false, /*has_notes=*/false));
tasks_in_task_lists_.emplace("TaskListID1", std::move(task_list_1));
tasks_in_task_lists_.emplace("TaskListID2", std::move(task_list_2));
tasks_in_task_lists_.emplace("TaskListID3",
std::make_unique<ui::ListModel<Task>>());
tasks_in_task_lists_.emplace("TaskListID4",
std::make_unique<ui::ListModel<Task>>());
tasks_in_task_lists_.emplace("TaskListID5",
std::make_unique<ui::ListModel<Task>>());
tasks_in_task_lists_.emplace("TaskListID6",
std::make_unique<ui::ListModel<Task>>());
}

} // namespace ash::api
Original file line number Diff line number Diff line change
Expand Up @@ -2,40 +2,38 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ASH_GLANCEABLES_TASKS_FAKE_GLANCEABLES_TASKS_CLIENT_H_
#define ASH_GLANCEABLES_TASKS_FAKE_GLANCEABLES_TASKS_CLIENT_H_
#ifndef ASH_API_TASKS_FAKE_TASKS_CLIENT_H_
#define ASH_API_TASKS_FAKE_TASKS_CLIENT_H_

#include <list>
#include <string>
#include <vector>

#include "ash/api/tasks/tasks_client.h"
#include "ash/ash_export.h"
#include "ash/glanceables/tasks/glanceables_tasks_client.h"
#include "base/containers/flat_map.h"
#include "base/functional/callback_forward.h"
#include "ui/base/models/list_model.h"

namespace ash {
namespace ash::api {

struct GlanceablesTask;
struct GlanceablesTaskList;
struct Task;
struct TaskList;

class ASH_EXPORT FakeGlanceablesTasksClient : public GlanceablesTasksClient {
class ASH_EXPORT FakeTasksClient : public TasksClient {
public:

explicit FakeGlanceablesTasksClient(base::Time tasks_due_time);
FakeGlanceablesTasksClient(const FakeGlanceablesTasksClient&) = delete;
FakeGlanceablesTasksClient& operator=(const FakeGlanceablesTasksClient&) =
delete;
~FakeGlanceablesTasksClient() override;
explicit FakeTasksClient(base::Time tasks_due_time);
FakeTasksClient(const FakeTasksClient&) = delete;
FakeTasksClient& operator=(const FakeTasksClient&) = delete;
~FakeTasksClient() override;

std::vector<std::string> pending_completed_tasks() const {
return pending_completed_tasks_;
}

int completed_task_count() { return completed_tasks_; }

// GlanceablesTasksClient:
// TasksClient:
void GetTaskLists(GetTaskListsCallback callback) override;
void GetTasks(const std::string& task_list_id,
GetTasksCallback callback) override;
Expand All @@ -47,7 +45,7 @@ class ASH_EXPORT FakeGlanceablesTasksClient : public GlanceablesTasksClient {
void UpdateTask(const std::string& task_list_id,
const std::string& task_id,
const std::string& title,
GlanceablesTasksClient::UpdateTaskCallback callback) override;
TasksClient::UpdateTaskCallback callback) override;
void OnGlanceablesBubbleClosed(OnAllPendingCompletedTasksSavedCallback
callback = base::DoNothing()) override;

Expand All @@ -62,20 +60,20 @@ class ASH_EXPORT FakeGlanceablesTasksClient : public GlanceablesTasksClient {

void set_paused(bool paused) { paused_ = paused; }

ui::ListModel<GlanceablesTaskList>* task_lists() { return task_lists_.get(); }
ui::ListModel<TaskList>* task_lists() { return task_lists_.get(); }

private:
void PopulateTasks(base::Time tasks_due_time);
void PopulateTaskLists(base::Time tasks_due_time);

// All available task lists.
std::unique_ptr<ui::ListModel<GlanceablesTaskList>> task_lists_;
std::unique_ptr<ui::ListModel<TaskList>> task_lists_;

// Tracks completed tasks and the task list they belong to.
std::vector<std::string> pending_completed_tasks_;

// All available tasks grouped by task list id.
base::flat_map<std::string, std::unique_ptr<ui::ListModel<GlanceablesTask>>>
base::flat_map<std::string, std::unique_ptr<ui::ListModel<Task>>>
tasks_in_task_lists_;

// Number of times `OnGlanceablesBubbleClosed()` has been called.
Expand All @@ -90,6 +88,6 @@ class ASH_EXPORT FakeGlanceablesTasksClient : public GlanceablesTasksClient {
std::list<base::OnceClosure> pending_get_task_lists_callbacks_;
};

} // namespace ash
} // namespace ash::api

#endif // ASH_GLANCEABLES_TASKS_FAKE_GLANCEABLES_TASKS_CLIENT_H_
#endif // ASH_API_TASKS_FAKE_TASKS_CLIENT_H_
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ASH_GLANCEABLES_TASKS_GLANCEABLES_TASKS_CLIENT_H_
#define ASH_GLANCEABLES_TASKS_GLANCEABLES_TASKS_CLIENT_H_
#ifndef ASH_API_TASKS_TASKS_CLIENT_H_
#define ASH_API_TASKS_TASKS_CLIENT_H_

#include <string>

Expand All @@ -12,18 +12,17 @@
#include "base/functional/callback_helpers.h"
#include "ui/base/models/list_model.h"

namespace ash {
namespace ash::api {

struct GlanceablesTask;
struct GlanceablesTaskList;
struct Task;
struct TaskList;

// Interface for the tasks browser client.
class ASH_EXPORT GlanceablesTasksClient {
class ASH_EXPORT TasksClient {
public:
using GetTaskListsCallback =
base::OnceCallback<void(ui::ListModel<GlanceablesTaskList>* task_lists)>;
using GetTasksCallback =
base::OnceCallback<void(ui::ListModel<GlanceablesTask>* tasks)>;
base::OnceCallback<void(ui::ListModel<TaskList>* task_lists)>;
using GetTasksCallback = base::OnceCallback<void(ui::ListModel<Task>* tasks)>;
using UpdateTaskCallback = base::OnceCallback<void(bool success)>;
using OnAllPendingCompletedTasksSavedCallback = base::OnceClosure;

Expand Down Expand Up @@ -59,9 +58,9 @@ class ASH_EXPORT GlanceablesTasksClient {
virtual void OnGlanceablesBubbleClosed(
OnAllPendingCompletedTasksSavedCallback callback = base::DoNothing()) = 0;

virtual ~GlanceablesTasksClient() = default;
virtual ~TasksClient() = default;
};

} // namespace ash
} // namespace ash::api

#endif // ASH_GLANCEABLES_TASKS_GLANCEABLES_TASKS_CLIENT_H_
#endif // ASH_API_TASKS_TASKS_CLIENT_H_
41 changes: 41 additions & 0 deletions ash/api/tasks/tasks_types.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ash/api/tasks/tasks_types.h"

#include "third_party/abseil-cpp/absl/types/optional.h"

namespace ash::api {

// ----------------------------------------------------------------------------
// TaskList:

TaskList::TaskList(const std::string& id,
const std::string& title,
const base::Time& updated)
: id(id), title(title), updated(updated) {}

TaskList::~TaskList() = default;

// ----------------------------------------------------------------------------
// Task:

Task::Task(const std::string& id,
const std::string& title,
bool completed,
const absl::optional<base::Time>& due,
bool has_subtasks,
bool has_email_link,
bool has_notes)
: id(id),
title(title),
completed(completed),
due(due),
has_subtasks(has_subtasks),
has_email_link(has_email_link),
has_notes(has_notes) {}

Task::~Task() = default;

} // namespace ash::api

0 comments on commit bc96b7d

Please sign in to comment.