From a031b1c2d9a8e2421720dd5078e50f1476f4ed80 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Fri, 8 Aug 2014 16:17:30 +0200 Subject: [PATCH] Added CellId for logging. Added some code for speech --- app/app.iml | 2 +- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 4 + .../core/behaviour/UeBehaviourSpeechCall.java | 81 ++++++++++++++++++ .../uecontrol/gui/util/CSVWriter.java | 78 ++++++++++++++++- app/src/main/res/drawable-hdpi/icon.png | Bin 0 -> 7617 bytes 6 files changed, 164 insertions(+), 3 deletions(-) create mode 100755 app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourSpeechCall.java create mode 100755 app/src/main/res/drawable-hdpi/icon.png diff --git a/app/app.iml b/app/app.iml index cd4fabb..7582c3b 100755 --- a/app/app.iml +++ b/app/app.iml @@ -59,7 +59,7 @@ - + diff --git a/app/build.gradle b/app/build.gradle index af38389..a3e2cb6 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 15 + compileSdkVersion 19 buildToolsVersion '19.1.0' defaultConfig { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 385b953..7947c8f 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -32,6 +32,10 @@ + + + diff --git a/app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourSpeechCall.java b/app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourSpeechCall.java new file mode 100755 index 0000000..6217174 --- /dev/null +++ b/app/src/main/java/com/ericsson/uecontrol/core/behaviour/UeBehaviourSpeechCall.java @@ -0,0 +1,81 @@ +package com.ericsson.uecontrol.core.behaviour; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.telephony.TelephonyManager; + +import com.ericsson.uecontrol.core.UeBehaviour; +import com.ericsson.uecontrol.gui.MainActivity; +import com.ericsson.uecontrol.gui.util.Configurator.Configurable; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +/** + * This behaviour simulates an idle period for the device. + * + * Created by ezivkoc on 2014-07-15. + */ +public class UeBehaviourSpeechCall extends UeBehaviour{ + public static final int SLEEP_PERIOD = 100; + + @Configurable("Phone Number") + private String phoneNumber; + @Configurable("Length(Seconds)") + private int length; + + + public UeBehaviourSpeechCall(){ + this(60); + } + public UeBehaviourSpeechCall(int milliseconds){ + length = milliseconds; + } + + + @Override + protected void execute() throws InterruptedException { + int elapsedTime = 0; + while(elapsedTime < length){ + super.setProgress((float)elapsedTime/length); + if(super.stopExecution()) break; + Thread.sleep(SLEEP_PERIOD); + elapsedTime += SLEEP_PERIOD; + } + } + + + private void startCall(){ + Context context = MainActivity.getContext(); + Uri number = Uri.parse("tel:" + phoneNumber); + Intent intent = new Intent(Intent.ACTION_DIAL, number); + context.startActivity(intent); + } + + private void endCall() throws ClassNotFoundException, InvocationTargetException, IllegalAccessException, NoSuchMethodException { + Context context = MainActivity.getContext(); + TelephonyManager tm = (TelephonyManager) context + .getSystemService(Context.TELEPHONY_SERVICE); + Class c = Class.forName(tm.getClass().getName()); + Method m = c.getDeclaredMethod("getITelephony"); + m.setAccessible(true); + + Object telephonyService = m.invoke(tm); // Get the internal ITelephony object + c = Class.forName(telephonyService.getClass().getName()); // Get its class + m = c.getDeclaredMethod("endCall"); // Get the "endCall()" method + m.setAccessible(true); // Make it accessible + m.invoke(telephonyService); // invoke endCall() + } + + + @Override + public String getName() { + return "Speech Call"; + } + + @Override + public String toString() { + return "Will make a call for "+ length +" seconds"; + } +} diff --git a/app/src/main/java/com/ericsson/uecontrol/gui/util/CSVWriter.java b/app/src/main/java/com/ericsson/uecontrol/gui/util/CSVWriter.java index 18a8f4c..d79002d 100755 --- a/app/src/main/java/com/ericsson/uecontrol/gui/util/CSVWriter.java +++ b/app/src/main/java/com/ericsson/uecontrol/gui/util/CSVWriter.java @@ -6,7 +6,14 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; +import android.os.Build; import android.preference.PreferenceManager; +import android.telephony.CellInfo; +import android.telephony.CellInfoCdma; +import android.telephony.CellInfoGsm; +import android.telephony.CellInfoLte; +import android.telephony.CellInfoWcdma; +import android.telephony.NeighboringCellInfo; import android.telephony.TelephonyManager; import org.apache.log4j.Logger; @@ -16,6 +23,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; +import java.util.List; /** * Created by ezivkoc on 2014-07-30. @@ -23,7 +31,8 @@ import java.text.SimpleDateFormat; public class CSVWriter { private static final Logger log = Logger.getLogger(CSVWriter.class); public static final String[] HEADINGS = new String[]{ - "Timestamp", "Behaviour", "RX Throughput(b/s)", "TX Throughput(b/s)", "RAT" + "Timestamp", "Behaviour", "RX Throughput(b/s)", "TX Throughput(b/s)", + "RAT", "CellIds", "SSID" }; public static final String DELIMITER = ";"; protected static final SimpleDateFormat fileDateFormater = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss"); @@ -62,6 +71,8 @@ public class CSVWriter { line.append(down).append(DELIMITER); line.append(up).append(DELIMITER); line.append(getRat(context)).append(DELIMITER); + line.append(getCellIds(context)).append(DELIMITER); + line.append(getSSID(context)).append(DELIMITER); writeLine(line.toString()); } @@ -100,6 +111,71 @@ public class CSVWriter { return netInfo.getTypeName(); } + private static String getCellIds(Context context){ + ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo netInfo = cm.getActiveNetworkInfo(); + if(netInfo == null) + return ""; + + if(netInfo.getType() == ConnectivityManager.TYPE_MOBILE) { + TelephonyManager telMan = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + StringBuilder data = new StringBuilder(); + + List cellList = telMan.getNeighboringCellInfo(); + if(cellList != null) { + for (int i = 0; i < cellList.size(); i++) { + data.append(cellList.get(i).getCid()); + if (i < cellList.size() - 1) + data.append(','); + } + + // Use newer api if available + if (cellList.isEmpty() && Build.VERSION.SDK_INT >= 17) { + List cellInfoList = telMan.getAllCellInfo(); + for(int i=0; i= 18 && cell instanceof CellInfoWcdma) + cid = ((CellInfoWcdma) cell).getCellIdentity().getCid(); + else if(cell instanceof CellInfoLte) + cid = ((CellInfoLte) cell).getCellIdentity().getCi(); + + if(cid == Integer.MAX_VALUE) + return "UNKNOWN"; + else + return ""+cid; + } + + private static String getSSID(Context context){ + ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo netInfo = cm.getActiveNetworkInfo(); + if(netInfo == null || netInfo.getType() == ConnectivityManager.TYPE_WIFI) + return ""; + + WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + WifiInfo wifiInfo = wm.getConnectionInfo(); + if(wifiInfo == null) + return ""; + return wifiInfo.getSSID().replace("\"", ""); + } + protected String getTime(){ return dateFormater.format(System.currentTimeMillis()); } diff --git a/app/src/main/res/drawable-hdpi/icon.png b/app/src/main/res/drawable-hdpi/icon.png new file mode 100755 index 0000000000000000000000000000000000000000..0bd62128a9a37205b67d4bf24be31ae0efa07da6 GIT binary patch literal 7617 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