Coder Social home page Coder Social logo

niccokunzmann / mundraub-android Goto Github PK

View Code? Open in Web Editor NEW
33.0 4.0 23.0 20.44 MB

📱Android App for Mundraub, Na-Ovoce and other fruit maps

Home Page: https://f-droid.org/en/packages/eu.quelltext.mundraub/

License: GNU General Public License v3.0

Java 86.32% Shell 2.02% HTML 3.35% JavaScript 5.48% CSS 2.31% Python 0.39% Ruby 0.12%
app android map plants

mundraub-android's Introduction

Mundraub-Android

Barely maintained: I do not actively develop this app any more. If you like to contribute feel free, I can merge your pull requests and also hand development over.

Build Status Percentage of issues still open Average time to resolve an issue Latest Release F-Droid

This is the Android app for Mundraub.org which allows you to store the found plants on the phone and upload them when an Internet connection is available.

The API level is 9 so the application can run on old mobile phones.

Download

Get it on F-Droid Get it on Google Play

The latest version can be downloaded from GitHub

Contribute

Contributions are welcome.

  • To add another supported language, translate the app on Transifex. Suggestions on new languanges to support can be submitted through an issue.
  • The app is developed on Android Studio . We suggest starting development with small issues.
    Permission is not necessary to begin working on the app - The app is free software so anyone is able to modify it. Helpful tips for the developing process:
    • leaving a comment allows others to support you and ensures no duplicate work is done.
    • Start a pull request as soon as possible so the community can support you and Travis can check your code. Earlier feedback means faster development.
  • Feedback is welcome, please open an issue.
    • Crash:
      • Report a debug log file if you gave EXTERNAL_STORAGE permissions or use logcat to retrieve the log. If you gave permissions, you should be able to find it under eu.quelltext.mundraub.log.txt or eu.quelltext.mundraub.error.txt. The app (if starting) should point you to the file.
      • Use MatLog Libre to retrieve the app log before and after a crash.

Pease read the following pages: Setup Guide, Contribution Guidelines and the documentation.

Software Material List

App components:

APIs:

Services:

Languages:

  • Java for the app, Android 2.3 GINGERBREAD
  • HTML/CSS/JavaScript for the map

Related Work

mundraub-android's People

Contributors

alessandrotedd avatar aoudiamoncef avatar dependabot[bot] avatar harryheights avatar heineken avatar iris-mobile-accessibility-repair avatar jakubpalsa avatar jbleduigou avatar jellyrolljunior avatar marky25 avatar minatekyo avatar miro1016 avatar niccokunzmann avatar ptelepcak avatar r4box avatar renefedorcak avatar robkoro 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

Watchers

 avatar  avatar  avatar  avatar

mundraub-android's Issues

Do not save plants with only default entries

If a plant was not edited, just has the fields from the start

  • delete this plant when the new plant activity is closed
  • stop GPS position updates on the plant as they are no use

Ask if plant should be deleted

Currently, it is easy to delete plants online.
Please add a dialog asking the user if they really like to remove the plant and all comments and history of it.

GPS update resets writing the message

When the GPS position is set of a plant, all entries of the plant are re-written. This resets the curser of the description.

Two possible solutions:

  1. update only GPS related views
  2. set the curser to the position again.

View map from details

When I click on a plant, I would like to click on the map of the plant in order to see where the plant is located. Please open the Activity to show the map there.

Hint:

  • When viewing details, I do not want the plant to change.
    Display a button at the bottom of the web view activity to to just go back and hide the edit buttons.
    You can pass the EDIT_PLANT = false as Intent argument.

Show big image when clicked

When I open the plant details and click on the image of the plant,
I would like to see this image in big.


We're using [Polar.sh](https://polar.sh/niccokunzmann) so you can upvote and help fund this issue. We receive the funding once the issue is completed & confirmed by you. Thank you in advance for helping prioritize & fund our work. Fund with Polar

Add loading animation

The app takes quite a while to load.
We can bridge this with a loading animation.

[PERMISSION] ask for GPS

When we create a new plant, we would like to get the current GPS location.
If this is disabled, please ask for the permission to be given.

Create settings

  • Create a Settings class
    • include some global variables
      • dummy api
      • insecure https
      • PersistentPlantCollection STORAGE_DIRECTORY_NAME
      • build commit
      • build tag (1.X)
      • version: set to template like 1.$TRAVIS_BUILDXY

animate upload operation

When operations like delete, upload, login take place, please show a small button-high loader to the user.
When the view exists, no dialog needs to be shown.


We're using [Polar.sh](https://polar.sh/niccokunzmann) so you can upvote and help fund this issue. We receive the funding once the issue is completed & confirmed by you. Thank you in advance for helping prioritize & fund our work. Fund with Polar

Use official Mundraub Colors

Mundraub may still be a trade mark of the https://mundraub.org and the people behind it. We can not use the name for us but we may use the colors. Please change the default colors of the app and see if e.g. buttons could use another color.

picture quality is low

The quality of the pictures used in the app is much lower than the quality which could be achieved by the camera.


We're using [Polar.sh](https://polar.sh/niccokunzmann) so you can upvote and help fund this issue. We receive the funding once the issue is completed & confirmed by you. Thank you in advance for helping prioritize & fund our work. Fund with Polar

Stop GPS updates when app closes

When a new plant is created, it gets a GPS location. When the app closes, still gps is requested.
Solution: cancel the GPS update once the app closes.

onDestroy in the new plant activity does not work.
related: https://stackoverflow.com/questions/13785720/android-onclose-event


We're using [Polar.sh](https://polar.sh/niccokunzmann) so you can upvote and help fund this issue. We receive the funding once the issue is completed & confirmed by you. Thank you in advance for helping prioritize & fund our work. Fund with Polar

Find out if plant is existent online

A plant may be deleted online. If it is, we should be able to detect it and upload it again.
Currently, published plants can not be uploaded again.

Scroll back to the position in plant list

When the Plant listing activity is entered again, it should be at the same position as it was left.

Hint:
We can use onSave (see the new plant activity) and the savedInstanceState

Uncertain Position

The position should be uncertain:

  • GPS uncertainty
  • time since the recording of the position

This must be displayed and a base for asking, see #27

Create Credits Page

The OpenLayers License requires readable reproduction of the license in binary format. GPL possibly, too.

Solution: Create a Credits/About Page

  • Show the Apache License
  • Show the GPL license
  • Link to the source code (open repository)
  • invite people to contribute
  • report an issue (open link to github issues)
  • Open the credits page from the menu of the app

secure connection to mundraub

In Android 2.3.X we can not verify the connection to mundraub.org.
This encrypts the connection but is vulnerable to man in the middle attacks.

I tried to pin the certificate but was out of luck:

    private HttpsURLConnection openSecureConnection(URL url) throws CertificateException, NoSuchProviderException, KeyStoreException, IOException, NoSuchAlgorithmException, UnrecoverableKeyException, KeyManagementException {
        // from https://stackoverflow.com/a/34533863/1320237
        ByteArrayInputStream derInputStream = new ByteArrayInputStream(certificateString.getBytes());
        CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509","BC");
        X509Certificate cert = (X509Certificate) certificateFactory.generateCertificate(derInputStream);
        String alias = "mundraub.org";//*/ cert.getSubjectX500Principal().getName();
        Log.d("alias", alias);

        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        trustStore.load(null);
        trustStore.setCertificateEntry(alias, cert);
        KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
        kmf.init(trustStore, null);
        KeyManager[] keyManagers = kmf.getKeyManagers();

        TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
        tmf.init(trustStore);
        TrustManager[] trustManagers = tmf.getTrustManagers();

        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(keyManagers, trustManagers, new java.security.SecureRandom());
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
        conn.setSSLSocketFactory(sslContext.getSocketFactory());

        return conn;
    }

    // use the first certificate from
    //     openssl s_client -showcerts -servername mundraub.org -connect mundraub.org:443 </dev/null
    // source: https://stackoverflow.com/a/7886248/1320237

    private final String certificateString = "-----BEGIN CERTIFICATE-----\n" +
            "MIIFkjCCBHqgAwIBAgIQDhJsU3G9TP7jmWtUNknpEzANBgkqhkiG9w0BAQsFADBu\n" +
            "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" +
            "d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg\n" +
            "RFYgVExTIENBIC0gRzIwHhcNMTgwODAzMDAwMDAwWhcNMTkwMTEzMTIwMDAwWjAX\n" +
            "MRUwEwYDVQQDEwxtdW5kcmF1Yi5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw\n" +
            "ggEKAoIBAQCeRCSeqXweyyT2+cvdqbn7Y3ct3uG7K+X16V3HyASIT2mFgKC1s6kS\n" +
            "Btl0k+HnEw4xWL88J+NheJU8vY53dPmpKXaDFUSz4zpx3HG0Oca1UZB0eypuUtsc\n" +
            "1jng2YJsIu+EBU7x+gXpmPyBlBqmavCJD0Yj1DNys7Qk/cztEyRI3K6FH0KyTJe7\n" +
            "RZIyPYiwnoFbJmt5+ghJnbZjkFpLR2Y/+51SwkTWRFdRVBo36QblM5u1vrGOU6ck\n" +
            "Z9sy1SjuHh/KRGqjIrZOyCFXuw3EqOnzJ1jcZ3XES0vJbYCdaElyMOwcJCOKuwM4\n" +
            "J6oAsdlYhV2E2TbGEHqiKelwS80JgxSHAgMBAAGjggKBMIICfTAfBgNVHSMEGDAW\n" +
            "gBR435GQX+7erPbFdevVTFVT7yRKtjAdBgNVHQ4EFgQUGGioYrSiOUAkYqH948Y9\n" +
            "BIN/YL8wKQYDVR0RBCIwIIIMbXVuZHJhdWIub3JnghB3d3cubXVuZHJhdWIub3Jn\n" +
            "MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw\n" +
            "TAYDVR0gBEUwQzA3BglghkgBhv1sAQIwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93\n" +
            "d3cuZGlnaWNlcnQuY29tL0NQUzAIBgZngQwBAgEwgYAGCCsGAQUFBwEBBHQwcjAk\n" +
            "BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEoGCCsGAQUFBzAC\n" +
            "hj5odHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRW5jcnlwdGlvbkV2ZXJ5d2hl\n" +
            "cmVEVlRMU0NBLUcyLmNydDAJBgNVHRMEAjAAMIIBAwYKKwYBBAHWeQIEAgSB9ASB\n" +
            "8QDvAHYApLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BAAAAFlADdgMQAA\n" +
            "BAMARzBFAiApdIeKdwK2H6+fGJiohXUtBqMXEWz/uGPqjIZatzWgUAIhAPdV7BUp\n" +
            "qHEh99W68ulsODWwCCBAYhf4G5NoWXUgFZFAAHUAh3W/51l8+IxDmV+9827/Vo1H\n" +
            "Vjb/SrVgwbTq/16ggw8AAAFlADdhGAAABAMARjBEAiAglHH5nPm3VVxuGYYfIL5U\n" +
            "EufUMNh4e1GtgfJIrNWYTAIgbK098qxs1Rr4/jYcUssA3Ae7zUSLoZQN2x+8iIHD\n" +
            "UnUwDQYJKoZIhvcNAQELBQADggEBAG4Nt15kYFYykOyVC7jGJUo90d1RyHi5tI6g\n" +
            "YblouTnWWcSMI6f1Ep/gQ/wA2BDzz9koYTC8DVDvYZN8KoRx80dYfzA+Of/IEk8H\n" +
            "2JNkULyPF3xS2AewTqKhonYodtD4qGenslHEYJ8/le+7vX16cSltwS59pYV5S7Nn\n" +
            "y+dnYhZCasudQSTV3n/56CNqdxa/Shtgc0FyUI20va7nOLuzglhhH9g6SHSb6RU6\n" +
            "Gq0HjiPOSTXN6/lEq7ES2Xj9mOD+JMsBG9iTIfCxCFPx6XfrriqKLhy9RDZnhe2P\n" +
            "hqT+YNN7gUsljPKFJ0ZjgcSaXAsWqqZ3Pn86Yd2eIAxoFNpD140=\n" +
            "-----END CERTIFICATE-----\n";

Gradle 4.4 build is unreliable on Travis

We use sdkman to build the project on travis.
However, sometimes downloading the archives does not work.
This breaks the build several times.

Solution ideas:

  • check if travis has a gradle version preinstalled (4.1) and we can use that for the build
  • check if we can use Gradle 4.4 on Travis preinstalled
  • check how to install gradle 4.4 reliably
    • maybe using the cache directory for caching the archive for sdkman

[API] Implement deleting plants

Please implement that the published plants can be deleted by the app.
When the plant is deleted, it can not be deleted any more.
Check if the plant is existent and use that as return code.

[PERMISSION] save files

If WRITE_EXTERNAL_STORAGE is not given, we can not save plants. Please ask when the app starts if we can use that.

Animate login and log in automatically

In order to upload a plant, we must log in first.
If user-name and password are saved, this can be tried automatically once.
Also use the animation from #47 if it is implemented already.


We're using [Polar.sh](https://polar.sh/niccokunzmann) so you can upvote and help fund this issue. We receive the funding once the issue is completed & confirmed by you. Thank you in advance for helping prioritize & fund our work. Fund with Polar

Use Mundraub marker on map

Different plant types have different markers.

  • add the Mundraub markers as picture to the map
  • add a parameter for the map
  • use the marker as displayed on the map
  • add the Mundraub markers as picture resource (see how to make a file to a resource)
  • display the marker picture when the plant type is chosen

Try out the app & document how to use it

  1. Download the app from https://github.com/niccokunzmann/mundraub-android
  2. Install it on the device
  3. Add a new plant
  4. log in
  5. publish the plant
  6. Write what you did and how with pictures to the /docs folder.

We're using [Polar.sh](https://polar.sh/niccokunzmann) so you can upvote and help fund this issue. We receive the funding once the issue is completed & confirmed by you. Thank you in advance for helping prioritize & fund our work. Fund with Polar

Publish and sign the app for google play store

Here, we may get help from FOSSASIA on how to do this.
We need to sign the app.
Upload it to a developer account.
Each time a change is made, the app should be uploaded automatically.

Create app walk-through video

We can create a video which shows how to use the app once we are in the forest and come back.


We're using [Polar.sh](https://polar.sh/niccokunzmann) so you can upvote and help fund this issue. We receive the funding once the issue is completed & confirmed by you. Thank you in advance for helping prioritize & fund our work. Fund with Polar

Edit map from description

There is a map view in the description. When this view is clicked, it should open the map and allow repositioning.

[API] Allow uploading changed plants to mundraub

Once a plant is published, some parts can still be edited.

Roadmap:

  1. delete #6 and re-post plant if #6 is done
  2. use the edit plant form and post the data

We're using [Polar.sh](https://polar.sh/niccokunzmann) so you can upvote and help fund this issue. We receive the funding once the issue is completed & confirmed by you. Thank you in advance for helping prioritize & fund our work. Fund with Polar

[PERMISSION] Camera

When the camera permission is not given, we can not open the app to make a photo. Please ask for the permission to be given, once a photo shall be taken.

Write a setup guide

What is required to build the app?
Please write a guide when you first set up the project.

[Android] set button icon +

When adding a plant on the first page of the app, the button should show a + sign.
Please create a nice + preferably with svg and load it as a resource as button picture.

Cancel GPS when plant is deleted

When the plant is added and then deleted, GPS will not stop.

Possible Solution:

  • Add a callback for deletion which can be added to the plant.
    DeletionCallback plant.notifyOnDelete(new Plant.DeletionCallback() {
        onDelete() {
        }
    })
    plant.removeNotification(...) // called when GPS is set
    

add GPS to edited plant later

Let GPS run even if the new plant activity is closed. This way, several plants can get a first position even if we walk on or add other plants.

  • GPS should check if the plant is deleted and if it is not deleted, should set the position.
  • GPS runs per default when the plant is created.

Ask for repositioning on map if position is from GPS

Problem: Sometimes GPS is not close enough to the position.
Solution:

  1. save the GPS precision in the position
  2. ask if the precision is too low/when the position is from GPS when the user wants to publish the plant
    The dialog should have the options
  • Publish
  • open map

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.