From 1ec669db9d41be30aeab41aa656aa825f4634e3d Mon Sep 17 00:00:00 2001 From: Cedrick Flocon <7161169+CedrickFlocon@users.noreply.github.com> Date: Tue, 5 Nov 2019 00:51:29 +0100 Subject: [PATCH] [PLAYSTORE] release to playstore (#13) * change package name * Use gradle to publish on the store --- .travis.yml | 12 +++---- .travis/before_install.sh | 13 ++++++++ .travis/mock-google-services.json | 24 ++++++++++++++ .travis/script.sh | 19 +++++++++++ .travis/secrets.tar.enc | Bin 0 -> 16912 bytes app/build.gradle | 31 ++++++++++++++++-- app/src/main/AndroidManifest.xml | 4 +-- .../homeassistant/android/webview/WebView.kt | 12 ------- .../android}/HomeAssistantApplication.kt | 4 +-- .../android/api/AuthenticationService.kt | 2 +- .../android/api/AuthorizationCode.kt | 2 +- .../android/api/HomeAssistantApi.kt | 4 +-- .../android/api/RefreshToken.kt | 2 +- .../{ => companion}/android/api/Session.kt | 3 +- .../{ => companion}/android/api/Token.kt | 2 +- .../android/launch/LaunchActivity.kt | 8 ++--- .../android/onboarding/DiscoveryFragment.kt | 4 +-- .../android/onboarding/DiscoveryListener.kt | 2 +- .../android/onboarding/ManualSetupFragment.kt | 4 +-- .../android/onboarding/ManualSetupListener.kt | 2 +- .../android/onboarding/OnboardingActivity.kt | 17 +++++----- .../authentication/AuthenticationFragment.kt | 4 +-- .../authentication/AuthenticationListener.kt | 2 +- .../authentication/AuthenticationPresenter.kt | 2 +- .../AuthenticationPresenterImpl.kt | 10 +++--- .../authentication/AuthenticationView.kt | 2 +- .../android/settings/SettingsActivity.kt | 6 ++-- .../companion/android/webview/WebView.kt | 12 +++++++ .../android/webview/WebViewActivity.kt | 14 ++++---- .../android/webview/WebViewPresenter.kt | 2 +- .../android/webview/WebViewPresenterImpl.kt | 10 +++--- travis/secrets.tar.enc | Bin 7696 -> 0 bytes 32 files changed, 157 insertions(+), 78 deletions(-) create mode 100644 .travis/before_install.sh create mode 100644 .travis/mock-google-services.json create mode 100644 .travis/script.sh create mode 100644 .travis/secrets.tar.enc delete mode 100644 app/src/main/java/io/homeassistant/android/webview/WebView.kt rename app/src/main/java/{ => io/homeassistant/companion/android}/HomeAssistantApplication.kt (63%) rename app/src/main/java/io/homeassistant/{ => companion}/android/api/AuthenticationService.kt (94%) rename app/src/main/java/io/homeassistant/{ => companion}/android/api/AuthorizationCode.kt (87%) rename app/src/main/java/io/homeassistant/{ => companion}/android/api/HomeAssistantApi.kt (88%) rename app/src/main/java/io/homeassistant/{ => companion}/android/api/RefreshToken.kt (84%) rename app/src/main/java/io/homeassistant/{ => companion}/android/api/Session.kt (96%) rename app/src/main/java/io/homeassistant/{ => companion}/android/api/Token.kt (81%) rename app/src/main/java/io/homeassistant/{ => companion}/android/launch/LaunchActivity.kt (65%) rename app/src/main/java/io/homeassistant/{ => companion}/android/onboarding/DiscoveryFragment.kt (93%) rename app/src/main/java/io/homeassistant/{ => companion}/android/onboarding/DiscoveryListener.kt (64%) rename app/src/main/java/io/homeassistant/{ => companion}/android/onboarding/ManualSetupFragment.kt (89%) rename app/src/main/java/io/homeassistant/{ => companion}/android/onboarding/ManualSetupListener.kt (55%) rename app/src/main/java/io/homeassistant/{ => companion}/android/onboarding/OnboardingActivity.kt (69%) rename app/src/main/java/io/homeassistant/{ => companion}/android/onboarding/authentication/AuthenticationFragment.kt (94%) rename app/src/main/java/io/homeassistant/{ => companion}/android/onboarding/authentication/AuthenticationListener.kt (55%) rename app/src/main/java/io/homeassistant/{ => companion}/android/onboarding/authentication/AuthenticationPresenter.kt (67%) rename app/src/main/java/io/homeassistant/{ => companion}/android/onboarding/authentication/AuthenticationPresenterImpl.kt (87%) rename app/src/main/java/io/homeassistant/{ => companion}/android/onboarding/authentication/AuthenticationView.kt (59%) rename app/src/main/java/io/homeassistant/{ => companion}/android/settings/SettingsActivity.kt (81%) create mode 100644 app/src/main/java/io/homeassistant/companion/android/webview/WebView.kt rename app/src/main/java/io/homeassistant/{ => companion}/android/webview/WebViewActivity.kt (90%) rename app/src/main/java/io/homeassistant/{ => companion}/android/webview/WebViewPresenter.kt (66%) rename app/src/main/java/io/homeassistant/{ => companion}/android/webview/WebViewPresenterImpl.kt (84%) delete mode 100644 travis/secrets.tar.enc diff --git a/.travis.yml b/.travis.yml index 50e84b152fb..3417fbdd482 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,10 +2,8 @@ language: android dist: trusty before_install: - - openssl aes-256-cbc -K $encrypted_a039e732823a_key -iv $encrypted_a039e732823a_iv -in travis/secrets.tar.enc -out travis/secrets.tar -d - - tar xvf travis/secrets.tar - - cp travis/google-services.json app/google-services.json - - cp travis/home-assistant-mobile-apps-5fd6b9dd0fdb.json serviceCredentialsFile.json + - chmod ugo+x .travis/before_install.sh + - ./.travis/before_install.sh android: components: @@ -23,7 +21,5 @@ cache: - $HOME/.android/build-cache script: - - echo $TRAVIS_COMMIT_MESSAGE > CHANGES.md - - export VERSION_CODE=`git rev-list --count HEAD` - - 'if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then bash ./gradlew testReleaseUnitTest; fi' - - 'if [ "$TRAVIS_BRANCH" = "master" ]; then bash ./gradlew assembleRelease appDistributionUploadRelease; fi' \ No newline at end of file + - chmod ugo+x .travis/script.sh + - ./.travis/script.sh \ No newline at end of file diff --git a/.travis/before_install.sh b/.travis/before_install.sh new file mode 100644 index 00000000000..03f1e08eeb6 --- /dev/null +++ b/.travis/before_install.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +if [ "$TRAVIS_PULL_REQUEST" = "false" ] +then + openssl aes-256-cbc -K $encrypted_6c4fc944fe71_key -iv $encrypted_6c4fc944fe71_iv -in .travis/secrets.tar.enc -out .travis/secrets.tar -d + tar xvf .travis/secrets.tar + mv google-services.json app/google-services.json + mv upload_keystore.keystore app/release_keystore.keystore + mv home-assistant-mobile-apps-5fd6b9dd0fdb.json app/firebaseAppDistributionServiceCredentialsFile.json + mv home-assistant-mobile-apps-0b13292f44c4.json app/playStorePublishServiceCredentialsFile.json +else + mv .travis/mock-google-services.json app/google-services.json +fi \ No newline at end of file diff --git a/.travis/mock-google-services.json b/.travis/mock-google-services.json new file mode 100644 index 00000000000..060ae6ceb58 --- /dev/null +++ b/.travis/mock-google-services.json @@ -0,0 +1,24 @@ +{ + "project_info": { + "project_number": "project_number", + "firebase_url": "firebase_url", + "project_id": "project_id", + "storage_bucket": "storage_bucket" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "mobilesdk_app_id", + "android_client_info": { + "package_name": "io.homeassistant.companion.android" + } + }, + "api_key": [ + { + "current_key": "current_key" + } + ] + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/.travis/script.sh b/.travis/script.sh new file mode 100644 index 00000000000..f155a5ff762 --- /dev/null +++ b/.travis/script.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +echo $TRAVIS_COMMIT_MESSAGE > CHANGES.md +export VERSION_CODE=`git rev-list --count HEAD` + +if [ "$TRAVIS_PULL_REQUEST" = "false" ] +then + if [ "$TRAVIS_BRANCH" = "master" ] + then + ./gradlew assembleRelease appDistributionUploadRelease + + if [ -n "$TRAVIS_TAG" ] + then + ./gradlew publishReleaseBundle + fi + fi +else + ./gradlew testReleaseUnitTest +fi \ No newline at end of file diff --git a/.travis/secrets.tar.enc b/.travis/secrets.tar.enc new file mode 100644 index 0000000000000000000000000000000000000000..97a66090d52441016cbce71ce542780e53f04c84 GIT binary patch literal 16912 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 biVnwFcn%&8VYRNW5cr4cE$h#+d#7AxLQU~G literal 0 HcmV?d00001 diff --git a/app/build.gradle b/app/build.gradle index cecbea540fe..a0470a368c2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,16 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'com.google.firebase.appdistribution' +apply plugin: 'com.github.triplet.play' buildscript { repositories { google() + maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath 'com.google.firebase:firebase-appdistribution-gradle:1.1.0' + classpath 'com.github.triplet.gradle:play-publisher:2.5.0' } } @@ -15,7 +18,7 @@ android { compileSdkVersion 29 defaultConfig { - applicationId "io.homeassistant.android" + applicationId "io.homeassistant.companion.android" minSdkVersion 21 targetSdkVersion 29 versionCode "${System.env.VERSION_CODE ?: 1}".toInteger() @@ -23,9 +26,33 @@ android { } firebaseAppDistribution { - serviceCredentialsFile = "serviceCredentialsFile.json" + serviceCredentialsFile = "firebaseAppDistributionServiceCredentialsFile.json" releaseNotesFile = "CHANGES.md" } + + signingConfigs { + release { + storeFile file('release_keystore.keystore') + storePassword "${System.env.KEYSTORE_PASSWORD ?: ""}" + keyAlias "$System.env.KEYSTORE_ALIAS" ?: "" + keyPassword "${System.env.KEYSTORE_ALIAS_PASSWORD ?: ""}" + v1SigningEnabled true + v2SigningEnabled true + } + } + + buildTypes { + release { + debuggable false + jniDebuggable false + zipAlignEnabled true + signingConfig signingConfigs.release + } + } +} + +play { + serviceAccountCredentials = file("playStorePublishServiceCredentialsFile.json") } dependencies { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1f991ccff8f..6dfd9667163 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ + package="io.homeassistant.companion.android"> @@ -15,7 +15,7 @@ android:usesCleartextTraffic="true" tools:ignore="GoogleAppIndexingWarning"> - + diff --git a/app/src/main/java/io/homeassistant/android/webview/WebView.kt b/app/src/main/java/io/homeassistant/android/webview/WebView.kt deleted file mode 100644 index e79f59535e7..00000000000 --- a/app/src/main/java/io/homeassistant/android/webview/WebView.kt +++ /dev/null @@ -1,12 +0,0 @@ -package io.homeassistant.android.webview - -import io.homeassistant.android.io.homeassistant.android.api.Token - - -interface WebView { - - fun loadUrl(url: String) - - fun setToken(callback: String, token: Token) - -} diff --git a/app/src/main/java/HomeAssistantApplication.kt b/app/src/main/java/io/homeassistant/companion/android/HomeAssistantApplication.kt similarity index 63% rename from app/src/main/java/HomeAssistantApplication.kt rename to app/src/main/java/io/homeassistant/companion/android/HomeAssistantApplication.kt index e5de7d2cd08..a5da9f0b797 100644 --- a/app/src/main/java/HomeAssistantApplication.kt +++ b/app/src/main/java/io/homeassistant/companion/android/HomeAssistantApplication.kt @@ -1,7 +1,7 @@ -package io.homeassistant.android +package io.homeassistant.companion.android import android.app.Application -import io.homeassistant.android.api.Session +import io.homeassistant.companion.android.api.Session class HomeAssistantApplication : Application() { diff --git a/app/src/main/java/io/homeassistant/android/api/AuthenticationService.kt b/app/src/main/java/io/homeassistant/companion/android/api/AuthenticationService.kt similarity index 94% rename from app/src/main/java/io/homeassistant/android/api/AuthenticationService.kt rename to app/src/main/java/io/homeassistant/companion/android/api/AuthenticationService.kt index d72edc9b099..aaebd330f9c 100644 --- a/app/src/main/java/io/homeassistant/android/api/AuthenticationService.kt +++ b/app/src/main/java/io/homeassistant/companion/android/api/AuthenticationService.kt @@ -1,4 +1,4 @@ -package io.homeassistant.android.api +package io.homeassistant.companion.android.api import retrofit2.Call import retrofit2.http.Field diff --git a/app/src/main/java/io/homeassistant/android/api/AuthorizationCode.kt b/app/src/main/java/io/homeassistant/companion/android/api/AuthorizationCode.kt similarity index 87% rename from app/src/main/java/io/homeassistant/android/api/AuthorizationCode.kt rename to app/src/main/java/io/homeassistant/companion/android/api/AuthorizationCode.kt index 9ccb011a207..e2646c48cf8 100644 --- a/app/src/main/java/io/homeassistant/android/api/AuthorizationCode.kt +++ b/app/src/main/java/io/homeassistant/companion/android/api/AuthorizationCode.kt @@ -1,4 +1,4 @@ -package io.homeassistant.android.api +package io.homeassistant.companion.android.api import com.fasterxml.jackson.annotation.JsonProperty diff --git a/app/src/main/java/io/homeassistant/android/api/HomeAssistantApi.kt b/app/src/main/java/io/homeassistant/companion/android/api/HomeAssistantApi.kt similarity index 88% rename from app/src/main/java/io/homeassistant/android/api/HomeAssistantApi.kt rename to app/src/main/java/io/homeassistant/companion/android/api/HomeAssistantApi.kt index 4dc24a09501..24e5ae9b475 100644 --- a/app/src/main/java/io/homeassistant/android/api/HomeAssistantApi.kt +++ b/app/src/main/java/io/homeassistant/companion/android/api/HomeAssistantApi.kt @@ -1,6 +1,6 @@ -package io.homeassistant.android.api +package io.homeassistant.companion.android.api -import io.homeassistant.android.BuildConfig +import io.homeassistant.companion.android.BuildConfig import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit diff --git a/app/src/main/java/io/homeassistant/android/api/RefreshToken.kt b/app/src/main/java/io/homeassistant/companion/android/api/RefreshToken.kt similarity index 84% rename from app/src/main/java/io/homeassistant/android/api/RefreshToken.kt rename to app/src/main/java/io/homeassistant/companion/android/api/RefreshToken.kt index aa60f0a6f66..53b6ce7be92 100644 --- a/app/src/main/java/io/homeassistant/android/api/RefreshToken.kt +++ b/app/src/main/java/io/homeassistant/companion/android/api/RefreshToken.kt @@ -1,4 +1,4 @@ -package io.homeassistant.android.api +package io.homeassistant.companion.android.api import com.fasterxml.jackson.annotation.JsonProperty diff --git a/app/src/main/java/io/homeassistant/android/api/Session.kt b/app/src/main/java/io/homeassistant/companion/android/api/Session.kt similarity index 96% rename from app/src/main/java/io/homeassistant/android/api/Session.kt rename to app/src/main/java/io/homeassistant/companion/android/api/Session.kt index b91d675922a..d6c9b3cd7e5 100644 --- a/app/src/main/java/io/homeassistant/android/api/Session.kt +++ b/app/src/main/java/io/homeassistant/companion/android/api/Session.kt @@ -1,8 +1,7 @@ -package io.homeassistant.android.api +package io.homeassistant.companion.android.api import android.app.Application import android.content.Context -import io.homeassistant.android.io.homeassistant.android.api.Token import java.util.* diff --git a/app/src/main/java/io/homeassistant/android/api/Token.kt b/app/src/main/java/io/homeassistant/companion/android/api/Token.kt similarity index 81% rename from app/src/main/java/io/homeassistant/android/api/Token.kt rename to app/src/main/java/io/homeassistant/companion/android/api/Token.kt index 7e81f142307..a5b95b9e02d 100644 --- a/app/src/main/java/io/homeassistant/android/api/Token.kt +++ b/app/src/main/java/io/homeassistant/companion/android/api/Token.kt @@ -1,4 +1,4 @@ -package io.homeassistant.android.io.homeassistant.android.api +package io.homeassistant.companion.android.api import java.util.* diff --git a/app/src/main/java/io/homeassistant/android/launch/LaunchActivity.kt b/app/src/main/java/io/homeassistant/companion/android/launch/LaunchActivity.kt similarity index 65% rename from app/src/main/java/io/homeassistant/android/launch/LaunchActivity.kt rename to app/src/main/java/io/homeassistant/companion/android/launch/LaunchActivity.kt index 2debe200ceb..f5a9b1c3e66 100644 --- a/app/src/main/java/io/homeassistant/android/launch/LaunchActivity.kt +++ b/app/src/main/java/io/homeassistant/companion/android/launch/LaunchActivity.kt @@ -1,10 +1,10 @@ -package io.homeassistant.android.io.homeassistant.android.launch +package io.homeassistant.companion.android.launch import android.os.Bundle import androidx.appcompat.app.AppCompatActivity -import io.homeassistant.android.api.Session -import io.homeassistant.android.onboarding.OnboardingActivity -import io.homeassistant.android.webview.WebViewActivity +import io.homeassistant.companion.android.api.Session +import io.homeassistant.companion.android.onboarding.OnboardingActivity +import io.homeassistant.companion.android.webview.WebViewActivity class LaunchActivity : AppCompatActivity() { diff --git a/app/src/main/java/io/homeassistant/android/onboarding/DiscoveryFragment.kt b/app/src/main/java/io/homeassistant/companion/android/onboarding/DiscoveryFragment.kt similarity index 93% rename from app/src/main/java/io/homeassistant/android/onboarding/DiscoveryFragment.kt rename to app/src/main/java/io/homeassistant/companion/android/onboarding/DiscoveryFragment.kt index 580d853688b..9fe39900d80 100644 --- a/app/src/main/java/io/homeassistant/android/onboarding/DiscoveryFragment.kt +++ b/app/src/main/java/io/homeassistant/companion/android/onboarding/DiscoveryFragment.kt @@ -1,4 +1,4 @@ -package io.homeassistant.android.onboarding +package io.homeassistant.companion.android.onboarding import android.os.Bundle import android.os.Handler @@ -8,7 +8,7 @@ import android.view.ViewGroup import android.widget.Button import android.widget.ViewFlipper import androidx.fragment.app.Fragment -import io.homeassistant.android.R +import io.homeassistant.companion.android.R class DiscoveryFragment : Fragment() { diff --git a/app/src/main/java/io/homeassistant/android/onboarding/DiscoveryListener.kt b/app/src/main/java/io/homeassistant/companion/android/onboarding/DiscoveryListener.kt similarity index 64% rename from app/src/main/java/io/homeassistant/android/onboarding/DiscoveryListener.kt rename to app/src/main/java/io/homeassistant/companion/android/onboarding/DiscoveryListener.kt index 793c9a22d1e..a3d0cd36c95 100644 --- a/app/src/main/java/io/homeassistant/android/onboarding/DiscoveryListener.kt +++ b/app/src/main/java/io/homeassistant/companion/android/onboarding/DiscoveryListener.kt @@ -1,4 +1,4 @@ -package io.homeassistant.android.onboarding +package io.homeassistant.companion.android.onboarding interface DiscoveryListener { diff --git a/app/src/main/java/io/homeassistant/android/onboarding/ManualSetupFragment.kt b/app/src/main/java/io/homeassistant/companion/android/onboarding/ManualSetupFragment.kt similarity index 89% rename from app/src/main/java/io/homeassistant/android/onboarding/ManualSetupFragment.kt rename to app/src/main/java/io/homeassistant/companion/android/onboarding/ManualSetupFragment.kt index b405dbbbc98..3469b20a48d 100644 --- a/app/src/main/java/io/homeassistant/android/onboarding/ManualSetupFragment.kt +++ b/app/src/main/java/io/homeassistant/companion/android/onboarding/ManualSetupFragment.kt @@ -1,4 +1,4 @@ -package io.homeassistant.android.onboarding +package io.homeassistant.companion.android.onboarding import android.os.Bundle import android.view.LayoutInflater @@ -7,7 +7,7 @@ import android.view.ViewGroup import android.widget.Button import android.widget.EditText import androidx.fragment.app.Fragment -import io.homeassistant.android.R +import io.homeassistant.companion.android.R class ManualSetupFragment : Fragment() { diff --git a/app/src/main/java/io/homeassistant/android/onboarding/ManualSetupListener.kt b/app/src/main/java/io/homeassistant/companion/android/onboarding/ManualSetupListener.kt similarity index 55% rename from app/src/main/java/io/homeassistant/android/onboarding/ManualSetupListener.kt rename to app/src/main/java/io/homeassistant/companion/android/onboarding/ManualSetupListener.kt index fea08bceaea..911adfc74cd 100644 --- a/app/src/main/java/io/homeassistant/android/onboarding/ManualSetupListener.kt +++ b/app/src/main/java/io/homeassistant/companion/android/onboarding/ManualSetupListener.kt @@ -1,4 +1,4 @@ -package io.homeassistant.android.onboarding +package io.homeassistant.companion.android.onboarding interface ManualSetupListener { diff --git a/app/src/main/java/io/homeassistant/android/onboarding/OnboardingActivity.kt b/app/src/main/java/io/homeassistant/companion/android/onboarding/OnboardingActivity.kt similarity index 69% rename from app/src/main/java/io/homeassistant/android/onboarding/OnboardingActivity.kt rename to app/src/main/java/io/homeassistant/companion/android/onboarding/OnboardingActivity.kt index 7fdb1f1421d..f844c378ff0 100644 --- a/app/src/main/java/io/homeassistant/android/onboarding/OnboardingActivity.kt +++ b/app/src/main/java/io/homeassistant/companion/android/onboarding/OnboardingActivity.kt @@ -1,12 +1,13 @@ -package io.homeassistant.android.onboarding +package io.homeassistant.companion.android.onboarding import android.content.Context import android.content.Intent import android.os.Bundle import androidx.appcompat.app.AppCompatActivity -import io.homeassistant.android.onboarding.authentication.AuthenticationFragment -import io.homeassistant.android.onboarding.authentication.AuthenticationListener -import io.homeassistant.android.webview.WebViewActivity +import io.homeassistant.companion.android.R +import io.homeassistant.companion.android.onboarding.authentication.AuthenticationFragment +import io.homeassistant.companion.android.onboarding.authentication.AuthenticationListener +import io.homeassistant.companion.android.webview.WebViewActivity class OnboardingActivity : AppCompatActivity(), DiscoveryListener, ManualSetupListener, AuthenticationListener { @@ -21,12 +22,12 @@ class OnboardingActivity : AppCompatActivity(), DiscoveryListener, ManualSetupLi override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(io.homeassistant.android.R.layout.activity_onboarding) + setContentView(R.layout.activity_onboarding) if (savedInstanceState == null) { supportFragmentManager .beginTransaction() - .add(io.homeassistant.android.R.id.content, DiscoveryFragment.newInstance()) + .add(R.id.content, DiscoveryFragment.newInstance()) .commit() } } @@ -42,7 +43,7 @@ class OnboardingActivity : AppCompatActivity(), DiscoveryListener, ManualSetupLi override fun onSelectManualSetup() { supportFragmentManager .beginTransaction() - .replace(io.homeassistant.android.R.id.content, ManualSetupFragment.newInstance()) + .replace(R.id.content, ManualSetupFragment.newInstance()) .commit() } @@ -53,7 +54,7 @@ class OnboardingActivity : AppCompatActivity(), DiscoveryListener, ManualSetupLi override fun onSelectUrl(url: String) { supportFragmentManager .beginTransaction() - .replace(io.homeassistant.android.R.id.content, AuthenticationFragment.newInstance(url)) + .replace(R.id.content, AuthenticationFragment.newInstance(url)) .commit() } diff --git a/app/src/main/java/io/homeassistant/android/onboarding/authentication/AuthenticationFragment.kt b/app/src/main/java/io/homeassistant/companion/android/onboarding/authentication/AuthenticationFragment.kt similarity index 94% rename from app/src/main/java/io/homeassistant/android/onboarding/authentication/AuthenticationFragment.kt rename to app/src/main/java/io/homeassistant/companion/android/onboarding/authentication/AuthenticationFragment.kt index fb5aeb6386d..4dda91c8fbd 100644 --- a/app/src/main/java/io/homeassistant/android/onboarding/authentication/AuthenticationFragment.kt +++ b/app/src/main/java/io/homeassistant/companion/android/onboarding/authentication/AuthenticationFragment.kt @@ -1,4 +1,4 @@ -package io.homeassistant.android.onboarding.authentication +package io.homeassistant.companion.android.onboarding.authentication import android.os.Bundle import android.view.LayoutInflater @@ -7,7 +7,7 @@ import android.view.ViewGroup import android.webkit.WebView import android.webkit.WebViewClient import androidx.fragment.app.Fragment -import io.homeassistant.android.R +import io.homeassistant.companion.android.R class AuthenticationFragment : Fragment(), AuthenticationView { diff --git a/app/src/main/java/io/homeassistant/android/onboarding/authentication/AuthenticationListener.kt b/app/src/main/java/io/homeassistant/companion/android/onboarding/authentication/AuthenticationListener.kt similarity index 55% rename from app/src/main/java/io/homeassistant/android/onboarding/authentication/AuthenticationListener.kt rename to app/src/main/java/io/homeassistant/companion/android/onboarding/authentication/AuthenticationListener.kt index 639fa6f0b7f..4f09570dc3b 100644 --- a/app/src/main/java/io/homeassistant/android/onboarding/authentication/AuthenticationListener.kt +++ b/app/src/main/java/io/homeassistant/companion/android/onboarding/authentication/AuthenticationListener.kt @@ -1,4 +1,4 @@ -package io.homeassistant.android.onboarding.authentication +package io.homeassistant.companion.android.onboarding.authentication interface AuthenticationListener { diff --git a/app/src/main/java/io/homeassistant/android/onboarding/authentication/AuthenticationPresenter.kt b/app/src/main/java/io/homeassistant/companion/android/onboarding/authentication/AuthenticationPresenter.kt similarity index 67% rename from app/src/main/java/io/homeassistant/android/onboarding/authentication/AuthenticationPresenter.kt rename to app/src/main/java/io/homeassistant/companion/android/onboarding/authentication/AuthenticationPresenter.kt index 703ad56fbf5..ea64ce73e2f 100644 --- a/app/src/main/java/io/homeassistant/android/onboarding/authentication/AuthenticationPresenter.kt +++ b/app/src/main/java/io/homeassistant/companion/android/onboarding/authentication/AuthenticationPresenter.kt @@ -1,4 +1,4 @@ -package io.homeassistant.android.onboarding.authentication +package io.homeassistant.companion.android.onboarding.authentication interface AuthenticationPresenter { diff --git a/app/src/main/java/io/homeassistant/android/onboarding/authentication/AuthenticationPresenterImpl.kt b/app/src/main/java/io/homeassistant/companion/android/onboarding/authentication/AuthenticationPresenterImpl.kt similarity index 87% rename from app/src/main/java/io/homeassistant/android/onboarding/authentication/AuthenticationPresenterImpl.kt rename to app/src/main/java/io/homeassistant/companion/android/onboarding/authentication/AuthenticationPresenterImpl.kt index ecd94b43702..a5778c357ba 100644 --- a/app/src/main/java/io/homeassistant/android/onboarding/authentication/AuthenticationPresenterImpl.kt +++ b/app/src/main/java/io/homeassistant/companion/android/onboarding/authentication/AuthenticationPresenterImpl.kt @@ -1,11 +1,11 @@ -package io.homeassistant.android.onboarding.authentication +package io.homeassistant.companion.android.onboarding.authentication import android.net.Uri import android.util.Log -import io.homeassistant.android.api.AuthenticationService -import io.homeassistant.android.api.HomeAssistantApi -import io.homeassistant.android.api.Session -import io.homeassistant.android.api.AuthorizationCode +import io.homeassistant.companion.android.api.AuthenticationService +import io.homeassistant.companion.android.api.HomeAssistantApi +import io.homeassistant.companion.android.api.Session +import io.homeassistant.companion.android.api.AuthorizationCode import retrofit2.Call import retrofit2.Response diff --git a/app/src/main/java/io/homeassistant/android/onboarding/authentication/AuthenticationView.kt b/app/src/main/java/io/homeassistant/companion/android/onboarding/authentication/AuthenticationView.kt similarity index 59% rename from app/src/main/java/io/homeassistant/android/onboarding/authentication/AuthenticationView.kt rename to app/src/main/java/io/homeassistant/companion/android/onboarding/authentication/AuthenticationView.kt index 43b9d517ba7..c81edf79f38 100644 --- a/app/src/main/java/io/homeassistant/android/onboarding/authentication/AuthenticationView.kt +++ b/app/src/main/java/io/homeassistant/companion/android/onboarding/authentication/AuthenticationView.kt @@ -1,4 +1,4 @@ -package io.homeassistant.android.onboarding.authentication +package io.homeassistant.companion.android.onboarding.authentication interface AuthenticationView { diff --git a/app/src/main/java/io/homeassistant/android/settings/SettingsActivity.kt b/app/src/main/java/io/homeassistant/companion/android/settings/SettingsActivity.kt similarity index 81% rename from app/src/main/java/io/homeassistant/android/settings/SettingsActivity.kt rename to app/src/main/java/io/homeassistant/companion/android/settings/SettingsActivity.kt index 0c5d8d5b9fa..d04770f33db 100644 --- a/app/src/main/java/io/homeassistant/android/settings/SettingsActivity.kt +++ b/app/src/main/java/io/homeassistant/companion/android/settings/SettingsActivity.kt @@ -1,12 +1,12 @@ -package io.homeassistant.android.settings +package io.homeassistant.companion.android.settings import android.content.Context import android.content.Intent import android.os.Bundle import android.widget.TextView import androidx.appcompat.app.AppCompatActivity -import io.homeassistant.android.BuildConfig -import io.homeassistant.android.R +import io.homeassistant.companion.android.BuildConfig +import io.homeassistant.companion.android.R class SettingsActivity : AppCompatActivity() { diff --git a/app/src/main/java/io/homeassistant/companion/android/webview/WebView.kt b/app/src/main/java/io/homeassistant/companion/android/webview/WebView.kt new file mode 100644 index 00000000000..e9729444260 --- /dev/null +++ b/app/src/main/java/io/homeassistant/companion/android/webview/WebView.kt @@ -0,0 +1,12 @@ +package io.homeassistant.companion.android.webview + +import io.homeassistant.companion.android.api.Token + + +interface WebView { + + fun loadUrl(url: String) + + fun setToken(callback: String, token: Token) + +} diff --git a/app/src/main/java/io/homeassistant/android/webview/WebViewActivity.kt b/app/src/main/java/io/homeassistant/companion/android/webview/WebViewActivity.kt similarity index 90% rename from app/src/main/java/io/homeassistant/android/webview/WebViewActivity.kt rename to app/src/main/java/io/homeassistant/companion/android/webview/WebViewActivity.kt index e8a3312c72d..003950b9944 100644 --- a/app/src/main/java/io/homeassistant/android/webview/WebViewActivity.kt +++ b/app/src/main/java/io/homeassistant/companion/android/webview/WebViewActivity.kt @@ -1,4 +1,4 @@ -package io.homeassistant.android.webview +package io.homeassistant.companion.android.webview import android.content.Context import android.content.Intent @@ -9,15 +9,15 @@ import android.webkit.JavascriptInterface import android.webkit.WebView import android.webkit.WebViewClient import androidx.appcompat.app.AppCompatActivity -import io.homeassistant.android.BuildConfig -import io.homeassistant.android.R -import io.homeassistant.android.settings.SettingsActivity -import io.homeassistant.android.api.Session -import io.homeassistant.android.io.homeassistant.android.api.Token +import io.homeassistant.companion.android.settings.SettingsActivity +import io.homeassistant.companion.android.api.Session +import io.homeassistant.companion.android.api.Token +import io.homeassistant.companion.android.BuildConfig +import io.homeassistant.companion.android.R import org.json.JSONObject -class WebViewActivity : AppCompatActivity(), io.homeassistant.android.webview.WebView { +class WebViewActivity : AppCompatActivity(), io.homeassistant.companion.android.webview.WebView { companion object { private const val TAG = "WebviewActivity" diff --git a/app/src/main/java/io/homeassistant/android/webview/WebViewPresenter.kt b/app/src/main/java/io/homeassistant/companion/android/webview/WebViewPresenter.kt similarity index 66% rename from app/src/main/java/io/homeassistant/android/webview/WebViewPresenter.kt rename to app/src/main/java/io/homeassistant/companion/android/webview/WebViewPresenter.kt index cf3ed350ca5..4ce3fe505aa 100644 --- a/app/src/main/java/io/homeassistant/android/webview/WebViewPresenter.kt +++ b/app/src/main/java/io/homeassistant/companion/android/webview/WebViewPresenter.kt @@ -1,4 +1,4 @@ -package io.homeassistant.android.webview +package io.homeassistant.companion.android.webview interface WebViewPresenter { diff --git a/app/src/main/java/io/homeassistant/android/webview/WebViewPresenterImpl.kt b/app/src/main/java/io/homeassistant/companion/android/webview/WebViewPresenterImpl.kt similarity index 84% rename from app/src/main/java/io/homeassistant/android/webview/WebViewPresenterImpl.kt rename to app/src/main/java/io/homeassistant/companion/android/webview/WebViewPresenterImpl.kt index 5a757bca64c..131af7517d7 100644 --- a/app/src/main/java/io/homeassistant/android/webview/WebViewPresenterImpl.kt +++ b/app/src/main/java/io/homeassistant/companion/android/webview/WebViewPresenterImpl.kt @@ -1,10 +1,10 @@ -package io.homeassistant.android.webview +package io.homeassistant.companion.android.webview import android.util.Log -import io.homeassistant.android.api.AuthenticationService -import io.homeassistant.android.api.HomeAssistantApi -import io.homeassistant.android.api.RefreshToken -import io.homeassistant.android.api.Session +import io.homeassistant.companion.android.api.AuthenticationService +import io.homeassistant.companion.android.api.HomeAssistantApi +import io.homeassistant.companion.android.api.RefreshToken +import io.homeassistant.companion.android.api.Session import retrofit2.Response import java.io.IOException diff --git a/travis/secrets.tar.enc b/travis/secrets.tar.enc deleted file mode 100644 index ffdd159ca2534573d13a930dd2033b2c15f2fb63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7696 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 KxJp;;4JJ>4qt?U#