blob: f45737a66e09ae0c0317822f988a84c8bae58d1a [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();
Jaewan Kimd109a7c2014-10-20 12:04:13 +090090 } catch (NullPointerException | RemoteException e) {
Lorenzo Colitti0a82e802014-07-31 00:48:01 +090091 return new IpConfiguration();
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);
Jaewan Kimd109a7c2014-10-20 12:04:13 +0900101 } catch (NullPointerException | RemoteException e) {
102 }
103 }
104
105 /**
106 * Indicates whether the system currently has one or more
107 * Ethernet interfaces.
108 */
109 public boolean isAvailable() {
110 try {
111 return mService.isAvailable();
112 } catch (NullPointerException | RemoteException e) {
113 return false;
114 }
115 }
116
117 /**
118 * Adds a listener.
119 * @param listener A {@link Listener} to add.
120 * @throws IllegalArgumentException If the listener is null.
121 */
122 public void addListener(Listener listener) {
123 if (listener == null) {
124 throw new IllegalArgumentException("listener must not be null");
125 }
126 mListeners.add(listener);
127 if (mListeners.size() == 1) {
128 try {
129 mService.addListener(mServiceListener);
130 } catch (NullPointerException | RemoteException e) {
131 }
132 }
133 }
134
135 /**
136 * Removes a listener.
137 * @param listener A {@link Listener} to remove.
138 * @throws IllegalArgumentException If the listener is null.
139 */
140 public void removeListener(Listener listener) {
141 if (listener == null) {
142 throw new IllegalArgumentException("listener must not be null");
143 }
144 mListeners.remove(listener);
145 if (mListeners.isEmpty()) {
146 try {
147 mService.removeListener(mServiceListener);
148 } catch (NullPointerException | RemoteException e) {
149 }
Lorenzo Colitti4e5aa2c2014-05-21 16:23:43 -0700150 }
151 }
152}