- 28,932 files - Full Java source code - Smali files - Resources Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
506 lines
18 KiB
Java
506 lines
18 KiB
Java
package androidx.appcompat.app;
|
|
|
|
import android.app.Activity;
|
|
import android.app.Dialog;
|
|
import android.app.LocaleManager;
|
|
import android.content.ComponentName;
|
|
import android.content.Context;
|
|
import android.content.pm.PackageManager;
|
|
import android.content.res.Configuration;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.os.LocaleList;
|
|
import android.util.AttributeSet;
|
|
import android.view.MenuInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.view.Window;
|
|
import android.window.OnBackInvokedDispatcher;
|
|
import androidx.annotation.AnyThread;
|
|
import androidx.annotation.CallSuper;
|
|
import androidx.annotation.DoNotInline;
|
|
import androidx.annotation.IdRes;
|
|
import androidx.annotation.LayoutRes;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.RequiresApi;
|
|
import androidx.annotation.RestrictTo;
|
|
import androidx.annotation.StyleRes;
|
|
import androidx.annotation.VisibleForTesting;
|
|
import androidx.appcompat.app.ActionBarDrawerToggle;
|
|
import androidx.appcompat.app.AppCompatDelegate;
|
|
import androidx.appcompat.view.ActionMode;
|
|
import androidx.appcompat.widget.Toolbar;
|
|
import androidx.appcompat.widget.VectorEnabledTintResources;
|
|
import androidx.collection.ArraySet;
|
|
import androidx.core.app.AppLocalesStorageHelper;
|
|
import androidx.core.os.LocaleListCompat;
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.lang.ref.WeakReference;
|
|
import java.util.ArrayDeque;
|
|
import java.util.Iterator;
|
|
import java.util.Objects;
|
|
import java.util.Queue;
|
|
import java.util.concurrent.Executor;
|
|
|
|
/* loaded from: classes.dex */
|
|
public abstract class AppCompatDelegate {
|
|
static final String APP_LOCALES_META_DATA_HOLDER_SERVICE_NAME = "androidx.appcompat.app.AppLocalesMetadataHolderService";
|
|
static final boolean DEBUG = false;
|
|
public static final int FEATURE_ACTION_MODE_OVERLAY = 10;
|
|
public static final int FEATURE_SUPPORT_ACTION_BAR = 108;
|
|
public static final int FEATURE_SUPPORT_ACTION_BAR_OVERLAY = 109;
|
|
|
|
@Deprecated
|
|
public static final int MODE_NIGHT_AUTO = 0;
|
|
public static final int MODE_NIGHT_AUTO_BATTERY = 3;
|
|
|
|
@Deprecated
|
|
public static final int MODE_NIGHT_AUTO_TIME = 0;
|
|
public static final int MODE_NIGHT_FOLLOW_SYSTEM = -1;
|
|
public static final int MODE_NIGHT_NO = 1;
|
|
public static final int MODE_NIGHT_UNSPECIFIED = -100;
|
|
public static final int MODE_NIGHT_YES = 2;
|
|
static final String TAG = "AppCompatDelegate";
|
|
static SerialExecutor sSerialExecutorForLocalesStorage = new SerialExecutor(new ThreadPerTaskExecutor());
|
|
private static int sDefaultNightMode = -100;
|
|
private static LocaleListCompat sRequestedAppLocales = null;
|
|
private static LocaleListCompat sStoredAppLocales = null;
|
|
private static Boolean sIsAutoStoreLocalesOptedIn = null;
|
|
private static boolean sIsFrameworkSyncChecked = false;
|
|
private static final ArraySet<WeakReference<AppCompatDelegate>> sActivityDelegates = new ArraySet<>();
|
|
private static final Object sActivityDelegatesLock = new Object();
|
|
private static final Object sAppLocalesStorageSyncLock = new Object();
|
|
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
|
public @interface NightMode {
|
|
}
|
|
|
|
public static int getDefaultNightMode() {
|
|
return sDefaultNightMode;
|
|
}
|
|
|
|
@Nullable
|
|
public static LocaleListCompat getRequestedAppLocales() {
|
|
return sRequestedAppLocales;
|
|
}
|
|
|
|
@Nullable
|
|
public static LocaleListCompat getStoredAppLocales() {
|
|
return sStoredAppLocales;
|
|
}
|
|
|
|
@VisibleForTesting
|
|
public static void resetStaticRequestedAndStoredLocales() {
|
|
sRequestedAppLocales = null;
|
|
sStoredAppLocales = null;
|
|
}
|
|
|
|
public abstract void addContentView(View view, ViewGroup.LayoutParams layoutParams);
|
|
|
|
public boolean applyAppLocales() {
|
|
return false;
|
|
}
|
|
|
|
public abstract boolean applyDayNight();
|
|
|
|
@Deprecated
|
|
public void attachBaseContext(Context context) {
|
|
}
|
|
|
|
public abstract View createView(@Nullable View view, String str, @NonNull Context context, @NonNull AttributeSet attributeSet);
|
|
|
|
@Nullable
|
|
public abstract <T extends View> T findViewById(@IdRes int i);
|
|
|
|
@Nullable
|
|
public Context getContextForDelegate() {
|
|
return null;
|
|
}
|
|
|
|
@Nullable
|
|
public abstract ActionBarDrawerToggle.Delegate getDrawerToggleDelegate();
|
|
|
|
public int getLocalNightMode() {
|
|
return -100;
|
|
}
|
|
|
|
public abstract MenuInflater getMenuInflater();
|
|
|
|
@Nullable
|
|
public abstract ActionBar getSupportActionBar();
|
|
|
|
public abstract boolean hasWindowFeature(int i);
|
|
|
|
public abstract void installViewFactory();
|
|
|
|
public abstract void invalidateOptionsMenu();
|
|
|
|
public abstract boolean isHandleNativeActionModesEnabled();
|
|
|
|
public abstract void onConfigurationChanged(Configuration configuration);
|
|
|
|
public abstract void onCreate(Bundle bundle);
|
|
|
|
public abstract void onDestroy();
|
|
|
|
public abstract void onPostCreate(Bundle bundle);
|
|
|
|
public abstract void onPostResume();
|
|
|
|
public abstract void onSaveInstanceState(Bundle bundle);
|
|
|
|
public abstract void onStart();
|
|
|
|
public abstract void onStop();
|
|
|
|
public abstract boolean requestWindowFeature(int i);
|
|
|
|
public abstract void setContentView(@LayoutRes int i);
|
|
|
|
public abstract void setContentView(View view);
|
|
|
|
public abstract void setContentView(View view, ViewGroup.LayoutParams layoutParams);
|
|
|
|
public abstract void setHandleNativeActionModesEnabled(boolean z);
|
|
|
|
public abstract void setLocalNightMode(int i);
|
|
|
|
@RequiresApi(33)
|
|
@CallSuper
|
|
public void setOnBackInvokedDispatcher(@Nullable OnBackInvokedDispatcher onBackInvokedDispatcher) {
|
|
}
|
|
|
|
public abstract void setSupportActionBar(@Nullable Toolbar toolbar);
|
|
|
|
public void setTheme(@StyleRes int i) {
|
|
}
|
|
|
|
public abstract void setTitle(@Nullable CharSequence charSequence);
|
|
|
|
@Nullable
|
|
public abstract ActionMode startSupportActionMode(@NonNull ActionMode.Callback callback);
|
|
|
|
public static class SerialExecutor implements Executor {
|
|
Runnable mActive;
|
|
final Executor mExecutor;
|
|
private final Object mLock = new Object();
|
|
final Queue<Runnable> mTasks = new ArrayDeque();
|
|
|
|
public SerialExecutor(Executor executor) {
|
|
this.mExecutor = executor;
|
|
}
|
|
|
|
@Override // java.util.concurrent.Executor
|
|
public void execute(final Runnable runnable) {
|
|
synchronized (this.mLock) {
|
|
try {
|
|
this.mTasks.add(new Runnable() { // from class: androidx.appcompat.app.AppCompatDelegate$SerialExecutor$$ExternalSyntheticLambda0
|
|
@Override // java.lang.Runnable
|
|
public final void run() {
|
|
AppCompatDelegate.SerialExecutor.this.lambda$execute$0(runnable);
|
|
}
|
|
});
|
|
if (this.mActive == null) {
|
|
scheduleNext();
|
|
}
|
|
} catch (Throwable th) {
|
|
throw th;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
public /* synthetic */ void lambda$execute$0(Runnable runnable) {
|
|
try {
|
|
runnable.run();
|
|
} finally {
|
|
scheduleNext();
|
|
}
|
|
}
|
|
|
|
public void scheduleNext() {
|
|
synchronized (this.mLock) {
|
|
try {
|
|
Runnable poll = this.mTasks.poll();
|
|
this.mActive = poll;
|
|
if (poll != null) {
|
|
this.mExecutor.execute(poll);
|
|
}
|
|
} catch (Throwable th) {
|
|
throw th;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static class ThreadPerTaskExecutor implements Executor {
|
|
@Override // java.util.concurrent.Executor
|
|
public void execute(Runnable runnable) {
|
|
new Thread(runnable).start();
|
|
}
|
|
}
|
|
|
|
@NonNull
|
|
public static AppCompatDelegate create(@NonNull Activity activity, @Nullable AppCompatCallback appCompatCallback) {
|
|
return new AppCompatDelegateImpl(activity, appCompatCallback);
|
|
}
|
|
|
|
@NonNull
|
|
public static AppCompatDelegate create(@NonNull Dialog dialog, @Nullable AppCompatCallback appCompatCallback) {
|
|
return new AppCompatDelegateImpl(dialog, appCompatCallback);
|
|
}
|
|
|
|
@NonNull
|
|
public static AppCompatDelegate create(@NonNull Context context, @NonNull Window window, @Nullable AppCompatCallback appCompatCallback) {
|
|
return new AppCompatDelegateImpl(context, window, appCompatCallback);
|
|
}
|
|
|
|
@NonNull
|
|
public static AppCompatDelegate create(@NonNull Context context, @NonNull Activity activity, @Nullable AppCompatCallback appCompatCallback) {
|
|
return new AppCompatDelegateImpl(context, activity, appCompatCallback);
|
|
}
|
|
|
|
@NonNull
|
|
@CallSuper
|
|
public Context attachBaseContext2(@NonNull Context context) {
|
|
attachBaseContext(context);
|
|
return context;
|
|
}
|
|
|
|
public static void setDefaultNightMode(int i) {
|
|
if ((i == -1 || i == 0 || i == 1 || i == 2 || i == 3) && sDefaultNightMode != i) {
|
|
sDefaultNightMode = i;
|
|
applyDayNightToActiveDelegates();
|
|
}
|
|
}
|
|
|
|
public static void setApplicationLocales(@NonNull LocaleListCompat localeListCompat) {
|
|
Objects.requireNonNull(localeListCompat);
|
|
if (Build.VERSION.SDK_INT >= 33) {
|
|
Object localeManagerForApplication = getLocaleManagerForApplication();
|
|
if (localeManagerForApplication != null) {
|
|
Api33Impl.localeManagerSetApplicationLocales(localeManagerForApplication, Api24Impl.localeListForLanguageTags(localeListCompat.toLanguageTags()));
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
if (localeListCompat.equals(sRequestedAppLocales)) {
|
|
return;
|
|
}
|
|
synchronized (sActivityDelegatesLock) {
|
|
sRequestedAppLocales = localeListCompat;
|
|
applyLocalesToActiveDelegates();
|
|
}
|
|
}
|
|
|
|
@NonNull
|
|
@AnyThread
|
|
public static LocaleListCompat getApplicationLocales() {
|
|
if (Build.VERSION.SDK_INT >= 33) {
|
|
Object localeManagerForApplication = getLocaleManagerForApplication();
|
|
if (localeManagerForApplication != null) {
|
|
return LocaleListCompat.wrap(Api33Impl.localeManagerGetApplicationLocales(localeManagerForApplication));
|
|
}
|
|
} else {
|
|
LocaleListCompat localeListCompat = sRequestedAppLocales;
|
|
if (localeListCompat != null) {
|
|
return localeListCompat;
|
|
}
|
|
}
|
|
return LocaleListCompat.getEmptyLocaleList();
|
|
}
|
|
|
|
@VisibleForTesting
|
|
public static void setIsAutoStoreLocalesOptedIn(boolean z) {
|
|
sIsAutoStoreLocalesOptedIn = Boolean.valueOf(z);
|
|
}
|
|
|
|
@RequiresApi(33)
|
|
public static Object getLocaleManagerForApplication() {
|
|
Context contextForDelegate;
|
|
Iterator<WeakReference<AppCompatDelegate>> it = sActivityDelegates.iterator();
|
|
while (it.hasNext()) {
|
|
AppCompatDelegate appCompatDelegate = it.next().get();
|
|
if (appCompatDelegate != null && (contextForDelegate = appCompatDelegate.getContextForDelegate()) != null) {
|
|
return contextForDelegate.getSystemService("locale");
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static boolean isAutoStorageOptedIn(Context context) {
|
|
if (sIsAutoStoreLocalesOptedIn == null) {
|
|
try {
|
|
Bundle bundle = AppLocalesMetadataHolderService.getServiceInfo(context).metaData;
|
|
if (bundle != null) {
|
|
sIsAutoStoreLocalesOptedIn = Boolean.valueOf(bundle.getBoolean("autoStoreLocales"));
|
|
}
|
|
} catch (PackageManager.NameNotFoundException unused) {
|
|
sIsAutoStoreLocalesOptedIn = Boolean.FALSE;
|
|
}
|
|
}
|
|
return sIsAutoStoreLocalesOptedIn.booleanValue();
|
|
}
|
|
|
|
public void asyncExecuteSyncRequestedAndStoredLocales(final Context context) {
|
|
sSerialExecutorForLocalesStorage.execute(new Runnable() { // from class: androidx.appcompat.app.AppCompatDelegate$$ExternalSyntheticLambda0
|
|
@Override // java.lang.Runnable
|
|
public final void run() {
|
|
AppCompatDelegate.syncRequestedAndStoredLocales(context);
|
|
}
|
|
});
|
|
}
|
|
|
|
public static void syncRequestedAndStoredLocales(final Context context) {
|
|
if (isAutoStorageOptedIn(context)) {
|
|
if (Build.VERSION.SDK_INT >= 33) {
|
|
if (sIsFrameworkSyncChecked) {
|
|
return;
|
|
}
|
|
sSerialExecutorForLocalesStorage.execute(new Runnable() { // from class: androidx.appcompat.app.AppCompatDelegate$$ExternalSyntheticLambda1
|
|
@Override // java.lang.Runnable
|
|
public final void run() {
|
|
AppCompatDelegate.lambda$syncRequestedAndStoredLocales$1(context);
|
|
}
|
|
});
|
|
return;
|
|
}
|
|
synchronized (sAppLocalesStorageSyncLock) {
|
|
try {
|
|
LocaleListCompat localeListCompat = sRequestedAppLocales;
|
|
if (localeListCompat == null) {
|
|
if (sStoredAppLocales == null) {
|
|
sStoredAppLocales = LocaleListCompat.forLanguageTags(AppLocalesStorageHelper.readLocales(context));
|
|
}
|
|
if (sStoredAppLocales.isEmpty()) {
|
|
} else {
|
|
sRequestedAppLocales = sStoredAppLocales;
|
|
}
|
|
} else if (!localeListCompat.equals(sStoredAppLocales)) {
|
|
LocaleListCompat localeListCompat2 = sRequestedAppLocales;
|
|
sStoredAppLocales = localeListCompat2;
|
|
AppLocalesStorageHelper.persistLocales(context, localeListCompat2.toLanguageTags());
|
|
}
|
|
} catch (Throwable th) {
|
|
throw th;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* JADX INFO: Access modifiers changed from: private */
|
|
public static /* synthetic */ void lambda$syncRequestedAndStoredLocales$1(Context context) {
|
|
syncLocalesToFramework(context);
|
|
sIsFrameworkSyncChecked = true;
|
|
}
|
|
|
|
public static void setCompatVectorFromResourcesEnabled(boolean z) {
|
|
VectorEnabledTintResources.setCompatVectorFromResourcesEnabled(z);
|
|
}
|
|
|
|
public static boolean isCompatVectorFromResourcesEnabled() {
|
|
return VectorEnabledTintResources.isCompatVectorFromResourcesEnabled();
|
|
}
|
|
|
|
public static void addActiveDelegate(@NonNull AppCompatDelegate appCompatDelegate) {
|
|
synchronized (sActivityDelegatesLock) {
|
|
removeDelegateFromActives(appCompatDelegate);
|
|
sActivityDelegates.add(new WeakReference<>(appCompatDelegate));
|
|
}
|
|
}
|
|
|
|
public static void removeActivityDelegate(@NonNull AppCompatDelegate appCompatDelegate) {
|
|
synchronized (sActivityDelegatesLock) {
|
|
removeDelegateFromActives(appCompatDelegate);
|
|
}
|
|
}
|
|
|
|
public static void syncLocalesToFramework(Context context) {
|
|
if (Build.VERSION.SDK_INT >= 33) {
|
|
ComponentName componentName = new ComponentName(context, APP_LOCALES_META_DATA_HOLDER_SERVICE_NAME);
|
|
if (context.getPackageManager().getComponentEnabledSetting(componentName) != 1) {
|
|
if (getApplicationLocales().isEmpty()) {
|
|
String readLocales = AppLocalesStorageHelper.readLocales(context);
|
|
Object systemService = context.getSystemService("locale");
|
|
if (systemService != null) {
|
|
Api33Impl.localeManagerSetApplicationLocales(systemService, Api24Impl.localeListForLanguageTags(readLocales));
|
|
}
|
|
}
|
|
context.getPackageManager().setComponentEnabledSetting(componentName, 1, 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void removeDelegateFromActives(@NonNull AppCompatDelegate appCompatDelegate) {
|
|
synchronized (sActivityDelegatesLock) {
|
|
try {
|
|
Iterator<WeakReference<AppCompatDelegate>> it = sActivityDelegates.iterator();
|
|
while (it.hasNext()) {
|
|
AppCompatDelegate appCompatDelegate2 = it.next().get();
|
|
if (appCompatDelegate2 == appCompatDelegate || appCompatDelegate2 == null) {
|
|
it.remove();
|
|
}
|
|
}
|
|
} catch (Throwable th) {
|
|
throw th;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void applyDayNightToActiveDelegates() {
|
|
synchronized (sActivityDelegatesLock) {
|
|
try {
|
|
Iterator<WeakReference<AppCompatDelegate>> it = sActivityDelegates.iterator();
|
|
while (it.hasNext()) {
|
|
AppCompatDelegate appCompatDelegate = it.next().get();
|
|
if (appCompatDelegate != null) {
|
|
appCompatDelegate.applyDayNight();
|
|
}
|
|
}
|
|
} catch (Throwable th) {
|
|
throw th;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void applyLocalesToActiveDelegates() {
|
|
Iterator<WeakReference<AppCompatDelegate>> it = sActivityDelegates.iterator();
|
|
while (it.hasNext()) {
|
|
AppCompatDelegate appCompatDelegate = it.next().get();
|
|
if (appCompatDelegate != null) {
|
|
appCompatDelegate.applyAppLocales();
|
|
}
|
|
}
|
|
}
|
|
|
|
@RequiresApi(24)
|
|
public static class Api24Impl {
|
|
private Api24Impl() {
|
|
}
|
|
|
|
@DoNotInline
|
|
public static LocaleList localeListForLanguageTags(String str) {
|
|
return LocaleList.forLanguageTags(str);
|
|
}
|
|
}
|
|
|
|
@RequiresApi(33)
|
|
public static class Api33Impl {
|
|
private Api33Impl() {
|
|
}
|
|
|
|
@DoNotInline
|
|
public static void localeManagerSetApplicationLocales(Object obj, LocaleList localeList) {
|
|
((LocaleManager) obj).setApplicationLocales(localeList);
|
|
}
|
|
|
|
@DoNotInline
|
|
public static LocaleList localeManagerGetApplicationLocales(Object obj) {
|
|
return ((LocaleManager) obj).getApplicationLocales();
|
|
}
|
|
}
|
|
}
|