From 9a4d00f05df3f9b460bb32937ac8210cae8e3c30 Mon Sep 17 00:00:00 2001 From: dmiales Date: Fri, 24 Feb 2023 22:31:53 +0300 Subject: [PATCH] Feature/screen orientation (#3362) * feature/landscape add setting for fix landscape orientation * feature/landscape add setting for fix screen orientation * feature/screen_orientation code review * feature/screen_orientation code review --- .../android/settings/SettingsPresenterImpl.kt | 2 ++ .../companion/android/webview/WebViewActivity.kt | 7 +++++++ .../companion/android/webview/WebViewPresenter.kt | 2 ++ .../companion/android/webview/WebViewPresenterImpl.kt | 4 ++++ app/src/main/res/drawable/ic_screen_orientation.xml | 9 +++++++++ app/src/main/res/values/arrays.xml | 10 ++++++++++ app/src/main/res/xml/preferences.xml | 8 ++++++++ .../android/common/data/prefs/PrefsRepository.kt | 4 ++++ .../android/common/data/prefs/PrefsRepositoryImpl.kt | 9 +++++++++ common/src/main/res/values/strings.xml | 7 +++++++ 10 files changed, 62 insertions(+) create mode 100644 app/src/main/res/drawable/ic_screen_orientation.xml diff --git a/app/src/main/java/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt b/app/src/main/java/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt index 0868f316e..e213ea46a 100644 --- a/app/src/main/java/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt +++ b/app/src/main/java/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt @@ -81,6 +81,7 @@ class SettingsPresenterImpl @Inject constructor( when (key) { "themes" -> themesManager.getCurrentTheme() "languages" -> langsManager.getCurrentLang() + "screen_orientation" -> prefsRepository.getScreenOrientation() else -> throw IllegalArgumentException("No string found by this key: $key") } } @@ -90,6 +91,7 @@ class SettingsPresenterImpl @Inject constructor( when (key) { "themes" -> themesManager.saveTheme(value) "languages" -> langsManager.saveLang(value) + "screen_orientation" -> prefsRepository.saveScreenOrientation(value) else -> throw IllegalArgumentException("No string found by this key: $key") } } diff --git a/app/src/main/java/io/homeassistant/companion/android/webview/WebViewActivity.kt b/app/src/main/java/io/homeassistant/companion/android/webview/WebViewActivity.kt index 6db63599e..7a74443d5 100644 --- a/app/src/main/java/io/homeassistant/companion/android/webview/WebViewActivity.kt +++ b/app/src/main/java/io/homeassistant/companion/android/webview/WebViewActivity.kt @@ -6,6 +6,7 @@ import android.app.PictureInPictureParams import android.content.ActivityNotFoundException import android.content.Context import android.content.Intent +import android.content.pm.ActivityInfo import android.content.pm.PackageManager import android.content.res.Configuration import android.graphics.Color @@ -762,6 +763,12 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi WebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG || presenter.isWebViewDebugEnabled()) + requestedOrientation = when (presenter.getScreenOrientation()) { + getString(commonR.string.screen_orientation_option_value_portrait) -> ActivityInfo.SCREEN_ORIENTATION_PORTRAIT + getString(commonR.string.screen_orientation_option_value_landscape) -> ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE + else -> ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED + } + if (presenter.isKeepScreenOnEnabled()) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) else diff --git a/app/src/main/java/io/homeassistant/companion/android/webview/WebViewPresenter.kt b/app/src/main/java/io/homeassistant/companion/android/webview/WebViewPresenter.kt index f357d2e97..0ea1e63fc 100644 --- a/app/src/main/java/io/homeassistant/companion/android/webview/WebViewPresenter.kt +++ b/app/src/main/java/io/homeassistant/companion/android/webview/WebViewPresenter.kt @@ -25,6 +25,8 @@ interface WebViewPresenter { fun isFullScreen(): Boolean + fun getScreenOrientation(): String? + fun isKeepScreenOnEnabled(): Boolean fun isPinchToZoomEnabled(): Boolean diff --git a/app/src/main/java/io/homeassistant/companion/android/webview/WebViewPresenterImpl.kt b/app/src/main/java/io/homeassistant/companion/android/webview/WebViewPresenterImpl.kt index 266b96483..b6ee070c0 100644 --- a/app/src/main/java/io/homeassistant/companion/android/webview/WebViewPresenterImpl.kt +++ b/app/src/main/java/io/homeassistant/companion/android/webview/WebViewPresenterImpl.kt @@ -212,6 +212,10 @@ class WebViewPresenterImpl @Inject constructor( prefsRepository.isFullScreenEnabled() } + override fun getScreenOrientation(): String? = runBlocking { + prefsRepository.getScreenOrientation() + } + override fun isKeepScreenOnEnabled(): Boolean = runBlocking { prefsRepository.isKeepScreenOnEnabled() } diff --git a/app/src/main/res/drawable/ic_screen_orientation.xml b/app/src/main/res/drawable/ic_screen_orientation.xml new file mode 100644 index 000000000..b389b679f --- /dev/null +++ b/app/src/main/res/drawable/ic_screen_orientation.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 9916efb10..3166a7784 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -10,6 +10,16 @@ @string/themes_option_value_light @string/themes_option_value_dark + + @string/screen_orientation_option_value_system + @string/screen_orientation_option_value_landscape + @string/screen_orientation_option_value_portrait + + + @string/screen_orientation_option_label_system + @string/screen_orientation_option_label_landscape + @string/screen_orientation_option_label_portrait + tile_1 tile_2 diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index f5b3b23e1..9114fde36 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -39,6 +39,14 @@ android:icon="@drawable/ic_fullscreen" android:title="@string/fullscreen" android:summary="@string/fullscreen_def"/> + Firebase Error Put application in full screen Fullscreen + Screen orientation + Follow System Settings + Portrait + Landscape + system + portrait + landscape Get Help Grant Permission Help