From b72423866995fabfb3bbcb198fcec055c8af6039 Mon Sep 17 00:00:00 2001 From: Sir-Photch Date: Sun, 29 Jan 2023 12:25:05 +0100 Subject: [PATCH 1/5] restricting rotation to portrait mode --- app/app/src/main/AndroidManifest.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/app/src/main/AndroidManifest.xml b/app/app/src/main/AndroidManifest.xml index 8b4ff1d2..27953fd9 100644 --- a/app/app/src/main/AndroidManifest.xml +++ b/app/app/src/main/AndroidManifest.xml @@ -43,7 +43,8 @@ + android:theme="@android:style/Theme.NoDisplay" + android:screenOrientation="portrait"> From 17a8eda910edbe97994a7e786dfd5d1ad6918a69 Mon Sep 17 00:00:00 2001 From: Sir-Photch Date: Tue, 31 Jan 2023 15:43:12 +0100 Subject: [PATCH 2/5] putting it into right activity --- app/app/src/main/AndroidManifest.xml | 3 +-- app/ui/src/main/AndroidManifest.xml | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/app/src/main/AndroidManifest.xml b/app/app/src/main/AndroidManifest.xml index 27953fd9..8b4ff1d2 100644 --- a/app/app/src/main/AndroidManifest.xml +++ b/app/app/src/main/AndroidManifest.xml @@ -43,8 +43,7 @@ + android:theme="@android:style/Theme.NoDisplay"> diff --git a/app/ui/src/main/AndroidManifest.xml b/app/ui/src/main/AndroidManifest.xml index 3aa9158b..5cb274a4 100644 --- a/app/ui/src/main/AndroidManifest.xml +++ b/app/ui/src/main/AndroidManifest.xml @@ -12,7 +12,8 @@ android:theme="@style/LauncherTheme" android:stateNotNeeded="true" android:resumeWhilePausing="true" - android:windowSoftInputMode="stateHidden|adjustResize"> + android:windowSoftInputMode="stateHidden|adjustResize" + android:screenOrientation="portrait"> From e492a4975d8e5784d55e755fcd5bd3883cc20bea Mon Sep 17 00:00:00 2001 From: Sir-Photch Date: Thu, 2 Feb 2023 21:33:12 +0100 Subject: [PATCH 3/5] adding fixedRotation to settings --- .../ui/settings/layout/LayoutSettingsScreen.kt | 9 +++++++++ .../ui/settings/layout/LayoutSettingsScreenVM.kt | 12 ++++++++++++ core/i18n/src/main/res/values/strings.xml | 2 ++ .../java/de/mm20/launcher2/preferences/Defaults.kt | 1 + core/preferences/src/main/proto/settings.proto | 1 + 5 files changed, 25 insertions(+) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/layout/LayoutSettingsScreen.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/layout/LayoutSettingsScreen.kt index 6bc64c1b..d53d034d 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/layout/LayoutSettingsScreen.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/layout/LayoutSettingsScreen.kt @@ -64,6 +64,15 @@ fun LayoutSettingsScreen() { if (it != null) viewModel.setReverseSearchResults(it) }, ) + val fixedRotation by viewModel.fixedRotation.observeAsState() + SwitchPreference( + title = stringResource(R.string.preference_layout_fixed_rotation), + summary = stringResource(R.string.preference_layout_fixed_rotation_summary), + value = fixedRotation == true, + onValueChanged = { + viewModel.setFixedRotation(it) + }, + ) } } } diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/layout/LayoutSettingsScreenVM.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/layout/LayoutSettingsScreenVM.kt index d6d7b1fc..f1b6c768 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/layout/LayoutSettingsScreenVM.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/layout/LayoutSettingsScreenVM.kt @@ -1,5 +1,6 @@ package de.mm20.launcher2.ui.settings.layout +import android.content.pm.ActivityInfo import androidx.lifecycle.ViewModel import androidx.lifecycle.asLiveData import androidx.lifecycle.viewModelScope @@ -57,4 +58,15 @@ class LayoutSettingsScreenVM: ViewModel(), KoinComponent { } } } + + val fixedRotation = dataStore.data.map { it.layout.fixedRoation }.asLiveData() + fun setFixedRotation(fixedRotation: Boolean) { + viewModelScope.launch { + dataStore.updateData { + it.toBuilder() + .setLayout(it.layout.toBuilder().setFixedRotation(fixedRotation)) + .build() + } + } + } } \ No newline at end of file diff --git a/core/i18n/src/main/res/values/strings.xml b/core/i18n/src/main/res/values/strings.xml index 2b2340d0..bb474150 100644 --- a/core/i18n/src/main/res/values/strings.xml +++ b/core/i18n/src/main/res/values/strings.xml @@ -734,6 +734,8 @@ Bottom-up Fixed search bar Don\'t scroll the search bar out of view + Fixed rotation + Lock rotation to portrait mode Gestures Gestures and gesture actions Swipe down diff --git a/core/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt b/core/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt index 31c54df8..b4287358 100644 --- a/core/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt +++ b/core/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt @@ -168,6 +168,7 @@ fun createFactorySettings(context: Context): Settings { .setBaseLayout(Settings.LayoutSettings.Layout.PullDown) .setBottomSearchBar(false) .setReverseSearchResults(false) + .setFixedRotation(false) ) .setGestures( Settings.GestureSettings.newBuilder() diff --git a/core/preferences/src/main/proto/settings.proto b/core/preferences/src/main/proto/settings.proto index afb2a63d..a8503cee 100644 --- a/core/preferences/src/main/proto/settings.proto +++ b/core/preferences/src/main/proto/settings.proto @@ -298,6 +298,7 @@ message Settings { bool bottom_search_bar = 2; bool reverse_search_results = 3; bool fixed_search_bar = 4; + bool fixed_rotation = 5; } LayoutSettings layout = 27; From 10d027951da3b2a1c2816bb4716caa35fa1564f8 Mon Sep 17 00:00:00 2001 From: Sir-Photch Date: Fri, 3 Feb 2023 22:01:18 +0100 Subject: [PATCH 4/5] adding observer that sets requestedOrientation --- app/ui/src/main/AndroidManifest.xml | 3 +-- .../mm20/launcher2/ui/launcher/LauncherScaffoldVM.kt | 1 + .../launcher2/ui/launcher/SharedLauncherActivity.kt | 11 +++++++++++ .../ui/settings/layout/LayoutSettingsScreenVM.kt | 3 +-- core/i18n/src/main/res/values-de/strings.xml | 2 ++ core/i18n/src/main/res/values/strings.xml | 4 ++-- 6 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/ui/src/main/AndroidManifest.xml b/app/ui/src/main/AndroidManifest.xml index 5cb274a4..3aa9158b 100644 --- a/app/ui/src/main/AndroidManifest.xml +++ b/app/ui/src/main/AndroidManifest.xml @@ -12,8 +12,7 @@ android:theme="@style/LauncherTheme" android:stateNotNeeded="true" android:resumeWhilePausing="true" - android:windowSoftInputMode="stateHidden|adjustResize" - android:screenOrientation="portrait"> + android:windowSoftInputMode="stateHidden|adjustResize"> diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherScaffoldVM.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherScaffoldVM.kt index cd28cb61..78571a76 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherScaffoldVM.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherScaffoldVM.kt @@ -67,6 +67,7 @@ class LauncherScaffoldVM : ViewModel(), KoinComponent { val bottomSearchBar = dataStore.data.map { it.layout.bottomSearchBar }.asLiveData() val reverseSearchResults = dataStore.data.map { it.layout.reverseSearchResults }.asLiveData() val fixedSearchBar = dataStore.data.map { it.layout.fixedSearchBar }.asLiveData() + val fixedRotation = dataStore.data.map { it.layout.fixedRotation }.asLiveData() val isSearchOpen = MutableLiveData(false) val isWidgetEditMode = MutableLiveData(false) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt index 4b6ba46c..83b584cf 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt @@ -1,6 +1,7 @@ package de.mm20.launcher2.ui.launcher import android.app.WallpaperManager +import android.content.pm.ActivityInfo import android.content.res.Configuration import android.content.res.Resources import android.os.Bundle @@ -35,6 +36,7 @@ import androidx.compose.ui.unit.dp import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsControllerCompat import androidx.lifecycle.Lifecycle +import androidx.lifecycle.Observer import androidx.lifecycle.flowWithLifecycle import com.google.accompanist.systemuicontroller.rememberSystemUiController import de.mm20.launcher2.globalactions.GlobalActionsService @@ -132,6 +134,15 @@ abstract class SharedLauncherActivity( val reverseSearchResults by viewModel.reverseSearchResults.observeAsState(false) val fixedSearchBar by viewModel.fixedSearchBar.observeAsState(false) + viewModel.fixedRotation.observe(this) { fixedRotation -> + requestedOrientation = if (fixedRotation) { + ActivityInfo.SCREEN_ORIENTATION_PORTRAIT + ActivityInfo.SCREEN_ORIENTATION_NOSENSOR + } else { + ActivityInfo.SCREEN_ORIENTATION_SENSOR + } + } + + val systemUiController = rememberSystemUiController() val enterTransitionProgress = remember { mutableStateOf(1f) } diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/layout/LayoutSettingsScreenVM.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/layout/LayoutSettingsScreenVM.kt index f1b6c768..bf7fe33f 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/layout/LayoutSettingsScreenVM.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/layout/LayoutSettingsScreenVM.kt @@ -1,6 +1,5 @@ package de.mm20.launcher2.ui.settings.layout -import android.content.pm.ActivityInfo import androidx.lifecycle.ViewModel import androidx.lifecycle.asLiveData import androidx.lifecycle.viewModelScope @@ -59,7 +58,7 @@ class LayoutSettingsScreenVM: ViewModel(), KoinComponent { } } - val fixedRotation = dataStore.data.map { it.layout.fixedRoation }.asLiveData() + val fixedRotation = dataStore.data.map { it.layout.fixedRotation }.asLiveData() fun setFixedRotation(fixedRotation: Boolean) { viewModelScope.launch { dataStore.updateData { diff --git a/core/i18n/src/main/res/values-de/strings.xml b/core/i18n/src/main/res/values-de/strings.xml index dc332ecd..6d298ac5 100644 --- a/core/i18n/src/main/res/values-de/strings.xml +++ b/core/i18n/src/main/res/values-de/strings.xml @@ -568,4 +568,6 @@ Sie haben eine „%1$s“-Geste ausgeführt. Diese Geste ist momentan konfiguriert, eine „%2$s“-Aktion auszulösen. Diese Aktion konnte aus dem folgenden Grund nicht durchgeführt werden: Angeheftete Suchleiste Suchleiste nicht aus dem Sichtbereich herausscrollen + Fixierte Bildschirmausrichtung + Erzwingt Porträtmodus des Launchers \ No newline at end of file diff --git a/core/i18n/src/main/res/values/strings.xml b/core/i18n/src/main/res/values/strings.xml index bb474150..39f8ee4a 100644 --- a/core/i18n/src/main/res/values/strings.xml +++ b/core/i18n/src/main/res/values/strings.xml @@ -734,8 +734,8 @@ Bottom-up Fixed search bar Don\'t scroll the search bar out of view - Fixed rotation - Lock rotation to portrait mode + Fixed screen rotation + Lock screen rotation to portrait mode Gestures Gestures and gesture actions Swipe down From 75bb7eceacc3f38e4d19c16720d80afb69f4fea5 Mon Sep 17 00:00:00 2001 From: Sir-Photch Date: Fri, 3 Feb 2023 22:20:24 +0100 Subject: [PATCH 5/5] changing orientation modes --- .../de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt index 83b584cf..39c987f2 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt @@ -136,9 +136,9 @@ abstract class SharedLauncherActivity( viewModel.fixedRotation.observe(this) { fixedRotation -> requestedOrientation = if (fixedRotation) { - ActivityInfo.SCREEN_ORIENTATION_PORTRAIT + ActivityInfo.SCREEN_ORIENTATION_NOSENSOR + ActivityInfo.SCREEN_ORIENTATION_PORTRAIT } else { - ActivityInfo.SCREEN_ORIENTATION_SENSOR + ActivityInfo.SCREEN_ORIENTATION_USER } }