Skip to content

Commit451/Veyron

Repository files navigation

Veyron

Easily store and fetch JSON, Files, and Strings in Google Drive on Android.

Dependency

implementation("com.github.Commit451.Veyron:veyron:latest.version.here")
// And for RxJava methods:
implementation("com.github.Commit451.Veyron:rxjava:latest.version.here")

You also need to make sure you are compiling with Java 11:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }
}

Usage

You will first need to do the setup for the Google Drive API. See the sample project for a complete example.

// when you have a valid Drive class:
val veyron = Veyron.Builder(drive)
    // optional configuration for Moshi, if you are saving classes instead of Strings/Files
    // .moshi(moshi)
    .build()

Create

val dog = Dog()
val saveRequest = SaveRequest.Document("dog.json", Dog::class.java, thing)

val path = "info"
// RxJava Completable is returned
veyron.save(path, saveRequest)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe({
            snackbar("Saved")
        }, {
            it.printStackTrace()
        })

Fetch

val path = "info/dog.json"
veyron.document(path, Dog::class.java)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({
        snackbar("Dog found")
    }, {
        it.printStackTrace()
    })

Delete

val path = "info/dog.json"
veyron.delete(path)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({
        snackbar("Dogs deleted")
    }, {
        it.printStackTrace()
    })

Other Operations

Other operations you can perform:

  • veyron.file(path)
  • veyron.files(path)
  • veyron.documents(path)
  • veyron.search(path, query)
  • veyron.string(path)
  • veyron.save(path, listOfSaveRequests())

Build Locally

You will need to set up a Google Cloud project with the same package name as the sample, and create a keystore that works with the details within the app's build.gradle file. Then, create a new gradle.properties file that looks like so:

KEYSTORE_PASSWORD=keystorepasswordhere

Note

A few things to note about this library:

  • Assumes unique file and folder names. Unlike a normal file system, Google Drive allows you to create folders and files at the same level with the same name. We will always fetch/return the first result we find if there are duplicates.
  • It has dependencies. Please check them and understand what they do.
  • Each query is limited to 1,000 results, but we fetch all results. We do not currently support pagination or "infinite loading"

R8/Proguard

If you are using R8/Proguard, you will need to include the rules for Moshi and okio. Rules for the Google HTTP Client Library are included as rules for this library.

License

Copyright 2023 Commit 451

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.