/Rolo-Cookbook

Android library full of goodies and utilities

Primary LanguageKotlin

Cookbook

Unless otherwise specified, include the cookbook library:

implementation 'com.sababado.rolo:cookbook:1.1.0.0'

About Activity

Add the activity to your manifest

<activity
    android:name=".ui.AboutActivity"
    android:label="@string/about" />

and start the activity with

AboutActivity.goToAboutActivity(context)

Ads

Include the ads library:

implementation 'com.github.sababado.Rolo-Cookbook:cookbook-ads:1.1.0.0

Add meta tags in manafest.

<meta-data
    android:name="com.google.android.gms.ads.APPLICATION_ID"
    android:value="ca-app-pub-XXXXXXXXXX~YYYYYYYYYY" />
<meta-data
    android:name="rolo.cookbook.admob_pub_id"
    android:value="pub-XXXXXXXXXX" />
<meta-data
    android:name="rolo.cookbook.privacy_url"
    android:value="https://math-for-meat-heads.flycricket.io/privacy.html" />
<meta-data
    android:name="rolo.cookbook.debug_device_id"
    android:value="519A899F0D74FE834B8C598F8FBDB59F" />

Add the ad unit id to the strings. The string name must be exactly this.

<string name="cookbook_admob_ad_unit_id" translatable="false">ca-app-pub-XXXXXXXXXX/ZZZZZZZZZZ</string>

Authentication

Currently only Google Sign In is supported with a direct link to Firebase User Accounts

Google Sign In

If you haven't yet specified your app's SHA-1 fingerprint, do so from the Settings page of the Firebase console. Refer to Authenticating Your Client for details on how to get your app's SHA-1 fingerprint.

  1. Add the debug key SHA1
  2. Add the release key SHA1
  3. Add the Google Play Console SHA1 (Play Console -> App -> Setup -> App Signing)

Usage

Add your Google Web Client ID to the manifest

<meta-data
    android:name="rolo.cookbook.google_web_client_id"
    android:value="@string/web_client_id" />

Use the GoogleSignInHelper in any activity or fragment that needs the sign in option. Adding a UserAccounts class to the signin helper will automatically attempt to keep the google account in sync with the user data provider.

Get an instance of UserAccounts from the UserAccountsProvider class.

For quick authentication, use the UserAccounts.signInAnonymously() function.

Firebase Authentication

FirebaseUserAccounts will work with any existing firebase setup.

Enable Google Sign-In Enable Google Sign-In in the Firebase console: In the Firebase console, open the Auth section. On the Sign in method tab, enable the Google sign-in method and click Save.

Firebase Rules

  • Make sure the rules allow users to edit only their data
  • Rules should allow any (linked user) to delete anonymous collection data.

Permission Handling

PermissionManager

Helper for permissions.

The using activity should implement ActivityCompat.OnRequestPermissionsResultCallback and override onRequestPermissionsResult. Start the request with one of the requestPermission functions. One simplifies the process with a snackbar, the other is flexible for more detailed usage. Handle the results in handlePermissionResult.

If permissions are denied, the only callback will be in the handlePermissionResult function. Check for one off permissions with isPermissionAvailable.

FirstTimeUsageHandler

Use this class to ease the actions of checking for the first time usage of something.

Location

Add location with the LocationManager. Create an instance of this class then start with getLastLocation. In the using activity, override onActivityResult]Activity.onActivityResult and call into LocationManager.onActivityResult.

To use this, you'll need to include the Google Play Services dependency in your app.

implementation 'com.google.android.gms:play-services-location:17.1.0'

You'll need to have permission from the user to use location. A good implementation strategy is to check that first:

// Start the location work, first by checking for permission.
private fun startLocation() = PermissionManager.requestPermission(
    appCompatActivity = this,
    permission = Manifest.permission.ACCESS_COARSE_LOCATION,
    snackbarHost = getSnackbarHostView(),
    rational = R.string.location_rational,
    onPermissionGranted = permissionGrantedCallback
)

Maven Publishing

Use the task publishToMavenLocal to push a local build.