1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.car.settings.wifi.details;
17 
18 import android.car.drivingstate.CarUxRestrictions;
19 import android.content.Context;
20 import android.net.LinkAddress;
21 
22 import androidx.core.text.BidiFormatter;
23 import androidx.preference.Preference;
24 
25 import com.android.car.settings.common.FragmentController;
26 
27 import java.net.Inet6Address;
28 import java.util.StringJoiner;
29 
30 /**
31  * Shows info about Wifi IPv6 address.
32  */
33 public class WifiIpv6AddressPreferenceController extends
34         WifiDetailsBasePreferenceController<Preference> {
35 
WifiIpv6AddressPreferenceController(Context context, String preferenceKey, FragmentController fragmentController, CarUxRestrictions uxRestrictions)36     public WifiIpv6AddressPreferenceController(Context context, String preferenceKey,
37             FragmentController fragmentController, CarUxRestrictions uxRestrictions) {
38         super(context, preferenceKey, fragmentController, uxRestrictions);
39     }
40 
41     @Override
getPreferenceType()42     protected Class<Preference> getPreferenceType() {
43         return Preference.class;
44     }
45 
46     @Override
updateState(Preference preference)47     protected void updateState(Preference preference) {
48         StringJoiner ipv6Addresses = new StringJoiner(System.lineSeparator());
49 
50         for (LinkAddress addr : getWifiInfoProvider().getLinkProperties().getLinkAddresses()) {
51             if (addr.getAddress() instanceof Inet6Address) {
52                 ipv6Addresses.add(addr.getAddress().getHostAddress());
53             }
54         }
55 
56         if (ipv6Addresses.length() > 0) {
57             preference.setSummary(
58                     BidiFormatter.getInstance().unicodeWrap(ipv6Addresses.toString()));
59             preference.setVisible(true);
60         } else {
61             preference.setVisible(false);
62         }
63     }
64 }
65 
66