Skip to content

Commit

Permalink
[CrOS Network] Add NetworkDetailedViewController class
Browse files Browse the repository at this point in the history
This CL continues the effort to refactor network quick settings,
it adds new classes NetworkDetailedViewController and shows
NetworkDetailedNetworkView when quickSettingsNetworkRevamp is
enabled.

screenshot: https://screenshot.googleplex.com/4DQzW752UZVNEpS.png

      also built and deployed to test device

Bug: b/207089013
Test: Added a unittest for NetworkDetailedViewController and ran CQ,
Change-Id: I1be4b192d167a6ab27bf0f466c7effc7057f35a0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3559031
Reviewed-by: Chad Duffin <chadduffin@chromium.org>
Reviewed-by: Alex Newcomer <newcomer@chromium.org>
Commit-Queue: Theo Johnson-kanu <tjohnsonkanu@google.com>
Cr-Commit-Position: refs/heads/main@{#988012}
  • Loading branch information
Theo Johnson-Kanu authored and Chromium LUCI CQ committed Apr 1, 2022
1 parent 59ac9f2 commit 87b021b
Show file tree
Hide file tree
Showing 8 changed files with 185 additions and 3 deletions.
3 changes: 3 additions & 0 deletions ash/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -1270,6 +1270,8 @@ component("ash") {
"system/network/network_detailed_network_view_impl.h",
"system/network/network_detailed_view.cc",
"system/network/network_detailed_view.h",
"system/network/network_detailed_view_controller.cc",
"system/network/network_detailed_view_controller.h",
"system/network/network_feature_pod_button.cc",
"system/network/network_feature_pod_button.h",
"system/network/network_feature_pod_button_legacy.cc",
Expand Down Expand Up @@ -2661,6 +2663,7 @@ test("ash_unittests") {
"system/network/auto_connect_notifier_unittest.cc",
"system/network/cellular_setup_notifier_unittest.cc",
"system/network/network_detailed_network_view_unittest.cc",
"system/network/network_detailed_view_controller_unittest.cc",
"system/network/network_detailed_view_unittest.cc",
"system/network/network_feature_pod_button_unittest.cc",
"system/network/network_feature_pod_controller_unittest.cc",
Expand Down
4 changes: 4 additions & 0 deletions ash/system/network/network_detailed_network_view_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "ash/constants/ash_features.h"
#include "ash/system/network/network_detailed_view.h"
#include "ash/system/tray/detailed_view_delegate.h"
#include "ui/base/metadata/metadata_impl_macros.h"

namespace ash {
namespace tray {
Expand All @@ -27,5 +28,8 @@ views::View* NetworkDetailedNetworkViewImpl::GetAsView() {
return this;
}

BEGIN_METADATA(NetworkDetailedNetworkViewImpl, views::View)
END_METADATA

} // namespace tray
} // namespace ash
3 changes: 3 additions & 0 deletions ash/system/network/network_detailed_network_view_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include "ash/ash_export.h"

#include "ash/system/network/network_detailed_network_view.h"
#include "ui/base/metadata/metadata_impl_macros.h"

namespace ash {

Expand All @@ -22,6 +23,8 @@ class ASH_EXPORT NetworkDetailedNetworkViewImpl
: public NetworkDetailedView,
public NetworkDetailedNetworkView {
public:
METADATA_HEADER(NetworkDetailedNetworkViewImpl);

NetworkDetailedNetworkViewImpl(
DetailedViewDelegate* detailed_view_delegate,
NetworkDetailedNetworkView::Delegate* delegate);
Expand Down
56 changes: 56 additions & 0 deletions ash/system/network/network_detailed_view_controller.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
// Copyright 2022 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ash/system/network/network_detailed_view_controller.h"

#include "ash/constants/ash_features.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/network/network_detailed_network_view.h"
#include "ash/system/network/network_list_view_controller.h"
#include "ash/system/tray/detailed_view_delegate.h"
#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/views/view.h"

namespace ash {
namespace tray {

NetworkDetailedViewController::NetworkDetailedViewController(
UnifiedSystemTrayController* tray_controller)
: detailed_view_delegate_(
std::make_unique<DetailedViewDelegate>(tray_controller)) {
DCHECK(ash::features::IsQuickSettingsNetworkRevampEnabled());
}

NetworkDetailedViewController::~NetworkDetailedViewController() = default;

views::View* NetworkDetailedViewController::CreateView() {
DCHECK(!network_detailed_view_);
std::unique_ptr<tray::NetworkDetailedNetworkView> view =
NetworkDetailedNetworkView::Factory::Create(detailed_view_delegate_.get(),
/*delegate=*/this);
network_detailed_view_ = view.get();
network_list_view_controller_ =
NetworkListViewController::Factory::Create(view.get());

// We are expected to return an unowned pointer that the caller is responsible
// for deleting.
return view.release()->GetAsView();
}

std::u16string NetworkDetailedViewController::GetAccessibleName() const {
return l10n_util::GetStringUTF16(
IDS_ASH_QUICK_SETTINGS_BUBBLE_NETWORK_SETTINGS_ACCESSIBLE_DESCRIPTION);
}

void NetworkDetailedViewController::OnNetworkListItemSelected(
const chromeos::network_config::mojom::NetworkStatePropertiesPtr& network) {
}

void NetworkDetailedViewController::OnMobileToggleClicked(bool new_state) {}

void NetworkDetailedViewController::OnWifiToggleClicked(bool new_state) {}

} // namespace tray
} // namespace ash
63 changes: 63 additions & 0 deletions ash/system/network/network_detailed_view_controller.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// Copyright 2022 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ASH_SYSTEM_NETWORK_NETWORK_DETAILED_VIEW_CONTROLLER_H_
#define ASH_SYSTEM_NETWORK_NETWORK_DETAILED_VIEW_CONTROLLER_H_

#include <memory>
#include <string>

#include "ash/ash_export.h"
#include "ash/system/network/network_detailed_network_view.h"
#include "ash/system/network/network_detailed_view.h"
#include "ash/system/network/network_list_view_controller.h"
#include "ash/system/tray/detailed_view_delegate.h"
#include "ash/system/unified/detailed_view_controller.h"
#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h"

namespace views {
class View;
} // namespace views

namespace ash {
namespace tray {

// This class encapsulates the logic to update the detailed Network device
// page within the quick settings and translate user interaction with the
// detailed view into Network state changes.
class ASH_EXPORT NetworkDetailedViewController
: public DetailedViewController,
public NetworkDetailedNetworkView::Delegate {
public:
explicit NetworkDetailedViewController(
UnifiedSystemTrayController* tray_controller);
NetworkDetailedViewController(const NetworkDetailedViewController&) = delete;
NetworkDetailedViewController& operator=(
const NetworkDetailedViewController&) = delete;
~NetworkDetailedViewController() override;

// DetailedViewControllerBase:
views::View* CreateView() override;
std::u16string GetAccessibleName() const override;

private:
// NetworkDetailedView::Delegate:
void OnNetworkListItemSelected(
const chromeos::network_config::mojom::NetworkStatePropertiesPtr& network)
override;

// NetworkDetailedNetworkView::Delegate:
void OnMobileToggleClicked(bool new_state) override;
void OnWifiToggleClicked(bool new_state) override;

const std::unique_ptr<DetailedViewDelegate> detailed_view_delegate_;

NetworkDetailedNetworkView* network_detailed_view_ = nullptr;
std::unique_ptr<NetworkListViewController> network_list_view_controller_;
};

} // namespace tray
} // namespace ash

#endif // ASH_SYSTEM_NETWORK_NETWORK_DETAILED_VIEW_CONTROLLER_H_
45 changes: 45 additions & 0 deletions ash/system/network/network_detailed_view_controller_unittest.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
// Copyright 2022 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ash/system/network/network_detailed_view_controller.h"

#include <memory>

#include "ash/constants/ash_features.h"
#include "ash/test/ash_test_base.h"
#include "base/test/scoped_feature_list.h"

namespace ash {
namespace tray {

class NetworkDetailedViewControllerTest : public AshTestBase {
public:
void SetUp() override {
AshTestBase::SetUp();

feature_list_.InitAndEnableFeature(features::kQuickSettingsNetworkRevamp);

network_detailed_view_controller_ =
std::make_unique<NetworkDetailedViewController>(
/*tray_controller=*/nullptr);
}

void TearDown() override {
network_detailed_view_controller_.reset();

AshTestBase::TearDown();
}

private:
base::test::ScopedFeatureList feature_list_;
std::unique_ptr<NetworkDetailedViewController>
network_detailed_view_controller_;
};

TEST_F(NetworkDetailedViewControllerTest, CanConstruct) {
EXPECT_TRUE(true);
}

} // namespace tray
} // namespace ash
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,8 @@ class NetworkFeaturePodControllerTest : public AshTestBase {
const views::View::Views& children =
tray_view()->detailed_view()->children();
EXPECT_EQ(1u, children.size());
EXPECT_STREQ("NetworkListView", children.at(0)->GetClassName());
EXPECT_STREQ("NetworkDetailedNetworkViewImpl",
children.at(0)->GetClassName());
}

void CheckSignalStrengthSubLabel(
Expand Down
11 changes: 9 additions & 2 deletions ash/system/unified/unified_system_tray_controller.cc
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include "ash/system/model/clock_model.h"
#include "ash/system/model/system_tray_model.h"
#include "ash/system/nearby_share/nearby_share_feature_pod_controller.h"
#include "ash/system/network/network_detailed_view_controller.h"
#include "ash/system/network/network_feature_pod_controller.h"
#include "ash/system/network/network_feature_pod_controller_legacy.h"
#include "ash/system/network/unified_network_detailed_view_controller.h"
Expand Down Expand Up @@ -342,8 +343,14 @@ void UnifiedSystemTrayController::ShowNetworkDetailedView(bool force) {
return;

base::RecordAction(base::UserMetricsAction("StatusArea_Network_Detailed"));
ShowDetailedView(
std::make_unique<UnifiedNetworkDetailedViewController>(this));

if (ash::features::IsQuickSettingsNetworkRevampEnabled()) {
ShowDetailedView(
std::make_unique<tray::NetworkDetailedViewController>(this));
} else {
ShowDetailedView(
std::make_unique<UnifiedNetworkDetailedViewController>(this));
}
}

void UnifiedSystemTrayController::ShowBluetoothDetailedView() {
Expand Down

0 comments on commit 87b021b

Please sign in to comment.