/*
* Util
* Connect SDK
*
* Copyright (c) 2014 LG Electronics.
* Created by Jeffrey Glenn on 27 Feb 2014
*
* 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 com.connectsdk.core;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Date;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import org.apache.http.conn.util.InetAddressUtils;
import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.os.Looper;
import com.connectsdk.service.capability.listeners.ErrorListener;
import com.connectsdk.service.capability.listeners.ResponseListener;
import com.connectsdk.service.command.ServiceCommandError;
public final class Util {
static public String T = "Connect SDK";
static private Handler handler;
static private final int NUM_OF_THREADS = 20;
static private Executor executor;
static {
createExecutor();
}
static void createExecutor() {
Util.executor = Executors.newFixedThreadPool(NUM_OF_THREADS, new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread th = new Thread(r);
th.setName("2nd Screen BG");
return th;
}
});
}
public static void runOnUI(Runnable runnable) {
if (handler == null) {
handler = new Handler(Looper.getMainLooper());
}
handler.post(runnable);
}
public static void runInBackground(Runnable runnable, boolean forceNewThread) {
if (forceNewThread || isMain()) {
executor.execute(runnable);
} else {
runnable.run();
}
}
public static void runInBackground(Runnable runnable) {
runInBackground(runnable, false);
}
public static Executor getExecutor() {
return executor;
}
public static boolean isMain() {
return Looper.myLooper() == Looper.getMainLooper();
}
public static <T> void postSuccess(final ResponseListener<T> listener, final T object) {
if (listener == null)
return;
Util.runOnUI(new Runnable() {
@Override
public void run() {
listener.onSuccess(object);
}
});
}
public static void postError(final ErrorListener listener, final ServiceCommandError error) {
if (listener == null)
return;
Util.runOnUI(new Runnable() {
@Override
public void run() {
listener.onError(error);
}
});
}
public static byte[] convertIpAddress(int ip) {
return new byte[] {
(byte) (ip & 0xFF),
(byte) ((ip >> 8) & 0xFF),
(byte) ((ip >> 16) & 0xFF),
(byte) ((ip >> 24) & 0xFF)};
}
public static long getTime() {
return TimeUnit.MILLISECONDS.toSeconds(new Date().getTime());
}
public static boolean isIPv4Address(String ipAddress) {
return InetAddressUtils.isIPv4Address(ipAddress);
}
public static boolean isIPv6Address(String ipAddress) {
return InetAddressUtils.isIPv6Address(ipAddress);
}
public static InetAddress getIpAddress(Context context) throws UnknownHostException {
WifiManager wifiMgr = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
int ip = wifiInfo.getIpAddress();
if (ip == 0) {
return null;
}
else {
byte[] ipAddress = convertIpAddress(ip);
return InetAddress.getByAddress(ipAddress);
}
}
}