Giter VIP home page Giter VIP logo

criticalmaps-android's Introduction

Get it on Google Play Get it on F-Droid

Critical Mass Android App

CI

What's "Critical Mass"?

Critical Mass has been described as 'monthly political-protest rides', and characterized as being part of a social movement.

http://en.wikipedia.org/wiki/Critical_Mass_(cycling)

What's this app?

This app tracks your location and shares it via a map with all other participants of the Critical Mass bicycle protest. You can use the chat to communicate with all other participants.

Is there a version for iOS devices?

Yep! Here: https://github.com/CriticalMaps/criticalmaps-ios

Contribute

  • If you can code: Just go ahead and send us a pull request. If you're planning a bigger feature, it might be a good idea to open an issue before starting in case someone is working on something similar.
  • If you find bugs: File them in the github issue tracking system.
  • If you find translation errors or want to add a new language: Head over to our Transifex site and join a translation team.
  • If you have moneyz left to burn: Help us finance the server.

Can i haz more information?

Check: http://criticalmaps.net

App screenshot

Contributors

Code Contributors

This project exists thanks to all the people who contribute. [Contribute].

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]

Individuals

Organizations

Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]

criticalmaps-android's People

Contributors

askarsyzdykov avatar canerbasaran avatar cbalster avatar johnjohndoe avatar kibotu avatar ligi avatar martinnowak avatar mltbnz avatar monkeywithacupcake avatar normansander avatar rodrigoaguilera avatar stefanctdo avatar stephanlindauer avatar tretkowski avatar wikinaut avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

criticalmaps-android's Issues

Tracking Checkbox

Die Tracking Checkbox im Menü ist immer aktiviert nach jedem Wechsel eines Tabs auch wenn man das Tracking vorher deaktiviert hat.

Return correct content type

The JSON response from the API does not return the correct content type:

$ curl -s -D - http://api.criticalmaps.net/twitter/get.php

HTTP/1.1 200 OK
Date: Sun, 04 Oct 2015 22:27:23 GMT
Server: Apache
X-Powered-By: PHP/5.4.44
Transfer-Encoding: chunked
Content-Type: text/html

It should be Content-Type: application/json;charset=utf-8 instead.

[Feature request] option "Mass line filter (cluster) function": show number of close positions as single continuous line, calculate and show average velocity; course vector prediction

My wish is a "mass line filter" function (user option, activated by default), which shows a certain number (programmable, default 16) of close (perhaps as user option: programmable minimum distance) positions as a single continuous line with a separate colour instead of showing the distinct positions.

Different clusters in the map can, for the moment use the same colour, later perhaps, different colours.
Here is a "nice colours" random generator: https://randomcolor.llllll.li/ .

One's own position, regardless whether it is part of the "mass line" or not, should always be shown as it is now.

An additional velocity filter could be perhaps useful to only cluster positions senders within a certain range of velocities.

[Updated 20170613]

Additional wish from the ADFC: "Könnt Ihr aus Tracks mittlere Geschwindigkeiten auslesen?"
Would be nice to have a kind of (min. max, average) velocity information derived from all these clustered positions, which form the clustered line.

The chat and twitter should be more accessible

As A user I would like to see chat-messages and tweets while viewing the map on a phone mounted to my bike when they arrive

When a new chat message arrives
A Snackbar pops up and displays the message

When you click on this message
Then you get to the chat part of the app

When a new tweet arrives
A Snackbar pops up and displays the tweet

When you click on this tweet
Then you get to the twitter part of the app

less blocking prerequisites

the current prerequisites basically block you from using the app. in the future we could think about letting them still use the app but show them some kind of notification that stuffs not working 100%.

Multilingual

I was wondering if the app can be translated so the rules of the critical mass display in the language of your phone.

add salt to deviceid

salt could be date string. purpose of this change is to make it harder to identify devices when you find out what md5 hash they have created out of their device id.

Optimize map overlays refresh

I see two problems here:
First of all osmdroids overlay list is backed by a CopyOnWriteArraylist which creates a new copy on every mutation. Secondly we are currently allocating new Objects for the markers on each refresh which is less then optimal (which is kinda my fault due to 9bfca71 ;) ).
I would suggest keeping a local copy of the overlays as a normal Arraylist in MapFragment. Then we could update the existing ones and add and remove as needed on each refresh in that local list. When done we can just .clear() and .addAll() the osmdroid one. This would reduce the mutative operations to two in all cases.
Thoughts?

NPE FC in TwitterFragment

E/AndroidRuntime(27284): Process: de.stephanlindauer.criticalmaps, PID: 27284
E/AndroidRuntime(27284): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.widget.SwipeRefreshLayout.setRefreshing(boolean)' on a null object reference
E/AndroidRuntime(27284):    at de.stephanlindauer.criticalmaps.fragments.TwitterFragment.displayNewData(TwitterFragment.java:91)
E/AndroidRuntime(27284):    at de.stephanlindauer.criticalmaps.handler.TwitterGetHandler.onPostExecute(TwitterGetHandler.java:53)
E/AndroidRuntime(27284):    at de.stephanlindauer.criticalmaps.handler.TwitterGetHandler.onPostExecute(TwitterGetHandler.java:16)
E/AndroidRuntime(27284):    at android.os.AsyncTask.finish(AsyncTask.java:636)
E/AndroidRuntime(27284):    at android.os.AsyncTask.access$500(AsyncTask.java:177)
E/AndroidRuntime(27284):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
E/AndroidRuntime(27284):    at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(27284):    at android.os.Looper.loop(Looper.java:145)
E/AndroidRuntime(27284):    at android.app.ActivityThread.main(ActivityThread.java:6872)
E/AndroidRuntime(27284):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(27284):    at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime(27284):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
E/AndroidRuntime(27284):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

visualize last update on mapmarkers

hi i received the following email (sorry its in german):

Eine Visualisierung, wie alt die Positionsdaten sind, wäre ganz gut. 
Zum Beispiel könnten die Positionen ihre Farbe wechseln, je älter die Daten sind. 
Nicht sekündlich, aber alle 5-10 Sekunden etwas dunkler. 
Zum Beispiel wie beim Lightningmaps.org.

Viele Grüße
Tilo 

i think that if we implement something like that, we should make the difference in color very subtle in order to not confuse people. also it might be tricky to communicate to the user what those different colors actually mean.
what's your opinion on this?

Looper.prepare() Exception

stuff runs outside of main looper and causes some devices to crash. cant reproduce.

java.lang.ExceptionInInitializerError
at de.stephanlindauer.criticalmass.helper.b.a(Unknown Source)
at de.stephanlindauer.criticalmass.helper.d.run(Unknown Source)
at java.util.Timer$TimerImpl.run(Timer.java:284)
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.(Handler.java:121)
at android.os.AsyncTask$InternalHandler.(AsyncTask.java:607)
at android.os.AsyncTask$InternalHandler.(AsyncTask.java:607)
at android.os.AsyncTask.(AsyncTask.java:190)
... 3 more

Pull support-v4 from local support repository

If you have the SDK installed, you should have a local maven repository serving this file instead of including it as binary jar file. E.g. compile "com.android.support:support-v4:23.0.0" in your dependencies in app/build.gradle should work fine.

OSM map not loaded on start

With the recent versions I noticed that the map is not loaded when the app is started, when GPS is switched off.

I only see a blue map with my own position icon, zoom-in or zoom-out: no function.

  • HUAWEI P8 Lite 2017
  • Android 7.0

Reduce amount of data transferred

Yesterday I took part in the Fahrradsternfahrt to Berlin. During 4 hours, my phone spent almost 20 MB. I don't have a generous data plan, and this was way beyond my "daily allowance".

There seem to be multiple factors contributing to this rather large amount of data:

  • I could find no way to use offline maps (I'm using them with Locus, and c:geo, thus a newer mapsforge interrface should work)
  • There seems to be no map tile caching
  • The app appears to load map tiles even if it's only running in the background (I don't have proof for that, except that between two consecutive unlocks, more than 5 MB had been spent). Actually, my phone reports twice the amount of data transferred in the background compared to foreground usage (i.e. when I was zooming and panning around for other participants)!

While a typical CM will take place in a well-defined, small area, such a setup like the Sternfahrt would cover long distances and therefore would trigger more map reloads than usual.

Is there an overview what kind of data gets transmitted (sent, and received) in which situations?
I'd expect my own location to be sent every now and then (10 - 15 seconds?) but other locations, and map tiles, only pulled if there are any participants within my view window, and none of that while running in the background.

I'm back to Herve Renault's self-hosted location tracking service for now (which consumes <1/4 kB per my location report).

Wishlist (in decreasing order of importance to me):

  • option to use off-line maps (must-have)
  • no map tile loading in the background at all (important)
  • reduce traffic to a minimum in bg mode (only report own location; perhaps notify of chat? - normal)
  • option to opt out of chat etc.

Thanks!

UX Maximize screen real-estate

As I user I would like to see the as much map as possible when the phone is mounted to bike while cm.

When the phone detects that there was no user input for a while
Then the Actionbar should disappear

When the phone detects that there is userinput
And the Actionbar is invisible
Then the Actionbar should appear

Hinweis auf Tracking

Moin!

Schönes Projekt. Ich finde es bedenklich, dass die App quasi immer im Hintergrund trackt ohne den benutzer wirklich drauf hinzuweisen. Da fänd ich einen permanenten Hinweis innerhalb der App schon ganz gut, solange das Tracking aktiviert ist. Die Trackt ja auch im Hintergrund, da sollte es dann auch einen Hinweis als Notification geben.

translations setup

figure out how we want to handle translations.
transifex would be one way. android studio the other.

see previous discussion @ #178

Tag for latest version

I see there is a 2.1.0 version in the PlayStore and I wanted to ask for an appropriate tag for that version, so that it can be published on F-Droid, too.
Thanks!

deep linking support

so we can properly link from the website or from the facebook page.
should either open the app if installed or the play store if it isnt.

add third-party licensing notices

...to comply with their licenses.
I already have most of them collected but am unsure where best to add them. Maybe add another header in about and list the names there and expand on click? Or maybe just a link in about and show them in a separate activity?

Map cm auto-follow

As A User I would like an option to see the cm all the time centered on the map without having to zoom and pan

When the user has not interacted with the phone for a while
And in the setting the user activated this feature
Then the bounds of the cm are calculated
And the map is set to these bounds with some padding

Add license file to repository

According to F-Droid the app is licensed under Apache 2.0. But I couldn't find this information anywhere in the repository.

NPE in LocationManager

I had this when looking over #146 - needs further investigation - placing it here to track and not forget

E/AndroidRuntime(15339): java.lang.RuntimeException: Unable to resume activity {de.stephanlindauer.criticalmaps/de.stephanlindauer.criticalmaps.Main}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.location.LocationManager.isProviderEnabled(java.lang.String)' on a null object reference
E/AndroidRuntime(15339):    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4032)
E/AndroidRuntime(15339):    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4063)
E/AndroidRuntime(15339):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3259)
E/AndroidRuntime(15339):    at android.app.ActivityThread.access$1000(ActivityThread.java:197)
E/AndroidRuntime(15339):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1681)
E/AndroidRuntime(15339):    at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(15339):    at android.os.Looper.loop(Looper.java:145)
E/AndroidRuntime(15339):    at android.app.ActivityThread.main(ActivityThread.java:6872)
E/AndroidRuntime(15339):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(15339):    at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime(15339):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
E/AndroidRuntime(15339):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
E/AndroidRuntime(15339): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.location.LocationManager.isProviderEnabled(java.lang.String)' on a null object reference
E/AndroidRuntime(15339):    at de.stephanlindauer.criticalmaps.utils.LocationUtils.getBestLastKnownLocation(LocationUtils.java:16)
E/AndroidRuntime(15339):    at de.stephanlindauer.criticalmaps.managers.LocationUpdateManager.getLastKnownLocation(LocationUpdateManager.java:85)
E/AndroidRuntime(15339):    at de.stephanlindauer.criticalmaps.fragments.MapFragment.setInitialMapLocation(MapFragment.java:129)
E/AndroidRuntime(15339):    at de.stephanlindauer.criticalmaps.fragments.MapFragment.onActivityCreated(MapFragment.java:123)
E/AndroidRuntime(15339):    at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1970)
E/AndroidRuntime(15339):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1092)
E/AndroidRuntime(15339):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
E/AndroidRuntime(15339):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
E/AndroidRuntime(15339):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)
E/AndroidRuntime(15339):    at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:330)
E/AndroidRuntime(15339):    at android.support.v4.app.FragmentActivity.onResume(FragmentActivity.java:441)
E/AndroidRuntime(15339):    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1271)
E/AndroidRuntime(15339):    at android.app.Activity.performResume(Activity.java:6671)
E/AndroidRuntime(15339):    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4021)
E/AndroidRuntime(15339):    ... 11 more

Should we temporarily remove the Sternfahrt feature?

While we probably all agree this is a feature that should be included, right now it has some problems:

  • long initial dynamic generation
  • impact on performance
  • only relevant to berlin

In a short discussion with @ligi we agreed, that we all should probably put some thought in redesigning the feature (different cities, only specific routes, ...). I proposed temporarily removing the feature until this is sorted out, but ligi correctly pointed out that this might confuse users.
So, any thoughts about that?

turkish translation

hi @canerbasaran ,
can you have another look into the turkish strings file?
a few things have changed and it would be nice to have them in the next release.
tesekkurler abi ;)

Encrypt the communication with HTTPS

Unfortunately the communication between the app and criticalmaps.net is unencrypted. A corresponding information made it to the app description on F-Droid.
As locations and (anonymous) messages are quite sensitive data it would be preferable to use encrypted HTTPS-connections.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.