diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 88b0569b459571b80686894eece3b1f32005d3a6..2ef069117c505a5670cf6cff4c30108db187b7d8 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,5 +1,4 @@ # Contribution Guide --------------------- Thank you for contributing! Please select: @@ -12,9 +11,7 @@ Thank you for contributing! Please select: * [Donating](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/blob/development/.github/CONTRIBUTING.md#donating) * [Respecting](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/blob/development/.github/CONTRIBUTING.md#code-of-conduct) ---- - -#### DEVELOPING +## DEVELOPING Feel invited to develop with us using these steps: @@ -26,9 +23,7 @@ Feel invited to develop with us using these steps: 6. Test your changes and submit a [pull request](https://help.github.com/articles/using-pull-requests/) when we shall add it. 7. Don't be shy to ask for help in an Issue and feel invited to [contact us](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/wiki/Contact). ---- - -#### TRANSLATING +## TRANSLATING Let our app start up in your native language! @@ -37,9 +32,7 @@ Let our app start up in your native language! * Please make sure to *finish* your translation, if you start a new one! * Translations will be pulled into our GitHub automatically. Enjoy! ---- - -#### TESTING +## TESTING Can't code (yet)? No problem, we love you too! @@ -49,9 +42,7 @@ Can't code (yet)? No problem, we love you too! 4. Test all functions of our app and check for possible translation bugs. 5. Share [our website](https://secupwn.github.io/Android-IMSI-Catcher-Detector) and [Media Material](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/wiki/Media-Material) or [tweet about us](https://twitter.com/AIMSICD). ---- - -#### FORMATTING +## FORMATTING Useful links to help you with correctly formatting posts. @@ -63,13 +54,10 @@ Useful links to help you with correctly formatting posts. * [Markdown Tables Generator](http://www.tablesgenerator.com/markdown_tables) * [Code/Syntax Highlighting](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml) ---- - -#### DEBUGGING +## DEBUGGING Thanks for helping us squashing bugs! Please be patient. ---- **Important Bug Submission Rules:** 1. **SAFETY FIRST:** Remove CID, LAT, IMEI, IMSI and phone number from logs you submit! @@ -80,8 +68,6 @@ Thanks for helping us squashing bugs! Please be patient. 6. Describe your Issue as thoroughly as possible and *add logs* so that we can reproduce it. 8. Maintain your filed Issues! Nothing is more annoying than unresponsive bug reporters. ---- - In all cases, you **MUST** include the following: * AIMSICD version (see the About-Tab within our app) @@ -91,8 +77,6 @@ In all cases, you **MUST** include the following: * Logcat from button `Debugging` in Navigation Drawer (remove personal data) * Feel free to attach any other logs made by a logcat tool like [MatLog](https://github.com/plusCubed/matlog) ---- - Command line junkie? Then you can use the following shell function to help you get only relevant logcat entries. Copy and paste the following to your terminal shell: @@ -121,28 +105,22 @@ alias aimrun='cdaim; logclr; am start -n com.SecUpwN.AIMSICD/.AIMSICD; read dumm To run it, just type: `aimrun`. If you want to also supply *radio* logcat, add `-b radio` somewhere in the `logdmp` alias, but know that your GPS location and cell info may be included when you do that. ---- - -#### SEEKING +## SEEKING Special positions we are currently seeking skilled people for: * People with a CryptoPhone for another detection verification. * Bugfixer for [Coverity Scan Defects](https://scan.coverity.com/projects/3346) detected within our app. ---- - -#### DONATING +## DONATING Thank you for encouraging our developers! * Feel invited to donate using [this guide](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/wiki/Donations). ---- - -#### Code of Conduct +## Code of Conduct -**Our Pledge** +### Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and @@ -151,7 +129,7 @@ size, disability, ethnicity, gender identity and expression, level of experience nationality, personal appearance, race, religion, or sexual identity and orientation. -**Our Standards** +### Our Standards Examples of behavior that contributes to creating a positive environment include: @@ -173,7 +151,7 @@ advances * Other conduct which could reasonably be considered inappropriate in a professional setting -**Our Responsibilities** +### Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in @@ -185,7 +163,7 @@ that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. -**Scope** +### Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of @@ -194,7 +172,7 @@ address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. -**Enforcement** +### Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the [project maintainer](https://github.com/SecUpwN). All @@ -207,6 +185,6 @@ Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. -**Attribution** +### Attribution This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), Version 1.4 diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index f743c8f49fcfce9173caf88f58b968eb87282588..6d9bc27c208b1b2c4387bea70a25ba97b61415b0 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,35 +1,24 @@ ->Thank you for your feedback! Please add below details so that we can help you a bit faster. +<!-- Thank you for your feedback! Please add below details so that we can help you a bit faster. --> ---- - -#### Agreements ->Please check these boxes to ensure you've actually read and understood these important rules! +### Agreements +<!-- Please check these boxes to ensure you've actually read and understood these important rules! --> - [ ] **I have reviewed and accepted the [guidelines for contributing](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/blob/development/.github/CONTRIBUTING.md) to this project.** - [ ] **I have searched the [open Issues](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/issues) and made sure I am not filing a duplicate.** - [ ] **I have read the notes on [debugging](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/blob/development/.github/CONTRIBUTING.md#debugging) and will properly maintain this Issue.** - ---- - -#### Overview ->Please add a short and easy to understand description of the Issue you've experienced here. +### Overview +<!-- Please add a short and easy to understand description of the Issue you've experienced here. --> * `AIMSICD` version (see the `About` screen): * Phone and ROM running *current* release: * Link to logfile without identifyable data: ---- - -#### Reproduction ->Please tell us the detailed steps on how to reproduce your Issue here. - ---- - -#### References ->If your Issue is related to any other existing Issues or pull requests, please link them here. +### Reproduction +<!-- Please tell us the detailed steps on how to reproduce your Issue here. --> ---- +### References +<!-- If your Issue is related to any other existing Issues or pull requests, please link them here. --> -#### Screenshots ->If you experienced visual glitches, please add a screenshot without metadata here. +### Screenshots +<!-- If you experienced visual glitches, please add a screenshot without metadata here. --> diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 7ba87f426cb6fe21f9c0f154f095d5839598433c..d3c08fcde306a6f74b0670eec50f26553020b8c3 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,34 +1,24 @@ ->Thank you for submitting a pull request! Please add below details so that we can merge it faster. +<!-- Thank you for submitting a pull request! Please add below details so that we can merge it faster. --> ---- - -#### Agreements ->Please check these boxes to ensure you've actually read and understood these important rules! +### Agreements +<!-- Please check these boxes to ensure you've actually read and understood these important rules! --> - [ ] **I have reviewed and accepted the [guidelines for contributing](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/blob/development/.github/CONTRIBUTING.md) to this project.** - [ ] **I have reviewed and closely followed the [Style Guide](https://github.com/CellularPrivacy/Android-IMSI-Catcher-Detector/wiki/Style-Guide) for this Android app.** ---- - -#### Overview ->Please add a short and easy to understand description of your proposed changes here. - ---- +### Overview +<!-- Please add a short and easy to understand description of your proposed changes here. --> -#### Classification ->Please click the correct checkbox that applies best to classify your pull request. +### Classification +<!-- Please click the correct checkbox that applies best to classify your pull request. --> - [ ] Bugfix (non-breaking change which fixes an existing issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Refactor (restructuring of existing code without changing its external functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) ---- - -#### References ->If your pull request is related to or solves any existing Issues, please link them here. - ---- +### References +<!-- If your pull request is related to or solves any existing Issues, please link them here. --> -#### Screenshots ->If you have created visual changes, please add a screenshot without metadata here. +### Screenshots +<!-- If you have created visual changes, please add a screenshot without metadata here. --> diff --git a/.travis.yml b/.travis.yml index 345111338c6a8344abd0a11eb03efcb176f051b2..8cd892bac30eefcb316649ac42a7fb713ce7ff32 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,6 +18,7 @@ before_cache: env: global: + - GRADLE_OPTS="-Xmx2048m -Xms512m" # Encrypted Coverity Scan Token - secure: "jRKgZfeAxDhqDIrySBESiij3Ot9cmVQ4CMB+IVpmf7Xjfek6By1ba7Y1lgMdLRPgvLkj3k5mMx1BMx2yeSCBp/+TZJ6Ezj3EVJ6HS2ctkAH4KzsiqlSCKiRgfOqKgzfnftCkNzXCEE3XLVLcv4iT5Ru/EBG85kEDViGrDBP+PxA=" @@ -29,7 +30,9 @@ android: - android-23 - extra-android-m2repository -before_install: 'openssl aes-256-cbc -K $encrypted_dc771c3300d2_key -iv $encrypted_dc771c3300d2_iv -in keystore.jks.enc -out keystore.jks -d || true' +before_install: + - 'openssl aes-256-cbc -K $encrypted_dc771c3300d2_key -iv $encrypted_dc771c3300d2_iv -in keystore.jks.enc -out keystore.jks -d || true' + script: ./gradlew build check diff --git a/AIMSICD/build.gradle b/AIMSICD/build.gradle index a9682a610d64fb8a45c81fe94c6fe90f640afbd3..e2f4d86bb61a04610517a9a3b55d329907f24419 100644 --- a/AIMSICD/build.gradle +++ b/AIMSICD/build.gradle @@ -74,7 +74,8 @@ dependencies { // Please group dependencies for better review like below. // Android Support Libraries - compile 'com.android.support:appcompat-v7:23.1.1' + compile 'com.android.support:appcompat-v7:23.4.0' + compile 'io.realm:android-adapters:1.3.0' // OpenCSV (comma-separated values) parser library compile 'au.com.bytecode:opencsv:2.4' diff --git a/AIMSICD/config/checkstyle/checkstyle.xml b/AIMSICD/config/checkstyle/checkstyle.xml index 9588958784641c39780446025a6f32fc4472cb30..4151ec71a48c9a49122d2718b061e4f25d6c86bd 100644 --- a/AIMSICD/config/checkstyle/checkstyle.xml +++ b/AIMSICD/config/checkstyle/checkstyle.xml @@ -57,7 +57,6 @@ <property name="illegalClassNames" value="java.util.LinkedList" /> <property name="illegalClassNames" value="android.util.Log" /> <property name="illegalClassNames" value="android.app.NotificationManager" /> - <property name="illegalClassNames" value="android.database.Cursor" /> </module> <module name="MissingSwitchDefault"> <property name="severity" value="warning" /> diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/AndroidIMSICatcherDetector.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/AndroidIMSICatcherDetector.java index 00f39396ba14aa6c631b20ce07273d7d07911f2d..93eb7ac84891ca1ddccfaf07f6617dfa71b014b6 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/AndroidIMSICatcherDetector.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/AndroidIMSICatcherDetector.java @@ -16,6 +16,7 @@ import com.secupwn.aimsicd.data.DefaultDataTransaction; import com.secupwn.aimsicd.enums.Status; import com.secupwn.aimsicd.utils.BaseAsyncTask; import com.secupwn.aimsicd.utils.TinyDB; +import com.secupwn.aimsicd.utils.UncaughtExceptionLogger; import java.lang.ref.WeakReference; import java.util.ArrayList; @@ -54,6 +55,7 @@ public class AndroidIMSICatcherDetector extends InjectionApplication { @Override public void onCreate() { + UncaughtExceptionLogger.init(); instance = new WeakReference<>(this); addModule(new AndroidLoggerModule()); addModule(OkHttpModule.withCache(this)); @@ -61,28 +63,10 @@ public class AndroidIMSICatcherDetector extends InjectionApplication { RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this) .deleteRealmIfMigrationNeeded() + .initialData(new DefaultDataTransaction()) .build(); Realm.setDefaultConfiguration(realmConfiguration); - final Realm realm = Realm.getDefaultInstance(); - - realm.executeTransactionAsync( - new DefaultDataTransaction(), - new Realm.Transaction.OnSuccess() { - @Override - public void onSuccess() { - log.debug("Loading default data successful"); - realm.close(); - } - }, - new Realm.Transaction.OnError() { - @Override - public void onError(Throwable error) { - log.error("Error loading default data", error); - realm.close(); - } - } - ); TinyDB.getInstance().init(getApplicationContext()); TinyDB.getInstance().putBoolean(TinyDbKeys.FINISHED_LOAD_IN_MAP, true); diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/adapters/MeasuredCellStrengthAdapter.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/adapters/MeasuredCellStrengthAdapter.java index 419cc28244aee07363c4cc25f9293699b8bf2edf..53740e300f93b0cb018324f8db1afee2cd9b959c 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/adapters/MeasuredCellStrengthAdapter.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/adapters/MeasuredCellStrengthAdapter.java @@ -29,8 +29,8 @@ import static java.lang.String.valueOf; */ public class MeasuredCellStrengthAdapter extends RealmBaseAdapter<Measure> { - public MeasuredCellStrengthAdapter(Context context, RealmResults<Measure> realmResults, boolean automaticUpdate) { - super(context, realmResults, automaticUpdate); + public MeasuredCellStrengthAdapter(Context context, RealmResults<Measure> realmResults) { + super(context, realmResults); } @Override diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/constants/DrawerMenu.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/constants/DrawerMenu.java index 54bafe17146ad1a9dcd5658bb5616dbe6947bbb1..33edecdb467d57dd0c8b69325eed1665b34c619d 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/constants/DrawerMenu.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/constants/DrawerMenu.java @@ -49,6 +49,7 @@ public class DrawerMenu { */ public static class APPLICATION { public static final int DOWNLOAD_LOCAL_BTS_DATA = 400; //Download Local BST Data FIXME Is this should be "Download Local OCID Data" ? + public static final int IMPORT_CELL_TOWERS_DATA = 401; //Download CellTowers Data public static final int UPLOAD_LOCAL_BTS_DATA = 410; //Upload Local BST Data public static final int ADD_GET_OCID_API_KEY = 420; // Add/Get OCID API key public static final int FAQ = 450; // TODO Help/FAQ diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/BaseStationAdapter.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/BaseStationAdapter.java index 5bb350767d24bd95e26d6662d4eb6e504cc5e47e..055bd7650232e3daeea1b51e749c071553d5eed9 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/BaseStationAdapter.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/BaseStationAdapter.java @@ -28,8 +28,8 @@ import static java.lang.String.valueOf; */ public class BaseStationAdapter extends RealmBaseAdapter<BaseTransceiverStation> { - public BaseStationAdapter(Context context, RealmResults<BaseTransceiverStation> realmResults, boolean automaticUpdate) { - super(context, realmResults, automaticUpdate); + public BaseStationAdapter(Context context, RealmResults<BaseTransceiverStation> realmResults) { + super(context, realmResults); } @Override diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/DefaultLocationAdapter.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/DefaultLocationAdapter.java index 61b1223a73e97b36631ed9114a6455853533bf03..0c5d1b8abb9da6f6b2f4e488fbd11b87e38413b5 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/DefaultLocationAdapter.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/DefaultLocationAdapter.java @@ -21,8 +21,8 @@ import static java.lang.String.valueOf; public class DefaultLocationAdapter extends RealmBaseAdapter<DefaultLocation> { - public DefaultLocationAdapter(Context context, RealmResults<DefaultLocation> realmResults, boolean automaticUpdate) { - super(context, realmResults, automaticUpdate); + public DefaultLocationAdapter(Context context, RealmResults<DefaultLocation> realmResults) { + super(context, realmResults); } @Override diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/DetectionStringAdapter.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/DetectionStringAdapter.java index 476edc26dc7a868564f356f340f01aecbd7abe61..93ec6d63fdb480b82fbfb0b8a4731687844275a8 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/DetectionStringAdapter.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/DetectionStringAdapter.java @@ -14,8 +14,8 @@ import io.realm.RealmResults; public class DetectionStringAdapter extends RealmBaseAdapter<SmsDetectionString> { - public DetectionStringAdapter(Context context, RealmResults<SmsDetectionString> realmResults, boolean automaticUpdate) { - super(context, realmResults, automaticUpdate); + public DetectionStringAdapter(Context context, RealmResults<SmsDetectionString> realmResults) { + super(context, realmResults); } @Override diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/EventAdapter.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/EventAdapter.java index 27f23f4b36c8dff45d26ff14bffb69eaf4cee2d5..ad3a10a3ce0ce2908ca8ba19fc379d2c442519a0 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/EventAdapter.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/EventAdapter.java @@ -18,8 +18,8 @@ import static java.lang.String.valueOf; public class EventAdapter extends RealmBaseAdapter<Event> { - public EventAdapter(Context context, RealmResults<Event> realmResults, boolean automaticUpdate) { - super(context, realmResults, automaticUpdate); + public EventAdapter(Context context, RealmResults<Event> realmResults) { + super(context, realmResults); } @Override diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/ImportAdapter.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/ImportAdapter.java index 198c66eccc13916e32aea241031355f0fe00a600..2da6430ae56df7244821a4a429821b18103ee2bc 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/ImportAdapter.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/ImportAdapter.java @@ -23,8 +23,8 @@ import static java.lang.String.valueOf; public class ImportAdapter extends RealmBaseAdapter<Import> { - public ImportAdapter(Context context, RealmResults<Import> realmResults, boolean automaticUpdate) { - super(context, realmResults, automaticUpdate); + public ImportAdapter(Context context, RealmResults<Import> realmResults) { + super(context, realmResults); } @Override diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/MeasureAdapter.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/MeasureAdapter.java index 5ac5dd618e356aece1e21ef46ec2e012b710f879..fe2554e8f44513cab5ae58ddebd14db516e6ce70 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/MeasureAdapter.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/MeasureAdapter.java @@ -21,8 +21,8 @@ import static java.lang.String.valueOf; */ public class MeasureAdapter extends RealmBaseAdapter<Measure> { - public MeasureAdapter(Context context, RealmResults<Measure> realmResults, boolean automaticUpdate) { - super(context, realmResults, automaticUpdate); + public MeasureAdapter(Context context, RealmResults<Measure> realmResults) { + super(context, realmResults); } @Override diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/SmsDataAdapter.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/SmsDataAdapter.java index c7c805af9f7ac704406cda181fc5940d265da2d5..37a3a0f513db801bb289a12c03275b16b31dac06 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/SmsDataAdapter.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/adapter/SmsDataAdapter.java @@ -26,8 +26,8 @@ import static java.lang.String.valueOf; public class SmsDataAdapter extends RealmBaseAdapter<SmsData> { - public SmsDataAdapter(Context context, RealmResults<SmsData> realmResults, boolean automaticUpdate) { - super(context, realmResults, automaticUpdate); + public SmsDataAdapter(Context context, RealmResults<SmsData> realmResults) { + super(context, realmResults); } public View getView(int position, View convertView, ViewGroup parent) { diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/BaseTransceiverStation.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/BaseTransceiverStation.java index 70db057ebd7c42d51efa3da657b430a3435aaab5..734a665753f28d00a066750e4a60ac61e0058778 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/BaseTransceiverStation.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/BaseTransceiverStation.java @@ -18,10 +18,4 @@ public class BaseTransceiverStation extends RealmObject { private Date timeFirst; private Date timeLast; private GpsLocation gpsLocation; - - @Override - public void removeFromRealm() { - gpsLocation.removeFromRealm(); - super.removeFromRealm(); - } } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/Event.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/Event.java index c89aecd92b8714511a3b0c427d672e7e6cc1b2e1..fbfb766c6d42d865c07bc41c563c2eecccc55a2d 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/Event.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/Event.java @@ -32,10 +32,4 @@ public class Event extends RealmObject { private int dfId; private String dfDescription; - - @Override - public void removeFromRealm() { - gpsLocation.removeFromRealm(); - super.removeFromRealm(); - } } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/Measure.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/Measure.java index 5aa19256965a156cd61a2e8cad2fbb14a7ee024f..3491797afb92b2b0fffafdeb2f741353bfc8037a 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/Measure.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/Measure.java @@ -21,10 +21,4 @@ public class Measure extends RealmObject { private int timingAdvance; private boolean submitted; private boolean neighbor; - - @Override - public void removeFromRealm() { - getGpsLocation().removeFromRealm(); - super.removeFromRealm(); - } } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/SmsData.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/SmsData.java index 249c9a9eae4b4d32f606f3c2487f66f4709e0314..38e804f7b85cf2b7f1966b00ba5274c4ab8f6d90 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/SmsData.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/data/model/SmsData.java @@ -20,10 +20,4 @@ public class SmsData extends RealmObject { private int locationAreaCode; private int cellId; private String radioAccessTechnology; - - @Override - public void removeFromRealm() { - gpsLocation.removeFromRealm(); - super.removeFromRealm(); - } } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/service/CellTracker.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/service/CellTracker.java index 656679faabe8f4e047f8771f97c847da088e27ff..968b5b853a1b204add2ad3c4da9b80523f4b3545 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/service/CellTracker.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/service/CellTracker.java @@ -118,6 +118,7 @@ public class CellTracker implements SharedPreferences.OnSharedPreferenceChangeLi private boolean changedLAC; private boolean cellIdNotInOpenDb; private boolean typeZeroSmsDetected; + private boolean emptyNeighborCellsList; private boolean vibrateEnabled; private int vibrateMinThreatLevel; private LinkedBlockingQueue<NeighboringCellInfo> neighboringCellBlockingQueue; @@ -447,30 +448,38 @@ public class CellTracker implements SharedPreferences.OnSharedPreferenceChangeLi public void checkForNeighborCount(CellLocation location) { log.info("CheckForNeighborCount()"); - Integer ncls = 0; // NC list size + emptyNeighborCellsList = false; + + Integer neighborCellsCount = 0; if (tm != null && tm.getNeighboringCellInfo() != null) { // See # 383 - ncls = tm.getNeighboringCellInfo().size(); + neighborCellsCount = tm.getNeighboringCellInfo().size(); } - Boolean nclp = tinydb.getBoolean("nc_list_present"); // NC list present? (default is false) - - if (ncls > 0) { - log.debug("NeighboringCellInfo size: " + ncls); - if (!nclp) { - log.debug("Setting nc_list_present to: true"); - tinydb.putBoolean("nc_list_present", true); + + // NC list present for that network type? (default is false) + String ncListVariableByType = "nc_list_present_" + tm.getNetworkType(); + Boolean nclSupportedByNetwork = tinydb.getBoolean(ncListVariableByType); + + if (neighborCellsCount > 0) { + log.debug("NeighboringCellInfo size: " + neighborCellsCount); + if (!nclSupportedByNetwork) { + log.debug("Setting " + ncListVariableByType + " to: true"); + tinydb.putBoolean(ncListVariableByType, true); } - } else if (ncls == 0 && nclp) { + } else if (neighborCellsCount == 0 && nclSupportedByNetwork) { // Detection 7a log.info("ALERT: No neighboring cells detected for CID: " + device.cell.getCellId()); - vibrate(100, Status.MEDIUM); + + emptyNeighborCellsList = true; + @Cleanup Realm realm = Realm.getDefaultInstance(); dbHelper.toEventLog(realm, 4, "No neighboring cells detected"); // (DF_id, DF_desc) } else { // Todo: remove cid string when working. - log.debug("NC list not supported by AOS on this device. Nothing to do."); - log.debug(": Setting nc_list_present to: false"); - tinydb.putBoolean("nc_list_present", false); + log.debug("NC list not supported by this networkn type or not supported by AOS on this device. Nothing to do."); + log.debug("Setting " + ncListVariableByType + " to: false"); + tinydb.putBoolean(ncListVariableByType, false); } + setNotification(); } /** @@ -953,6 +962,9 @@ public class CellTracker implements SharedPreferences.OnSharedPreferenceChangeLi } else if (changedLAC) { getApplication().setCurrentStatus(Status.MEDIUM, vibrateEnabled, vibrateMinThreatLevel); contentText = context.getString(R.string.hostile_service_area_changing_lac_detected); + } else if (emptyNeighborCellsList) { + getApplication().setCurrentStatus(Status.MEDIUM, vibrateEnabled, vibrateMinThreatLevel); + contentText = context.getString(R.string.cell_doesnt_provide_any_neighbors); } else if (cellIdNotInOpenDb) { getApplication().setCurrentStatus(Status.MEDIUM, vibrateEnabled, vibrateMinThreatLevel); contentText = context.getString(R.string.cell_id_doesnt_exist_in_db); @@ -993,11 +1005,10 @@ public class CellTracker implements SharedPreferences.OnSharedPreferenceChangeLi //Append changing LAC text contentText = context.getString(R.string.hostile_service_area_changing_lac_detected); tickerText += " - " + contentText; - // See #264 and ask He3556 - //} else if (mNoNCList) { - // tickerText += " - BTS doesn't provide any neighbors!"; - // contentText = "CID: " + cellid + " is not providing a neighboring cell list!"; - + } else if (emptyNeighborCellsList) { + //According to #264 + contentText = context.getString(R.string.cell_doesnt_provide_any_neighbors); + tickerText += " - " + contentText; } else if (cellIdNotInOpenDb) { //Append Cell ID not existing in external db text contentText = context.getString(R.string.cell_id_doesnt_exist_in_db); diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/AdvancedUserActivity.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/AdvancedUserActivity.java index 5d7956a8f7b192eddccaa6998f919bb01170ad01..321a43b947022b42b91b20dc5b418b686946a007 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/AdvancedUserActivity.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/AdvancedUserActivity.java @@ -55,9 +55,9 @@ public class AdvancedUserActivity extends InjectionAppCompatActivity { realm = Realm.getDefaultInstance(); - RealmResults<SmsDetectionString> msgItems = realm.allObjects(SmsDetectionString.class); + RealmResults<SmsDetectionString> msgItems = realm.where(SmsDetectionString.class).findAll(); - listViewAdv.setAdapter(new DetectionStringAdapter(this, msgItems, true)); + listViewAdv.setAdapter(new DetectionStringAdapter(this, msgItems)); listViewAdv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override @@ -69,7 +69,7 @@ public class AdvancedUserActivity extends InjectionAppCompatActivity { realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { - detectionString.removeFromRealm(); + detectionString.deleteFromRealm(); } }); diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/AdvancedUserSmsActivity.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/AdvancedUserSmsActivity.java index 4dd5170ce220dc4b046e8cff44296f69827695a0..85e2ae4003f0c15c1a1ab662fe7f7da9d6b6b32a 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/AdvancedUserSmsActivity.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/AdvancedUserSmsActivity.java @@ -52,7 +52,7 @@ public class AdvancedUserSmsActivity extends InjectionAppCompatActivity { dbaccess = new RealmHelper(getApplicationContext()); RealmResults<SmsData> msgitems = realm.where(SmsData.class).findAllSorted("timestamp"); - listViewAdv.setAdapter(new SmsDataAdapter(getApplicationContext(), msgitems, true)); + listViewAdv.setAdapter(new SmsDataAdapter(getApplicationContext(), msgitems)); listViewAdv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override @@ -62,7 +62,7 @@ public class AdvancedUserSmsActivity extends InjectionAppCompatActivity { realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { - smsData.removeFromRealm(); + smsData.deleteFromRealm(); } }); diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/SmsDetector.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/SmsDetector.java index 3add39f743b274e81c69360f8bb08e8932533611..e27fc95d5889563381ae4ece581d0f069969dfa2 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/SmsDetector.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/smsdetection/SmsDetector.java @@ -251,7 +251,7 @@ public final class SmsDetector extends Thread { //0 - null 1 = TYPE0, 2 = MWI, 3 = WAPPUSH - for (SmsDetectionString detectionString : realm.allObjects(SmsDetectionString.class)) { + for (SmsDetectionString detectionString : realm.where(SmsDetectionString.class).findAll()) { //looping through detection strings to see does logcat line match if (line.contains(detectionString.getDetectionString())) { if ("TYPE0".equalsIgnoreCase(detectionString.getSmsType())) { diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/MainActivity.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/MainActivity.java index 2add05637919c7c62dd9d4ecad666e0926651798..01081dcdcdfc1ef73566d9fb7a83e7998db38cd8 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/MainActivity.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/MainActivity.java @@ -79,6 +79,8 @@ public class MainActivity extends BaseActivity implements AsyncResponse { private DrawerMenuActivityConfiguration mNavConf; + private static final int ACTIVITY_RESULT_SELECT_CELLTOWERS = 1; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -255,6 +257,11 @@ public class MainActivity extends BaseActivity implements AsyncResponse { } else if (selectedItem.getId() == DrawerMenu.ID.APPLICATION.DOWNLOAD_LOCAL_BTS_DATA) { downloadBtsDataIfApiKeyAvailable(); + } else if (selectedItem.getId() == DrawerMenu.ID.APPLICATION.IMPORT_CELL_TOWERS_DATA) { + Intent pickFileIntent = new Intent(Intent.ACTION_GET_CONTENT); + pickFileIntent.setType("*/*"); + pickFileIntent.addCategory(Intent.CATEGORY_OPENABLE); + startActivityForResult(pickFileIntent, ACTIVITY_RESULT_SELECT_CELLTOWERS); } else if (selectedItem.getId() == DrawerMenu.ID.APPLICATION.QUIT) { try { if (mAimsicdService.isSmsTracking()) { @@ -281,6 +288,17 @@ public class MainActivity extends BaseActivity implements AsyncResponse { } } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == ACTIVITY_RESULT_SELECT_CELLTOWERS) { + if (resultCode == RESULT_OK) { + log.debug("Chosen file: " + data.getDataString()); + importCellTowersData(data.getData()); + } + } + } + private void openFragment(Fragment fragment) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); @@ -332,6 +350,33 @@ public class MainActivity extends BaseActivity implements AsyncResponse { } } + private void importCellTowersData(Uri importFile) { + + Cell cell = new Cell(); + TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); + String networkOperator = tm.getNetworkOperator(); + + if (networkOperator != null && !networkOperator.isEmpty()) { + int mcc = Integer.parseInt(networkOperator.substring(0, 3)); + cell.setMobileCountryCode(mcc); + int mnc = Integer.parseInt(networkOperator.substring(3)); + cell.setMobileNetworkCode(mnc); + log.debug("CELL:: mobileCountryCode=" + mcc + " mobileNetworkCode=" + mnc); + } + + GeoLocation loc = mAimsicdService.lastKnownLocation(); + if (loc != null) { + Helpers.msgLong(this, getString(R.string.imporing_celltowers_data)); + + cell.setLon(loc.getLongitudeInDegrees()); + cell.setLat(loc.getLatitudeInDegrees()); + Helpers.importCellTowersData(this, cell, importFile, mAimsicdService); + + } else { + Helpers.msgShort(this, getString(R.string.needs_location)); + } + } + @Override public void processFinish(float[] location) { log.info("processFinish - location[0]=" + location[0] + " location[1]=" + location[1]); diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/MapViewerOsmDroid.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/MapViewerOsmDroid.java index 86e3a2f675d651418e5145f9ad5f8b4e785bc76a..88af0ccd51f897c92f91ffafb6cccc46f789d7fc 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/MapViewerOsmDroid.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/activities/MapViewerOsmDroid.java @@ -102,7 +102,7 @@ public final class MapViewerOsmDroid extends BaseActivity implements OnSharedPre private AimsicdService mAimsicdService; private boolean mBound; - private GeoPoint loc = null; + private GeoPoint mLatestCellLoc = null; private MyLocationNewOverlay mMyLocationOverlay; private CompassOverlay mCompassOverlay; @@ -171,6 +171,7 @@ public final class MapViewerOsmDroid extends BaseActivity implements OnSharedPre if (mMyLocationOverlay != null) { mMyLocationOverlay.enableMyLocation(); + mMyLocationOverlay.enableFollowLocation(); } } @@ -201,6 +202,7 @@ public final class MapViewerOsmDroid extends BaseActivity implements OnSharedPre if (mMyLocationOverlay != null) { mMyLocationOverlay.disableMyLocation(); + mMyLocationOverlay.disableFollowLocation(); } } @@ -283,28 +285,37 @@ public final class MapViewerOsmDroid extends BaseActivity implements OnSharedPre */ private void setUpMapIfNeeded() { + mMap.getOverlayManager().clear(); // Check if we were successful in obtaining the map. mMap.setBuiltInZoomControls(true); mMap.setMultiTouchControls(true); mMap.setMinZoomLevel(3); mMap.setMaxZoomLevel(19); // Latest OSM can go to 21! mMap.getTileProvider().createTileCache(); - mCompassOverlay = new CompassOverlay(this, new InternalCompassOrientationProvider(this), mMap); + + if (mCompassOverlay == null) { + mCompassOverlay = new CompassOverlay(this, new InternalCompassOrientationProvider(this), mMap); + } ScaleBarOverlay mScaleBarOverlay = new ScaleBarOverlay(this); mScaleBarOverlay.setScaleBarOffset(getResources().getDisplayMetrics().widthPixels / 2, 10); mScaleBarOverlay.setCentred(true); // Sets cluster pin color - mCellTowerGridMarkerClusterer = new CellTowerGridMarkerClusterer(MapViewerOsmDroid.this); - BitmapDrawable mapPinDrawable = (BitmapDrawable) getResources().getDrawable(R.drawable.ic_map_pin_orange); - mCellTowerGridMarkerClusterer.setIcon(mapPinDrawable == null ? null : mapPinDrawable.getBitmap()); + if (mCellTowerGridMarkerClusterer == null) { + mCellTowerGridMarkerClusterer = new CellTowerGridMarkerClusterer(MapViewerOsmDroid.this); + BitmapDrawable mapPinDrawable = (BitmapDrawable) getResources().getDrawable(R.drawable.ic_map_pin_orange); + mCellTowerGridMarkerClusterer.setIcon(mapPinDrawable == null ? null : mapPinDrawable.getBitmap()); + } - GpsMyLocationProvider gpsMyLocationProvider = new GpsMyLocationProvider(MapViewerOsmDroid.this.getBaseContext()); - gpsMyLocationProvider.setLocationUpdateMinDistance(100); // [m] // Set the minimum distance for location updates - gpsMyLocationProvider.setLocationUpdateMinTime(10000); // [ms] // Set the minimum time interval for location updates - mMyLocationOverlay = new MyLocationNewOverlay(MapViewerOsmDroid.this.getBaseContext(), gpsMyLocationProvider, mMap); - mMyLocationOverlay.setDrawAccuracyEnabled(true); + if (mMyLocationOverlay == null) { + GpsMyLocationProvider gpsMyLocationProvider = new GpsMyLocationProvider(MapViewerOsmDroid.this.getBaseContext()); + gpsMyLocationProvider.setLocationUpdateMinDistance(100); // [m] // Set the minimum distance for location updates + gpsMyLocationProvider.setLocationUpdateMinTime(10000); // [ms] // Set the minimum time interval for location updates + + mMyLocationOverlay = new MyLocationNewOverlay(MapViewerOsmDroid.this.getBaseContext(), gpsMyLocationProvider, mMap); + mMyLocationOverlay.setDrawAccuracyEnabled(true); + } mMap.getOverlays().add(mCellTowerGridMarkerClusterer); mMap.getOverlays().add(mMyLocationOverlay); @@ -343,12 +354,12 @@ public final class MapViewerOsmDroid extends BaseActivity implements OnSharedPre } } - if (loc != null) { + if (mLatestCellLoc != null) { Helpers.msgLong(this, getString(R.string.contacting_opencellid_for_data)); Cell cell = new Cell(); - cell.setLat(loc.getLatitude()); - cell.setLon(loc.getLongitude()); + cell.setLat(mLatestCellLoc.getLatitude()); + cell.setLon(mLatestCellLoc.getLongitude()); setRefreshActionButtonState(true); TinyDB.getInstance().putBoolean(TinyDbKeys.FINISHED_LOAD_IN_MAP, false); Helpers.getOpenCellData(this, cell, RequestTask.DBE_DOWNLOAD_REQUEST_FROM_MAP, mAimsicdService); @@ -382,7 +393,7 @@ public final class MapViewerOsmDroid extends BaseActivity implements OnSharedPre @Cleanup Realm realm = Realm.getDefaultInstance(); - RealmResults<BaseTransceiverStation> baseStations = realm.allObjects(BaseTransceiverStation.class); + RealmResults<BaseTransceiverStation> baseStations = realm.where(BaseTransceiverStation.class).findAll(); if (baseStations.size() > 0) { for (BaseTransceiverStation baseStation : baseStations) { if (isCancelled()) { @@ -413,16 +424,16 @@ public final class MapViewerOsmDroid extends BaseActivity implements OnSharedPre if (Double.doubleToRawLongBits(dLat) != 0 || Double.doubleToRawLongBits(dLng) != 0) { - loc = new GeoPoint(dLat, dLng); + mLatestCellLoc = new GeoPoint(dLat, dLng); CellTowerMarker ovm = new CellTowerMarker(MapViewerOsmDroid.this, mMap, "Cell ID: " + cellID, - "", loc, + "", mLatestCellLoc, new MarkerData( getApplicationContext(), String.valueOf(cellID), - String.valueOf(loc.getLatitude()), - String.valueOf(loc.getLongitude()), + String.valueOf(mLatestCellLoc.getLatitude()), + String.valueOf(mLatestCellLoc.getLongitude()), String.valueOf(lac), String.valueOf(mcc), String.valueOf(mnc), @@ -473,15 +484,15 @@ public final class MapViewerOsmDroid extends BaseActivity implements OnSharedPre return null; } try { - loc = new GeoPoint(cell.getLat(), cell.getLon()); + mLatestCellLoc = new GeoPoint(cell.getLat(), cell.getLon()); CellTowerMarker ovm = new CellTowerMarker(MapViewerOsmDroid.this, mMap, getString(R.string.cell_id_label) + cell.getCellId(), - "", loc, + "", mLatestCellLoc, new MarkerData( getApplicationContext(), String.valueOf(cell.getCellId()), - String.valueOf(loc.getLatitude()), - String.valueOf(loc.getLongitude()), + String.valueOf(mLatestCellLoc.getLatitude()), + String.valueOf(mLatestCellLoc.getLongitude()), String.valueOf(cell.getLocationAreaCode()), String.valueOf(cell.getMobileCountryCode()), String.valueOf(cell.getMobileNetworkCode()), @@ -512,29 +523,35 @@ public final class MapViewerOsmDroid extends BaseActivity implements OnSharedPre */ @Override protected void onPostExecute(GeoPoint defaultLoc) { - if (loc != null && (Double.doubleToRawLongBits(loc.getLatitude()) != 0 - && Double.doubleToRawLongBits(loc.getLongitude()) != 0)) { - mMap.getController().setZoom(16); - mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); - } else { - if (mBound) { - // Try and find last known location and zoom there - GeoLocation lastLoc = mAimsicdService.lastKnownLocation(); - if (lastLoc != null) { - loc = new GeoPoint(lastLoc.getLatitudeInDegrees(), - lastLoc.getLongitudeInDegrees()); - - mMap.getController().setZoom(16); - mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); - } else { - //Use MCC to move camera to an approximate location near Countries Capital - loc = defaultLoc; - - mMap.getController().setZoom(12); - mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); - } + boolean movedMap = false; + if (mBound) { + // Try and find last known location and zoom there + GeoLocation lastLoc = mAimsicdService.lastKnownLocation(); + if (lastLoc != null) { + GeoPoint loc = new GeoPoint(lastLoc.getLatitudeInDegrees(), + lastLoc.getLongitudeInDegrees()); + + mMap.getController().setZoom(16); + mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); + movedMap = true; + } + } + if (!movedMap) { + if (mLatestCellLoc != null && (Double.doubleToRawLongBits(mLatestCellLoc.getLatitude()) != 0 + && Double.doubleToRawLongBits(mLatestCellLoc.getLongitude()) != 0)) { + mMap.getController().setZoom(16); + mMap.getController().animateTo(new GeoPoint(mLatestCellLoc.getLatitude(), mLatestCellLoc.getLongitude())); + movedMap = true; } } + if (!movedMap) { + //Use MCC to move camera to an approximate location near Countries Capital + GeoPoint loc = defaultLoc; + + mMap.getController().setZoom(12); + mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); + movedMap = true; + } if (mCellTowerGridMarkerClusterer != null) { if (BuildConfig.DEBUG && mCellTowerGridMarkerClusterer.getItems() != null) { log.verbose("CellTowerMarkers.invalidate() markers.size():" + mCellTowerGridMarkerClusterer.getItems().size()); diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/drawer/DrawerMenuActivityConfiguration.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/drawer/DrawerMenuActivityConfiguration.java index 98b63ae87c322b69f3401274db18144868e243ef..301c60c5a4619ff64f41a6a325b9df6916d30e5b 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/drawer/DrawerMenuActivityConfiguration.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/drawer/DrawerMenuActivityConfiguration.java @@ -96,6 +96,7 @@ public class DrawerMenuActivityConfiguration { //Section Application menu.add(DrawerMenuSection.create(DrawerMenu.ID.SECTION_APPLICATION, mContext.getString(R.string.application))); menu.add(DrawerMenuItem.create(DrawerMenu.ID.APPLICATION.DOWNLOAD_LOCAL_BTS_DATA, mContext.getString(R.string.get_opencellid), R.drawable.stat_sys_download_anim0, false)); + menu.add(DrawerMenuItem.create(DrawerMenu.ID.APPLICATION.IMPORT_CELL_TOWERS_DATA, mContext.getString(R.string.import_cell_towers), R.drawable.stat_sys_download_anim0, false)); menu.add(DrawerMenuItem.create(DrawerMenu.ID.APPLICATION.UPLOAD_LOCAL_BTS_DATA, mContext.getString(R.string.upload_bts), R.drawable.stat_sys_upload_anim0, false)); menu.add(DrawerMenuItem.create(DrawerMenu.ID.APPLICATION.QUIT, mContext.getString(R.string.quit), R.drawable.ic_action_remove, false)); mNavItems = menu; diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/drawer/DrawerMenuItem.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/drawer/DrawerMenuItem.java index 825106c5ea4c9b79139e9aab4c05a45146e93647..ed073cdf8e9e60c3e533e433ef701e114dbd6b5a 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/drawer/DrawerMenuItem.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/drawer/DrawerMenuItem.java @@ -90,6 +90,9 @@ public class DrawerMenuItem implements NavDrawerItem { case APPLICATION.DOWNLOAD_LOCAL_BTS_DATA: return R.string.help_app_download_local_bts; + case APPLICATION.IMPORT_CELL_TOWERS_DATA: + return R.string.help_app_import_cell_towers; + case APPLICATION.ADD_GET_OCID_API_KEY: return R.string.help_app_add_get_ocid_api_key; diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/CellInfoFragment.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/CellInfoFragment.java index 47bac58fb37163acf1015573524490e301afeb72..b937406d75b8ef1a11dc90fb9e44920b38dee839 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/CellInfoFragment.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/CellInfoFragment.java @@ -28,7 +28,10 @@ import android.os.Handler; import android.os.IBinder; import android.support.v4.widget.SwipeRefreshLayout; import android.text.TextUtils; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TableRow; import android.widget.TextView; @@ -51,23 +54,22 @@ import io.freefair.android.injection.annotation.XmlLayout; import io.freefair.android.injection.app.InjectionFragment; /** - * Description: This class updates the CellInfo fragment. This is also known as - * the Neighboring Cells info, which is using the MultiRilClient to - * show neighboring cells on the older Samsung Galaxy S2/3 series. - * It's refresh rate is controlled in the settings by: - * - * arrays.xml: - * pref_refresh_entries (the names) - * pref_refresh_values (the values in seconds) - * - * - * Dependencies: Seem that this is intimately connected to: CellTracker.java service... - * - * - * TODO: 1) Use an IF check, in order not to run the MultiRilClient on non supported devices - * as this will cause excessive logcat spam. - * TODO: 2) Might wanna make the refresh rate lower/higher depending on support - * + * Description: This class updates the CellInfo fragment. This is also known as + * the Neighboring Cells info, which is using the MultiRilClient to + * show neighboring cells on the older Samsung Galaxy S2/3 series. + * It's refresh rate is controlled in the settings by: + * <p> + * arrays.xml: + * pref_refresh_entries (the names) + * pref_refresh_values (the values in seconds) + * <p> + * <p> + * Dependencies: Seem that this is intimately connected to: CellTracker.java service... + * <p> + * <p> + * TODO: 1) Use an IF check, in order not to run the MultiRilClient on non supported devices + * as this will cause excessive logcat spam. + * TODO: 2) Might wanna make the refresh rate lower/higher depending on support */ @XmlLayout(R.layout.fragment_cell_info) public class CellInfoFragment extends InjectionFragment implements SwipeRefreshLayout.OnRefreshListener { @@ -86,24 +88,11 @@ public class CellInfoFragment extends InjectionFragment implements SwipeRefreshL @InjectView(R.id.list_view) private ListView lv; - @InjectView(R.id.neighboring_cells) - private TextView mNeighboringCells; - - @InjectView(R.id.neighboring_number) - private TextView mNeighboringTotal; - - @InjectView(R.id.neighboring_total) - private TableRow mNeighboringTotalView; - - @InjectView(R.id.ciphering_indicator_title) - private TextView mCipheringIndicatorLabel; - - @InjectView(R.id.ciphering_indicator) - private TextView mCipheringIndicator; - @InjectView(R.id.swipeRefreshLayout) private SwipeRefreshLayout swipeRefreshLayout; + private BaseInflaterAdapter<CardItemData> mBaseInflaterAdapter; + private CellInfoAdapter mCellInfoAdapter; private final Runnable timerRunnable = new Runnable() { @@ -143,6 +132,10 @@ public class CellInfoFragment extends InjectionFragment implements SwipeRefreshL public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); + mBaseInflaterAdapter = new BaseInflaterAdapter<>(new CellCardInflater()); + mCellInfoAdapter = new CellInfoAdapter(mBaseInflaterAdapter, new CellInfoOverviewData()); + lv.setAdapter(mCellInfoAdapter); + mContext = getActivity().getBaseContext(); // Bind to LocalService Intent intent = new Intent(mContext, AimsicdService.class); @@ -198,8 +191,8 @@ public class CellInfoFragment extends InjectionFragment implements SwipeRefreshL private void updateUI() { if (mBound && rilExecutor.mMultiRilCompatible) { - new CellAsyncTask().execute(SAMSUNG_MULTIRIL_REQUEST); - } else { + new CellAsyncTask().execute(SAMSUNG_MULTIRIL_REQUEST); + } else { new CellAsyncTask().execute(STOCK_REQUEST); } } @@ -210,9 +203,13 @@ public class CellInfoFragment extends InjectionFragment implements SwipeRefreshL @Override public void run() { if (list != null) { - mCipheringIndicatorLabel.setVisibility(View.VISIBLE); - mCipheringIndicator.setVisibility(View.VISIBLE); - mCipheringIndicator.setText(TextUtils.join("\n", list)); + CellInfoOverviewData overviewData = new CellInfoOverviewData(); + overviewData.mCipheringIndicatorLabelVisibility = View.VISIBLE; + overviewData.mCipheringIndicatorVisibility = View.VISIBLE; + overviewData.mCipheringIndicator = TextUtils.join("\n", list); + if (mCellInfoAdapter != null) { + mCellInfoAdapter.updateCellInfoOverview(overviewData); + } } } }); @@ -228,21 +225,20 @@ public class CellInfoFragment extends InjectionFragment implements SwipeRefreshL } void updateStockNeighboringCells() { - mNeighboringTotal.setText(String.valueOf(neighboringCells.size())); + CellInfoOverviewData overviewData = new CellInfoOverviewData(); + overviewData.mNeighboringTotal = neighboringCells.size(); + mBaseInflaterAdapter.clear(false); if (neighboringCells.size() != 0) { - - BaseInflaterAdapter<CardItemData> adapter - = new BaseInflaterAdapter<>(new CellCardInflater()); int i = 1; int total = neighboringCells.size(); for (Cell cell : neighboringCells) { CardItemData data = new CardItemData(cell, i++ + " / " + total); - adapter.addItem(data, false); + mBaseInflaterAdapter.addItem(data, false); } - lv.setAdapter(adapter); - mNeighboringCells.setVisibility(View.GONE); - mNeighboringTotalView.setVisibility(View.VISIBLE); + overviewData.mNeighboringCellsVisibility = View.GONE; + overviewData.mNeighboringTotalViewVisibility = View.VISIBLE; } + mCellInfoAdapter.updateCellInfoOverview(overviewData); } void updateNeighboringCells() { @@ -251,9 +247,13 @@ public class CellInfoFragment extends InjectionFragment implements SwipeRefreshL @Override public void run() { if (list != null) { - mNeighboringCells.setText(TextUtils.join("\n", list)); - mNeighboringCells.setVisibility(View.VISIBLE); - mNeighboringTotalView.setVisibility(View.GONE); + CellInfoOverviewData overviewData = new CellInfoOverviewData(); + overviewData.mNeighboringCells = TextUtils.join("\n", list); + overviewData.mNeighboringCellsVisibility = View.VISIBLE; + overviewData.mNeighboringTotalViewVisibility = View.GONE; + if (mCellInfoAdapter != null) { + mCellInfoAdapter.updateCellInfoOverview(overviewData); + } } } }); @@ -291,4 +291,114 @@ public class CellInfoFragment extends InjectionFragment implements SwipeRefreshL } } } + + class CellInfoAdapter extends BaseAdapter { + private final LayoutInflater mInflater; + private final BaseInflaterAdapter<CardItemData> mCardItemDataAdapter; + private CellInfoOverviewData mOverview; + + CellInfoAdapter(BaseInflaterAdapter<CardItemData> cardItemDataAdapter, + CellInfoOverviewData overview) { + mCardItemDataAdapter = cardItemDataAdapter; + mOverview = overview; + mInflater = (LayoutInflater) getActivity().getSystemService( + Context.LAYOUT_INFLATER_SERVICE); + } + + void updateCellInfoOverview(CellInfoOverviewData overview) { + mOverview = overview; + notifyDataSetChanged(); + } + + @Override + public int getCount() { + return mCardItemDataAdapter.getCount() + 1; + } + + @Override + public Object getItem(int pos) { + if (pos == 0) { + return null; + } else { + return mCardItemDataAdapter.getItem(pos + 1); + } + } + + @Override + public long getItemId(int pos) { + return pos - 1; + } + + @Override + public int getItemViewType(int pos) { + return pos == 0 ? 0 : 1; + } + + @Override + public int getViewTypeCount() { + return 2; + } + + @SuppressWarnings("WrongConstant") + @Override + public View getView(int pos, View convertView, ViewGroup parent) { + if (pos == 0) { + CellInfoOverviewHolder holder; + if (convertView == null) { + convertView = mInflater.inflate(R.layout.item_cell_info_overview, parent, false); + holder = new CellInfoOverviewHolder(convertView); + convertView.setTag(holder); + } else { + holder = (CellInfoOverviewHolder) convertView.getTag(); + } + if (mOverview.mNeighboringCellsVisibility != -1) { + holder.mNeighboringCells.setVisibility(mOverview.mNeighboringCellsVisibility); + holder.mNeighboringCells.setText(mOverview.mNeighboringCells); + } + if (mOverview.mNeighboringTotalViewVisibility != -1) { + holder.mNeighboringTotalView.setVisibility(mOverview.mNeighboringTotalViewVisibility); + holder.mNeighboringTotal.setText(String.valueOf(mOverview.mNeighboringTotal)); + } + if (mOverview.mCipheringIndicatorLabelVisibility != -1) { + holder.mCipheringIndicatorLabel.setVisibility(mOverview.mCipheringIndicatorLabelVisibility); + } + if (mOverview.mCipheringIndicatorVisibility != -1) { + holder.mCipheringIndicator.setVisibility(mOverview.mCipheringIndicatorVisibility); + holder.mCipheringIndicator.setText(mOverview.mCipheringIndicator); + } + return convertView; + } else { + return mCardItemDataAdapter.getView(pos - 1, convertView, parent); + } + } + } + + class CellInfoOverviewData { + String mNeighboringCells; + int mNeighboringCellsVisibility = -1; + + int mNeighboringTotal; + int mNeighboringTotalViewVisibility = -1; + + int mCipheringIndicatorLabelVisibility = -1; + + String mCipheringIndicator; + int mCipheringIndicatorVisibility = -1; + } + + class CellInfoOverviewHolder { + TextView mNeighboringCells; + TextView mNeighboringTotal; + TableRow mNeighboringTotalView; + TextView mCipheringIndicatorLabel; + TextView mCipheringIndicator; + + CellInfoOverviewHolder(View view) { + mNeighboringCells = (TextView) view.findViewById(R.id.neighboring_cells); + mNeighboringTotal = (TextView) view.findViewById(R.id.neighboring_number); + mNeighboringTotalView = (TableRow) view.findViewById(R.id.neighboring_total); + mCipheringIndicatorLabel = (TextView) view.findViewById(R.id.ciphering_indicator_title); + mCipheringIndicator = (TextView) view.findViewById(R.id.ciphering_indicator); + } + } } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/DbViewerFragment.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/DbViewerFragment.java index a86c525a041f377fed4ef7dae394e92e332878e0..33b01cfdb61f894f852223affd16ac72a0bdb434 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/DbViewerFragment.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/DbViewerFragment.java @@ -81,31 +81,30 @@ public final class DbViewerFragment extends InjectionFragment { } mTableSelected = (StatesDbViewer) selectedItem; - realm.refresh(); switch (position) { case 0: - setListAdapter(new BaseStationAdapter(getActivity(), realm.allObjects(BaseTransceiverStation.class), true)); + setListAdapter(new BaseStationAdapter(getActivity(), realm.where(BaseTransceiverStation.class).findAll())); break; case 1: - setListAdapter(new MeasureAdapter(getActivity(), realm.allObjects(Measure.class), true)); + setListAdapter(new MeasureAdapter(getActivity(), realm.where(Measure.class).findAll())); break; case 2: - setListAdapter(new ImportAdapter(getActivity(), realm.allObjects(Import.class), true)); + setListAdapter(new ImportAdapter(getActivity(), realm.where(Import.class).findAll())); break; case 3: - setListAdapter(new DefaultLocationAdapter(getActivity(), realm.allObjects(DefaultLocation.class), true)); + setListAdapter(new DefaultLocationAdapter(getActivity(), realm.where(DefaultLocation.class).findAll())); break; case 4: //Silent SMS - setListAdapter(new SmsDataAdapter(getActivity(), realm.allObjects(SmsData.class), true)); + setListAdapter(new SmsDataAdapter(getActivity(), realm.where(SmsData.class).findAll())); break; case 5: - setListAdapter(new MeasuredCellStrengthAdapter(getActivity(), realm.allObjects(Measure.class), true)); + setListAdapter(new MeasuredCellStrengthAdapter(getActivity(), realm.where(Measure.class).findAll())); break; case 6: - setListAdapter(new EventAdapter(getActivity(), realm.allObjects(Event.class), true)); + setListAdapter(new EventAdapter(getActivity(), realm.where(Event.class).findAll())); break; case 7: - setListAdapter(new DetectionStringAdapter(getActivity(), realm.allObjects(SmsDetectionString.class), true)); + setListAdapter(new DetectionStringAdapter(getActivity(), realm.where(SmsDetectionString.class).findAll())); break; default: throw new IllegalArgumentException("Unknown type of table"); diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/DeviceFragment.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/DeviceFragment.java index 27d545f0ea34d19975a19154724ba83c7798936f..7a2bdaf60625aff70db87aaf666d2f4a0e59bdf5 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/DeviceFragment.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/DeviceFragment.java @@ -19,14 +19,14 @@ import android.telephony.TelephonyManager; import android.view.View; import android.widget.TableRow; +import com.kaichunlin.transition.animation.AnimationManager; import com.secupwn.aimsicd.R; import com.secupwn.aimsicd.service.AimsicdService; import com.secupwn.aimsicd.service.CellTracker; +import com.secupwn.aimsicd.ui.widget.HighlightTextView; import com.secupwn.aimsicd.utils.Cell; import com.secupwn.aimsicd.utils.Device; import com.secupwn.aimsicd.utils.Helpers; -import com.secupwn.aimsicd.ui.widget.HighlightTextView; -import com.kaichunlin.transition.animation.AnimationManager; import com.squareup.okhttp.Callback; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; @@ -59,6 +59,70 @@ public class DeviceFragment extends InjectionFragment implements SwipeRefreshLay private boolean mBound; private Context mContext; + @InjectView(R.id.network_lac) + private HighlightTextView locationAreaCodeView; + + @InjectView(R.id.gsm_cellid) + private TableRow gsmCellIdTableRow; + + @InjectView(R.id.network_cellid) + private HighlightTextView cellIdView; + + @InjectView(R.id.cdma_netid) + private TableRow cdmaNetworkIdRow; + @InjectView(R.id.cdma_sysid) + private TableRow cdmaSystemIdRow; + @InjectView(R.id.cdma_baseid) + private TableRow cdmaBaseIdRow; + + @InjectView(R.id.network_netid) + private HighlightTextView networkIdView; + @InjectView(R.id.network_sysid) + private HighlightTextView systemIdView; + @InjectView(R.id.network_baseid) + private HighlightTextView baseIdView; + + @InjectView(R.id.lte_timing_advance) + private TableRow lteTimingAdvanceRow; + + @InjectView(R.id.network_lte_timing_advance) + private HighlightTextView lteTimingAdvanceView; + + @InjectView(R.id.primary_scrambling_code) + private TableRow primaryScramblingCodeRow; + + @InjectView(R.id.network_psc) + private HighlightTextView primaryScramblingCodeView; + + @InjectView(R.id.sim_country) + private HighlightTextView simCountryView; + @InjectView(R.id.sim_operator_id) + private HighlightTextView simOperatorIdView; + @InjectView(R.id.sim_operator_name) + private HighlightTextView simOperatorNameView; + @InjectView(R.id.sim_imsi) + private HighlightTextView simImsiView; + @InjectView(R.id.sim_serial) + private HighlightTextView simSerialView; + @InjectView(R.id.device_type) + private HighlightTextView deviceTypeView; + @InjectView(R.id.device_imei) + private HighlightTextView deviceImeiView; + @InjectView(R.id.device_version) + private HighlightTextView deviceImeiVersionView; + @InjectView(R.id.network_name) + private HighlightTextView networkNameView; + @InjectView(R.id.network_code) + private HighlightTextView networkCodeView; + @InjectView(R.id.network_type) + private HighlightTextView networkTypeView; + @InjectView(R.id.data_activity) + private HighlightTextView dataActivityTypeView; + @InjectView(R.id.data_status) + private HighlightTextView dataStatusView; + @InjectView(R.id.network_roaming) + private HighlightTextView networkRoamingView; + @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); @@ -117,8 +181,6 @@ public class DeviceFragment extends InjectionFragment implements SwipeRefreshLay }; private void updateUI() { - HighlightTextView content; - TableRow tr; if (mBound) { final AnimationManager ani = new AnimationManager(); @@ -129,81 +191,57 @@ public class DeviceFragment extends InjectionFragment implements SwipeRefreshLay case TelephonyManager.PHONE_TYPE_NONE: // Maybe bad! case TelephonyManager.PHONE_TYPE_SIP: // Maybe bad! case TelephonyManager.PHONE_TYPE_GSM: { - content = (HighlightTextView) getView().findViewById(R.id.network_lac); - content.updateText(String.valueOf(mAimsicdService.getCell().getLocationAreaCode()), ani); - tr = (TableRow) getView().findViewById(R.id.gsm_cellid); - tr.setVisibility(View.VISIBLE); - content = (HighlightTextView) getView().findViewById(R.id.network_cellid); - content.updateText(String.valueOf(mAimsicdService.getCell().getCellId()), ani); + locationAreaCodeView.updateText(String.valueOf(mAimsicdService.getCell().getLocationAreaCode()), ani); + gsmCellIdTableRow.setVisibility(View.VISIBLE); + cellIdView.updateText(String.valueOf(mAimsicdService.getCell().getCellId()), ani); break; } case TelephonyManager.PHONE_TYPE_CDMA: { - tr = (TableRow) getView().findViewById(R.id.cdma_netid); - tr.setVisibility(View.VISIBLE); - content = (HighlightTextView) getView().findViewById(R.id.network_netid); - content.updateText(String.valueOf(mAimsicdService.getCell().getLocationAreaCode()), ani); - tr = (TableRow) getView().findViewById(R.id.cdma_sysid); - tr.setVisibility(View.VISIBLE); - content = (HighlightTextView) getView().findViewById(R.id.network_sysid); - content.updateText(String.valueOf(mAimsicdService.getCell().getSid()), ani); - tr = (TableRow) getView().findViewById(R.id.cdma_baseid); - tr.setVisibility(View.VISIBLE); - content = (HighlightTextView) getView().findViewById(R.id.network_baseid); - content.updateText(String.valueOf(mAimsicdService.getCell().getCellId()), ani); + cdmaNetworkIdRow.setVisibility(View.VISIBLE); + networkIdView.updateText(String.valueOf(mAimsicdService.getCell().getLocationAreaCode()), ani); + + cdmaSystemIdRow.setVisibility(View.VISIBLE); + systemIdView.updateText(String.valueOf(mAimsicdService.getCell().getSid()), ani); + + cdmaBaseIdRow.setVisibility(View.VISIBLE); + baseIdView.updateText(String.valueOf(mAimsicdService.getCell().getCellId()), ani); break; } + default: + log.error("unknown phone type: " + mDevice.getPhoneId()); } if (mAimsicdService.getCell().getTimingAdvance() != Integer.MAX_VALUE) { - tr = (TableRow) getView().findViewById(R.id.lte_timing_advance); - tr.setVisibility(View.VISIBLE); - content = (HighlightTextView) getView().findViewById(R.id.network_lte_timing_advance); - content.updateText(String.valueOf(mAimsicdService.getCell().getTimingAdvance()), ani); + lteTimingAdvanceRow.setVisibility(View.VISIBLE); + lteTimingAdvanceView.updateText(String.valueOf(mAimsicdService.getCell().getTimingAdvance()), ani); } else { - tr = (TableRow) getView().findViewById(R.id.lte_timing_advance); - tr.setVisibility(View.GONE); + lteTimingAdvanceRow.setVisibility(View.GONE); } if (mAimsicdService.getCell().getPrimaryScramblingCode() != Integer.MAX_VALUE) { - content = (HighlightTextView) getView().findViewById(R.id.network_psc); - content.updateText(String.valueOf(mAimsicdService.getCell().getPrimaryScramblingCode()), ani); - tr = (TableRow) getView().findViewById(R.id.primary_scrambling_code); - tr.setVisibility(View.VISIBLE); + primaryScramblingCodeView.updateText(String.valueOf(mAimsicdService.getCell().getPrimaryScramblingCode()), ani); + primaryScramblingCodeRow.setVisibility(View.VISIBLE); } String notAvailable = getString(R.string.n_a); - content = (HighlightTextView) getView().findViewById(R.id.sim_country); - content.updateText(mDevice.getSimCountry().orElse(notAvailable), ani); - content = (HighlightTextView) getView().findViewById(R.id.sim_operator_id); - content.updateText(mDevice.getSimOperator().orElse(notAvailable), ani); - content = (HighlightTextView) getView().findViewById(R.id.sim_operator_name); - content.updateText(mDevice.getSimOperatorName().orElse(notAvailable), ani); - content = (HighlightTextView) getView().findViewById(R.id.sim_imsi); - content.updateText(mDevice.getSimSubs().orElse(notAvailable), ani); - content = (HighlightTextView) getView().findViewById(R.id.sim_serial); - content.updateText(mDevice.getSimSerial().orElse(notAvailable), ani); - - content = (HighlightTextView) getView().findViewById(R.id.device_type); - content.updateText(mDevice.getPhoneType(), ani); - content = (HighlightTextView) getView().findViewById(R.id.device_imei); - content.updateText(mDevice.getIMEI(), ani); - content = (HighlightTextView) getView().findViewById(R.id.device_version); - content.updateText(mDevice.getIMEIv(), ani); - content = (HighlightTextView) getView().findViewById(R.id.network_name); - content.updateText(mDevice.getNetworkName(), ani); - content = (HighlightTextView) getView().findViewById(R.id.network_code); - content.updateText(mDevice.getMncMcc(), ani); - content = (HighlightTextView) getView().findViewById(R.id.network_type); - content.updateText(mDevice.getNetworkTypeName(), ani); - - content = (HighlightTextView) getView().findViewById(R.id.data_activity); - content.updateText(mDevice.getDataActivityType(), ani); - content = (HighlightTextView) getView().findViewById(R.id.data_status); - content.updateText(mDevice.getDataState(), ani); - content = (HighlightTextView) getView().findViewById(R.id.network_roaming); - content.updateText(String.valueOf(mDevice.isRoaming()), ani); + simCountryView.updateText(mDevice.getSimCountry().orElse(notAvailable), ani); + simOperatorIdView.updateText(mDevice.getSimOperator().orElse(notAvailable), ani); + simOperatorNameView.updateText(mDevice.getSimOperatorName().orElse(notAvailable), ani); + simImsiView.updateText(mDevice.getSimSubs().orElse(notAvailable), ani); + simSerialView.updateText(mDevice.getSimSerial().orElse(notAvailable), ani); + + deviceTypeView.updateText(mDevice.getPhoneType(), ani); + deviceImeiView.updateText(mDevice.getIMEI(), ani); + deviceImeiVersionView.updateText(mDevice.getIMEIv(), ani); + networkNameView.updateText(mDevice.getNetworkName(), ani); + networkCodeView.updateText(mDevice.getMncMcc(), ani); + networkTypeView.updateText(mDevice.getNetworkTypeName(), ani); + + dataActivityTypeView.updateText(mDevice.getDataActivityType(), ani); + dataStatusView.updateText(mDevice.getDataState(), ani); + networkRoamingView.updateText(String.valueOf(mDevice.isRoaming()), ani); ani.startAnimation(5000); } diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/MapFragment.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/MapFragment.java index bc588c3ecacc9dbcbdcde42241cb94600382dfed..606e0c3ce362f50f673dbf22ed8a740a664ea19e 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/MapFragment.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/ui/fragments/MapFragment.java @@ -106,7 +106,7 @@ public final class MapFragment extends InjectionFragment implements OnSharedPref private AimsicdService mAimsicdService; private boolean mBound; - private GeoPoint loc = null; + private GeoPoint mLatestCellLoc = null; private MyLocationNewOverlay mMyLocationOverlay; private CompassOverlay mCompassOverlay; @@ -178,13 +178,14 @@ public final class MapFragment extends InjectionFragment implements OnSharedPref if (mMyLocationOverlay != null) { mMyLocationOverlay.enableMyLocation(); + mMyLocationOverlay.enableFollowLocation(); } } @Override public void onDestroyView() { - super.onDestroy(); + super.onDestroyView(); LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mMessageReceiver); if (mCompassOverlay != null) { @@ -193,9 +194,12 @@ public final class MapFragment extends InjectionFragment implements OnSharedPref if (mMyLocationOverlay != null) { mMyLocationOverlay.disableMyLocation(); + mMyLocationOverlay.disableFollowLocation(); } - prefs.unregisterOnSharedPreferenceChangeListener(this); + if (prefs != null) { + prefs.unregisterOnSharedPreferenceChangeListener(this); + } // Unbind from the service if (mBound) { getActivity().unbindService(mConnection); @@ -287,28 +291,37 @@ public final class MapFragment extends InjectionFragment implements OnSharedPref */ private void setUpMapIfNeeded() { + mMap.getOverlayManager().clear(); // Check if we were successful in obtaining the map. mMap.setBuiltInZoomControls(true); mMap.setMultiTouchControls(true); mMap.setMinZoomLevel(3); mMap.setMaxZoomLevel(19); // Latest OSM can go to 21! mMap.getTileProvider().createTileCache(); - mCompassOverlay = new CompassOverlay(getActivity(), new InternalCompassOrientationProvider(getActivity()), mMap); + + if (mCompassOverlay == null) { + mCompassOverlay = new CompassOverlay(getActivity(), new InternalCompassOrientationProvider(getActivity()), mMap); + } ScaleBarOverlay mScaleBarOverlay = new ScaleBarOverlay(getActivity()); mScaleBarOverlay.setScaleBarOffset(getResources().getDisplayMetrics().widthPixels / 2, 10); mScaleBarOverlay.setCentred(true); // Sets cluster pin color - mCellTowerGridMarkerClusterer = new CellTowerGridMarkerClusterer(getActivity()); - BitmapDrawable mapPinDrawable = (BitmapDrawable) getResources().getDrawable(R.drawable.ic_map_pin_orange); - mCellTowerGridMarkerClusterer.setIcon(mapPinDrawable == null ? null : mapPinDrawable.getBitmap()); + if (mCellTowerGridMarkerClusterer == null) { + mCellTowerGridMarkerClusterer = new CellTowerGridMarkerClusterer(getActivity()); + BitmapDrawable mapPinDrawable = (BitmapDrawable) getResources().getDrawable(R.drawable.ic_map_pin_orange); + mCellTowerGridMarkerClusterer.setIcon(mapPinDrawable == null ? null : mapPinDrawable.getBitmap()); + } - GpsMyLocationProvider gpsMyLocationProvider = new GpsMyLocationProvider(getActivity().getBaseContext()); - gpsMyLocationProvider.setLocationUpdateMinDistance(100); // [m] // Set the minimum distance for location updates - gpsMyLocationProvider.setLocationUpdateMinTime(10000); // [ms] // Set the minimum time interval for location updates - mMyLocationOverlay = new MyLocationNewOverlay(getActivity().getBaseContext(), gpsMyLocationProvider, mMap); - mMyLocationOverlay.setDrawAccuracyEnabled(true); + if (mMyLocationOverlay == null) { + GpsMyLocationProvider gpsMyLocationProvider = new GpsMyLocationProvider(getActivity().getBaseContext()); + gpsMyLocationProvider.setLocationUpdateMinDistance(100); // [m] // Set the minimum distance for location updates + gpsMyLocationProvider.setLocationUpdateMinTime(10000); // [ms] // Set the minimum time interval for location updates + + mMyLocationOverlay = new MyLocationNewOverlay(getActivity().getBaseContext(), gpsMyLocationProvider, mMap); + mMyLocationOverlay.setDrawAccuracyEnabled(true); + } mMap.getOverlays().add(mCellTowerGridMarkerClusterer); mMap.getOverlays().add(mMyLocationOverlay); @@ -347,11 +360,11 @@ public final class MapFragment extends InjectionFragment implements OnSharedPref } } - if (loc != null) { + if (mLatestCellLoc != null) { Helpers.msgLong(getActivity(), getString(R.string.contacting_opencellid_for_data)); Cell cell = new Cell(); - cell.setLat(loc.getLatitude()); - cell.setLon(loc.getLongitude()); + cell.setLat(mLatestCellLoc.getLatitude()); + cell.setLon(mLatestCellLoc.getLongitude()); setRefreshActionButtonState(true); TinyDB.getInstance().putBoolean(TinyDbKeys.FINISHED_LOAD_IN_MAP, false); Helpers.getOpenCellData((InjectionAppCompatActivity) getActivity(), cell, RequestTask.DBE_DOWNLOAD_REQUEST_FROM_MAP, mAimsicdService); @@ -422,16 +435,16 @@ public final class MapFragment extends InjectionFragment implements OnSharedPref if (Double.doubleToRawLongBits(dLat) != 0 || Double.doubleToRawLongBits(dLng) != 0) { - loc = new GeoPoint(dLat, dLng); + mLatestCellLoc = new GeoPoint(dLat, dLng); CellTowerMarker ovm = new CellTowerMarker(getActivity(), mMap, "Cell ID: " + cellID, - "", loc, + "", mLatestCellLoc, new MarkerData( getContext(), String.valueOf(cellID), - String.valueOf(loc.getLatitude()), - String.valueOf(loc.getLongitude()), + String.valueOf(mLatestCellLoc.getLatitude()), + String.valueOf(mLatestCellLoc.getLongitude()), String.valueOf(lac), String.valueOf(mcc), String.valueOf(mnc), @@ -481,15 +494,15 @@ public final class MapFragment extends InjectionFragment implements OnSharedPref return null; } try { - loc = new GeoPoint(cell.getLat(), cell.getLon()); + mLatestCellLoc = new GeoPoint(cell.getLat(), cell.getLon()); CellTowerMarker ovm = new CellTowerMarker(getActivity(), mMap, getString(R.string.cell_id_label) + cell.getCellId(), - "", loc, + "", mLatestCellLoc, new MarkerData( getContext(), String.valueOf(cell.getCellId()), - String.valueOf(loc.getLatitude()), - String.valueOf(loc.getLongitude()), + String.valueOf(mLatestCellLoc.getLatitude()), + String.valueOf(mLatestCellLoc.getLongitude()), String.valueOf(cell.getLocationAreaCode()), String.valueOf(cell.getMobileCountryCode()), String.valueOf(cell.getMobileNetworkCode()), @@ -520,29 +533,35 @@ public final class MapFragment extends InjectionFragment implements OnSharedPref */ @Override protected void onPostExecute(GeoPoint defaultLoc) { - if (loc != null && (Double.doubleToRawLongBits(loc.getLatitude()) != 0 - && Double.doubleToRawLongBits(loc.getLongitude()) != 0)) { - mMap.getController().setZoom(16); - mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); - } else { - if (mBound) { - // Try and find last known location and zoom there - GeoLocation lastLoc = mAimsicdService.lastKnownLocation(); - if (lastLoc != null) { - loc = new GeoPoint(lastLoc.getLatitudeInDegrees(), - lastLoc.getLongitudeInDegrees()); - - mMap.getController().setZoom(16); - mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); - } else { - //Use MCC to move camera to an approximate location near Countries Capital - loc = defaultLoc; - - mMap.getController().setZoom(12); - mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); - } + boolean movedMap = false; + if (mBound) { + // Try and find last known location and zoom there + GeoLocation lastLoc = mAimsicdService.lastKnownLocation(); + if (lastLoc != null) { + GeoPoint loc = new GeoPoint(lastLoc.getLatitudeInDegrees(), + lastLoc.getLongitudeInDegrees()); + + mMap.getController().setZoom(16); + mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); + movedMap = true; + } + } + if (!movedMap) { + if (mLatestCellLoc != null && (Double.doubleToRawLongBits(mLatestCellLoc.getLatitude()) != 0 + && Double.doubleToRawLongBits(mLatestCellLoc.getLongitude()) != 0)) { + mMap.getController().setZoom(16); + mMap.getController().animateTo(new GeoPoint(mLatestCellLoc.getLatitude(), mLatestCellLoc.getLongitude())); + movedMap = true; } } + if (!movedMap) { + //Use MCC to move camera to an approximate location near Countries Capital + GeoPoint loc = defaultLoc; + + mMap.getController().setZoom(12); + mMap.getController().animateTo(new GeoPoint(loc.getLatitude(), loc.getLongitude())); + movedMap = true; + } if (mCellTowerGridMarkerClusterer != null) { if (BuildConfig.DEBUG && mCellTowerGridMarkerClusterer.getItems() != null) { log.verbose("CellTowerMarkers.invalidate() markers.size():" + mCellTowerGridMarkerClusterer.getItems().size()); diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/FixedGZIPInputStream.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/FixedGZIPInputStream.java new file mode 100644 index 0000000000000000000000000000000000000000..97cf502d23631495289aa8988caa517443153a89 --- /dev/null +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/FixedGZIPInputStream.java @@ -0,0 +1,55 @@ +package com.secupwn.aimsicd.utils; + +import android.support.annotation.NonNull; + +import java.io.FilterInputStream; +import java.io.IOException; +import java.util.zip.GZIPInputStream; + +/** + * GZIPInputStream that works correctly with files more than 2 GiB + * <p/> + * <p><b>Rationale</b> + * <p>Android Java implementation of {@link GZIPInputStream} contains verifyCrc method that + * incorrectly checks for gzip size on EOF. It happens when the uncompressed + * file is greater than 2 GiB and {@link java.util.zip.Inflater#getTotalOut()} returns + * a negative number since the return type is int and {@code Integer.MAX_VALUE} is about 2GiB. + * So it throws {@code IOException("Size mismatch")} + * <p/> + * <p>Oracle already fixed this bug in Java 6 (see https://bugs.openjdk.java.net/browse/JDK-5092263) + * but Android implementation is still affected. + * <p/> + * <p><b>Workaround</b> + * <p>If read throws a specific exception in {@code InputStream#read} we are sure that it is an EOF + * and we can consume this exception and just return EOF. There could be a problem with a possible + * loss of last buffer but it is better than a loss of full stream. + */ +public class FixedGZIPInputStream extends FilterInputStream { + public FixedGZIPInputStream(GZIPInputStream in) { + super(in); + } + + @Override + public int read(@NonNull byte[] buffer) throws IOException { + try { + return super.read(buffer); + } catch (IOException e) { + if (e.getMessage().equals("Size mismatch")) { + return -1; + } + throw e; + } + } + + @Override + public int read(@NonNull byte[] buffer, int byteOffset, int byteCount) throws IOException { + try { + return super.read(buffer, byteOffset, byteCount); + } catch (IOException e) { + if (e.getMessage().equals("Size mismatch")) { + return -1; + } + throw e; + } + } +} diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/Helpers.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/Helpers.java index 7316348d86f76d130bd5cd9c36d074473393fb72..5e230b98070a4bed192b78a44dca4b5c19bf79ec 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/Helpers.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/Helpers.java @@ -24,6 +24,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo; +import android.net.Uri; import android.support.v4.app.Fragment; import android.text.TextUtils; @@ -259,6 +260,57 @@ import io.freefair.android.util.logging.Logger; } } + /** + * Description: Imports cell data from the specified file + * + * Used: + * @param celltowersPath path to the cell_towers.csv / cell_towers.csv.gz + * @param cell Current Cell Information + * @param importFile + * + */ + public static void importCellTowersData(InjectionAppCompatActivity injectionActivity, Cell cell, + Uri importFile, + final AimsicdService service) { + if (Helpers.isNetAvailable(injectionActivity)) { + int radius = 2; // Use a 2 Km radius with center at GPS location. + + if (Double.doubleToRawLongBits(cell.getLat()) != 0 && + Double.doubleToRawLongBits(cell.getLon()) != 0) { + GeoLocation currentLoc = GeoLocation.fromDegrees(cell.getLat(), cell.getLon()); + + log.info("OCID location: " + currentLoc.toString() + " with radius " + radius + " Km."); + log.info("OCID MCC is set to: " + cell.getMobileCountryCode()); + log.info("OCID MNC is set to: " + cell.getMobileNetworkCode()); + + new ImportTask(injectionActivity, importFile, + cell.getMobileCountryCode(), cell.getMobileNetworkCode(), currentLoc, radius, + new ImportTask.AsyncTaskCompleteListener() { + @Override + public void onAsyncTaskSucceeded() { + log.verbose("ImportTask's OCID import was successful. Callback rechecking connected cell against database"); + service.getCellTracker().compareLacAndOpenDb(); + } + + @Override + public void onAsyncTaskFailed(String result) { + } + }).execute(); + } + + } else { + Fragment myFragment = injectionActivity.getSupportFragmentManager().findFragmentByTag(String.valueOf(DrawerMenu.ID.MAIN.ALL_CURRENT_CELL_DETAILS)); + if (myFragment instanceof MapFragment) { + ((MapFragment) myFragment).setRefreshActionButtonState(false); + } + + final AlertDialog.Builder builder = new AlertDialog.Builder(injectionActivity); + builder.setTitle(R.string.no_network_connection_title) + .setMessage(R.string.no_network_connection_message); + builder.create().show(); + } + } + /** * Return a String List representing response from invokeOemRilRequestRaw * diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/ImportTask.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/ImportTask.java new file mode 100644 index 0000000000000000000000000000000000000000..b5315d1612e9c25860f8fc13e753aa0aea3e6479 --- /dev/null +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/ImportTask.java @@ -0,0 +1,292 @@ +/* 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.net.Uri; +import android.support.annotation.NonNull; + +import com.secupwn.aimsicd.R; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.Arrays; +import java.util.Date; +import java.util.zip.GZIPInputStream; + +import au.com.bytecode.opencsv.CSVReader; +import io.freefair.android.injection.annotation.Inject; +import io.freefair.android.injection.app.InjectionAppCompatActivity; +import io.freefair.android.util.logging.Logger; +import io.realm.Realm; +import lombok.Cleanup; + +/** + * Description: + * <p/> + * This class is the request handler for Importing data from OpenCellID's cell_towers.csv or + * gzipped cell_towers.csv.gz. + * Format of the file slightly differs from the OpenCellID's so it is converted on the + * fly and filtered by MCC, MNC, location. + * <p/> + */ +public class ImportTask extends BaseAsyncTask<String, Integer, String> { + + @Inject + private Logger log; + + private RealmHelper mDbAdapter; + private Context mAppContext; + private final Uri importFile; + private final int mobileCountryCode; + private final int mobileNetworkCode; + private final GeoLocation currentLocation; + private final int locationRadius; + + private AsyncTaskCompleteListener mListener; + + public static final double EARTH_RADIUS = 6371.01; + + /** + * @param context App context + * @param importFile URI pointing to the file cell_towers.csv or cell_towers.csv.gz + * @param mobileCountryCode MCC filter + * @param mobileNetworkCode MNC filter + * @param currentLocation GPS location of cell + * @param locationRadius filtering radius + * @param listener Allows the caller of RequestTask to implement success/fail callbacks + */ + public ImportTask(InjectionAppCompatActivity context, + Uri importFile, + int mobileCountryCode, int mobileNetworkCode, + GeoLocation currentLocation, int locationRadius, + AsyncTaskCompleteListener listener) { + super(context); + this.importFile = importFile; + this.mobileCountryCode = mobileCountryCode; + this.mobileNetworkCode = mobileNetworkCode; + this.currentLocation = currentLocation; + this.locationRadius = locationRadius; + this.mAppContext = context.getApplicationContext(); + this.mDbAdapter = new RealmHelper(mAppContext); + this.mListener = listener; + } + + /** + * Imports data from cell_towers.csv + * <p/> + * <blockquote> + * opencellid.csv layout: + * lat,lon,mcc,mnc,lac,cellid,averageSignalStrength,range,samples,changeable,radio,rnc,cid,psc, + * tac,pci,sid,nid,bid + * <p/> + * example: + * 52.201454,21.065345,260,2,58140,42042781,-59,1234,3,1,UMTS,641,34205,,,, + * <p/> + * cell_towers.csv layout: + * radio,mcc,net,area,cell,unit,lon,lat,range,samples,changeable,created,updated,averageSignal + * 0 radio + * 1 mcc + * 2 net (mnc) + * 3 area (lac) + * 4 cell (long) + * 5 unit + * 6 lon + * 7 lat + * 8 range + * 9 samples + * 10 changeable + * 11 created + * 12 updated + * 13 averageSignal + * <p/> + * example: + * UMTS,260,2,58140,42042781,,21.03006,52.207811,21,2,1,1379428153,1458591497,-92 + * </blockquote> + */ + @Override + protected String doInBackground(String... commandString) { + + try { + @Cleanup Realm realm = Realm.getDefaultInstance(); + + Long elapsedSeconds = System.currentTimeMillis() / 1000; + + // Prepare filtering values + final String mccFilter = String.valueOf(mobileCountryCode); + final String mncFilter = String.valueOf(mobileNetworkCode); + + long progress = 0; + long failedRecords = 0; + + CSVReader csvReader = null; + try { + String next[]; + + csvReader = new CSVReader(createFileReader()); + csvReader.readNext(); // skip header + + String[] opencellid_csv = new String[14]; + while ((next = csvReader.readNext()) != null) { + if (next.length < 14) { + log.warn("Not enough values in string: " + Arrays.toString(next)); + ++failedRecords; + continue; + } + if (!next[1].equals(mccFilter) || !next[2].equals(mncFilter)) { + continue; + } + if (next[6].isEmpty() || next[7].isEmpty()) { + continue; + } + GeoLocation location = GeoLocation.fromDegrees(Double.parseDouble(next[7]), + Double.parseDouble(next[6])); + if (location.distanceTo(currentLocation, EARTH_RADIUS) > locationRadius) { + continue; + } + + try { + // set non-existent range, avgSignal, etc to "0" so they + // will be possibly filtered by checkDBe + opencellid_csv[0] = next[7]; // lat + opencellid_csv[1] = next[6]; // lon + opencellid_csv[2] = next[1]; // mcc + opencellid_csv[3] = next[2]; // mnc + opencellid_csv[4] = next[3]; // lac + opencellid_csv[5] = next[4]; // cellid, long + opencellid_csv[6] = stringOrZero(next[13]); // averageSignalStrength + opencellid_csv[7] = stringOrZero(next[8]); // range + opencellid_csv[8] = stringOrZero(next[9]); // samples + opencellid_csv[9] = stringOrZero(next[10]); // changeable + opencellid_csv[10] = next[0]; // radio + opencellid_csv[11] = null; // rnc, not used + opencellid_csv[12] = null; // cid, not used + opencellid_csv[13] = null; // psc, not present + + Date dateCreated = dateOrNow(next[11]); + Date dateUpdated = dateOrNow(next[12]); + + mDbAdapter.addCSVRecord(realm, opencellid_csv, dateCreated, dateUpdated); + ++progress; + + } catch (NumberFormatException e) { + log.warn("Problem parsing a record: " + Arrays.toString(opencellid_csv), e); + ++failedRecords; + } + + if ((progress % 100) == 0) { + log.debug("Imported records for now: " + String.valueOf(progress)); + // do not know progress because determining line count in gzipped + // multi-gigabyte file is slow + //publishProgress((int) progress, (int) totalRecords); + } + if ((progress % 1000) == 0) { + try { + Thread.sleep(1000); // wait 1 second to allow user to see progress bar. + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } + } + } finally { + if (csvReader != null) { + csvReader.close(); + } + } + elapsedSeconds = (System.currentTimeMillis() / 1000) - elapsedSeconds; + log.debug("Importing took " + String.valueOf(elapsedSeconds) + " seconds"); + log.debug("Imported records: " + String.valueOf(progress)); + log.debug("Failed records: " + String.valueOf(failedRecords)); + + return "Successful"; + + } catch (IOException e) { + log.warn("Problem reading data from CSV", e); + return null; + } + } + + /** + * Creates a new reader for optionally gziped file + */ + @NonNull + private Reader createFileReader() throws IOException { + String type = mAppContext.getContentResolver().getType(importFile); + boolean isGzip = type != null && type.equals("application/octet-stream") && + importFile.toString().endsWith(".gz"); + log.info("Importing " + (isGzip ? "gzipped file" : "plain-text file") + ": " + importFile); + + InputStream fileStream = mAppContext.getContentResolver().openInputStream(importFile); + if (fileStream == null) { + throw new IOException("File cannot be opened"); + } + if (isGzip) { + fileStream = new FixedGZIPInputStream(new GZIPInputStream(fileStream)); + } + return new InputStreamReader(fileStream); + } + + @NonNull + private static Date dateOrNow(String timestamp) { + return timestamp == null || timestamp.isEmpty() ? new Date() : new Date(Long.valueOf(timestamp) * 1000); + } + + private static String stringOrZero(String s) { + return s == null || s.isEmpty() ? "0" : s; + } + + /** + * This is where we: + * <ol> + * <li>Check the success for data import</li> + * <li>call the updateOpenCellID() to populate the {@link com.secupwn.aimsicd.data.model.Import Import} realm</li> + * <li>call the {@link RealmHelper#checkDBe()} to cleanup bad cells from imported data</li> + * <li>present a failure/success toast message</li> + * <li>set a shared preference to indicate that data has been downloaded: + * {@code ocid_downloaded true}</li> + * </ol> + */ + @Override + protected void onPostExecute(String result) { + super.onPostExecute(result); + TinyDB tinydb = TinyDB.getInstance(); + + @Cleanup Realm realm = Realm.getDefaultInstance(); + + // if `result` is null, it will evaluate to false, no need to check for null + if ("Successful".equals(result)) { + + Helpers.msgShort(mAppContext, mAppContext.getString(R.string.celltowers_data_successfully_imported)); + + realm.executeTransaction(mDbAdapter.checkDBe()); + tinydb.putBoolean("ocid_downloaded", true); + } else { + Helpers.msgLong(mAppContext, mAppContext.getString(R.string.error_importing_celltowers_data)); + } + + if (mListener != null) { + if ("Successful".equals(result)) { + mListener.onAsyncTaskSucceeded(); + } else { + mListener.onAsyncTaskFailed(result); + } + } + } + + /** + * The interface to be implemented by the caller of ImportTask so it can perform contextual + * actions once the async task is completed. + * <p/> + * E.g. rechecking current cell in the newly updated database after OCID imported. + */ + public interface AsyncTaskCompleteListener { + void onAsyncTaskSucceeded(); + + void onAsyncTaskFailed(String result); + } +} diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/RealmHelper.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/RealmHelper.java index 54d8c25c700f10653c23cb7fccc2a875c906f245..659640c167edc6a8db1c64fd2874204d182b70be 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/RealmHelper.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/RealmHelper.java @@ -32,7 +32,7 @@ import io.realm.RealmResults; /** * This class handles all the AMISICD DataBase maintenance operations, like - * creation, population, updates, backup, restore and various selections. + * creation, population, updates and various selections. */ public final class RealmHelper { private final Logger log = AndroidLogger.forClass(RealmHelper.class); @@ -147,7 +147,7 @@ public final class RealmHelper { .or() .equalTo("cellId", Integer.MAX_VALUE) .findAll() - .clear(); + .deleteAllFromRealm(); } }; } @@ -225,7 +225,6 @@ public final class RealmHelper { /** * Parses the downloaded CSV from OpenCellID and uses it to populate "Import" table. * <p/> - * a) We do not include "rej_cause" in backups. set to 0 as default * b) Unfortunately there are 2 important missing items in the OCID CSV file: * - "time_first" * - "time_last" @@ -294,54 +293,8 @@ public final class RealmHelper { int rowCounter; for (rowCounter = 1; rowCounter < lines; rowCounter++) { - // Insert details into OpenCellID Database using: insertDBeImport() - // Beware of negative values of "range" and "samples"!! - String lat = csvCellID.get(rowCounter)[0], //TEXT - lon = csvCellID.get(rowCounter)[1], //TEXT - mcc = csvCellID.get(rowCounter)[2], //int - mnc = csvCellID.get(rowCounter)[3], //int - lac = csvCellID.get(rowCounter)[4], //int - cellid = csvCellID.get(rowCounter)[5], //int long CID [>65535] - range = csvCellID.get(rowCounter)[6], //int - avg_sig = csvCellID.get(rowCounter)[7], //int - samples = csvCellID.get(rowCounter)[8], //int - change = csvCellID.get(rowCounter)[9], //int - radio = csvCellID.get(rowCounter)[10], //TEXT -// rnc = csvCellID.get(rowCounter)[11], //int -// cid = csvCellID.get(rowCounter)[12], //int short CID [<65536] - psc = csvCellID.get(rowCounter)[13]; //int - - // Some OCID data may not contain PSC so we indicate this with an out-of-range - // PSC value. Should be -1 but hey people already imported so we're stuck with - // this. - int iPsc = 666; - if (psc != null && !psc.isEmpty()) { - iPsc = Integer.parseInt(psc); - } - - //Reverse order 1 = 0 & 0 = 1 - // what if ichange is 4? ~ agilob - int ichange = Integer.parseInt(change); - ichange = (ichange == 0 ? 1 : 0); - - Realm.Transaction transaction = insertDBeImport( - "OCID", // DBsource - radio, // RAT - Integer.parseInt(mcc), // MCC - Integer.parseInt(mnc), // MNC - Integer.parseInt(lac), // LAC - Integer.parseInt(cellid), // CID (cellid) ? - iPsc, // psc - Double.parseDouble(lat), // gps_lat - Double.parseDouble(lon), // gps_lon - ichange == 0, // isGPSexact - Integer.parseInt(avg_sig), // avg_signal [dBm] - Integer.parseInt(range), // avg_range [m] - Integer.parseInt(samples), // samples - new Date(), // time_first (not in OCID) - new Date() // time_last (not in OCID) - ); - realm.executeTransaction(transaction); + + addCSVRecord(realm, csvCellID.get(rowCounter)); } log.debug("PopulateDBeImport(): inserted " + rowCounter + " cells."); } @@ -361,6 +314,66 @@ public final class RealmHelper { } } + public void addCSVRecord(Realm realm, String[] csv) { + Date date = new Date(); + addCSVRecord(realm, csv, date, date); + } + /** + * Adds one CSV record from OpenCellID import to the database to populate "Import" table. + * + */ + public void addCSVRecord(Realm realm, String[] csv, Date created, Date updated) { + + // Insert details into OpenCellID Database using: insertDBeImport() + // Beware of negative values of "range" and "samples"!! + String lat = csv[0], //TEXT + lon = csv[1], //TEXT + mcc = csv[2], //int + mnc = csv[3], //int + lac = csv[4], //int + cellid = csv[5], //int long CID [>65535] + range = csv[6], //int + avg_sig = csv[7], //int + samples = csv[8], //int + change = csv[9], //int + radio = csv[10], //TEXT +// rnc = csv[11], //int +// cid = csv[12], //int short CID [<65536] + psc = csv[13]; //int + + // Some OCID data may not contain PSC so we indicate this with an out-of-range + // PSC value. Should be -1 but hey people already imported so we're stuck with + // this. + int iPsc = 666; + if (psc != null && !psc.isEmpty()) { + iPsc = Integer.parseInt(psc); + } + + //Reverse order 1 = 0 & 0 = 1 + // what if ichange is 4? ~ agilob + int ichange = Integer.parseInt(change); + ichange = (ichange == 0 ? 1 : 0); + + Realm.Transaction transaction = insertDBeImport( + "OCID", // DBsource + radio, // RAT + Integer.parseInt(mcc), // MCC + Integer.parseInt(mnc), // MNC + Integer.parseInt(lac), // LAC + Integer.parseInt(cellid), // CID (cellid) ? + iPsc, // psc + Double.parseDouble(lat), // gps_lat + Double.parseDouble(lon), // gps_lon + ichange == 0, // isGPSexact + Integer.parseInt(avg_sig), // avg_signal [dBm] + Integer.parseInt(range), // avg_range [m] + Integer.parseInt(samples), // samples + created, // time_first (not in OCID) + updated // time_last (not in OCID) + ); + realm.executeTransaction(transaction); + } + /** * This is the {@link Import} data consistency check wich checks each * imported BTS data for consistency and correctness according to general @@ -395,7 +408,7 @@ public final class RealmHelper { log.debug("CheckDBe() Attempting to delete bad import data from Imports database..."); // =========== samples =========== - realm.where(Import.class).lessThan("samples", 1).findAll().clear(); + realm.where(Import.class).lessThan("samples", 1).findAll().deleteAllFromRealm(); // =========== avg_range =========== // TODO: OCID data marks many good BTS with a negative range so we can't use this yet. @@ -406,11 +419,11 @@ public final class RealmHelper { .findAll().clear();*/ // =========== LAC =========== - realm.where(Import.class).lessThan("locationAreaCode", 1).findAll().clear(); + realm.where(Import.class).lessThan("locationAreaCode", 1).findAll().deleteAllFromRealm(); // We should delete cells with CDMA (4) LAC not in [1,65534] but we can simplify this to: // Delete ANY cells with a LAC not in [1,65534] - realm.where(Import.class).greaterThan("locationAreaCode", 65534).findAll().clear(); + realm.where(Import.class).greaterThan("locationAreaCode", 65534).findAll().deleteAllFromRealm(); // Delete cells with GSM/UMTS/LTE (1/2/3/13 ??) (or all others?) LAC not in [1,65533] /*realm.where(Import.class) @@ -419,12 +432,12 @@ public final class RealmHelper { .findAll().clear();*/ // =========== CID =========== - realm.where(Import.class).lessThan("cell", 1).findAll().clear(); + realm.where(Import.class).lessThan("cellId", 1).findAll().deleteAllFromRealm(); // We should delete cells with UMTS/LTE (3,13) CID not in [1,268435455] (0xFFF FFFF) but // we can simplify this to: // Delete ANY cells with a CID not in [1,268435455] - realm.where(Import.class).greaterThan("cellId", 268435455).findAll().clear(); + realm.where(Import.class).greaterThan("cellId", 268435455).findAll().deleteAllFromRealm(); // Delete cells with GSM/CDMA (1-3,4) CID not in [1,65534] realm.where(Import.class) @@ -434,7 +447,7 @@ public final class RealmHelper { .or() .equalTo("radioAccessTechnology", "CDMA") .endGroup() - .findAll().clear(); + .findAll().deleteAllFromRealm(); log.info("CheckDBe() Deleted BTS entries from Import realm with bad LAC/CID..."); //============================================================= @@ -445,13 +458,19 @@ public final class RealmHelper { // Increase rej_cause, when: the GPS position of the BTS is not exact: // NOTE: In OCID: "changeable"=1 ==> isGPSexact=0 for (Import i : realm.where(Import.class).equalTo("gpsExact", false).findAll()) { - i.setRejCause(i.getRejCause() + 3); + Integer j = i.getRejCause(); + if (j != null) { + i.setRejCause(j.intValue() + 3); + } } // =========== avg_range =========== // Increase rej_cause, when: the average range is < a minimum GPS precision for (Import i : realm.where(Import.class).lessThan("avgRange", min_gps_precision).findAll()) { - i.setRejCause(i.getRejCause() + 3); + Integer j = i.getRejCause(); + if (j != null) { + i.setRejCause(j.intValue() + 3); + } } // =========== time_first =========== @@ -649,8 +668,6 @@ public final class RealmHelper { /** * Defining a new simpler version of insertEventLog for use in CellTracker. - * Please note, that in AMSICDDbAdapter (here) it is also used to backup DB, - * in which case we can not use this simpler version! */ public void toEventLog(Realm realm, final int DF_id, final String DF_desc) { @@ -744,7 +761,7 @@ public final class RealmHelper { /** * Check if {@link BaseTransceiverStation#cellId CID} is already in the {@link Measure} realm * - * @param realm The realm to use + * @param realm The realm to use * @param cellId The {@link BaseTransceiverStation#cellId cellId} to look for * @return true if a {@link Measure} is found with the given cellId */ diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/RequestTask.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/RequestTask.java index 81cfb9879ccee310df8b88ccb24f536d4213596a..8c91e695ea7bb35926f1cf4c48968583af76d67b 100644 --- a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/RequestTask.java +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/RequestTask.java @@ -106,7 +106,7 @@ public class RequestTask extends BaseAsyncTask<String, Integer, String> { /** * * @param context App context - * @param type What type of request to be performed (download OCID, upload OCID, DB backup, etc.) + * @param type What type of request to be performed (download OCID, upload OCID, etc.) * @param listener Allows the caller of RequestTask to implement success/fail callbacks */ public RequestTask(InjectionAppCompatActivity context, char type, AsyncTaskCompleteListener listener) { diff --git a/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/UncaughtExceptionLogger.java b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/UncaughtExceptionLogger.java new file mode 100644 index 0000000000000000000000000000000000000000..121f68aa90a424eda7bc31542398d3850f4df206 --- /dev/null +++ b/AIMSICD/src/main/java/com/secupwn/aimsicd/utils/UncaughtExceptionLogger.java @@ -0,0 +1,146 @@ +package com.secupwn.aimsicd.utils; + +import android.os.Build; +import android.os.Environment; +import android.support.annotation.UiThread; + +import com.secupwn.aimsicd.BuildConfig; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FilenameFilter; +import java.io.PrintWriter; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.text.DateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import io.freefair.android.util.function.Optional; +import lombok.Cleanup; +import lombok.RequiredArgsConstructor; + +import static java.text.DateFormat.LONG; +import static java.util.Locale.ENGLISH; +import static lombok.AccessLevel.PRIVATE; + +@RequiredArgsConstructor(access = PRIVATE) +public class UncaughtExceptionLogger implements Thread.UncaughtExceptionHandler, Runnable { + + private final Thread.UncaughtExceptionHandler originalExceptionHandler; + + public static Optional<File> getDir() { + if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + return Optional.empty(); + } + + File dir = new File(Environment.getExternalStorageDirectory(), "AIMSICD"); + + if (dir.mkdirs() || dir.isDirectory()) { + return Optional.of(dir); + } else { + return Optional.empty(); + } + } + + @Override + public void uncaughtException(Thread thread, Throwable ex) { + processException(thread, ex); + + if (originalExceptionHandler != null) { + originalExceptionHandler.uncaughtException(thread, ex); + } + } + + private void processException(Thread thread, Throwable ex) { + Optional<File> optional = getDir(); + + if (optional.isPresent()) { + Date date = new Date(); + File file = new File(getDir().get(), "error-" + date.getTime() + "-" + BuildConfig.VERSION_CODE + ".log"); + + try { + @Cleanup PrintWriter printWriter = new PrintWriter(file); + + printWriter.println("System Information:"); + printClass(printWriter, Build.VERSION.class); + printWriter.println(); + printWriter.println(); + + printWriter.println("App Information:"); + printClass(printWriter, BuildConfig.class); + printWriter.println(); + printWriter.println(); + + printWriter.println("Crash Information"); + printWriter.print("Timestamp: "); + printWriter.println(DateFormat.getDateTimeInstance(LONG, LONG, ENGLISH).format(date)); + printWriter.print("Thread: "); + printWriter.println(thread.toString()); + printWriter.println("Stacktrace:"); + ex.printStackTrace(printWriter); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + } + + /** + * Prints all public static fields of the given Class in the given PrintWriter + */ + private static void printClass(PrintWriter printWriter, Class<?> clazz) { + for (Field field : clazz.getDeclaredFields()) { + if (Modifier.isStatic(field.getModifiers()) && Modifier.isPublic(field.getModifiers())) { + field.setAccessible(true); + printWriter.print(field.getName()); + printWriter.print(": "); + try { + if (field.getType().isArray()) { + printWriter.println(Arrays.toString((Object[]) field.get(null))); + } else { + printWriter.println(field.get(null)); + } + } catch (IllegalAccessException e) { + printWriter.println("IllegalAccessException"); + } + } + } + + } + + @UiThread + public static void init() { + Thread.UncaughtExceptionHandler originalExceptionHandler = Thread.getDefaultUncaughtExceptionHandler(); + UncaughtExceptionLogger logger = new UncaughtExceptionLogger(originalExceptionHandler); + Thread.setDefaultUncaughtExceptionHandler(logger); + + new Thread(logger).start(); + } + + static Pattern fileNamePattern = Pattern.compile("error-(\\d*)-(\\d*).log"); + + /** + * Delete all logs from older app versions + */ + @Override + public void run() { + Optional<File> dir = getDir(); + + if (dir.isPresent()) { + File[] files = dir.get().listFiles(new FilenameFilter() { + @Override + public boolean accept(File dir, String filename) { + Matcher matcher = fileNamePattern.matcher(filename); + return matcher.matches() && Integer.valueOf(matcher.group(2)) < BuildConfig.VERSION_CODE; + } + }); + + for (File file : files) { + //noinspection ResultOfMethodCallIgnored + file.delete(); + } + } + } +} diff --git a/AIMSICD/src/main/res/layout/fragment_cell_info.xml b/AIMSICD/src/main/res/layout/fragment_cell_info.xml index 9ba774a05eed9d4c9304d731b122ce95f8389618..a186940cb26baee09decfe2f6a2cbfed8b5efb02 100644 --- a/AIMSICD/src/main/res/layout/fragment_cell_info.xml +++ b/AIMSICD/src/main/res/layout/fragment_cell_info.xml @@ -6,86 +6,6 @@ android:layout_height="match_parent" android:orientation="vertical"> - <RelativeLayout - android:layout_width="match_parent" - android:layout_height="match_parent"> - <TextView - android:id="@+id/ciphering_indicator_title" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textSize="18sp" - android:text="@string/ciphering_indicator_title" - android:textColor="@color/green_text" - android:padding="4dip" - android:visibility="gone"/> - - <TextView - android:id="@+id/ciphering_indicator" - android:text="@string/empty" - android:textColor="@color/white" - android:padding="2dip" - android:layout_gravity="start" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_below="@id/ciphering_indicator_title" - android:visibility="gone"/> - - <TableLayout - android:id="@+id/cellView" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:stretchColumns="1" - android:layout_below="@id/ciphering_indicator"> - <TableRow - android:layout_height="wrap_content" - android:layout_width="fill_parent"> - <TextView - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:textSize="18sp" - android:text="@string/neighboring_cells_title" - android:layout_span="2" - android:textColor="@color/green_text" - android:padding="4dip"/> - </TableRow> - <TableRow - android:layout_height="wrap_content" - android:layout_width="wrap_content" - android:id="@+id/neighboring_total"> - - <TextView - android:id="@+id/neighboring_number_label" - android:text="@string/neighboring_cells_num_title" - android:textColor="@color/white" - android:padding="2dip" - android:gravity="end" - android:layout_gravity="end" - android:layout_width="fill_parent"/> - - <TextView - android:id="@+id/neighboring_number" - android:text="@string/empty" - android:textColor="@color/medium_blue" - android:padding="2dip" - android:gravity="start"/> - </TableRow> - <TableRow - android:layout_height="wrap_content" - android:layout_width="wrap_content" - android:gravity="start"> - - <TextView - android:id="@+id/neighboring_cells" - android:text="" - android:layout_weight="1" - android:textColor="@color/white" - android:padding="2dip" - android:layout_gravity="start" - android:layout_width="match_parent" - android:layout_span="2" /> - </TableRow> - </TableLayout> - <ListView android:id="@+id/list_view" android:layout_width="wrap_content" @@ -100,6 +20,5 @@ android:dividerHeight="10dp" android:layout_below="@+id/cellView" android:layout_alignParentBottom="true" /> - </RelativeLayout> </android.support.v4.widget.SwipeRefreshLayout> diff --git a/AIMSICD/src/main/res/layout/item_cell_info_overview.xml b/AIMSICD/src/main/res/layout/item_cell_info_overview.xml new file mode 100644 index 0000000000000000000000000000000000000000..42e9254370d08512bbfef0dadcdb8fe038662f9f --- /dev/null +++ b/AIMSICD/src/main/res/layout/item_cell_info_overview.xml @@ -0,0 +1,81 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout android:layout_width="match_parent" + android:layout_height="match_parent" + xmlns:android="http://schemas.android.com/apk/res/android"> + <TextView + android:id="@+id/ciphering_indicator_title" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textSize="18sp" + android:text="@string/ciphering_indicator_title" + android:textColor="@color/green_text" + android:padding="4dip" + android:visibility="gone"/> + + <TextView + android:id="@+id/ciphering_indicator" + android:text="@string/empty" + android:textColor="@color/white" + android:padding="2dip" + android:layout_gravity="start" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_below="@id/ciphering_indicator_title" + android:visibility="gone"/> + + <TableLayout + android:id="@+id/cellView" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:stretchColumns="1" + android:layout_below="@id/ciphering_indicator"> + <TableRow + android:layout_height="wrap_content" + android:layout_width="fill_parent"> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textSize="18sp" + android:text="@string/neighboring_cells_title" + android:layout_span="2" + android:textColor="@color/green_text" + android:padding="4dip"/> + </TableRow> + <TableRow + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:id="@+id/neighboring_total"> + + <TextView + android:id="@+id/neighboring_number_label" + android:text="@string/neighboring_cells_num_title" + android:textColor="@color/white" + android:padding="2dip" + android:gravity="end" + android:layout_gravity="end" + android:layout_width="fill_parent"/> + + <TextView + android:id="@+id/neighboring_number" + android:text="@string/empty" + android:textColor="@color/medium_blue" + android:padding="2dip" + android:gravity="start"/> + </TableRow> + <TableRow + android:layout_height="wrap_content" + android:layout_width="wrap_content" + android:gravity="start"> + + <TextView + android:id="@+id/neighboring_cells" + android:text="" + android:layout_weight="1" + android:textColor="@color/white" + android:padding="2dip" + android:layout_gravity="start" + android:layout_width="match_parent" + android:layout_span="2" /> + </TableRow> + </TableLayout> +</RelativeLayout> \ No newline at end of file diff --git a/AIMSICD/src/main/res/values-de/translatable_strings.xml b/AIMSICD/src/main/res/values-de/translatable_strings.xml index 0f7fd300120e7b18196e246ea5c4e78b0a5dca01..74e86e1140e06dc22bd3fec0772fa59c226598ea 100644 --- a/AIMSICD/src/main/res/values-de/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-de/translatable_strings.xml @@ -26,7 +26,7 @@ </string> <!-- MENU --> - <string name="toggle_attack_detection">Angriffserkennung\nein/ausschalten</string> + <string name="toggle_attack_detection">Angriffserkennung</string> <string name="toggle_cell_tracking">Funkzellen aufzeichnen</string> <string name="clear_database">Datenbank löschen / zurücksetzen</string> <string name="clear_database_question">Alle Daten werden gelöscht.\nSind Sie sicher?</string> @@ -400,4 +400,6 @@ <string name="pref_enable_gps_summary">Aktiviere GPS für Funkzellenverfolgung</string> <string name="n_a">N/V</string> <string name="unknown">Unbekannt</string> + <string name="cell_doesnt_provide_any_neighbors">BTS stellt keine Nachbarzellen bereit!</string> + <string name="download_timed_out">Die OpenCellID-Api reagiert nicht. Später erneut versuchen?</string> </resources> diff --git a/AIMSICD/src/main/res/values-es/translatable_strings.xml b/AIMSICD/src/main/res/values-es/translatable_strings.xml index 2d9deb0808812c8dc65e4953038392c75d959767..949f5ba235b6ffcbbcb7ee94c53b17255efa80ee 100644 --- a/AIMSICD/src/main/res/values-es/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-es/translatable_strings.xml @@ -1,4 +1,4 @@ -<?xml version='1.0' encoding='utf-8'?> +<?xml version='1.0' encoding='UTF-8'?> <resources><string name="tracking">Rastreo</string> <string name="device_info">Detalles Telefono/SIM</string> <string name="db_viewer">Visor de Bases de datos</string> @@ -10,7 +10,7 @@ <string name="text_disagree">No acepto</string> <string name="disclaimer_title">AVISO</string> - <string name="disclaimer">"Mediante el uso de AIMSICD usted ha entendido y aceptado que AIMSICD es una aplicación para Android experimental e informativa que puede fallar al detectar vigilancia y rastreo por muchas razones. Usted también entiende que puede ser evitada o derrotada por otros medios, aún no comprendidos por sus desarrolladores. Asà también está de acuerdo y entiende que los desarrolladores y las empresas relacionadas con este producto gratuito, pueden de ninguna manera ser considerados responsables de ningún resultado o resultados, en función del uso de esta aplicación. "</string> + <string name="disclaimer">"Al utilizar AIMSICD usted entiende y acepta que AIMSICD es una aplicación para Android experimental e informativa que puede fallar al detectar vigilancia y rastreo por múltiples razones. Usted también entiende que puede ser evitada o sobrepasada por otros medios, aún no comprendidos por sus desarrolladores. Asà también está de acuerdo y entiende que los desarrolladores y las empresas relacionadas con este producto gratuito, de ninguna manera pueden ser considerados responsables de ningún resultado o resultados, en función del uso de esta aplicación. ESTADO DE DESARROLLO: ALPHA! "</string> <string name="toggle_attack_detection">Habilitar Deteccion de Ataque</string> <string name="toggle_cell_tracking">Habilitar Rastreo de Celda</string> @@ -28,7 +28,7 @@ <string name="device_info_title">Informacion de Dispositivo</string> <string name="sim_info_title">Informacion de SIM</string> <string name="network_info">Informacion de Red</string> - <string name="cell_info_title">Nivel de Amenaza Actual</string> + <string name="cell_info_title">Celdas vecinas</string> <string name="neighboring_cells_title">Celdas Vecinas</string> <string name="ciphering_indicator_title">Indicador de Cifrado</string> <string name="neighboring_cells_num_title">Total:</string> @@ -150,12 +150,12 @@ <string name="btn_start_logs">Iniciar</string> <string name="title_activity_about_pop_up">EXPLICACIÓN DETALLADA</string> - <string name="status_idle_detail_info">La Aplicación está detenida o cargando. No hay medidas de protección o detección activas. Por favor abra la barra de navegación y Activelas bajo la seccion de Rastreo!</string> - <string name="status_ok_detail_info">"No se detectaron o encontraron Amenazas. Nuestra aplicación verifica constantemente su red basada en las medidas de protección que se han seleccionado en la barra de la navegación y configuracion."</string> - <string name="status_medium_detail_info">Ãrea de servicio insegura: por lo menos 1BTS nuevo o desconocido está en funcionamiento en esta vecindad, o usando un algoritmo de cifrado (roto) inseguro menor a A5/3 [detección es WIP]. Esperar que cualquier llamadas/SMS en este ámbito pueda ser interceptado y registrado. Mejor Alejarse de este lugar ahora.</string> - <string name="status_high_detail_info">"Detectado de acciones de servicio hostiles: Un IMSI-Catcher (IMSIC) o BTS falso (FBTS) esta seguimiendo activamente a los usuarios. Rastreo activo se lleva a cabo en esta área. Usted debe salir AHORA de este lugar especialmente si hay disturbios polÃticos. Sacar la baterÃa o tirar el teléfono!"</string> - <string name="status_danger_detail_info">Rastreo hostil detectado: Un FBTS o IMSIC Lo esta Rastreando activamente e impide que el teléfono se conecte a través de su proveedor móvil encriptado normal. Si estás en peligro o teme repercusiones, destruya su teléfono y la SIM y reportelo como robado recientemente.</string> - <string name="status_skull_detail_info">Manipulación hostil: Alguien está intentando manipular remotamente tu teléfono. Destrui (o vende) tu teléfono y obtene uno nuevo en algún lugar lejano (no lleves tu teléfono antiguo al lugar de cambio). Utiliza una nueva tarjeta SIM (anónima), cambiar el comportamiento de llamadas y avisa a tus amigos hablando con ellos en persona, no por telefono!</string> + <string name="status_idle_detail_info">La Aplicación está detenida o cargando. No hay medidas de protección o detección activas. Por favor habilita la detección de ataques!</string> + <string name="status_ok_detail_info">No se detectaron amenazas. Tu res es constantemente revisada basa en la configuración de detección activada.</string> + <string name="status_medium_detail_info">Ãrea de servicio insegura: por lo menos 1 BTS nuevo o desconocido está en funcionamiento en esta vecindad, o usando un algoritmo de cifrado (roto) inseguro menor a A5/3. Cualquier llamada/SMS en esta área puede ser interceptado y registrado. Aléjate de este lugar rápidamente.</string> + <string name="status_high_detail_info">Detectado de acciones de servicio hostiles: Un IMSI-Catcher (IMSIC) o BTS falso (FBTS) esta rastreando activamente a los usuarios. En esta área existe un escaneo activo. DeberÃas abandonar este lugar por todos los medios, especialmente si existen disturbios polÃticos. Saca la baterÃa o retira tu tarjta SIM!</string> + <string name="status_danger_detail_info">Rastreo hostil detectado: Un FBTS o IMSIC esta RASTREANDOTE activamente e impide que el teléfono se conecte a través de su proveedor móvil encriptado de forma normal. Si estás en peligro o teme repercusiones, destruya su teléfono y la tarjeta SIM, luego reportelo como robado recientemente.</string> + <string name="status_skull_detail_info">Manipulación hostil: Alguien está intentando manipular remotamente tu teléfono. Destruye (o vende) tu teléfono y consigue uno nuevo en algún lugar lejano. NO lleves tu teléfono antiguo al lugar de cambio!. Utiliza una nueva tarjeta SIM (anónima o sin registros). Modifica el comportamiento de tus llamadas y avisa a tus amigos que estas siendo monitoreado hablando personalmente con ellos, no por telefono!</string> <string name="open_cell_id_button_cancel">Cancelar</string> <string name="open_cell_id_button_ok">OK</string> @@ -259,7 +259,7 @@ <string name="typewap_data">Mensaje SMS WAP Push detectado!\nDetalles: Ver visor de base de datos.</string> - <string name="help_main_neighboring_cells"></string> + <string name="help_main_neighboring_cells">Mostrar celdas vecinas.</string> <string name="help_main_phone_sim_details">Detalles del proveedor SIM, IMEI, TMSI.</string> <string name="help_main_acd">Ver comparación detallada de la célula conectada actualmente, con los datos (si existe) en OpenCellID y resaltar las diferencias.</string> <string name="help_main_database_viewer">Ver las diferentes tablas de la DB que tenemos.</string> @@ -311,12 +311,21 @@ <string name="notification_vibrate_medium">Medio</string> <string name="notification_vibrate_danger">Peligro</string> - <string name="deleted">Borrado</string> + <string name="deleted">Eliminado</string> <string name="failed_to_delete">Error al borrar</string> <string name="the_string_was_added_to_db">La cadena fue añadida a la base de datos</string> <string name="failed_to_add_the_string_to_db">Error al añadir la cadena a la base de datos</string> - <string name="double_quote_will_cause_db_error">"Cadena no añadida\nLas comillas dobles \" no están soportadas "</string> + <string name="double_quote_will_cause_db_error">"Cadena no añadida +Las comillas dobles \" provocan erro en la base de datos "</string> <string name="unknown">Desconocido</string> -</resources> +<string name="git_sha">Git SHA-Hash: %s</string> + <string name="pref_enable_gps_title">Configuración GPS</string> + <string name="pref_enable_gps_summary">Habilitar GPS para rastreo de celdas</string> + <string name="database_settings">Base de datos</string> + <string name="cell_doesnt_provide_any_neighbors">El BTS no proporciona celdas vecinas!</string> + <string name="download_timed_out">Tiempo de espera sobrepasado para API OpenCell ID. Intentar nuevamente?</string> + <string name="n_a">N/D</string> + <string name="buildnumber">Número de compilación: %s</string> + </resources> diff --git a/AIMSICD/src/main/res/values-fi/translatable_strings.xml b/AIMSICD/src/main/res/values-fi/translatable_strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..2db5a9683d34fa57f1af760c9828e43d3736e9c5 --- /dev/null +++ b/AIMSICD/src/main/res/values-fi/translatable_strings.xml @@ -0,0 +1,148 @@ +<?xml version='1.0' encoding='UTF-8'?> +<resources><string name="device_info">Tietoja puhelimesta/SIM-kortista</string> + <string name="tracking">Seuranta</string> + <string name="quit">Poistu</string> + <string name="text_ok">OK</string> + <string name="text_cancel">Peruuta</string> + <string name="map_view">Antennikarttanäkymä</string> + <string name="db_viewer">Tietokantanäkymä</string> + <string name="text_agree">Hyväksyn</string> + <string name="text_disagree">En hyväksy</string> + + <string name="disclaimer_title">VASTUUVAPAUSLAUSEKE</string> + <string name="disclaimer"/> + + <string name="toggle_attack_detection">Hyökkäyksentunnistin</string> + <string name="toggle_cell_tracking"/> + <string name="clear_database">Tyhjennä tietokanta</string> + <string name="clear_database_question">Kaikki tiedot poistetaan +Oletko varma?</string> + <string name="preferences">Asetukset</string> + <string name="press_once_again_to_exit">Paina uudestaan poistuaksesi.</string> + <string name="cell_lookup"/> + <string name="debugging">Debuggaus</string> + <string name="no_network_connection_title">Ei internetyhteyttä</string> + <string name="no_network_connection_message"/> + + <string name="get_opencellid">Lataa BTS-data</string> + + <string name="device_info_title">Laitetiedot</string> + <string name="sim_info_title">SIM-tiedot</string> + <string name="network_info">Verkkoyhteyden tiedot</string> + <string name="cell_info_title"/> + <string name="neighboring_cells_title"/> + <string name="ciphering_indicator_title"/> + <string name="neighboring_cells_num_title">Yhteensä:</string> + <string name="sim_country">Maa:</string> + <string name="sim_operator_id">Operaattorin tunnus:</string> + <string name="sim_operator_name">Operaattorin nimi:</string> + <string name="sim_imsi"/> + <string name="sim_serial">Sarjanumero:</string> + <string name="device_type">Puhelimen tyyppi:</string> + <string name="device_imei">IMEI:</string> + <string name="device_version">RIL-versio:</string> + <string name="network_name"/> + <string name="network_code"/> + <string name="network_type">Tyyppi:</string> + <string name="network_lac">LAC:</string> + <string name="network_cellid">CID:</string> + <string name="data_activity"/> + <string name="data_status"/> + <string name="network_roaming">Verkkovierailu:</string> + <string name="network_lte_timing_advance">TA (LTE):</string> + <string name="button_refresh">Päivitä</string> + <string name="drawer_open"/> + <string name="drawer_close"/> + <string name="network_psc">PSC:</string> + + <string name="upload_bts">Lähetä BTS-data</string> + + <string name="about_aimsicd">Tietoa AIMSICD:sta</string> + <string name="app_version">Versio: %s</string> + <string name="buildnumber">Versiotarkenne: %s</string> + <string name="git_sha">Git SHA-tunniste: %s</string> + <string name="aimsicd_about_info3"/> + <string name="about_github">AIMSICD GitHubissa</string> + <string name="about_wiki">DOKUMENTAATIO</string> + <string name="about_contribute"/> + <string name="about_disclaimer">VASTUUVAPAUSLAUSEKE</string> + <string name="about_releases">JULKAISUT</string> + <string name="about_changelog">MUUTOSLOKI</string> + <string name="about_license">LISENSSI</string> + <string name="about_credits"/> + <string name="status_idle_about_desc"/> + <string name="status_high_about_desc"/> + <string name="status_ok_about_desc">Kaikki OK.</string> + <string name="status_danger_about_desc">Sinua seurataan!</string> + <string name="status_medium_about_desc"/> + <string name="status_skull_about_desc"/> + <string name="about_desc_icon_title"/> + + <string name="network_netid">Verkkotunnus:</string> + <string name="network_sysid">Järjestelmätunnus:</string> + <string name="network_baseid"/> + + <string name="location_error_title">Sijaintipalvelut pois käytöstä</string> + <string name="location_error_message">Et voi seurata GPS-dataa ottamatta paikannusta käyttöön. Otetaanko paikannus käyttöön?</string> + + <string name="pref_enable_gps_title">GPS-asetukset</string> + <string name="pref_enable_gps_summary"/> + <string name="pref_system_title">Järjestelmäasetukset</string> + <string name="pref_autostart_title">Automaattinen käynnistys</string> + <string name="pref_autostart_summ">Käynnistä automaattisesti uudelleenkäynnistyksen yhteydessä</string> + <string name="pref_persistservice_title"/> + <string name="pref_persistservice_summ"/> + <string name="pref_protection_title">Suojausasetukset</string> + <string name="pref_notification_settings">Ilmoitusasetukset</string> + <string name="pref_enable_cell_title"/> + <string name="pref_enable_cell_summ"/> + <string name="pref_femto_title"/> + <string name="pref_femto_summ">(tällä hetkellä vain CDMA-puhelimet)</string> + <string name="pref_femto_action_title"/> + <string name="pref_femto_action_summ"/> + <string name="pref_ui_title">Käyttöliitymäasetukset</string> + <string name="pref_ui_icons_title">Tilakuvakkeet</string> + <string name="pref_ui_icons_summ">Kuvaketeeman valinta</string> + <string name="pref_refresh_title">Päivitysväli</string> + <string name="pref_refresh_summ">Hallitse päivitysten tiheyttä +Nyt valittu: %s</string> + <string name="pref_ocid_title">OpenCellID-asetukset</string> + <string name="pref_ocid_key_title">OpenCellID API-avain</string> + <string name="pref_ocid_key_summ">Syötä OpenCellID API-avaimesi tähän</string> + <string name="pref_enable_cell_monitoring_title"/> + <string name="pref_enable_cell_monitoring_summ"/> + <string name="pref_request_ocid_key"/> + <string name="pref_ocid_requestkey_summary"/> + + <string name="pref_map_title">Karttanäkymän asetukset</string> + <string name="pref_map_type_title">Kartan tyyppi</string> + <string name="pref_map_type_summ"/> + + <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">"Näytteet: "</string> + <string name="open_cell_id_label">OpenCellID-data</string> + <string name="lat_label">"Leveys: "</string> + <string name="lng_label">"Pituus: "</string> + + <string name="table_names_prompt">Valitse taulu</string> + <string name="at_command_title"/> + <string name="response_label">Vastaus:</string> + <string name="execute_at">Suorita</string> + <string name="serial_device_title"/> + <string name="serial_device_prompt"/> + <string name="serial_device_spinner_title"/> + <string name="timeout_spinner_title">Aikakatkaisu:</string> + <string name="timeout_spinner_prompt">Valitse aikakatkaisu</string> + <string name="command_hint"/> + + <string name="sms_title">Hiljainen tekstiviesti havaittu</string> + <string name="sms_message"/> + <string name="table_contains_no_data">Taulussa ei ole näytettävää dataa.</string> + + <string name="title_ocid_key">OpenCellID API-avain</string> + <string name="message_request_api_key"></string> + </resources> diff --git a/AIMSICD/src/main/res/values-fr/translatable_strings.xml b/AIMSICD/src/main/res/values-fr/translatable_strings.xml index 83346086d413d7a840393cbfad9fd9ffe6c84cc3..89a948b79e7fc9d5ec23cfc909974566e0942dda 100755 --- a/AIMSICD/src/main/res/values-fr/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-fr/translatable_strings.xml @@ -3,9 +3,9 @@ <!-- Drawer --> <string name="tracking">Pistage</string> - <string name="device_info">Détails Téléphone/Carte SIM</string> - <string name="map_view">Carte des Antennes Relais</string> - <string name="db_viewer">Visionneuse de la Base de Données</string> + <string name="device_info">Détails téléphone/carte SIM</string> + <string name="map_view">Carte des antennes relais</string> + <string name="db_viewer">Visionneuse de la base de données</string> <string name="quit">Quitter</string> <string name="text_ok">OK</string> <string name="text_cancel">Annuler</string> @@ -20,64 +20,64 @@ <!-- 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="clear_database">Effacer/Réinitialiser la Base De Données</string> + <string name="clear_database">Effacer/réinitialiser la base de données</string> <string name="clear_database_question">Toutes les données seront effacées.\nÊtes-vous sûr ?</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="debugging">Débogage</string> - <string name="no_network_connection_title">Aucune Connexion Internet</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 connexion à Internet, veuillez activer la connexion de données !</string> <!-- MAP VIEWER --> <string name="get_opencellid">Télécharger les BTS depuis OpenCellID</string> <!-- LAYOUT --> - <string name="device_info_title">Informations sur l\'Appareil</string> - <string name="sim_info_title">Informations sur la Carte SIM</string> - <string name="network_info">Information Sur le Réseau Mobile</string> - <string name="cell_info_title">Niveau de Menace Actuel</string> - <string name="neighboring_cells_title">Cellules Voisines</string> - <string name="ciphering_indicator_title">Indicateur du Chiffrement</string> + <string name="device_info_title">Informations sur l\'appareil</string> + <string name="sim_info_title">Informations sur la carte SIM</string> + <string name="network_info">Information sur le réseau mobile</string> + <string name="cell_info_title">Cellules voisines</string> + <string name="neighboring_cells_title">Cellules voisines</string> + <string name="ciphering_indicator_title">Indicateur du chiffrement</string> <string name="neighboring_cells_num_title">Total :</string> <string name="sim_country">Pays :</string> <string name="sim_operator_id">Identifiant de l’opérateur :</string> <string name="sim_operator_name">Nom de l’opérateur :</string> <string name="sim_imsi">IMSI :</string> - <string name="sim_serial">Numéro de Série :</string> - <string name="device_type">Type de Téléphone :</string> + <string name="sim_serial">Numéro de série :</string> + <string name="device_type">Type de téléphone :</string> <string name="device_imei">IMEI :</string> <string name="device_version">Version RIL :</string> - <string name="network_name">Nom du Fournisseur :</string> - <string name="network_code">Code du Fournisseur :</string> - <string name="network_type">Type de Réseau :</string> + <string name="network_name">Nom de l\'opérateur :</string> + <string name="network_code">Code de l\'opérateur :</string> + <string name="network_type">Type de réseau :</string> <string name="network_lac">LAC :</string> <string name="network_cellid">CID :</string> - <string name="data_activity">Activité Data :</string> - <string name="data_status">Données du statut :</string> + <string name="data_activity">Activité données :</string> + <string name="data_status">Statut des données :</string> <string name="network_roaming">Itinérance :</string> <string name="network_lte_timing_advance">TA (LTE) :</string> <string name="button_refresh">Rafraichir</string> - <string name="drawer_open">Ouvrir le Menu</string> - <string name="drawer_close">Fermer le Menu</string> + <string name="drawer_open">Ouvrir le menu</string> + <string name="drawer_close">Fermer le menu</string> <string name="network_psc">PSC :</string> <!-- Upload BTS to OpenCellID --> - <string name="upload_bts">Uploader les BTS sur OpenCellID</string> + <string name="upload_bts">Uploader les données BTS</string> <!-- ABOUT LAYOUT --> <string name="about_aimsicd">À propos de AIMSICD</string> - <string name="app_version">Version: %s</string> + <string name="app_version">Version : %s</string> <string name="aimsicd_about_info3">Projet Basé sur Android conçu pour détecter et éviter les fausses stations de bases (IMSI-Catchers) sur les réseaux GSM/UMTS.</string> <string name="about_github">AIMSICD sur GitHub</string> <string name="about_wiki">DOCUMENTATION</string> - <string name="about_contribute">CONTRIBUTEURS</string> + <string name="about_contribute">CONTRIBUER</string> <string name="about_disclaimer">INFOS LÉGALES</string> <string name="about_releases">RELEASES</string> <string name="about_changelog">CHANGELOG</string> - <string name="about_license">LICENSE</string> + <string name="about_license">LICENCE</string> <string name="about_credits">CREDITS</string> - <string name="status_idle_about_desc">Au Repos / Chargement.</string> + <string name="status_idle_about_desc">Au repos / chargement.</string> <string name="status_high_about_desc">Tracking actif près de vous !</string> <string name="status_ok_about_desc">Tout est OK.</string> <string name="status_danger_about_desc">Vous êtes traqué !</string> @@ -89,56 +89,56 @@ <!-- CDMA LAYOUT --> <string name="network_netid">Identifiant du réseau :</string> <string name="network_sysid">Identifiant du système :</string> - <string name="network_baseid">ID de la Station de Base(BTS) :</string> + <string name="network_baseid">ID de la station de base :</string> <!-- LOCATION HELPER --> - <string name="location_error_title">Service de Localisation Désactivé</string> + <string name="location_error_title">Service de localisation désactivé</string> <string name="location_error_message">Vous ne pouvez pas suivre les données GPS sans activer les Services de localisation. Les activer maintenant ?</string> <!-- PREFERENCES --> <string name="pref_system_title">Paramètres AIMSICD</string> - <string name="pref_autostart_title">Démarrage Automatique</string> + <string name="pref_autostart_title">Démarrage automatique</string> <string name="pref_autostart_summ">Démarrer automatiquement le service lors du Boot</string> - <string name="pref_persistservice_title">Service Persistant</string> + <string name="pref_persistservice_title">Service persistant</string> <string name="pref_persistservice_summ">Le service va continuer à fonctionner après avoir quitté l\'application (décochez pour quitter complètement)</string> - <string name="pref_protection_title">Paramètres de Protection</string> - <string name="pref_enable_cell_title">Tracking des Cellules</string> - <string name="pref_enable_cell_summ">Activer le Tracking automatique des Cellules</string> + <string name="pref_protection_title">Paramètres de protection</string> + <string name="pref_enable_cell_title">Tracking des cellules</string> + <string name="pref_enable_cell_summ">Activer le tracking automatique des cellules</string> <string name="pref_femto_title">Détection des FemtoCellules</string> <string name="pref_femto_summ">(Actuellement téléphones CDMA seulement)</string> <string name="pref_femto_action_title">Protection contre les FemtoCellules</string> <string name="pref_femto_action_summ">Force le mode avion lorsqu\'une FemtoCellules est détectée (réactivez le réseau manuellement)</string> - <string name="pref_ui_title">Paramètres de l\'Interface</string> + <string name="pref_ui_title">Paramètres de l\'interface</string> <string name="pref_ui_icons_title">Icone de statut</string> - <string name="pref_ui_icons_summ">Sélection de l\'Icone</string> - <string name="pref_refresh_title">Taux de Rafraichissement</string> - <string name="pref_refresh_summ">Contrôle la fréquence de la mise à jour des données\nSélection courante: %s</string> + <string name="pref_ui_icons_summ">Sélection de l\'icone</string> + <string name="pref_refresh_title">Taux de rafraichissement</string> + <string name="pref_refresh_summ">Contrôle la fréquence de la mise à jour des données\nSélection courante : %s</string> <string name="pref_ocid_title">Paramètres OpenCellID</string> <string name="pref_ocid_key_title">Entrer une clé OpenCellID</string> <string name="pref_ocid_key_summ">Entrez votre clé de l\'API OpenCellID ici</string> - <string name="pref_enable_cell_monitoring_title">Monitoring des Cellules</string> - <string name="pref_enable_cell_monitoring_summ">Activer le Monitoring des Cellules</string> + <string name="pref_enable_cell_monitoring_title">Monitoring des cellules</string> + <string name="pref_enable_cell_monitoring_summ">Activer le monitoring des cellules</string> <string name="pref_request_ocid_key">Demander une clé de l’API d’OpenCellID</string> <string name="pref_ocid_requestkey_summary">Demander une clé pour accéder aux données d\'OpenCellID</string> <!-- MAP PREFERENCES --> <string name="pref_map_title">Préférences de la carte</string> - <string name="pref_map_type_title">Type de Carte</string> - <string name="pref_map_type_summ">Type de Carte</string> + <string name="pref_map_type_title">Type de carte</string> + <string name="pref_map_type_summ">Affiche différents types de carte</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">"Echantillons: "</string> + <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">"Échantillons : "</string> <string name="open_cell_id_label">Données OpenCellID</string> <string name="lat_label">"Lat : "</string> <string name="lng_label">"Lon : "</string> <!-- Database Viewer --> - <string name="table_names_prompt">Sélectionnez la Table</string> + <string name="table_names_prompt">Sélectionnez la table</string> <string-array name="table_names"> <item>@string/unique_bts_data</item> <item>@string/bts_measurements</item> @@ -154,28 +154,28 @@ <string name="response_label">Réponse :</string> <string name="execute_at">Exécuter</string> <string name="serial_device_title">Périphérique de série actuel :</string> - <string name="serial_device_prompt">Sélectionnez un périphérique Série</string> + <string name="serial_device_prompt">Sélectionnez un périphérique série</string> <string name="serial_device_spinner_title">Périphériques détectés :</string> <string name="timeout_spinner_title">Délai dépassé :</string> - <string name="timeout_spinner_prompt">Sélectionnez le délai Maximum</string> + <string name="timeout_spinner_prompt">Sélectionnez le délai maximum</string> <string name="command_hint">Entrez la commande AT ici.</string> <!-- SILENT SMS FRAGMENT --> - <string name="sms_title">SMS Silencieux détecté!</string> - <string name="sms_message">SMS Silencieux détecté!\nDetails: Voir la base de donnée.</string> + <string name="sms_title">SMS silencieux détecté !</string> + <string name="sms_message">SMS silencieux détecté !\nDétails : voir la base de données.</string> <string name="table_contains_no_data">La table ne contient aucune donnée.</string> <!-- Request OpenCellID Key --> - <string name="title_ocid_key">clé de l\'API OpenCellID</string> + <string name="title_ocid_key">Clé de l\'API OpenCellID</string> <string name="message_request_api_key">Appuyez sur OK pour demander une clé de l\'API d\'OpenCellID.org. Cela vous permettra de télécharger leurs données et de les afficher dans la carte. Cela vous permettra également d\'uploader des données sur les cellules. Notez que si vous n\'uploadez pas de données sur les cellules dans les 20 jours, votre clé API peut devenir inactive.</string> - <string name="ocid_api_error">Erreur lors de l\'obtention de la clé: </string> + <string name="ocid_api_error">"Erreur lors de l\'obtention de la clé : "</string> <string name="ocid_api_success">Nouvelle clé API enregistrée.</string> <!-- Debug logs --> - <string name="title_debug_logs">Logs de Debugging</string> + <string name="title_debug_logs">Logs de débogage</string> <string name="btn_clear_logs">Effacer</string> <string name="btn_copy_to_clipboard">Copier</string> - <string name="msg_copied_to_clipboard">Logs copiés dans le presse papier.</string> + <string name="msg_copied_to_clipboard">Logs copiés dans le presse-papier.</string> <string name="btn_stop_logs">Arrêter</string> <string name="btn_start_logs">Démarrage</string> @@ -183,10 +183,10 @@ <string name="title_activity_about_pop_up">EXPLICATION DÉTAILLÉE</string> <string name="status_idle_detail_info">L’application est inactive ou en chargement. Aucune mesure de protection ou de détection n’est activée. Veuillez activer la détection d’attaques !</string> <string name="status_ok_detail_info">Aucune menace détectée. Notre application vérifie constamment votre réseau à partir des mesures de protections que vous avez paramétré dans le menu et les préférences.</string> - <string name="status_medium_detail_info">Zone avec un service non sécurisé : Au moins une BTS est nouvelle ou inconnue dans les environs, ou bien celle-ci utilise un système de chiffrement considéré comme non sûr (inférieure à A5/3). Tout appel/SMS envoyé ou reçu dans cette zone peut être intercepté et enregistré. Veuillez quitter cet endroit rapidement.</string> - <string name="status_high_detail_info">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. Scan actif dans cette zone. Vous devriez quitter ce lieu par n\'importe quel moyen, particulièrement s’il y a des troubles politiques. Enlevez votre batterie et votre carte SIM !</string> - <string name="status_danger_detail_info">Tracking hostile 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 et votre carte SIM, puis déclarez-les volés.</string> - <string name="status_skull_detail_info">Manipulation hostile : quelqu’un essaye de contrôler à distance votre combiné. Détruisez ou vendez votre téléphone et prenez-en un nouveau loin d’ici. N’y emmenez pas votre téléphone précédent ! Utilisez une nouvelle carte SIM anonyme achetée via le navigateur TOR, changez vos habitudes d’appel et prévenez vos amis en face-à -face, PAS en les appelant avec téléphone !</string> + <string name="status_medium_detail_info">Zone avec un service non sécurisé : au moins une BTS est nouvelle ou inconnue dans les environs, ou bien celle-ci utilise un système de chiffrement considéré comme non sûr (inférieure à A5/3). Tout appel/SMS envoyé ou reçu dans cette zone peut être intercepté et enregistré. Veuillez quitter cet endroit rapidement.</string> + <string name="status_high_detail_info">Actions hostiles de la part d\'un service détecté : un IMSI-Catcher (IMSIC) ou une fausse BTS (FBTS) est actuellement en train de traquer ses utilisateurs. Scan actif dans cette zone. Vous devriez quitter ce lieu par n\'importe quel moyen, particulièrement s’il y a des troubles politiques. Enlevez votre batterie et votre carte SIM !</string> + <string name="status_danger_detail_info">Tracking hostile détecté : une fausse BTS ou un 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 et votre carte SIM, puis déclarez-les volés.</string> + <string name="status_skull_detail_info">Manipulation hostile : quelqu’un essaye de contrôler à distance votre combiné. Détruisez ou vendez votre téléphone et prenez-en un nouveau loin d’ici. N’y emmenez pas votre téléphone précédent ! Utilisez une nouvelle carte SIM anonyme avec une fausse identité, enregistrée via le Navigateur Tor. Changez vos habitudes d’appel et prévenez vos contacts que vous êtes surveillé en face-à -face, PAS en les appelant au téléphone !</string> <string name="open_cell_id_button_cancel">Annuler</string> <string name="open_cell_id_button_ok">OK</string> @@ -198,49 +198,49 @@ <string name="map_type_normal">Normal</string> <string name="pref_refresh_manual">Manuel</string> <string name="pref_refresh_automatic">Automatique</string> - <string name="pref_refresh_2s">2 s</string> - <string name="pref_refresh_5s">5 s</string> - <string name="pref_refresh_10s">10 s</string> - <string name="pref_refresh_25s">25 s</string> - <string name="pref_refresh_45s">45 s</string> + <string name="pref_refresh_2s">2 sec</string> + <string name="pref_refresh_5s">5 sec</string> + <string name="pref_refresh_10s">10 sec</string> + <string name="pref_refresh_25s">25 sec</string> + <string name="pref_refresh_45s">45 sec</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 s</string> - <string name="timeout_spinner_5_sec">5 s</string> - <string name="timeout_spinner_10_sec">10 s</string> - <string name="timeout_spinner_20_sec">20 s</string> - <string name="timeout_spinner_30_sec">30 s</string> + <string name="timeout_spinner_2_sec">2 sec</string> + <string name="timeout_spinner_5_sec">5 sec</string> + <string name="timeout_spinner_10_sec">10 sec</string> + <string name="timeout_spinner_20_sec">20 sec</string> + <string name="timeout_spinner_30_sec">30 sec</string> <string name="timeout_spinner_10_min">10 min</string> <string name="main">Page d\'accueil</string> <string name="settings">Paramètres</string> <string name="application">Application</string> - <string name="monitoring_cell_information">Monitoring des Cellules.</string> - <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_key_per_day">Une seule demande de clé d\'API est possible par 24h!\nEssayez plus tard.</string> + <string name="monitoring_cell_information">Monitoring des cellules.</string> + <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_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’identifiant de la cellule n’est pas dans la base de données OpenCelllID !</string> <string name="hostile_service_area_changing_lac_detected">Zone de service hostile : changement de LAC détecté !</string> - <string name="femtocell_detection_active">Détection des FemtoCellules Activé.</string> - <string name="cell_tracking_active">Tracking des Cellules Activé.</string> - <string name="cell_monitoring_active">Monitoring des Cellules Activé.</string> - <string name="phone_type">Type de Téléphone</string> - <string name="status_idle_description">Statut: Inactif.</string> - <string name="status_ok_description">Statut: Bon. Aucune Menace Détectée.</string> + <string name="femtocell_detection_active">Détection des FemtoCellules activé.</string> + <string name="cell_tracking_active">Tracking des cellules activé.</string> + <string name="cell_monitoring_active">Monitoring des cellules activé.</string> + <string name="phone_type">Type de téléphone</string> + <string name="status_idle_description">Statut : inactif.</string> + <string name="status_ok_description">Statut : bon. Aucune menace détectée.</string> <string name="alert_threat_detected">ALERTE : menace détectée !</string> - <string name="alert_femtocell_connection_detected">ALERTE : connexion femtocell détectée !</string> + <string name="alert_femtocell_connection_detected">ALERTE : connexion femtocellule détectée !</string> <string name="alert_silent_sms_detected">ALERTE : SMS silencieux détecté !</string> - <string name="alert_silent_wap_sms_detected">ALERTE: SMS Wap Push Détecté!</string> + <string name="alert_silent_wap_sms_detected">ALERTE : SMS WAP Push détecté !</string> <string name="alert_mwi_detected">ALERTE : indicateur de message en attente 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="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> - <string name="alert_femtocell_tracking_detected">ALERTE : pistage par femtocell détecté !</string> - <string name="refreshing_every">Rafraichir tous les</string> - <string name="refreshing_now">Raffaichissement…</string> + <string name="stopped_tracking_femtocell">: arrêt du tracking des femtocellules.</string> + <string name="alert_femtocell_tracking_detected">ALERTE : pistage par femtocellule détecté !</string> + <string name="refreshing_every">Rafraichir toutes les</string> + <string name="refreshing_now">Rafraichissement…</string> <string name="seconds">secondes.</string> <string name="contacting_opencellid_for_data">Contact d\'OpenCellID pour récupérer les données…\nCela peut prendre jusqu\'à une minute.</string> - <string name="unable_to_determine_last_location">Impossible de déterminer votre dernière position.\nActivez les services et réessayez.</string> + <string name="unable_to_determine_last_location">Impossible de déterminer votre dernière position.\nActivez les services de localisation et réessayez.</string> <string name="no_tracked_locations_found">Aucune position à afficher sur la carte.</string> <string name="no_data_for_publishing">Aucune donnée à publier.</string> <string name="download_error">Erreur de téléchargement :</string> @@ -248,89 +248,89 @@ <string name="error_retrieving_opencellid_data">Erreur lors de la récupération des données OpenCellID.\nVérifiez votre réseau !</string> <string name="opencellid_data_successfully_received_markers_updated">Données OpenCellID reçues avec succès.\nCarte Mise à jour.</string> <string name="uploaded_bts_data_successfully">Envoi des données BTS à OpenCellID réussi.</string> - <string name="error_uploading_bts_data">Erreur lors de l’envoi des données BTS aux les serveurs d’OpenCellID !</string> - <string name="no_opencellid_key_detected">Clé de l’API d’OpenCellID non trouvée!\nEntrez d’abord une clé dans les paramètres.</string> - <string name="refreshed_cell_id_info">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 s’est produite lors de l’accès au périphérique série.\nVérifiez les messages d’erreurs de vos journaux et postez-les sur notre dépôt GitHub.</string> + <string name="error_uploading_bts_data">Erreur lors de l’envoi des données BTS aux serveurs d’OpenCellID !</string> + <string name="no_opencellid_key_detected">Clé de l’API d’OpenCellID non trouvée !\nEntrez d’abord une clé dans les paramètres.</string> + <string name="refreshed_cell_id_info">Rafraîchissement des infos CellId</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érifiez 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érifiez que votre appareil possède Busybox et ressayez.</string> + <string name="unknown_error_trying_to_acquire_serial_device">Une erreur inconnue s’est produite lors de l’accès au périphérique série.\nVeuillez vérifier les messages d’erreurs dans vos journaux et postez-les sur notre dépôt GitHub.</string> <string name="getting_ocid_api_key">Obtention d\'une clé de l\'API d\'OpenCellID…</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> + <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> <string name="status">Statut :</string> <string name="status_idle">Repos</string> <string name="status_ok">OK</string> <string name="status_medium">MOYEN</string> <string name="status_high">HAUT</string> <string name="status_danger">DANGER</string> - <string name="status_skull">COURREZ !</string> + <string name="status_skull">Courrez !</string> <!-- Advanced User Settings: SMS Detection Strings --> - <string name="adv_user_info">Ce menu concerne les utilisateurs avancés seulement!\n\nN\'insérez pas de texte aléatoire ici, cela pourrai rendre le système de détection hors de contrôle.\n\nPour ajouter du texte, sélectionnez le type de SMS dans le menu, tapez votre texte de détection et appuyez sur Insérer.\n\nPour supprimer le texte de la Base de Données, appuyez longuement sur celui-ci dans la Visionneuse.</string> + <string name="adv_user_info">Ce menu concerne uniquement les utilisateurs avancés !\n\nN\'insérez pas de texte aléatoire ici, cela pourrait rendre le système de détection hors de contrôle.\n\nPour ajouter du texte, sélectionnez le type de SMS dans le menu, tapez votre texte de détection et appuyez sur Insérer.\n\nPour supprimer le texte de la base de données, appuyez longuement sur celui-ci dans la Visionneuse.</string> <!-- Advanced User Settings: Delete Detected SMS --> - <string name="adv_user_sms_info">Ce menu concerne les utilisateurs avancés seulement!\nPour supprimer un SMS de la base de donnée, appuyez longuement sur celui-ci dans la Visionneuse.</string> + <string name="adv_user_sms_info">Ce menu concerne uniquement les utilisateurs avancés !\nPour supprimer un SMS de la base de données, appuyez longuement sur celui-ci dans la Visionneuse.</string> <string name="title_activity_advanced_user">Supprimer le SMS sélectionné</string> <string name="adv_user_pref_header">Paramètres avancés</string> - <string name="adv_user_pref_launch">Texte de Détection</string> + <string name="adv_user_pref_launch">Texte de détection</string> <string name="adv_user_pref_sms_launch">Supprimer un SMS</string> <string name="adv_user_pref_summary">Insérer et supprimer des textes de détection</string> <string name="adv_user_pref_sms_summary">Supprimer le SMS sélectionné</string> <!-- Advanced User Settings: Enable SMS Detection --> <string name="adv_user_root_title">Activer la détection SMS</string> - <string name="adv_user_root_sum">le Root est requis pour activer la détection SMS</string> + <string name="adv_user_root_sum">Root est requis pour activer la détection SMS</string> <!-- Detected SMS string for custom popup --> - <string name="detection_strings">Texte de Détection</string> + <string name="detection_strings">Texte de détection</string> <string name="typezero_title">ATTENTION !</string> - <string name="typezero_header">SMS Silencieux Détecté</string> - <string name="typezero_data">Message Type-0 Détecté!\nDétails: Voir la Base de Données.</string> + <string name="typezero_header">SMS silencieux détecté</string> + <string name="typezero_data">Message Type-0 Détecté !\nDétails : voir la base de données.</string> <string name="typemwi_title">ATTENTION !</string> - <string name="typemwi_header">SMS MWI Détecté</string> - <string name="typemwi_data">SMS de contrôle de la messagerie vocale (MWI) Détecté!\nDétails: Voir la Base de Données.</string> - <string name="typewap_header">SMS Wap Push Détecté</string> - <string name="typewap_data">Message SMS Wap Push Détecté!\nDétails: Voir la Base de Données.</string> + <string name="typemwi_header">MWI détecté</string> + <string name="typemwi_data">SMS de contrôle de la messagerie vocale (MWI) détecté !\nDétails : voir la base de données.</string> + <string name="typewap_header">WAP Push détecté</string> + <string name="typewap_data">Message SMS Wap Push détecté !\nDétails : voir la base de données.</string> <!-- Section Main--> - <string name="help_main_neighboring_cells"></string> - <string name="help_main_phone_sim_details">Détail du fournisseur de la carte SIM, IMEI, TMSI.</string> + <string name="help_main_neighboring_cells">Affiche les cellules voisines.</string> + <string name="help_main_phone_sim_details">Détail de l\'opérateur de la carte SIM, IMEI, TMSI.</string> <string name="help_main_acd">Afficher une comparaison détaillée des cellules connectées avec les données (s’il y en a) trouvées dans OpenCelllD et surligner 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> <!-- Section Tracking--> - <string name="help_tracking_toggle_attack_detection">Démarre/Arrête la surveillance AIMSICD et compare les détails de chaque cellule avec la Base de Donnée.</string> + <string name="help_tracking_toggle_attack_detection">Démarre/arrête la détection des attaques et compare les détails de chaque cellule avec la base de données.</string> <string name="help_tracking_toggle_cell_tracking">Commencer à localiser les cellules pour les afficher sur la carte des antennes et les envoyer éventuellement à OpenCellID plus tard.</string> <!-- Section Settings--> - <string name="help_settings_preferences">paramètres AIMSICD : règles de protection, temps de requètes et comportement du réseau.</string> + <string name="help_settings_preferences">Paramètres AIMSICD : règles de protection, temps de requètes et comportement du réseau.</string> <string name="help_settings_reset_db">Effacer les tables sélectionnées de la Base de Données.</string> <!-- Section Application--> - <string name="help_app_add_get_ocid_api_key">Obtenir une clé pour utiliser la base de donnée d\'OpenCellID pour uploader vos données…</string> + <string name="help_app_add_get_ocid_api_key">Obtenir une clé pour utiliser la base de donnée d\'OpenCellID pour uploader et télécharger des données…</string> <string name="help_app_about">Explication des icônes de statut et du projet.</string> <string name="help_app_download_local_bts">Télécharge la base de données OpenCellID.</string> <string name="help_app_upload_local_bts">Envoie vos BTS à la base de données OpenCellID.</string> - <string name="help_app_debugging">Afficher et envoyer les logs d\'application.</string> + <string name="help_app_debugging">Collecter et envoyer les logs d\'erreur.</string> <string name="help_app_quit">Quitter cette application.</string> <string name="waiting_for_location">Recherche de votre localisation en cours…</string> - <string name="unique_bts_data">Données BTS Uniques</string> + <string name="unique_bts_data">Données BTS uniques</string> <string name="bts_measurements">Données BTS</string> <string name="imported_ocid_data">Données importées d’OpenCellID</string> <string name="default_mmc_locations">Codes MCC par pays</string> - <string name="silent_sms">SMS Silencieux</string> + <string name="silent_sms">SMS silencieux</string> <string name="eventlog">Événements</string> - <string name="measured_signal_strengths">Puissance des signaux Mesurés</string> + <string name="measured_signal_strengths">Puissance des signaux mesurés</string> - <string name="at_command_response_looking">*** Recherche de périphériques AT…\n</string> - <string name="at_command_response_found">Trouvé: </string> + <string name="at_command_response_looking">*** Recherche de périphériques série AT…\n</string> + <string name="at_command_response_found">"Trouvé : "</string> <string name="at_command_response_setup_complete">*** Recherche terminée ***\n</string> - <string name="currently_connected_bts">BTS actuellement connectée à votre Téléphone</string> + <string name="currently_connected_bts">BTS actuellement connectée à votre téléphone</string> <string name="well_known_encrypted_bts">BTS connu et sécurisé</string> <string name="unknown_or_insecure_bts">BTS inconnu ou non-sécurisé</string> <string name="new_or_recently_added_bts">BTS nouvelle ou récemment ajoutée</string> @@ -393,8 +393,9 @@ <string name="the_string_was_added_to_db">La chaîne de caractères a été ajoutée à la base de données</string> <string name="failed_to_add_the_string_to_db">Échec lors de l’ajout de la chaîne de caractères à la base de données</string> <string name="n_a">Indisponible</string> - <string name="unknown">Ignoré</string> + <string name="unknown">Inconnu</string> <string name="database_settings">Base de données</string> - <string name="download_timed_out">La requête de l\'API OpenCellID met trop de temps. Réessayer plus trad ?</string> + <string name="download_timed_out">La requête de l\'API OpenCellID met trop de temps. Réessayer plus tard ?</string> + <string name="cell_doesnt_provide_any_neighbors">Une BTS ne fournit aucune cellule voisine !</string> </resources> diff --git a/AIMSICD/src/main/res/values-ja/translatable_strings.xml b/AIMSICD/src/main/res/values-ja/translatable_strings.xml index 88fd1fed0e59f8f5b807983292758b726288ea02..d1f9f0b1243614b945544fe3bd6f49ec96b3ec7f 100644 --- a/AIMSICD/src/main/res/values-ja/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-ja/translatable_strings.xml @@ -10,11 +10,16 @@ <string name="text_disagree">åŒæ„ã—ãªã„</string> <string name="disclaimer_title">å…è²¬äº‹é …</string> - <string name="disclaimer">"AIMSICD ã®ä½¿ç”¨ã«ã¤ã„ã¦ã€AIMSICD ã¯å¤šãã®ç†ç”±ã«ã‚ˆã‚Šç›£è¦–ã¨è¿½è·¡ã®æ¤œå‡ºã«å¤±æ•—ã™ã‚‹ã“ã¨ãŒã‚ã‚‹ã€å®Ÿé¨“çš„ã§æœ‰ç›Šãª Android アプリケーションã§ã‚ã‚‹ã“ã¨ã‚’ç†è§£ã®ä¸Šã€åŒæ„ã—ã¾ã™ã€‚ã¾ãŸã€ã‚ãªãŸã¯ã€ãれãŒã¾ã 開発者ãŒç†è§£ã—ã¦ã„ãªã„ã€ä»–ã®æ‰‹æ®µã§å›žé¿ã¾ãŸã¯ç„¡åйã«ã§ãã‚‹ã“ã¨ã‚‚ã‚ã‚‹ã“ã¨ã‚’ç†è§£ã—ã¾ã™ã€‚ã¾ãŸã€ã“ã®ãƒ•リーã®è£½å“ã«é–¢é€£ã—ãŸé–‹ç™ºè€…ã‚„ä¼æ¥ã¯ã€ã“ã®ã‚¢ãƒ—リケーションã®ä½¿ç”¨ã«ã‚ˆã£ã¦å¾—ã‚‰ã‚Œã‚‹çµæžœã‚„出力ã«å¯¾ã—ã¦ã€ä¸€åˆ‡è²¬ä»»ã‚’è² ã‚ãªã„ã“ã¨ã«ã‚‚åŒæ„ã—ã€ç†è§£ã—ã¾ã™ã€‚開発状æ³: アルファ! "</string> + <string name="disclaimer">"AIMSICD ã®ä½¿ç”¨ã«ã¤ã„ã¦ã€AIMSICD ã¯å¤šãã®ç†ç”±ã«ã‚ˆã‚Šç›£è¦–ã¨è¿½è·¡ã®æ¤œå‡ºã«å¤±æ•—ã™ã‚‹ã“ã¨ãŒã‚る〠+å®Ÿé¨“çš„ã§æœ‰ç›Šãª Android アプリケーションã§ã‚ã‚‹ã“ã¨ã‚’ç†è§£ã®ä¸Šã€åŒæ„ã—ã¾ã™ã€‚ã¾ãŸã€ã‚ãªãŸã¯ã€ +ãれãŒã¾ã 開発者ãŒç†è§£ã—ã¦ã„ãªã„ã€ä»–ã®æ‰‹æ®µã§å›žé¿ã¾ãŸã¯ç„¡åйã«ã§ãã‚‹ã“ã¨ã‚‚ã‚ã‚‹ã“ã¨ã‚’ç†è§£ã—ã¾ã™ã€‚ +ã¾ãŸã€ã“ã®ãƒ•リーã®è£½å“ã«é–¢é€£ã—ãŸé–‹ç™ºè€…ã‚„ä¼æ¥ã¯ã€ã“ã®ã‚¢ãƒ—リケーションã®ä½¿ç”¨ã«ã‚ˆã£ã¦å¾—ã‚‰ã‚Œã‚‹çµæžœã‚„〠+出力ã«å¯¾ã—ã¦ã€ä¸€åˆ‡è²¬ä»»ã‚’è² ã‚ãªã„ã“ã¨ã«ã‚‚åŒæ„ã—ã€ç†è§£ã—ã¾ã™ã€‚開発状æ³: アルファ! + "</string> - <string name="toggle_attack_detection">æ”»æ’ƒã®æ¤œå‡ºã‚’切り替ãˆ</string> - <string name="toggle_cell_tracking">基地局ã®è¿½è·¡ã‚’切り替ãˆ</string> + <string name="toggle_attack_detection">æ”»æ’ƒã®æ¤œå‡º</string> + <string name="toggle_cell_tracking">基地局ã®è¿½è·¡</string> <string name="clear_database">データベースã®ã‚¯ãƒªã‚¢/リセット</string> <string name="clear_database_question">ã™ã¹ã¦ã®ãƒ‡ãƒ¼ã‚¿ãŒå‰Šé™¤ã•れã¾ã™ã€‚\nよã‚ã—ã„ã§ã™ã‹?</string> <string name="preferences">プリファレンス</string> @@ -152,7 +157,7 @@ <string name="btn_start_logs">é–‹å§‹</string> <string name="title_activity_about_pop_up">詳細ãªèª¬æ˜Ž</string> - <string name="status_idle_detail_info">アプリã¯ã‚¢ã‚¤ãƒ‰ãƒªãƒ³ã‚°ã¾ãŸã¯ãƒãƒ¼ãƒ‰ä¸ã§ã™ã€‚ä¿è·ã¨æ¤œå‡ºã®å¯¾ç–ãŒæœ‰åйã«ãªã£ã¦ã„ã¾ã›ã‚“。攻撃検出を切り替ãˆã¦ãã ã•ã„!</string> + <string name="status_idle_detail_info">アプリã¯ã‚¢ã‚¤ãƒ‰ãƒªãƒ³ã‚°ã¾ãŸã¯ãƒãƒ¼ãƒ‰ä¸ã§ã™ã€‚ä¿è·ã¨æ¤œå‡ºã®å¯¾ç–ãŒæœ‰åйã«ãªã£ã¦ã„ã¾ã›ã‚“ã€‚æ”»æ’ƒã®æ¤œå‡ºã‚’有効ã«ã—ã¦ãã ã•ã„!</string> <string name="status_ok_detail_info">è„…å¨ã¯æ¤œå‡ºã—ã¦ã„ã¾ã›ã‚“。有効ã«ã—ãŸæ¤œå‡ºã®è¨å®šã«åŸºã¥ã„ã¦ã€å¸¸ã«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ã„ã¾ã™ã€‚</string> <string name="help_main_at_command_interface">ベースãƒãƒ³ãƒ‰ プãƒã‚»ãƒƒã‚µã« AT コマンドをé€ä¿¡ã§ãるよã†ã«ã™ã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイスã§ã™ (ROOT ãŒå¿…è¦)。</string> @@ -328,4 +333,13 @@ <string name="database_settings">データベース</string> <string name="download_timed_out">OpenCellID API リクエストãŒã‚¿ã‚¤ãƒ アウトã—ã¾ã—ãŸã€‚後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¾ã™ã‹?</string> + <string name="cell_doesnt_provide_any_neighbors">BTS ã¯ã€éš£æŽ¥åŸºåœ°å±€ã‚’æä¾›ã—ã¦ã„ã¾ã›ã‚“!</string> + <string name="import_cell_towers">基地局ã®ãƒ‡ãƒ¼ã‚¿ã‚’インãƒãƒ¼ãƒˆ</string> + + <string name="imporing_celltowers_data">基地局ã®ãƒ‡ãƒ¼ã‚¿ã‚’インãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™â€¦ +処ç†ã«æ™‚é–“ãŒã‹ã‹ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚</string> + <string name="celltowers_data_successfully_imported">基地局ã®ãƒ‡ãƒ¼ã‚¿ã‚’æ£å¸¸ã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã¾ã—ãŸã€‚</string> + <string name="error_importing_celltowers_data">基地局ã®ãƒ‡ãƒ¼ã‚¿ã‚’インãƒãƒ¼ãƒˆä¸ã«ã‚¨ãƒ©ãƒ¼ã€‚</string> + <string name="help_app_import_cell_towers">基地局ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’インãƒãƒ¼ãƒˆã—ã¾ã™ã€‚</string> + <string name="needs_location">å ´æ‰€ãŒå¿…è¦</string> </resources> diff --git a/AIMSICD/src/main/res/values-nb/translatable_strings.xml b/AIMSICD/src/main/res/values-nb/translatable_strings.xml index 210291850dfbae64db9ebf44e826211c101b0ecf..72aa0e9fe0f7231bbca8c43965616185f7d4dc06 100644 --- a/AIMSICD/src/main/res/values-nb/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-nb/translatable_strings.xml @@ -10,10 +10,16 @@ <string name="text_disagree">Jeg er uenig</string> <string name="disclaimer_title">VIKTIG</string> - <string name="disclaimer">"Ved Ã¥ bruke AIMSICD har du forstÃ¥tt og godtatt at AIMSICD er en experimentell og informativ Android applikasjon som kan feile i Ã¥ oppdage sporing og overvÃ¥kning av flere Ã¥rsaker. Du er ogsÃ¥ klar over at den kan bli lurt og slÃ¥tt av Ã¥rsaker ukjent for utviklerne. Du forstÃ¥r og at utviklerne og selskap tilknyttet denne gratisappen ikke kan holdes ansvarlig for resultater og konsekvenser vedrørende bruken av denne applikasjonen. UTVIKLINGS-STADIE: ALPHA! "</string> - - <string name="toggle_attack_detection">Styr Angrepsoppdaging</string> - <string name="toggle_cell_tracking">Styr Cellesporing</string> + <string name="disclaimer">"Ved Ã¥ bruke AIMSICD har du forstÃ¥tt og godtatt at AIMSICD er en experimentell + og informativ Android applikasjon som kan feile i Ã¥ oppdage sporing og + overvÃ¥kning av flere Ã¥rsaker. Du er ogsÃ¥ klar over at den kan bli lurt eller + gi tapt av Ã¥rsaker ukjent for utviklerne. Du forstÃ¥r og at utviklerne og selskap + tilknyttet denne gratisappen ikke kan holdes ansvarlig for resultater og konsekvenser + vedrørende bruken av denne applikasjonen. UTVIKLINGS-STADIE: ALPHA! + "</string> + + <string name="toggle_attack_detection">Angrepsoppdaging</string> + <string name="toggle_cell_tracking">Cellesporing</string> <string name="clear_database">Nullstill Database</string> <string name="clear_database_question">Alle data vil slettes.\nEr du sikker?</string> <string name="press_once_again_to_exit">Trykk pÃ¥ nytt for Ã¥ Avslutte.</string> @@ -150,7 +156,7 @@ <string name="btn_start_logs">Start</string> <string name="title_activity_about_pop_up">DETALJERT FORKLARING</string> - <string name="status_idle_detail_info">Appen pauser eller laster. Ingen beskyttelse eller oppdaging er pÃ¥slÃ¥tt. Vennligsts slÃ¥ pÃ¥ Angrepsoppdaging!</string> + <string name="status_idle_detail_info">Appen er pauset eller laster. Ingen beskyttelse eller oppdaging er aktiv. Vennligsts slÃ¥ pÃ¥ Angrepsoppdaging!</string> <string name="status_ok_detail_info">Ingen trusler oppdaget. Ditt nettverk sjekkes konstant basert pÃ¥ det du har pÃ¥slÃ¥tt i Oppdagelses-Innstillinger.</string> <string name="status_medium_detail_info">"Usikkert OmrÃ¥de: Minst 1 ny eller ukjent basestasjon i omrÃ¥det, eller med brutt eller usikker kryptering lavere enn A5/3. Alle samtaler eller SMS som utføres hær kan bli avlyttet og lagret. Forlat omrÃ¥det Fort."</string> <string name="status_high_detail_info">Aktive Fientlige Tjenester Oppdaget: En IMSI-Catcher (IMSIC) eller falsk BTS (basestasjon) sporer aktivt brukere. Aktiv sporing foregÃ¥r i dette omrÃ¥det. Du bør helst unngÃ¥ dette stedet, spesiellt ved Masseansamlinger og uro. Ta ut batteriet og SIM kortet!</string> @@ -244,7 +250,7 @@ <string name="status_danger">FARE</string> <string name="status_skull">SPRING!</string> - <string name="adv_user_info">Denne menyen er kun for spesialister!\n\nVennligst ikke sett inn vilkÃ¥rlige strenger fordi det vil fÃ¥ overvÃ¥kingen ut av kontroll.\n\nFor Ã¥ legge til streng velg SMS type fra menyen, sriv inn strengen og trykk Legg til.\n\nFor Ã¥ slette fra databasen trykk lenge pÃ¥ listevisning.</string> + <string name="adv_user_info">Denne menyen er kun for spesialister!\n\nVennligst ikke sett inn vilkÃ¥rlige strenger fordi det vil fÃ¥ overvÃ¥kingen ut av kontroll.\n\nFor Ã¥ legge til streng velg SMS type fra menyen, skriv inn strengen og trykk Legg til.\n\nFor Ã¥ slette fra databasen trykk lenge pÃ¥ listevisning.</string> <string name="adv_user_sms_info">Denne menyen er kun for spesialister!\nFor Ã¥ slette en oppdaget SMS trykk lenge pÃ¥ listevisning.</string> <string name="title_activity_advanced_user">Slett Oppdaget SMS</string> @@ -325,5 +331,14 @@ <string name="unknown">Ukjent</string> <string name="database_settings">Database</string> - <string name="download_timed_out">OpenCellID API forespørsel tidsavbrudd Prøv igjen senere?</string> + <string name="download_timed_out">OpenCellID API forespørsel tidsavbrudd Prøv igjen senere!?</string> + <string name="cell_doesnt_provide_any_neighbors">Bakkestasjonen støtter ikke NaboCeller!</string> + <string name="import_cell_towers">"Importer CellTowers-data"</string> + + <string name="imporing_celltowers_data">Importerer CellTowsers-data... +Dette kan ta litt tid.</string> + <string name="celltowers_data_successfully_imported">Import av CellTowers-data var vellykket.</string> + <string name="error_importing_celltowers_data">Import av CellTowers-data feilet.</string> + <string name="help_app_import_cell_towers">Importerer CellTowers-database.</string> + <string name="needs_location">Trenger plassering</string> </resources> diff --git a/AIMSICD/src/main/res/values-ne-rNP/translatable_strings.xml b/AIMSICD/src/main/res/values-ne-rNP/translatable_strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a6b3daec9354f9ae75cdf8d94a67446c6227dd96 --- /dev/null +++ b/AIMSICD/src/main/res/values-ne-rNP/translatable_strings.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources></resources> \ No newline at end of file diff --git a/AIMSICD/src/main/res/values-ne/translatable_strings.xml b/AIMSICD/src/main/res/values-ne/translatable_strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..5b145a079d9bdbaceae55c6a3369b51dac72a352 --- /dev/null +++ b/AIMSICD/src/main/res/values-ne/translatable_strings.xml @@ -0,0 +1,13 @@ +<?xml version='1.0' encoding='UTF-8'?> +<resources><string name="tracking">पछà¥à¤¯à¤¾à¤‰à¤¨à¥</string> + <string name="device_info">फोन/सिम विवरण</string> + <string name="map_view">"antenna नकà¥à¤¸à¤¾ निरिकà¥à¤·à¤•"</string> + <string name="db_viewer">database निरिकà¥à¤·à¤•</string> + <string name="quit">छोडà¥à¤¨à¥</string> + <string name="text_ok">हà¥à¤¨à¥à¤›</string> + <string name="text_cancel">रदà¥à¤¦ गरà¥à¤¨à¥</string> + <string name="text_agree">म सहमत छà¥</string> + <string name="text_disagree">म असहमत छà¥</string> + + <string name="disclaimer_title">अधिकार तà¥à¤¯à¤¾à¤— गरà¥à¤¨à¥‡</string> + </resources> diff --git a/AIMSICD/src/main/res/values-nl/translatable_strings.xml b/AIMSICD/src/main/res/values-nl/translatable_strings.xml index 03bf90ae69be060111981a7dfda26633c2a2db34..f9137599e5a6001d169b02271d7b10a73393cefa 100644 --- a/AIMSICD/src/main/res/values-nl/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-nl/translatable_strings.xml @@ -1,4 +1,4 @@ -<?xml version='1.0' encoding='utf-8'?> +<?xml version='1.0' encoding='UTF-8'?> <resources><string name="tracking">Volgen</string> <string name="device_info">Telefoon/SIM details</string> <string name="map_view">Antennekaart scherm</string> @@ -82,7 +82,7 @@ <string name="pref_system_title">Systeeminstellingen</string> <string name="pref_autostart_title">Automatisch starten</string> <string name="pref_autostart_summ">Service automatisch starten bij opstarten telefoon</string> - <string name="disclaimer">"Door het gebruik van AIMSICD begrijpt u en gaat u er mee akkoord dat AIMSICD een experimenteel en informatieve Android applicatie is dat door verschillende redenen mogelijk niet in staat is om volgsystemen te detecteren. U begrijpt ook dat het omzeild of verslagen kan worden door methodes die de ontwikkelaars momenteel nog niet begrijpen. U begrijpt en gaat er tevens mee akkoord dat dit de ontwikkelaars van dit gratis project in geen geval verantwoordelijk te houden zijn voor elk resultaat en gebruik van dit programma. "</string> + <string name="disclaimer">Door het gebruik van AIMSICD begrijpt u en gaat u er mee akkoord dat AIMSICD een experimenteel en informatieve Android applicatie is dat door verschillende redenen mogelijk niet in staat is om volgsystemen te detecteren. U begrijpt ook dat het omzeild of verslagen kan worden door methodes die de ontwikkelaars momenteel nog niet begrijpen. U begrijpt en gaat er tevens mee akkoord dat dit de ontwikkelaars van dit gratis project in geen geval verantwoordelijk te houden zijn voor elk resultaat en gebruik van dit programma. ONTWIKKELING STATUS: ALPHA!</string> <string name="status_idle_about_desc">Inactief / aan het laden.</string> <string name="pref_persistservice_title">Permanente service</string> @@ -259,7 +259,7 @@ <string name="typewap_data">WAP pushbericht gedetecteerd!\nVoor details zie het database scherm.</string> - <string name="help_main_neighboring_cells"></string> + <string name="help_main_neighboring_cells">Toont naburige cellen.</string> <string name="help_main_phone_sim_details">SIM netwerk provider details, IMEI, TMSI.</string> <string name="help_main_acd">"Toont een gedetailleerde vergelijking van de cel waarmee u nu verbonden bent en de gegevens uit OpenCellID en toont de verschillen."</string> <string name="help_main_database_viewer">Toon de verschillende DB tabellen.</string> @@ -323,4 +323,8 @@ <string name="pref_enable_gps_summary">GPS inschakelen voor Cell tracking</string> <string name="unknown">Onbekend</string> + <string name="database_settings">Database</string> + <string name="download_timed_out">OpenCellID API verzoek is verlopen. Later opnieuw proberen?</string> + <string name="cell_doesnt_provide_any_neighbors">GSM-mast verstrekt geen naburige cellen!</string> + <string name="n_a">NVT</string> </resources> diff --git a/AIMSICD/src/main/res/values-pl/translatable_strings.xml b/AIMSICD/src/main/res/values-pl/translatable_strings.xml index 6f1739669a6f913a303b9a1110c9a02b8222af5c..b6aa2d7daabe83a48395c17eb84b1ccbd0458288 100644 --- a/AIMSICD/src/main/res/values-pl/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-pl/translatable_strings.xml @@ -1,4 +1,4 @@ -<?xml version='1.0' encoding='utf-8'?> +<?xml version='1.0' encoding='UTF-8'?> <resources> <!-- Drawer --> @@ -14,12 +14,13 @@ <!-- DISCLAIMER --> <string name="disclaimer_title">DISCLAIMER</string> - <string name="disclaimer">"UżywajÄ…c AIMSICD oÅ›wiadczasz, że rozumiesz i zgadzasz siÄ™ z tym, że AIMSICD jest eksperymentalnÄ… i informacyjnÄ… aplikacjÄ… na system Android, która może, z wielu powodów, nie być w stanie wykryć tego, że jesteÅ› nadzorowany czy Å›ledzony. Przyjmujesz także do wiadomoÅ›ci, że program może być pokonany w sposoby jeszcze nie znane deweloperom. Tak wiÄ™c zgadzasz siÄ™ i rozumiesz, że deweloperzy i firmy zwiÄ…zane z tym darmowym produktem nie mogÄ… być pociÄ…gniÄ™te do odpowiedzialnoÅ›ci z żadnego powodu niezależnie od wyniku użytkowania tej aplikacji. "</string> + <string name="disclaimer">"UżywajÄ…c AIMSICD oÅ›wiadczasz, że rozumiesz i zgadzasz siÄ™ z tym, że AIMSICD jest eksperymentalnÄ… i informacyjnÄ… aplikacjÄ… na system Android, która może, z wielu powodów, nie być w stanie wykryć tego, że jesteÅ› nadzorowany czy Å›ledzony. Przyjmujesz także do wiadomoÅ›ci, że program może być pokonany w sposoby jeszcze nie znane deweloperom. Tak wiÄ™c zgadzasz siÄ™ i rozumiesz, że deweloperzy i firmy zwiÄ…zane z tym darmowym produktem nie mogÄ… być pociÄ…gniÄ™te do odpowiedzialnoÅ›ci z żadnego powodu niezależnie od wyniku użytkowania tej aplikacji. +STAN ROZWOJU APLIKACJI: ALPHA! "</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="toggle_attack_detection">Wykrywanie Ataków</string> + <string name="toggle_cell_tracking">Monitorowanie Stacji Bazowych</string> <string name="clear_database">Wyczyść bazÄ™ danych</string> <string name="clear_database_question">Wszystkie dane zostanÄ… skasowane.\nNa pewno?</string> <string name="preferences">Ustawienia</string> @@ -30,13 +31,13 @@ <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> + <string name="get_opencellid">Pobierz Informacje O Stacjach Bazowych</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="cell_info_title">SÄ…siednie Stacje Bazowe</string> <string name="neighboring_cells_title">SÄ…siednie komórki</string> <string name="ciphering_indicator_title">Wskaźnik szyfrowania</string> <string name="neighboring_cells_num_title">Razem:</string> @@ -63,7 +64,7 @@ <string name="network_psc">PSC:</string> <!-- Upload BTS to OpenCellID --> - <string name="upload_bts">WyÅ›lij dane o lokalnych komórkach</string> + <string name="upload_bts">WyÅ›lij Informacje O Lokalnych Stacjach Bazowych</string> <!-- ABOUT LAYOUT --> <string name="about_aimsicd">O AIMSICD</string> @@ -81,7 +82,7 @@ <string name="status_high_about_desc">Aktywne Å›ledzenie blisko Ciebie!</string> <string name="status_ok_about_desc">Wszystko OK.</string> <string name="status_danger_about_desc">JesteÅ› Å›ledzony!</string> - <string name="status_medium_about_desc">Niebezpieczny obszar. Opóść go!</string> + <string name="status_medium_about_desc">Niebezpieczny obszar. Opuść go!</string> <string name="status_skull_about_desc">Uciekaj! Telefon ulega manipulacji!</string> <string name="about_desc_icon_title">Kliknij na ikonÄ™ by uzyskać wiÄ™cej informacji:</string> @@ -102,7 +103,7 @@ <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_title">Automatyczne Monitorowanie</string> <string name="pref_enable_cell_summ">Włącz automatyczne Å›ledzenie komórek</string> <string name="pref_femto_title">Wykrywanie Femtocell</string> <string name="pref_femto_summ">(obecnie TYLKO dla telefonów z CDMA)</string> @@ -182,10 +183,10 @@ <!-- Detailed Info Strings --> <string name="title_activity_about_pop_up">SZCZEGÓÅOWY OPIS</string> <string name="status_idle_detail_info">Aplikacja jest bezczynna lub Å‚aduje siÄ™. Å»adne Å›rodki ochrony lub wykrywania nie sÄ… włączone. Otwórz panel nawigacyjny i włącz Å›ledzenie w menu!</string> - <string name="status_ok_detail_info">Nie wykryto żadnych zagrożeÅ„.</string> + <string name="status_ok_detail_info">Nie wykryto żadnych zagrożeÅ„. Twoja sieć jest ciÄ…gle sprawdzana zgodnie z ustawieniami.</string> <string name="status_medium_detail_info">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="status_high_detail_info">Wykryto wrogÄ… aktywność: IMIC lub FBTS aktywnie Å›ledzi użytkowników! Wyjmij bateriÄ™ z telefoni i unikaj tego miejsca!</string> - <string name="status_danger_detail_info">Wykryto wrogie Å›ledzenie: W pobliżu jest aktywny FBTS lub IMSIC, uniemożliwiajÄ…c bezpieczne, szyfrowane połączenie z dostawcÄ… sieci. JeÅ›li jesteÅ› w niebezpieczeÅ„stwie zniszczy swój telefon i kartÄ™ SIM i zgÅ‚oÅ› jÄ… jako niedawno ukradzionÄ….</string> + <string name="status_danger_detail_info">Wykryto wrogie Å›ledzenie: W pobliżu jest aktywny FBTS lub IMSIC, uniemożliwiajÄ…c bezpieczne, szyfrowane połączenie z dostawcÄ… sieci. JeÅ›li jesteÅ› w niebezpieczeÅ„stwie zniszcz swój telefon, a kartÄ™ SIM zgÅ‚oÅ› jÄ… jako zaginionÄ….</string> <string name="status_skull_detail_info">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> @@ -296,7 +297,7 @@ <!-- Section Main--> - <string name="help_main_neighboring_cells"></string> + <string name="help_main_neighboring_cells">Pokaż sÄ…siednie komórki.</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> @@ -315,13 +316,13 @@ <string name="help_app_add_get_ocid_api_key">Uzyskaj klucz API do OpenCellID by pobierać i wysyÅ‚ać dane…</string> <string name="help_app_about">O nas i kogo wspieramy.</string> <string name="help_app_download_local_bts">Pobierz bazÄ™ danych OpenCellID.</string> - <string name="help_app_upload_local_bts">WyÅ›lij dane o lokalnych BTS do OpenCellID.</string> + <string name="help_app_upload_local_bts">WyÅ›lij Informacje O Lokalnych Stacjach Bazowych do OpenCellID.</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ę…</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="imported_ocid_data">Zaimportowane dane z OpenCellID</string> <string name="default_mmc_locations">DomyÅ›lne lokalizacje MMC</string> <string name="silent_sms">BezgÅ‚oÅ›ny SMS</string> <string name="eventlog">Logi zdarzeÅ„</string> @@ -374,4 +375,28 @@ <string name="delete_database_msg_success">Baza danych zostaÅ‚a usuniÄ™ta i odtworzona.\nProszÄ™ zrestartować aplikacjÄ™ by usunąć resztÄ™ danych z pamiÄ™ci.</string> <string name="unknown">Nieznany</string> + <string name="buildnumber">Numer Kompilacji: %s</string> + <string name="git_sha">Git SHA-Hash: %s</string> + <string name="pref_enable_gps_title">Ustawienia GPS</string> + <string name="pref_enable_gps_summary">Włącz GPS aby Å›ledzić komórki</string> + <string name="pref_notification_settings">Ustawienia powiadomieÅ„</string> + <string name="pref_notification_vibrate_enable_title">WÅ‚acz wibracje</string> + <string name="pref_notification_vibrate_enable_summary">Wibruj gdy zmienia siÄ™ stan powiadomieÅ„</string> + <string name="pref_notification_vibrate_min_level_title">Wibruj na zmianie poziomu zagrożenia</string> + <string name="pref_notification_vibrate_min_level_summary">Wybierz minimalny poziom zagrożenia dla wibracji</string> + <string name="notification_vibrate_idle">Wstrzymany</string> + <string name="notification_vibrate_ok">OK</string> + <string name="notification_vibrate_medium">Åšredni</string> + <string name="notification_vibrate_danger">Zagrożenie</string> + + <string name="database_settings">Baza danych</string> + <string name="cell_doesnt_provide_any_neighbors">BTS nie dostarcza informacji o żadnych sÄ…siednich komórkach!</string> + <string name="download_timed_out">Zapytanie do OpenCellID przekroczyÅ‚o limit czasu. Spróbować później?</string> + <string name="deleted">UsuniÄ™to</string> + <string name="failed_to_delete">Usuwanie nie powiodÅ‚o siÄ™</string> + <string name="double_quote_will_cause_db_error">"String nie zostaÅ‚ dodany +dodanie \" spowoduje błąd bazy danych "</string> + <string name="the_string_was_added_to_db">Dodano do bazy danych</string> + <string name="failed_to_add_the_string_to_db">Nie powiodÅ‚o siÄ™ dodawanie do bazy danych</string> + <string name="n_a">N/A</string> </resources> diff --git a/AIMSICD/src/main/res/values-pt-rBR/translatable_strings.xml b/AIMSICD/src/main/res/values-pt-rBR/translatable_strings.xml index adbc011a4da74700f67302d9cc9bd0d3450eecc8..49f9cc6af676b977e1cc54ddc096d1d019a7b341 100644 --- a/AIMSICD/src/main/res/values-pt-rBR/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-pt-rBR/translatable_strings.xml @@ -15,7 +15,8 @@ <string name="toggle_attack_detection">Detecção de ataques de alternância</string> <string name="toggle_cell_tracking">Rastreamento de células de alternância</string> <string name="clear_database">Limpar/Restabelecer banco de dados</string> - <string name="clear_database_question">Todos os dados serão eliminados\nVocê tem certeza?</string> + <string name="clear_database_question">Todos os dados serão eliminados. +Você tem certeza?</string> <string name="preferences">Preferências</string> <string name="press_once_again_to_exit">Pressione novamente para sair.</string> <string name="cell_lookup">Todos os detalhes da célula atual</string> @@ -32,7 +33,7 @@ <string name="neighboring_cells_title">células vizinhas</string> <string name="ciphering_indicator_title">Indicador de codificação</string> <string name="neighboring_cells_num_title">Total:</string> - <string name="sim_country">PaÃs</string> + <string name="sim_country">PaÃs:</string> <string name="sim_operator_id">ID do operador:</string> <string name="sim_operator_name">Nome do operador:</string> <string name="sim_imsi">IMSI:</string> @@ -75,4 +76,82 @@ <string name="status_danger_about_desc">Você está sendo monitorado!</string> <string name="unknown">Desconhecido</string> + <string name="pref_enable_gps_title">Configurações do GPS</string> + <string name="pref_system_title">Configurações do sistema</string> + <string name="pref_persistservice_title">Serviço de persistência</string> + <string name="pref_protection_title">Configurações de proteção</string> + <string name="pref_notification_settings">Configurações de notificações</string> + <string name="pref_ui_title">Configurações da interface</string> + <string name="pref_refresh_title">Taxa de atualização</string> + <string name="pref_map_title">Preferências de visualização do mapa</string> + <string name="pref_map_type_title">Tipo do mapa</string> + <string name="pref_map_type_summ">Mostrar mapas em estilos diferentes</string> + + <string name="table_names_prompt">Selecionar tabela</string> + <string name="response_label">Resposta:</string> + <string name="execute_at">Executar</string> + <string name="title_ocid_key">"chave da API da OpenCellID "</string> + <string name="btn_clear_logs">Limpar</string> + <string name="btn_copy_to_clipboard">Copiar</string> + <string name="msg_copied_to_clipboard">Logs copiados para a caixa de transferência.</string> + <string name="btn_stop_logs">Parar</string> + <string name="btn_start_logs">Iniciar</string> + + <string name="title_activity_about_pop_up">EXPLICAÇÃO DETALHADA</string> + <string name="about_desc_icon_title">Presione o Ãcone de Status abaixo para informações detalhadas:</string> + + <string name="network_netid">ID da rede:</string> + <string name="network_sysid">ID do sistema:</string> + <string name="network_baseid">ID da estação base:</string> + + <string name="location_error_title">Serviço de localização desabilitado</string> + <string name="pref_ui_icons_summ">Seleção do Ãcone do tema</string> + <string name="pref_ui_icons_title">Ãcones de status</string> + <string name="pref_refresh_summ">Controle a frequência de atualização dos dispositivos +Frequência atual: %s</string> + <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">"Exemplos: "</string> + <string name="lat_label">"Latitude: "</string> + <string name="lng_label">"Longitude: "</string> + + <string name="serial_device_spinner_title">Detectar dispositivos:</string> + <string name="timeout_spinner_title">Timeout:</string> + <string name="timeout_spinner_prompt">Selecionar Timeout</string> + <string name="ocid_api_success">Nova API key foi salva.</string> + + <string name="title_debug_logs">Logs de depuração</string> + <string name="open_cell_id_button_cancel">Cancelar</string> + <string name="open_cell_id_button_ok">OK</string> + + <string name="pref_notification_vibrate_enable_title">Habilitar vibração</string> + <string name="pref_notification_vibrate_enable_summary">Vibrar quando notificações forem alteradas</string> + <string name="notification_vibrate_idle">Idle</string> + <string name="notification_vibrate_ok">OK</string> + <string name="notification_vibrate_medium">Médio</string> + <string name="notification_vibrate_danger">Perigo</string> + + <string name="map_type_normal">Normal</string> + <string name="pref_refresh_manual">Manual</string> + <string name="pref_refresh_automatic">Automático</string> + <string name="pref_refresh_2s">2 segundos</string> + <string name="pref_refresh_5s">5 segundos</string> + <string name="pref_refresh_10s">10 segundos</string> + <string name="pref_refresh_25s">25 segundos</string> + <string name="pref_refresh_45s">45 segundos</string> + <string name="pref_refresh_1_min">1 minuto</string> + <string name="pref_refresh_5_min">5 minutos</string> + <string name="timeout_spinner_2_sec">2 segundos</string> + <string name="timeout_spinner_5_sec">5 segundos</string> + <string name="timeout_spinner_10_sec">10 segundos</string> + <string name="timeout_spinner_20_sec">20 segundos</string> + <string name="timeout_spinner_30_sec">30 segundos</string> + <string name="timeout_spinner_10_min">10 minutos</string> + <string name="main">Principal</string> + <string name="settings">Configurações</string> + <string name="database_settings">Banco de dados</string> + <string name="application">Aplicação</string> </resources> diff --git a/AIMSICD/src/main/res/values-ru/translatable_strings.xml b/AIMSICD/src/main/res/values-ru/translatable_strings.xml index 122c6f4b8abb3df4d0d0abbad444ab0557b8c5c5..fb2515cd039852129c414a4c15a0e8e7d0777345 100644 --- a/AIMSICD/src/main/res/values-ru/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-ru/translatable_strings.xml @@ -1,4 +1,4 @@ -<?xml version='1.0' encoding='utf-8'?> +<?xml version='1.0' encoding='UTF-8'?> <resources> <!-- Drawer --> @@ -14,14 +14,7 @@ <!-- DISCLAIMER --> <string name="disclaimer_title">ОТКÐЗ ОТ ОТВЕТСТВЕÐÐОСТИ</string> - <string name="disclaimer">ИÑпользование Вами AIMSICD означает, что Ð’Ñ‹ понÑли и ÑоглаÑны Ñ Ñ‚ÐµÐ¼, что AIMSICD - Ñто - ÑкÑперментальное и информативное приложение Ðндроид, которое по Ñ€Ñду причин не - вÑегда может обнаружить наблюдение и Ñлежение. Ð’Ñ‹ также понÑли, что его работу могут - блокировать или вноÑить помехи другие ÑредÑтва, пока не изученные разработчиками. - Ð’Ñ‹ также ÑоглашаетеÑÑŒ и понимаете, что разработчики и компании, ÑвÑзанные Ñ Ñтим - беÑплатным продуктом, ни в коей мере не могут быть ответÑтвенными за результаты или - поÑледÑтвиÑ, иÑходÑщие из иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтого приложениÑ. - </string> + <string name="disclaimer">"ИÑпользование Вами AIMSICD означает, что Ð’Ñ‹ понÑли и ÑоглаÑны Ñ Ñ‚ÐµÐ¼, что AIMSICD - Ñто ÑкÑпериментальное и информационное приложение Ðндроид, которое по Ñ€Ñду причин не вÑегда может обнаружить наблюдение и Ñлежение. Ð’Ñ‹ также понÑли, что его работу могут блокировать или вноÑить помехи другие ÑредÑтва, пока не изученные разработчиками. Ð’Ñ‹ также ÑоглашаетеÑÑŒ и понимаете, что разработчики и компании, ÑвÑзанные Ñ Ñтим беÑплатным продуктом, ни в коей мере не могут быть ответÑтвенными за результаты или поÑледÑтвиÑ, иÑходÑщие из иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтого приложениÑ. СТÐТУС Ð ÐЗРÐБОТКИ: ÐЛЬФÐ! "</string> <!-- MENU --> <string name="toggle_attack_detection">Включение Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð°Ñ‚Ð°ÐºÐ¸</string> @@ -42,7 +35,7 @@ <string name="device_info_title">Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± уÑтройÑтве</string> <string name="sim_info_title">Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ SIM</string> <string name="network_info">Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ñети</string> - <string name="cell_info_title">Текущий уровень угрозы</string> + <string name="cell_info_title">СоÑедние Ñчейки</string> <string name="neighboring_cells_title">СоÑедние Ñчейки Ñотовой ÑвÑзи</string> <string name="ciphering_indicator_title">Индикатор шифрованиÑ</string> <string name="neighboring_cells_num_title">Ð’Ñего:</string> @@ -50,10 +43,10 @@ <string name="sim_operator_id">ID оператора:</string> <string name="sim_operator_name">Ðазвание оператора:</string> <string name="sim_imsi">IMSI:</string> - <string name="sim_serial">Serial:</string> + <string name="sim_serial">Серийный номер:</string> <string name="device_type">Тип телефона:</string> <string name="device_imei">IMEI:</string> - <string name="device_version">RIL Version:</string> + <string name="device_version">ВерÑÐ¸Ñ RIL:</string> <string name="network_name">Ð˜Ð¼Ñ Ð¿Ñ€Ð¾Ð²Ð°Ð¹Ð´ÐµÑ€Ð°:</string> <string name="network_code">Код провайдера:</string> <string name="network_type">Тип:</string> @@ -75,7 +68,7 @@ <string name="about_aimsicd">Об AIMSICD</string> <string name="app_version">ВерÑиÑ: %s</string> <string name="buildnumber">Ðомер Ñборки: %s</string> - <string name="git_sha">Git SHA-Hash: %s</string> + <string name="git_sha">Ð¥Ñш SHA Git: %s</string> <string name="aimsicd_about_info3">Проект Ðндроид Ð´Ð»Ñ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð»Ð¾Ð¶Ð½Ñ‹Ñ… базовых Ñтанций (IMSI-перехватчиков) в GSM/UMTS ÑетÑÑ….</string> <string name="about_github">AIMSICD на GitHub</string> <string name="about_wiki">ДОКУМЕÐТÐЦИЯ</string> @@ -191,12 +184,12 @@ <!-- Detailed Info Strings --> <string name="title_activity_about_pop_up">ПОДРОБÐОЕ ОПИСÐÐИЕ</string> - <string name="status_idle_detail_info">Приложение работает в режиме Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ загрузки. Меры защиты и Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð½Ðµ включены. ПожалуйÑта, откройте меню и включите их в разделе СЛЕЖЕÐИЕ!</string> - <string name="status_ok_detail_info">Ðикакие угрозы не обнаружены. Ðаше приложение поÑтоÑнно проверÑет Вашу Ñеть на оÑнове защиты, которую Ð’Ñ‹ уÑтановили в меню и наÑтройках.</string> - <string name="status_medium_detail_info">ÐебезопаÑÐ½Ð°Ñ Ð·Ð¾Ð½Ð° обÑлуживаниÑ: в данном районе, по крайней мере, 1 Ð½Ð¾Ð²Ð°Ñ Ð¸Ð»Ð¸ неизвеÑÑ‚Ð½Ð°Ñ Ð‘Ð¡, или Ñ Ð¸Ñпользованием небезопаÑного (Ñломанного) алгоритма шифрованиÑ, меньшего, чем A5/3 [Обнаружение WIP]. Возможно, что любые телефонные звонки/СМС, Ñделанные в Ñтой зоне могут быть перехвачены и запиÑаны. Вам лучше покинуть Ñто меÑто.</string> - <string name="status_high_detail_info">Обнаружены враждебные дейÑтвиÑ: IMSI-Перехватчик (IMSIC) или поддельные БС (FBTS) активно отÑлеживают пользователей. Ð’ данной зоне ведетÑÑ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾Ðµ Ñканирование. Ð’Ñ‹ должны избегать Ñтого меÑта, оÑобенно, еÑли еÑть политичеÑÐºÐ°Ñ Ð½ÐµÑтабильноÑть. Выньте батарею или уничтожьте Ñвой телефон!</string> - <string name="status_danger_detail_info">Обнаружены враждебные отÑлеживаниÑ: FBTS или IMSIC активно отÑлеживают Ð’Ð°Ñ Ð¸ препÑÑ‚Ñтвуют подключению Вашего телефона к Вашей обычной зашифрованной мобильной Ñети. ЕÑли Ð’Ñ‹ находитеÑÑŒ в опаÑноÑти, Ñломайте Ваш телефон + SIM и Ñообщите о его краже.</string> - <string name="status_skull_detail_info">Враждебные манипулÑции: кто-то пытаетÑÑ ÑƒÐ´Ð°Ð»ÐµÐ½Ð½Ð¾ управлÑть Вашим телефоном! Уничтожьте (или продайте) Ñвой телефон и возьмите новый где-то подальше (не приноÑите туда Ñвой Ñтарый телефон)! ИÑпользуйте новую (анонимную) SIM-карту, измените поведение вызовов и предупредите Ñвоих друзей, Ñ€Ð°Ð·Ð³Ð¾Ð²Ð°Ñ€Ð¸Ð²Ð°Ñ Ñ Ð½Ð¸Ð¼Ð¸ в реальной жизни, ÐЕ по телефону!</string> + <string name="status_idle_detail_info">Приложение работает в режиме Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ загрузки. Меры защиты и Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð½Ðµ включены. ПожалуйÑта, включите определение атак!</string> + <string name="status_ok_detail_info">Ðикакие угрозы не обнаружены. Ваша Ñеть непрерывно проверÑетÑÑ Ð½Ð° оÑнове включенных наÑтроек обнаружениÑ.</string> + <string name="status_medium_detail_info">ÐебезопаÑÐ½Ð°Ñ Ð·Ð¾Ð½Ð° обÑлуживаниÑ: в данном районе, по крайней мере, 1 Ð½Ð¾Ð²Ð°Ñ Ð¸Ð»Ð¸ неизвеÑÑ‚Ð½Ð°Ñ Ð‘Ð¡, или Ñ Ð¸Ñпользованием небезопаÑного (Ñломанного) алгоритма шифрованиÑ, Ñлабее, чем A5/3. Любые телефонные звонки/СМС, Ñделанные в Ñтой зоне, могут быть перехвачены и запиÑаны. БыÑтро покиньте Ñто меÑто.</string> + <string name="status_high_detail_info">Обнаружены враждебные дейÑтвиÑ: IMSI-Перехватчик (IMSIC) или поддельные БС (FBTS) активно отÑлеживают пользователей. Ð’ данной зоне ведетÑÑ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾Ðµ Ñканирование. Ð’Ñ‹ должны избегать Ñтого меÑта любыми ÑпоÑобами, оÑобенно еÑли еÑть политичеÑÐºÐ°Ñ Ð½ÐµÑтабильноÑть. Выньте батарею и SIM-карту!</string> + <string name="status_danger_detail_info">Обнаружены враждебные отÑлеживаниÑ: FBTS или IMSIC активно отÑлеживают Ð’Ð°Ñ Ð¸ препÑÑ‚Ñтвуют подключению Вашего телефона к Вашей обычной зашифрованной мобильной Ñети. ЕÑли Ð’Ñ‹ находитеÑÑŒ в опаÑноÑти, Ñломайте Ваш телефон и SIM-карту, а затем Ñообщите о его краже.</string> + <string name="status_skull_detail_info">Враждебные манипулÑции: кто-то пытаетÑÑ ÑƒÐ´Ð°Ð»ÐµÐ½Ð½Ð¾ управлÑть Вашим телефоном! Уничтожьте (или продайте) Ñвой телефон и возьмите новый подальше. Ðе приноÑите Ñвой Ñтарый телефон в новое меÑто! ИÑпользуйте новую анонимную SIM-карту Ñ Ð¿Ð¾Ð´Ð´ÐµÐ»ÑŒÐ½Ð¾Ð¹ личноÑтью, зарегиÑтрированной через браузер Tor. Измените Ваше поведение при вызовах и предупредите Ñвоих друзей о Ñлежке в разговоре Ñ Ð½Ð¸Ð¼Ð¸ в реальной жизни, но ÐЕ по телефону!</string> <string name="open_cell_id_button_cancel">Отмена</string> <string name="open_cell_id_button_ok">OK</string> @@ -211,10 +204,10 @@ <string name="notification_vibrate_danger">ОпаÑноÑть</string> <!-- UI Icon Preferences --> - <string name="ui_icon_flat">Flat</string> - <string name="ui_icon_sense">Sense</string> - <string name="ui_icon_white">Белый</string> - <string name="map_type_terrain">ЗемлÑ</string> + <string name="ui_icon_flat">ПлоÑкаÑ</string> + <string name="ui_icon_sense">ÐаÑтроение</string> + <string name="ui_icon_white">БелаÑ</string> + <string name="map_type_terrain">МеÑтноÑть</string> <string name="map_type_normal">Обычный</string> <string name="pref_refresh_manual">Вручную</string> <string name="pref_refresh_automatic">Ðвто</string> @@ -250,7 +243,7 @@ <string name="alert_threat_detected">ТРЕВОГÐ: обнаружены угрозы!</string> <string name="alert_femtocell_connection_detected">ТРЕВОГÐ: обнаружено Ñоединение Ñ FemtoCell!</string> <string name="alert_silent_sms_detected">ТРЕВОГÐ: обнаружена беÑÑˆÑƒÐ¼Ð½Ð°Ñ Ð¡ÐœÐ¡!</string> - <string name="alert_mwi_detected">ТРЕВОГÐ: обнаружен индикатор Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ÑообщениÑ!</string> + <string name="alert_mwi_detected">ТРЕВОГÐ: обнаружен индикатор ожидающих Ñообщений!</string> <string name="alert_silent_wap_sms_detected">ТРЕВОГÐ: обнаружена WAP Push СМС!</string> <string name="femtocell_only_on_cdma_devices">AIMSICD может определÑть Ñоединение Ñ FemtoCell только на CDMA уÑтройÑтвах.</string> <string name="service_state_changed">Ð¡Ñ‚Ð°Ñ‚ÑƒÑ ÑервиÑа изменен!</string> @@ -316,7 +309,7 @@ <!-- Section Main--> - <string name="help_main_neighboring_cells"></string> + <string name="help_main_neighboring_cells">Показать ÑоÑедние Ñоты.</string> <string name="help_main_phone_sim_details">Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð²Ð°Ð¹Ð´ÐµÑ€Ð° Ñети SIM, IMEI, TMSI.</string> <string name="help_main_acd">Отображение детального ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ подключенной Ñоты Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ (при их наличии) из OpenCellID и отметка различий.</string> <string name="help_main_database_viewer">ПроÑмотр различных имеющихÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ† баз данных.</string> @@ -344,7 +337,7 @@ <string name="imported_ocid_data">Импортированные данные OpenCellID</string> <string name="default_mmc_locations">МеÑÑ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ MCC по умолчанию</string> <string name="silent_sms">БеÑÑˆÑƒÐ¼Ð½Ð°Ñ Ð¡ÐœÐ¡</string> - <string name="eventlog">EventLog</string> + <string name="eventlog">Журнал</string> <string name="measured_signal_strengths">Ð˜Ð·Ð¼ÐµÑ€ÐµÐ½Ð½Ð°Ñ Ð¼Ð¾Ñ‰Ð½Ð¾Ñть Ñигнала</string> <string name="at_command_response_looking">*** ПоиÑк serial device AT…\n</string> @@ -410,4 +403,8 @@ </string-array> <string name="unknown">ÐеизвеÑтный</string> -</resources> +<string name="database_settings">База данных</string> + <string name="download_timed_out">Превышен таймаут запроÑа к OpenCellID API. Попробуйте позже?</string> + <string name="n_a">ÐедоÑтупно</string> + <string name="cell_doesnt_provide_any_neighbors">BTS не предоÑтавлÑет ÑоÑедних Ñот!</string> + </resources> diff --git a/AIMSICD/src/main/res/values-sv/translatable_strings.xml b/AIMSICD/src/main/res/values-sv/translatable_strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..364d1c7206c41b60accc235e9c42d8375d60a29e --- /dev/null +++ b/AIMSICD/src/main/res/values-sv/translatable_strings.xml @@ -0,0 +1,63 @@ +<?xml version='1.0' encoding='UTF-8'?> +<resources><string name="device_info">Telefon/SIM-detaljer</string> + <string name="db_viewer">Visare för databas</string> + <string name="quit">Avsluta</string> + <string name="text_ok">OK</string> + <string name="text_cancel">Avbryt</string> + <string name="text_agree">Jag godkänner</string> + <string name="text_disagree">Jag godkänner inte</string> + + <string name="disclaimer_title">ANSVARSFRISKRIVNING</string> + <string name="clear_database">Rensa/Ã…terställ databas</string> + <string name="clear_database_question">Alla data kommer att raderas.\nÄr du säker?</string> + <string name="preferences">Egenskaper</string> + <string name="press_once_again_to_exit">Tryck igen för att avsluta.</string> + <string name="debugging">Felsökning</string> + <string name="no_network_connection_title">Ingen internetanslutning</string> + <string name="get_opencellid">Ladda ner BTS-data</string> + + <string name="device_info_title">Information om enheten</string> + <string name="sim_info_title">Information om SIM</string> + <string name="network_info">Information om nätverket</string> + <string name="tracking">Söker</string> + <string name="map_view">Antennkarta</string> + <string name="cell_info_title">Enheter nära dig</string> + <string name="neighboring_cells_title">Enheter nära dig</string> + <string name="ciphering_indicator_title">Kodindikator</string> + <string name="neighboring_cells_num_title">Total:</string> + <string name="sim_country">Land:</string> + <string name="sim_operator_id">Användar-ID:</string> + <string name="sim_operator_name">Användarnamn:</string> + <string name="sim_imsi">IMSI:</string> + <string name="sim_serial">Serienummer:</string> + <string name="device_type">Telefonmodell:</string> + <string name="device_imei">IMEI:</string> + <string name="device_version">RIL Version:</string> + <string name="network_name">Leverantörsnamn:</string> + <string name="network_code">Leverantörskod:</string> + <string name="network_type">Typ:</string> + <string name="network_lac">LAC:</string> + <string name="network_cellid">CID:</string> + <string name="data_activity">Dataaktivitet:</string> + <string name="data_status">Datastatus:</string> + <string name="network_roaming">Roaming:</string> + <string name="button_refresh">Uppdatera</string> + <string name="drawer_open">Öppna navigationsmeny</string> + <string name="drawer_close">Stäng navigationsmeny</string> + <string name="app_version">Version: %s</string> + <string name="about_github">AIMSICD pÃ¥ GitHub</string> + <string name="about_wiki">DOKUMENTATION</string> + <string name="about_contribute">BIDRA</string> + <string name="about_disclaimer">ANSVARSFRISKRIVNING</string> + <string name="about_releases">UTGÃ…VOR</string> + <string name="about_license">TILLSTÃ…ND</string> + <string name="status_idle_about_desc">Inaktiv / Laddar.</string> + <string name="status_ok_about_desc">Allt OK.</string> + <string name="status_danger_about_desc">Du blir spÃ¥rad!</string> + <string name="about_desc_icon_title">Tryck pÃ¥ statusikonen nedan för detaljerad information:</string> + + <string name="network_netid">Nätverks-ID:</string> + <string name="network_sysid">System-ID:</string> + <string name="network_baseid">Basstations-ID:</string> + + </resources> diff --git a/AIMSICD/src/main/res/values-uk/translatable_strings.xml b/AIMSICD/src/main/res/values-uk/translatable_strings.xml index fc6862e08441bab840451c161dfa1bf19a7b1482..429308370503210f066c435a50197a79c880a8fc 100644 --- a/AIMSICD/src/main/res/values-uk/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-uk/translatable_strings.xml @@ -10,8 +10,8 @@ <string name="text_disagree">Я не погоджуюÑÑŒ</string> <string name="disclaimer_title">ВІДМОВРВІД ВІДПОВІДÐЛЬÐОСТІ</string> - <string name="toggle_attack_detection">Перемикач виÑÐ²Ð»ÐµÐ½Ð½Ñ Ð°Ñ‚Ð°ÐºÐ¸</string> - <string name="toggle_cell_tracking">Перемикач ÑÐ»Ñ–Ð´ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° Ñтільниками</string> + <string name="toggle_attack_detection">ВиÑÐ²Ð»ÐµÐ½Ð½Ñ Ð°Ñ‚Ð°ÐºÐ¸</string> + <string name="toggle_cell_tracking">Ð¡Ð»Ñ–Ð´ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° Ñтільниками</string> <string name="clear_database">ОчиÑтити/Ñкинути БД</string> <string name="clear_database_question">Ð’ÑÑ– дані будуть Ñтерті.\nПродовжити?</string> <string name="preferences">Параметри</string> @@ -24,7 +24,7 @@ <string name="device_info_title">Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ приÑтрій</string> <string name="sim_info_title">Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ SIM</string> <string name="network_info">Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ мережу</string> - <string name="cell_info_title">Поточний рівень загрози</string> + <string name="cell_info_title">СуÑідні Ñтільниці</string> <string name="ciphering_indicator_title">Індикатор шифруваннÑ</string> <string name="sim_country">Країна:</string> <string name="sim_operator_id">ID оператора:</string> @@ -97,7 +97,8 @@ <string name="btn_stop_logs">Зупинити</string> <string name="btn_start_logs">Почати</string> - <string name="disclaimer">"При викориÑтанні AIMSICD ви розумієте та погоджуєтеÑÑŒ, що AIMSICD Ñ” екÑпериментальним та інформаційним Android додатком (далі ПО), Ñке може Ñ– не виÑвити ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ñ‚Ð° відÑÐ»Ñ–Ð´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° різними причинами. Ви також розумієте, що додаток можна обійти чи ввеÑти в оману за допомогою інших заÑобів, Ñкі ще не зрозумілі розробникам. Таким чином, ви також погоджуєтеÑÑŒ Ñ– розумієте, що розробники та компанії, Ñкі пов\'Ñзані з даним ПЗ ні в Ñкому разі не можуть неÑти відповідальніÑть за результати роботи ПЗ чи результати, Ñкі залежать від викориÑÑ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¾Ð³Ð¾ ПЗ, а також не неÑуть ніÑкої відповідальноÑті за інші збитки (включаючи, без обмежень, у виглÑді недоотриманого прибутку, Ð¿Ñ€Ð¸Ð·ÑƒÐ¿Ð¸Ð½ÐµÐ½Ð½Ñ Ð´Ñ–Ð»Ð¾Ð²Ð¾Ñ— активноÑті, втрату ділової інформації та інші конкретні збитки), Ñкі можуть ÑтатиÑÑ Ñ‡ÐµÑ€ÐµÐ· викориÑÑ‚Ð°Ð½Ð½Ñ Ñ‡Ð¸ неможливіÑть викориÑÑ‚Ð°Ð½Ð½Ñ ÐŸÐ—, також в тому випадку, Ñкщо розробники та компанії, пов\'Ñзані з цим ПЗ, були попереджені про можливіÑть такого збитку. СТÐРРОЗРОБКИ: ALPHA! "</string> + <string name="disclaimer">"При викориÑтанні AIMSICD ви розумієте та погоджуєтеÑÑŒ, що AIMSICD Ñ” екÑпериментальним та інформаційним Android додатком (далі ПО), Ñке може Ñ– не виÑвити ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ñ‚Ð° відÑÐ»Ñ–Ð´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° різними причинами. Ви також розумієте, що додаток можна обійти чи ввеÑти в оману за допомогою інших заÑобів, Ñкі ще не зрозумілі розробникам. Таким чином, ви також погоджуєтеÑÑŒ Ñ– розумієте, що розробники та компанії, Ñкі пов\'Ñзані з даним ПЗ ні в Ñкому разі не можуть неÑти відповідальніÑть за результати роботи ПЗ чи результати, Ñкі залежать від викориÑÑ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¾Ð³Ð¾ ПЗ, а також не неÑуть ніÑкої відповідальноÑті за інші збитки (включаючи, без обмежень, у виглÑді недоотриманого прибутку, Ð¿Ñ€Ð¸Ð·ÑƒÐ¿Ð¸Ð½ÐµÐ½Ð½Ñ Ð´Ñ–Ð»Ð¾Ð²Ð¾Ñ— активноÑті, втрату ділової інформації та інші конкретні збитки), Ñкі можуть ÑтатиÑÑ Ñ‡ÐµÑ€ÐµÐ· викориÑÑ‚Ð°Ð½Ð½Ñ Ñ‡Ð¸ неможливіÑть викориÑÑ‚Ð°Ð½Ð½Ñ ÐŸÐ—, також в тому випадку, Ñкщо розробники та компанії, пов\'Ñзані з цим ПЗ, були попереджені про можливіÑть такого збитку. СТÐРРОЗРОБКИ: ALPHA! + "</string> <string name="no_network_connection_message">Ðе вдаєтьÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ OpenCellID дані без інтернету, будь лаÑка, з\'єднайтеÑÑ Ñ–Ð· мережею Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ñ– даних!</string> @@ -186,7 +187,7 @@ <string name="opencellid_data_successfully_received_markers_updated">OpenCellID дані уÑпішно отримано.\nМаркери карти оновлено.</string> <string name="status">Стан:</string> <string name="serial_device_title">Поточний поÑлідовний приÑтрій:</string> - <string name="status_idle_detail_info">Додаток працює в режимі Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡Ð¸ завантаженнÑ. Заходи захиÑту та моніторингу вимкнено. Будь лаÑка, змініть режим виÑÐ²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ñ€Ð¾Ð·!</string> + <string name="status_idle_detail_info">Додаток працює в режимі Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡Ð¸ завантаженнÑ. Заходи захиÑту та моніторингу вимкнено. Будь лаÑка, активуйте режим виÑÐ²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ñ€Ð¾Ð·!</string> <string name="status_ok_detail_info">Жодних загроз не виÑвлено. Ваша мережа поÑтійно перевірÑєтьÑÑ Ð½Ð° оÑнові параметрів захиÑту , Ñкі ви зазначили в меню та налаштуваннÑÑ….</string> <string name="ui_icon_white">Білі</string> <string name="map_type_terrain">Земний</string> @@ -315,7 +316,7 @@ <string name="status_high_about_desc">Ðктивне відÑÐ»Ñ–Ð´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñд з вами!</string> <string name="pref_enable_gps_title">ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ GPS</string> <string name="pref_enable_gps_summary">Увімкнути GPS Ð´Ð»Ñ Ð²Ñ–Ð´ÑÐ»Ñ–Ð´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ñтільника</string> - <string name="help_main_neighboring_cells"></string> + <string name="help_main_neighboring_cells">Показати ÑуÑідні Ñтільниці.</string> <string name="help_main_database_viewer">ПереглÑд таблиць бази даних.</string> <string name="help_main_antenna_map_view">Карта з кольоровими позначками ÑуÑідніх антен.</string> <string name="help_main_at_command_interface">Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑ” надÑилати AT команди до процеÑора (Потребує прав ROOT).</string> @@ -326,4 +327,13 @@ <string name="database_settings">База даних</string> <string name="download_timed_out">Вийшов Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ OpenCellID API. Спробувати пізніше ще раз?</string> + <string name="cell_doesnt_provide_any_neighbors">BTS не надає ÑуÑідніх Ñтільниць!</string> + <string name="import_cell_towers">Імпорт даних по вишках</string> + + <string name="imporing_celltowers_data">Імпорт даних по вишках... +Це займе трохи чаÑу.</string> + <string name="celltowers_data_successfully_imported">Дані уÑпішно імпортовано.</string> + <string name="error_importing_celltowers_data">Помилка Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ….</string> + <string name="help_app_import_cell_towers">Ð†Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ð°Ð·Ð¸ даних по вишках.</string> + <string name="needs_location">Потребує позиціюваннÑ</string> </resources> diff --git a/AIMSICD/src/main/res/values-vi/translatable_strings.xml b/AIMSICD/src/main/res/values-vi/translatable_strings.xml index 39781903ad10846a2bb12a3defcf177eec462850..7d448f7c81bb7ff61c9fc1a257b6057809a60597 100644 --- a/AIMSICD/src/main/res/values-vi/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-vi/translatable_strings.xml @@ -10,8 +10,8 @@ <string name="text_disagree">Tôi không đồng ý</string> <string name="disclaimer_title">MIỄN TRỪ TRÃCH NHIỆM</string> - <string name="toggle_attack_detection">Báºt tắt phát hiện tấn công</string> - <string name="toggle_cell_tracking">Báºt tắt theo dõi máy di động</string> + <string name="toggle_attack_detection">Phát hiện sá»± tấn công</string> + <string name="toggle_cell_tracking">Theo dõi sóng di động</string> <string name="clear_database">Xoá/cà i lại CSDL</string> <string name="clear_database_question">Tất cả dữ liệu sẽ bị xóa.\nBạn có chắc không?</string> <string name="preferences">Tuỳ chỉnh</string> @@ -26,10 +26,10 @@ <string name="device_info_title">Thông tin thiết bị</string> <string name="sim_info_title">Thông tin SIM</string> <string name="network_info">Thông tin mạng</string> - <string name="cell_info_title">Mức độ Ä‘e dá»a hiện thá»i</string> + <string name="cell_info_title">Các trạm sóng lân cáºn</string> <string name="neighboring_cells_title">Các máy di động lân cáºn</string> <string name="ciphering_indicator_title">Bá»™ chỉ báo viết mã</string> - <string name="disclaimer">"Khi sá» dụng AIMSICD, bạn hiểu và chấp nháºn rằng AIMSICD là má»™t ứng dụng Android thá»±c nghiệm cung cấp nhiá»u thông tin hữu Ãch và nó có thể thất bại trong việc phát hiện sá»± giám sát và theo dõi vì nhiá»u lý do khác nhau. Bạn cÅ©ng hiểu rằng nó có thể bị phá rối hoặc huá»· hoại bởi các công cụ khác mà nhà phát triển chưa hiểu rõ. Vì váºy, bạn cÅ©ng chấp nháºn và hiểu rằng các công ty và nhà phát triển liên quan đến sản phẩm miá»…n phà nà y, trong má»i trưá»ng hợp, sẽ không phải chịu trách nhiệm cho bất kỳ háºu quả nà o do việc sá» dụng phần má»m nà y gây ra. "</string> + <string name="disclaimer">"Khi sá» dụng AIMSICD, bạn hiểu và chấp nháºn rằng AIMSICD là má»™t ứng dụng Android thá»±c nghiệm cung cấp nhiá»u thông tin hữu Ãch và nó có thể thất bại trong việc phát hiện sá»± giám sát và theo dõi vì nhiá»u lý do khác nhau. Bạn cÅ©ng hiểu rằng nó có thể bị phá rối hoặc huá»· hoại bởi các công cụ khác mà nhà phát triển chưa hiểu rõ. Vì váºy, bạn cÅ©ng chấp nháºn và hiểu rằng các công ty và nhà phát triển liên quan đến sản phẩm miá»…n phà nà y, trong má»i trưá»ng hợp, sẽ không phải chịu trách nhiệm cho bất kỳ háºu quả nà o do việc sá» dụng phần má»m nà y gây ra. TRẠNG THÃI: ALPHA! "</string> <string name="neighboring_cells_num_title">Tổng cá»™ng:</string> <string name="sim_country">Quốc gia:</string> @@ -59,7 +59,7 @@ <string name="about_aimsicd">Vá» AIMSICD</string> <string name="app_version">Phiên bản: %s</string> <string name="buildnumber">Số bản dá»±ng: %s</string> - <string name="git_sha">Git SHA-Hash: %s</string> + <string name="git_sha">Hà m băm SHA từ Git: %s</string> <string name="aimsicd_about_info3">Dá»± án Android nhằm phát hiện và tránh các trạm cÆ¡ sở giả (IMSI-Catchers) trong hệ thống mạng GSM/UMTS.</string> <string name="about_github">AIMSICD trên GitHub</string> <string name="about_wiki">TÀI LIỆU</string> @@ -155,7 +155,7 @@ <string name="btn_start_logs">Bắt đầu</string> <string name="title_activity_about_pop_up">GIẢI THÃCH CHI TIẾT</string> - <string name="status_idle_detail_info">Ứng dụng Ä‘ang nhà n rá»—i hoặc Ä‘ang tải. Chưa báºt biện pháp phát hiện và bảo vệ nà o. Xin báºt tÃnh năng phát hiện tấn công!</string> + <string name="status_idle_detail_info">Ứng dụng Ä‘ang nghỉ hoặc Ä‘ang tải. Chưa kÃch hoạt cÆ¡ chế phát hiện và bảo vệ nà o. Xin báºt cÆ¡ chế phát hiện tấn công!</string> <string name="status_ok_detail_info">Không phát hiện mối Ä‘e doạ nà o. Mạng cá»§a bạn Ä‘ang được kiểm tra liên tục dá»±a trên các thiết láºp phát hiện đã báºt.</string> <string name="status_medium_detail_info">Khu vá»±c dịch vụ không bảo máºt: Có Ãt nhất 1 BTS má»›i hoặc không xác định Ä‘ang hoạt động trong vùng lân cáºn nà y, hoặc Ä‘ang sá» dụng thuáºt toán mã hoá kém bảo máºt (đã bị phá) thấp hÆ¡n A5/3. Bất kỳ cuá»™c gá»i/SMS nà o thá»±c hiện trong khu vá»±c nà y có thể bị chặn và ghi lại. Hãy rá»i khá»i đây ngay.</string> <string name="status_high_detail_info">Äã phát hiện các hoạt động dịch vụ nguy hiểm: Má»™t IMSI-Catcher (IMSIC) hoặc BTS giả (FBTS) Ä‘ang theo dõi ngưá»i dùng. Có hoạt động quét diá»…n ra trong khu vá»±c. Bạn nên tránh xa nÆ¡i nà y, đặc biệt là khi tại đây có bất ổn chÃnh trị. Hãy tháo pin hoặc tắt Ä‘iện thoại!</string> @@ -174,7 +174,7 @@ <string name="notification_vibrate_danger">Nguy hiểm</string> <string name="ui_icon_flat">Phẳng</string> - <string name="ui_icon_sense">Sense</string> + <string name="ui_icon_sense">\"Sense\"</string> <string name="ui_icon_white">Trắng</string> <string name="map_type_terrain">Äịa hình</string> <string name="map_type_normal">Thông thưá»ng</string> @@ -273,7 +273,7 @@ <string name="typewap_data">Äã phát hiện tin nhắn SMS push WAP!\nChi tiết: Xem trình Ä‘á»c CSDL.</string> - <string name="help_main_neighboring_cells"></string> + <string name="help_main_neighboring_cells">Hiện các trạm sóng lân cáºn.</string> <string name="help_main_phone_sim_details">Chi tiết nhà cung cấp SIM mạng, IMEI, TMSI.</string> <string name="help_main_acd">Hiển thị so sánh chi tiết cá»§a máy di động Ä‘ang kết nối vá»›i các dữ liệu (nếu có) tìm thấy trong OpenCellID và chỉ rõ những khác biệt.</string> <string name="help_main_database_viewer">Xem các bảng CSDL khác nhau hiện có.</string> @@ -321,9 +321,10 @@ <string name="the_string_was_added_to_db">Äã thêm chuá»—i và o CSDL</string> <string name="failed_to_add_the_string_to_db">Thêm chuá»—i và o CSDL thất bại</string> - <string name="n_a">N/A</string> + <string name="n_a">Không có</string> <string name="unknown">Không xác định</string> <string name="database_settings">CÆ¡ sở dữ liệu</string> <string name="download_timed_out">Yêu cầu OpenCellID API đã quá thá»i gian chá». Thá» lại sau?</string> + <string name="cell_doesnt_provide_any_neighbors">BTS không cung cấp thông tin các trạm sóng lân cáºn!</string> </resources> diff --git a/AIMSICD/src/main/res/values-zh-rCN/translatable_strings.xml b/AIMSICD/src/main/res/values-zh-rCN/translatable_strings.xml index 2e8edc30c2ad98aa4ef5e63c0ace7807209d99f4..cdbc28d93aabe216393a5a2ccaafefb838271a6f 100644 --- a/AIMSICD/src/main/res/values-zh-rCN/translatable_strings.xml +++ b/AIMSICD/src/main/res/values-zh-rCN/translatable_strings.xml @@ -9,8 +9,8 @@ <string name="text_disagree">我拒ç»</string> <string name="disclaimer_title">å…责声明</string> - <string name="toggle_attack_detection">åˆ‡æ¢æ”»å‡»æ£€æµ‹</string> - <string name="toggle_cell_tracking">切æ¢èœ‚çªè·Ÿè¸ª</string> + <string name="toggle_attack_detection">攻击检测</string> + <string name="toggle_cell_tracking">蜂çªè·Ÿè¸ª</string> <string name="clear_database">清除/é‡ç½®æ•°æ®åº“</string> <string name="clear_database_question">所有数æ®å°†è¢«åˆ 除。\n您确定å—?</string> <string name="preferences">首选项</string> @@ -25,7 +25,7 @@ <string name="sim_info_title">SIMå¡ä¿¡æ¯</string> <string name="network_info">网络信æ¯</string> - <string name="cell_info_title">当å‰å¨èƒçº§åˆ«</string> + <string name="cell_info_title">邻居基站</string> <string name="sim_operator_name">è¿è¥å•†åç§°:</string> <string name="sim_imsi">IMSI:</string> <string name="sim_serial">åºåˆ—å·:</string> @@ -60,7 +60,7 @@ <string name="network_baseid">基站 ID:</string> <string name="location_error_title">ä½ç½®æœåС已ç¦ç”¨</string> - <string name="status_skull_about_desc">è·‘ï¼æ‰‹æœºå·²è¢«æ“纵ï¼</string> + <string name="status_skull_about_desc">å¿«è·‘ï¼ä½ 的手机已被控制ï¼</string> <string name="about_desc_icon_title">按下é¢çš„状æ€å›¾æ ‡äº†è§£è¯¦ç»†ä¿¡æ¯ï¼š</string> <string name="location_error_message">您ä¸èƒ½åœ¨æœªå¯ç”¨ä½ç½®æœåŠ¡æ—¶è·Ÿè¸ª GPS æ•°æ®ã€‚是å¦ç«‹å³å¯ç”¨ï¼Ÿ</string> @@ -184,7 +184,7 @@ <string name="only_one_key_per_day">æ¯24å°æ—¶åªèƒ½è¯·æ±‚一个新的 API 密钥ï¼\n请ç¨åŽå†è¯•。</string> <string name="cell_id_doesnt_exist_in_db">èœ‚çª ID ä¸åœ¨ OpenCellID æ•°æ®åº“ä¸ï¼</string> <string name="hostile_service_area_changing_lac_detected">æ•Œæ„æœåŠ¡åŒºï¼šæ£€æµ‹åˆ°å˜æ›´ LACï¼</string> - <string name="femtocell_only_on_cdma_devices">AIMSICD åªèƒ½æ£€æµ‹åœ¨ CDMA 设备上的家åºåŸºç«™è¿žæŽ¥ã€‚</string> + <string name="femtocell_only_on_cdma_devices">AIMSICD åªèƒ½æ£€æµ‹ç”¨äºŽ CDMA 设备上的家åºåŸºç«™è¿žæŽ¥ã€‚</string> <string name="service_state_changed">æœåŠ¡çŠ¶æ€å·²å˜æ›´ï¼</string> <string name="stopped_tracking_femtocell">ï¼šå·²åœæ¢è·Ÿè¸ªå®¶åºåŸºç«™è¿žæŽ¥ã€‚</string> <string name="alert_femtocell_tracking_detected">è¦å‘Šï¼šæ£€æµ‹åˆ°å®¶åºåŸºç«™è·Ÿè¸ªï¼</string> @@ -199,7 +199,7 @@ <string name="drawer_close">å…³é—导航抽屉</string> <string name="upload_bts">ä¸Šä¼ BTS æ•°æ®</string> - <string name="map_view">天线地图查看器</string> + <string name="map_view">基站地图查看器</string> <string name="about_aimsicd">关于 AIMSICD</string> <string name="app_version">版本: %s</string> <string name="buildnumber">编译编å·: %s</string> @@ -221,7 +221,7 @@ <string name="status_ok">良好</string> <string name="status_high">较高</string> <string name="status_danger">å±é™©</string> - <string name="status_skull">è·‘ï¼</string> + <string name="status_skull">å¿«è·‘ï¼</string> <string name="adv_user_info">æ¤èœå•ä»…é¢å‘高级用户ï¼\n\n请ä¸è¦æ’å…¥éšæœºå—符,那会导致检测失控。\n\nè¦æ·»åŠ ä¸€ä¸ªå—符,从下拉èœå•ä¸é€‰æ‹©ä¸€ä¸ª SMS 类型,输入您的检测å—ç¬¦ä¸²ï¼Œç„¶åŽæŒ‰æ’入。\n\nè¦åˆ 除数æ®åº“ä¸çš„内容,请长按列表。</string> @@ -245,7 +245,7 @@ <string name="typemwi_header">检测到 MWI</string> <string name="typemwi_data">检测到消æ¯ç‰å¾…指示器ï¼\n详细信æ¯ï¼šè¯¦è§æ•°æ®åº“查看器。</string> <string name="help_main_phone_sim_details">SIMå¡ç½‘络æä¾›å•†çš„详细信æ¯ï¼ŒIMEI,TMSI。</string> - <string name="help_main_neighboring_cells"></string> + <string name="help_main_neighboring_cells">显示邻居基站。</string> <string name="typewap_header">检测到 WAP 推é€</string> <string name="typewap_data">检测到 WAP 推é€çŸä¿¡ï¼\n详细信æ¯ï¼šè¯¦è§æ•°æ®åº“查看器。</string> @@ -301,7 +301,7 @@ <string name="mcc_label">"MCC: "</string> <string name="mnc_label">"MNC: "</string> <string name="pc_label">"PC: "</string> - <string name="status_idle_detail_info">应用目å‰é—²ç½®æˆ–æ£åœ¨åŠ è½½ã€‚æ²¡æœ‰ä¿æŠ¤å’Œæ£€æµ‹æŽªæ–½å·²å¯ç”¨ã€‚è¯·åˆ‡æ¢æ”»å‡»æ£€æµ‹æ–¹å¼ï¼</string> + <string name="status_idle_detail_info">应用目å‰é—²ç½®æˆ–æ£åœ¨åŠ è½½ã€‚æ²¡æœ‰ä¿æŠ¤å’Œæ£€æµ‹æŽªæ–½å·²å¯ç”¨ã€‚请å¯ç”¨æ”»å‡»æ£€æµ‹ï¼</string> <string name="status_ok_detail_info">没有检测到å¨èƒã€‚您的网络将æŒç»åŸºäºŽå·²å¯ç”¨çš„æ£€æµ‹è®¾ç½®è¢«æ£€æŸ¥ã€‚</string> <string name="aimsicd_about_info3">基于 Android 的项目,检测和é¿å… GSM/UMTS 网络ä¸çš„伪基站 (IMSI 窃å–者)。</string> <string name="help_main_at_command_interface">å…许å‘é€ AT 命令到基带处ç†å™¨çš„ç•Œé¢ (éœ€è¦ ROOT æƒé™)。</string> @@ -317,7 +317,8 @@ <string name="unknown_error_initialising_at_command_injector">å°è¯•åˆå§‹åŒ– AT 命令注入器时å‘生未知错误。\n请检查您的 logcat 日志了解相关错误,并将它å‘é€åˆ°æˆ‘们的 Github。</string> <string name="unable_to_detect_busybox">æ— æ³•åœ¨æ‚¨çš„è®¾å¤‡ä¸Šæ£€æµ‹åˆ° Busybox。\nAT å‘½ä»¤æ³¨å…¥å™¨éœ€è¦ Busybox 组件æ‰èƒ½æ£å¸¸è¿è¡Œã€‚\n请检查您的设备是å¦å·²å®‰è£… Busybox,然åŽé‡è¯•。</string> <string name="unable_to_acquire_root_access">æ— æ³•åœ¨æ‚¨çš„è®¾å¤‡ä¸Šå–å¾— ROOT æƒé™ã€‚\nAT å‘½ä»¤æ³¨å…¥å™¨éœ€è¦ ROOT 终端访问æƒé™ã€‚\n请检查您的设备是å¦å·² root,然åŽé‡è¯•。</string> - <string name="disclaimer">"使用 AIMSICD å³è¡¨ç¤ºæ‚¨å·²ç†è§£å¹¶åŒæ„ AIMSICD 是一款实验性ã€çŸ¥è¯†æ€§çš„ Android 应用,它å¯èƒ½å› 多ç§åŽŸå› è€Œæ— æ³•æ£€æµ‹åˆ°ç›‘è§†å’Œè·Ÿè¸ªã€‚æ‚¨ä¹Ÿç†è§£ï¼Œå®ƒå¯èƒ½è¢«å…¶ä»–æ–¹å¼ç»•è¿‡æˆ–éª—è¿‡ï¼Œè€Œè¿™ç§æ–¹å¼å¯èƒ½å¼€å‘者并ä¸çŸ¥æ™“ã€‚å› æ¤ï¼Œæ‚¨å¿…é¡»åŒæ„å’Œç†è§£ï¼Œä¸Žæ¤å…费产å“相关的开å‘者和公å¸ï¼Œä¸ä¼šæ‰¿æ‹…使用æ¤åº”ç”¨ç¨‹åºæ‰€å¸¦æ¥æˆ–å¯¼è‡´çš„ä»»ä½•åŽæžœã€‚å¼€å‘状æ€ï¼šAlphaï¼ˆå†…éƒ¨æµ‹è¯•ï¼‰ï¼ "</string> + <string name="disclaimer">"使用 AIMSICD å³è¡¨ç¤ºæ‚¨å·²ç†è§£å¹¶åŒæ„ AIMSICD 是一款实验性ã€çŸ¥è¯†æ€§çš„ Android 应用,它å¯èƒ½å› 多ç§åŽŸå› è€Œæ— æ³•æ£€æµ‹åˆ°ç›‘è§†å’Œè·Ÿè¸ªã€‚æ‚¨ä¹Ÿç†è§£ï¼Œå®ƒå¯èƒ½è¢«å…¶ä»–æ–¹å¼ç»•è¿‡æˆ–éª—è¿‡ï¼Œè€Œè¿™ç§æ–¹å¼å¯èƒ½å¼€å‘者并ä¸çŸ¥æ™“ã€‚å› æ¤ï¼Œæ‚¨å¿…é¡»åŒæ„å’Œç†è§£ï¼Œä¸Žæ¤è‡ªç”±äº§å“相关的开å‘者和公å¸ï¼Œä¸ä¼šæ‰¿æ‹…使用æ¤åº”ç”¨ç¨‹åºæ‰€å¸¦æ¥æˆ–å¯¼è‡´çš„ä»»ä½•åŽæžœã€‚å¼€å‘状æ€ï¼šAlphaï¼ˆå†…éƒ¨æµ‹è¯•ï¼‰ï¼ + "</string> <string name="message_request_api_key">"按确定以请求一个 OpenCellID.org çš„ API 密钥。这将å…许您下载他们的数æ®ï¼Œå¹¶åœ¨åœ°å›¾ä¸ŠæŸ¥çœ‹ã€‚它也将å…è®¸æ‚¨ä¸Šä¼ èœ‚çªæ•°æ®ã€‚注æ„,如果您在20å¤©å†…æ²¡æœ‰ä¸Šä¼ èœ‚çªæ•°æ®ï¼Œæ‚¨çš„ API 密钥å¯èƒ½è¢«å†»ç»“。"</string> <string name="status_medium_detail_info">ä¸å®‰å…¨çš„æœåŠ¡åŒºï¼šè‡³å°‘ä¸€ä¸ªæ–°çš„æˆ–æœªçŸ¥çš„ BTS 在附近è¿è¡Œï¼Œæˆ–者在使用一个ä¸å®‰å…¨ã€æ˜“è¢«ç ´è§£çš„å¼±äºŽ A5/3 çš„åŠ å¯†ç®—æ³•ã€‚ä»»ä½•åœ¨æ¤æœåŠ¡åŒºå†…è¿›è¡Œçš„æ‰‹æœºå‘¼å«/çŸä¿¡éƒ½å¯èƒ½è¢«æˆªèŽ·å’Œè®°å½•ã€‚èµ¶ç´§ç¦»å¼€è¿™ä¸ªåœ°æ–¹å§ã€‚</string> @@ -325,4 +326,13 @@ <string name="status_danger_detail_info">检测到敌æ„跟踪:一个 FBTS 或 IMSIC æ£åœ¨ä¸»åŠ¨è·Ÿè¸ªâ€œæ‚¨â€ï¼Œå¹¶ä¸”é˜»æ¢æ‚¨çš„æ‰‹æœºè¿žæŽ¥æ£å¸¸çš„å·²åŠ å¯†ç§»åŠ¨æœåŠ¡æä¾›å•†ã€‚如果您处在潜在的å±é™©ä¸ï¼Œè€ƒè™‘é”€æ¯æ‚¨çš„æ‰‹æœºå’Œ SIM å¡ï¼Œç„¶åŽç§°å®ƒå·²è¢«çªƒå–。</string> <string name="status_skull_detail_info">æ•Œæ„æ“作:有人æ£åœ¨å°è¯•è¿œç¨‹æ“æŽ§æ‚¨çš„æ‰‹æœºã€‚è€ƒè™‘é”€æ¯æˆ–出售您的手机,然åŽä»Žå…¶ä»–æ¸ é“弄䏀尿–°çš„。ä¸è¦æºå¸¦ä½ çš„æ—§æ‰‹æœºå¹¶ä¸æ–改å˜ä½ç½®ï¼ä½¿ç”¨ä¸€ä¸ªæ–°çš„匿å SIM å¡å’Œ Tor æµè§ˆå™¨ã€‚改å˜ä½ çš„é€šè¯æ–¹å¼å¹¶è¦å‘Šä½ çš„åŒä¼´ä»–们æ£åœ¨è¢«ç›‘视。考虑é¢å¯¹é¢äº¤æµå’Œè®¨è®ºï¼Œé¿å…åœ¨æ¤æ—¶æ‰“电è¯ï¼</string> <string name="download_timed_out">OpenCellID API 请求超时。ç¨åŽé‡è¯•?</string> + <string name="cell_doesnt_provide_any_neighbors">BTS 没有æä¾›ä»»ä½•邻居基站ï¼</string> + <string name="import_cell_towers">导入基站数æ®</string> + + <string name="imporing_celltowers_data">æ£åœ¨å¯¼å…¥åŸºç«™æ•°æ®â€¦ +è¿™å¯èƒ½è¦èŠ±ç‚¹æ—¶é—´ã€‚</string> + <string name="celltowers_data_successfully_imported">基站数æ®å¯¼å…¥æˆåŠŸã€‚</string> + <string name="error_importing_celltowers_data">导入基站数æ®å‡ºé”™ã€‚</string> + <string name="help_app_import_cell_towers">导入基站数æ®åº“。</string> + <string name="needs_location">需è¦ä½ç½®</string> </resources> diff --git a/AIMSICD/src/main/res/values/translatable_strings.xml b/AIMSICD/src/main/res/values/translatable_strings.xml index 5ec21bb48ae00581f33df31d47ec5032cb93d3a8..c7062c56d2fba59154c390e9613efca1c3803071 100644 --- a/AIMSICD/src/main/res/values/translatable_strings.xml +++ b/AIMSICD/src/main/res/values/translatable_strings.xml @@ -1,4 +1,4 @@ -<?xml version='1.0' encoding='utf-8'?> +<?xml version='1.0' encoding='UTF-8'?> <resources> <!-- Drawer --> @@ -24,8 +24,8 @@ </string> <!-- MENU --> - <string name="toggle_attack_detection">Toggle Attack Detection</string> - <string name="toggle_cell_tracking">Toggle Cell Tracking</string> + <string name="toggle_attack_detection">Attack Detection</string> + <string name="toggle_cell_tracking">Cell Tracking</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="preferences">Preferences</string> @@ -38,6 +38,9 @@ <!-- MAP VIEWER --> <string name="get_opencellid">Download BTS Data</string> + <!-- IMPORT CELLTOWERS.CSV --> + <string name="import_cell_towers">Import CellTowers Data</string> + <!-- LAYOUT --> <string name="device_info_title">Device Information</string> <string name="sim_info_title">SIM Information</string> @@ -191,7 +194,7 @@ <!-- Detailed Info Strings --> <string name="title_activity_about_pop_up">DETAILED EXPLANATION</string> - <string name="status_idle_detail_info">App is idling or loading. No protection and detection measures are enabled. Please toggle attack detection!</string> + <string name="status_idle_detail_info">App is idling or loading. No protection and detection measures are enabled. Please enable attack detection!</string> <string name="status_ok_detail_info">No threats detected. Your network is constantly being checked based upon the enabled detection settings.</string> <string name="status_medium_detail_info">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. Any phone calls/SMS made in this area can be intercepted and recorded. Quickly leave this place.</string> <string name="status_high_detail_info">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 by all means, especially if there is political unrest. Take out your battery and SIM card!</string> @@ -242,6 +245,7 @@ <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 not in OpenCellID Database!</string> <string name="hostile_service_area_changing_lac_detected">Hostile Service Area: Changing LAC Detected!</string> + <string name="cell_doesnt_provide_any_neighbors">BTS doesn\'t provide any neighbor cells!</string> <string name="femtocell_detection_active">FemtoCell Detection Active.</string> <string name="cell_tracking_active">Cell Tracking Active.</string> <string name="cell_monitoring_active">Cell Monitoring Active.</string> @@ -273,6 +277,9 @@ <string name="error_uploading_bts_data">Error in uploading BTS data to OpenCellID servers!</string> <string name="no_opencellid_key_detected">No OpenCellID API Key detected!\nPlease enter your key in settings first.</string> <string name="refreshed_cell_id_info">Refreshed CellId info</string> + <string name="imporing_celltowers_data">Importing CellTowers data…\nThis may take a while.</string> + <string name="celltowers_data_successfully_imported">CellTowers data successfully imported.</string> + <string name="error_importing_celltowers_data">Error importing CellTowers data.</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 on our Github.</string> @@ -337,10 +344,12 @@ <string name="help_app_add_get_ocid_api_key">Get an API key for using the OpenCellID database to upload and download data…</string> <string name="help_app_about">Status Icons and Project explained.</string> <string name="help_app_download_local_bts">Downloads the OpenCellID Database.</string> + <string name="help_app_import_cell_towers">Imports CellTowers Database.</string> <string name="help_app_upload_local_bts">Uploads your BTS to the OpenCellID Database.</string> <string name="help_app_debugging">Collect and send error logs.</string> <string name="help_app_quit">Exit this app.</string> <string name="waiting_for_location">Waiting for location…</string> + <string name="needs_location">Needs location</string> <string name="unique_bts_data">Unique BTS Data</string> <string name="bts_measurements">BTS Measurements</string> <string name="imported_ocid_data">Imported OpenCellID Data</string> diff --git a/build.gradle b/build.gradle index af6a929f80a963f6b3420a5da3bed8ab51fdf4ff..7c93ed46fcea65d26e6cd345bec877cb5172e705 100644 --- a/build.gradle +++ b/build.gradle @@ -7,9 +7,9 @@ buildscript { maven { url "https://jitpack.io" } } dependencies { - classpath 'com.android.tools.build:gradle:2.0.0' + classpath 'com.android.tools.build:gradle:2.1.3' classpath 'io.freefair:gradle-plugins:2.0.0-beta5' - classpath "io.realm:realm-gradle-plugin:0.88.3" + classpath "io.realm:realm-gradle-plugin:1.0.1" } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3634ddf3ffc8b99de7557b3b0db72b9b4ce903f1..e1426f5f592c5a3eb241e77b42f095c06306ec1e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Mar 18 22:01:32 CET 2016 +#Sat Aug 27 22:08:21 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip