am b5ba786c: am 18ab5c21: Merge "Add an API to check availability of Ethernet interface." into lmp-mr1-dev automerge: 52dcc7f
* commit 'b5ba786ccb9265ed076cda088ddbfded3ecc7f85':
Add an API to check availability of Ethernet interface.
diff --git a/Android.mk b/Android.mk
index ce15c71..83ff3e5 100644
--- a/Android.mk
+++ b/Android.mk
@@ -174,6 +174,7 @@
core/java/android/hardware/usb/IUsbManager.aidl \
core/java/android/net/IConnectivityManager.aidl \
core/java/android/net/IEthernetManager.aidl \
+ core/java/android/net/IEthernetServiceListener.aidl \
core/java/android/net/INetworkManagementEventObserver.aidl \
core/java/android/net/INetworkPolicyListener.aidl \
core/java/android/net/INetworkPolicyManager.aidl \
diff --git a/core/java/android/net/EthernetManager.java b/core/java/android/net/EthernetManager.java
index d965f27..f45737a 100644
--- a/core/java/android/net/EthernetManager.java
+++ b/core/java/android/net/EthernetManager.java
@@ -18,11 +18,14 @@
import android.content.Context;
import android.net.IEthernetManager;
+import android.net.IEthernetServiceListener;
import android.net.IpConfiguration;
-import android.net.IpConfiguration.IpAssignment;
-import android.net.IpConfiguration.ProxySettings;
+import android.os.Handler;
+import android.os.Message;
import android.os.RemoteException;
+import java.util.ArrayList;
+
/**
* A class representing the IP configuration of the Ethernet network.
*
@@ -30,9 +33,41 @@
*/
public class EthernetManager {
private static final String TAG = "EthernetManager";
+ private static final int MSG_AVAILABILITY_CHANGED = 1000;
private final Context mContext;
private final IEthernetManager mService;
+ private final Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ if (msg.what == MSG_AVAILABILITY_CHANGED) {
+ boolean isAvailable = (msg.arg1 == 1);
+ for (Listener listener : mListeners) {
+ listener.onAvailabilityChanged(isAvailable);
+ }
+ }
+ }
+ };
+ private final ArrayList<Listener> mListeners = new ArrayList<Listener>();
+ private final IEthernetServiceListener.Stub mServiceListener =
+ new IEthernetServiceListener.Stub() {
+ @Override
+ public void onAvailabilityChanged(boolean isAvailable) {
+ mHandler.obtainMessage(
+ MSG_AVAILABILITY_CHANGED, isAvailable ? 1 : 0, 0, null).sendToTarget();
+ }
+ };
+
+ /**
+ * A listener interface to receive notification on changes in Ethernet.
+ */
+ public interface Listener {
+ /**
+ * Called when Ethernet port's availability is changed.
+ * @param isAvailable {@code true} if one or more Ethernet port exists.
+ */
+ public void onAvailabilityChanged(boolean isAvailable);
+ }
/**
* Create a new EthernetManager instance.
@@ -50,12 +85,9 @@
* @return the Ethernet Configuration, contained in {@link IpConfiguration}.
*/
public IpConfiguration getConfiguration() {
- if (mService == null) {
- return new IpConfiguration();
- }
try {
return mService.getConfiguration();
- } catch (RemoteException e) {
+ } catch (NullPointerException | RemoteException e) {
return new IpConfiguration();
}
}
@@ -64,12 +96,57 @@
* Set Ethernet configuration.
*/
public void setConfiguration(IpConfiguration config) {
- if (mService == null) {
- return;
- }
try {
mService.setConfiguration(config);
- } catch (RemoteException e) {
+ } catch (NullPointerException | RemoteException e) {
+ }
+ }
+
+ /**
+ * Indicates whether the system currently has one or more
+ * Ethernet interfaces.
+ */
+ public boolean isAvailable() {
+ try {
+ return mService.isAvailable();
+ } catch (NullPointerException | RemoteException e) {
+ return false;
+ }
+ }
+
+ /**
+ * Adds a listener.
+ * @param listener A {@link Listener} to add.
+ * @throws IllegalArgumentException If the listener is null.
+ */
+ public void addListener(Listener listener) {
+ if (listener == null) {
+ throw new IllegalArgumentException("listener must not be null");
+ }
+ mListeners.add(listener);
+ if (mListeners.size() == 1) {
+ try {
+ mService.addListener(mServiceListener);
+ } catch (NullPointerException | RemoteException e) {
+ }
+ }
+ }
+
+ /**
+ * Removes a listener.
+ * @param listener A {@link Listener} to remove.
+ * @throws IllegalArgumentException If the listener is null.
+ */
+ public void removeListener(Listener listener) {
+ if (listener == null) {
+ throw new IllegalArgumentException("listener must not be null");
+ }
+ mListeners.remove(listener);
+ if (mListeners.isEmpty()) {
+ try {
+ mService.removeListener(mServiceListener);
+ } catch (NullPointerException | RemoteException e) {
+ }
}
}
}
diff --git a/core/java/android/net/IEthernetManager.aidl b/core/java/android/net/IEthernetManager.aidl
index 3fa08f8..7a92eb9 100644
--- a/core/java/android/net/IEthernetManager.aidl
+++ b/core/java/android/net/IEthernetManager.aidl
@@ -17,6 +17,7 @@
package android.net;
import android.net.IpConfiguration;
+import android.net.IEthernetServiceListener;
/**
* Interface that answers queries about, and allows changing
@@ -27,4 +28,7 @@
{
IpConfiguration getConfiguration();
void setConfiguration(in IpConfiguration config);
+ boolean isAvailable();
+ void addListener(in IEthernetServiceListener listener);
+ void removeListener(in IEthernetServiceListener listener);
}
diff --git a/core/java/android/net/IEthernetServiceListener.aidl b/core/java/android/net/IEthernetServiceListener.aidl
new file mode 100644
index 0000000..356690e8
--- /dev/null
+++ b/core/java/android/net/IEthernetServiceListener.aidl
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.net;
+
+/** @hide */
+oneway interface IEthernetServiceListener
+{
+ void onAvailabilityChanged(boolean isAvailable);
+}