Only override embedded activity locale if source package lookup yields locales to match

Calling Configuration#setLocales also sets the text direction for the containing Activity. If we pass an empty LocaleList to this method, then we lose the intended text direction for its locale. So this change will only override the target (embedded) Activity's locales if our package lookup for the host yields a populated LocaleList to provide.

Bug: 277363604
Test: Verified on Pixel devices in Settings app

Change-Id: I8bcdab0737c18f861f74a8f9bd2d15043359e27b
This commit is contained in:
Chris Antol
2023-04-10 18:08:37 +00:00
parent f0e71f6289
commit d9bc801301

View File

@@ -306,7 +306,6 @@ import android.os.Bundle;
import android.os.Debug;
import android.os.IBinder;
import android.os.IRemoteCallback;
import android.os.LocaleList;
import android.os.PersistableBundle;
import android.os.Process;
import android.os.RemoteCallbackList;
@@ -10597,17 +10596,14 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return;
}
LocaleList locale;
final ActivityTaskManagerInternal.PackageConfig appConfig =
mAtmService.mPackageConfigPersister.findPackageConfiguration(
task.realActivity.getPackageName(), mUserId);
// if there is no app locale for the package, clear the target activity's locale.
if (appConfig == null || appConfig.mLocales == null || appConfig.mLocales.isEmpty()) {
locale = LocaleList.getEmptyLocaleList();
} else {
locale = appConfig.mLocales;
// If package lookup yields locales, set the target activity's locales to match,
// otherwise leave target activity as-is.
if (appConfig != null && appConfig.mLocales != null && !appConfig.mLocales.isEmpty()) {
resolvedConfig.setLocales(appConfig.mLocales);
}
resolvedConfig.setLocales(locale);
}
/**