mirror of
https://github.com/bitwarden/android.git
synced 2026-03-21 22:00:42 -05:00
[PM-18082] Force incognito keyboard on input fields (#4700)
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
package com.x8bit.bitwarden.ui.platform.components.field.interceptor
|
||||
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||
import androidx.compose.ui.platform.InterceptPlatformTextInput
|
||||
import androidx.compose.ui.platform.PlatformTextInputInterceptor
|
||||
import androidx.compose.ui.platform.PlatformTextInputMethodRequest
|
||||
import androidx.compose.ui.platform.PlatformTextInputSession
|
||||
import com.x8bit.bitwarden.data.platform.annotation.OmitFromCoverage
|
||||
|
||||
/**
|
||||
* Interceptor that disables the [EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING] flag on text inputs.
|
||||
*/
|
||||
@OmitFromCoverage
|
||||
@OptIn(ExperimentalComposeUiApi::class)
|
||||
object NoPersonalizedLearningInterceptor : PlatformTextInputInterceptor {
|
||||
override suspend fun interceptStartInputMethod(
|
||||
request: PlatformTextInputMethodRequest,
|
||||
nextHandler: PlatformTextInputSession,
|
||||
): Nothing {
|
||||
val modifiedRequest = PlatformTextInputMethodRequest { outAttrs ->
|
||||
request.createInputConnection(outAttrs)
|
||||
.also {
|
||||
outAttrs.imeOptions =
|
||||
outAttrs.imeOptions or EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING
|
||||
}
|
||||
}
|
||||
nextHandler.startInputMethod(modifiedRequest)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A [InterceptPlatformTextInput] that disables the [EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING]
|
||||
* flag on text inputs to force the keyboard into "Incognito Mode".
|
||||
*
|
||||
* This is a modified version of the workaround provided by Google here:
|
||||
* https://issuetracker.google.com/issues/359257538#comment2
|
||||
*/
|
||||
@OptIn(ExperimentalComposeUiApi::class)
|
||||
@Composable
|
||||
fun IncognitoInput(content: @Composable () -> Unit) {
|
||||
InterceptPlatformTextInput(
|
||||
interceptor = NoPersonalizedLearningInterceptor,
|
||||
content = content,
|
||||
)
|
||||
}
|
||||
@@ -18,6 +18,7 @@ import androidx.compose.runtime.compositionLocalOf
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalView
|
||||
import androidx.core.view.WindowCompat
|
||||
import com.x8bit.bitwarden.ui.platform.components.field.interceptor.IncognitoInput
|
||||
import com.x8bit.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme
|
||||
import com.x8bit.bitwarden.ui.platform.theme.color.BitwardenColorScheme
|
||||
import com.x8bit.bitwarden.ui.platform.theme.color.darkBitwardenColorScheme
|
||||
@@ -125,8 +126,7 @@ fun BitwardenTheme(
|
||||
defaultColorScheme = materialColorScheme,
|
||||
),
|
||||
typography = bitwardenTypography.toMaterialTypography(),
|
||||
content = content,
|
||||
)
|
||||
) { IncognitoInput(content = content) }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user