From 0ab70beb99c060cdadd0cc6401f6a1b4b5472472 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20J=C3=A4ger?= <daniel-jaeger@online.de>
Date: Mon, 22 Jun 2015 18:34:00 +0200
Subject: [PATCH 01/55] Change help toast to long toast

---
 .../com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java    | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java
index a6121d08d..65e45e2d7 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java
@@ -10,13 +10,13 @@
 import android.widget.ArrayAdapter;
 import android.widget.ImageView;
 import android.widget.TextView;
-import android.widget.Toast;
 
 import com.SecUpwN.AIMSICD.R;
 import com.SecUpwN.AIMSICD.constants.DrawerMenu;
 import com.SecUpwN.AIMSICD.drawer.DrawerMenuItem;
 import com.SecUpwN.AIMSICD.drawer.DrawerMenuSection;
 import com.SecUpwN.AIMSICD.drawer.NavDrawerItem;
+import com.SecUpwN.AIMSICD.utils.Helpers;
 
 import java.util.List;
 
@@ -24,7 +24,6 @@ public class DrawerMenuAdapter extends ArrayAdapter<NavDrawerItem> {
 
     private final LayoutInflater inflater;
     private final View.OnClickListener mInfoButtonListener;
-    private final Toast mToast;
     private final Animation mBounceHelpButtonAnimation;
 
 
@@ -33,7 +32,6 @@ public DrawerMenuAdapter(Context context, int textViewResourceId, List<NavDrawer
         super(context, textViewResourceId, objects);
         inflater = LayoutInflater.from(context);
 
-        mToast = Toast.makeText(context.getApplicationContext(), "", Toast.LENGTH_LONG);
         mInfoButtonListener = new View.OnClickListener() {
             @Override
             public void onClick(View pView) {
@@ -46,8 +44,7 @@ public void onClick(View pView) {
     }
 
     private void showHelpToast(Integer pToastValueId) {
-        mToast.setText(getContext().getString(pToastValueId));
-        mToast.show();
+        Helpers.msgLong(context.getApplicationContext(), context.getApplicationContext().getString(pToastValueId));
     }
 
     @Override

From 184b61b865dd32d4c4ed322ce2f4877bcc0a4148 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20J=C3=A4ger?= <daniel-jaeger@online.de>
Date: Tue, 23 Jun 2015 00:27:43 +0200
Subject: [PATCH 02/55] Added static context

---
 .../com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java     | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java
index 65e45e2d7..37da33f8a 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java
@@ -26,11 +26,13 @@ public class DrawerMenuAdapter extends ArrayAdapter<NavDrawerItem> {
     private final View.OnClickListener mInfoButtonListener;
     private final Animation mBounceHelpButtonAnimation;
 
-
+    private static Context context;
+ 
     @SuppressLint("ShowToast")
     public DrawerMenuAdapter(Context context, int textViewResourceId, List<NavDrawerItem> objects ) {
-        super(context, textViewResourceId, objects);
+        super(context, textViewResourceId, objects)
         inflater = LayoutInflater.from(context);
+        this.context = context
 
         mInfoButtonListener = new View.OnClickListener() {
             @Override

From 55dc59223d049c9d904a68a14d0b8b5aebbebfb0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20J=C3=A4ger?= <daniel-jaeger@online.de>
Date: Tue, 23 Jun 2015 00:32:04 +0200
Subject: [PATCH 03/55] added semicolons

Don't know where they are gone to.
The Github Website Editor is curious...
---
 .../java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java
index 37da33f8a..3770eeebd 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java
@@ -30,9 +30,9 @@ public class DrawerMenuAdapter extends ArrayAdapter<NavDrawerItem> {
  
     @SuppressLint("ShowToast")
     public DrawerMenuAdapter(Context context, int textViewResourceId, List<NavDrawerItem> objects ) {
-        super(context, textViewResourceId, objects)
+        super(context, textViewResourceId, objects);
         inflater = LayoutInflater.from(context);
-        this.context = context
+        this.context = context;
 
         mInfoButtonListener = new View.OnClickListener() {
             @Override

From bd031a07e997cb27cc9017d3b8a961a93c210f46 Mon Sep 17 00:00:00 2001
From: "E:V:A" <E3V3A@users.noreply.github.com>
Date: Tue, 23 Jun 2015 10:11:32 +0800
Subject: [PATCH 04/55] Update AndroidManifest.xml

incremented to **b01** after merging last PR.
---
 app/src/main/AndroidManifest.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4f5a1f007..4a5e0661a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
           android:versionCode="30"
-          android:versionName="0.1.30-alpha-b00">
+          android:versionName="0.1.30-alpha-b01">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"

From 414caf1e803cb29616a71f5880eaf82345d744bd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20J=C3=A4ger?= <daniel-jaeger@online.de>
Date: Wed, 24 Jun 2015 00:04:49 +0200
Subject: [PATCH 05/55] Change context property to appContext

This should solve #498
---
 .../com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java   | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java
index c371f6dae..70cdde5fe 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java
@@ -31,13 +31,13 @@ public class DrawerMenuAdapter extends ArrayAdapter<NavDrawerItem> {
     private final View.OnClickListener mInfoButtonListener;
     private final Animation mBounceHelpButtonAnimation;
 
-    private static Context context;
+    private static Context appContext;
  
     @SuppressLint("ShowToast")
     public DrawerMenuAdapter(Context context, int textViewResourceId, List<NavDrawerItem> objects ) {
         super(context, textViewResourceId, objects);
         inflater = LayoutInflater.from(context);
-        this.context = context;
+        this.appContext = context.getApplicationContext();
 
         mInfoButtonListener = new View.OnClickListener() {
             @Override
@@ -47,11 +47,11 @@ public void onClick(View pView) {
                     showHelpToast((Integer) pView.getTag());
             }
         };
-        mBounceHelpButtonAnimation = AnimationUtils.loadAnimation(context.getApplicationContext(), R.anim.action_button_help);
+        mBounceHelpButtonAnimation = AnimationUtils.loadAnimation(appContext, R.anim.action_button_help);
     }
 
     private void showHelpToast(Integer pToastValueId) {
-        Helpers.msgLong(context.getApplicationContext(), context.getApplicationContext().getString(pToastValueId));
+        Helpers.msgLong(appContext, appContext.getString(pToastValueId));
     }
 
     @Override

From e46cf45f7ad5099a397882e594261b8972968620 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20J=C3=A4ger?= <daniel-jaeger@online.de>
Date: Wed, 24 Jun 2015 00:08:54 +0200
Subject: [PATCH 06/55] Update AndroidManifest.xml

---
 app/src/main/AndroidManifest.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4a5e0661a..ebac37791 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
           android:versionCode="30"
-          android:versionName="0.1.30-alpha-b01">
+          android:versionName="0.1.30-alpha-b02">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"

From f1a61a2cd77abec25c8a3a944d46a9b3c5b63c0f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20J=C3=A4ger?= <daniel-jaeger@online.de>
Date: Wed, 24 Jun 2015 00:12:27 +0200
Subject: [PATCH 07/55] Removed "this" prefix

Removed "this" prefix of appContect as not needed anymore
---
 .../java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java
index 70cdde5fe..975088304 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/DrawerMenuAdapter.java
@@ -37,7 +37,7 @@ public class DrawerMenuAdapter extends ArrayAdapter<NavDrawerItem> {
     public DrawerMenuAdapter(Context context, int textViewResourceId, List<NavDrawerItem> objects ) {
         super(context, textViewResourceId, objects);
         inflater = LayoutInflater.from(context);
-        this.appContext = context.getApplicationContext();
+        appContext = context.getApplicationContext();
 
         mInfoButtonListener = new View.OnClickListener() {
             @Override

From 898936e12ea851833934b977366529fd966ef5e9 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Wed, 24 Jun 2015 12:45:43 +0200
Subject: [PATCH 08/55] Add singleton toaster

---
 .../com/SecUpwN/AIMSICD/utils/Helpers.java    | 94 +++++++++----------
 .../com/SecUpwN/AIMSICD/utils/Toaster.java    | 79 ++++++++++++++++
 2 files changed, 121 insertions(+), 52 deletions(-)
 create mode 100644 app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/Helpers.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/Helpers.java
index 1c0f2fbe3..fab8a4ed4 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/Helpers.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/Helpers.java
@@ -33,6 +33,7 @@
 import com.SecUpwN.AIMSICD.R;
 import com.SecUpwN.AIMSICD.activities.MapViewerOsmDroid;
 import com.SecUpwN.AIMSICD.service.CellTracker;
+import com.SecUpwN.AIMSICD.utils.Toaster;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -83,63 +84,53 @@ public class Helpers {
     private static final String mTAG = "Helpers";
 
     private static final int CHARS_PER_LINE = 34;
-    private static final int SHORT_TOAST_DURATION = 2000;
-    private static final long TOAST_DURATION_MILLS = 6000;//change if need longer
-    /**
-     * Long toast message
-     * TOAST_DURATION_MILLS controls the duration
-     * currently set to 6 seconds
-     * @param context Application Context
-     * @param msg     Message to send
-     */
-    public static void msgLong(final Context context, final String msg) {
-            if (context != null && msg != null) {
-                final Toast t = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
-                t.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);
-
-                new CountDownTimer(Math.max(TOAST_DURATION_MILLS - SHORT_TOAST_DURATION, 1000), 1000) {
-                    @Override
-                    public void onFinish() {
-                        t.show();
-                    }
-
-                    @Override
-                    public void onTick(long millisUntilFinished) {
-                        t.show();
-                    }
-                }.start();
-            }
-
 
+   /**
+    * Description:      Long toast message
+    *
+    * Notes:
+    *
+    *       This is only a proxy method to the Toaster class.
+    *       It also takes care of using the Toaster's Singleton.
+    *
+    * @param context Application Context
+    * @param msg     Message to send
+    */
+    public static void msgLong(Context context, String msg) {
+        if (context != null && msg != null) {
+            Toaster.getInstance().msgLong(context, msg);
+        }
     }
-
-    /**
-     * Short toast message
-     * (Predefined in AOS to 2000 ms = 2 sec)
-     *
-     * @param context Application Context
-     * @param msg     Message to send
-     */
-    public static void msgShort(final Context context, final String msg) {
+   /**
+    * Description:      Short toast message
+    *
+    * Notes:
+    *
+    *       This is only a proxy method to the Toaster class.
+    *       It also takes care of using the Toaster's Singleton.
+    *
+    * @param context Application Context
+    * @param msg     Message to send
+    */
+    public static void msgShort(Context context, String msg) {
         if (context != null && msg != null) {
-            new Handler(context.getMainLooper()).post(new Runnable() {
-                @Override
-                public void run() {
-                    Toast.makeText(context, msg.trim(), Toast.LENGTH_SHORT).show();
-                }
-            });
+            Toaster.getInstance().msgShort(context, msg);
         }
     }
-
-    /**
-     * Long toast message
-     *
-     * @param context Application Context
-     * @param msg     Message to send
-     */
+   /**
+    * Description:      Long toast message
+    *
+    * Notes:
+    *
+    *       This is only a proxy method to the Toaster class.
+    *       It also takes care of using the Toaster's Singleton.
+    *
+    * @param context Application Context
+    * @param msg     Message to send
+    */
     public static void sendMsg(Context context, String msg) {
         if (context != null && msg != null) {
-            msgLong(context, msg);
+            Toaster.getInstance().msgLong(context, msg);
         }
     }
     
@@ -614,5 +605,4 @@ public void onClick(DialogInterface dialog, int which) {
                 .setIcon(R.drawable.ic_action_delete_database).create();
         lAlertDialog.show();
     }
-}
-
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java
new file mode 100644
index 000000000..21af47c39
--- /dev/null
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java
@@ -0,0 +1,79 @@
+/* Android IMSI-Catcher Detector | (c) AIMSICD Privacy Project
+ * -----------------------------------------------------------
+ * LICENSE:  http://git.io/vki47 | TERMS:  http://git.io/vki4o
+ * -----------------------------------------------------------
+ */
+package com.SecUpwN.AIMSICD.utils;
+
+import android.content.Context;
+import android.os.CountDownTimer;
+import android.os.Handler;
+
+import android.view.Gravity;
+import android.widget.Toast;
+
+public class Toaster {
+
+    private static final int SHORT_TOAST_DURATION = 2000;
+    private static final long TOAST_DURATION_MILLS = 6000; //change if need longer
+
+    // Private constructor. Prevents instantiation from other classes.
+    private Toaster() { }
+ 
+    /**
+     * Initializes singleton.
+     *
+     * ToasterHolder is loaded on the first execution of Toaster.getInstance()
+     * or the first access to ToasterHolder.INSTANCE, not before.
+     */
+    private static class ToasterHolder {
+        private static final Toaster INSTANCE = new Toaster();
+    }
+ 
+    public static Toaster getInstance() {
+        return ToasterHolder.INSTANCE;
+    }
+
+    /**
+     * Long toast message
+     * TOAST_DURATION_MILLS controls the duration
+     * currently set to 6 seconds
+     * @param context Application Context
+     * @param msg     Message to send
+     */
+    public static void msgLong(final Context context, final String msg) {
+        if (context != null && msg != null) {
+            final Toast t = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
+            t.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
+
+            new CountDownTimer(Math.max(TOAST_DURATION_MILLS - SHORT_TOAST_DURATION, 1000), 1000) {
+                @Override
+                public void onFinish() {
+                    t.show();
+                }
+
+                @Override
+                public void onTick(long millisUntilFinished) {
+                    t.show();
+                }
+            }.start();
+        }
+    }
+    /**
+     * Short toast message
+     * (Predefined in AOS to 2000 ms = 2 sec)
+     *
+     * @param context Application Context
+     * @param msg     Message to send
+     */
+    public static void msgShort(final Context context, final String msg) {
+        if (context != null && msg != null) {
+            new Handler(context.getMainLooper()).post(new Runnable() {
+                @Override
+                public void run() {
+                    Toast.makeText(context, msg.trim(), Toast.LENGTH_SHORT).show();
+                }
+            });
+        }
+    }
+}
\ No newline at end of file

From ae40a6989c6464f6af7d4c03d1fadd5bd2648de8 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Wed, 24 Jun 2015 13:23:59 +0200
Subject: [PATCH 09/55] Increased build number

---
 app/src/main/AndroidManifest.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ebac37791..6dc2a87a2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
           android:versionCode="30"
-          android:versionName="0.1.30-alpha-b02">
+          android:versionName="0.1.30-alpha-b03">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"
@@ -204,4 +204,4 @@
         </activity>
     </application>
 
-</manifest>
+</manifest>
\ No newline at end of file

From 66eff4845307fcf6b359db4994ed19baa3aceeb0 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Wed, 24 Jun 2015 15:49:37 +0200
Subject: [PATCH 10/55] added toast cancel on new toast

---
 .../java/com/SecUpwN/AIMSICD/utils/Toaster.java | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java
index 21af47c39..8890503b9 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java
@@ -16,6 +16,7 @@ public class Toaster {
 
     private static final int SHORT_TOAST_DURATION = 2000;
     private static final long TOAST_DURATION_MILLS = 6000; //change if need longer
+    private final Toast toast;
 
     // Private constructor. Prevents instantiation from other classes.
     private Toaster() { }
@@ -43,18 +44,21 @@ public static Toaster getInstance() {
      */
     public static void msgLong(final Context context, final String msg) {
         if (context != null && msg != null) {
-            final Toast t = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
-            t.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
+            if (toast!=null){
+                toast.cancel();
+            }
+        
+            toast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
 
             new CountDownTimer(Math.max(TOAST_DURATION_MILLS - SHORT_TOAST_DURATION, 1000), 1000) {
                 @Override
                 public void onFinish() {
-                    t.show();
+                    toast.show();
                 }
 
                 @Override
                 public void onTick(long millisUntilFinished) {
-                    t.show();
+                    toast.show();
                 }
             }.start();
         }
@@ -68,10 +72,13 @@ public void onTick(long millisUntilFinished) {
      */
     public static void msgShort(final Context context, final String msg) {
         if (context != null && msg != null) {
+            if (toast!=null){
+                toast.cancel();
+            }
             new Handler(context.getMainLooper()).post(new Runnable() {
                 @Override
                 public void run() {
-                    Toast.makeText(context, msg.trim(), Toast.LENGTH_SHORT).show();
+                    toast = Toast.makeText(context, msg.trim(), Toast.LENGTH_SHORT).show();
                 }
             });
         }

From 392ae2323a566431cb8a4c714061f8910b0e1217 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Wed, 24 Jun 2015 15:56:44 +0200
Subject: [PATCH 11/55] increased build number

---
 app/src/main/AndroidManifest.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6dc2a87a2..96b61fe66 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
           android:versionCode="30"
-          android:versionName="0.1.30-alpha-b03">
+          android:versionName="0.1.30-alpha-b04">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"

From 665885fd3806d38f78f5d9d406ca922145e059e1 Mon Sep 17 00:00:00 2001
From: "Security: Pwned." <SecUpwN@users.noreply.github.com>
Date: Wed, 24 Jun 2015 15:06:24 +0000
Subject: [PATCH 12/55] Avoid Travis CI failure on Coverity Scan limit

---
 .travis.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.travis.yml b/.travis.yml
index 61bbf4086..f72e78738 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -77,3 +77,4 @@ addons:
     build_command_prepend: "./gradlew clean"
     build_command: "./gradlew build"
     branch_pattern: development
+    build_script_url: https://spideroak.com/share/IFEU2U2JINCA/GitHub/home/SecUpwN/SpiderOak/MISC/external/travisci_build_coverity_scan.sh

From a513ade5ddd6c4ea398160181c8caa3bc7e26a3d Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Wed, 24 Jun 2015 17:17:23 +0200
Subject: [PATCH 13/55] made toast property static

---
 .../main/java/com/SecUpwN/AIMSICD/activities/PrefActivity.java  | 2 +-
 app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java        | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/activities/PrefActivity.java b/app/src/main/java/com/SecUpwN/AIMSICD/activities/PrefActivity.java
index 485a718c9..fec4c7021 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/activities/PrefActivity.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/activities/PrefActivity.java
@@ -33,4 +33,4 @@ private void loadFragment() {
         fragmentTransaction.replace(android.R.id.content, settingsFragment);
         fragmentTransaction.commit();
     }
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java
index 8890503b9..783bd733b 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java
@@ -16,7 +16,7 @@ public class Toaster {
 
     private static final int SHORT_TOAST_DURATION = 2000;
     private static final long TOAST_DURATION_MILLS = 6000; //change if need longer
-    private final Toast toast;
+    private static final Toast toast;
 
     // Private constructor. Prevents instantiation from other classes.
     private Toaster() { }

From 99d4db3d084d8e4aee48d8cae44de437bacaa865 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Wed, 24 Jun 2015 17:41:18 +0200
Subject: [PATCH 14/55] made toast property not final...

---
 app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java
index 783bd733b..6d1de2c12 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java
@@ -16,7 +16,7 @@ public class Toaster {
 
     private static final int SHORT_TOAST_DURATION = 2000;
     private static final long TOAST_DURATION_MILLS = 6000; //change if need longer
-    private static final Toast toast;
+    private static Toast toast;
 
     // Private constructor. Prevents instantiation from other classes.
     private Toaster() { }

From e79479731c014593165ff945f854075f5a0f0f66 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Wed, 24 Jun 2015 20:16:01 +0200
Subject: [PATCH 15/55] split toast creation for msgShort

---
 app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java
index 6d1de2c12..b09488a58 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/Toaster.java
@@ -78,7 +78,8 @@ public static void msgShort(final Context context, final String msg) {
             new Handler(context.getMainLooper()).post(new Runnable() {
                 @Override
                 public void run() {
-                    toast = Toast.makeText(context, msg.trim(), Toast.LENGTH_SHORT).show();
+                    toast = Toast.makeText(context, msg.trim(), Toast.LENGTH_SHORT);
+                    toast.show();
                 }
             });
         }

From 18476327a6236df20dada4194b6782897015d250 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Thu, 25 Jun 2015 09:57:30 +0200
Subject: [PATCH 16/55] comment out leakcanary

---
 app/build.gradle                                      | 6 +++---
 app/src/main/java/com/SecUpwN/AIMSICD/AppAIMSICD.java | 7 +++----
 2 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index 7fdda084c..6afdc888d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -140,6 +140,6 @@ dependencies {
     compile 'com.nineoldandroids:library:2.4.0'
     compile 'org.apache.commons:commons-lang3:3.3.2'
     compile 'com.google.code.gson:gson:2.2.4'
-    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
-    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
-}
+    //debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
+    //releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/AppAIMSICD.java b/app/src/main/java/com/SecUpwN/AIMSICD/AppAIMSICD.java
index f1227352a..f6134ca9c 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/AppAIMSICD.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/AppAIMSICD.java
@@ -14,7 +14,7 @@
 import com.SecUpwN.AIMSICD.constants.TinyDbKeys;
 import com.SecUpwN.AIMSICD.utils.BaseAsyncTask;
 import com.SecUpwN.AIMSICD.utils.TinyDB;
-import com.squareup.leakcanary.LeakCanary;
+//import com.squareup.leakcanary.LeakCanary;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -35,7 +35,7 @@ public AppAIMSICD() {
     @Override
     public void onCreate() {
         super.onCreate();
-        LeakCanary.install(this);
+        //LeakCanary.install(this);
         TinyDB.getInstance().init(getApplicationContext());
         TinyDB.getInstance().putBoolean(TinyDbKeys.FINISHED_LOAD_IN_MAP, true);
     }
@@ -110,5 +110,4 @@ public void attach(Activity activity) {
             }
         }
     }
-}
-
+}
\ No newline at end of file

From af46a626109c1ee1d14600b53721d66e32832a04 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Thu, 25 Jun 2015 10:02:50 +0200
Subject: [PATCH 17/55] Increased build number

---
 app/src/main/AndroidManifest.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 96b61fe66..c5bff6b15 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
           android:versionCode="30"
-          android:versionName="0.1.30-alpha-b04">
+          android:versionName="0.1.30-alpha-b05">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"

From 70726d24ee7f938f70697150c1f7bc4f0807195b Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Thu, 25 Jun 2015 19:06:08 +0200
Subject: [PATCH 18/55] Updated log calls to common TAGs

---
 .../AIMSICD/fragments/PrefFragment.java       |  2 +-
 .../AIMSICD/rilexecutor/RilExecutor.java      | 16 +++---
 .../SamsungMulticlientRilExecutor.java        | 57 ++++++++++---------
 3 files changed, 39 insertions(+), 36 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/fragments/PrefFragment.java b/app/src/main/java/com/SecUpwN/AIMSICD/fragments/PrefFragment.java
index 3b738db29..872b05054 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/fragments/PrefFragment.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/fragments/PrefFragment.java
@@ -18,4 +18,4 @@ public void onCreate(Bundle savedInstanceState) {
         addPreferencesFromResource(R.xml.preferences);
     }
 
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/RilExecutor.java b/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/RilExecutor.java
index 5bca9c8dc..169ac2804 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/RilExecutor.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/RilExecutor.java
@@ -27,7 +27,9 @@
  * Class to handle Ril and Samsung MultiRil implementation. Used by the Aimsicd Service.
  */
 public class RilExecutor {
-    public static final String TAG = "MultiRil";
+    protected static final String TAG = "AIMSICD";
+    protected static final String mTAG = "RilExecutor";
+    
     public boolean mMultiRilCompatible;
 
     /*
@@ -76,7 +78,7 @@ public RilExecutor(Context context) {
         mRilExecutorDetectResult = mRequestExecutor.detect();
         if (!mRilExecutorDetectResult.available) {
             mMultiRilCompatible = false;
-            Log.e(TAG, "Samsung Multiclient RIL not available: " + mRilExecutorDetectResult.error);
+            Log.e( TAG, mTAG + " Samsung Multiclient RIL not available: " + mRilExecutorDetectResult.error);
             mRequestExecutor = null;
         } else {
             mRequestExecutor.start();
@@ -142,7 +144,7 @@ private synchronized List<String> executeServiceModeCommand(int type, int subtyp
                 subtype,
                 keySeqence).sendToTarget();
         if (!mRequestCondvar.block(timeout)) {
-            Log.e(TAG, "request timeout");
+            Log.e( TAG, mTAG + " request timeout");
             return Collections.emptyList();
         } else {
             synchronized (mLastResponseLock) {
@@ -248,15 +250,15 @@ public boolean handleMessage(Message msg) {
                     try {
                         RawResult result = (RawResult) msg.obj;
                         if (result == null) {
-                            Log.e(TAG, "result is null");
+                            Log.e( TAG, mTAG + " result is null");
                             break;
                         }
                         if (result.exception != null) {
-                            Log.e(TAG, "", result.exception);
+                            Log.e( TAG, mTAG + " ", result.exception);
                             break;
                         }
                         if (result.result == null) {
-                            Log.v(TAG, "No need to refresh.");
+                            Log.v( TAG, mTAG + " No need to refresh.");
                             break;
                         }
                         if (lastKeyStep.captureResponse) {
@@ -286,4 +288,4 @@ public boolean handleMessage(Message msg) {
             return true;
         }
     }
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/SamsungMulticlientRilExecutor.java b/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/SamsungMulticlientRilExecutor.java
index 2987d9bf8..5a6552e2c 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/SamsungMulticlientRilExecutor.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/SamsungMulticlientRilExecutor.java
@@ -57,8 +57,9 @@ public class SamsungMulticlientRilExecutor implements OemRilExecutor {
     // private static final boolean DBG = BuildConfig.DEBUG;
     private static final boolean DBG = false;
 
-    // TODO: EVA: We should add AIMSICD to this TAG
-    private static final String TAG = SamsungMulticlientRilExecutor.class.getSimpleName();
+    private static final String TAG = "AIMSICD";
+    private static final String mTAG = "MultiRil";
+
     private volatile LocalSocketThread mThread;
 
     public SamsungMulticlientRilExecutor() {
@@ -104,7 +105,7 @@ public DetectResult detect() {
     @Override
     public synchronized void start() {
         if (mThread != null) {
-            Log.e(TAG, "OEM raw request executor thread is running");
+            Log.e(TAG, mTAG + " OEM raw request executor thread is running");
             return;
         }
         mThread = new LocalSocketThread(MULTICLIENT_SOCKET);
@@ -114,7 +115,7 @@ public synchronized void start() {
     @Override
     public synchronized void stop() {
         if (mThread == null) {
-            Log.e(TAG, "OEM raw request executor thread is not running");
+            Log.e(TAG, mTAG + " OEM raw request executor thread is not running");
             return;
         }
         mThread.cancel();
@@ -124,26 +125,26 @@ public synchronized void stop() {
     @Override
     public synchronized void invokeOemRilRequestRaw(byte[] data, Message response) {
         if (mThread == null) {
-            Log.e(TAG, "OEM raw request executor thread is not running");
+            Log.e(TAG, mTAG + " OEM raw request executor thread is not running");
             return;
         }
         try {
             mThread.invokeOemRilRequestRaw(data, response);
         } catch (IOException ioe) {
-            Log.e(TAG, "invokeOemRilRequestRaw() error", ioe);
+            Log.e(TAG, mTAG + " invokeOemRilRequestRaw() error", ioe);
         }
     }
 
     @Override
     public synchronized void invokeOemRilRequestStrings(String[] strings, Message response) {
         if (mThread == null) {
-            Log.e(TAG, "OEM raw request executor thread is not running");
+            Log.e(TAG, mTAG + " OEM raw request executor thread is not running");
             return;
         }
         try {
             mThread.invokeOemRilRequestStrings(strings, response);
         } catch (IOException ioe) {
-            Log.e(TAG, "invokeOemRilRequestStrings() error", ioe);
+            Log.e(TAG, mTAG + " invokeOemRilRequestStrings() error", ioe);
         }
     }
 
@@ -168,7 +169,7 @@ public LocalSocketThread(String socketPath) {
 
         public void cancel() {
             if (DBG) {
-                Log.v(TAG, "SamsungMulticlientRil cancel()");
+                Log.v(TAG, mTAG + " SamsungMulticlientRil cancel()");
             }
             synchronized (this) {
                 mCancelRequested.set(true);
@@ -181,12 +182,12 @@ public synchronized void invokeOemRilRequestRaw(byte[] data, Message response)
                 throws IOException {
             int token;
             if (mMessages.size() > MAX_MESSAGES) {
-                Log.e(TAG, "message queue is full");
+                Log.e(TAG, mTAG + " message queue is full");
                 return;
             }
 
             if (mOutputStream == null) {
-                Log.e(TAG, "Local write() error: not connected");
+                Log.e(TAG, mTAG + " Local write() error: not connected");
                 return;
             }
 
@@ -213,12 +214,12 @@ public synchronized void invokeOemRilRequestStrings(String strings[], Message re
                 throws IOException {
             int token;
             if (mMessages.size() > MAX_MESSAGES) {
-                Log.e(TAG, "message queue is full");
+                Log.e(TAG, mTAG + " message queue is full");
                 return;
             }
 
             if (mOutputStream == null) {
-                Log.e(TAG, "Local write() error: not connected");
+                Log.e(TAG, mTAG + " Local write() error: not connected");
                 return;
             }
 
@@ -272,7 +273,7 @@ private byte[] marshallRequest(int token, String strings[]) {
         public synchronized void disconnect() {
 
             if (DBG) {
-                Log.v(TAG, "Local disconnect()");
+                Log.v(TAG, mTAG + " Local disconnect()");
             }
 
             if (mSocket == null) {
@@ -282,31 +283,31 @@ public synchronized void disconnect() {
             try {
                 mSocket.shutdownInput();
             } catch (IOException e) {
-                Log.e(TAG, "Local shutdownInput() of mSocket failed", e);
+                Log.e(TAG, mTAG + " Local shutdownInput() of mSocket failed", e);
             }
 
             try {
                 mSocket.shutdownOutput();
             } catch (IOException e) {
-                Log.e(TAG, "Local shutdownOutput() of mSocket failed", e);
+                Log.e(TAG, mTAG + " Local shutdownOutput() of mSocket failed", e);
             }
 
             try {
                 mInputStream.close();
             } catch (IOException e) {
-                Log.e(TAG, "Local close() of mInputStream failed", e);
+                Log.e(TAG, mTAG + " Local close() of mInputStream failed", e);
             }
 
             try {
                 mOutputStream.close();
             } catch (IOException e) {
-                Log.e(TAG, "Local close() of mOutputStream failed", e);
+                Log.e(TAG, mTAG + " Local close() of mOutputStream failed", e);
             }
 
             try {
                 mSocket.close();
             } catch (IOException e) {
-                Log.e(TAG, "Local close() of mSocket failed", e);
+                Log.e(TAG, mTAG + " Local close() of mSocket failed", e);
             }
 
             mSocket = null;
@@ -320,7 +321,7 @@ public void run() {
             int endpos = 0;
             final byte buf[] = new byte[4096];
 
-            Log.i(TAG, "BEGIN LocalSocketThread-Socket");
+            Log.i(TAG, mTAG + " BEGIN LocalSocketThread-Socket");
             setName("MultiClientThread");
 
             mSocket = new LocalSocket();
@@ -329,7 +330,7 @@ public void run() {
                 mInputStream = mSocket.getInputStream();
                 mOutputStream = mSocket.getOutputStream();
             } catch (IOException e) {
-                Log.e(TAG, "Connect error", e);
+                Log.e(TAG, mTAG + " Connect error", e);
                 return;
             }
 
@@ -338,7 +339,7 @@ public void run() {
                     rcvd = mInputStream.read(buf, endpos, buf.length - endpos);
                     if (rcvd < 0) {
                         if (DBG) {
-                            Log.v(TAG, "EOF reached");
+                            Log.v(TAG, mTAG + " EOF reached");
                         }
                         break;
                     }
@@ -349,7 +350,7 @@ public void run() {
 
                     int msgLen = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | (buf[3] & 0xff);
                     if (msgLen + 4 > buf.length) {
-                        Log.e(TAG, "message to big. Length: " + msgLen);
+                        Log.e(TAG, mTAG + " message to big. Length: " + msgLen);
                         endpos = 0;
                         continue;
                     }
@@ -390,13 +391,13 @@ private synchronized void processRxPacket(byte data[], int pos, int length) {
                 responseType = p.readInt();
                 switch (responseType) {
                     case RESPONSE_UNSOLICITED:
-                        Log.v(TAG, "Unsolicited response ");
+                        Log.v(TAG, mTAG + " Unsolicited response ");
                         break;
                     case RESPONSE_SOLICITED:
                         processSolicited(p);
                         break;
                     default:
-                        Log.v(TAG, "Invalid response type: " + responseType);
+                        Log.v(TAG, mTAG + " Invalid response type: " + responseType);
                         break;
                 }
             } finally {
@@ -430,7 +431,7 @@ private int processSolicited(Parcel p) {
             }
 
             if (token == null) {
-                Log.e(TAG, "token is null", errorEx);
+                Log.e(TAG, mTAG + " token is null", errorEx);
             } else {
                 synchronized (this) {
                     Message m = mMessages.remove(token);
@@ -448,7 +449,7 @@ private int processSolicited(Parcel p) {
                                 m.sendToTarget();
                         }
                     } else {
-                        Log.i(TAG, "Message with token " + token + " not found");
+                        Log.i(TAG, mTAG + " Message with token " + token + " not found");
                     }
                 }
             }
@@ -466,4 +467,4 @@ public RemoteException(String detailMessage) {
         }
     }
 
-}
+}
\ No newline at end of file

From 88d1b5c15069020916fdd6eed145226d1e38608f Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Thu, 25 Jun 2015 19:19:20 +0200
Subject: [PATCH 19/55] Added doublepoints to log calls and removed whitespaces

---
 .../AIMSICD/rilexecutor/RilExecutor.java      | 10 ++--
 .../SamsungMulticlientRilExecutor.java        | 50 +++++++++----------
 2 files changed, 30 insertions(+), 30 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/RilExecutor.java b/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/RilExecutor.java
index 169ac2804..116be4955 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/RilExecutor.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/RilExecutor.java
@@ -78,7 +78,7 @@ public RilExecutor(Context context) {
         mRilExecutorDetectResult = mRequestExecutor.detect();
         if (!mRilExecutorDetectResult.available) {
             mMultiRilCompatible = false;
-            Log.e( TAG, mTAG + " Samsung Multiclient RIL not available: " + mRilExecutorDetectResult.error);
+            Log.e(TAG, mTAG + ": Samsung Multiclient RIL not available: " + mRilExecutorDetectResult.error);
             mRequestExecutor = null;
         } else {
             mRequestExecutor.start();
@@ -144,7 +144,7 @@ private synchronized List<String> executeServiceModeCommand(int type, int subtyp
                 subtype,
                 keySeqence).sendToTarget();
         if (!mRequestCondvar.block(timeout)) {
-            Log.e( TAG, mTAG + " request timeout");
+            Log.e(TAG, mTAG + ": request timeout");
             return Collections.emptyList();
         } else {
             synchronized (mLastResponseLock) {
@@ -250,15 +250,15 @@ public boolean handleMessage(Message msg) {
                     try {
                         RawResult result = (RawResult) msg.obj;
                         if (result == null) {
-                            Log.e( TAG, mTAG + " result is null");
+                            Log.e(TAG, mTAG + ": result is null");
                             break;
                         }
                         if (result.exception != null) {
-                            Log.e( TAG, mTAG + " ", result.exception);
+                            Log.e(TAG, mTAG + ": ", result.exception);
                             break;
                         }
                         if (result.result == null) {
-                            Log.v( TAG, mTAG + " No need to refresh.");
+                            Log.v(TAG, mTAG + ": No need to refresh.");
                             break;
                         }
                         if (lastKeyStep.captureResponse) {
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/SamsungMulticlientRilExecutor.java b/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/SamsungMulticlientRilExecutor.java
index 5a6552e2c..7604374f0 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/SamsungMulticlientRilExecutor.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/SamsungMulticlientRilExecutor.java
@@ -105,7 +105,7 @@ public DetectResult detect() {
     @Override
     public synchronized void start() {
         if (mThread != null) {
-            Log.e(TAG, mTAG + " OEM raw request executor thread is running");
+            Log.e(TAG, mTAG + ": OEM raw request executor thread is running");
             return;
         }
         mThread = new LocalSocketThread(MULTICLIENT_SOCKET);
@@ -115,7 +115,7 @@ public synchronized void start() {
     @Override
     public synchronized void stop() {
         if (mThread == null) {
-            Log.e(TAG, mTAG + " OEM raw request executor thread is not running");
+            Log.e(TAG, mTAG + ": OEM raw request executor thread is not running");
             return;
         }
         mThread.cancel();
@@ -125,26 +125,26 @@ public synchronized void stop() {
     @Override
     public synchronized void invokeOemRilRequestRaw(byte[] data, Message response) {
         if (mThread == null) {
-            Log.e(TAG, mTAG + " OEM raw request executor thread is not running");
+            Log.e(TAG, mTAG + ": OEM raw request executor thread is not running");
             return;
         }
         try {
             mThread.invokeOemRilRequestRaw(data, response);
         } catch (IOException ioe) {
-            Log.e(TAG, mTAG + " invokeOemRilRequestRaw() error", ioe);
+            Log.e(TAG, mTAG + ": invokeOemRilRequestRaw() error", ioe);
         }
     }
 
     @Override
     public synchronized void invokeOemRilRequestStrings(String[] strings, Message response) {
         if (mThread == null) {
-            Log.e(TAG, mTAG + " OEM raw request executor thread is not running");
+            Log.e(TAG, mTAG + ": OEM raw request executor thread is not running");
             return;
         }
         try {
             mThread.invokeOemRilRequestStrings(strings, response);
         } catch (IOException ioe) {
-            Log.e(TAG, mTAG + " invokeOemRilRequestStrings() error", ioe);
+            Log.e(TAG, mTAG + ": invokeOemRilRequestStrings() error", ioe);
         }
     }
 
@@ -169,7 +169,7 @@ public LocalSocketThread(String socketPath) {
 
         public void cancel() {
             if (DBG) {
-                Log.v(TAG, mTAG + " SamsungMulticlientRil cancel()");
+                Log.v(TAG, mTAG + ": SamsungMulticlientRil cancel()");
             }
             synchronized (this) {
                 mCancelRequested.set(true);
@@ -182,12 +182,12 @@ public synchronized void invokeOemRilRequestRaw(byte[] data, Message response)
                 throws IOException {
             int token;
             if (mMessages.size() > MAX_MESSAGES) {
-                Log.e(TAG, mTAG + " message queue is full");
+                Log.e(TAG, mTAG + ": message queue is full");
                 return;
             }
 
             if (mOutputStream == null) {
-                Log.e(TAG, mTAG + " Local write() error: not connected");
+                Log.e(TAG, mTAG + ": Local write() error: not connected");
                 return;
             }
 
@@ -214,12 +214,12 @@ public synchronized void invokeOemRilRequestStrings(String strings[], Message re
                 throws IOException {
             int token;
             if (mMessages.size() > MAX_MESSAGES) {
-                Log.e(TAG, mTAG + " message queue is full");
+                Log.e(TAG, mTAG + ": message queue is full");
                 return;
             }
 
             if (mOutputStream == null) {
-                Log.e(TAG, mTAG + " Local write() error: not connected");
+                Log.e(TAG, mTAG + ": Local write() error: not connected");
                 return;
             }
 
@@ -273,7 +273,7 @@ private byte[] marshallRequest(int token, String strings[]) {
         public synchronized void disconnect() {
 
             if (DBG) {
-                Log.v(TAG, mTAG + " Local disconnect()");
+                Log.v(TAG, mTAG + ": Local disconnect()");
             }
 
             if (mSocket == null) {
@@ -283,31 +283,31 @@ public synchronized void disconnect() {
             try {
                 mSocket.shutdownInput();
             } catch (IOException e) {
-                Log.e(TAG, mTAG + " Local shutdownInput() of mSocket failed", e);
+                Log.e(TAG, mTAG + ": Local shutdownInput() of mSocket failed", e);
             }
 
             try {
                 mSocket.shutdownOutput();
             } catch (IOException e) {
-                Log.e(TAG, mTAG + " Local shutdownOutput() of mSocket failed", e);
+                Log.e(TAG, mTAG + ": Local shutdownOutput() of mSocket failed", e);
             }
 
             try {
                 mInputStream.close();
             } catch (IOException e) {
-                Log.e(TAG, mTAG + " Local close() of mInputStream failed", e);
+                Log.e(TAG, mTAG + ": Local close() of mInputStream failed", e);
             }
 
             try {
                 mOutputStream.close();
             } catch (IOException e) {
-                Log.e(TAG, mTAG + " Local close() of mOutputStream failed", e);
+                Log.e(TAG, mTAG + ": Local close() of mOutputStream failed", e);
             }
 
             try {
                 mSocket.close();
             } catch (IOException e) {
-                Log.e(TAG, mTAG + " Local close() of mSocket failed", e);
+                Log.e(TAG, mTAG + ": Local close() of mSocket failed", e);
             }
 
             mSocket = null;
@@ -321,7 +321,7 @@ public void run() {
             int endpos = 0;
             final byte buf[] = new byte[4096];
 
-            Log.i(TAG, mTAG + " BEGIN LocalSocketThread-Socket");
+            Log.i(TAG, mTAG + ": BEGIN LocalSocketThread-Socket");
             setName("MultiClientThread");
 
             mSocket = new LocalSocket();
@@ -330,7 +330,7 @@ public void run() {
                 mInputStream = mSocket.getInputStream();
                 mOutputStream = mSocket.getOutputStream();
             } catch (IOException e) {
-                Log.e(TAG, mTAG + " Connect error", e);
+                Log.e(TAG, mTAG + ": Connect error", e);
                 return;
             }
 
@@ -339,7 +339,7 @@ public void run() {
                     rcvd = mInputStream.read(buf, endpos, buf.length - endpos);
                     if (rcvd < 0) {
                         if (DBG) {
-                            Log.v(TAG, mTAG + " EOF reached");
+                            Log.v(TAG, mTAG + ": EOF reached");
                         }
                         break;
                     }
@@ -350,7 +350,7 @@ public void run() {
 
                     int msgLen = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | (buf[3] & 0xff);
                     if (msgLen + 4 > buf.length) {
-                        Log.e(TAG, mTAG + " message to big. Length: " + msgLen);
+                        Log.e(TAG, mTAG + ": message to big. Length: " + msgLen);
                         endpos = 0;
                         continue;
                     }
@@ -391,13 +391,13 @@ private synchronized void processRxPacket(byte data[], int pos, int length) {
                 responseType = p.readInt();
                 switch (responseType) {
                     case RESPONSE_UNSOLICITED:
-                        Log.v(TAG, mTAG + " Unsolicited response ");
+                        Log.v(TAG, mTAG + ": Unsolicited response ");
                         break;
                     case RESPONSE_SOLICITED:
                         processSolicited(p);
                         break;
                     default:
-                        Log.v(TAG, mTAG + " Invalid response type: " + responseType);
+                        Log.v(TAG, mTAG + ": Invalid response type: " + responseType);
                         break;
                 }
             } finally {
@@ -431,7 +431,7 @@ private int processSolicited(Parcel p) {
             }
 
             if (token == null) {
-                Log.e(TAG, mTAG + " token is null", errorEx);
+                Log.e(TAG, mTAG + ": token is null", errorEx);
             } else {
                 synchronized (this) {
                     Message m = mMessages.remove(token);
@@ -449,7 +449,7 @@ private int processSolicited(Parcel p) {
                                 m.sendToTarget();
                         }
                     } else {
-                        Log.i(TAG, mTAG + " Message with token " + token + " not found");
+                        Log.i(TAG, mTAG + ": Message with token " + token + " not found");
                     }
                 }
             }

From 47357a99a72d7530b319da0f8328353d630bac97 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Thu, 25 Jun 2015 19:25:33 +0200
Subject: [PATCH 20/55] Increased build number

---
 app/src/main/AndroidManifest.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5bff6b15..952d9711b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
           android:versionCode="30"
-          android:versionName="0.1.30-alpha-b05">
+          android:versionName="0.1.30-alpha-b06">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"

From 037bd4952fe2dbd5485713e90a2e30a6fe37068a Mon Sep 17 00:00:00 2001
From: SecUpwN <SecUpwN@protonmail.ch>
Date: Fri, 26 Jun 2015 13:49:03 +0200
Subject: [PATCH 21/55] Added warning as requested in
 https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/pull/506#commitcomment-11859680

---
 app/build.gradle                                      | 1 +
 app/src/main/java/com/SecUpwN/AIMSICD/AppAIMSICD.java | 2 ++
 2 files changed, 3 insertions(+)

diff --git a/app/build.gradle b/app/build.gradle
index 6afdc888d..ffaf227f2 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -125,6 +125,7 @@ android {
 }
 
 dependencies {
+    // DO NOT REMOVE BELOW COMMENTED-OUT CODE BEFORE ASKING!
     //compile 'com.github.amlcurran.showcaseview:library:5.0.0'
     //compile 'com.android.support:appcompat-v7:22.1.1'
     //https://github.com/lp0/slf4j-android
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/AppAIMSICD.java b/app/src/main/java/com/SecUpwN/AIMSICD/AppAIMSICD.java
index f6134ca9c..24c9299d3 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/AppAIMSICD.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/AppAIMSICD.java
@@ -14,6 +14,7 @@
 import com.SecUpwN.AIMSICD.constants.TinyDbKeys;
 import com.SecUpwN.AIMSICD.utils.BaseAsyncTask;
 import com.SecUpwN.AIMSICD.utils.TinyDB;
+// DO NOT REMOVE BELOW COMMENTED-OUT CODE BEFORE ASKING!
 //import com.squareup.leakcanary.LeakCanary;
 
 import java.util.ArrayList;
@@ -35,6 +36,7 @@ public AppAIMSICD() {
     @Override
     public void onCreate() {
         super.onCreate();
+        // DO NOT REMOVE BELOW COMMENTED-OUT CODE BEFORE ASKING!
         //LeakCanary.install(this);
         TinyDB.getInstance().init(getApplicationContext());
         TinyDB.getInstance().putBoolean(TinyDbKeys.FINISHED_LOAD_IN_MAP, true);

From d5d8243c2e958940b3e276f0e84432c8bd2bcc43 Mon Sep 17 00:00:00 2001
From: SecUpwN <SecUpwN@protonmail.ch>
Date: Fri, 26 Jun 2015 13:53:39 +0200
Subject: [PATCH 22/55] Changed mTAG as requested in
 https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/pull/507#commitcomment-11873117
 to fix #324

---
 .../AIMSICD/rilexecutor/SamsungMulticlientRilExecutor.java      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/SamsungMulticlientRilExecutor.java b/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/SamsungMulticlientRilExecutor.java
index 7604374f0..68c833785 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/SamsungMulticlientRilExecutor.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/rilexecutor/SamsungMulticlientRilExecutor.java
@@ -58,7 +58,7 @@ public class SamsungMulticlientRilExecutor implements OemRilExecutor {
     private static final boolean DBG = false;
 
     private static final String TAG = "AIMSICD";
-    private static final String mTAG = "MultiRil";
+    private static final String mTAG = "SamsungMulticlientRilExecutor";
 
     private volatile LocalSocketThread mThread;
 

From 3a29f607d3252b59bdbb433c7de8f7c0fad07b52 Mon Sep 17 00:00:00 2001
From: SecUpwN <SecUpwN@protonmail.ch>
Date: Fri, 26 Jun 2015 13:54:51 +0200
Subject: [PATCH 23/55] Testing WIP-Internal v0.1.30-alpha-build-07

---
 app/src/main/AndroidManifest.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 952d9711b..c5033c62e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
           android:versionCode="30"
-          android:versionName="0.1.30-alpha-b06">
+          android:versionName="0.1.30-alpha-b07">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"

From f22532359db8c922e12163ec8e570366fac786a0 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Sat, 27 Jun 2015 01:41:44 +0200
Subject: [PATCH 24/55] Added Buildozer Buildnumber to About View

---
 app/build.gradle                                  |  6 ++++++
 app/src/main/AndroidManifest.xml                  |  2 +-
 .../SecUpwN/AIMSICD/fragments/AboutFragment.java  | 15 ++++++++++++++-
 app/src/main/res/layout/about_fragment.xml        | 12 +++++++++++-
 .../main/res/values/untranslatable_strings.xml    |  3 ++-
 5 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index ffaf227f2..7e6708566 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -56,9 +56,15 @@ android {
             } catch (MissingPropertyException e) {
                 buildConfigField 'String', 'OPEN_CELLID_API_KEY', '"NA"'
             }
+            try {
+                buildConfigField 'String', 'BUILDOZER_BUILDNUMBER', '\"' + System.getenv("BUILDOZER_BUILDNUMBER") + '\"'
+            } catch (MissingPropertyException e) {
+                buildConfigField 'String', 'BUILDOZER_BUILDNUMBER', '"NA"'
+            }
         }
         release {
             buildConfigField 'String', 'OPEN_CELLID_API_KEY', '"NA"'
+            buildConfigField 'String', 'BUILDOZER_BUILDNUMBER', '"NA"'
             minifyEnabled true
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
         }
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c5033c62e..29d492f1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
           android:versionCode="30"
-          android:versionName="0.1.30-alpha-b07">
+          android:versionName="0.1.30-alpha-b08">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/fragments/AboutFragment.java b/app/src/main/java/com/SecUpwN/AIMSICD/fragments/AboutFragment.java
index 83dff41c7..e7042aa9f 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/fragments/AboutFragment.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/fragments/AboutFragment.java
@@ -20,6 +20,7 @@
 import android.widget.TextView;
 
 import com.SecUpwN.AIMSICD.R;
+import com.SecUpwN.AIMSICD.BuildConfig;
 import com.SecUpwN.AIMSICD.activities.CreditsRollActivity;
 import com.SecUpwN.AIMSICD.utils.MiscUtils;
 
@@ -33,6 +34,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
 
         View v = inflater.inflate(R.layout.about_fragment, container, false);
         String version;
+        String BUILDOZER_BUILDNUMBER;
         btncredits = (Button) v.findViewById(R.id.aimsicd_credits_link);
 
         PackageManager manager = mContext.getPackageManager();
@@ -44,12 +46,23 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
             //Woops something went wrong??
             version = "";
         }
+        
+        BUILDOZER_BUILDNUMBER = prefs.getString(BUILDOZER_BUILDNUMBER, BuildConfig.BUILDOZER_BUILDNUMBER);
+        if (BUILDOZER_BUILDNUMBER == null) {
+            BUILDOZER_BUILDNUMBER = "NA"; // avoid null buildnumber
+        }
 
         TextView versionNumber;
         if (v != null) {
             versionNumber = (TextView) v.findViewById(R.id.aimsicd_version);
             versionNumber.setText(getString(R.string.app_version) + version);
 
+            if(BUILDOZER_BUILDNUMBER != "NA") {
+                BuildozerView = (TextView) v.findViewById(R.id.buildozer_buildnumber);
+                BuildozerView.setText(getString(R.string.buildozer_buildnumber) + BUILDOZER_BUILDNUMBER);
+                BuildozerView.setVisibility(View.VISIBLE);
+            }
+
             //Status icons link
             View tv = v.findViewById(R.id.aimsicd_status_icons);
             //setLink(tv, R.string.status_icons_link);
@@ -183,4 +196,4 @@ public AboutFragment() {
     }
 
 
-}
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/about_fragment.xml b/app/src/main/res/layout/about_fragment.xml
index 90d8b7cf0..2d8142f90 100644
--- a/app/src/main/res/layout/about_fragment.xml
+++ b/app/src/main/res/layout/about_fragment.xml
@@ -32,6 +32,16 @@
             android:textColor="@color/red_text"
             android:textSize="16sp"/>
 
+        <TextView
+		          android:id="@+id/buildozer_buildnumber"
+	           android:layout_width="match_parent"
+		          android:layout_height="wrap_content"
+		          android:gravity="center_horizontal"
+	           android:text="@string/buildozer_buildnumber"
+	           android:textColor="@color/red_text"
+	           android:textSize="16sp"
+	           android:visibility="gone"/>
+
         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
@@ -252,4 +262,4 @@
                 android:textSize="14sp" />
         </LinearLayout>
     </LinearLayout>
-</ScrollView>
+</ScrollView>
\ No newline at end of file
diff --git a/app/src/main/res/values/untranslatable_strings.xml b/app/src/main/res/values/untranslatable_strings.xml
index 7a9642b6e..77dfcc539 100644
--- a/app/src/main/res/values/untranslatable_strings.xml
+++ b/app/src/main/res/values/untranslatable_strings.xml
@@ -8,6 +8,7 @@
 
 
     <string name="aimsicd_about_info" translatable="false">Android IMSI-Catcher Detector (AIMSICD)</string>
+    <string name="buildozer_buildnumber" translatable="false">Buildozer Build:&#160;</string>
     <string name="aimsicd_wiki_link" translatable="false">https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/wiki</string>
     <string name="aimsicd_contribute_link" translatable="false">https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/blob/HEAD/CONTRIBUTING.md</string>
     <string name="disclaimer_link" translatable="false">https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/blob/HEAD/DISCLAIMER</string>
@@ -72,4 +73,4 @@
         <item>@string/FLASH</item>
         <item>@string/WAPPUSH</item>
     </string-array>
-</resources>
+</resources>
\ No newline at end of file

From ca2986a9248c18e0d1015b80cf855f9a58d243a8 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Sat, 27 Jun 2015 01:48:45 +0200
Subject: [PATCH 25/55] Removed Crazy whitespaces

---
 app/src/main/res/layout/about_fragment.xml | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/app/src/main/res/layout/about_fragment.xml b/app/src/main/res/layout/about_fragment.xml
index 2d8142f90..7f9c432ff 100644
--- a/app/src/main/res/layout/about_fragment.xml
+++ b/app/src/main/res/layout/about_fragment.xml
@@ -33,14 +33,14 @@
             android:textSize="16sp"/>
 
         <TextView
-		          android:id="@+id/buildozer_buildnumber"
-	           android:layout_width="match_parent"
-		          android:layout_height="wrap_content"
-		          android:gravity="center_horizontal"
-	           android:text="@string/buildozer_buildnumber"
-	           android:textColor="@color/red_text"
-	           android:textSize="16sp"
-	           android:visibility="gone"/>
+            android:id="@+id/buildozer_buildnumber"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center_horizontal"
+            android:text="@string/buildozer_buildnumber"
+            android:textColor="@color/red_text"
+            android:textSize="16sp"
+            android:visibility="gone"/>
 
         <TextView
             android:layout_width="wrap_content"

From 70f91a74f3b05db6ce21723ca1ba8ec05e9e9fb6 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Sat, 27 Jun 2015 02:39:53 +0200
Subject: [PATCH 26/55] repaired how to get Buildozer buildnumber in about
 fragment

---
 .../main/java/com/SecUpwN/AIMSICD/fragments/AboutFragment.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/fragments/AboutFragment.java b/app/src/main/java/com/SecUpwN/AIMSICD/fragments/AboutFragment.java
index e7042aa9f..44a09c99c 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/fragments/AboutFragment.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/fragments/AboutFragment.java
@@ -47,7 +47,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
             version = "";
         }
         
-        BUILDOZER_BUILDNUMBER = prefs.getString(BUILDOZER_BUILDNUMBER, BuildConfig.BUILDOZER_BUILDNUMBER);
+        BUILDOZER_BUILDNUMBER = BuildConfig.BUILDOZER_BUILDNUMBER;
         if (BUILDOZER_BUILDNUMBER == null) {
             BUILDOZER_BUILDNUMBER = "NA"; // avoid null buildnumber
         }

From 1e6b4e13ffbc67800fbca7d8e55d67b9e749c62b Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Sat, 27 Jun 2015 04:36:02 +0200
Subject: [PATCH 27/55] Add missed BuildozerView declaration

---
 .../main/java/com/SecUpwN/AIMSICD/fragments/AboutFragment.java   | 1 +
 1 file changed, 1 insertion(+)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/fragments/AboutFragment.java b/app/src/main/java/com/SecUpwN/AIMSICD/fragments/AboutFragment.java
index 44a09c99c..76b0e25fe 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/fragments/AboutFragment.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/fragments/AboutFragment.java
@@ -53,6 +53,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
         }
 
         TextView versionNumber;
+        TextView BuildozerView;
         if (v != null) {
             versionNumber = (TextView) v.findViewById(R.id.aimsicd_version);
             versionNumber.setText(getString(R.string.app_version) + version);

From ba09ac97f1ea8407ac7f784d35b9991febf1bbd5 Mon Sep 17 00:00:00 2001
From: "E:V:A" <E3V3A@users.noreply.github.com>
Date: Sun, 28 Jun 2015 01:31:00 +0800
Subject: [PATCH 28/55] Change timeout value from 40 to 80 seconds

---
 .../main/java/com/SecUpwN/AIMSICD/utils/RequestTask.java    | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/RequestTask.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/RequestTask.java
index 5d7c3b7f0..e859e646d 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/RequestTask.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/RequestTask.java
@@ -96,8 +96,8 @@ public class RequestTask extends BaseAsyncTask<String, Integer, String> {
 
     //Calling from the menu more extensive(more difficult for sever),
     // we have to give more time for the server response
-    public static final int REQUEST_TIMEOUT_MAPS = 40000;       // [ms] 40 s Calling from map
-    public static final int REQUEST_TIMEOUT_MENU = 40000;       // [ms] 40 s Calling from menu
+    public static final int REQUEST_TIMEOUT_MAPS = 80000;       // [ms] 40 s Calling from map
+    public static final int REQUEST_TIMEOUT_MENU = 80000;       // [ms] 40 s Calling from menu
 
     public static final char DBE_DOWNLOAD_REQUEST = 1;          // OCID download request from "APPLICATION" drawer title
     public static final char DBE_DOWNLOAD_REQUEST_FROM_MAP = 2; // OCID download request from "Antenna Map Viewer"
@@ -436,4 +436,4 @@ public static String getOCDBDownloadDirectoryPath(Context context) {
     public static String getOCDBDownloadFilePath(Context context) {
         return getOCDBDownloadDirectoryPath(context) + OCDB_File_Name;
     }
-}
\ No newline at end of file
+}

From 7e1d55535c22b3c31fc9d6f089a57d78c7f38ac8 Mon Sep 17 00:00:00 2001
From: Marvin Arnold <marvinmarnold@gmail.com>
Date: Wed, 1 Jul 2015 23:09:52 -0500
Subject: [PATCH 29/55] Truncate location directly in LocationTracker

---
 .../AIMSICD/service/LocationTracker.java      |  5 +--
 .../com/SecUpwN/AIMSICD/utils/OCIDCSV.java    | 13 ++------
 .../AIMSICD/utils/TruncatedLocation.java      | 32 +++++++++++++++++++
 3 files changed, 37 insertions(+), 13 deletions(-)
 create mode 100644 app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/service/LocationTracker.java b/app/src/main/java/com/SecUpwN/AIMSICD/service/LocationTracker.java
index 0783c9636..ce792e443 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/service/LocationTracker.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/service/LocationTracker.java
@@ -19,6 +19,7 @@
 import com.SecUpwN.AIMSICD.adapters.AIMSICDDbAdapter;
 import com.SecUpwN.AIMSICD.utils.Cell;
 import com.SecUpwN.AIMSICD.utils.GeoLocation;
+import com.SecUpwN.AIMSICD.utils.TruncatedLocation;
 
 /**
  * Class to handle GPS location tracking
@@ -98,11 +99,11 @@ public boolean notMovedInAWhile() {
 
     public GeoLocation lastKnownLocation() {
         GeoLocation loc = null;
-        Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
+        TruncatedLocation location = new TruncatedLocation(lm.getLastKnownLocation(LocationManager.GPS_PROVIDER));
         if (location != null && (location.getLatitude() != 0.0 && location.getLongitude() != 0.0)) {
             loc = GeoLocation.fromDegrees(location.getLatitude(), location.getLongitude());
         } else {
-            location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
+            location = new TruncatedLocation(lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER));
             if (location != null && (location.getLatitude() != 0.0
                     && location.getLongitude() != 0.0)) {
                 loc = GeoLocation.fromDegrees(location.getLatitude(), location.getLongitude());
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/OCIDCSV.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/OCIDCSV.java
index a41fa04cb..d5ad07af0 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/OCIDCSV.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/OCIDCSV.java
@@ -1,7 +1,6 @@
 package com.SecUpwN.AIMSICD.utils;
 
 import java.util.ArrayList;
-import java.util.List;
 
 /**
  * Created by Marvin Arnold on 9/06/15.
@@ -24,11 +23,11 @@ public OCIDCSVLine(String[] ocidCell) {
         }
 
         public double getGPSLat() {
-            return truncateDouble(this.ocidCell[0], 5);
+            return TruncatedLocation.truncateDouble(this.ocidCell[0], 5);
         }
 
         public double getGPSLon() {
-            return truncateDouble(this.ocidCell[1], 5);
+            return TruncatedLocation.truncateDouble(this.ocidCell[1], 5);
         }
 
         public int getMCC() {
@@ -75,13 +74,5 @@ public String getRAT() {
             return String.valueOf(this.ocidCell[10]);
         }
 
-        public double truncateDouble(String d, int numDecimal) {
-            return  truncateDouble(Double.parseDouble(d), numDecimal);
-        }
-
-        public double truncateDouble(double d, int numDecimal) {
-            String s = String.format("%." + Integer.toString(numDecimal) +"f", d);
-            return Double.parseDouble(s);
-        }
     }
 }
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java
new file mode 100644
index 000000000..f419f669a
--- /dev/null
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java
@@ -0,0 +1,32 @@
+package com.SecUpwN.AIMSICD.utils;
+
+import android.location.Location;
+
+/**
+ * Created by Marvin Arnold on 1/07/15.
+ */
+public class TruncatedLocation extends Location {
+
+    public TruncatedLocation(Location l) {
+        super(l);
+    }
+
+    @Override
+    public double getLatitude() {
+        return truncateDouble(super.getLatitude(), 5);
+    }
+
+    @Override
+    public double getLongitude() {
+        return truncateDouble(super.getLongitude(), 5);
+    }
+
+    public static double truncateDouble(String d, int numDecimal) {
+        return  truncateDouble(Double.parseDouble(d), numDecimal);
+    }
+
+    public static double truncateDouble(double d, int numDecimal) {
+        String s = String.format("%." + Integer.toString(numDecimal) +"f", d);
+        return Double.parseDouble(s);
+    }
+}

From b8ce9fd874c8eedb729eb0887b08f0456c59b038 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Thu, 2 Jul 2015 16:44:38 +0200
Subject: [PATCH 30/55] Repair OCIDCSV parsing

---
 .../SecUpwN/AIMSICD/utils/TruncatedLocation.java    | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java
index f419f669a..02ddeca55 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java
@@ -1,6 +1,8 @@
 package com.SecUpwN.AIMSICD.utils;
 
 import android.location.Location;
+import java.text.NumberFormat;
+import java.text.ParseException;
 
 /**
  * Created by Marvin Arnold on 1/07/15.
@@ -26,7 +28,16 @@ public static double truncateDouble(String d, int numDecimal) {
     }
 
     public static double truncateDouble(double d, int numDecimal) {
+        double d = 0;
+        NumberFormat format = NumberFormat.getInstance();
+
         String s = String.format("%." + Integer.toString(numDecimal) +"f", d);
-        return Double.parseDouble(s);
+        try {
+            Number number = format.parse(s);
+            double d = number.doubleValue();
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return d;
     }
 }

From efbcf4410a9d1585c6549a703273f417dd4f5ed1 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Thu, 2 Jul 2015 16:56:06 +0200
Subject: [PATCH 31/55] Remove unneeded variable definition

---
 .../main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java
index 02ddeca55..f64d2ecd0 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java
@@ -28,7 +28,7 @@ public static double truncateDouble(String d, int numDecimal) {
     }
 
     public static double truncateDouble(double d, int numDecimal) {
-        double d = 0;
+        d = 0;
         NumberFormat format = NumberFormat.getInstance();
 
         String s = String.format("%." + Integer.toString(numDecimal) +"f", d);

From 9967257249af83c405683e02366985cd3c86f633 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Thu, 2 Jul 2015 17:13:49 +0200
Subject: [PATCH 32/55] renamed variable

---
 .../java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java   | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java
index f64d2ecd0..560c13c13 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java
@@ -28,16 +28,16 @@ public static double truncateDouble(String d, int numDecimal) {
     }
 
     public static double truncateDouble(double d, int numDecimal) {
-        d = 0;
+        double td = 0;
         NumberFormat format = NumberFormat.getInstance();
 
         String s = String.format("%." + Integer.toString(numDecimal) +"f", d);
         try {
             Number number = format.parse(s);
-            double d = number.doubleValue();
+            double td = number.doubleValue();
         } catch (ParseException e) {
             e.printStackTrace();
         }
-        return d;
+        return td;
     }
 }

From 7d4cf54e005737082a67a5ec006fcbb154622a33 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Thu, 2 Jul 2015 17:18:48 +0200
Subject: [PATCH 33/55] Removed dual declaration

---
 .../main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java
index 560c13c13..46545fc81 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/TruncatedLocation.java
@@ -34,7 +34,7 @@ public static double truncateDouble(double d, int numDecimal) {
         String s = String.format("%." + Integer.toString(numDecimal) +"f", d);
         try {
             Number number = format.parse(s);
-            double td = number.doubleValue();
+            td = number.doubleValue();
         } catch (ParseException e) {
             e.printStackTrace();
         }

From 2a03b732d06fd7d814133ff637fd47c4c5650b73 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Thu, 2 Jul 2015 23:14:04 +0200
Subject: [PATCH 34/55] Increase build number after fixing OCID CSV parsing

---
 app/src/main/AndroidManifest.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 29d492f1d..e17b0b88b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
           android:versionCode="30"
-          android:versionName="0.1.30-alpha-b08">
+          android:versionName="0.1.30-alpha-b09">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"

From 9cf4977ba0bb42e57f75cc97ecd6424f71a3c6c5 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Fri, 3 Jul 2015 10:23:22 +0200
Subject: [PATCH 35/55] Fix #325

---
 .../com/SecUpwN/AIMSICD/service/LocationTracker.java   | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/service/LocationTracker.java b/app/src/main/java/com/SecUpwN/AIMSICD/service/LocationTracker.java
index ce792e443..1ef1a2437 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/service/LocationTracker.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/service/LocationTracker.java
@@ -99,14 +99,16 @@ public boolean notMovedInAWhile() {
 
     public GeoLocation lastKnownLocation() {
         GeoLocation loc = null;
-        TruncatedLocation location = new TruncatedLocation(lm.getLastKnownLocation(LocationManager.GPS_PROVIDER));
+        Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
         if (location != null && (location.getLatitude() != 0.0 && location.getLongitude() != 0.0)) {
-            loc = GeoLocation.fromDegrees(location.getLatitude(), location.getLongitude());
+            TruncatedLocation TruncatedLocation = new TruncatedLocation(location);
+            loc = GeoLocation.fromDegrees(TruncatedLocation.getLatitude(), TruncatedLocation.getLongitude());
         } else {
-            location = new TruncatedLocation(lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER));
+            location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
             if (location != null && (location.getLatitude() != 0.0
                     && location.getLongitude() != 0.0)) {
-                loc = GeoLocation.fromDegrees(location.getLatitude(), location.getLongitude());
+                TruncatedLocation TruncatedLocation = new TruncatedLocation(location);
+                loc = GeoLocation.fromDegrees(TruncatedLocation.getLatitude(), TruncatedLocation.getLongitude());
             } else {
                 String coords = prefs.getString(context.getString(R.string.data_last_lat_lon), null);
                 if (coords != null) {

From 5dedfa7ef5550449ce7d08a0391cf77295676301 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Fri, 3 Jul 2015 10:26:32 +0200
Subject: [PATCH 36/55] Increase Build

---
 app/src/main/AndroidManifest.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e17b0b88b..dfcc8a628 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
           android:versionCode="30"
-          android:versionName="0.1.30-alpha-b09">
+          android:versionName="0.1.30-alpha-b10">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"

From fda31667fa57fdbc1d80fc153245461a60076682 Mon Sep 17 00:00:00 2001
From: SecUpwN <SecUpwN@protonmail.ch>
Date: Fri, 3 Jul 2015 14:11:54 +0200
Subject: [PATCH 37/55] Small string fixes

---
 .../main/java/com/SecUpwN/AIMSICD/service/CellTracker.java    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java b/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
index 9e187d67a..3dd4a0a49 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
@@ -372,7 +372,7 @@ public static String requestNewOCIDKey() throws Exception {
             // a new API key within 24 hours of the last request. (See GH issue #267)
             // Make toast message:  "Only one new API key request per 24 hours. Please try again later."
 
-            Helpers.msgLong(context, context.getString(R.string.only_one_api_per_day));
+            Helpers.msgLong(context, context.getString(R.string.only_one_key_per_day));
             String responseFromServer = result.getResponseFromServer();
             Log.d("AIMSICD", "CellTracker: OCID Reached 24hr API key limit: " + responseFromServer);
             return responseFromServer;
@@ -1109,7 +1109,7 @@ void setNotification() {
             case ALARM: // ORANGE, RED or BLACK ?
                 tickerText = context.getResources().getString(R.string.app_name_short) + " - " + context.getString(R.string.alert_threat_detected); // Hmm, this is vague!
                 if (mFemtoDetected) {
-                    contentText = context.getString(R.string.aletr_femtocell_connection_detected);
+                    contentText = context.getString(R.string.alert_femtocell_connection_detected);
                 } else if (mTypeZeroSmsDetected) {
                     contentText = context.getString(R.string.alert_silent_sms_detected);
                 }

From 63df1299d5269c9304af8cbc9e6c98b9747ebb77 Mon Sep 17 00:00:00 2001
From: SecUpwN <SecUpwN@protonmail.ch>
Date: Fri, 3 Jul 2015 14:18:24 +0200
Subject: [PATCH 38/55] Improved translations with @weblate to fix #460

---
 CONTRIBUTING.md                               |   8 +-
 .../res/values-de/translatable_strings.xml    |   4 +-
 .../res/values-fr/translatable_strings.xml    |  27 +-
 .../res/values-pl/translatable_strings.xml    | 521 +++++++++++-------
 .../res/values-ru/translatable_strings.xml    |   6 +-
 .../main/res/values/translatable_strings.xml  |  17 +-
 6 files changed, 333 insertions(+), 250 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 0c1270fe6..f9d898264 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -23,11 +23,9 @@ Feel invited to develop with us using these steps:
 
 Let our app start up in your native language!
 
-* Copy file [translatable_strings.xml](https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/raw/development/app/src/main/res/values/translatable_strings.xml) into your values-[code](https://en.wikipedia.org/wiki/ISO_639-1) folder.
-* Example: `app/src/main/res/values-de/translatable_strings.xml`
-* Translate the xml-file with an Editor, Android Studio or IntelliJ IDEA.
-6. Increase the build number `*-alpha-bXX` in `android:versionName`.
-7. Test your changes and submit a [pull request](https://help.github.com/articles/using-pull-requests/) when we shall add it.
+* See [our translations](https://hosted.weblate.org/projects/aimsicd/strings/) and login via [GitHub](https://hosted.weblate.org/accounts/login/github/?next=/projects/aimsicd/strings/) or [others](https://hosted.weblate.org/accounts/login/?next=/projects/aimsicd/strings/) to add yours.
+* When translating, keep small device screens in mind. Shorten it.
+* Translations will be pulled into our GitHub automatically. Enjoy!
 
 ---
 
diff --git a/app/src/main/res/values-de/translatable_strings.xml b/app/src/main/res/values-de/translatable_strings.xml
index 55b09c95d..d90662962 100644
--- a/app/src/main/res/values-de/translatable_strings.xml
+++ b/app/src/main/res/values-de/translatable_strings.xml
@@ -228,7 +228,7 @@
     <string name="stopped_monitoring_cell_information">Beobachtung der Funkzelldaten angehalten.</string>
     <string name="tracking_cell_information">Funkzelldaten werden aufzeichnet.</string>
     <string name="stopped_tracking_cell_information">Aufzeichnung der Funkzelldaten angehalten.</string>
-    <string name="only_one_api_per_day">Anfrage für neuen API-Schlüssel nur einmal aller 24 Stunden möglich!\nBitte später erneut versuchen.</string>
+    <string name="only_one_key_per_day">Anfrage für neuen API-Schlüssel nur einmal aller 24 Stunden möglich!\nBitte später erneut versuchen.</string>
     <string name="cell_id_doesnt_exist_in_db">Zell-ID nicht existent in OCID-Datenbank!</string>
     <string name="hostile_service_area_changing_lac_detected">Feindliche Betriebsaktion: LAC-Änderung erkannt!</string>
     <string name="femtocell_detection_active">Femtozellenerkennung aktiv.</string>
@@ -238,7 +238,7 @@
     <string name="status_idle">Status: Ruhend.</string>
     <string name="status_good">Status: Gut. Keine Gefahren erkannt.</string>
     <string name="alert_threat_detected">ALARM: Eine Gefahr wurde erkannt!</string>
-    <string name="aletr_femtocell_connection_detected">ALARM: Verbinding mit Femtozelle erkannt!</string>
+    <string name="alert_femtocell_connection_detected">ALARM: Verbinding mit Femtozelle erkannt!</string>
     <string name="alert_silent_sms_detected">ALARM: Stille SMS (Type-0) erkannt!</string>
     <string name="femtocell_only_on_cdma_devices">AIMSICD kann Verbindungen mit Femtozellen derzeit nur auf CDMA-Geräten erkennen.</string>
     <string name="service_state_changed">Betriebsstatus verändert!</string>
diff --git a/app/src/main/res/values-fr/translatable_strings.xml b/app/src/main/res/values-fr/translatable_strings.xml
index 888121dc2..4385b4f5f 100755
--- a/app/src/main/res/values-fr/translatable_strings.xml
+++ b/app/src/main/res/values-fr/translatable_strings.xml
@@ -3,7 +3,6 @@
 
     <!-- Drawer -->
     <string name="tracking">Tracking</string>
-
     <string name="device_info">Détails Téléphone/Carte SIM</string>
     <string name="map_view">Carte des Antennes Relai</string>
     <string name="db_viewer">Visionneuse de la Base de Donnée</string>
@@ -28,20 +27,16 @@
     <!-- MENU -->
     <string name="toggle_attack_detection">Démarrer/arrêter la détection des attaques</string>
     <string name="toggle_cell_tracking">Commencer à localiser les cellules</string>
-
     <string name="backup_database">Sauvegarder la Base de Donnée</string>
     <string name="clear_database">Effacer/Réinitialiser la Base De Donnée</string>
     <string name="clear_database_question">Toutes les données seront effacés.\nÊtes vous sur?</string>
-
     <string name="restore_database">Restaurer la Base de Données</string>
     <string name="preferences">Préférences</string>
     <string name="press_once_again_to_exit">Appuyez une seconde fois pour quitter.</string>
     <string name="cell_lookup">Détails sur la/les cellule(s) actuelles</string>
     <string name="send_logs">Debugging</string>
-
     <string name="no_network_connection_title">Aucune Connexion Internet</string>
-    <string name="no_network_connection_message">Impossible de télécharger les données OpenCellID sans une
-	connexion internet !</string>
+    <string name="no_network_connection_message">Impossible de télécharger les données OpenCellID sans une connexion internet!</string>
 
     <!-- MAP VIEWER -->
     <string name="get_opencellid">Télécharger les BTS depuis OpenCellID</string>
@@ -202,7 +197,6 @@
     <string name="detail_info_high">Actions Hostiles de la part d\'un service détecté: Un IMSI-Catcher ou une fausse BTS est actuellement en train de traquer ses utilisateurs. Le scan à lieu ici et maintenant. Vous devriez quitter cette place, particulièrement s’il y a des troubles politiques. Enlevez votre batterie ou détruisez votre téléphone!</string>
     <string name="detail_info_danger">Tracking Détecté : une fausse BTS ou IMSI-Catcher est actuellement en train de VOUS tracer et empêche votre téléphone de se connecter à votre opérateur avec un chiffrement normal. Si vous êtes en danger, détruisez votre téléphone(ou vendez le)+votre carte SIM et déclarez cette dernière volée.</string>
     <string name="detail_info_run">Manipulation: Quelqu\'un essaye de contrôler à distance votre téléphone. Détruisez votre téléphone(ou vendez le) et obtenez en un nouveau depuis un autre emplacement géographique!</string>
-
     <string name="open_cell_id_button_cancel">Annuler</string>
     <string name="open_cell_id_button_ok">OK</string>
 
@@ -234,7 +228,7 @@
     <string name="stopped_monitoring_cell_information">Arrêt du monitoring des Cellules.</string>
     <string name="tracking_cell_information">Tracking des Cellules.</string>
     <string name="stopped_tracking_cell_information">Arrêt du tracking des Cellules.</string>
-    <string name="only_one_api_per_day">Une seule demande de clé d\'API est possible par 24h!\nEssayez plus tard.</string>
+    <string name="only_one_key_per_day">Une seule demande de clé d\'API est possible par 24h!\nEssayez plus tard.</string>
     <string name="cell_id_doesnt_exist_in_db">L\'ID de la cellule n\'existe pas dans la base de donnée!</string>
     <string name="hostile_service_area_changing_lac_detected">Zone Hostile : Changement de LAC Détecté!</string>
     <string name="femtocell_detection_active">Détection des FemtoCellules Activé.</string>
@@ -244,11 +238,10 @@
     <string name="status_idle">Statut: Inactif.</string>
     <string name="status_good">Statut: Bon. Aucune Menace Détectée.</string>
     <string name="alert_threat_detected">ALERTE : menace Détectée!</string>
-    <string name="aletr_femtocell_connection_detected">ALERTE: FemtoCellule Détectée!</string>
+    <string name="alert_femtocell_connection_detected">ALERTE: FemtoCellule Détectée!</string>
     <string name="alert_silent_sms_detected">ALERTE: SMS Silencieux (Type-0) Détecté!</string>
     <string name="alert_silent_wap_sms_detected">ALERTE: SMS Wap Push Détecté!</string>
-	<string name="alert_silent_voice_sms_detected">ALERTE: SMS de contrôle de messagerie vocale (MWI) Détecté!</string>
-+   
+    <string name="alert_silent_voice_sms_detected">ALERTE: SMS de contrôle de messagerie vocale (MWI) Détecté!</string>
     <string name="femtocell_only_on_cdma_devices">AIMSICD ne peut détecter les connexions FemtoCellules que sur les appareils CDMA.</string>
     <string name="service_state_changed">État du service changé !</string>
     <string name="stopped_tracking_femtocell">: Arrêt du tracking des FemtoCellules.</string>
@@ -274,7 +267,7 @@
     <string name="refreshing_display">Rafraîchissement de l\'écran</string>
     <string name="unable_to_acquire_root_access">Impossible d\'obtenir l\'accès ROOT.\nL\'injection de commandes AT à besoin d\'un accès terminal en tant que ROOT.\nVéréfiez que votre téléphone est rooté et réessayez.</string>
     <string name="unable_to_detect_busybox">Busybox non trouvé.\nL\'injection de commandes AT a besoin de Busybox pour fonctionner correctement.\nVéréfiez que votre appareil possède Busybox et ressayez.</string>
-    <string name="unknown_error_trying_to_acquire_serial_device">Une erreur inconnue  est survenu lors de l\'accès au périphérique Série.\nVéréfiez les logs et postez les erreurs sur Github ou sur\nXDA (les liens vers ces 2 sites web se trouvent dans la section\n"À propos" de cette application.</string>
+    <string name="unknown_error_trying_to_acquire_serial_device">Une erreur inconnue  est survenu lors de l\'accès au périphérique Série.\nVéréfiez les logs et postez les erreurs sur Github.</string>
     <string name="getting_ocid_api_key">Obtention d\'une clé de l\'API d\'OpenCellID&#8230;</string>
     <string name="unable_to_create_map">Impossible de créer la carte!</string>
     <string name="describe_the_problem_you_had">ATTENTION! Veuillez décrire le problème que vous avez (en anglais !), avant de nous envoyer ces logs. PAS D\'AIDE SANS DESCRIPTION PRÉCISE!\n</string>
@@ -308,9 +301,9 @@
     <string name="typezero_title">ATTENTION!</string>
     <string name="typezero_header">SMS Type-0 Détecté</string>
     <string name="typezero_data">SMS silencieux (Type-0) Détecté!\n\nDétails: Voir la Base de Données.\n\nSi vous voulez que ce SMS soit analysé par nos développeurs, envoyez les logs à travers le menu de Débugging.</string>
-	<string name="typevoice_title">ATTENTION!</string>
-	<string name="typevoice_header">SMS MWI Détecté</string>
-	<string name="typevoice_data">SMS de contrôle de la messagerie vocale (MWI) Détecté!\n\nDétails: Voir la Base de Données.\n\nSi vous voulez que ce SMS soit analysé par nos développeurs, envoyez les logs à travers le menu de Débugging.</string>
+    <string name="typevoice_title">ATTENTION!</string>
+    <string name="typevoice_header">SMS MWI Détecté</string>
+    <string name="typevoice_data">SMS de contrôle de la messagerie vocale (MWI) Détecté!\n\nDétails: Voir la Base de Données.\n\nSi vous voulez que ce SMS soit analysé par nos développeurs, envoyez les logs à travers le menu de Débugging.</string>
     <string name="typewap_header">SMS Wap Push Détecté</string>
     <string name="typewap_data">Message SMS Wap Push Détecté!\n\nDétails: Voir la Base de Données.\n\nSi vous voulez que ce SMS soit analysé par nos développeurs, envoyez les logs à travers le menu de Débugging.</string>
 
@@ -319,7 +312,7 @@
     <string name="help_main_current_threat_level">Niveau de menace AIMSICD, cellules aux alentours, méthode de chiffrement utilisé.</string>
     <string name="help_main_phone_sim_details">Détail du fournisseur de la carte SIM, IMEI, TMSI.</string>
     <string name="help_main_acd">Affiche une comparaison détaillée des cellules connectées, avec les données (si il y en a)trouvées par OpenCellID, et surligne les différences.</string>
-	<string name="help_main_database_viewer">Voir les différentes Tables de la Base de Données.</string>
+    <string name="help_main_database_viewer">Voir les différentes Tables de la Base de Données.</string>
     <string name="help_main_antenna_map_view">Carte des antennes à proximité.</string>
     <string name="help_main_at_command_interface">Interface permettant d\'envoyer des commandes AT au Baseband (nécessite le ROOT).</string>
 
@@ -393,4 +386,4 @@
         <item>@string/timeout_spinner_10_min</item>
     </string-array>
 
-</resources>
+</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values-pl/translatable_strings.xml b/app/src/main/res/values-pl/translatable_strings.xml
index bf2e5d425..a3bd56af8 100644
--- a/app/src/main/res/values-pl/translatable_strings.xml
+++ b/app/src/main/res/values-pl/translatable_strings.xml
@@ -1,263 +1,362 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
-  
-    <string name="about_aimsicd">O aplikacji</string>
-    <string name="about_changelog">Lista zmian</string>
-    <string name="about_credits">Twórcy</string>
-    <string name="about_disclaimer">Ostrzeżenie</string>
-    <string name="about_github">AIMSICD na Githubie</string>
-    <string name="about_contribute">CONTRIBUTE</string>
-    <string name="about_license">Licencja</string>
-    <string name="app_version">Wersja:&#160;</string>
-    <string name="btn_clear_logs">Wyczyść</string>
-    <string name="btn_copy_to_clipboard">Kopiuj</string>
-    <string name="at_command_title">Interface komend AT</string>
+
+    <!-- Drawer -->
+    <string name="tracking">Śledzenie</string>
+    <string name="device_info">Szczegóły telefonu/SIM</string>
+    <string name="map_view">Widok mapy</string>
+    <string name="db_viewer">Podgląd bazy danych</string>
+    <string name="quit">Wyjście</string>
+    <string name="text_ok">OK</string>
+    <string name="text_cancel">Anuluj</string>
+    <string name="text_agree">Zgadzam się</string>
+    <string name="text_disagree">Nie zgadzam się</string>
+
+    <!-- DISCLAIMER -->
+    <string name="disclaimer_title">DISCLAIMER</string>
+    <string name="disclaimer">By using AIMSICD you have understood and agree that AIMSICD is an experimental
+        and informative Android application that can fail to detect surveillance and
+        tracking for many reasons. You also understand that it can be circumvented or
+        defeated by other means, not yet understood to the developers. Thus you also
+        agree and understand that the developers and companies related to this free
+        product, can in no way be held responsible for any results or outcome,
+        depending on the use of this application.
+    </string>
+
+
+    <!-- MENU -->
+    <string name="toggle_attack_detection">Wykrywanie przełącz Atak</string>
+    <string name="toggle_cell_tracking">Przełącz Śledzenie komórki</string>
     <string name="backup_database">Kopia zapasowa bazy danych</string>
-    <string name="about_releases">Wydania</string>
-    <string name="about_wiki">Dokumentacja (WIKI)</string>
-    <string name="aimsicd_about_info3">Projekt na Android pozwalający wykrywać fałszywe stacje bazowe (IMSI-catchery)</string>
-    <string name="btn_start_logs">Rozpocznij</string>
-    <string name="btn_stop_logs">Zakończ</string>
-    <string name="button_refresh">Odśwież</string>
-    <string name="cell_id_label">CID:</string>
-    <string name="cell_info_title">Informacje o komórce</string>
-    <string name="cell_lookup">Wszystkie informacje o obecnej komórce</string>
-    <string name="ciphering_indicator_title">Wskaźnik szyfrowania</string>
     <string name="clear_database">Wyczyść bazę danych</string>
-    
-    <!-- Need to translate -->
     <string name="clear_database_question">All data will be deleted.\nAre you sure?</string>
-    <string name="command_hint">Wpisz komendę AT tutaj</string>
-    <string name="data_activity">Aktywność bazy danych</string>
-    <string name="data_status">Status danych</string>
-    <string name="database_export_successful">Eksport powiódł się</string>
-    <string name="db_viewer">Podgląd bazy danych</string>
-    <string name="device_imei">IMEI:</string>
-    <string name="device_info">Szczegóły telefonu/SIM</string>
-    <string name="device_info_title">Informacje o urządzeniu</string>
-    <string name="device_type">Rodzaj telefonu</string>
-    <string name="device_version">Wersja RIL:</string>
-    <string name="disclaimer">Rozumiem, że AIMSICD jest aplikacją eksperymentalną</string>
-    <string name="execute_at">Wykonaj</string>
-    <string name="get_opencellid">Pobierz dane lokalnej stacji</string>
-    <string name="mcc_label">MCC:</string>
-    <string name="mnc_label">MNC:</string>
-    <string name="neighbouring_cells_num_title">Razem:</string>
-    <string name="neighbouring_cells_title">Sąsiednie komórki</string>
-    <string name="network_cellid">CID:</string>
-    <string name="network_lac">LAC:</string>
-    <string name="network_sysid">ID systemu:</string>
-    <string name="network_type">Typ:</string>
-    <string name="pc_label">PC:</string>
-    <string name="pref_autostart_title">Uruchamiaj automatycznie</string>
-    <string name="pref_autostart_summ">Uruchamiaj po włączeniu systemu </string>
-    <string name="pref_refresh_automatic">Automatycznie</string>
-    <string name="pref_ui_icons_title">Ikony stanu</string>
+    <string name="restore_database">Odzyskaj bazę danych</string>
     <string name="preferences">Ustawienia</string>
-    <string name="quit">Wyjście</string>
-    <string name="response_label">Odpowiedź:</string>
-    <string name="samples_label">Próbki:</string>
+    <string name="press_once_again_to_exit">Wciśnij ponownie by wyjść.</string>
+    <string name="cell_lookup">Wszystkie informacje o obecnej komórce</string>
     <string name="send_logs">Debugging</string>
-    <string name="text_agree">Zgadzam się</string>
-    <string name="text_cancel">Anuluj</string>
-    <string name="text_disagree">Nie zgadzam się</string>
-    <string name="text_ok">OK</string>
-    <string name="timeout_spinner_10_min">10 min</string>
-    <string name="timeout_spinner_10_sec">10 sec</string>
-    <string name="timeout_spinner_20_sec">20 sec</string>
-    <string name="timeout_spinner_2_sec">2 sec</string>
-    <string name="timeout_spinner_30_sec">30 sec</string>
-    <string name="timeout_spinner_5_sec">5 sec</string>
-    <string name="timeout_spinner_title">Time out:</string>
-    <string name="timeout_spinner_prompt">Wybierz czas oczekiwania na odpowiedź</string>
-    <string name="ui_icon_flat">Płaskie</string>
-    <string name="title_debug_logs">Logi</string>
-    <string name="title_ocid_key">Klucz API OpenCellID</string>
-    <string name="network_roaming">Roaming:</string>
-    <string name="network_psc">PCS:</string>
-    <string name="network_netid">ID sieci:</string>
-    <string name="network_name">Nazwa dostawcy:</string>
-    <string name="network_lte_timing_advance">TA (LTE):</string>
-    <string name="network_info">Informacje o sieci</string>
-    <string name="network_code">Kod dostawcy:</string>
-    <string name="network_baseid">ID stacji bazowej:</string>
-    <string name="msg_copied_to_clipboard">Skopiowano logi do schowka</string>
-    <string name="map_view">Widok mapy</string>
     <string name="no_network_connection_title">Brak połączenia z Internetem</string>
-    <string name="ocid_api_error">Błąd pobierania klucza:</string>
-    <string name="ocid_api_success">Zapisano nowy klucz</string>
-    <string name="open_cell_id_label">Dane OpenCellID</string>
+    <string name="no_network_connection_message">Nie da się pobrać danych z OpenCellID bez połączenia Internetowego. Proszę włączyć połączenie danych!</string>
+
+    <!-- MAP VIEWER -->
+    <string name="get_opencellid">Pobierz dane lokalnej stacji</string>
+
+    <!-- LAYOUT -->
+    <string name="device_info_title">Informacje o urządzeniu</string>
+    <string name="sim_info_title">Informacje o SIM</string>
+    <string name="network_info">Informacje o sieci</string>
+    <string name="cell_info_title">Informacje o komórce</string>
+    <string name="neighbouring_cells_title">Sąsiednie komórki</string>
+    <string name="ciphering_indicator_title">Wskaźnik szyfrowania</string>
+    <string name="neighbouring_cells_num_title">Razem:</string>
     <string name="sim_country">Kraj:</string>
     <string name="sim_operator_id">ID operatora:</string>
-    <string name="sim_info_title">Informacje o SIM</string>
-    <string name="sim_imsi">IMSI:</string>
     <string name="sim_operator_name">Nazwa operatora:</string>
+    <string name="sim_imsi">IMSI:</string>
     <string name="sim_serial">Numer seryjny:</string>
-    <string name="message_request_api_key">Wybierz OK by pobrać klucz API z OpenCellID.org. Pozwoli Ci to na pobranie danych i wyświetlanie ich na mapie, oraz na wysyłanie zebranych danych. Jeśli nie wyślesz żadanych danych w ciągu 20dni, Twój klucz może zostać zdezaktywowany.</string>
+    <string name="device_type">Rodzaj telefonu:</string>
+    <string name="device_imei">IMEI:</string>
+    <string name="device_version">Wersja RIL:</string>
+    <string name="network_name">Nazwa dostawcy:</string>
+    <string name="network_code">Kod dostawcy:</string>
+    <string name="network_type">Typ:</string>
+    <string name="network_lac">LAC:</string>
+    <string name="network_cellid">CID:</string>
+    <string name="data_activity">Aktywność bazy danych:</string>
+    <string name="data_status">Status danych:</string>
+    <string name="network_roaming">Roaming:</string>
+    <string name="network_lte_timing_advance">TA (LTE):</string>
+    <string name="button_refresh">Odśwież</string>
+    <string name="drawer_open">Otwórz menu</string>
+    <string name="drawer_close">Zamknij menu</string>
+    <string name="network_psc">PSC:</string>
+
+    <!-- Upload BTS to OpenCellID -->
+    <string name="upload_bts">Wyślij dane o lokalnych komórkach</string>
+
+    <!-- ABOUT LAYOUT -->
+    <string name="about_aimsicd">O AIMSICD</string>
+    <string name="app_version">Wersja:&#160;</string>
+    <string name="aimsicd_about_info3">Projekt na Android pozwalający wykrywać fałszywe stacje bazowe (IMSI-catchery) w sieci GSM/UMTS.</string>
+    <string name="about_github">AIMSICD na Githubie</string>
+    <string name="about_wiki">Dokumentacja (WIKI)</string>
+    <string name="about_contribute">PRZYCZYNIAJĄ</string>
+    <string name="about_disclaimer">ZASTRZEŻENIE</string>
+    <string name="about_releases">WYDANIA</string>
+    <string name="about_changelog">LISTA ZMIAN</string>
+    <string name="about_license">LICENCJA</string>
+    <string name="about_credits">TWÓRCY</string>
+    <string name="about_desc_icon_idle">Idle / Loading.</string>
+    <string name="about_desc_icon_active_tracking_near">Active tracking close to you!</string>
+    <string name="about_desc_icon_ok">Wszystko OK.</string>
+    <string name="about_desc_icon_tracked_down">Jesteś śledzony!</string>
+    <string name="about_desc_icon_insecure_area">Insecure Service Area. Leave it!</string>
+    <string name="about_desc_icon_run">RUN! Handset manipulated!</string>
+    <string name="about_desc_icon_title">Kliknij na ikonę by uzyskać więcej informacji:</string>
+
+
+    <!-- CDMA LAYOUT -->
+    <string name="network_netid">ID sieci:</string>
+    <string name="network_sysid">ID systemu:</string>
+    <string name="network_baseid">ID stacji bazowej:</string>
+
+    <!-- LOCATION HELPER -->
     <string name="location_error_title">Serwis lokalizacji wyłączony</string>
-    <string name="lng_label">Wys.:</string>
-    <string name="lat_label">Szer.:</string>
-    <string name="lac_label">LAC:</string>
     <string name="location_error_message">Nie można śledzić komórek bez włączonego GPSu. Włączyć teraz?</string>
-    <string name="no_network_connection_message">Nie da się pobrać danych z OpenCellID bez połączenia Internetowego. Proszę włączyć połączenie danych.</string>
-    <string name="pref_enable_cell_monitoring_title">Monitorowanie komórek</string>
+
+    <!-- PREFERENCES -->
+    <string name="pref_system_title">Ustawienia systemu</string>
+    <string name="pref_autostart_title">Uruchamiaj automatycznie</string>
+    <string name="pref_autostart_summ">Uruchamiaj po włączeniu systemu</string>
+    <string name="pref_persistservice_title">Działaj w tyle</string>
+    <string name="pref_persistservice_summ">Serwis będzie uruchomiony w tle po wyjściu z aplikacji</string>
+    <string name="pref_protection_title">Ustawienia ochrony</string>
     <string name="pref_enable_cell_title">Śledzenie komórek</string>
     <string name="pref_enable_cell_summ">Włącz automatyczne śledzenie komórek</string>
-    <string name="pref_enable_cell_monitoring_summ">Włącz automatyczne monitorowanie komórek</string>
-    <string name="pref_femto_action_title">Ochrona Femtocell</string>
     <string name="pref_femto_title">Wykrywanie Femtocell</string>
-    <string name="pref_map_title">Ustawienia widoku mapy</string>
-    <string name="pref_map_type_summ">Wyświetl mapę w różnych stylach</string>
-    <string name="pref_map_type_title">Rodzaj mapy</string>
+    <string name="pref_femto_summ">(obecnie TYLKO dla telefonów z CDMA)</string>
+    <string name="pref_femto_action_title">Ochrona Femtocell</string>
+    <string name="pref_femto_action_summ">Włacz tryb samolotowy po wykryciu Femtocell</string>
+    <string name="pref_ui_title">Ustawienia interfacu</string>
+    <string name="pref_ui_icons_title">Ikony stanu</string>
+    <string name="pref_ui_icons_summ">Wybór ikony</string>
+    <string name="pref_refresh_title">Częstotliwość odświeżania</string>
+    <string name="pref_refresh_summ">Kontroluj częstotliwość odświeżania danych\nBieżący wybór: %s</string>
+    <string name="pref_ocid_title">Ustawienia OpenCellID</string>
+    <string name="pref_ocid_key_title">Klucz API OpenCellID</string>
     <string name="pref_ocid_key_summ">Wpisz swój klucz API do OpenCellID</string>
+    <string name="pref_enable_cell_monitoring_title">Monitorowanie komórek</string>
+    <string name="pref_enable_cell_monitoring_summ">Włącz automatyczne monitorowanie komórek</string>
+    <string name="pref_request_ocid_key">Request OCID API Key</string>
     <string name="pref_ocid_requestkey_summary">Pobierz nowy klucz API dla danych OpenCellID</string>
-    <string name="pref_ocid_key_title">Klucz API OpenCellID</string>
-    <string name="pref_protection_title">Ustawienia ochrony</string>
-    <string name="pref_refresh_title">Częstotliwość odświeżania</string>
-    <string name="pref_request_ocid_key">Pobierz nowy klucz</string>
-    <string name="pref_system_title">Ustawienia systemu</string>
-    <string name="pref_ui_icons_summ">Wybór ikony</string>
-    <string name="pref_ui_title">Ustawienia interfacu</string>
-    <string name="press_once_again_to_exit">Wciśnij ponownie by wyjść</string>
-    <string name="restore_database">Odzyskaj bazę danych.</string>
-    <string name="serial_device_prompt">Wybierz numer seryjny urządzenia</string>
-    <string name="sms_title">Przechwycono SilentSMS</string>
-    <string name="sms_message">Przechwycono SilentSMS!\n\nWięcej infromacji w widoku bazy danych!</string>
+
+    <!-- MAP PREFERENCES -->
+    <string name="pref_map_title">Ustawienia widoku mapy</string>
+    <string name="pref_map_type_title">Rodzaj mapy</string>
+    <string name="pref_map_type_summ">Wyświetl mapę w różnych stylach</string>
+    
+    <!-- MAP INFOWINDOW -->
+    <string name="cell_id_label">CID: </string>
+    <string name="lac_label">LAC: </string>
+    <string name="mcc_label">MCC: </string>
+    <string name="mnc_label">MNC: </string>
+    <string name="pc_label">PC: </string>
+    <string name="samples_label">Próbki: </string>
+    <string name="open_cell_id_label">Dane OpenCellID</string>
+    <string name="lat_label">Szer.: </string>
+    <string name="lng_label">Wys.: </string>
+
+    <!-- Database Viewer -->
     <string name="table_names_prompt">Wybierz tabelę</string>
-    <string name="table_contains_no_data">Brak danych do wyświetlenia</string>
-    <string name="upload_bts">Wyślij dane o lokalnych komórkach</string>
+    <string-array name="table_names">
+        <item>@string/unique_bts_data</item>
+        <item>@string/bts_measurements</item>
+        <item>@string/imported_ocid_data</item>
+        <item>@string/default_mmc_locations</item>
+        <item>@string/silent_sms</item>
+        <item>@string/measured_signal_strengths</item>
+        <item>@string/eventlog</item>
+    </string-array>
+    <string name="database_export_successful">Eksport powiódł się</string>
+
+    <!-- AT Command Interface  -->
+    <string name="at_command_title">Interface komend AT</string>
+    <string name="response_label">Odpowiedź:</string>
+    <string name="execute_at">Wykonaj</string>
     <string name="serial_device_title">Obecny numer seryjny urządznia:</string>
-    <string name="pref_refresh_summ">Kontroluj częstotliwość odświeżania danych\nBieżący wybór: %s</string>
-    <string name="tracking">Śledzenie</string>
-    <string name="disclaimer_title">Uwagi</string>
-    <string name="main">Główne</string>
-    <string name="pref_ocid_title">Ustawienia OpenCellID</string>
-    <string name="pref_persistservice_summ">Serwis będzie uruchomiony w tle po wyjściu z aplikacji</string>
-    <string name="pref_persistservice_title">Działaj w tyle</string>
+    <string name="serial_device_prompt">Wybierz numer seryjny urządzenia</string>
     <string name="serial_device_spinner_title">Wykryte urządzenia:</string>
-    <string name="settings">Ustawienia</string>
-    <string name="pref_femto_summ">(obecnie TYLKO dla telefonów z CDMA)</string>
-    <string name="pref_femto_action_summ">Włacz tryb samolotowy po wykryciu Femtocell</string>
-    <string name="title_activity_about_pop_up">Szczegółowe wyjaśnienie</string>
-    <string name="drawer_close">Zamknij menu</string>
-    <string name="drawer_open">Otwórz menu</string>
+    <string name="timeout_spinner_title">Timeout:</string>
+    <string name="timeout_spinner_prompt">Wybierz czas oczekiwania na odpowiedź</string>
+    <string name="command_hint">Wpisz komendę AT tutaj.</string>
+
+    <!-- SILENT SMS FRAGMENT -->
+    <string name="sms_title">Przechwycono SilentSMS</string>
+    <string name="sms_message">Przechwycono SilentSMS!\n\nWięcej infromacji w widoku bazy danych.</string>
+    <string name="table_contains_no_data">Brak danych do wyświetlenia.</string>
+
+    <!-- Request OpenCellID Key -->
+    <string name="title_ocid_key">Klucz API OpenCellID</string>
+    <string name="message_request_api_key">Wybierz OK by pobrać klucz API z OpenCellID.org. Pozwoli Ci to na pobranie danych i wyświetlanie ich na mapie, oraz na wysyłanie zebranych danych. Jeśli nie wyślesz żadanych danych w ciągu 20dni, Twój klucz może zostać zdezaktywowany.</string>
+    <string name="ocid_api_error">Błąd pobierania klucza: </string>
+    <string name="ocid_api_success">Zapisano nowy klucz</string>
+
+    <!-- Debug logs -->
+    <string name="title_debug_logs">Logi</string>
+    <string name="btn_clear_logs">Wyczyść</string>
+    <string name="btn_copy_to_clipboard">Kopiuj</string>
+    <string name="msg_copied_to_clipboard">Skopiowano logi do schowka</string>
+    <string name="btn_stop_logs">Zakończ</string>
+    <string name="btn_start_logs">Rozpocznij</string>
+
+    <!-- Detailed Info Strings -->
+    <string name="title_activity_about_pop_up">SZCZEGÓŁOWY OPIS</string>
     <string name="detail_info_idle">Aplikacja jest bezczynna. Włącz śledzenie w menu.</string>
     <string name="detail_info_normal">Nie wykryto żadnych zagrożeń.</string>
-    <string name="detail_info_run">Wykryto manipulację: ktoś próbuje zdalnie manipulować Twoim telefonem. Zniszcz lub sprzedaj telefon!</string>
     <string name="detail_info_medium">Ta okolica nie jest bezpieczna: wykryto co najmniej jedną nieznaną stację bazową lub używane jest szyfrowanie słabsze niż A5/3. Wszystkie wiadomości i rozmowy w tym rejonie mogą być przechwycone.</string>
-    <string name="detail_info_danger">Wykryto śledzenie: W pobliżu jest aktywny FBTS lub IMSIC, uniemożliwiając bezpieczne, szyfrowane połączenie z dostawcą sieci. Pozbądź się swojego telefou, zniszcz kartę SIM i zgłoś ją jako zagubioną!</string>
     <string name="detail_info_high">Wykryto wrogą aktywność: IMIC lub FBTS aktywnie śledzi użytkowników! Wyjmij baterię z telefoni i unikaj tego miejsca!</string>
-    <string name="monitoring_cell_information">Monitorowanie informacji komórek</string>
-    <string name="stopped_monitoring_cell_information">Wstrzymano monitorowanie komórek</string>
-    <string name="tracking_cell_information">Śledzenie informacji komórek</string>
-    <string name="stopped_tracking_cell_information">Wstrzymano śledzenie komórek</string>
-    <string name="only_one_api_per_day">Możesz pobrać tylko jeden klucz OCID na dobę.\nSpróbuj później</string>
-    <string name="cell_monitoring_active">Monitoring komórek aktywny</string>
+    <string name="detail_info_danger">Wykryto śledzenie: W pobliżu jest aktywny FBTS lub IMSIC, uniemożliwiając bezpieczne, szyfrowane połączenie z dostawcą sieci. Pozbądź się swojego telefou, zniszcz kartę SIM i zgłoś ją jako zagubioną!</string>
+    <string name="detail_info_run">Wykryto manipulację: ktoś próbuje zdalnie manipulować Twoim telefonem. Zniszcz lub sprzedaj telefon!</string>
+    <string name="open_cell_id_button_cancel">Anuluj</string>
+    <string name="open_cell_id_button_ok">OK</string>
+
+    <!-- UI Icon Preferences -->
+    <string name="ui_icon_flat">Płaskie</string>
+    <string name="ui_icon_sense">Sense</string>
+    <string name="ui_icon_white">Białe</string>
+    <string name="map_type_terrain">Teren</string>
+    <string name="map_type_normal">Zwyczajna</string>
+    <string name="pref_refresh_manual">Ręcznie</string>
+    <string name="pref_refresh_automatic">Automatycznie</string>
+    <string name="pref_refresh_2s">2 sek</string>
+    <string name="pref_refresh_5s">5 sek</string>
+    <string name="pref_refresh_10s">10 sek</string>
+    <string name="pref_refresh_25s">25 sek</string>
+    <string name="pref_refresh_45s">45 sek</string>
+    <string name="pref_refresh_1_min">1 min</string>
+    <string name="pref_refresh_5_min">5 min</string>
+    <string name="timeout_spinner_2_sec">2 sek</string>
+    <string name="timeout_spinner_5_sec">5 sek</string>
+    <string name="timeout_spinner_10_sec">10 sek</string>
+    <string name="timeout_spinner_20_sec">20 sek</string>
+    <string name="timeout_spinner_30_sec">30 sek</string>
+    <string name="timeout_spinner_10_min">10 min</string>
+    <string name="main">Główne</string>
+    <string name="settings">Ustawienia</string>
+    <string name="application">Aplikacja</string>
+    <string name="monitoring_cell_information">Monitorowanie informacji komórek.</string>
+    <string name="stopped_monitoring_cell_information">Wstrzymano monitorowanie komórek.</string>
+    <string name="tracking_cell_information">Śledzenie informacji komórek.</string>
+    <string name="stopped_tracking_cell_information">Wstrzymano śledzenie komórek.</string>
+    <string name="only_one_key_per_day">Możesz pobrać tylko jeden klucz OCID na dobę.\nSpróbuj później.</string>
+    <string name="cell_id_doesnt_exist_in_db">ID komórki nie istnieje w bazie danych OCID!</string>
+    <string name="hostile_service_area_changing_lac_detected">Niezabezpieczona okolica: LAC został zmieniony!</string>
+    <string name="femtocell_detection_active">Wykrywanie FemtoCell aktywne.</string>
+    <string name="cell_tracking_active">Śledzenie komórek aktywne.</string>
+    <string name="cell_monitoring_active">Monitoring komórek aktywny.</string>
     <string name="phone_type">Rodzaj telefonu</string>
     <string name="status_idle">Oczekuję&#8230;</string>
     <string name="status_good">Brak zagrożeń. Wszystko OK.</string>
     <string name="alert_threat_detected">UWAGA: Wykryto zagrożenie!</string>
-    <string name="aletr_femtocell_connection_detected">UWAGA: Wykryto połączenie FemtoCell!</string>
+    <string name="alert_femtocell_connection_detected">UWAGA: Wykryto połączenie FemtoCell!</string>
     <string name="alert_silent_sms_detected">UWAGA: Wykryto SilentSMS (Type-0)!</string>
-    <string name="femtocell_only_on_cdma_devices">Aplikacja potrafi wykrywać FemtoCell tylko przez połączenie CDMA</string>
-    <string name="service_state_changed">Zmieniony został stan usługi</string>
-    <string name="stopped_tracking_femtocell">Wstrzymano śledzenie połączeń FemtoCell</string>
+    <string name="alert_silent_voice_sms_detected">ALERT: Silent Voice SMS detected!</string>
+    <string name="alert_silent_wap_sms_detected">ALERT: Wap Push SMS detected!</string>
+    <string name="femtocell_only_on_cdma_devices">Aplikacja potrafi wykrywać FemtoCell tylko przez połączenie CDMA.</string>
+    <string name="service_state_changed">Zmieniony został stan usługi!</string>
+    <string name="stopped_tracking_femtocell">: Wstrzymano śledzenie połączeń FemtoCell.</string>
     <string name="alert_femtocell_tracking_detected">UWAGA! Wykryto śledzenie FemtoCell!</string>
-    <string name="femtocell_detection_active">Wykrywanie FemtoCell aktywne</string>
-    <string name="cell_tracking_active">Śledzenie komórek aktywne</string>
-    <string name="cell_id_doesnt_exist_in_db">ID komórki nie istnieje w bazie danych OCID</string>
-    <string name="application">Aplikacja</string>
-    <string name="hostile_service_area_changing_lac_detected">Niezabezpieczona okolica: LAC został zmieniony</string>
     <string name="refreshing_every">Odświeżanie co</string>
-    <string name="refreshing_now">Odświeżam</string>
-    <string name="seconds">sekund</string>
+    <string name="refreshing_now">Odświeżam&#8230;</string>
+    <string name="seconds">sekund.</string>
+    <string name="contacting_opencellid_for_data">Łączenie z OpenCellID by uzyskać potrzebne dane&#8230;\nMoże to potrwać nawet minutę.</string>
     <string name="unable_to_determine_last_location">Nie udalo się określić Twojej ostatniej lokalizacji. Włącz lokalizację w ustawieniach telefonu.</string>
-    <string name="no_tracked_locations_found">Brak zapisanych lokalizacji do pokazania</string>
-    <string name="contacting_opencellid_for_data">Łączenie z OpenCellID by uzyskać potrzebne dane.\nTo może zająć chwilę&#8230;</string>
-
-    <string name="toggle_attack_detection">Wykrywanie przełącz Atak</string>
-    <string name="toggle_cell_tracking">Przełącz Śledzenie komórki</string>
+    <string name="no_tracked_locations_found">Brak zapisanych lokalizacji do pokazania.</string>
+    <string name="no_data_for_publishing">Brak nowych danych do wysłania.</string>
     <string name="download_error">Błąd pobierania:</string>
-    <string name="error_backing_up_data">Błąd tworzenia kopii zapasowej.</string>
-    <string name="error_restoring_database">Błąd przywracania bazy danych.</string>
-    <string name="status">Status:</string>
-    <string name="run">UCIEKAJ!</string>
+    <string name="opencellid_data_successfully_received">Poprawnie odebrano dane.</string>
+    <string name="error_retrieving_opencellid_data">Błąd uzyskiwania danych z OpenCellID.\nSprawdź swoje połączenie internetowe!</string>
+    <string name="opencellid_data_successfully_received_markers_updated">Poprawnie odebrano dane. Punkty na mapie zostały zaktualizowane.</string>
+    <string name="uploaded_bts_data_successfully">Dane do OpenCellID zostały przesłane.</string>
+    <string name="error_uploading_bts_data">Błąd wysyłania danych do OpenCellID!</string>
     <string name="restore_database_completed">Odzyskano bazę danych.</string>
+    <string name="error_restoring_database">Błąd przywracania bazy danych.</string>
+    <string name="database_backup_successfully_saved_to">Kopia zapasowa zapisana do:</string>
+    <string name="error_backing_up_data">Błąd tworzenia kopii zapasowej.</string>
+    <string name="no_opencellid_key_detected">Brak klucza API OpenCellID. Musisz najpierw wpisać lub pobrać swój klucz.</string>
     <string name="refreshing_display">Odświeżanie ekranu</string>
+    <string name="unable_to_acquire_root_access">Nie udało się usyskać praw ROOTa. Interface komend AT wymaga praw ROOTa. Sprawdź swoje urządzenie i spróbuj ponownie.</string>
+    <string name="unable_to_detect_busybox">Nie udało się odnaleźć BusyBox na Twoim urządzeniu. Interface komend AT wymaga BusyBoxa! Sprawdź swoje urządzenie i spróbuj ponownie.</string>
+    <string name="unknown_error_trying_to_acquire_serial_device">Wystąpił nieznany bład przy próbie uzyskania Serial Device. Prosimy o sprawdzenie logów i przesłanie ich do nas na Github. Link do Githuba znajedziesz w sekcji \'O aplikacji\'.</string>
+    <string name="unknown_error_initialising_at_command_injector">AWystąpił nieznany błąd przy uruchamianiu inteface komend AT. Prosimy o sprawdzenie logów i przesłanie ich do nas na Github. Link do Githuba znajedziesz w sekcji \'O aplikacji\'.</string>
+    <string name="getting_ocid_api_key">Pobieranie klucza OpenCellID&#8230;</string>
+    <string name="unable_to_create_map">Nie powiodło się tworzenie mapy!</string>
+    <string name="describe_the_problem_you_had">W celu uzyskania pomocy opisz swój problem. Problemy bez opisu są automatycznie ignorowane!\n</string>
+    <string name="status">Status:</string>
+    <string name="idle">OCZEKUJE</string>
     <string name="normal">ZWYCZAJNY</string>
-    <string name="no_opencellid_key_detected">Brak klucza API OpenCellID. Musisz najpierw wpisać lub pobrać swój klucz.</string>
-    <string name="no_data_for_publishing">Brak nowych danych do wysłania.</string>
-    <string name="idle">Oczekuje</string>
-    <string name="high">Wysoki</string>
-    <string name="help_settings_restore_db">Wczytaj bazę danych z karty</string>
-    <string name="help_settings_reset_db">Wyczyść wszystkie tabele bazy danych</string>
-    <string name="getting_ocid_api_key">Pobieranie klucza OpenCellID</string>
-    <string name="help_app_about">O nas i kogo wspieramy</string>
-    <string name="help_app_add_get_ocid_api_key">Uzyskaj klucz API do OpenCellID by pobierać i wysyłać dane.</string>
-    <string name="help_main_acd">Pokaż szczegółowe porównanie obecnie połączonych komórek używając danych z OpenCellID. Podświetla różnice.</string>
-    <string name="help_main_antenna_map_view">Mapa pokazująca pobliskie nadajniki.</string>
-    <string name="help_main_at_command_interface">Interface komend AT pozwalający wysyłać komendy AT do BS.</string>
+    <string name="medium">ŚREDNIE</string>
+    <string name="high">WYSOKI</string>
+    <string name="danger">ZAGROŻENIE</string>
+    <string name="run">UCIEKAJ!</string>
+
+    <!-- Advanced User Settings: SMS Detection Strings -->
+    <string name="adv_user_info">This menu is for advanced users only!\n\nPlease do not insert random strings because it will cause detection to go out of control.\n\nTo add a string choose the SMS type from the dropdown menu, type your detection string and press insert.\n\nTo delete from database long press on list view.</string>
+    
+    <!-- Advanced User Settings: Delete Detected SMS -->
+    <string name="adv_user_sms_info">This menu is for advanced users only!\nTo delete a detected SMS long press it in listview.</string>
+    <string name="title_activity_advanced_user">Delete Detected SMS</string>
+
+    <string name="adv_user_pref_header">Advanced User Settings</string>
+    <string name="adv_user_pref_launch">Detection Strings</string>
+    <string name="adv_user_pref_sms_launch">Delete SMS</string>
+    <string name="adv_user_pref_summary">Insert and delete detection strings</string>
+    <string name="adv_user_pref_sms_summary">Delete Detected SMS</string>
+   
+    <!-- Advanced User Settings: Enable SMS Detection -->
+    <string name="adv_user_root_title">Enable SMS Detection</string>
+    <string name="adv_user_root_sum">Root is required to enable SMS detection</string>
+
+    <!-- Detected SMS string for custom popup -->
+    <string name="detection_strings">Detection Strings</string>
+    <string name="typezero_title">ATTENTION!</string>
+    <string name="typezero_header">Type0 SMS Detected</string>
+    <string name="typezero_data">Silent SMS Message detected!\n\nDetails: See Database Viewer.\n\nIf you want this data to be analysed by our developers, send the logfiles through the Debugging menu.</string>
+    <string name="typevoice_title">ATTENTION!</string>
+    <string name="typevoice_header">Silent Voice Detected</string>
+    <string name="typevoice_data">Silent Voice SMS Message detected!\n\nDetails: See Database Viewer.\n\nIf you want this data to be analysed by our developers, send the logfiles through the Debugging menu.</string>
+    <string name="typewap_header">Wap Push Detected</string>
+    <string name="typewap_data">Wap Push SMS Message has been detected!\n\nDetails are available through the Database Viewer.\n\nIf you want this data to be analysed by our devs, enter the Debugging menu and send the logfiles via E-Mail.</string>
+
+
+    <!-- Section Main-->
     <string name="help_main_current_threat_level">Statystyki AIMSICD, pobliskich komórek i metod szyfrowania.</string>
-    <string name="help_main_database_viewer">Pokaż tablele baz danych.</string>
     <string name="help_main_phone_sim_details">Szczegóły SIM, IMEI, TMSI.</string>
+    <string name="help_main_acd">Pokaż szczegółowe porównanie obecnie połączonych komórek używając danych z OpenCellID. Podświetla różnice.</string>
+    <string name="help_main_database_viewer">Pokaż tablele baz danych.</string>
+    <string name="help_main_antenna_map_view">Mapa pokazująca pobliskie nadajniki.</string>
+    <string name="help_main_at_command_interface">Interface komend AT pozwalający wysyłać komendy AT do BS (wymaga ROOT).</string>
+
+    <!-- Section Tracking-->
+    <string name="help_tracking_toggle_attack_detection">Rozpoczyna/zatrzymuje wykrywanie ataku i zbieranie danych do lokalnej bazy danych.</string>
+    <string name="help_tracking_toggle_cell_tracking">Zacznij śledzić komórki do wyświetlania na antenie Map Viewer i ewentualnie później przesłać do OCID.</string>
+
+    <!-- Section Settings-->
+    <string name="help_settings_preferences">Ustawienia AIMSICD, czas odświeżania i zachowanie serwisów.</string>
     <string name="help_settings_backup_db">Utwórz kopię zapasową bazy danych na karcie SD.</string>
+    <string name="help_settings_restore_db">Wczytaj bazę danych z karty.</string>
+    <string name="help_settings_reset_db">Wyczyść wszystkie tabele bazy danych.</string>
     <string name="help_settings_export_db_to_csv">Eksport z bazy danych do plików CSV.</string>
     <string name="help_settings_import_db_from_csv">Importuj do bazy danych z plików CSV.</string>
-    <string name="help_settings_preferences">Ustawienia AIMSICD, czas odświeżania i zachowanie serwisów.</string>
-    <string name="help_tracking_toggle_cell_tracking">Zacznij śledzić komórki do wyświetlania na antenie Map Viewer i ewentualnie później przesłać do OCID.</string>
-    <string name="help_tracking_toggle_attack_detection">Rozpoczyna/zatrzymuje wykrywanie ataku i zbieranie danych do lokalnej bazy danych.</string>
-    <string name="danger">ZAGROŻENIE</string>
-    <string name="database_backup_successfully_saved_to">Kopia zapasowa zapisana do:</string>
-    <string name="describe_the_problem_you_had">W celu uzyskania pomocy opisz swój problem. Problemy bez opisu są automatycznie ignorowane.</string>
-    <string name="error_retrieving_opencellid_data">Błąd uzyskiwania danych z OpenCellID.\nSprawdź swoje połączenie internetowe.</string>
-    <string name="error_uploading_bts_data">Błąd wysyłania danych do OpenCellID.</string>
-    <string name="medium">ŚREDNIE</string>
-    <string name="opencellid_data_successfully_received">Poprawnie odebrano dane.</string>
-    <string name="opencellid_data_successfully_received_markers_updated">Poprawnie odebrano dane. Punkty na mapie zostały zaktualizowane.</string>
-    <string name="unable_to_create_map">Nie powiodło się tworzenie mapy.</string>
-    <string name="unable_to_acquire_root_access">Nie udało się usyskać praw ROOTa. Interface komend AT wymaga praw ROOTa. Sprawdź swoje urządzenie i spróbuj ponownie.</string>
-    <string name="unable_to_detect_busybox">Nie udało się odnaleźć BusyBox na Twoim urządzeniu. Interface komend AT wymaga BusyBoxa! Sprawdź swoje urządzenie i spróbuj ponownie.</string>
-    <string name="unknown_error_initialising_at_command_injector">Wystąpił nieznany błąd przy uruchamianiu inteface komend AT. Prosimy o sprawdzenie logów i przesłanie ich do nas na Github. Link do Githuba znajedziesz w sekcji \'O aplikacji\'.</string>
-    <string name="unknown_error_trying_to_acquire_serial_device">Wystąpił nieznany bład przy próbie uzyskania Serial Device. Prosimy o sprawdzenie logów i przesłanie ich do nas na Github. Link do Githuba znajedziesz w sekcji \'O aplikacji\'.</string>
-    <string name="uploaded_bts_data_successfully">Dane do OpenCellID zostały przesłane.</string>
-    <string name="unable_to_restore_backup_from_previous_database_version">Nie udało się odzyskać kopii z poprzedniej wersji bazy danych.</string>
-    <string name="waiting_for_location">Oczekiwanie na lokalizację&#8230;</string>
-    <string name="default_mmc_locations">Domyślne lokalizacje MMC</string>
-    <string name="bts_measurements">Pomiary BTS</string>
-    <string name="eventlog">Logi zdarzeń</string>
-    <string name="imported_ocid_data">Importowane dane OpenCellID</string>
-    <string name="measured_signal_strengths">Pomiary siły sygnałów</string>
-    <string name="unique_bts_data">Unikalne dane BTS</string>
-    <string name="ui_icon_white">Białe</string>
-    <string name="ui_icon_sense">Sense</string>
-    <string name="silent_sms">Silent SMS</string>
-    <string name="pref_refresh_manual">Ręcznie</string>
-    <string name="pref_refresh_45s">45 sek</string>
-    <string name="pref_refresh_2s">2 sek</string>
-    <string name="pref_refresh_25s">25 sek</string>
-    <string name="pref_refresh_1_min">1 min</string>
-    <string name="pref_refresh_10s">10 sek</string>
-    <string name="pref_refresh_5_min">5 min</string>
-    <string name="pref_refresh_5s">5 sek</string>
-    <string name="map_type_normal">Zwyczajna</string>
-    <string name="map_type_terrain">Teren</string>
 
-    <string name="open_cell_id_button_cancel">Anuluj</string>
-    <string name="open_cell_id_button_ok">OK</string>
-    <string name="about_desc_icon_idle">Działanie aplikacji zostało wstrzymane.</string>
-    <string name="about_desc_icon_active_tracking_near">Wykryto śledzenie: w pobliżu aktywny jest FBTS lub IMSIC!</string>
-    <string name="about_desc_icon_ok">Wszystko OK.</string>
-    <string name="about_desc_icon_tracked_down">Jesteś śledzony!</string>
-    <string name="about_desc_icon_insecure_area">Ta okolica nie jest bezpieczna. Powinieneś się oddalić!</string>
-    <string name="about_desc_icon_run">Wykryto manipulację: ktoś próbuje zdalnie manipulować Twoim telefonem.</string>
-    <string name="about_desc_icon_title">Kliknij na ikonę by uzyskać więcej informacji.</string>
+    <!-- Section Application-->
+    <string name="help_app_add_get_ocid_api_key">Uzyskaj klucz API do OpenCellID by pobierać i wysyłać dane&#8230;</string>
+    <string name="help_app_about">O nas i kogo wspieramy.</string>
     <string name="help_app_download_local_bst">Pobierz bazę danych OCID.</string>
     <string name="help_app_upload_local_bst">Wyślij dane o lokalnych BTS do OCID.</string>
     <string name="help_app_debugging">Wczytaj i wyślij logi.</string>
     <string name="help_app_quit">Zakończ działanie aplikacji.</string>
+    <string name="waiting_for_location">Oczekiwanie na lokalizację&#8230;</string>
+    <string name="unable_to_restore_backup_from_previous_database_version">Nie udało się odzyskać kopii z poprzedniej wersji bazy danych!</string>
+    <string name="unique_bts_data">Unikalne dane BTS</string>
+    <string name="bts_measurements">Pomiary BTS</string>
+    <string name="imported_ocid_data">Importowane dane OpenCellID</string>
+    <string name="default_mmc_locations">Domyślne lokalizacje MMC</string>
+    <string name="silent_sms">Silent SMS</string>
+    <string name="eventlog">Logi zdarzeń</string>
+    <string name="measured_signal_strengths">Pomiary siły sygnałów</string>
+
     <string name="at_command_response_looking">*** Wykrywanie urządzeń AT&#8230;\n</string>
-    <string name="at_command_response_found">Wykryto:&#032;</string>""
-    <string name="at_command_response_setup_complete">*** Konfiguracja zakończona ***\n</string>""
+    <string name="at_command_response_found">Wykryto:&#032;</string>
+    <string name="at_command_response_setup_complete">*** Konfiguracja zakończona ***\n</string>
+
+    <string name="currently_connected_bts">Currently connected BTS</string>
+    <string name="well_known_encrypted_bts">Well known encrypted BTS</string>
+    <string name="unknown_or_insecure_bts">Unknown or insecure BTS</string>
+    <string name="new_or_recently_added_bts">New or recently added BTS</string>
+
+    <string name="invalid_key_try_later">Invalid OpenCellId key, try again later.</string>
+    <string name="getting_ocid_key">Getting OpenCellId API Key...</string>
 
     <string-array name="pref_ui_icons_entries">
         <item>@string/ui_icon_flat</item>
diff --git a/app/src/main/res/values-ru/translatable_strings.xml b/app/src/main/res/values-ru/translatable_strings.xml
index fab0fa1ed..7b05aadf6 100644
--- a/app/src/main/res/values-ru/translatable_strings.xml
+++ b/app/src/main/res/values-ru/translatable_strings.xml
@@ -238,7 +238,7 @@
     <string name="stopped_monitoring_cell_information">Мониторинг сотовой информации остановлен.</string>
     <string name="tracking_cell_information">Отслеживания данных сотового.</string>
     <string name="stopped_tracking_cell_information">Отслеживания данных сотового остановлена.</string>
-    <string name="only_one_api_per_day">Только один запрос нового ключа API за 24 часа!\nПожалуйста, повторите попытку позже.</string>
+    <string name="only_one_key_per_day">Только один запрос нового ключа API за 24 часа!\nПожалуйста, повторите попытку позже.</string>
     <string name="cell_id_doesnt_exist_in_db">ID соты не существует в базе данных OCID!</string>
     <string name="hostile_service_area_changing_lac_detected">Враждебная зона обслуживания: Изменение LAC обнаружено!</string>
     <string name="femtocell_detection_active">Обнаружение фемтосот активно.</string>
@@ -248,7 +248,7 @@
     <string name="status_idle">Статус: Неработающий.</string>
     <string name="status_good">Статус: Хорошо. Угроз не обнаружено.</string>
     <string name="alert_threat_detected">ТРЕВОГА: Обнаружены некоторые угрозы!</string>
-    <string name="aletr_femtocell_connection_detected">ТРЕВОГА: Обнаружено соединение с фемтосотой!</string>
+    <string name="alert_femtocell_connection_detected">ТРЕВОГА: Обнаружено соединение с фемтосотой!</string>
     <string name="alert_silent_sms_detected">ТРЕВОГА: обнаруженный бесшумная SMS (Type-0)!</string>
     <string name="femtocell_only_on_cdma_devices">AIMSICD может определять соединение с фемтосотой только на CDMA устройствах.</string>
     <string name="service_state_changed">Статус сервиса изменен!</string>
@@ -276,7 +276,7 @@
     <string name="unable_to_acquire_root_access">Невозможно получить ROOT доступ на вашем устройстве.\nДля инъекций AT-команд в терминал требуется ROOT доступ.\nПожалуйста, проверьте наличие ROOT прав на вашем устройстве и попробуйте еще раз</string>
     <string name="unable_to_detect_busybox">Невозможно обнаружить Busybox на вашем устройстве.\nДля инъекций AT-команд в терминал требуются компоненты Busybox для правильного функционирования.\nПожалуйста, проверьте, что Busybox установлен на ваше устройство  и попробуйте снова</string>
     <string name="unknown_error_trying_to_acquire_serial_device">Произошла неизвестная ошибка при попытке достижения Serial Device.\nПожалуйста, проверьте LogCat на возможные ошибки и отправьте их на Github.</string>
-    <string name="unknown_error_initialising_at_command_injector">An unknown error has occurred trying to initialise the AT Command Injector.\nPlease check your logcat for any errors and post them to Github or\nXDA, links to both of these locations can be found within the\nAbout section of the application.</string>
+    <string name="unknown_error_initialising_at_command_injector">An unknown error has occurred trying to initialise the AT Command Injector.\nPlease check your logcat for any errors and post them on our Github.</string>
     <string name="getting_ocid_api_key">Получение ключа API OpenCellID&#8230;</string>
     <string name="unable_to_create_map">Невозможно создать карту!</string>
     <string name="describe_the_problem_you_had">ВНИМАНИЕ! Пожалуйста, опишите проблему, которая у вас была, прежде, чем отправить нам эти журналы. НЕТ ПОМОЩИ БЕЗ ОПИСАНИЯ!\n</string>
diff --git a/app/src/main/res/values/translatable_strings.xml b/app/src/main/res/values/translatable_strings.xml
index 76769a25f..c98b0cebf 100644
--- a/app/src/main/res/values/translatable_strings.xml
+++ b/app/src/main/res/values/translatable_strings.xml
@@ -3,7 +3,6 @@
 
     <!-- Drawer -->
     <string name="tracking">Tracking</string>
-
     <string name="device_info">Phone/SIM Details</string>
     <string name="map_view">Antenna Map Viewer</string>
     <string name="db_viewer">Database Viewer</string>
@@ -28,20 +27,16 @@
     <!-- MENU -->
     <string name="toggle_attack_detection">Toggle Attack Detection</string>
     <string name="toggle_cell_tracking">Toggle Cell Tracking</string>
-
     <string name="backup_database">Backup Database</string>
     <string name="clear_database">Clear/Reset Database</string>
     <string name="clear_database_question">All data will be deleted.\nAre you sure?</string>
-
     <string name="restore_database">Restore Database</string>
     <string name="preferences">Preferences</string>
     <string name="press_once_again_to_exit">Press again to exit.</string>
     <string name="cell_lookup">All Current Cell Details</string>
     <string name="send_logs">Debugging</string>
-
     <string name="no_network_connection_title">No Internet Connection</string>
-    <string name="no_network_connection_message">Unable to download OpenCellID data without Internet
-    connectivity, please enable data connection!</string>
+    <string name="no_network_connection_message">Unable to download OpenCellID data without Internet connectivity, please enable data connection!</string>
 
     <!-- MAP VIEWER -->
     <string name="get_opencellid">Download BTS Data</string>
@@ -202,7 +197,6 @@
     <string name="detail_info_high">Hostile Service Actions Detected: An IMSI-Catcher (IMSIC) or fake BTS (FBTS) is actively tracking users. Active scanning takes place in this area. You should avoid this place, especially if there are political unrest. Take out your battery or kill your phone!</string>
     <string name="detail_info_danger">Hostile Tracking Detected: An FBTS or IMSIC is actively tracking YOU and preventing your phone from connecting through your normal encrypted mobile provider. If you\'re in danger or repercussions, destroy your phone + SIM and report it as recently stolen.</string>
     <string name="detail_info_run">Hostile Manipulation: Someone is trying to remotely manipulate your handset. Destroy (or sell) your phone and get a new one somewhere far away (don\'t carry your old phone to the changing place)! Use a new (anonymous) SIM card, change calling behavior and warn your friends by talking to them in real life, NOT by calling them!</string>
-
     <string name="open_cell_id_button_cancel">Cancel</string>
     <string name="open_cell_id_button_ok">OK</string>
 
@@ -234,7 +228,7 @@
     <string name="stopped_monitoring_cell_information">Stopped monitoring Cell Information.</string>
     <string name="tracking_cell_information">Tracking Cell Information.</string>
     <string name="stopped_tracking_cell_information">Stopped tracking Cell Information.</string>
-    <string name="only_one_api_per_day">Only one new API key request per 24 hours!\nPlease try again later.</string>
+    <string name="only_one_key_per_day">Only one new API key request per 24 hours!\nPlease try again later.</string>
     <string name="cell_id_doesnt_exist_in_db">Cell ID does not exist in OCID Database!</string>
     <string name="hostile_service_area_changing_lac_detected">Hostile Service Area: Changing LAC Detected!</string>
     <string name="femtocell_detection_active">FemtoCell Detection Active.</string>
@@ -244,7 +238,7 @@
     <string name="status_idle">Status: Idle.</string>
     <string name="status_good">Status: Good. No Threats Detected.</string>
     <string name="alert_threat_detected">ALERT: Some Threat Detected!</string>
-    <string name="aletr_femtocell_connection_detected">ALERT: FemtoCell Connection Detected!</string>
+    <string name="alert_femtocell_connection_detected">ALERT: FemtoCell Connection Detected!</string>
     <string name="alert_silent_sms_detected">ALERT: Silent SMS (Type-0) detected!</string>
     <string name="alert_silent_voice_sms_detected">ALERT: Silent Voice SMS detected!</string>
     <string name="alert_silent_wap_sms_detected">ALERT: Wap Push SMS detected!</string>
@@ -273,8 +267,8 @@
     <string name="refreshing_display">Refreshing display</string>
     <string name="unable_to_acquire_root_access">Unable to acquire ROOT access on your device.\nAT Command Injection requires ROOT Terminal access.\nPlease check your device is ROOTED and try again.</string>
     <string name="unable_to_detect_busybox">Unable to detect Busybox on your device.\nAT Command Injection requires Busybox components to function correctly.\nPlease check your device has Busybox installed and try again.</string>
-    <string name="unknown_error_trying_to_acquire_serial_device">An unknown error has occurred trying to acquire the Serial Device.\nPlease check your logcat for any errors and post them to Github\nor XDA, links to both of these locations can be found within the\nAbout section of the application.</string>
-    <string name="unknown_error_initialising_at_command_injector">An unknown error has occurred trying to initialise the AT Command Injector.\nPlease check your logcat for any errors and post them to Github or\nXDA, links to both of these locations can be found within the\nAbout section of the application.</string>
+    <string name="unknown_error_trying_to_acquire_serial_device">An unknown error has occurred trying to acquire the Serial Device.\nPlease check your logcat for any errors and post them on our Github.</string>
+    <string name="unknown_error_initialising_at_command_injector">An unknown error has occurred trying to initialise the AT Command Injector.\nPlease check your logcat for any errors and post them on our Github.</string>
     <string name="getting_ocid_api_key">Getting OpenCellID API key&#8230;</string>
     <string name="unable_to_create_map">Unable to create map!</string>
     <string name="describe_the_problem_you_had">ATTENTION! Please describe the problem you had, before sending us these logs. NO HELP WITHOUT DESCRIPTIONS!\n</string>
@@ -311,7 +305,6 @@
     <string name="typevoice_title">ATTENTION!</string>
     <string name="typevoice_header">Silent Voice Detected</string>
     <string name="typevoice_data">Silent Voice SMS Message detected!\n\nDetails: See Database Viewer.\n\nIf you want this data to be analysed by our developers, send the logfiles through the Debugging menu.</string>
-
     <string name="typewap_header">Wap Push Detected</string>
     <string name="typewap_data">Wap Push SMS Message has been detected!\n\nDetails are available through the Database Viewer.\n\nIf you want this data to be analysed by our devs, enter the Debugging menu and send the logfiles via E-Mail.</string>
 

From 1412ce3d8636caa9616fe68bfb09d3631f30cf90 Mon Sep 17 00:00:00 2001
From: SecUpwN <SecUpwN@protonmail.ch>
Date: Fri, 3 Jul 2015 14:19:08 +0200
Subject: [PATCH 39/55] Huge THANKS to @DJaeger for his awesome work! ;-)

---
 app/src/main/assets/CREDITS | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/app/src/main/assets/CREDITS b/app/src/main/assets/CREDITS
index 11489811b..cde095e5c 100644
--- a/app/src/main/assets/CREDITS
+++ b/app/src/main/assets/CREDITS
@@ -221,4 +221,10 @@ for OCID improvements and code fixes.\n
 \n
 Willem van Engen\n
 https://github.com/wvengen\n
-for improving database imports.
\ No newline at end of file
+for improving database imports.\n
+\n
+Daniel Jäger\n
+https://github.com/DJaeger\n
+for your unbelievable endurance\n
+and all the lovely coding. THANK YOU!\n
+\n
\ No newline at end of file

From 893673b1672b63f8496f9735a6f37457b86d285c Mon Sep 17 00:00:00 2001
From: SecUpwN <SecUpwN@protonmail.ch>
Date: Fri, 3 Jul 2015 14:20:29 +0200
Subject: [PATCH 40/55] Testing WIP-Internal v0.1.30-alpha-build-11

---
 app/src/main/AndroidManifest.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index dfcc8a628..756e2dad9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
           android:versionCode="30"
-          android:versionName="0.1.30-alpha-b10">
+          android:versionName="0.1.30-alpha-b11">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"

From e1887bd4c494459b0fa23bca179595808e21ebe7 Mon Sep 17 00:00:00 2001
From: "Security: Pwned." <SecUpwN@users.noreply.github.com>
Date: Fri, 3 Jul 2015 12:50:18 +0000
Subject: [PATCH 41/55] Added @weblate translation badge

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index e0cc78a8b..e55fe6690 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 ### Android IMSI-Catcher Detector
 
-[![BuildStatus](https://travis-ci.org/SecUpwN/Android-IMSI-Catcher-Detector.svg)](https://travis-ci.org/SecUpwN/Android-IMSI-Catcher-Detector) [![DevelopmentStatus](http://img.shields.io/badge/Development_Status-ALPHA-brightgreen.svg)](https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/wiki/Development-Status) [![CoverityScan](https://scan.coverity.com/projects/3346/badge.svg)](https://scan.coverity.com/projects/3346)
+[![BuildStatus](https://travis-ci.org/SecUpwN/Android-IMSI-Catcher-Detector.svg)](https://travis-ci.org/SecUpwN/Android-IMSI-Catcher-Detector) [![DevelopmentStatus](http://img.shields.io/badge/Development_Status-ALPHA-brightgreen.svg)](https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/wiki/Development-Status) [![CoverityScan](https://scan.coverity.com/projects/3346/badge.svg)](https://scan.coverity.com/projects/3346) [![Translations](https://hosted.weblate.org/widgets/aimsicd/-/shields-badge.svg)](https://hosted.weblate.org/projects/aimsicd/strings/)
 [![Bountysource](https://www.bountysource.com/badge/team?team_id=40338&style=bounties_received)](https://www.bountysource.com/teams/android-imsi-catcher-detector/issues?utm_source=Android%20IMSI-Catcher%20Detector&utm_medium=shield&utm_campaign=bounties_received)
 
 --

From aefcce93363e71ebc28a554230bfc12399ff1e84 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Fri, 3 Jul 2015 15:08:12 +0200
Subject: [PATCH 42/55] Should fix #496

---
 .../java/com/SecUpwN/AIMSICD/adapters/AIMSICDDbAdapter.java     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/AIMSICDDbAdapter.java b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/AIMSICDDbAdapter.java
index 1e77e09cc..3b12b6904 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/adapters/AIMSICDDbAdapter.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/adapters/AIMSICDDbAdapter.java
@@ -1417,7 +1417,7 @@ public void onOpen(SQLiteDatabase db) {
                 // Make sure it has a location index. Separate connection to avoid locking issues.
                 // TODO this can take a while the first time, provide UI feedback
                 SQLiteDatabase ladb = SQLiteDatabase.openDatabase(LACELLS_DB_NAME, null, 0);
-                String LACELLS_TABLE_CREATE = "CREATE TABLE " +
+                String LACELLS_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS " +
                         LACELLS_TABLE  + " (" + COLUMN_ID +
                         " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                         "Lac INTEGER, CellID INTEGER, " +

From c00375ae418ec9df5696c94e4f72f13c5d504423 Mon Sep 17 00:00:00 2001
From: DJaeger <daniel-jaeger@online.de>
Date: Fri, 3 Jul 2015 15:12:22 +0200
Subject: [PATCH 43/55] increase buildnumber

---
 app/src/main/AndroidManifest.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 756e2dad9..9f6f28943 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
           android:versionCode="30"
-          android:versionName="0.1.30-alpha-b11">
+          android:versionName="0.1.30-alpha-b12">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"

From 82bf5009cbb1334975fb09b7a0d17b03a03c558f Mon Sep 17 00:00:00 2001
From: "E:V:A" <xdae3v3a@gmail.com>
Date: Fri, 3 Jul 2015 22:30:58 +0300
Subject: [PATCH 44/55] fix comment

---
 app/src/main/java/com/SecUpwN/AIMSICD/utils/RequestTask.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/RequestTask.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/RequestTask.java
index e859e646d..388a90a74 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/RequestTask.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/RequestTask.java
@@ -96,8 +96,8 @@ public class RequestTask extends BaseAsyncTask<String, Integer, String> {
 
     //Calling from the menu more extensive(more difficult for sever),
     // we have to give more time for the server response
-    public static final int REQUEST_TIMEOUT_MAPS = 80000;       // [ms] 40 s Calling from map
-    public static final int REQUEST_TIMEOUT_MENU = 80000;       // [ms] 40 s Calling from menu
+    public static final int REQUEST_TIMEOUT_MAPS = 80000;       // [ms] 80 s Calling from map
+    public static final int REQUEST_TIMEOUT_MENU = 80000;       // [ms] 80 s Calling from menu
 
     public static final char DBE_DOWNLOAD_REQUEST = 1;          // OCID download request from "APPLICATION" drawer title
     public static final char DBE_DOWNLOAD_REQUEST_FROM_MAP = 2; // OCID download request from "Antenna Map Viewer"

From 3a363321371ab6e08404fae20bb4453751629f33 Mon Sep 17 00:00:00 2001
From: "E:V:A" <xdae3v3a@gmail.com>
Date: Fri, 3 Jul 2015 22:32:00 +0300
Subject: [PATCH 45/55] silence some spammy XPrivacy items

Silenced some spammy XPrivacy items using:
`XPrivacy/XRuntime:S Xposed:S`
---
 .../main/java/com/SecUpwN/AIMSICD/activities/DebugLogs.java  | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/activities/DebugLogs.java b/app/src/main/java/com/SecUpwN/AIMSICD/activities/DebugLogs.java
index 8d20a81ed..2508a89f0 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/activities/DebugLogs.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/activities/DebugLogs.java
@@ -53,6 +53,7 @@
  *          2015-02-11  E:V:A   Increased to 500 lines and removed "-d" and
  *                              incl. radio log, but not working. Permission problem?
  *          2015-02-24  E:V:A   Silent some spam logs on HTC devices.
+ *          2015-07-03  E:V:A   Silent some spam logs from the XPosed framework
  *
  */
 
@@ -241,6 +242,7 @@ public String getProp() throws IOException {
      *  4) Need to silent some Qualcomm GPS:                " LocSvc_eng:S LocSvc_adapter:S LocSvc_afw:S"
      *  5) "-d" is not necessary when using "-t".
      *  6) Need to silent some spammy HTC's:                "QC-QMI:S AudioPolicyManager:S"
+     *  7) Need to silent some spammy XPrivacy items:       "XPrivacy/XRuntime:S Xposed:S"
      *
      */
     private String getLogs() throws IOException {
@@ -249,7 +251,8 @@ private String getLogs() throws IOException {
                     (isRadioLogs ? " -b radio RILQ:S" : "") +
                     " AbsListView:S PackageInfo:S" +
                     " LocSvc_eng:S LocSvc_adapter:S LocSvc_afw:S" +
-                    " QC-QMI:S AudioPolicyManager:S" + " *:D"
+                    " QC-QMI:S AudioPolicyManager:S" +
+                    " XPrivacy/XRuntime:S Xposed:S" + " *:D"
         );
     }
 

From 8ab77ab468d01ffa1afadf9882ece3f714e3a7f0 Mon Sep 17 00:00:00 2001
From: "E:V:A" <xdae3v3a@gmail.com>
Date: Fri, 3 Jul 2015 22:32:16 +0300
Subject: [PATCH 46/55] increase build number

---
 app/src/main/AndroidManifest.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9f6f28943..0e87d6b2c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
           android:versionCode="30"
-          android:versionName="0.1.30-alpha-b12">
+          android:versionName="0.1.30-alpha-b13">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"

From c48a65fc53fc634d7974c12d26f2065dae85c2f6 Mon Sep 17 00:00:00 2001
From: "E:V:A" <xdae3v3a@gmail.com>
Date: Sat, 4 Jul 2015 13:02:13 +0300
Subject: [PATCH 47/55] Antispam XPrivacy in DebugLogs and added OCID Log items

- updated build no
- Silenced more XPrivacy logcat spam in DebugLogs
- Added Log items for MCC and MNC parameters when downloading OCID (for
debugging why MNC is failing.)
---
 app/src/main/AndroidManifest.xml                            | 2 +-
 .../main/java/com/SecUpwN/AIMSICD/activities/DebugLogs.java | 6 +++++-
 app/src/main/java/com/SecUpwN/AIMSICD/utils/Helpers.java    | 3 +++
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0e87d6b2c..500d2d2a3 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
           android:versionCode="30"
-          android:versionName="0.1.30-alpha-b13">
+          android:versionName="0.1.30-alpha-b14">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/activities/DebugLogs.java b/app/src/main/java/com/SecUpwN/AIMSICD/activities/DebugLogs.java
index 2508a89f0..0949887ca 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/activities/DebugLogs.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/activities/DebugLogs.java
@@ -46,6 +46,8 @@
  *                  but never implemented here. We need to add the buffer selector button
  *                  to the top bar, next to email icon button. **
  *
+ *  TODO:   [ ]     We should add an XPrivacy button (or automatic) to add XPrivacy filters when used.
+ *
  *  ChangeLog:
  *
  *          2015-01-27  E:V:A   Added "getprop|sort" info to log.
@@ -243,6 +245,7 @@ public String getProp() throws IOException {
      *  5) "-d" is not necessary when using "-t".
      *  6) Need to silent some spammy HTC's:                "QC-QMI:S AudioPolicyManager:S"
      *  7) Need to silent some spammy XPrivacy items:       "XPrivacy/XRuntime:S Xposed:S"
+     *  8) Need to silent even more XPrivacy items:         "XPrivacy/XTelephonyManager:S XPrivacy/XLocationManager:S XPrivacy/XPackageManager:S"
      *
      */
     private String getLogs() throws IOException {
@@ -252,7 +255,8 @@ private String getLogs() throws IOException {
                     " AbsListView:S PackageInfo:S" +
                     " LocSvc_eng:S LocSvc_adapter:S LocSvc_afw:S" +
                     " QC-QMI:S AudioPolicyManager:S" +
-                    " XPrivacy/XRuntime:S Xposed:S" + " *:D"
+                    " XPrivacy/XRuntime:S Xposed:S" +
+                    " XPrivacy/XTelephonyManager:S XPrivacy/XLocationManager:S XPrivacy/XPackageManager:S" + " *:D"
         );
     }
 
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/Helpers.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/Helpers.java
index fab8a4ed4..b090173a2 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/Helpers.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/Helpers.java
@@ -267,12 +267,15 @@ public static void getOpenCellData(Context context, Cell cell, char type) {
                             .append(CellTracker.OCID_API_KEY).append("&BBOX=")
                             .append(boundParameter);
 
+                    Log.i(TAG, mTAG + ":OCID MCC is set to: " + cell.getMCC());
                     if (cell.getMCC() != Integer.MAX_VALUE) {
                         sb.append("&mcc=").append(cell.getMCC());
                     }
+                    Log.i(TAG, mTAG + ":OCID MNC is set to: " + cell.getMNC());
                     if (cell.getMNC() != Integer.MAX_VALUE) {
                         sb.append("&mnc=").append(cell.getMNC());
                     }
+                    //Log.i(TAG, mTAG + ":OCID LAC is set to: " + cell.getLAC());
                     // We need DBe_import filtering, if we wanna keep these lines commented out...
                     //if (cell.getLAC() != Integer.MAX_VALUE) {
                     //    sb.append("&lac=").append(cell.getLAC());

From 3e2f6dad39686938437ff9e908e3462efa563fd3 Mon Sep 17 00:00:00 2001
From: "E:V:A" <xdae3v3a@gmail.com>
Date: Sat, 4 Jul 2015 13:58:38 +0300
Subject: [PATCH 48/55] Fixed log TAGs

Fixed 23 char limitation of Log TAG by using our standard:
TAG, mTAG + "text" fromatting.

Files affeceted:
SignalStrengthTracker
CellTracker
AppAIMSICD
DebugLogs
BAseActivity
---
 .../java/com/SecUpwN/AIMSICD/AppAIMSICD.java  | 13 ++++----
 .../AIMSICD/activities/BaseActivity.java      | 10 +++---
 .../SecUpwN/AIMSICD/activities/DebugLogs.java | 14 +++++---
 .../SecUpwN/AIMSICD/service/CellTracker.java  | 15 ++++-----
 .../service/SignalStrengthTracker.java        | 32 ++++++++++++-------
 5 files changed, 50 insertions(+), 34 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/AppAIMSICD.java b/app/src/main/java/com/SecUpwN/AIMSICD/AppAIMSICD.java
index 24c9299d3..294c78158 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/AppAIMSICD.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/AppAIMSICD.java
@@ -21,7 +21,8 @@
 import java.util.List;
 
 public class AppAIMSICD extends Application {
-    final static String TAG = "AppAIMSICD";
+    final static String TAG = "AIMSICD";
+    final static String mTAG = "AppAIMSICD";
 
     /**
      * Maps between an activity class name and the list of currently running
@@ -51,7 +52,7 @@ public void removeTask(BaseAsyncTask<?, ?, ?> pTask) {
                 if (lTask.equals(pTask)) {
                     tasks.remove(lTask);
                     if (BuildConfig.DEBUG) {
-                        Log.v(TAG, "BaseTask removed:" + pTask.toString());
+                        Log.v(TAG, mTAG + ": BaseTask removed:" + pTask.toString());
                     }
                     break;
                 }
@@ -68,7 +69,7 @@ public void addTask(Activity activity, BaseAsyncTask<?, ?, ?> pTask) {
             return;
         }
         if (BuildConfig.DEBUG) {
-            Log.d(TAG, "BaseTask addTask activity:" + activity.getClass().getCanonicalName());
+            Log.d(TAG, mTAG + ": BaseTask addTask activity:" + activity.getClass().getCanonicalName());
         }
         int key = activity.getClass().getCanonicalName().hashCode();
         List<BaseAsyncTask<?, ?, ?>> tasks = mActivityTaskMap.get(key);
@@ -77,7 +78,7 @@ public void addTask(Activity activity, BaseAsyncTask<?, ?, ?> pTask) {
             mActivityTaskMap.put(key, tasks);
         }
         if (BuildConfig.DEBUG) {
-            Log.v(TAG, "BaseTask added:" + pTask.toString());
+            Log.v(TAG, mTAG + ": BaseTask added:" + pTask.toString());
         }
         tasks.add(pTask);
     }
@@ -87,7 +88,7 @@ public void detach(Activity activity) {
             return;
         }
         if (BuildConfig.DEBUG) {
-            Log.d(TAG, "BaseTask detach:" + activity.getClass().getCanonicalName());
+            Log.d(TAG, mTAG + ": BaseTask detach:" + activity.getClass().getCanonicalName());
         }
 
         List<BaseAsyncTask<?, ?, ?>> tasks = mActivityTaskMap.get(activity.getClass().getCanonicalName().hashCode());
@@ -103,7 +104,7 @@ public void attach(Activity activity) {
             return;
         }
         if (BuildConfig.DEBUG) {
-            Log.d(TAG, "BaseTask attach:" + activity.getClass().getCanonicalName());
+            Log.d(TAG, mTAG + ": BaseTask attach:" + activity.getClass().getCanonicalName());
         }
         List<BaseAsyncTask<?, ?, ?>> tasks = mActivityTaskMap.get(activity.getClass().getCanonicalName().hashCode());
         if (tasks != null) {
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/activities/BaseActivity.java b/app/src/main/java/com/SecUpwN/AIMSICD/activities/BaseActivity.java
index 04524a0fb..f37a77816 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/activities/BaseActivity.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/activities/BaseActivity.java
@@ -25,7 +25,9 @@
  * @author Tor Henning Ueland
  */
 public class BaseActivity extends FragmentActivity {
-    private static String TAG = "BaseActivity";
+    private static final String TAG = "AIMSICD";
+    private static final String mTAG = "BaseActivity";
+
 
     /**
      * Triggered when GUI is opened
@@ -33,7 +35,7 @@ public class BaseActivity extends FragmentActivity {
     @Override
     protected void onResume() {
         super.onResume();
-        Log.d(TAG, "StatusWatcher starting watching");
+        Log.d(TAG, mTAG + ": StatusWatcher starting watching");
         LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
                 new IntentFilter("StatusChange"));
         updateIcon(this);
@@ -45,7 +47,7 @@ protected void onResume() {
     private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
-            Log.d(TAG, "StatusWatcher received status change to " + Status.getStatus().name()+", updating icon");
+            Log.d(TAG, mTAG +  ": StatusWatcher received status change to " + Status.getStatus().name()+", updating icon");
                     updateIcon(context);
         }
     };
@@ -69,7 +71,7 @@ public void run() {
     @Override
     protected void onPause() {
         super.onPause();
-        Log.d(TAG, "StatusWatcher stopped watching");
+        Log.d(TAG, mTAG + ": StatusWatcher stopped watching");
         LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
     }
 }
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/activities/DebugLogs.java b/app/src/main/java/com/SecUpwN/AIMSICD/activities/DebugLogs.java
index 0949887ca..d742cb4aa 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/activities/DebugLogs.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/activities/DebugLogs.java
@@ -61,6 +61,10 @@
 
 
 public class DebugLogs extends BaseActivity {
+
+    private static final String TAG = "AIMSICD";
+    private static final String mTAG = "DebugLogs";
+
     private LogUpdaterThread logUpdater = null;
     private boolean updateLogs = true;
     private boolean isRadioLogs = true; // Including this, should be a toggle.
@@ -98,7 +102,7 @@ public void onClick(View view) {
                     clearLogs();
                     //Log.d("DebugLogs", "Logcat clearing disabled!");
                 } catch (Exception e) {
-                    Log.e("AIMSICD", "DebugLogs: Error clearing logs", e);
+                    Log.e(TAG, mTAG + ": Error clearing logs", e);
                 }
             }
         });
@@ -161,7 +165,7 @@ private void startLogging() {
             logUpdater = new LogUpdaterThread();
             logUpdater.start();
         } catch (Exception e) {
-            Log.e("AIMSICD", "DebugLogs: Error starting log updater thread", e);
+            Log.e(TAG, mTAG + ": Error starting log updater thread", e);
         }
         btnStop.setText(getString(R.string.btn_stop_logs));
     }
@@ -214,7 +218,7 @@ public void run() {
                     intent.putExtra(Intent.EXTRA_TEXT, log);
                     startActivity(Intent.createChooser(intent, "Send Error Log"));
                 } catch (IOException e) {
-                    Log.e("AIMSICD", "DebugLogs: Error reading logs", e);
+                    Log.e(TAG, mTAG + ": Error reading logs", e);
                 }
             }
         }.start();
@@ -303,7 +307,7 @@ public void run() {
                 try {
                     Runtime.getRuntime().exec("logcat -c -b main -b system -b radio -b events");
                 } catch (Exception e) {
-                    Log.e("AIMSICD", "DebugLogs: Error clearing logs", e);
+                    Log.e(TAG, mTAG + ": Error clearing logs", e);
                 }
 
                 runOnUiThread(new Runnable() {
@@ -342,7 +346,7 @@ public void run() {
                         });
                     }
                 } catch (Exception e) {
-                    Log.e("AIMSICD", "DebugLogs: Error updating logs", e);
+                    Log.e(TAG, mTAG + ": Error updating logs", e);
                 }
                 try { Thread.sleep(1000); } catch (Exception e) {}
             }
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java b/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
index 3dd4a0a49..f046f17cd 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
@@ -253,10 +253,10 @@ public void stop() {
     public void setCellTracking(boolean track) {
         if (track) {
             tm.listen(mCellSignalListener,
-                    PhoneStateListener.LISTEN_CELL_LOCATION |           // gpsd_lat/lon ?
+                    PhoneStateListener.LISTEN_CELL_LOCATION |                   // gpsd_lat/lon ?
                             PhoneStateListener.LISTEN_SIGNAL_STRENGTHS |        // rx_signal
                             PhoneStateListener.LISTEN_DATA_ACTIVITY |           // No,In,Ou,IO,Do
-                            PhoneStateListener.LISTEN_DATA_CONNECTION_STATE |    // Di,Ct,Cd,Su
+                            PhoneStateListener.LISTEN_DATA_CONNECTION_STATE |   // Di,Ct,Cd,Su
                             PhoneStateListener.LISTEN_CELL_INFO
                     // PhoneStateListener.LISTEN_CALL_STATE ?
                     // PhoneStateListener.LISTEN_SERVICE_STATE ?
@@ -463,8 +463,7 @@ code in checkForNeighbourCount() was previously here.
 
         // Add NC list to ?? cellinfo ??  --->  DBi_measure:nc_list
         for (NeighboringCellInfo neighbourCell : neighboringCellInfo) {
-            Log.i(TAG,
-                    mTAG + ": neighbouringCellInfo -" +
+            Log.i(TAG, mTAG + ": neighbouringCellInfo -" +
                             " LAC:" + neighbourCell.getLac() +
                             " CID:" + neighbourCell.getCid() +
                             " PSC:" + neighbourCell.getPsc() +
@@ -488,7 +487,7 @@ I moved this code out of updateNeighbouringCells() so now this will
 
      */
     public void checkForNeighbourCount(CellLocation location){
-        Log.i(mTAG,"in checkForNeighbourCount");
+        Log.i(TAG, mTAG + ": checkForNeighbourCount()");
 
         /**
          *  Description:    This snippet sets a global variable (SharedPreference) to indicate
@@ -622,7 +621,7 @@ public void compareLac(CellLocation location){
                     // Check if CellID (CID) is in DBe_import (OpenCell) database (issue #91)
                     if ( tinydb.getBoolean("ocid_downloaded") ) {
                         if (!dbHelper.openCellExists(mMonitorCell.getCID())) {
-                            Log.i(mTAG, "ALERT: Connected to unknown CID not in DBe_import: " + mMonitorCell.getCID());
+                            Log.i(TAG, "ALERT: Connected to unknown CID not in DBe_import: " + mMonitorCell.getCID());
 
                             // Code Place-holder: TODO: Add to EventLog table!!
 
@@ -1309,13 +1308,13 @@ public void onSignalStrengthsChanged(SignalStrength signalStrength) {
         @Override
         public void onCellInfoChanged(List<CellInfo> cellInfo) {
             handle();
-            Log.i(mTAG,"Cell info change");
+            Log.i(TAG, mTAG + ": Cell info change");
         }
 
         @Override
         public void onCellLocationChanged(CellLocation location) {
             handle();
-            Log.i(mTAG,"Cell info change");
+            Log.i(TAG, mTAG +": Cell info change");
         }
 
     };
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java b/app/src/main/java/com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java
index eac6c2d28..bde85ef15 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/service/SignalStrengthTracker.java
@@ -26,16 +26,26 @@
  *
  *      https://cloud.githubusercontent.com/assets/2507905/4428863/c85c8366-45d4-11e4-89da-c650cdb56caf.jpg
  *
+ *  Issues:
+ *
+ *      [ ]
+ *
+ *  ChangeLog
+ *
+ *      20150703    E:V:A       Changed log TAG to use only TAG for Log.i() and mTAG for Log.d/e/v()
+ *
  * @author Tor Henning Ueland
  */
 public class SignalStrengthTracker {
-    //FIXME The logging tag can be at most 23 characters, was 29 (AIMSICD_SignalStrengthTracker)
-    public static final String TAG = "AIMSICD_SignalStrength";
+
+    private static final String TAG = "AIMSICD";
+    private static final String mTAG = "SignalStrengthTracker";
+
     private static int sleepTimeBetweenSignalRegistration = 60; // [seconds]
-    private static int minimumIdleTime              = 30; // [seconds]
-    private static int maximumNumberOfDaysSaved     = 60; // [days] = 2 months
-    private static int mysteriousSignalDifference   = 10; // [dBm] or [ASU]?
-    private static int sleepTimeBetweenCleanup      = 3600; // Once per hour
+    private static int minimumIdleTime                    = 30; // [seconds]
+    private static int maximumNumberOfDaysSaved           = 60; // [days] = 2 months
+    private static int mysteriousSignalDifference         = 10; // [dBm] or [ASU]?
+    private static int sleepTimeBetweenCleanup            = 3600; // Once per hour
     private Long lastRegistrationTime;  //Timestamp for last registration to DB
     private Long lastCleanupTime;       //Timestamp for last cleanup of DB
     private HashMap<Integer, Integer> averageSignalCache = new HashMap<>();
@@ -62,8 +72,8 @@ public void registerSignalStrength(int cellID, int signalStrength) {
         long now = System.currentTimeMillis();
 
         if(deviceIsMoving()) {
-            Log.i(TAG, "Ignored signal strength sample for CID: " + cellID +
-                    " as the device is currently moving around, will not accept anything for another " +
+            Log.i(TAG, "Ignoring signal strength for CID: " + cellID +
+                    " since device is moving around, waiting for " +
                     ((minimumIdleTime*1000) - (now - lastMovementDetected)) + " ms.");
             return;
         }
@@ -113,7 +123,7 @@ public boolean isMysterious(int cellID, int signalStrength) {
         //If moving, return false
         if(deviceIsMoving()) {
             Log.i(TAG, "Cannot check signal strength for CID: " + cellID +
-                        " as the device is currently moving around.");
+                        " since device is moving around.");
             return false;
         }
 
@@ -122,13 +132,13 @@ public boolean isMysterious(int cellID, int signalStrength) {
         //Cached?
         if(averageSignalCache.get(cellID) != null) {
             storedAvg = averageSignalCache.get(cellID);
-            Log.d(TAG, "Cached average SS for CID: " + cellID + " is: " + storedAvg);
+            Log.d(TAG, mTAG + ": Cached average SS for CID: " + cellID + " is: " + storedAvg);
         } else {
             //Not cached, check DB
             mDbHelper.open();
             storedAvg = mDbHelper.getAverageSignalStrength(cellID);
             averageSignalCache.put(cellID, storedAvg);
-            Log.d(TAG, "Average SS in DB for  CID: " + cellID + " is: " + storedAvg);
+            Log.d(TAG, mTAG + ": Average SS in DB for  CID: " + cellID + " is: " + storedAvg);
             mDbHelper.close();
         }
 

From 8a7ffe1d88bcc98a90f3fb68c8981753ae975a7e Mon Sep 17 00:00:00 2001
From: "E:V:A" <xdae3v3a@gmail.com>
Date: Sat, 4 Jul 2015 14:34:12 +0300
Subject: [PATCH 49/55] Fixed log TAG and nulls according to cancelled PR 526

Remade a PR similar to the one by @Ph1b which was subsequently cancelled
due to unclarity.  See PR 526 and 4a68d00

- Fixed MiscUtils TAGs
- Fixed nulls in CellTracker
- Fixed minor formatting
---
 app/src/main/AndroidManifest.xml              |  2 +-
 .../SecUpwN/AIMSICD/service/CellTracker.java  | 12 ++++---
 .../com/SecUpwN/AIMSICD/utils/MiscUtils.java  | 36 ++++++++++++-------
 3 files changed, 32 insertions(+), 18 deletions(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 500d2d2a3..0dbd94c16 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
           android:versionCode="30"
-          android:versionName="0.1.30-alpha-b14">
+          android:versionName="0.1.30-alpha-b15">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java b/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
index f046f17cd..738e2ec8c 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
@@ -380,12 +380,16 @@ public static String requestNewOCIDKey() throws Exception {
 
             // TODO add code here or elsewhere to check for NO network exceptions...
             // See: https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/issues/293
-            httpclient = null;
-            httpGet = null;
-            result = null;
+
+            // TODO: Remove commented out stuff if app works without these NULLs
+            // See: https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/pull/526
+            // PR: 4a68d00
+            //httpclient = null;
+            //httpGet = null;
+            //result = null;
 
             Log.d("AIMSICD", "CellTracker: OCID Returned " + result.getStatusCode() + " " + result.getReasonPhrase());
-//                        throw new Exception("OCID Returned " + status.getStatusCode() + " " + status.getReasonPhrase());
+            //throw new Exception("OCID Returned " + status.getStatusCode() + " " + status.getReasonPhrase());
             return null;
         }
     }
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/MiscUtils.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/MiscUtils.java
index 6cb1ce304..e66bb5cb0 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/MiscUtils.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/MiscUtils.java
@@ -31,12 +31,21 @@
 import java.util.Locale;
 
 /**
- * Created by Paul Kinsella on 04/03/15.
+ * Description:     TODO
+ *
+ *
+ * ChangeLog:
+ *
+ *      banjaxbanjo     20150304    First PR
+ *      E:V:A           20150704    Changed TAGs and fixed some formatting
  *
  */
 
 public class MiscUtils {
 
+    private static final String TAG = "AIMSICD";
+    private static final String mTAG = "MiscUtils";
+
     public static String setAssetsString(Context context){
         BufferedReader reader = null;
         StringBuilder buildassets = new StringBuilder();
@@ -111,13 +120,13 @@ public static void showNotification(Context context ,String tickertext,String co
 
     /*
          Coder:banjaxbanjo
+
          All new database detection strings will be added here so we
          don't need to keep updating db every time we find a new string.
 
          to add a new string in det_strings.json see example below:
 
-         {"detection_string":"incoming msg. Mti 0 ProtocolID 0 DCS 0x04 class -1",
-         "detection_type":"WAPPUSH"}
+         {"detection_string":"incoming msg. Mti 0 ProtocolID 0 DCS 0x04 class -1", "detection_type":"WAPPUSH"}
 
       */
     public static void refreshDetectionDbStrings(Context con){
@@ -132,7 +141,8 @@ public static void refreshDetectionDbStrings(Context con){
                 json_file.append(rline);
                 rline = reader.readLine();
             }
-            Log.i("refreshDetectionDbStrings", json_file.toString());
+            // Hmm I hope this doesn't affect the detection
+            Log.i(TAG, mTAG + ": refreshDetectionDbStrings: " + json_file.toString());
         } catch (Exception ee){
             ee.printStackTrace();
         }finally {
@@ -164,7 +174,7 @@ public static void refreshDetectionDbStrings(Context con){
                 store_new_det_string.put(SmsDetectionDbHelper.SILENT_SMS_TYPE_COLUMN,
                         current_json_object.optString("detection_type").toString());
                 if(dbaccess.insertNewDetectionString(store_new_det_string)){
-                    Log.i("refreshDetectionDbStrings",">>>String added success");
+                    Log.i(TAG, mTAG + ": refreshDetectionDbStrings: New string added!");
                 }
                 
 
@@ -172,14 +182,14 @@ public static void refreshDetectionDbStrings(Context con){
             dbaccess.close();
         } catch (JSONException e) {
             dbaccess.close();
-            Log.e("refreshDetectionDbStrings",">>> Error parsing JsonFile "+e.toString());
+            Log.e(TAG, mTAG + ": refreshDetectionDbStrings: "+ "Error parsing JsonFile " + e.toString());
             e.printStackTrace();
         }
 
     }
     
     /*
-        Returns a timestamp in this format 20150617223311
+        Returns a timestamp in this format:     20150617223311
         this is used to detect if the sms was already picked up
      */
     public static String logcatTimeStampParser(String line){
@@ -187,12 +197,12 @@ public static String logcatTimeStampParser(String line){
         String[] buffer = line.split(" ");
 
         line = String.valueOf(Calendar.getInstance().get(Calendar.YEAR))+buffer[0]+buffer[1];
-                                                            //   -->we dont need the last 4 digits in timestamp .988
-                                                            //   |  way to accurate but easily change if needed
-        String timestamp = line.substring(0,line.length()-4)// <-|
-                .replace(":","")
-                .replace(".","")
-                .replace("-","");
+        //   -->we dont need the last 4 digits in timestamp .988
+        //   |  way to accurate but easily change if needed
+        String timestamp = line.substring(0,line.length()-4) // <-|
+                .replace(":", "")
+                .replace(".", "")
+                .replace("-", "");
 
         return timestamp;
     }

From 75ec459ff4920b251c1a3ceb0c95900f265f4a98 Mon Sep 17 00:00:00 2001
From: "E:V:A" <xdae3v3a@gmail.com>
Date: Sun, 5 Jul 2015 11:23:07 +0300
Subject: [PATCH 50/55] Replacement of PR 527 w/o updated deps

This PR replaces the one made by @Ph1b  in 527. Travis and Buildozer
doesn't like the updated dependencies. So this PR leaves that out. For
dep details, please see:

https://github.com/Ph1b/Android-IMSI-Catcher-Detector/commit/0d43f81913377776ce67cfdd7e8eae3aa9efee64
---
 .../java/com/SecUpwN/AIMSICD/service/CellTracker.java     | 8 +++++++-
 .../main/java/com/SecUpwN/AIMSICD/utils/MiscUtils.java    | 4 ++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java b/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
index 738e2ec8c..7775da097 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
@@ -14,6 +14,8 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.SharedPreferences;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
 import android.location.Location;
 import android.os.Build;
 import android.os.Bundle;
@@ -1130,9 +1132,13 @@ void setNotification() {
         PendingIntent contentIntent = PendingIntent.getActivity(
                 context, NOTIFICATION_ID, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
         String iconType = prefs.getString(context.getString(R.string.pref_ui_icons_key), "SENSE").toUpperCase();
+        int iconResId = Icon.getIcon(Icon.Type.valueOf(iconType));
+        Bitmap largeIcon = BitmapFactory.decodeResource(context.getResources(), iconResId);
         Notification mBuilder =
                 new NotificationCompat.Builder(context)
-                        .setSmallIcon(Icon.getIcon(Icon.Type.valueOf(iconType)))
+                        //.setSmallIcon(Icon.getIcon(Icon.Type.valueOf(iconType)))
+                        .setSmallIcon(iconResId)
+                        .setLargeIcon(largeIcon)
                         .setTicker(tickerText)
                         .setContentTitle(context.getResources().getString(R.string.main_app_name))
                         .setContentText(contentText)
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/MiscUtils.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/MiscUtils.java
index e66bb5cb0..3c793ce02 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/MiscUtils.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/MiscUtils.java
@@ -11,6 +11,8 @@
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
 import android.support.v4.app.NotificationCompat;
 import android.util.Log;
 import com.SecUpwN.AIMSICD.AIMSICD;
@@ -102,9 +104,11 @@ public static void showNotification(Context context ,String tickertext,String co
 
         PendingIntent contentIntent = PendingIntent.getActivity(
                 context, NOTIFICATION_ID, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
+        Bitmap largeIcon = BitmapFactory.decodeResource(context.getResources(), drawable_id);
         Notification mBuilder =
                 new NotificationCompat.Builder(context)
                         .setSmallIcon(drawable_id)
+                        .setLargeIcon(largeIcon)
                         .setTicker(tickertext)
                         .setContentTitle(context.getResources().getString(R.string.main_app_name))
                         .setContentText(contentText)

From 002055d948c387aadf68f4a7f949fcffb8090ee3 Mon Sep 17 00:00:00 2001
From: "E:V:A" <xdae3v3a@gmail.com>
Date: Sun, 5 Jul 2015 11:44:57 +0300
Subject: [PATCH 51/55] Cleanup of SMS Timstamp code

- Cleanup of the timestamp code from @Ph1b's closed PR 527:

https://github.com/Ph1b/Android-IMSI-Catcher-Detector/commit/45a35c6af43897e3d0c877c442cb209a67d46440

- updated build number
---
 app/src/main/AndroidManifest.xml              |  2 +-
 .../com/SecUpwN/AIMSICD/utils/MiscUtils.java  | 22 +++++++++----------
 2 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0dbd94c16..a51fdcad0 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
           android:versionCode="30"
-          android:versionName="0.1.30-alpha-b15">
+          android:versionName="0.1.30-alpha-b16">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/MiscUtils.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/MiscUtils.java
index 3c793ce02..d450f9507 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/MiscUtils.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/MiscUtils.java
@@ -84,8 +84,7 @@ public static void startPopUpInfo(Context context,int mode){
     public static String getCurrentTimeStamp(){
 
         Date now = new Date();
-        String timestamp = new SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()).format(now);
-        return timestamp;
+        return new SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()).format(now);
     }
 
     /*
@@ -174,9 +173,9 @@ public static void refreshDetectionDbStrings(Context con){
                 JSONObject current_json_object = json_array_node.getJSONObject(i);
                 ContentValues store_new_det_string = new ContentValues();
                 store_new_det_string.put(SmsDetectionDbHelper.SILENT_SMS_STRING_COLUMN,
-                        current_json_object.optString("detection_string").toString());
+                        current_json_object.optString("detection_string")); // removed .toString()
                 store_new_det_string.put(SmsDetectionDbHelper.SILENT_SMS_TYPE_COLUMN,
-                        current_json_object.optString("detection_type").toString());
+                        current_json_object.optString("detection_type"));
                 if(dbaccess.insertNewDetectionString(store_new_det_string)){
                     Log.i(TAG, mTAG + ": refreshDetectionDbStrings: New string added!");
                 }
@@ -193,21 +192,20 @@ public static void refreshDetectionDbStrings(Context con){
     }
     
     /*
-        Returns a timestamp in this format:     20150617223311
-        this is used to detect if the sms was already picked up
+     *  Description:    Converts logcat timstamp to SQL friendly timstamps
+     *                  We use this to determine if an sms has already been found
+     *
+     *      Converts a timstamp in this format:     06-17 22:06:05.988 D/dalvikvm(24747):
+     *      Returns a timestamp in this format:     20150617223311
      */
     public static String logcatTimeStampParser(String line){
-        //06-17 22:06:05.988 D/dalvikvm(24747): <-- example of timestamp
         String[] buffer = line.split(" ");
 
         line = String.valueOf(Calendar.getInstance().get(Calendar.YEAR))+buffer[0]+buffer[1];
-        //   -->we dont need the last 4 digits in timestamp .988
-        //   |  way to accurate but easily change if needed
-        String timestamp = line.substring(0,line.length()-4) // <-|
+        //   We don't need the last 4 digits in timestamp ".988" or it is too accurate.
+        return line.substring(0,line.length()-4) // <-|
                 .replace(":", "")
                 .replace(".", "")
                 .replace("-", "");
-
-        return timestamp;
     }
 }

From d590e2ea774750d12177d9151d12ddf86b4b8b42 Mon Sep 17 00:00:00 2001
From: "E:V:A" <xdae3v3a@gmail.com>
Date: Sun, 5 Jul 2015 12:32:22 +0300
Subject: [PATCH 52/55] Minor cleanup and reformat

- Commented out unused imports
- re-ordered variable declarations
- added some comments
---
 .../SecUpwN/AIMSICD/service/CellTracker.java  | 64 +++++++++----------
 1 file changed, 31 insertions(+), 33 deletions(-)

diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java b/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
index 7775da097..290ae2c0f 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
@@ -19,7 +19,6 @@
 import android.location.Location;
 import android.os.Build;
 import android.os.Bundle;
-import android.os.Handler;
 import android.os.SystemClock;
 import android.support.v4.app.NotificationCompat;
 import android.telephony.CellInfo;
@@ -47,13 +46,9 @@
 import com.SecUpwN.AIMSICD.utils.Status;
 import com.SecUpwN.AIMSICD.utils.TinyDB;
 
-import org.apache.http.HttpResponse;
-import org.apache.http.StatusLine;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.DefaultHttpClient;
 
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.LinkedBlockingQueue;
@@ -97,7 +92,14 @@ public class CellTracker implements SharedPreferences.OnSharedPreferenceChangeLi
     private final String mTAG = "CellTracker";
 
     public static String OCID_API_KEY = null;   // see getOcidKey()
+    public static int PHONE_TYPE;               //
+    public static long REFRESH_RATE;            // [s] The DeviceInfo refresh rate (arrays.xml)
+    public static int LAST_DB_BACKUP_VERSION;   //
+    public static final String SILENT_SMS = "SILENT_SMS_DETECTED";
+
+    private boolean CELL_TABLE_CLEANSED;        //
     private final int NOTIFICATION_ID = 1;      // ?
+    private final Device mDevice = new Device();
 
     private static TelephonyManager tm;
     private final SignalStrengthTracker signalStrengthTracker;
@@ -107,12 +109,6 @@ public class CellTracker implements SharedPreferences.OnSharedPreferenceChangeLi
     //TinyDB tinydb = new TinyDB(context);
     private TinyDB tinydb;
 
-    public static int PHONE_TYPE;               //
-    public static long REFRESH_RATE;            // [s] The DeviceInfo refresh rate (arrays.xml)
-    public static int LAST_DB_BACKUP_VERSION;   //
-    public static final String SILENT_SMS = "SILENT_SMS_DETECTED";
-    private boolean CELL_TABLE_CLEANSED;
-    private final Device mDevice = new Device();
 
     /*
      * Tracking and Alert Declarations
@@ -259,9 +255,9 @@ public void setCellTracking(boolean track) {
                             PhoneStateListener.LISTEN_SIGNAL_STRENGTHS |        // rx_signal
                             PhoneStateListener.LISTEN_DATA_ACTIVITY |           // No,In,Ou,IO,Do
                             PhoneStateListener.LISTEN_DATA_CONNECTION_STATE |   // Di,Ct,Cd,Su
-                            PhoneStateListener.LISTEN_CELL_INFO
-                    // PhoneStateListener.LISTEN_CALL_STATE ?
-                    // PhoneStateListener.LISTEN_SERVICE_STATE ?
+                            PhoneStateListener.LISTEN_CELL_INFO                 // !? (Need API 17)
+                            // PhoneStateListener.LISTEN_CALL_STATE             // idle,ringing,offhook
+                            // PhoneStateListener.LISTEN_SERVICE_STATE          // emergency_only,in_service,out_of_service,power_off
             );
             mTrackingCell = true;
             Helpers.msgShort(context, context.getString(R.string.tracking_cell_information));
@@ -453,6 +449,7 @@ public List<Cell> updateNeighbouringCells() {
                     neighboringCellInfo = cellInfoList;
                 } catch (InterruptedException e) {
                     // Maybe a more valuable message here?
+                    //Log.d(TAG, mTAG + ": unknown NC info exception: " + e); // How about this???
                     // normal
                 }
             }
@@ -554,7 +551,7 @@ public void checkForNeighbourCount(CellLocation location){
 
     }
 
-    /** Update: from banjaxbanjo
+    /**
      *          I removed the timer that activated this code and now the code will be run when
      *          the cell changes so it will detect faster rather than using a timer that might
      *          miss an imsi catcher, also says cpu rather than refreshing every x seconds.
@@ -602,7 +599,8 @@ public void checkForNeighbourCount(CellLocation location){
      *                  Are there any reasons why not using a listener?
      *
      *  ChangeLog:
-     *              2015-03-03  E:V:A   Changed getProp() to use TinyDB (SharedPreferences)
+     *              2015-03-03  E:V:A           Changed getProp() to use TinyDB (SharedPreferences)
+     *              2015-0x-xx  banjaxbanjo     Update: ??? (hey dude what did you do?)
      *
      */
     public void compareLac(CellLocation location){
@@ -689,16 +687,16 @@ public void refreshDevice() {
      *
      */
     private void loadPreferences() {
-        boolean trackFemtoPref  = prefs.getBoolean( context.getString(R.string.pref_femto_detection_key), false);
-        boolean trackCellPref   = prefs.getBoolean( context.getString(R.string.pref_enable_cell_key), true);
-        boolean monitorCellPref = prefs.getBoolean( context.getString(R.string.pref_enable_cell_monitoring_key), true);
+        boolean trackFemtoPref  = prefs.getBoolean(context.getString(R.string.pref_femto_detection_key), false);
+        boolean trackCellPref   = prefs.getBoolean(context.getString(R.string.pref_enable_cell_key), true);
+        boolean monitorCellPref = prefs.getBoolean(context.getString(R.string.pref_enable_cell_monitoring_key), true);
 
-        LAST_DB_BACKUP_VERSION  = prefs.getInt(     context.getString(R.string.pref_last_database_backup_version), 1);
-        CELL_TABLE_CLEANSED     = prefs.getBoolean( context.getString(R.string.pref_cell_table_cleansed), false);
+        LAST_DB_BACKUP_VERSION  = prefs.getInt(context.getString(R.string.pref_last_database_backup_version), 1);
+        CELL_TABLE_CLEANSED     = prefs.getBoolean(context.getString(R.string.pref_cell_table_cleansed), false);
 
-        String refreshRate      = prefs.getString(  context.getString(R.string.pref_refresh_key), "1");
+        String refreshRate      = prefs.getString(context.getString(R.string.pref_refresh_key), "1");
         // Default to Automatic ("1")
-        if (refreshRate.isEmpty()) { refreshRate = "1";  }
+        if (refreshRate.isEmpty()) { refreshRate = "1";  }  // Set default to: 1 second
 
         int rate = Integer.parseInt(refreshRate);
         long t;
@@ -707,7 +705,7 @@ private void loadPreferences() {
                 t = 15L; // Automatic refresh rate is 15 seconds
                 break;
             default:
-                t = (rate * 1L);
+                t = ((long) rate); // Default is 1 sec (from above)
                 break;
         }
 
@@ -754,22 +752,22 @@ private void loadPreferences() {
         public void onCellLocationChanged(CellLocation location) {
             checkForNeighbourCount(location);
             compareLac(location);
-            refreshDevice();//refresh data on cell change
+            refreshDevice();                //refresh data on cell change
             mDevice.setNetID(tm);           // ??
             mDevice.getNetworkTypeName();   // RAT??
 
             switch (mDevice.getPhoneID()) {
 
-                case TelephonyManager.PHONE_TYPE_NONE:  // Maybe bad!
-                case TelephonyManager.PHONE_TYPE_SIP:   // Maybe bad!
+                case TelephonyManager.PHONE_TYPE_NONE:
+                case TelephonyManager.PHONE_TYPE_SIP:
                 case TelephonyManager.PHONE_TYPE_GSM:
                     GsmCellLocation gsmCellLocation = (GsmCellLocation) location;
                     if (gsmCellLocation != null) {
                         mDevice.setCellInfo(
-                                gsmCellLocation.toString() +                // ??
+                                gsmCellLocation.toString() +                        // ??
                                         mDevice.getDataActivityTypeShort() + "|" +  // No,In,Ou,IO,Do
                                         mDevice.getDataStateShort() + "|" +         // Di,Ct,Cd,Su
-                                        mDevice.getNetworkTypeName() + "|"          // TODO: Is "|" a typo?
+                                        mDevice.getNetworkTypeName() + "|"          // HSPA,LTE etc
                         );
                         mDevice.mCell.setLAC(gsmCellLocation.getLac());     // LAC
                         mDevice.mCell.setCID(gsmCellLocation.getCid());     // CID
@@ -783,7 +781,7 @@ public void onCellLocationChanged(CellLocation location) {
                     CdmaCellLocation cdmaCellLocation = (CdmaCellLocation) location;
                     if (cdmaCellLocation != null) {
                         mDevice.setCellInfo(
-                                cdmaCellLocation.toString() +               // ??
+                                cdmaCellLocation.toString() +                       // ??
                                         mDevice.getDataActivityTypeShort() + "|" +  // No,In,Ou,IO,Do
                                         mDevice.getDataStateShort() + "|" +         // Di,Ct,Cd,Su
                                         mDevice.getNetworkTypeName() + "|"          // TODO: Is "|" a typo?
@@ -935,8 +933,8 @@ public void onLocationChanged(Location loc) {
             if (cellLocation != null) {
                 switch (mDevice.getPhoneID()) {
 
-                    case TelephonyManager.PHONE_TYPE_NONE:  // Maybe bad!
-                    case TelephonyManager.PHONE_TYPE_SIP:   // Maybe bad!
+                    case TelephonyManager.PHONE_TYPE_NONE:
+                    case TelephonyManager.PHONE_TYPE_SIP:
                     case TelephonyManager.PHONE_TYPE_GSM:
                         GsmCellLocation gsmCellLocation = (GsmCellLocation) cellLocation;
                         mDevice.mCell.setCID(gsmCellLocation.getCid()); // CID
@@ -949,7 +947,7 @@ public void onLocationChanged(Location loc) {
                         mDevice.mCell.setCID(cdmaCellLocation.getBaseStationId()); // BSID ??
                         mDevice.mCell.setLAC(cdmaCellLocation.getNetworkId());     // NID
                         mDevice.mCell.setSID(cdmaCellLocation.getSystemId());      // SID
-                        mDevice.mCell.setMNC(cdmaCellLocation.getSystemId());       // <== BUG!??     // MNC
+                        mDevice.mCell.setMNC(cdmaCellLocation.getSystemId());      // MNC <== BUG!??
                 }
             }
         }

From 81f1f1cb6a04445ea760f2513d79eeb3328dffee Mon Sep 17 00:00:00 2001
From: SecUpwN <SecUpwN@protonmail.ch>
Date: Sun, 5 Jul 2015 22:38:02 +0200
Subject: [PATCH 53/55] Shortened badge for better display on website

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index e55fe6690..ae1930cef 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 ### Android IMSI-Catcher Detector
 
-[![BuildStatus](https://travis-ci.org/SecUpwN/Android-IMSI-Catcher-Detector.svg)](https://travis-ci.org/SecUpwN/Android-IMSI-Catcher-Detector) [![DevelopmentStatus](http://img.shields.io/badge/Development_Status-ALPHA-brightgreen.svg)](https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/wiki/Development-Status) [![CoverityScan](https://scan.coverity.com/projects/3346/badge.svg)](https://scan.coverity.com/projects/3346) [![Translations](https://hosted.weblate.org/widgets/aimsicd/-/shields-badge.svg)](https://hosted.weblate.org/projects/aimsicd/strings/)
+[![BuildStatus](https://travis-ci.org/SecUpwN/Android-IMSI-Catcher-Detector.svg)](https://travis-ci.org/SecUpwN/Android-IMSI-Catcher-Detector) [![DevelopmentStatus](http://img.shields.io/badge/Development-ALPHA-brightgreen.svg)](https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/wiki/Development-Status) [![CoverityScan](https://scan.coverity.com/projects/3346/badge.svg)](https://scan.coverity.com/projects/3346) [![Translations](https://hosted.weblate.org/widgets/aimsicd/-/shields-badge.svg)](https://hosted.weblate.org/projects/aimsicd/strings/)
 [![Bountysource](https://www.bountysource.com/badge/team?team_id=40338&style=bounties_received)](https://www.bountysource.com/teams/android-imsi-catcher-detector/issues?utm_source=Android%20IMSI-Catcher%20Detector&utm_medium=shield&utm_campaign=bounties_received)
 
 --

From 6ed9ed26121d93828615e225e91af1413b2b3c32 Mon Sep 17 00:00:00 2001
From: SecUpwN <SecUpwN@protonmail.ch>
Date: Sun, 5 Jul 2015 22:38:47 +0200
Subject: [PATCH 54/55] Update CHANGELOG

---
 CHANGELOG.md | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 110 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index ce884f4d4..95b7e4915 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,116 @@
 # CHANGELOG of 'AIMSICD'
 ----------------------
 
+#### [05.07.2015 - WIP-Release v0.1.31-alpha-build-00](https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/releases/tag/v0.1.31-alpha-b00)
+
+* Removed: Commented out unused imports and re-ordered variable declarations
+* Updated: Shortened badge of `Development Status` in `README` for better display
+* Added: More clarifying code co´mments in `CellTracker.java`
+
+#### 05.07.2015 - WIP-Internal v0.1.30-alpha-build-16
+
+* Fixed: Cleanup of timestamp code in `MiscUtils.java`
+* Fixed: AIMSICD Status-Icons are now shown correctly in colored style on Android 5+
+
+
+---
+
+#### 04.07.2015 - WIP-Internal v0.1.30-alpha-build-14
+
+* Added: New Log items for MCC and MNC parameters when downloading OCID for debugging
+* Fixed: Reformatted 23 char limitation of Log TAG with our standard TAG, mTAG + "text"
+* Fixed: Corrected MiscUtils TAGs and nulls in CellTracker and improved some formatting
+* Fixed: Silenced even more XPrivacy logcat spam in DebugLogs
+
+---
+
+#### 03.07.2015 - WIP-Internal v0.1.30-alpha-build-13
+
+* Fixed: Comments in `RequestTask.java` have been fixed to reflect code changes
+* Fixed: Silenced some spammy XPrivacy items using: `XPrivacy/XRuntime:S Xposed:S`
+
+---
+
+#### 03.07.2015 - WIP-Internal v0.1.30-alpha-build-12
+
+* Added: Weblate translations badge added to our `README` for people to see progress
+* Fixed: AIMSICD should now start again properly on previously complaining devices
+
+---
+
+#### 03.07.2015 - WIP-Internal v0.1.30-alpha-build-11
+
+* Updated: `CREDITS` now reflect the latest awesome additions by our new developers
+* Fixed: Small string fixes and translation improvements to move our new [Weblate](https://hosted.weblate.org/projects/aimsicd/strings/).
+
+---
+
+#### 03.07.2015 - WIP-Internal v0.1.30-alpha-build-10
+
+* Fixed: Now truncating measured and used Lat/Lon GPS coordinates in `LocationTracker`
+
+---
+
+#### 27.06.2015 - WIP-Internal v0.1.30-alpha-build-09
+
+* Changed: Timeout value in `RequestTask.java` has been increased to 80 seconds
+* Fixed: Repaired OCIDCSV parsing which obviously temporarily broke during development
+
+---
+
+#### 27.06.2015 - WIP-Internal v0.1.30-alpha-build-08
+
+* Added: Buildozer Buildnumber to has been added to About View for development builds
+
+---
+
+#### 26.06.2015 - WIP-Internal v0.1.30-alpha-build-07
+
+* Changed: mTAG has been changed as requested to `SamsungMulticlientRilExecutor`
+* Added: Small warning within code to not remove commented out stuff without prior asking
+
+---
+
+#### 25.06.2015 - WIP-Internal v0.1.30-alpha-build-06
+
+* Updated: Log calls updated to common TAGs, added doublepoints and removed whitespaces
+
+---
+
+#### 25.06.2015 - WIP-Internal v0.1.30-alpha-build-05
+
+* Changed: Customized build script in `.travis.yml` to override CoverityScan limits
+* Changed: Made toast property static and non-final, splitting toast creation for `msgShort`
+* Removed: Commented out `LeakCanary` until this libray has reived some code improvemens
+* Fixed: Toasts are now displayed in the ccorrect position and duration to really read them
+
+---
+
+#### 24.06.2015 - WIP-Internal v0.1.30-alpha-build-04
+
+* Added: Toasts are now being cancelled on new toast to prevent overapping of toasts
+
+---
+
+#### 24.06.2015 - WIP-Internal v0.1.30-alpha-build-03
+
+* Fixed: Info box toasts are now shown longer by adding a new singleton toaster
+
+---
+
+#### 23.06.2015 - WIP-Internal v0.1.30-alpha-build-02
+
+* Changed: Context property changed to `appContext` in `DrawerMenuAdapter.java`
+* Removed: Purged `this` prefix of `appContext` as it is not needed anymore
+
+---
+
+#### 23.06.2015 - WIP-Internal v0.1.30-alpha-build-01
+
+* Changed: Help toast has been changed to long toast in `DrawerMenuAdapter.java`
+
+---
+
 #### [21.06.2015 - WIP-Release v0.1.30-alpha-build-00](https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/releases/tag/v0.1.30-alpha-b00)
 
 * Updated: Refactored OpenCellId activity for better code quality and error handling

From 04d47ca0ee9a5165e74b4b5784872ec6abe8cfaa Mon Sep 17 00:00:00 2001
From: SecUpwN <SecUpwN@protonmail.ch>
Date: Sun, 5 Jul 2015 22:40:07 +0200
Subject: [PATCH 55/55] Preparing WIP-Release v0.1.31-alpha-build-00

---
 app/src/main/AndroidManifest.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a51fdcad0..65dfea919 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.SecUpwN.AIMSICD"
-          android:versionCode="30"
-          android:versionName="0.1.30-alpha-b16">
+          android:versionCode="31"
+          android:versionName="0.1.31-alpha-b00">
 
     <!-- If we ever wanna make this a system app, we can add the following 2 lines above:
           coreApp="true"