Skip to content

Commit

Permalink
[CrOS Network] Add NetworkDetailNetworkView
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 NetworkDetailedNetworkView and
NetworkDetailedNetworkViewImpl.

Bug: b/207089013
Test: ran CQ and built this on DUT.
Change-Id: I0c5f4659bb0b11523777d8821086bbfc4bbb3d28
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3537888
Reviewed-by: Chad Duffin <chadduffin@chromium.org>
Commit-Queue: Theo Johnson-kanu <tjohnsonkanu@google.com>
Cr-Commit-Position: refs/heads/main@{#985324}
  • Loading branch information
Theo Johnson-Kanu authored and Chromium LUCI CQ committed Mar 25, 2022
1 parent 87bb847 commit e23c636
Show file tree
Hide file tree
Showing 6 changed files with 239 additions and 0 deletions.
5 changes: 5 additions & 0 deletions ash/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -1254,6 +1254,10 @@ component("ash") {
"system/network/cellular_setup_notifier.h",
"system/network/fake_network_detailed_view_delegate.cc",
"system/network/fake_network_detailed_view_delegate.h",
"system/network/network_detailed_network_view.cc",
"system/network/network_detailed_network_view.h",
"system/network/network_detailed_network_view_impl.cc",
"system/network/network_detailed_network_view_impl.h",
"system/network/network_detailed_view.cc",
"system/network/network_detailed_view.h",
"system/network/network_feature_pod_button.cc",
Expand Down Expand Up @@ -2630,6 +2634,7 @@ test("ash_unittests") {
"system/network/active_network_icon_unittest.cc",
"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_unittest.cc",
"system/network/network_feature_pod_button_unittest.cc",
"system/network/network_feature_pod_controller_unittest.cc",
Expand Down
38 changes: 38 additions & 0 deletions ash/system/network/network_detailed_network_view.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// 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_network_view.h"

#include <memory>
#include "ash/system/network/network_detailed_network_view_impl.h"
#include "ash/system/tray/detailed_view_delegate.h"

namespace ash {
namespace tray {
namespace {
NetworkDetailedNetworkView::Factory* g_test_factory = nullptr;
} // namespace

NetworkDetailedNetworkView::Delegate::~Delegate() = default;

NetworkDetailedNetworkView::NetworkDetailedNetworkView(Delegate* delegate)
: delegate_(delegate) {}

std::unique_ptr<NetworkDetailedNetworkView>
NetworkDetailedNetworkView::Factory::Create(
DetailedViewDelegate* detailed_view_delegate,
Delegate* delegate) {
if (g_test_factory)
return g_test_factory->CreateForTesting(delegate); // IN-TEST
return std::make_unique<tray::NetworkDetailedNetworkViewImpl>(
detailed_view_delegate, delegate);
}

void NetworkDetailedNetworkView::Factory::SetFactoryForTesting(
Factory* test_factory) {
g_test_factory = test_factory;
}

} // namespace tray
} // namespace ash
78 changes: 78 additions & 0 deletions ash/system/network/network_detailed_network_view.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
// 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_NETWORK_VIEW_H_
#define ASH_SYSTEM_NETWORK_NETWORK_DETAILED_NETWORK_VIEW_H_

#include "ash/ash_export.h"
#include "ash/system/network/network_detailed_view.h"

namespace ash {

class DetailedViewDelegate;

namespace tray {

// This class defines both the interface used to interact with the
// NetworkDetailedView and declares delegate interface it uses to propagate user
// interactions. It also defines the factory used to create instances of
// implementations of this class.
class ASH_EXPORT NetworkDetailedNetworkView {
public:
// This class defines the interface that NetworkDetailedNetworkView will use
// to propagate user interactions.
class Delegate : public NetworkDetailedView::Delegate {
public:
Delegate() = default;
~Delegate() override;

virtual void OnWifiToggleClicked(bool new_state) = 0;
virtual void OnMobileToggleClicked(bool new_state) = 0;
};

class Factory {
public:
Factory(const Factory&) = delete;
const Factory& operator=(const Factory&) = delete;
virtual ~Factory() = default;

static std::unique_ptr<NetworkDetailedNetworkView> Create(
DetailedViewDelegate* detailed_view_delegate,
Delegate* delegate);
static void SetFactoryForTesting(Factory* test_factory);

protected:
Factory() = default;

virtual std::unique_ptr<NetworkDetailedNetworkView> CreateForTesting(
Delegate* delegate) = 0;
};

NetworkDetailedNetworkView(const NetworkDetailedNetworkView&) = delete;
NetworkDetailedNetworkView& operator=(const NetworkDetailedNetworkView&) =
delete;
virtual ~NetworkDetailedNetworkView() = default;

// Returns the implementation casted to views::View*. This may be |nullptr|
// when testing, where the implementation might not inherit from views::View.
virtual views::View* GetAsView() = 0;

// TODO(b/207089013): Add AddNetworkListItem() when NetworkListNetworkItemView
// is available, return NetworkListNetworkItemView*, and also add a function
// that creates NetworkListNetworkHeaderView and returns view when
// NetworkListNetworkHeaderView is available.

protected:
explicit NetworkDetailedNetworkView(Delegate* delegate);

Delegate* delegate() { return delegate_; }

private:
Delegate* delegate_;
};

} // namespace tray
} // namespace ash

#endif // ASH_SYSTEM_NETWORK_NETWORK_DETAILED_NETWORK_VIEW_H_
31 changes: 31 additions & 0 deletions ash/system/network/network_detailed_network_view_impl.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// 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_network_view_impl.h"

#include "ash/constants/ash_features.h"
#include "ash/system/network/network_detailed_view.h"
#include "ash/system/tray/detailed_view_delegate.h"

namespace ash {
namespace tray {

NetworkDetailedNetworkViewImpl::NetworkDetailedNetworkViewImpl(
DetailedViewDelegate* detailed_view_delegate,
NetworkDetailedNetworkView::Delegate* delegate)
: NetworkDetailedView(detailed_view_delegate,
delegate,
NetworkDetailedView::ListType::LIST_TYPE_NETWORK),
NetworkDetailedNetworkView(delegate) {
DCHECK(ash::features::IsQuickSettingsNetworkRevampEnabled());
}

NetworkDetailedNetworkViewImpl::~NetworkDetailedNetworkViewImpl() = default;

views::View* NetworkDetailedNetworkViewImpl::GetAsView() {
return this;
}

} // namespace tray
} // namespace ash
42 changes: 42 additions & 0 deletions ash/system/network/network_detailed_network_view_impl.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// 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_NETWORK_VIEW_IMPL_H_
#define ASH_SYSTEM_NETWORK_NETWORK_DETAILED_NETWORK_VIEW_IMPL_H_

#include "ash/ash_export.h"

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

namespace ash {

class DetailedViewDelegate;

namespace tray {

// This class is an implementation for NetworkDetailedNetworkView.
// TODO(b/207089013): extend and implement
// NetworkListNetworkHeaderView::Delegate when available.
class ASH_EXPORT NetworkDetailedNetworkViewImpl
: public NetworkDetailedView,
public NetworkDetailedNetworkView {
public:
NetworkDetailedNetworkViewImpl(
DetailedViewDelegate* detailed_view_delegate,
NetworkDetailedNetworkView::Delegate* delegate);
NetworkDetailedNetworkViewImpl(const NetworkDetailedNetworkViewImpl&) =
delete;
NetworkDetailedNetworkViewImpl& operator=(
const NetworkDetailedNetworkViewImpl&) = delete;
~NetworkDetailedNetworkViewImpl() override;

private:
// NetworkDetailedNetworkView:
views::View* GetAsView() override;
};

} // namespace tray
} // namespace ash

#endif // ASH_SYSTEM_NETWORK_NETWORK_DETAILED_NETWORK_VIEW_H_
45 changes: 45 additions & 0 deletions ash/system/network/network_detailed_network_view_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_network_view_impl.h"

#include <memory>

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

namespace ash {
namespace tray {

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

feature_list_.InitAndEnableFeature(features::kQuickSettingsNetworkRevamp);

detailed_view_delegate_ =
std::make_unique<DetailedViewDelegate>(/*tray_controller=*/nullptr);
network_detailed_network_view_ =
std::make_unique<NetworkDetailedNetworkViewImpl>(
detailed_view_delegate_.get(),
/*delegate=*/nullptr);
}

void TearDown() override { AshTestBase::TearDown(); }

private:
base::test::ScopedFeatureList feature_list_;
std::unique_ptr<DetailedViewDelegate> detailed_view_delegate_;
std::unique_ptr<NetworkDetailedNetworkView> network_detailed_network_view_;
};

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

} // namespace tray
} // namespace ash

0 comments on commit e23c636

Please sign in to comment.