blob: 664b7b408975eb2ed7166e96da4454a55a2bbbf1 [file] [log] [blame]
Lorenzo Colitti4e5aa2c2014-05-21 16:23:43 -07001/*
2 * Copyright (C) 2014 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
17package android.net;
18
19import android.content.Context;
20import android.net.IEthernetManager;
Jaewan Kimd109a7c2014-10-20 12:04:13 +090021import android.net.IEthernetServiceListener;
Lorenzo Colitti4e5aa2c2014-05-21 16:23:43 -070022import android.net.IpConfiguration;
Jaewan Kimd109a7c2014-10-20 12:04:13 +090023import android.os.Handler;
24import android.os.Message;
Lorenzo Colitti4e5aa2c2014-05-21 16:23:43 -070025import android.os.RemoteException;
26
Jaewan Kimd109a7c2014-10-20 12:04:13 +090027import java.util.ArrayList;
28
Lorenzo Colitti4e5aa2c2014-05-21 16:23:43 -070029/**
30 * A class representing the IP configuration of the Ethernet network.
31 *
32 * @hide
33 */
34public class EthernetManager {
35 private static final String TAG = "EthernetManager";
Jaewan Kimd109a7c2014-10-20 12:04:13 +090036 private static final int MSG_AVAILABILITY_CHANGED = 1000;
Lorenzo Colitti4e5aa2c2014-05-21 16:23:43 -070037
38 private final Context mContext;
39 private final IEthernetManager mService;
Jaewan Kimd109a7c2014-10-20 12:04:13 +090040 private final Handler mHandler = new Handler() {
41 @Override
42 public void handleMessage(Message msg) {
43 if (msg.what == MSG_AVAILABILITY_CHANGED) {
44 boolean isAvailable = (msg.arg1 == 1);
45 for (Listener listener : mListeners) {
46 listener.onAvailabilityChanged(isAvailable);
47 }
48 }
49 }
50 };
51 private final ArrayList<Listener> mListeners = new ArrayList<Listener>();
52 private final IEthernetServiceListener.Stub mServiceListener =
53 new IEthernetServiceListener.Stub() {
54 @Override
55 public void onAvailabilityChanged(boolean isAvailable) {
56 mHandler.obtainMessage(
57 MSG_AVAILABILITY_CHANGED, isAvailable ? 1 : 0, 0, null).sendToTarget();
58 }
59 };
60
61 /**
62 * A listener interface to receive notification on changes in Ethernet.
63 */
64 public interface Listener {
65 /**
66 * Called when Ethernet port's availability is changed.
67 * @param isAvailable {@code true} if one or more Ethernet port exists.
68 */
69 public void onAvailabilityChanged(boolean isAvailable);
70 }
Lorenzo Colitti4e5aa2c2014-05-21 16:23:43 -070071
72 /**
73 * Create a new EthernetManager instance.
74 * Applications will almost always want to use
75 * {@link android.content.Context#getSystemService Context.getSystemService()} to retrieve
76 * the standard {@link android.content.Context#ETHERNET_SERVICE Context.ETHERNET_SERVICE}.
77 */
78 public EthernetManager(Context context, IEthernetManager service) {
79 mContext = context;
80 mService = service;
81 }
82
83 /**
Lorenzo Colitti9c1ccc52014-05-22 11:51:27 -070084 * Get Ethernet configuration.
Lorenzo Colitti4e5aa2c2014-05-21 16:23:43 -070085 * @return the Ethernet Configuration, contained in {@link IpConfiguration}.
86 */
87 public IpConfiguration getConfiguration() {
88 try {
89 return mService.getConfiguration();
Jeff Sharkeyc53962d2016-03-01 19:27:23 -070090 } catch (RemoteException e) {
91 throw e.rethrowFromSystemServer();
Lorenzo Colitti4e5aa2c2014-05-21 16:23:43 -070092 }
93 }
94
95 /**
Lorenzo Colitti9c1ccc52014-05-22 11:51:27 -070096 * Set Ethernet configuration.
Lorenzo Colitti4e5aa2c2014-05-21 16:23:43 -070097 */
98 public void setConfiguration(IpConfiguration config) {
Lorenzo Colitti4e5aa2c2014-05-21 16:23:43 -070099 try {
100 mService.setConfiguration(config);
Jeff Sharkeyc53962d2016-03-01 19:27:23 -0700101 } catch (RemoteException e) {
102 throw e.rethrowFromSystemServer();
Jaewan Kimd109a7c2014-10-20 12:04:13 +0900103 }
104 }
105
106 /**
107 * Indicates whether the system currently has one or more
108 * Ethernet interfaces.
109 */
110 public boolean isAvailable() {
111 try {
112 return mService.isAvailable();
Jeff Sharkeyc53962d2016-03-01 19:27:23 -0700113 } catch (RemoteException e) {
114 throw e.rethrowFromSystemServer();
Jaewan Kimd109a7c2014-10-20 12:04:13 +0900115 }
116 }
117
118 /**
119 * Adds a listener.
120 * @param listener A {@link Listener} to add.
121 * @throws IllegalArgumentException If the listener is null.
122 */
123 public void addListener(Listener listener) {
124 if (listener == null) {
125 throw new IllegalArgumentException("listener must not be null");
126 }
127 mListeners.add(listener);
128 if (mListeners.size() == 1) {
129 try {
130 mService.addListener(mServiceListener);
Jeff Sharkeyc53962d2016-03-01 19:27:23 -0700131 } catch (RemoteException e) {
132 throw e.rethrowFromSystemServer();
Jaewan Kimd109a7c2014-10-20 12:04:13 +0900133 }
134 }
135 }
136
137 /**
138 * Removes a listener.
139 * @param listener A {@link Listener} to remove.
140 * @throws IllegalArgumentException If the listener is null.
141 */
142 public void removeListener(Listener listener) {
143 if (listener == null) {
144 throw new IllegalArgumentException("listener must not be null");
145 }
146 mListeners.remove(listener);
147 if (mListeners.isEmpty()) {
148 try {
149 mService.removeListener(mServiceListener);
Jeff Sharkeyc53962d2016-03-01 19:27:23 -0700150 } catch (RemoteException e) {
151 throw e.rethrowFromSystemServer();
Jaewan Kimd109a7c2014-10-20 12:04:13 +0900152 }
Lorenzo Colitti4e5aa2c2014-05-21 16:23:43 -0700153 }
154 }
155}