Skip to content
This repository has been archived by the owner on Feb 9, 2023. It is now read-only.

KitchenStories/home-connect-android

Repository files navigation

Work in Progress: HomeConnect Api wrapper for Android

Sample app

To switch between real and simulator environment, simply comment in/out the respective baseUrl in MainActivity.kt

For the sample app, copy your cliendId and cliendSecret from developer.home-connect.com

clientId="<insert-your-clientId>"
clientSecret="<insert-your-clientSecred>"

November 2020 Atatus

How to use

Home Connect Client

You can make API requests through the HomeConnectClient interface. To do this, you should keep a single instance of DefaultHomeConnectClient alive through the lifecycle of your app. In order to construct the instance, you need to provide a base url for the client (usually either https://api.home-connect.com/ or https://simulator.home-connect.com/), your client credentials and an object that implements the HomeConnectSecretsStore interface. Here you have to provide a mechanism (SharedPreferences, Jetpack DataStore or something else) to store the user's access token. Clearing this access token has the consequence of logging the user out. Example usage with Dagger:

@Module
class HomeConnectModule {

    @Provides
    @Singleton
    fun provideHomeConnectSecretsStore(context: Context): HomeConnectSecretsStore =
            MyHomeConnectSecretsStore(context)

    @Provides
    @Singleton
    fun provideHomeConnectClient(secretsStore: HomeConnectSecretsStore): HomeConnectClient =
            DefaultHomeConnectClient(
                baseUrl = "https://api.home-connect.com/",
                clientCredentials = HomeConnectClientCredentials(
                    clientId = "<insert-your-client-id>",
                    clientSecret = "<insert-your-client-secret>",
                ),
                homeConnectSecretsStore = secretsStore,
            )

}

Add the HomeConnectModule to your AppComponent and then you can inject the client wherever you need it.

Authorization

There is a helper class called HomeConnectAuthorization for managing the initial authorization flow where the user has to provide his Home Connect credentials. Example usage with Lifecycle from architecture components:

class HomeConnectAuthorizationFragment : Fragment(R.layout.fragment_home_connect_authorization) {

    private var homeConnectAuthorization: HomeConnectAuthorization? = null

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        val webView = view.findViewById<WebView>(R.id.web_view)
        viewLifecycleOwner.lifecycleScope.launch {
            try {
                homeConnectAuthorization = HomeConnectAuthorization()
                homeConnectAuthorization.authorize(webView, savedInstanceState, onRequestAccessTokenStarted = ::showLoadingIndicator)
                hideLoadingIndicator()
                // user is authorized now
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
    }

    override fun onSaveInstanceState(outState: Bundle) {
        val webView = requireView().findViewById<WebView>(R.id.web_view)
        homeConnectAuthorization?.saveInstanceState(webView, outState)
        super.onSaveInstanceState(outState)
    }

    override fun onDestroyView() {
        super.onDestroyView()
        homeConnectAuthorization = null
    }

}

Before starting the authorization flow, you should check with HomeConnectClient.isAuthorized whether the user is authorized already.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages