package Ġap pt ent ive . com . android . ui Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroidx . appcompat . view . Context Theme Wrapper Ċ import Ġap pt ent ive . com . android . R Ċ import Ġap pt ent ive . com . android . platform . Shared Pref Constants Ċ import Ġap pt ent ive . com . android . util . Internal Use Only Ċ import Ġap pt ent ive . com . android . util . Log Ċ import Ġap pt ent ive . com . android . util . Log Tags Ċ Ċ /** Ċ Ġ* ĠAllows Ġinheritance Ġof Ġthe ĠAp pt ent ive Ġtheme , Ġthe Ġhost Ġapp 's Ġtheme , Ġand ĠAp pt ent ive Theme Override . Ċ Ġ* Ċ Ġ* ĠLay ers Ġon Ġthemes Ġon Ġtop Ġof Ġeach Ġother Ġby Ġimportance . Ċ Ġ* ĠL ater Ġlayers Ġwill Ġoverride Ġprevious Ġlayers Ġand Ġtake Ġpriority . Ċ Ġ*/ Ċ internal Ġfun ĠContext . override Theme () Ġ{ ĊĠĠĠ Ġ/* ĠLayer Ġ 1 : ĠAp pt ent ive Ġdefault Ġtheme . Ċĉ Ġ* ĠIf Ġhost Ġactivity Ġis Ġan Ġactivity , Ġthe Ġbase Ġtheme Ġalready Ġhas ĠAp pt ent ive Ġdefaults Ġapplied , Ġso Ġskip Ġlayer Ġ 1 . Ċĉ Ġ* ĠIf Ġparent Ġactivity Ġis ĠNOT Ġan Ġactivity , Ġfirst Ġapply ĠAp pt ent ive Ġdefaults . Ċĉ Ġ*/ ĊĠĠĠ Ġif Ġ( this Ġ! is ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtheme . apply Style ( R . style . Theme _ Ap pt ent ive , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠLayer Ġ 2 : ĠApp Ġdefault Ġtheme Ġif Ġshould Apply App Theme Ġis Ġtrue Ġ*/ ĊĠĠĠ Ġif Ġ( get Should Apply App Theme ()) Ġapply App Theme () ĊĊĠĠĠ Ġ/* ĠLayer Ġ 3 : ĠDisable Ġthe Ġproblem Ġstyle Ġ-> Ġandroid : background . ĊĠĠĠĠ Ġ* ĠUse Ġandroid : color Background Ġfor Ġsetting Ġbackground Ġcolor Ġof ĠActiv ities . ĊĠĠĠĠ Ġ* ĠUse Ġcolor Surface Ġfor Ġsetting Ġbackground Ġcolor Ġof ĠDialog s . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġtheme . apply Style ( R . style . Disable Android Background Style , Ġtrue ) ĊĊĠĠĠ Ġ/* ĠLayer Ġ 4 : ĠOptional Ġtheme Ġoverride Ġspecified Ġin Ġhost Ġapp 's Ġstyle Ġ*/ ĊĠĠĠ Ġapply Ap pt ent ive Theme Override () Ċ } Ċ Ċ /** Ċ Ġ* ĠAllows Ġthe Ġusage Ġof Ġ[ Context Theme Wrapper ] Ġto Ġoverwrite Ġbase ĠAp pt ent ive Ġtheme Ġvalues . Ċ Ġ*/ Ċ @ Internal Use Only Ċ fun ĠContext Theme Wrapper . override Theme () Ġ{ ĊĠĠĠ Ġval Ġcontext Theme Ġ= Ġtheme Res Id ĊĊĠĠĠ Ġ/* ĠLayer Ġ 1 : ĠAp pt ent ive Ġdefault Ġtheme Ġ*/ ĊĠĠĠ Ġtheme . apply Style ( R . style . Theme _ Ap pt ent ive , Ġtrue ) ĊĊĠĠĠ Ġ/* ĠLayer Ġ 2 : ĠContext Theme Wrapper Ġtheme Ġthe Ġwrapper Ġwas Ġcreated Ġwith Ġ*/ ĊĠĠĠ Ġtheme . apply Style ( context Theme , Ġtrue ) ĊĊĠĠĠ Ġ/* ĠLayer Ġ 3 : ĠApp Ġdefault Ġtheme Ġif Ġshould Apply App Theme Ġis Ġtrue Ġ*/ ĊĠĠĠ Ġif Ġ( get Should Apply App Theme ()) Ġapply App Theme () ĊĊĠĠĠ Ġ/* ĠLayer Ġ 4 : ĠDisable Ġthe Ġproblem Ġstyle Ġ-> Ġandroid : background . ĊĠĠĠĠ Ġ* ĠUse Ġandroid : color Background Ġfor Ġsetting Ġbackground Ġcolor Ġof ĠActiv ities . ĊĠĠĠĠ Ġ* ĠUse Ġcolor Surface Ġfor Ġsetting Ġbackground Ġcolor Ġof ĠDialog s . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġtheme . apply Style ( R . style . Disable Android Background Style , Ġtrue ) ĊĊĠĠĠ Ġ/* ĠLayer Ġ 5 : ĠOptional Ġtheme Ġoverride Ġspecified Ġin Ġhost Ġapp 's Ġstyle Ġ*/ ĊĠĠĠ Ġapply Ap pt ent ive Theme Override () Ċ } Ċ Ċ /** Ċ Ġ* ĠRetrieves Ġ` should Apply App Theme `, Ġa Ġ` Boolean ` Ġconfig Ġoption Ġset Ġwithin Ġ` Ap pt ent ive Configuration `. Ċ Ġ* Ċ Ġ* ĠDefault Ġis Ġ` true ` Ġ( inherit Ġthe Ġhost Ġapp 's Ġtheme ). Ċ Ġ*/ Ċ private Ġfun ĠContext . get Should Apply App Theme (): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġget SharedPreferences ( Shared Pref Constants . USE _ HOST _ APP _ THEME , ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġ. getBoolean ( Shared Pref Constants . USE _ HOST _ APP _ THEME _ KEY , Ġtrue ) Ċ } Ċ Ċ private Ġfun ĠContext . apply App Theme () Ġ{ ĊĠĠĠ Ġval Ġapp Theme Id Ġ= Ġget App Theme Id () ĊĠĠĠ Ġif Ġ( app Theme Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtheme . apply Style ( app Theme Id , Ġtrue ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġstyle Ġresource Ġidentifier Ġ( in Ġthe Ġpackage 's Ġresources ) Ġof Ġthe Ċ Ġ* Ġdefault Ġvisual Ġtheme Ġof Ġthe Ġapplication . ĠFrom Ġthe Ġ" theme " Ġattribute Ċ Ġ* Ġor , Ġif Ġnot Ġset , Ġ` null `. Ċ Ġ*/ Ċ private Ġfun ĠContext . getApp Theme Id (): ĠInt ? Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapp PackageName Ġ= ĠpackageName ĊĠĠĠĠĠĠĠ Ġval Ġpackage Manager Ġ= Ġpackage Manager ĊĠĠĠĠĠĠĠ Ġval Ġpackage Info Ġ= Ġpackage Manager . get Package Info ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp PackageName , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager . GET _ META _ DATA Ġor ĠPackage Manager . GET _ RECE IVER S ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġai Ġ= Ġpackage Info . application Info ĊĠĠĠĠĠĠĠ Ġval Ġtheme Ġ= Ġai . theme ĊĠĠĠĠĠĠĠ Ġif Ġ( theme Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtheme ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e ( Log Tags . CORE , Ġ" Unable Ġto Ġresolve Ġapplication Ġdefault Ġtheme ", Ġe ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ private Ġfun ĠContext . apply Ap pt ent ive Theme Override () Ġ{ ĊĠĠĠ Ġval Ġtheme Override Res Id : ĠInt Ġ= Ġresources . getIdentifier ( ĊĠĠĠĠĠĠĠ Ġ" Ap pt ent ive Theme Override ", ĊĠĠĠĠĠĠĠ Ġ" style ", ĠpackageName ĊĠĠĠ Ġ) ĊĠĠĠ Ġif Ġ( theme Override Res Id Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtheme . apply Style ( theme Override Res Id , Ġtrue ) ĊĠĠĠ Ġ} Ċ } Ċ