diff --git a/CHANGELOG.md b/CHANGELOG.md
index eab25dd56..ec3b8cd65 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,48 @@
# CHANGELOG of 'AIMSICD'
----------------------
+#### [10.05.2015 - WIP-Release v0.1.27-alpha-build-00](https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/releases/tag/v0.1.27-alpha-b00)
+
+* Removed: Buggy `Toast Extender` for making toasts last longer than 3.5 seconds
+* Changed: Releases will now be published every Sunday to ease developers lifes
+* Moved: `DATABASE.md` has been moved into section `Technical Details` in WIKI
+* Fixed: Shout-out to @DimaKoz who cleared the mess done with `Toast Extender`
+* Fixed: Huge thanks to @banjaxbanjo for correctly implementing toast expansion
+
+---
+
+#### 06.05.2015 - WIP-Internal v0.1.26-alpha-build-04
+
+* Added: Implemented ability to erase the database through `Navigation Drawer`
+
+---
+
+#### 05.05.2015 - WIP-Internal v0.1.26-alpha-build-03
+
+* Updated: Tried to increase the version of the support library (now reverted)
+* Updated: Synced `buildToolsVersion` with dependencies for better support
+* Updated: Unified and resized copyright header within several source files
+* Added: Green checkmark now appears when pressing the toggle buttons
+* Added: Included AppCompat library in attempt to heal broken Buildozer builds
+* Fixed: Purged bug with doubling (and tripling, etc.) markers on the map
+
+---
+
+#### 02.05.2015 - WIP-Internal v0.1.26-alpha-build-02
+
+* Updated: More improvements of the Russian translations
+* Updated: Markers of cell towers are now drawn as immediately as possible
+* Added: Progress spinner shows on OCID download in `Antenna Map Viewer`
+* Fixed: Memory leaks and other warnings were partially eliminated
+
+---
+
+#### 02.05.2015 - WIP-Internal v0.1.26-alpha-build-01
+
+* Updated: Translation into Russian has been improved
+
+---
+
#### [01.05.2015 - WIP-Release v0.1.26-alpha-build-00](https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/releases/tag/v0.1.26-alpha-b00)
* Updated: Added [agilob](https://github.com/agilob) and [DimaKoz](https://github.com/DimaKoz) into our `CREDITS` for their awesome work
diff --git a/DATABASE.md b/DATABASE.md
deleted file mode 100644
index d9fb4acdf..000000000
--- a/DATABASE.md
+++ /dev/null
@@ -1,37 +0,0 @@
-This is Work in Progress!
-Thus this is not yet accurate and quite possibly wrong info.
-```html
-
This is some red text.
-```
-
-Introduction
-
-AIMSICD utillize several tables in a single SQLite3 database in aimsicd.db to keep track
-of all the network changes and the downloaded Open Cell ID (OCID) data. When you're making a file
-backup of the AOMSICD database, you're actually saving the various tables into individual
-.CSV files. This make it easy to manually or externally update some tables.
-
-All mentioned sqlite commands are properly documented on the SQLite website
-
-Accessing the databases:
-
-From a PC:
-
-adb shell
-su
-sqlite3 /data/data/com.SecUpwN.AIMSICD/databases/aimsicd.db
-
-From a Terminal Emulator within Android:
-
-su
-sqlite3 /data/data/com.SecUpwN.AIMSICD/databases/aimsicd.db
-*Note: You may need to install sqlite3 binaries
-
-aimsicd.db consists of four relevant tables
-
-TABLE:LOCATION_TABLE
-TABLE:CELL_TABLE
-TABLE:OPENCELLID_TABLE
-TABLE:DEFAULT_MCC_TABLE
-TABLE:SILENT_SMS_TABLE
-
diff --git a/app/build.gradle b/app/build.gradle
index 81fa7e09a..1e1c8c5d5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -129,6 +129,7 @@ dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':third_party:rootshell')
compile 'com.android.support:support-v4:19.1.0'
+ //compile 'com.android.support:appcompat-v7:22.1.1'
compile 'org.osmdroid:osmdroid-android:4.2'
//https://github.com/lp0/slf4j-android
compile 'org.slf4j:slf4j-api:1.7.12'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c8e8bb752..eb7498706 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,8 +1,8 @@
+ android:versionCode="27"
+ android:versionName="0.1.27-alpha-b00">
country
- "MCC: " + tableData.getString(1), // Mcc --> MCC
- "Lat: " + tableData.getString(2), // Lat --> lat
- "Lon: " + tableData.getString(3), // Lng --> lon
- "" + (tableData.getPosition() + 1) + " / " + count);
- adapter.addItem(data, false);
- }
- if (!tableData.isClosed()) {
- tableData.close();
- }
- return adapter;
- } else if (getString(R.string.silent_sms).equalsIgnoreCase(mTableSelected)) {
- // Table: silentsms
- BaseInflaterAdapter adapter
- = new BaseInflaterAdapter<>(new SilentSmsCardInflater());
- //int count = tableData.getCount();
- while (tableData.moveToNext()) {
- SilentSmsCardData data = new SilentSmsCardData(
- tableData.getString(0), // Address
- tableData.getString(1), // Display
- tableData.getString(2), // Class
- tableData.getString(3), // ServiceCtr
- tableData.getString(4), // Message
- tableData.getLong(5)); // Timestamp
- //"" + (tableData.getPosition() + 1) + " / " + count);
- data.setIsFakeData(isExample(data));
- adapter.addItem(data, false);
- }
- if (!tableData.isClosed()) {
- tableData.close();
+ // Table: DBe_import
+
+ BaseInflaterAdapter adapter
+ = new BaseInflaterAdapter<>(new OpenCellIdCardInflater());
+ int count = tableData.getCount();
+ while (tableData.moveToNext()) {
+ // The getString(i) index refer to the table column in the "DBe_import" table
+ // OLD opencellid(i) // New "DBe_import" column name
+ CardItemData data = new CardItemData(
+ //"Source: " + tableData.getString(0), // DBsource
+ //"RAT: " + tableData.getString(0), // RAT
+ "CID: " + tableData.getString(0), //
+ "LAC: " + tableData.getString(1), //
+ "MCC: " + tableData.getString(2), //
+ "MNC: " + tableData.getString(3), //
+ //"PSC: " + tableData.getString(7), // PSC
+ "Lat: " + tableData.getString(4), // gps_lat
+ "Lon: " + tableData.getString(5), // gps_lon
+ //"isExact: " + tableData.getString(7), // isGPSexact
+ //"Range: " + tableData.getString(7), // avg_range //
+ "AvgSignal: " + tableData.getString(6), // avg_signal
+ "Samples: " + tableData.getString(7), // samples // NOTE: #7 is range from ocid csv
+ //"first: " + tableData.getString(7), // time_first
+ //"last: " + tableData.getString(7), // time_last
+ //"reject: " + tableData.getString(7), // rej_cause
+ "" + (tableData.getPosition() + 1) + " / " + count);
+ adapter.addItem(data, false);
+ }
+ if (!tableData.isClosed()) {
+ tableData.close();
+ }
+ return adapter;
}
- return adapter;
- } else if (getString(R.string.measured_signal_strengths).equalsIgnoreCase(mTableSelected)) {
- // ToDo: merge into "DBi_measure:rx_signal"
- BaseInflaterAdapter adapter
- = new BaseInflaterAdapter<>(new MeasuredCellStrengthCardInflater());
- //int count = tableData.getCount();
- while (tableData.moveToNext()) {
- MeasuredCellStrengthCardData data = new MeasuredCellStrengthCardData(
- tableData.getInt(0),
- tableData.getInt(1),
- tableData.getLong(2));
- //"" + (tableData.getPosition() + 1) + " / " + count);
- adapter.addItem(data, false);
+ case DEFAULT_MCC_LOCATIONS: {
+
+ // Table: defaultlocation
+ BaseInflaterAdapter adapter
+ = new BaseInflaterAdapter<>(new DefaultLocationCardInflater());
+ int count = tableData.getCount();
+ while (tableData.moveToNext()) {
+ CardItemData data = new CardItemData(
+ "Country: " + tableData.getString(0),// Country --> country
+ "MCC: " + tableData.getString(1), // Mcc --> MCC
+ "Lat: " + tableData.getString(2), // Lat --> lat
+ "Lon: " + tableData.getString(3), // Lng --> lon
+ "" + (tableData.getPosition() + 1) + " / " + count);
+ adapter.addItem(data, false);
+ }
+ if (!tableData.isClosed()) {
+ tableData.close();
+ }
+ return adapter;
}
- if (!tableData.isClosed()) {
- tableData.close();
+ case SILENT_SMS: {
+ // Table: silentsms
+ BaseInflaterAdapter adapter
+ = new BaseInflaterAdapter<>(new SilentSmsCardInflater());
+ //int count = tableData.getCount();
+ while (tableData.moveToNext()) {
+ SilentSmsCardData data = new SilentSmsCardData(
+ tableData.getString(0), // Address
+ tableData.getString(1), // Display
+ tableData.getString(2), // Class
+ tableData.getString(3), // ServiceCtr
+ tableData.getString(4), // Message
+ tableData.getLong(5)); // Timestamp
+ //"" + (tableData.getPosition() + 1) + " / " + count);
+ data.setIsFakeData(isExample(data));
+ adapter.addItem(data, false);
+ }
+ if (!tableData.isClosed()) {
+ tableData.close();
+ }
+ return adapter;
}
- return adapter;
- } else if (getString(R.string.eventlog).equalsIgnoreCase(mTableSelected)) {
-
- // Table: EventLog
- // Where: Table is displayed with EventLogCardInflater and EventLogItemData
- BaseInflaterAdapter adapter
- = new BaseInflaterAdapter<>(new EventLogCardInflater());
-
- int count = tableData.getCount();
- while (tableData.moveToNext()) {
- EventLogItemData data = new EventLogItemData(
- "Time: " + tableData.getString(0), // time
- "LAC: " + tableData.getInt(1), // LAC
- "CID: " + tableData.getInt(2), // CID
- "PSC: " + tableData.getInt(3), // PSC
- "Lat: " + tableData.getDouble(4), // gpsd_lat
- "Lon: " + tableData.getDouble(5), // gpsd_lon
- "Accuracy: " + tableData.getInt(6), // gpsd_accu (accuracy in [m])
- "DetID: " + tableData.getInt(7), // DF_id
- "Event: " + tableData.getString(8), // DF_desc
- "" + (tableData.getPosition() + 1) + " / " + count);
- data.setIsFakeData(isExample(data));
- adapter.addItem(data, false);
+ case MEASURED_SIGNAL_STRENGTHS: {
+ // ToDo: merge into "DBi_measure:rx_signal"
+ BaseInflaterAdapter adapter
+ = new BaseInflaterAdapter<>(new MeasuredCellStrengthCardInflater());
+ //int count = tableData.getCount();
+ while (tableData.moveToNext()) {
+ MeasuredCellStrengthCardData data = new MeasuredCellStrengthCardData(
+ tableData.getInt(0),
+ tableData.getInt(1),
+ tableData.getLong(2));
+ //"" + (tableData.getPosition() + 1) + " / " + count);
+ adapter.addItem(data, false);
+ }
+ if (!tableData.isClosed()) {
+ tableData.close();
+ }
+ return adapter;
}
- if (!tableData.isClosed()) {
- tableData.close();
+ case EVENT_LOG: {
+
+ // Table: EventLog
+ // Where: Table is displayed with EventLogCardInflater and EventLogItemData
+ BaseInflaterAdapter adapter
+ = new BaseInflaterAdapter<>(new EventLogCardInflater());
+
+ int count = tableData.getCount();
+ while (tableData.moveToNext()) {
+ EventLogItemData data = new EventLogItemData(
+ "Time: " + tableData.getString(0), // time
+ "LAC: " + tableData.getInt(1), // LAC
+ "CID: " + tableData.getInt(2), // CID
+ "PSC: " + tableData.getInt(3), // PSC
+ "Lat: " + tableData.getDouble(4), // gpsd_lat
+ "Lon: " + tableData.getDouble(5), // gpsd_lon
+ "Accuracy: " + tableData.getInt(6), // gpsd_accu (accuracy in [m])
+ "DetID: " + tableData.getInt(7), // DF_id
+ "Event: " + tableData.getString(8), // DF_desc
+ "" + (tableData.getPosition() + 1) + " / " + count);
+ data.setIsFakeData(isExample(data));
+ adapter.addItem(data, false);
+ }
+ if (!tableData.isClosed()) {
+ tableData.close();
+ }
+ return adapter;
}
- return adapter;
/* // Table: EventLog
case "EventLog Data": {
@@ -342,8 +366,8 @@ private BaseInflaterAdapter BuildTable(Cursor tableData) {
}
return adapter;
}
-*/
-/*
+ */
+ /*
// Maybe we can skip this one?
// Table: DetectionFlags
case "DetectionFlags Data": {
@@ -436,7 +460,7 @@ private BaseInflaterAdapter BuildTable(Cursor tableData) {
}
return adapter;
}
-*/
+ */
/**
* TODO:
@@ -449,7 +473,7 @@ private BaseInflaterAdapter BuildTable(Cursor tableData) {
*
* Once implemented, remove this or make different default.
*/
- } else {
+ default:
BaseInflaterAdapter adapter
= new BaseInflaterAdapter<>( new CellCardInflater() );
int count = tableData.getCount();
@@ -468,7 +492,7 @@ private BaseInflaterAdapter BuildTable(Cursor tableData) {
tableData.close();
}
return adapter;
- }
+ }
} else {
return null;
}
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/map/CellTowerGridMarkerClusterer.java b/app/src/main/java/com/SecUpwN/AIMSICD/map/CellTowerGridMarkerClusterer.java
index 50ca44ae3..64102aa2d 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/map/CellTowerGridMarkerClusterer.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/map/CellTowerGridMarkerClusterer.java
@@ -1,22 +1,9 @@
package com.SecUpwN.AIMSICD.map;
-import android.app.AlertDialog;
import android.content.Context;
-import android.content.DialogInterface;
-import android.graphics.Color;
-import android.graphics.drawable.BitmapDrawable;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.TableRow;
-import android.widget.TextView;
-
-import com.SecUpwN.AIMSICD.R;
import org.osmdroid.bonuspack.clustering.GridMarkerClusterer;
-import org.osmdroid.views.MapView;
-import org.osmdroid.views.overlay.ItemizedIconOverlay;
-import java.util.LinkedList;
import java.util.List;
/**
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/service/AimsicdService.java b/app/src/main/java/com/SecUpwN/AIMSICD/service/AimsicdService.java
index d0e5bf53f..4d7c42e4f 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/service/AimsicdService.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/service/AimsicdService.java
@@ -1,39 +1,7 @@
-/* Android IMSI Catcher Detector
-* Copyright (C) 2014
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
-* (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You may obtain a copy of the License at
-* https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/blob/master/LICENSE
-*/
-
-/*
- * Portions of this software have been copied and modified from
- * Femtocatcher https://github.com/iSECPartners/femtocatcher
- *
- * Copyright (C) 2013 iSEC Partners
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+/* Android IMSI-Catcher Detector | (c) AIMSICD Privacy Project
+ * -----------------------------------------------------------
+ * LICENSE: http://git.io/vJaf6 | TERMS: http://git.io/vJMf5
+ * -----------------------------------------------------------
*/
/*
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 a69c2d896..79efea6da 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/service/CellTracker.java
@@ -132,7 +132,7 @@ public CellTracker(Context context, SignalStrengthTracker sst) {
TinyDb tinydb = new TinyDb(context);
everytime we need to use tinydb in this class
*/
- tinydb = new TinyDB(context);
+ tinydb = TinyDB.getInstance();
// TelephonyManager provides system details
tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
prefs = context.getSharedPreferences(AimsicdService.SHARED_PREFERENCES_BASENAME, 0);
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/BaseAsyncTask.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/BaseAsyncTask.java
new file mode 100644
index 000000000..e41f107ee
--- /dev/null
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/BaseAsyncTask.java
@@ -0,0 +1,60 @@
+/* Android IMSI-Catcher Detector | (c) AIMSICD Privacy Project
+ * -----------------------------------------------------------
+ * LICENSE: http://git.io/vJaf6 | TERMS: http://git.io/vJMf5
+ * -----------------------------------------------------------
+ */
+package com.SecUpwN.AIMSICD.utils;
+
+
+import android.app.Activity;
+import android.os.AsyncTask;
+
+import com.SecUpwN.AIMSICD.AppAIMSICD;
+
+import java.lang.ref.WeakReference;
+
+public abstract class BaseAsyncTask extends AsyncTask {
+ protected AppAIMSICD mApp;
+ protected WeakReference mWeakReferenceActivity;
+
+ public BaseAsyncTask(Activity activity) {
+ mWeakReferenceActivity = new WeakReference<>(activity);
+ mApp = (AppAIMSICD) activity.getApplication();
+ }
+
+ public void setActivity(Activity activity) {
+ if (activity == null) {
+ mWeakReferenceActivity.clear();
+ onActivityDetached();
+ } else {
+ onActivityAttached();
+ mWeakReferenceActivity = new WeakReference<>(activity);
+ }
+ }
+
+ protected void onActivityAttached() {
+ }
+
+ protected void onActivityDetached() {
+ }
+
+ @Override
+ protected void onPreExecute() {
+ mApp.addTask(mWeakReferenceActivity.get(), this);
+ }
+
+ @Override
+ protected void onPostExecute(TResult result) {
+ mApp.removeTask(this);
+ }
+
+ @Override
+ protected void onCancelled() {
+ mApp.removeTask(this);
+ }
+
+ protected Activity getActivity() {
+ return mWeakReferenceActivity.get();
+ }
+
+}
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 33047551f..e6158ed83 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/Helpers.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/Helpers.java
@@ -20,15 +20,19 @@
import android.app.AlertDialog;
import android.content.Context;
+import android.content.DialogInterface;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
+import android.os.CountDownTimer;
import android.os.Environment;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
+import android.view.Gravity;
import android.widget.Toast;
import com.SecUpwN.AIMSICD.R;
+import com.SecUpwN.AIMSICD.activities.MapViewerOsmDroid;
import com.SecUpwN.AIMSICD.service.CellTracker;
import java.io.BufferedReader;
@@ -71,7 +75,7 @@
*
* Issues: AS complaints that several of these methods are not used...
*
- * ChangeLog:
+ * ChangeLog: 2015-05-08 SecUpwN Added Toast Extender for longer toasts
*
*/
public class Helpers {
@@ -80,23 +84,34 @@ 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
- * (Predefined in AOS to 3500 ms = 3.5 sec)
- *
+ * 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) {
- new Handler(context.getMainLooper()).post(new Runnable() {
- @Override
- public void run() {
- Toast.makeText(context, msg.trim(), Toast.LENGTH_LONG).show();
- }
- });
- }
+ 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();
+ }
+
+
}
/**
@@ -128,7 +143,7 @@ public static void sendMsg(Context context, String msg) {
msgLong(context, msg);
}
}
-
+
/**
* Return a timestamp
*
@@ -277,9 +292,15 @@ public static void getOpenCellData(Context context, Cell cell, char type) {
new RequestTask(context, type).execute(sb.toString());
}
} else {
+ if(context instanceof MapViewerOsmDroid) {
+ ((MapViewerOsmDroid)context).setRefreshActionButtonState(false);
+ }
Helpers.sendMsg(context, context.getString(R.string.no_opencellid_key_detected));
}
} else {
+ if(context instanceof MapViewerOsmDroid) {
+ ((MapViewerOsmDroid)context).setRefreshActionButtonState(false);
+ }
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(R.string.no_network_connection_title)
.setMessage(R.string.no_network_connection_message);
@@ -565,5 +586,33 @@ public static String convertStreamToString(InputStream is) throws Exception {
return sb.toString();
}
+ /**
+ * Very cool method. Completely erases the entire database.
+ * Apply on medical prescription.
+ * Also asks the user, whether he wants to erase its database ...
+ *
+ * @param pContext Context of Activity
+ */
+ public static void askAndDeleteDb(final Context pContext) {
+ AlertDialog lAlertDialog = new AlertDialog.Builder(pContext)
+ .setNegativeButton(R.string.open_cell_id_button_cancel, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ //Do nothing
+ }
+ })
+ .setPositiveButton(R.string.open_cell_id_button_ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ //FIXME need to remove hardcoded string into constants
+ pContext.deleteDatabase("aimsicd.db");
+ }
+ })
+ .setMessage(pContext.getString(R.string.clear_database_question))
+ .setTitle(R.string.clear_database)
+ .setCancelable(false)
+ .setIcon(R.drawable.ic_action_delete_database).create();
+ lAlertDialog.show();
+ }
}
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/OemCommands.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/OemCommands.java
index 59e81a29e..356c282cd 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/OemCommands.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/OemCommands.java
@@ -1,20 +1,8 @@
-/* Android IMSI Catcher Detector
- * Copyright (C) 2014
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You may obtain a copy of the License at
- * https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/blob/master/LICENSE
+/* Android IMSI-Catcher Detector | (c) AIMSICD Privacy Project
+ * -----------------------------------------------------------
+ * LICENSE: http://git.io/vJaf6 | TERMS: http://git.io/vJMf5
+ * -----------------------------------------------------------
*/
-
package com.SecUpwN.AIMSICD.utils;
import android.util.Log;
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 a8bd238b0..13531eddf 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/RequestTask.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/RequestTask.java
@@ -1,5 +1,6 @@
package com.SecUpwN.AIMSICD.utils;
+import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
@@ -10,9 +11,11 @@
import android.util.Log;
import com.SecUpwN.AIMSICD.AIMSICD;
+import com.SecUpwN.AIMSICD.BuildConfig;
import com.SecUpwN.AIMSICD.R;
import com.SecUpwN.AIMSICD.activities.MapViewerOsmDroid;
import com.SecUpwN.AIMSICD.adapters.AIMSICDDbAdapter;
+import com.SecUpwN.AIMSICD.constants.TinyDbKeys;
import com.SecUpwN.AIMSICD.service.AimsicdService;
import com.SecUpwN.AIMSICD.service.CellTracker;
//import com.SecUpwN.AIMSICD.utils.Helpers;
@@ -87,7 +90,7 @@
* [ ] App is blocked while downloading.
*
*/
-public class RequestTask extends AsyncTask {
+public class RequestTask extends BaseAsyncTask {
//Calling from the menu more extensive(more difficult for sever),
// we have to give more time for the server response
@@ -105,14 +108,15 @@ public class RequestTask extends AsyncTask {
public static final String mTAG = "RequestTask";
private final AIMSICDDbAdapter mDbAdapter;
- private final Context mContext;
+ private final Context mAppContext;
private final char mType;
private int mTimeOut;
public RequestTask(Context context, char type) {
+ super((Activity)context);
mType = type;
- mContext = context;
- mDbAdapter = new AIMSICDDbAdapter(mContext);
+ mAppContext = context.getApplicationContext();
+ mDbAdapter = new AIMSICDDbAdapter(mAppContext);
mTimeOut = REQUEST_TIMEOUT_MAPS;
}
@@ -171,12 +175,13 @@ protected String doInBackground(String... commandString) {
}
return "Successful";
} else {
- Helpers.msgLong(mContext, mContext.getString(R.string.no_data_for_publishing));
+ Helpers.msgLong(mAppContext, mAppContext.getString(R.string.no_data_for_publishing));
return null;
}
} catch (Exception e) {
Log.e(TAG, mTAG + ": Upload OpenCellID data Exception - " + e.getMessage());
+ e.printStackTrace();
}
// DOWNLOADING...
@@ -203,13 +208,14 @@ protected String doInBackground(String... commandString) {
if (urlConnection.getResponseCode() != 200) {
try {
String error = Helpers.convertStreamToString(urlConnection.getErrorStream());
- Helpers.msgLong(mContext, mContext.getString(R.string.download_error) + " " + error);
+ Helpers.msgLong(mAppContext, mAppContext.getString(R.string.download_error) + " " + error);
Log.e(TAG, mTAG + ": Download OCID data error: " + error);
} catch (Exception e) {
- Helpers.msgLong(mContext, mContext.getString(R.string.download_error) + " "
+ Helpers.msgLong(mAppContext, mAppContext.getString(R.string.download_error) + " "
+ e.getClass().getName() + " - "
+ e.getMessage());
Log.e(TAG, mTAG + ": Download OCID exception: " + e);
+ e.printStackTrace();
}
return "Error";
} else {
@@ -308,21 +314,21 @@ protected void onProgressUpdate(Integer... values) {
protected void onPostExecute(String result) {
super.onPostExecute(result);
AIMSICD.mProgressBar.setProgress(0);
- TinyDB tinydb = new TinyDB(mContext);
+ TinyDB tinydb = TinyDB.getInstance();
switch (mType) {
case DBE_DOWNLOAD_REQUEST:
if (result != null && result.equals("Successful")) {
mDbAdapter.open();
if (mDbAdapter.updateOpenCellID()) {
- Helpers.msgShort(mContext, mContext.getString(R.string.opencellid_data_successfully_received));
+ Helpers.msgShort(mAppContext, mAppContext.getString(R.string.opencellid_data_successfully_received));
}
mDbAdapter.checkDBe();
mDbAdapter.close();
tinydb.putBoolean("ocid_downloaded", true);
} else {
- Helpers.msgLong(mContext, mContext.getString(R.string.error_retrieving_opencellid_data));
+ Helpers.msgLong(mAppContext, mAppContext.getString(R.string.error_retrieving_opencellid_data));
}
break;
@@ -331,31 +337,33 @@ protected void onPostExecute(String result) {
mDbAdapter.open();
if (mDbAdapter.updateOpenCellID()) {
Intent intent = new Intent(MapViewerOsmDroid.updateOpenCellIDMarkers);
- LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
- Helpers.msgShort(mContext, mContext.getString(R.string.opencellid_data_successfully_received_markers_updated));
+ LocalBroadcastManager.getInstance(mAppContext).sendBroadcast(intent);
+ Helpers.msgShort(mAppContext, mAppContext.getString(R.string.opencellid_data_successfully_received_markers_updated));
mDbAdapter.checkDBe();
mDbAdapter.close();
tinydb.putBoolean("ocid_downloaded", true);
}
} else {
- Helpers.msgLong(mContext, mContext.getString(R.string.error_retrieving_opencellid_data));
+ Helpers.msgLong(mAppContext, mAppContext.getString(R.string.error_retrieving_opencellid_data));
}
+ showHideMapProgressBar(false);
+ TinyDB.getInstance().putBoolean(TinyDbKeys.FINISHED_LOAD_IN_MAP, true);
break;
case DBE_UPLOAD_REQUEST:
if (result != null && result.equals("Successful")) {
- Helpers.msgShort(mContext, mContext.getString(R.string.uploaded_bts_data_successfully));
+ Helpers.msgShort(mAppContext, mAppContext.getString(R.string.uploaded_bts_data_successfully));
} else {
- Helpers.msgLong(mContext, mContext.getString(R.string.error_uploading_bts_data));
+ Helpers.msgLong(mAppContext, mAppContext.getString(R.string.error_uploading_bts_data));
}
break;
case RESTORE_DATABASE:
if (result != null && result.equals("Successful")) {
- Helpers.msgShort(mContext, mContext.getString(R.string.restore_database_completed));
+ Helpers.msgShort(mAppContext, mAppContext.getString(R.string.restore_database_completed));
} else {
- Helpers.msgLong(mContext, mContext.getString(R.string.error_restoring_database));
+ Helpers.msgLong(mAppContext, mAppContext.getString(R.string.error_restoring_database));
}
break;
@@ -365,15 +373,50 @@ protected void onPostExecute(String result) {
// strings.xml: pref_last_db_backup_version
//tinydb.putInt(mContext.getString(R.string.pref_last_database_backup_version), AIMSICDDbAdapter.DATABASE_VERSION); //TODO
tinydb.putInt("pref_last_db_backup_version", AIMSICDDbAdapter.DATABASE_VERSION);
+ Activity lActivity = getActivity();
- final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
- builder.setTitle(R.string.database_export_successful).setMessage(
- mContext.getString(R.string.database_backup_successfully_saved_to) + "\n" + AIMSICDDbAdapter.FOLDER);
- builder.create().show();
+ if(lActivity != null) {//Activity may be detached or destroyed
+ final AlertDialog.Builder builder = new AlertDialog.Builder(lActivity);
+ builder.setTitle(R.string.database_export_successful).setMessage(
+ lActivity.getString(R.string.database_backup_successfully_saved_to) + "\n" + AIMSICDDbAdapter.FOLDER);
+ builder.create().show();
+ }
} else {
- Helpers.msgLong(mContext, mContext.getString(R.string.error_backing_up_data));
+ Helpers.msgLong(mAppContext, mAppContext.getString(R.string.error_backing_up_data));
}
//break;
}
}
+
+ @Override
+ protected void onActivityDetached() {
+ if (mType == DBE_DOWNLOAD_REQUEST_FROM_MAP) {
+ showHideMapProgressBar(false);
+ }
+ }
+
+ @Override
+ protected void onActivityAttached() {
+ if (mType == DBE_DOWNLOAD_REQUEST_FROM_MAP) {
+ showHideMapProgressBar(true);
+ }
+ }
+
+ @Override
+ protected void onCancelled() {
+ super.onCancelled();
+ if (mType == DBE_DOWNLOAD_REQUEST_FROM_MAP) {
+ showHideMapProgressBar(false);
+ }
+ }
+
+ private void showHideMapProgressBar(boolean pFlag) {
+ Activity lActivity = getActivity();
+ if(BuildConfig.DEBUG && lActivity == null) {
+ Log.v(TAG, "BaseTask showHideMapProgressBar() activity is null");
+ }
+ if (lActivity != null && lActivity instanceof MapViewerOsmDroid) {
+ ((MapViewerOsmDroid) lActivity).setRefreshActionButtonState(pFlag);
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/SecUpwN/AIMSICD/utils/TinyDB.java b/app/src/main/java/com/SecUpwN/AIMSICD/utils/TinyDB.java
index abdef4ef6..539953201 100644
--- a/app/src/main/java/com/SecUpwN/AIMSICD/utils/TinyDB.java
+++ b/app/src/main/java/com/SecUpwN/AIMSICD/utils/TinyDB.java
@@ -48,9 +48,11 @@
* https://github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo/
*
* Usage:
+ *
+ * 1)
* import com.SecUpwN.AIMSICD.utils.TinyDB;
* ...
- * TinyDB tinydb = new TinyDB(context); //Possibly mContext if already declared.
+ * TinyDB tinydb = TinyDB.getInstance(); //Possibly mContext if already declared in AppAIMSICD via method init(AppContext).
*
* tinydb.putInt("clickCount", 2);
* tinydb.putFloat("xPoint", 3.6f);
@@ -60,6 +62,14 @@
* tinydb.putList("MyUsers", mUsersArray);
* tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);
*
+ * 2)
+ * import com.SecUpwN.AIMSICD.utils.TinyDB;
+ * ...
+ * TinyDB.getInstance().putInt("clickCount", 2);
+ * TinyDB.getInstance().putFloat("xPoint", 3.6f);
+ *
+ * and etc.
+ *
*
*/
public class TinyDB {
@@ -69,7 +79,9 @@ public class TinyDB {
File mFolder = null;
public static String lastImagePath = "";
- public TinyDB(Context appContext) {
+ private TinyDB() {}
+
+ public void init(Context appContext) {
mContext = appContext;
preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
}
@@ -373,5 +385,13 @@ public void unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnShare
preferences.unregisterOnSharedPreferenceChangeListener(listener);
}
+ private static class InstanceHolder {
+ private static final TinyDB INSTANCE = new TinyDB();
+ }
+
+ public static TinyDB getInstance() {
+ return InstanceHolder.INSTANCE;
+ }
+
}
diff --git a/app/src/main/res/drawable-hdpi/ic_map_pin_blue.png b/app/src/main/res/drawable-hdpi/ic_map_pin_blue.png
index 8654376b2..ec5385c51 100644
Binary files a/app/src/main/res/drawable-hdpi/ic_map_pin_blue.png and b/app/src/main/res/drawable-hdpi/ic_map_pin_blue.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_map_pin_green.png b/app/src/main/res/drawable-hdpi/ic_map_pin_green.png
index 483a50db0..55269c678 100644
Binary files a/app/src/main/res/drawable-hdpi/ic_map_pin_green.png and b/app/src/main/res/drawable-hdpi/ic_map_pin_green.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_map_pin_orange.png b/app/src/main/res/drawable-hdpi/ic_map_pin_orange.png
index fae7baf28..030dbbec5 100644
Binary files a/app/src/main/res/drawable-hdpi/ic_map_pin_orange.png and b/app/src/main/res/drawable-hdpi/ic_map_pin_orange.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_map_pin_red.png b/app/src/main/res/drawable-hdpi/ic_map_pin_red.png
index fbbaded67..fb7c0c2b1 100644
Binary files a/app/src/main/res/drawable-hdpi/ic_map_pin_red.png and b/app/src/main/res/drawable-hdpi/ic_map_pin_red.png differ
diff --git a/app/src/main/res/drawable-hdpi/track_cell.png b/app/src/main/res/drawable-hdpi/track_cell.png
index e12cd28a2..69c019e14 100644
Binary files a/app/src/main/res/drawable-hdpi/track_cell.png and b/app/src/main/res/drawable-hdpi/track_cell.png differ
diff --git a/app/src/main/res/drawable-ldpi/track_cell.png b/app/src/main/res/drawable-ldpi/track_cell.png
index b78f07e48..69c019e14 100644
Binary files a/app/src/main/res/drawable-ldpi/track_cell.png and b/app/src/main/res/drawable-ldpi/track_cell.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_map_pin_blue.png b/app/src/main/res/drawable-mdpi/ic_map_pin_blue.png
index af7772971..b5045629a 100644
Binary files a/app/src/main/res/drawable-mdpi/ic_map_pin_blue.png and b/app/src/main/res/drawable-mdpi/ic_map_pin_blue.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_map_pin_green.png b/app/src/main/res/drawable-mdpi/ic_map_pin_green.png
index 2660b56d4..fb208d11b 100644
Binary files a/app/src/main/res/drawable-mdpi/ic_map_pin_green.png and b/app/src/main/res/drawable-mdpi/ic_map_pin_green.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_map_pin_orange.png b/app/src/main/res/drawable-mdpi/ic_map_pin_orange.png
index 2f9a84ea0..760e9d68c 100644
Binary files a/app/src/main/res/drawable-mdpi/ic_map_pin_orange.png and b/app/src/main/res/drawable-mdpi/ic_map_pin_orange.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_map_pin_red.png b/app/src/main/res/drawable-mdpi/ic_map_pin_red.png
index 2285f4b8f..7a96e9d2b 100644
Binary files a/app/src/main/res/drawable-mdpi/ic_map_pin_red.png and b/app/src/main/res/drawable-mdpi/ic_map_pin_red.png differ
diff --git a/app/src/main/res/drawable-mdpi/track_cell.png b/app/src/main/res/drawable-mdpi/track_cell.png
index e12cd28a2..69c019e14 100644
Binary files a/app/src/main/res/drawable-mdpi/track_cell.png and b/app/src/main/res/drawable-mdpi/track_cell.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_map_pin_blue.png b/app/src/main/res/drawable-xhdpi/ic_map_pin_blue.png
index adaeaa27d..3836c846a 100644
Binary files a/app/src/main/res/drawable-xhdpi/ic_map_pin_blue.png and b/app/src/main/res/drawable-xhdpi/ic_map_pin_blue.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_map_pin_green.png b/app/src/main/res/drawable-xhdpi/ic_map_pin_green.png
index a215caa26..ab5912ffd 100644
Binary files a/app/src/main/res/drawable-xhdpi/ic_map_pin_green.png and b/app/src/main/res/drawable-xhdpi/ic_map_pin_green.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_map_pin_orange.png b/app/src/main/res/drawable-xhdpi/ic_map_pin_orange.png
index b15d63779..17ad647ad 100644
Binary files a/app/src/main/res/drawable-xhdpi/ic_map_pin_orange.png and b/app/src/main/res/drawable-xhdpi/ic_map_pin_orange.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_map_pin_red.png b/app/src/main/res/drawable-xhdpi/ic_map_pin_red.png
index ed022e461..84ee365d9 100644
Binary files a/app/src/main/res/drawable-xhdpi/ic_map_pin_red.png and b/app/src/main/res/drawable-xhdpi/ic_map_pin_red.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_map_pin_blue.png b/app/src/main/res/drawable-xxhdpi/ic_map_pin_blue.png
index c550c9d6f..3fbd6a9b7 100644
Binary files a/app/src/main/res/drawable-xxhdpi/ic_map_pin_blue.png and b/app/src/main/res/drawable-xxhdpi/ic_map_pin_blue.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_map_pin_green.png b/app/src/main/res/drawable-xxhdpi/ic_map_pin_green.png
index cfbd336c1..58dc40457 100644
Binary files a/app/src/main/res/drawable-xxhdpi/ic_map_pin_green.png and b/app/src/main/res/drawable-xxhdpi/ic_map_pin_green.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_map_pin_orange.png b/app/src/main/res/drawable-xxhdpi/ic_map_pin_orange.png
index f73f3a724..6fc60f1bb 100644
Binary files a/app/src/main/res/drawable-xxhdpi/ic_map_pin_orange.png and b/app/src/main/res/drawable-xxhdpi/ic_map_pin_orange.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_map_pin_red.png b/app/src/main/res/drawable-xxhdpi/ic_map_pin_red.png
index d5582947c..c75de1c31 100644
Binary files a/app/src/main/res/drawable-xxhdpi/ic_map_pin_red.png and b/app/src/main/res/drawable-xxhdpi/ic_map_pin_red.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_delete_database.png b/app/src/main/res/drawable-xxxhdpi/ic_action_delete_database.png
new file mode 100644
index 000000000..2a4fdaaf7
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_action_delete_database.png differ
diff --git a/app/src/main/res/layout/actionbar_indeterminate_progress.xml b/app/src/main/res/layout/actionbar_indeterminate_progress.xml
new file mode 100644
index 000000000..59791314b
--- /dev/null
+++ b/app/src/main/res/layout/actionbar_indeterminate_progress.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_spinner_db_viewer.xml b/app/src/main/res/layout/item_spinner_db_viewer.xml
new file mode 100644
index 000000000..6d5340521
--- /dev/null
+++ b/app/src/main/res/layout/item_spinner_db_viewer.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
\ 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 510e0f962..413545cb5 100644
--- a/app/src/main/res/values-pl/translatable_strings.xml
+++ b/app/src/main/res/values-pl/translatable_strings.xml
@@ -23,6 +23,8 @@
Wszystkie informacje o obecnej komórce
Wskaźnik szyfrowania
Wyczyść bazę danych
+
+ All data will be deleted.\nAre you sure?
Wpisz komendę AT tutaj
Aktywność bazy danych
Status danych
@@ -249,7 +251,7 @@
Ta okolica nie jest bezpieczna. Powinieneś się oddalić!
Wykryto manipulację: ktoś próbuje zdalnie manipulować Twoim telefonem.
Kliknij na ikonę by uzyskać więcej informacji.
- Pobierz bazę danych OCPID.
+ Pobierz bazę danych OCID.
Wyślij dane o lokalnych BTS do OCID.
Wczytaj i wyślij logi.
Zakończ działanie aplikacji.
diff --git a/app/src/main/res/values-ru/translatable_strings.xml b/app/src/main/res/values-ru/translatable_strings.xml
index 841680cde..e7c832387 100644
--- a/app/src/main/res/values-ru/translatable_strings.xml
+++ b/app/src/main/res/values-ru/translatable_strings.xml
@@ -5,7 +5,7 @@
Слежение
Телефон/SIM подробнее
- Просмотр карты антенн
+ Карта антенн
Просмотр базы данных
Выход
OK
@@ -38,8 +38,8 @@
Переключить Femtocell
Сделать резервную копию базы данных
-
Очистить/Сбросить базу данных
+ Все данные будут стерты.\nВы уверены?
Восстановить базу данных
Параметры
@@ -113,39 +113,39 @@
ID базовой станции:
- Location Services Disabled
- You cannot track GPS data without enabling Location Services. Enable them now?
+ Определение координат отключено
+ Вы не можете отслеживать данные GPS без сервиса определения координат. Включить его сейчас?
- System Settings
- Auto Start
- Automatically start service on boot
- Persistent Service
- Service will continue to run after exiting the application (uncheck to fully close)
- Protection Settings
- Cell Tracking
- Enable Automatic Cell Tracking
- Femtocell Detection
- (currently CDMA Phones ONLY)
- Femtocell Protection
- Enforce Airplane Mode when Femtocell detected (re-enable network manually)
- Interface Settings
- Icons
- Icon Theme Selection
- Refresh Rate
- Control the frequency of device updates
- OpenCellID Settings
- OpenCellID API Key
- Enter your OpenCellID API Key here
- Cell Monitoring
- Enable Automatic Cell Monitoring
- Request OCID API Key
- Request API key for OpenCellID data access
+ Системные настройки
+ Автоматический старт
+ Автоматический запуск сервиса при загрузке
+ Постоянный сервис
+ Сервис будет продолжать работать после выхода из приложения (снимите флажок полностью закрыть)
+ Настройки защиты
+ Отслеживание сотовой сети
+ Включение автоматического отслеживания сотовой сети
+ Обнаружение фемтосот
+ (в настоящее время только CDMA телефоны)
+ Защита от фемтосот
+ Принудительный режим полета, когда фемтосот обнаружена (подключение к сети вручную)
+ Настройки интерфейса
+ Иконки
+ Выбор схемы иконок
+ Частота обновления
+ Управление частотой обновления устройства
+ Настройки OpenCellID
+ Ключ OpenCellID API
+ Введите здесь ваш ключ OpenCellID API
+ Мониторинг сотовых сетей
+ Включить автоматический мониторинг сотовых сетей
+ Запрос ключа OCID API
+ Запрос ключа API для доступа к данным OpenCellID
- Map Viewer Preferences
- Map Type
- Display Map in different styles
+ Настроки просмотра карты
+ Тип карты
+ Отображать карту в различных стилях
CID:
@@ -153,14 +153,14 @@
MCC:
MNC:
PC:
- Samples:
- OpenCellID Data
- Lat:
- Lon:
+ Образцы:
+ Данные OpenCellID
+ Широта:
+ Долгота:
- Load Data
- Select Table
+ Загрузка данных
+ Выберите таблицу
- @string/unique_bts_data
- @string/bts_measurements
@@ -170,48 +170,48 @@
- @string/measured_signal_strengths
- @string/eventlog
- Export Successful
+ Экспорт успешен
- AT Command Interface
- Response:
- Execute
- Current Serial Device:
- Select Serial Device
- Detected Devices:
- Timeout:
- Select Timeout
- Enter AT command here.
+ Командный интерфейс AT
+ Ответ:
+ Выполнение
+ Текущее Serial Device:
+ Выберите Serial Device
+ Обнаружены устройства:
+ Задержка времени:
+ Выберите задержку времени
+ Введите команду AT здесь.
- Silent SMS Intercepted
- Silent SMS Message has been intercepted!\n\nDetails are available through the Database Viewer.
- Table contains no data to display.
+ Бесшумная SMS перехвачена
+ Бесшумная SMS была перехвачена!\n\nПодробная информация доступна через просмотр базы данных.
+ Таблица не содержит никаких данных для отображения.
- OpenCellID API Key
- Click OK to request an API key from OpenCellID.org. This will enable you to download their data and view it in the map. It will also enable you to upload cell data. Note that if you do not upload cell data within 20 days, your API key may become inactive.
- Error getting key:
- Saved new API key
+ OpenCellID ключ API
+ Нажмите OK для запроса ключа API из OpenCellID.org. Это позволит вам скачать их данные и просмотреть его на карте. Это также позволит вам выгружать данные сотовых сетей. Обратите внимание, что если вы не выгружать данные сотовых сетей в течение 20 дней, ваш ключ API может стать неактивным.
+ Ошибка получения ключа:
+ Сохранен новый ключ API
- Debug Logs
- Clear
- Copy
- Logs copied to clipboard
- Stop
- Start
+ Логи отладки
+ Очистить
+ Копировать
+ Логи скопированы в буфер обмена
+ Стоп
+ Старт
- DETAILED EXPLANATION
- App is idling or loading. No protection and detection measures are enabled. Please open the Navigation Drawer and enable them in section TRACKING.
- No threats detected or found. Our App is constantly checking your network based upon the protection measures you\'ve set in the Navigation Drawer and Preferences.
- Insecure Service Area: At least 1 new or unknown BTS is in operation in this vicinity, or using an insecure (broken) encryption algorithm lower than A5/3 [Detection is WIP]. Expect that any phone calls/SMS made in this area can be intercepted and recorded. You better leave this place now.
- 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.
- 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.
- 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.
-
- Cancel
+ Подробное описание
+ Приложение работает в режиме ожидания или загрузки. Меры защиты и обнаружения не включены. Пожалуйста, откройте меню и включите их в разделе СЛЕЖЕНИЕ.
+ Никакие угрозы не обнаружены. Наше приложение постоянно проверять вашу сеть на основе мер защиты, которые вы установили в меню и настройках.
+ Небезопасная зона обслуживания: По крайней мере, 1 новая или неизвестная БС в эксплуатации в этом районе, или с использованием небезопасного (сломанного) алгоритма шифрования меньшего, чем A5 / 3 [Обнаружение WIP]. Ожидайте, что любые телефонные звонки / SMS, сделанные в этой области могут быть перехвачены и зарегистрированы. Вам лучше оставить это место сейчас.
+ Враждебные действия обнаружены: IMSI-Перехватчик (IMSIC) или поддельные BTS (FBTS) активно отслеживают пользователей. Активное сканирование происходит в этой области. Вы должны избегать этого места, особенно, если есть политическая нестабильность. Выньте батарею или уничтожьте свой телефон.
+ Враждебные отслеживания обнаружены: FBTS или IMSIC активно отслеживают вас и предотвращают ваш телефон от подключения через обычную зашифрованную мобильную связь. Если вы находитесь в опасности, сломайте ваш телефон + SIM и сообщите, что ваш телефон недавно был украден.
+ Враждебные манипуляции: Кто-то пытается удаленно управлять вашим телефоном. Уничтожьте (или продайте) свой телефон и возьмите новый где-то подальше (не носите свой старый телефон с собой). Используйте новую (анонимную) SIM-карту, измените поведение вызовов и предупредите своих друзей, разговаривая с ними в реальной жизни, НЕ звоня им.
+
+ Отмена
OK
@@ -236,61 +236,61 @@
30 сек
10 мин
Главное
- Настройки приложения
+ Настройки
Приложение
- Monitoring Cell Information.
- Stopped monitoring Cell Information.
- Tracking Cell Information.
- Stopped tracking Cell Information.
- Only one new API key request per 24 hours!\nPlease try again later.
- Cell ID does not exist in OpenCellID Database!
- Hostile Service Area: Changing LAC Detected!
- FemtoCell Detection Active.
- Cell Tracking Active.
+ Мониторинг сотовой информации.
+ Мониторинг сотовой информации остановлен.
+ Отслеживания данных сотового.
+ Отслеживания данных сотового остановлена.
+ Только один запрос нового ключа API за 24 часа!\nПожалуйста, повторите попытку позже.
+ ID соты не существует в базе данных OpenCellID!
+ Враждебная зона обслуживания: Изменение LAC обнаружено!
+ Обнаружение фемтосот активно.
+ Отслеживание активной сотовой ячейки.
Cell Monitoring Active.
- Phone Type
- - Status: Idle.
- - Status: Good. No Threats Detected.
- ALERT: Some Threat Detected!
- ALERT: FemtoCell Connection Detected!
- ALERT: Type-0 Silent SMS Intercepted!
- AIMSICD can only detect FemtoCell connections on CDMA devices.
- Service State changed!
- : Stopped tracking FemtoCell connections.
- ALERT! FemtoCell Tracking Detected.
- Refreshing every
- Refreshing now…
- seconds.
- Contacting OpenCellID for data…\nThis may take up to a minute.
- Unable to determine your last location.\nEnable Location Services and try again.
- No tracked locations found to show on map.
- No data for publishing available.
- Download error:
- OpenCellID data successfully received.
- Error retrieving OpenCellID data.\nCheck your network!
- OpenCellID data successfully received.\nMap Markers updated.
- Uploaded BTS data to OCID successfully.
- Error in uploading BTS data to OCID servers!
- Restore database completed successfully.
- Error restoring database.
- Database backup successfully saved to:
- Error backing up database.
+ Тип телефона
+ - Статус: Неработающий.
+ - Status: Хорошо. Угроз не обнаружено.
+ ТРЕВОГА: Обнаружены некоторые угрозы!
+ ТРЕВОГА: Обнаружено соединение с фемтосотой!
+ ТРЕВОГА: Перехвачена бесшумная SMS(Type-0)!
+ AIMSICD может определять соединение с фемтосотой только на CDMA устройствах.
+ Статус сервиса изменен!
+ : Остановлен мониториг соединения с фемтосотой.
+ ТРЕВОГА! Обнаружен мониторинг фемтосоты.
+ Обновлять каждые
+ Обновить сейчас…
+ секунд.
+ Обращение к данным OpenCellID…\nЭто может занять до минуты.
+ Невозможно определить ваш последнее место.\nВключите сервис определения координат и попробуйте еще раз.
+ Не найдено отслеживаемых мест, чтобы показать их на карте.
+ Нет доступных данных для публикации.
+ Ошибка загрузки:
+ Данные OpenCellID успешно приняты.
+ Ошибка при получении данных OpenCellID.\nПроверьте вашу сеть!
+ Данные OpenCellID успешно приняты.\nМаркеры карты обновлены.
+ Данные BTS для OCID выгружены успешно.
+ Ошибка при выгрузке данных BTS для OCID серверов!
+ Восстановление базы данных успешно завершено.
+ Ошибка восстановления базы данных.
+ Резервная копия базы данных успешна сохранена в:
+ Ошибка резервного копирования базы данных.
No OpenCellID API Key detected!\nPlease enter your key in settings first.
- Refreshing display
- Unable to acquire ROOT access on your device.\nAT Command Injection requires ROOT Terminal access.\nPlease check your device is ROOTED and try again
- 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
- 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.
+ Обновление дисплея
+ Невозможно получить ROOT доступ на вашем устройстве.\nДля инъекций AT-команд в терминал требуется ROOT доступ.\nПожалуйста, проверьте наличие ROOT прав на вашем устройстве и попробуйте еще раз
+ Невозможно обнаружить Busybox на вашем устройстве.\nДля инъекций AT-команд в терминал требуются компоненты Busybox для правильного функционирования.\nПожалуйста, проверьте, что Busybox установлен на ваше устройство и попробуйте снова
+ Произошла неизвестная ошибка при попытке достижения Serial Device.\nПожалуйста, проверьте LogCat на возможные ошибки и отправьте их на Github\nили XDA, ссылки на оба этих места можно найти в \nсекции "О программе" приложения.
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.
- Getting OpenCellID API key…
- Unable to create map!
- ATTENTION! Please describe the problem you had, before sending us these logs. NO HELP WITHOUT DESCRIPTIONS!\n
- Status:
- IDLE
- NORMAL
- MEDIUM
- HIGH
- DANGER
- RUN!
+ Получение ключа API OpenCellID…
+ Невозможно создать карту!
+ ВНИМАНИЕ! Пожалуйста, опишите проблему, которая у вас была, прежде, чем отправить нам эти журналы. НЕТ ПОМОЩИ БЕЗ ОПИСАНИЯ!\n
+ Статус:
+ Неработающий
+ Нормальный
+ Средний
+ Высокий
+ Опасный
+ Беги!
AIMSICD status, neighboring cells, ciphering method indicator.
diff --git a/app/src/main/res/values/translatable_strings.xml b/app/src/main/res/values/translatable_strings.xml
index 571dd6011..ca9118818 100644
--- a/app/src/main/res/values/translatable_strings.xml
+++ b/app/src/main/res/values/translatable_strings.xml
@@ -32,8 +32,8 @@
Toggle Femtocell
Backup Database
-
Clear/Reset Database
+ All data will be deleted.\nAre you sure?
Restore Database
Preferences
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index b1dbbefec..c113e1841 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-2.2.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip