/* Ċ Ġ* ĠCopyright Ġ 2 0 2 2 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġandroidx . compose . integration . demos . settings Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . Window Ċ import Ġandroid . view . WindowManager . LayoutParams . SOFT _ INPUT _ ADJ UST _ PAN Ċ import Ġandroid . view . WindowManager . LayoutParams . SOFT _ INPUT _ ADJ UST _ RE SIZE Ċ import Ġandroidx . compose . integration . demos . settings . Soft Input Mode . Adjust Pan Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . La unched Effect Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . remember Updated State Ċ import Ġandroidx . compose . runtime . snapshot Flow Ċ import Ġandroidx . compose . runtime . with Frame Millis Ċ import Ġandroidx . compose . ui . platform . Local Lifecycle Owner Ċ import Ġandroidx . lifecycle . Lifecycle . State . RE SU MED Ċ import Ġandroidx . lifecycle . repeat On Lifecycle Ċ import Ġandroidx . preference . DropDown Preference Ċ import Ġandroidx . preference . Preference . Summary Provider Ċ Ċ internal Ġenum Ġclass ĠSoft Input Mode ( val Ġflag Value : ĠInt , Ġval Ġsummary : ĠString ) Ġ{ ĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ ĠAdjust Resize ( ĊĠĠĠĠĠĠĠ ĠS OFT _ INPUT _ ADJ UST _ RE SIZE , ĊĠĠĠĠĠĠĠ Ġsummary Ġ= Ġ" The Ġcontent Ġview Ġwill Ġresize Ġto Ġac commod ate Ġthe ĠI ME .", ĊĠĠĠ Ġ), ĊĠĠĠ ĠAdjust Pan ( ĊĠĠĠĠĠĠĠ ĠS OFT _ INPUT _ ADJ UST _ PAN , ĊĠĠĠĠĠĠĠ Ġsummary Ġ= Ġ" The Ġcontent Ġview Ġwill Ġpan Ġup Ġto Ġac commod ate Ġthe ĠI ME .", ĊĠĠĠ Ġ), Ċ } Ċ Ċ /** Ċ Ġ* ĠSetting Ġthat Ġdetermines Ġwhich Ġsoft Ġinput Ġmode Ġthe Ġdemo Ġactivity 's Ġwindow Ġis Ġconfigured Ġwith . Ċ Ġ*/ Ċ internal Ġobject ĠSoft Input Mode Setting Ġ: ĠDemo Setting < Soft Input Mode > Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠKey Ġ= Ġ" soft Input Mode " ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Preference ( context : ĠContext ) Ġ= ĠDrop Down Preference ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Soft Ġinput Ġmode " ĊĠĠĠĠĠĠĠ Ġkey Ġ= ĠKey ĊĠĠĠĠĠĠĠ ĠSoft Input Mode . values (). map Ġ{ Ġit . name Ġ}. to Typed Array (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry Values Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsummary Provider Ġ= ĠSummary Provider < DropDown Preference > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmode Ġ= ĠSoft Input Mode . valueOf ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ mode . name } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ mode . summary } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset DefaultValue ( Adjust Pan . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġfun Ġas State () Ġ= Ġpreference As State ( Key ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= ĠgetString ( Key , ĠAdjust Pan . name ) Ġ?: ĠAdjust Pan . name ĊĠĠĠĠĠĠĠ ĠSoft Input Mode . valueOf ( value ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠSets Ġthe Ġwindow 's Ġ[ soft Input Mode ][ android . view . Window . set Soft Input Mode ] Ġto Ġ[ mode ] Ġas Ġlong Ġas Ġthis Ċ Ġ* Ġfunction Ġis Ġcomposed . Ċ Ġ*/ Ċ @ Composable Ċ internal Ġfun ĠSoft Input Mode Effect ( mode : ĠSoft Input Mode , Ġwindow : ĠWindow ) Ġ{ ĊĠĠĠ Ġval Ġupdated Mode Ġby Ġremember Updated State ( mode ) ĊĠĠĠ Ġval Ġlifecycle Ġ= ĠLocal Lifecycle Owner . current ĊĠĠĠ ĠLa unched Effect ( lifecycle , Ġwindow ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle . repeat On Lifecycle ( RE SU MED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDuring Ġthe Ġfirst Ġframe , Ġthe Ġwindow Ġmay Ġhave Ġits Ġsoft Ġinput Ġmode Ġset Ġto Ġa Ġspecial ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ" forwarding Ġinput " Ġmode . ĠAfter Ġthe Ġfirst Ġframe , Ġit Ġwill Ġbe Ġreset Ġto Ġwhatever Ġis Ġin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġtheme . ĠIf Ġwe Ġset Ġthe Ġvalue Ġduring Ġthe Ġfirst Ġframe , Ġit Ġwill Ġget Ġimmediately ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcleared , Ġso Ġwait Ġuntil Ġthe Ġsecond Ġframe Ġto Ġset Ġit . ĠThis Ġis Ġsuper Ġhack y Ġbut Ġno Ġreal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġapp Ġshould Ġneed Ġto Ġdynamically Ġchange Ġits Ġsoft Ġinput Ġmode Ġlike Ġwe Ġdo . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Frame Millis Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsnapshot Flow Ġ{ Ġupdated Mode Ġ}. collect Ġ{ Ġmode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . set Soft Input Mode ( mode . flag Value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }