[Glanceables] Add submission status on assignments for teacher UI
GlanceableClassroomItemView will now display submission status information when its assignment has a value for its `submissions_state`. Also, OnGetStudentAssignments() and OnGetTeacherAssignments() had duplicated code which are replaced with the single base class function OnGetAssignments(). Bug: b/283371064 Change-Id: I62b33edbc6528182c6ffa32eeae33c196ac6646a Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4679299 Reviewed-by: Toni Barzic <tbarzic@chromium.org> Commit-Queue: Matthew Mourgos <mmourgos@chromium.org> Reviewed-by: Matthew Mourgos <mmourgos@chromium.org> Cr-Commit-Position: refs/heads/main@{#1170025}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
6fbeaf096f
commit
e285944feb
ash
@ -6716,6 +6716,9 @@ New install
|
||||
<message name="IDS_GLANCEABLES_WELCOME_LABEL" desc="Personalized greeting / welcome message shown on glanceables surfaces (welcome screen and overview mode).">
|
||||
Welcome back, <ph name="GIVEN_NAME">$1<ex>John</ex></ph>
|
||||
</message>
|
||||
<message name="IDS_GLANCEABLES_ITEMS_TURNED_IN_AND_GRADED" desc="The teacher classroom glanceable shows upcoming/missed/completed assignments from Google Classroom. For each assignment item, this text displays the number of submissions turned in along side the total number of sumbissions. Then this text also displays the number of submissions currently graded.">
|
||||
<ph name="NUM_TURNED_IN">$1<ex>8</ex></ph>/<ph name="TOTAL_NUM_OF_SUBMISSIONS">$2<ex>22</ex></ph> turned in • <ph name="NUM_GRADED">$3<ex>5</ex></ph> graded
|
||||
</message>
|
||||
<message name="IDS_GLANCEABLES_LIST_FOOTER_ITEMS_COUNT_LABEL" desc="The glanceable displays classroom or tasks items fetched from Google Classroom or Google Tasks API. The first placeholder value is the number of items visible in the UI. The second placeholder value is the total number of items returned from API.">
|
||||
Showing <ph name="NUM_SHOWN_ITEMS">$1<ex>5</ex></ph> out of <ph name="NUM_TOTAL_ITEMS">$2<ex>10</ex></ph>
|
||||
</message>
|
||||
|
@ -0,0 +1 @@
|
||||
e9d416f33300d955573d35387c6d511b46e118ba
|
@ -21,6 +21,7 @@
|
||||
#include "base/check.h"
|
||||
#include "base/functional/callback_forward.h"
|
||||
#include "base/i18n/time_formatting.h"
|
||||
#include "base/strings/string_number_conversions.h"
|
||||
#include "base/strings/utf_string_conversions.h"
|
||||
#include "base/time/time.h"
|
||||
#include "base/types/cxx23_to_underlying.h"
|
||||
@ -28,6 +29,7 @@
|
||||
#include "ui/base/metadata/metadata_impl_macros.h"
|
||||
#include "ui/base/models/image_model.h"
|
||||
#include "ui/chromeos/styles/cros_tokens_color_mappings.h"
|
||||
#include "ui/gfx/geometry/insets.h"
|
||||
#include "ui/gfx/geometry/size.h"
|
||||
#include "ui/views/background.h"
|
||||
#include "ui/views/controls/button/button.h"
|
||||
@ -50,7 +52,7 @@ constexpr auto kInteriorMargin = gfx::Insets::VH(8, 0);
|
||||
|
||||
// Styles for the icon view.
|
||||
constexpr int kIconViewBackgroundRadius = 16;
|
||||
constexpr auto kIconViewMargin = gfx::Insets::VH(0, 12);
|
||||
constexpr auto kIconViewMargin = gfx::Insets::VH(4, 12);
|
||||
constexpr auto kIconViewPreferredSize =
|
||||
gfx::Size(kIconViewBackgroundRadius * 2, kIconViewBackgroundRadius * 2);
|
||||
constexpr int kIconSize = 20;
|
||||
@ -99,7 +101,16 @@ std::u16string GetFormattedDueTime(const base::Time& due) {
|
||||
: calendar_utils::GetTwentyFourHourClockTime(due);
|
||||
}
|
||||
|
||||
std::unique_ptr<views::ImageView> BuildIcon() {
|
||||
std::u16string GetTurnedInAndGradedLabel(
|
||||
const GlanceablesClassroomAggregatedSubmissionsState& state) {
|
||||
return l10n_util::GetStringFUTF16(
|
||||
IDS_GLANCEABLES_ITEMS_TURNED_IN_AND_GRADED,
|
||||
base::NumberToString16(state.number_turned_in),
|
||||
base::NumberToString16(state.total_count),
|
||||
base::NumberToString16(state.number_graded));
|
||||
}
|
||||
|
||||
std::unique_ptr<views::View> BuildIcon() {
|
||||
return views::Builder<views::ImageView>()
|
||||
.SetBackground(views::CreateThemedRoundedRectBackground(
|
||||
cros_tokens::kCrosSysSystemOnBase1, kIconViewBackgroundRadius))
|
||||
@ -116,33 +127,52 @@ std::unique_ptr<views::BoxLayoutView> BuildAssignmentTitleLabels(
|
||||
const GlanceablesClassroomAssignment* assignment) {
|
||||
const auto* const typography_provider = TypographyProvider::Get();
|
||||
|
||||
return views::Builder<views::BoxLayoutView>()
|
||||
.SetOrientation(views::BoxLayout::Orientation::kVertical)
|
||||
.SetMainAxisAlignment(views::BoxLayout::MainAxisAlignment::kCenter)
|
||||
.SetCrossAxisAlignment(views::BoxLayout::CrossAxisAlignment::kStart)
|
||||
.SetProperty(
|
||||
views::kFlexBehaviorKey,
|
||||
views::FlexSpecification(views::MinimumFlexSizeRule::kScaleToZero,
|
||||
views::MaximumFlexSizeRule::kUnbounded))
|
||||
.AddChild(views::Builder<views::Label>()
|
||||
.SetText(base::UTF8ToUTF16(assignment->course_work_title))
|
||||
.SetID(base::to_underlying(
|
||||
GlanceablesViewId::kClassroomItemCourseWorkTitleLabel))
|
||||
.SetEnabledColorId(cros_tokens::kCrosSysOnSurface)
|
||||
.SetFontList(typography_provider->ResolveTypographyToken(
|
||||
TypographyToken::kCrosButton2))
|
||||
.SetLineHeight(typography_provider->ResolveLineHeight(
|
||||
TypographyToken::kCrosButton2)))
|
||||
.AddChild(views::Builder<views::Label>()
|
||||
.SetText(base::UTF8ToUTF16(assignment->course_title))
|
||||
.SetID(base::to_underlying(
|
||||
GlanceablesViewId::kClassroomItemCourseTitleLabel))
|
||||
.SetEnabledColorId(cros_tokens::kCrosSysOnSurfaceVariant)
|
||||
.SetFontList(typography_provider->ResolveTypographyToken(
|
||||
TypographyToken::kCrosAnnotation1))
|
||||
.SetLineHeight(typography_provider->ResolveLineHeight(
|
||||
TypographyToken::kCrosAnnotation1)))
|
||||
.Build();
|
||||
auto title_label_views =
|
||||
views::Builder<views::BoxLayoutView>()
|
||||
.SetOrientation(views::BoxLayout::Orientation::kVertical)
|
||||
.SetMainAxisAlignment(views::BoxLayout::MainAxisAlignment::kCenter)
|
||||
.SetCrossAxisAlignment(views::BoxLayout::CrossAxisAlignment::kStart)
|
||||
.SetProperty(
|
||||
views::kFlexBehaviorKey,
|
||||
views::FlexSpecification(views::MinimumFlexSizeRule::kScaleToZero,
|
||||
views::MaximumFlexSizeRule::kUnbounded))
|
||||
.AddChild(
|
||||
views::Builder<views::Label>()
|
||||
.SetText(base::UTF8ToUTF16(assignment->course_work_title))
|
||||
.SetID(base::to_underlying(
|
||||
GlanceablesViewId::kClassroomItemCourseWorkTitleLabel))
|
||||
.SetEnabledColorId(cros_tokens::kCrosSysOnSurface)
|
||||
.SetFontList(typography_provider->ResolveTypographyToken(
|
||||
TypographyToken::kCrosButton2))
|
||||
.SetLineHeight(typography_provider->ResolveLineHeight(
|
||||
TypographyToken::kCrosButton2)))
|
||||
.AddChild(
|
||||
views::Builder<views::Label>()
|
||||
.SetText(base::UTF8ToUTF16(assignment->course_title))
|
||||
.SetID(base::to_underlying(
|
||||
GlanceablesViewId::kClassroomItemCourseTitleLabel))
|
||||
.SetEnabledColorId(cros_tokens::kCrosSysOnSurfaceVariant)
|
||||
.SetFontList(typography_provider->ResolveTypographyToken(
|
||||
TypographyToken::kCrosAnnotation1))
|
||||
.SetLineHeight(typography_provider->ResolveLineHeight(
|
||||
TypographyToken::kCrosAnnotation1)))
|
||||
.Build();
|
||||
if (assignment->submissions_state.has_value()) {
|
||||
title_label_views->AddChildView(
|
||||
views::Builder<views::Label>()
|
||||
.SetText(GetTurnedInAndGradedLabel(
|
||||
assignment->submissions_state.value()))
|
||||
.SetID(base::to_underlying(
|
||||
GlanceablesViewId::kClassroomItemTurnedInAndGradedLabel))
|
||||
.SetEnabledColorId(cros_tokens::kCrosSysPrimary)
|
||||
.SetFontList(typography_provider->ResolveTypographyToken(
|
||||
TypographyToken::kCrosBody2))
|
||||
.SetLineHeight(typography_provider->ResolveLineHeight(
|
||||
TypographyToken::kCrosBody2))
|
||||
.SetProperty(views::kMarginsKey, gfx::Insets::TLBR(4, 0, 0, 0))
|
||||
.Build());
|
||||
}
|
||||
return title_label_views;
|
||||
}
|
||||
|
||||
std::unique_ptr<views::BoxLayoutView> BuildDueLabels(
|
||||
@ -184,7 +214,7 @@ GlanceablesClassroomItemView::GlanceablesClassroomItemView(
|
||||
CHECK(assignment);
|
||||
|
||||
auto* const layout = SetLayoutManager(std::make_unique<views::FlexLayout>());
|
||||
layout->SetCrossAxisAlignment(views::LayoutAlignment::kCenter);
|
||||
layout->SetCrossAxisAlignment(views::LayoutAlignment::kStart);
|
||||
layout->SetInteriorMargin(kInteriorMargin);
|
||||
|
||||
// TODO(b/283370862): update accessible name.
|
||||
@ -204,18 +234,4 @@ GlanceablesClassroomItemView::~GlanceablesClassroomItemView() = default;
|
||||
BEGIN_METADATA(GlanceablesClassroomItemView, views::View)
|
||||
END_METADATA
|
||||
|
||||
GlanceablesClassroomTeacherItemView::GlanceablesClassroomTeacherItemView(
|
||||
const GlanceablesClassroomAssignment* assignment,
|
||||
base::RepeatingClosure pressed_callback)
|
||||
: GlanceablesClassroomItemView(assignment, std::move(pressed_callback)) {
|
||||
// TODO(b/283371064): Add grading/submission status for assignments in teacher
|
||||
// glanceable UI
|
||||
}
|
||||
|
||||
GlanceablesClassroomTeacherItemView::~GlanceablesClassroomTeacherItemView() =
|
||||
default;
|
||||
|
||||
BEGIN_METADATA(GlanceablesClassroomTeacherItemView, views::View)
|
||||
END_METADATA
|
||||
|
||||
} // namespace ash
|
||||
|
@ -29,23 +29,6 @@ class ASH_EXPORT GlanceablesClassroomItemView : public views::Button {
|
||||
~GlanceablesClassroomItemView() override;
|
||||
};
|
||||
|
||||
// A view which shows information about a single assignment in the classroom
|
||||
// glanceable.
|
||||
class ASH_EXPORT GlanceablesClassroomTeacherItemView
|
||||
: public GlanceablesClassroomItemView {
|
||||
public:
|
||||
METADATA_HEADER(GlanceablesClassroomTeacherItemView);
|
||||
|
||||
GlanceablesClassroomTeacherItemView(
|
||||
const GlanceablesClassroomAssignment* assignment,
|
||||
base::RepeatingClosure pressed_callback);
|
||||
GlanceablesClassroomTeacherItemView(
|
||||
const GlanceablesClassroomTeacherItemView&) = delete;
|
||||
GlanceablesClassroomTeacherItemView& operator=(
|
||||
const GlanceablesClassroomTeacherItemView&) = delete;
|
||||
~GlanceablesClassroomTeacherItemView() override;
|
||||
};
|
||||
|
||||
} // namespace ash
|
||||
|
||||
#endif // ASH_GLANCEABLES_CLASSROOM_GLANCEABLES_CLASSROOM_ITEM_VIEW_H_
|
||||
|
@ -26,6 +26,7 @@ enum class GlanceablesViewId {
|
||||
kClassroomItemCourseTitleLabel,
|
||||
kClassroomItemDueDateLabel,
|
||||
kClassroomItemDueTimeLabel,
|
||||
kClassroomItemTurnedInAndGradedLabel,
|
||||
};
|
||||
|
||||
} // namespace ash
|
||||
|
@ -7,6 +7,8 @@
|
||||
#include <memory>
|
||||
|
||||
#include "ash/glanceables/classroom/glanceables_classroom_client.h"
|
||||
#include "ash/glanceables/classroom/glanceables_classroom_item_view.h"
|
||||
#include "ash/glanceables/classroom/glanceables_classroom_types.h"
|
||||
#include "ash/glanceables/common/glanceables_list_footer_view.h"
|
||||
#include "ash/glanceables/common/glanceables_view_id.h"
|
||||
#include "ash/glanceables/glanceables_v2_controller.h"
|
||||
@ -36,6 +38,8 @@ constexpr int kSpacingAboveListContainerView = 16;
|
||||
|
||||
constexpr int kInteriorGlanceableBubbleMargin = 16;
|
||||
|
||||
constexpr int kMaxAssignments = 3;
|
||||
|
||||
} // namespace
|
||||
|
||||
ClassroomBubbleBaseView::ClassroomBubbleBaseView(
|
||||
@ -109,6 +113,27 @@ void ClassroomBubbleBaseView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
|
||||
node_data->SetName(u"Glanceables Bubble Classroom View Accessible Name");
|
||||
}
|
||||
|
||||
void ClassroomBubbleBaseView::OnGetAssignments(
|
||||
std::vector<std::unique_ptr<GlanceablesClassroomAssignment>> assignments) {
|
||||
list_container_view_->RemoveAllChildViews();
|
||||
|
||||
for (const auto& assignment : assignments) {
|
||||
list_container_view_->AddChildView(
|
||||
std::make_unique<GlanceablesClassroomItemView>(
|
||||
assignment.get(),
|
||||
base::BindRepeating(&ClassroomBubbleBaseView::OpenUrl,
|
||||
base::Unretained(this), assignment->link)));
|
||||
|
||||
if (list_container_view_->children().size() >= kMaxAssignments) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
list_container_view_->InvalidateLayout();
|
||||
|
||||
list_footer_view_->UpdateItemsCount(list_container_view_->children().size(),
|
||||
assignments.size());
|
||||
}
|
||||
|
||||
void ClassroomBubbleBaseView::OpenUrl(const GURL& url) const {
|
||||
const auto* const client =
|
||||
Shell::Get()->glanceables_v2_controller()->GetClassroomClient();
|
||||
|
@ -22,6 +22,7 @@ class ComboboxModel;
|
||||
namespace ash {
|
||||
|
||||
class GlanceablesListFooterView;
|
||||
struct GlanceablesClassroomAssignment;
|
||||
|
||||
class ASH_EXPORT ClassroomBubbleBaseView : public GlanceableTrayChildBubble {
|
||||
public:
|
||||
@ -42,6 +43,10 @@ class ASH_EXPORT ClassroomBubbleBaseView : public GlanceableTrayChildBubble {
|
||||
// classroom web UI based on the selected menu option.
|
||||
virtual void OnSeeAllPressed() = 0;
|
||||
|
||||
// Handles received assignments by rendering them in `list_container_view_`.
|
||||
void OnGetAssignments(
|
||||
std::vector<std::unique_ptr<GlanceablesClassroomAssignment>> assignments);
|
||||
|
||||
// Opens classroom url.
|
||||
void OpenUrl(const GURL& url) const;
|
||||
|
||||
|
@ -9,24 +9,19 @@
|
||||
#include <utility>
|
||||
|
||||
#include "ash/glanceables/classroom/glanceables_classroom_client.h"
|
||||
#include "ash/glanceables/classroom/glanceables_classroom_item_view.h"
|
||||
#include "ash/glanceables/classroom/glanceables_classroom_types.h"
|
||||
#include "ash/glanceables/common/glanceables_list_footer_view.h"
|
||||
#include "ash/glanceables/glanceables_v2_controller.h"
|
||||
#include "ash/shell.h"
|
||||
#include "ash/system/tray/detailed_view_delegate.h"
|
||||
#include "base/check.h"
|
||||
#include "base/functional/bind.h"
|
||||
#include "base/strings/string_piece_forward.h"
|
||||
#include "ui/gfx/geometry/insets.h"
|
||||
#include "ui/views/controls/combobox/combobox.h"
|
||||
#include "url/gurl.h"
|
||||
|
||||
namespace ash {
|
||||
namespace {
|
||||
|
||||
constexpr int kMaxAssignments = 3;
|
||||
|
||||
enum class StudentAssignmentsListType {
|
||||
kAssigned,
|
||||
kNoDueDate,
|
||||
@ -115,27 +110,6 @@ void ClassroomBubbleStudentView::OnSeeAllPressed() {
|
||||
}
|
||||
}
|
||||
|
||||
void ClassroomBubbleStudentView::OnGetStudentAssignments(
|
||||
std::vector<std::unique_ptr<GlanceablesClassroomAssignment>> assignments) {
|
||||
list_container_view_->RemoveAllChildViews();
|
||||
|
||||
for (const auto& assignment : assignments) {
|
||||
list_container_view_->AddChildView(
|
||||
std::make_unique<GlanceablesClassroomItemView>(
|
||||
assignment.get(),
|
||||
base::BindRepeating(&ClassroomBubbleStudentView::OpenUrl,
|
||||
base::Unretained(this), assignment->link)));
|
||||
|
||||
if (list_container_view_->children().size() >= kMaxAssignments) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
list_container_view_->InvalidateLayout();
|
||||
|
||||
list_footer_view_->UpdateItemsCount(list_container_view_->children().size(),
|
||||
assignments.size());
|
||||
}
|
||||
|
||||
void ClassroomBubbleStudentView::SelectedAssignmentListChanged() {
|
||||
auto* const client =
|
||||
Shell::Get()->glanceables_v2_controller()->GetClassroomClient();
|
||||
@ -150,9 +124,8 @@ void ClassroomBubbleStudentView::SelectedAssignmentListChanged() {
|
||||
CHECK(selected_index >= 0 ||
|
||||
selected_index < kStudentAssignmentsListTypeOrdered.size());
|
||||
|
||||
auto callback =
|
||||
base::BindOnce(&ClassroomBubbleStudentView::OnGetStudentAssignments,
|
||||
weak_ptr_factory_.GetWeakPtr());
|
||||
auto callback = base::BindOnce(&ClassroomBubbleStudentView::OnGetAssignments,
|
||||
weak_ptr_factory_.GetWeakPtr());
|
||||
switch (kStudentAssignmentsListTypeOrdered[selected_index]) {
|
||||
case StudentAssignmentsListType::kAssigned:
|
||||
return client->GetStudentAssignmentsWithApproachingDueDate(
|
||||
|
@ -9,8 +9,6 @@
|
||||
|
||||
namespace ash {
|
||||
|
||||
struct GlanceablesClassroomAssignment;
|
||||
|
||||
// class ClassroomBubbleStudentView : public views::View {
|
||||
class ASH_EXPORT ClassroomBubbleStudentView : public ClassroomBubbleBaseView {
|
||||
public:
|
||||
@ -27,11 +25,6 @@ class ASH_EXPORT ClassroomBubbleStudentView : public ClassroomBubbleBaseView {
|
||||
// Handle switching between assignment lists.
|
||||
void SelectedAssignmentListChanged();
|
||||
|
||||
// Handles received student assignments by rendering them in
|
||||
// `list_container_view_`.
|
||||
void OnGetStudentAssignments(
|
||||
std::vector<std::unique_ptr<GlanceablesClassroomAssignment>> assignments);
|
||||
|
||||
base::WeakPtrFactory<ClassroomBubbleStudentView> weak_ptr_factory_{this};
|
||||
};
|
||||
|
||||
|
@ -9,9 +9,7 @@
|
||||
#include <utility>
|
||||
|
||||
#include "ash/glanceables/classroom/glanceables_classroom_client.h"
|
||||
#include "ash/glanceables/classroom/glanceables_classroom_item_view.h"
|
||||
#include "ash/glanceables/classroom/glanceables_classroom_types.h"
|
||||
#include "ash/glanceables/common/glanceables_list_footer_view.h"
|
||||
#include "ash/glanceables/glanceables_v2_controller.h"
|
||||
#include "ash/shell.h"
|
||||
#include "ash/system/tray/detailed_view_delegate.h"
|
||||
@ -19,15 +17,12 @@
|
||||
#include "base/functional/bind.h"
|
||||
#include "base/strings/string_piece_forward.h"
|
||||
#include "base/strings/utf_string_conversions.h"
|
||||
#include "ui/gfx/geometry/insets.h"
|
||||
#include "ui/views/controls/combobox/combobox.h"
|
||||
#include "url/gurl.h"
|
||||
|
||||
namespace ash {
|
||||
namespace {
|
||||
|
||||
constexpr int kMaxAssignments = 3;
|
||||
|
||||
enum class TeacherAssignmentsListType {
|
||||
kDueSoon,
|
||||
kRecentlyDue,
|
||||
@ -113,27 +108,6 @@ void ClassroomBubbleTeacherView::OnSeeAllPressed() {
|
||||
}
|
||||
}
|
||||
|
||||
void ClassroomBubbleTeacherView::OnGetTeacherAssignments(
|
||||
std::vector<std::unique_ptr<GlanceablesClassroomAssignment>> assignments) {
|
||||
list_container_view_->RemoveAllChildViews();
|
||||
|
||||
for (const auto& assignment : assignments) {
|
||||
list_container_view_->AddChildView(
|
||||
std::make_unique<GlanceablesClassroomTeacherItemView>(
|
||||
assignment.get(),
|
||||
base::BindRepeating(&ClassroomBubbleTeacherView::OpenUrl,
|
||||
base::Unretained(this), assignment->link)));
|
||||
|
||||
if (list_container_view_->children().size() >= kMaxAssignments) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
list_container_view_->InvalidateLayout();
|
||||
|
||||
list_footer_view_->UpdateItemsCount(list_container_view_->children().size(),
|
||||
assignments.size());
|
||||
}
|
||||
|
||||
void ClassroomBubbleTeacherView::SelectedAssignmentListChanged() {
|
||||
auto* const client =
|
||||
Shell::Get()->glanceables_v2_controller()->GetClassroomClient();
|
||||
@ -148,9 +122,8 @@ void ClassroomBubbleTeacherView::SelectedAssignmentListChanged() {
|
||||
CHECK(selected_index >= 0 ||
|
||||
selected_index < kTeacherAssignmentsListTypeOrdered.size());
|
||||
|
||||
auto callback =
|
||||
base::BindOnce(&ClassroomBubbleTeacherView::OnGetTeacherAssignments,
|
||||
weak_ptr_factory_.GetWeakPtr());
|
||||
auto callback = base::BindOnce(&ClassroomBubbleTeacherView::OnGetAssignments,
|
||||
weak_ptr_factory_.GetWeakPtr());
|
||||
switch (kTeacherAssignmentsListTypeOrdered[selected_index]) {
|
||||
case TeacherAssignmentsListType::kDueSoon:
|
||||
return client->GetTeacherAssignmentsWithApproachingDueDate(
|
||||
|
@ -9,8 +9,6 @@
|
||||
|
||||
namespace ash {
|
||||
|
||||
struct GlanceablesClassroomAssignment;
|
||||
|
||||
class ASH_EXPORT ClassroomBubbleTeacherView : public ClassroomBubbleBaseView {
|
||||
public:
|
||||
explicit ClassroomBubbleTeacherView(DetailedViewDelegate* delegate);
|
||||
@ -26,11 +24,6 @@ class ASH_EXPORT ClassroomBubbleTeacherView : public ClassroomBubbleBaseView {
|
||||
// Handle switching between assignment lists.
|
||||
void SelectedAssignmentListChanged();
|
||||
|
||||
// Handles received teacher assignments by rendering them in
|
||||
// `list_container_view_`.
|
||||
void OnGetTeacherAssignments(
|
||||
std::vector<std::unique_ptr<GlanceablesClassroomAssignment>> assignments);
|
||||
|
||||
base::WeakPtrFactory<ClassroomBubbleTeacherView> weak_ptr_factory_{this};
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user