Skip to content

Commit

Permalink
+ Version 2.0
Browse files Browse the repository at this point in the history
Optimize functions and callbacks.
Documentation completed.
Library added in bintray.
  • Loading branch information
bestog committed Jun 17, 2016
1 parent ffe4011 commit b303738
Show file tree
Hide file tree
Showing 41 changed files with 851 additions and 181 deletions.
2 changes: 1 addition & 1 deletion pals-lib.iml → Pals.iml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="pals-lib" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<module external.linked.project.id="Pals" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="java-gradle" name="Java-Gradle">
<configuration>
Expand Down
122 changes: 97 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,76 +1,148 @@
# Privacy Aware Location Service Library
[![Download](https://api.bintray.com/packages/bestog/pals/pals/images/download.svg)](https://bintray.com/bestog/pals/pals/_latestVersion)
[![API](https://img.shields.io/badge/API-11%2B-green.svg)](https://github.com/bestog/pals-lib/tree/master)

__Privacy Aware Location Service Library for Android -- MLS, OpenCellID, OpenBMap and OpenWLANMap__

GPS is the most common approach to locate a smartphone-user. The GPS location is determined in Android by Google services. Google stores user profiles about their movement. Thus privacy is not protected!
The GPS localization is realized in Android through a Google service. Google can thereby save user profiles and track the movements of the user. This library prevents the localization on Google interface and uses only free-usable anonymous location-services.
Data on the surrounding wireless networks and cell towers are sent to the location-service. As a result, you get the calculated approximate GPS location of the user.

This library uses location-services to treat the data anonymous. These can be add to your project as a library.
_Be clever and keep your private data anonymous!_

__Pull Requests are welcome!__
__Pull-Requests are allowed and encouraged!__

## Getting Started
1. Download the [latest version](https://github.com/bestog/pals-lib/releases) from GitHub
2. Copy the `palslib.jar` file in your `/libs/`-directory
3. Add this library to your dependencies
4. Ready!

__Maven__
```
<dependency>
<groupId>com.bestog.pals</groupId>
<artifactId>pals</artifactId>
<version>2.0</version>
<type>pom</type>
</dependency>
```

__Gradle__
```
compile 'com.bestog.pals:pals:2.0'
```

## Usage
__Permissions (AndroidManifest)__
```
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
// Only for submit-request
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
```

__Basics__
```java
// Initialize Pals
Pals pals = new Pals(Context ctx);

Pals pals = new Pals(context);
// Enable Provider
pals.enableProvider(LocationProvider.PROVIDER_MOZILLA);
pals.enableProvider(LocationProvider.PROVIDER_OPENBMAP);
...

// Request
```
__Request__
A request that returns the current approximate position of the user as a result.
```java
pals.request(new IRequest() {
@Override
public void onComplete(GeoResult result, boolean valid) {
// Result - Example -----------------
// double lat = result.getLatitude();
// double lon = result.getLongitude();
// int lat = result.getAccuracy();
// boolean validRequest = valid;
// Result - Example -----------------
double lat = result.getLatitude();
double lon = result.getLongitude();
int acc = result.getAccuracy();
boolean validRequest = valid;
// ---- YOUR CODE ------------------
}
});
```
__Submit__
To guarantee accurate position of a user, the database of location-services with new data needs to be filled.
Help us with it and collect new data!
```java
pals.submit(new ISubmit() {
@Override
public void onComplete(boolean valid) {
// Result - Example -----------
boolean validSubmit = valid;
// ---- YOUR CODE ------------
}
});
```

## Provider

__Mozilla Location Service__
`LocationProvider.PROVIDER_MOZILLA`
[+] Request
[+] Submit

__OpenBMap__
`LocationProvider.PROVIDER_OPENBMAP`
[+] Request
[-] Submit

`LocationProvider.PROVIDER_GOOGLE`

__OpenCellID__
`LocationProvider.PROVIDER_OPENCELLID`
[+] Request
[-] Submit

__OpenMap__
`LocationProvider.PROVIDER_OPENMAP`
[+] Request
[-] Submit

__Google Geolocation__
`LocationProvider.PROVIDER_GOOGLE`
[+] Request
[-] Submit

## Functions

#### enableProvider
Enable a provider for the geolocation.
Enable a location-provider for the geolocation.
```java
enableProvider(String provider);
void enableProvider(String provider);
```

#### disableProvider
Disable a provider for the geolocation.
Disable a location-provider for the geolocation.
```java
disableProvider(String provider);
void disableProvider(String provider);
```

#### enabledProvider
Get all enabled location-provider as a comma-seperated string
```java
String enabledProvider();
```

#### request
Executes a request and sends at the end the result to the listener.
```java
request(IRequest listener);
void request(IRequest listener);
```

#### submit
Executes a submit, collect data from current position and send to a location-provider.
```java
void submit(ISubmit listener);
```

#### isProviderEnabled
Is LocationProvider enabled?
Is the specific location-provider enabled?
```java
isProviderEnabled(String provider);
boolean isProviderEnabled(String provider);
```

#### setTrilaterateAlg
Set a specific algorithm for the calculation
```java
void setTrilaterateAlg(String alg);
```
29 changes: 18 additions & 11 deletions app/app.iml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="pals-lib" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="Pals" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
Expand All @@ -20,7 +20,6 @@
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
<option name="LIBRARY_PROJECT" value="true" />
</configuration>
</facet>
</component>
Expand Down Expand Up @@ -48,61 +47,69 @@
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/23.4.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.4.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.4.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/23.4.0/jars" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/restart-dex" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/reports" />
<excludeFolder url="file://$MODULE_DIR$/build/test-results" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content>
<orderEntry type="jdk" jdkName="Android API 23 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="support-annotations-23.4.0" level="project" />
<orderEntry type="library" exported="" name="animated-vector-drawable-23.4.0" level="project" />
<orderEntry type="library" exported="" name="support-v4-23.4.0" level="project" />
<orderEntry type="library" exported="" name="support-vector-drawable-23.4.0" level="project" />
<orderEntry type="library" exported="" name="appcompat-v7-23.4.0" level="project" />
<orderEntry type="module" module-name="pals" exported="" />
</component>
</module>
29 changes: 12 additions & 17 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,30 +1,25 @@
apply plugin: 'com.android.library'
apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.0.2"

defaultConfig {
applicationId "com.bestog.palssample"
minSdkVersion 11
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
lintOptions {
abortOnError false
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
}

task deleteOldJar(type: Delete) {
delete 'release/AndroidPlugin.jar'
compile project(':pals')
compile 'com.android.support:appcompat-v7:23.4.0'
}

task exportJar(type: Copy) {
from('build/intermediates/bundles/release/')
into('release/')
include('classes.jar')
rename('classes.jar', 'palslib.jar')
}

exportJar.dependsOn(deleteOldJar, build)
78 changes: 78 additions & 0 deletions app/src/main/java/com/bestog/palssample/MainActivity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package com.bestog.palssample;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

import com.bestog.pals.Pals;
import com.bestog.pals.interfaces.IRequest;
import com.bestog.pals.interfaces.ISubmit;
import com.bestog.pals.provider.LocationProvider;
import com.bestog.pals.utils.GeoResult;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class MainActivity extends AppCompatActivity {

private Pals pals;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pals = new Pals(this);
pals.enableProvider(LocationProvider.PROVIDER_MOZILLA);
pals.enableProvider(LocationProvider.PROVIDER_OPENBMAP);
pals.enableProvider(LocationProvider.PROVIDER_GOOGLE);
pals.enableProvider(LocationProvider.PROVIDER_OPENMAP);
process();
}

private void process() {
final TextView resultat = (TextView) findViewById(R.id.result);
if (resultat != null) {
resultat.setText("");
}
pals.request(new IRequest() {
@Override
public void onComplete(GeoResult result, boolean valid) {
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy - HH:mm:ss", Locale.GERMAN);
String out = String.format("Lat: %1$s\nLon: %2$s\nAcc: %3$s\n\nTime: %4$s", result.getLatitude(), result.getLongitude(), result.getAccuracy(), sdf.format(new Date()));
if (resultat != null) {
resultat.setText(out);
}
}
});
final TextView submit = (TextView) findViewById(R.id.submit);
pals.submit(new ISubmit() {
@Override
public void onComplete(boolean valid) {
if (submit != null) {
submit.setText((valid) ? "Submit success" : "Submit error");
}
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.refresh:
process();
return true;
}
return super.onOptionsItemSelected(item);
}


}
Loading

0 comments on commit b303738

Please sign in to comment.