2 * Copyright (C) 2014 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 import android.content.Context;
20 import android.net.IEthernetManager;
21 import android.net.IEthernetServiceListener;
22 import android.net.IpConfiguration;
23 import android.os.Handler;
24 import android.os.Message;
25 import android.os.RemoteException;
27 import java.util.ArrayList;
30 * A class representing the IP configuration of the Ethernet network.
34 public class EthernetManager {
35 private static final String TAG = "EthernetManager";
36 private static final int MSG_AVAILABILITY_CHANGED = 1000;
38 private final Context mContext;
39 private final IEthernetManager mService;
40 private final Handler mHandler = new Handler() {
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);
51 private final ArrayList<Listener> mListeners = new ArrayList<Listener>();
52 private final IEthernetServiceListener.Stub mServiceListener =
53 new IEthernetServiceListener.Stub() {
55 public void onAvailabilityChanged(boolean isAvailable) {
56 mHandler.obtainMessage(
57 MSG_AVAILABILITY_CHANGED, isAvailable ? 1 : 0, 0, null).sendToTarget();
62 * A listener interface to receive notification on changes in Ethernet.
64 public interface Listener {
66 * Called when Ethernet port's availability is changed.
67 * @param isAvailable {@code true} if one or more Ethernet port exists.
69 public void onAvailabilityChanged(boolean isAvailable);
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}.
78 public EthernetManager(Context context, IEthernetManager service) {
84 * Get Ethernet configuration.
85 * @return the Ethernet Configuration, contained in {@link IpConfiguration}.
87 public IpConfiguration getConfiguration() {
89 return mService.getConfiguration();
90 } catch (RemoteException e) {
91 throw e.rethrowFromSystemServer();
96 * Set Ethernet configuration.
98 public void setConfiguration(IpConfiguration config) {
100 mService.setConfiguration(config);
101 } catch (RemoteException e) {
102 throw e.rethrowFromSystemServer();
107 * Indicates whether the system currently has one or more
108 * Ethernet interfaces.
110 public boolean isAvailable() {
112 return mService.isAvailable();
113 } catch (RemoteException e) {
114 throw e.rethrowFromSystemServer();
120 * @param listener A {@link Listener} to add.
121 * @throws IllegalArgumentException If the listener is null.
123 public void addListener(Listener listener) {
124 if (listener == null) {
125 throw new IllegalArgumentException("listener must not be null");
127 mListeners.add(listener);
128 if (mListeners.size() == 1) {
130 mService.addListener(mServiceListener);
131 } catch (RemoteException e) {
132 throw e.rethrowFromSystemServer();
138 * Removes a listener.
139 * @param listener A {@link Listener} to remove.
140 * @throws IllegalArgumentException If the listener is null.
142 public void removeListener(Listener listener) {
143 if (listener == null) {
144 throw new IllegalArgumentException("listener must not be null");
146 mListeners.remove(listener);
147 if (mListeners.isEmpty()) {
149 mService.removeListener(mServiceListener);
150 } catch (RemoteException e) {
151 throw e.rethrowFromSystemServer();