Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(534)

Side by Side Diff: chromeos/components/tether/host_scan_device_prioritizer.cc

Issue 2945643002: [CrOS Tether] Sort Tether network lists. (Closed)
Patch Set: stevenjb@ comments. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chromeos/components/tether/host_scan_device_prioritizer.h"
6
7 #include "base/memory/ptr_util.h"
8 #include "base/values.h"
9 #include "chromeos/components/tether/pref_names.h"
10 #include "chromeos/components/tether/tether_host_response_recorder.h"
11 #include "components/prefs/pref_registry_simple.h"
12 #include "components/prefs/pref_service.h"
13
14 namespace chromeos {
15
16 namespace tether {
17
18 HostScanDevicePrioritizer::HostScanDevicePrioritizer(
19 TetherHostResponseRecorder* tether_host_response_recorder)
20 : tether_host_response_recorder_(tether_host_response_recorder) {}
21
22 HostScanDevicePrioritizer::~HostScanDevicePrioritizer() {}
23
24 void HostScanDevicePrioritizer::SortByHostScanOrder(
25 std::vector<cryptauth::RemoteDevice>* remote_devices) const {
26 // First, fetch the hosts which have previously responded.
27 std::vector<std::string> prioritized_ids =
28 tether_host_response_recorder_->GetPreviouslyAvailableHostIds();
29
30 std::vector<std::string> previously_connectable_host_ids =
31 tether_host_response_recorder_->GetPreviouslyConnectedHostIds();
32 if (!previously_connectable_host_ids.empty()) {
33 // If there is a most-recently connectable host, insert it at the front of
34 // the list.
35 prioritized_ids.insert(prioritized_ids.begin(),
36 previously_connectable_host_ids[0]);
37 }
38
39 // Iterate from the last stored ID to the first stored ID. This ensures that
40 // the items at the front of the list end up in the front of the prioritized
41 // |remote_devices| vector.
42 for (auto prioritized_it = prioritized_ids.rbegin();
43 prioritized_it != prioritized_ids.rend(); ++prioritized_it) {
44 // Iterate through |remote_devices| to see if a device exists with a
45 // device ID of |stored_id|. If one exists, remove it from its previous
46 // position in the list and add it at the front instead.
47 for (auto remote_devices_it = remote_devices->begin();
48 remote_devices_it != remote_devices->end(); ++remote_devices_it) {
49 if (remote_devices_it->GetDeviceId() != *prioritized_it) {
50 continue;
51 }
52
53 cryptauth::RemoteDevice device_to_move = *remote_devices_it;
54 remote_devices->erase(remote_devices_it);
55 remote_devices->insert(remote_devices->begin(), device_to_move);
56 break;
57 }
58 }
59 }
60
61 } // namespace tether
62
63 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698