forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[CrOS Network] Add NetworkDetailNetworkView
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
Showing
6 changed files
with
239 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
45
ash/system/network/network_detailed_network_view_unittest.cc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |