Loading quickstep/src/com/android/launcher3/model/WellbeingModel.java +9 −6 Original line number Diff line number Diff line Loading @@ -83,10 +83,8 @@ public final class WellbeingModel implements SafeCloseable { private final Handler mWorkerHandler; private final ContentObserver mContentObserver; private final SimpleBroadcastReceiver mWellbeingAppChangeReceiver = new SimpleBroadcastReceiver(t -> restartObserver()); private final SimpleBroadcastReceiver mAppAddRemoveReceiver = new SimpleBroadcastReceiver(this::onAppPackageChanged); private final SimpleBroadcastReceiver mWellbeingAppChangeReceiver; private final SimpleBroadcastReceiver mAppAddRemoveReceiver; private final Object mModelLock = new Object(); // Maps the action Id to the corresponding RemoteAction Loading @@ -101,6 +99,11 @@ public final class WellbeingModel implements SafeCloseable { mWorkerHandler = new Handler(TextUtils.isEmpty(mWellbeingProviderPkg) ? Executors.UI_HELPER_EXECUTOR.getLooper() : Executors.getPackageExecutor(mWellbeingProviderPkg).getLooper()); mWellbeingAppChangeReceiver = new SimpleBroadcastReceiver(mWorkerHandler, t -> restartObserver()); mAppAddRemoveReceiver = new SimpleBroadcastReceiver(mWorkerHandler, this::onAppPackageChanged); mContentObserver = new ContentObserver(mWorkerHandler) { @Override Loading Loading @@ -135,8 +138,8 @@ public final class WellbeingModel implements SafeCloseable { public void close() { if (!TextUtils.isEmpty(mWellbeingProviderPkg)) { mWorkerHandler.post(() -> { mWellbeingAppChangeReceiver.unregisterReceiverSafelySync(mContext); mAppAddRemoveReceiver.unregisterReceiverSafelySync(mContext); mWellbeingAppChangeReceiver.unregisterReceiverSafely(mContext); mAppAddRemoveReceiver.unregisterReceiverSafely(mContext); mContext.getContentResolver().unregisterContentObserver(mContentObserver); }); } Loading quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java +7 −10 Original line number Diff line number Diff line Loading @@ -39,7 +39,6 @@ import android.app.PendingIntent; import android.content.ComponentCallbacks; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.hardware.display.DisplayManager; Loading Loading @@ -120,7 +119,7 @@ public class TaskbarManager { private final ComponentCallbacks mComponentCallbacks; private final SimpleBroadcastReceiver mShutdownReceiver = new SimpleBroadcastReceiver(i -> destroyExistingTaskbar()); new SimpleBroadcastReceiver(UI_HELPER_EXECUTOR, i -> destroyExistingTaskbar()); // The source for this provider is set when Launcher is available // We use 'non-destroyable' version here so the original provider won't be destroyed Loading Loading @@ -157,7 +156,7 @@ public class TaskbarManager { private boolean mUserUnlocked = false; private final SimpleBroadcastReceiver mTaskbarBroadcastReceiver = new SimpleBroadcastReceiver(this::showTaskbarFromBroadcast); new SimpleBroadcastReceiver(UI_HELPER_EXECUTOR, this::showTaskbarFromBroadcast); private final AllAppsActionManager mAllAppsActionManager; Loading Loading @@ -306,17 +305,15 @@ public class TaskbarManager { .register(NAV_BAR_KIDS_MODE, mOnSettingsChangeListener); Log.d(TASKBAR_NOT_DESTROYED_TAG, "registering component callbacks from constructor."); mContext.registerComponentCallbacks(mComponentCallbacks); mShutdownReceiver.registerAsync(mContext, Intent.ACTION_SHUTDOWN); mShutdownReceiver.register(mContext, Intent.ACTION_SHUTDOWN); UI_HELPER_EXECUTOR.execute(() -> { mSharedState.taskbarSystemActionPendingIntent = PendingIntent.getBroadcast( mContext, SYSTEM_ACTION_ID_TASKBAR, new Intent(ACTION_SHOW_TASKBAR).setPackage(mContext.getPackageName()), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); mContext.registerReceiver( mTaskbarBroadcastReceiver, new IntentFilter(ACTION_SHOW_TASKBAR), RECEIVER_NOT_EXPORTED); mTaskbarBroadcastReceiver.register( mContext, RECEIVER_NOT_EXPORTED, ACTION_SHOW_TASKBAR); }); debugWhyTaskbarNotDestroyed("TaskbarManager created"); Loading Loading @@ -623,7 +620,7 @@ public class TaskbarManager { public void destroy() { debugWhyTaskbarNotDestroyed("TaskbarManager#destroy()"); removeActivityCallbacksAndListeners(); mTaskbarBroadcastReceiver.unregisterReceiverSafelyAsync(mContext); mTaskbarBroadcastReceiver.unregisterReceiverSafely(mContext); destroyExistingTaskbar(); removeTaskbarRootViewFromWindow(); if (mUserUnlocked) { Loading @@ -635,7 +632,7 @@ public class TaskbarManager { .unregister(NAV_BAR_KIDS_MODE, mOnSettingsChangeListener); Log.d(TASKBAR_NOT_DESTROYED_TAG, "unregistering component callbacks from destroy()."); mContext.unregisterComponentCallbacks(mComponentCallbacks); mShutdownReceiver.unregisterReceiverSafelyAsync(mContext); mShutdownReceiver.unregisterReceiverSafely(mContext); } public @Nullable TaskbarActivityContext getCurrentActivityContext() { Loading quickstep/src/com/android/quickstep/OverviewComponentObserver.java +8 −6 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.content.Intent.ACTION_PACKAGE_CHANGED; import static android.content.Intent.ACTION_PACKAGE_REMOVED; import static com.android.launcher3.config.FeatureFlags.SEPARATE_RECENTS_ACTIVITY; import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; import static com.android.systemui.shared.system.PackageManagerWrapper.ACTION_PREFERRED_ACTIVITY_CHANGED; import android.content.ActivityNotFoundException; Loading Loading @@ -55,10 +56,11 @@ import java.util.function.Consumer; public final class OverviewComponentObserver { private static final String TAG = "OverviewComponentObserver"; // We register broadcast receivers on main thread to avoid missing updates. private final SimpleBroadcastReceiver mUserPreferenceChangeReceiver = new SimpleBroadcastReceiver(this::updateOverviewTargets); new SimpleBroadcastReceiver(MAIN_EXECUTOR, this::updateOverviewTargets); private final SimpleBroadcastReceiver mOtherHomeAppUpdateReceiver = new SimpleBroadcastReceiver(this::updateOverviewTargets); new SimpleBroadcastReceiver(MAIN_EXECUTOR, this::updateOverviewTargets); private final Context mContext; private final RecentsAnimationDeviceState mDeviceState; Loading Loading @@ -102,7 +104,7 @@ public final class OverviewComponentObserver { mConfigChangesMap.append(fallbackComponent.hashCode(), fallbackInfo.configChanges); } catch (PackageManager.NameNotFoundException ignored) { /* Impossible */ } mUserPreferenceChangeReceiver.registerAsync(mContext, ACTION_PREFERRED_ACTIVITY_CHANGED); mUserPreferenceChangeReceiver.register(mContext, ACTION_PREFERRED_ACTIVITY_CHANGED); updateOverviewTargets(); } Loading Loading @@ -191,7 +193,7 @@ public final class OverviewComponentObserver { unregisterOtherHomeAppUpdateReceiver(); mUpdateRegisteredPackage = defaultHome.getPackageName(); mOtherHomeAppUpdateReceiver.registerPkgActionsAsync( mOtherHomeAppUpdateReceiver.registerPkgActions( mContext, mUpdateRegisteredPackage, ACTION_PACKAGE_ADDED, ACTION_PACKAGE_CHANGED, ACTION_PACKAGE_REMOVED); } Loading @@ -203,13 +205,13 @@ public final class OverviewComponentObserver { * Clean up any registered receivers. */ public void onDestroy() { mUserPreferenceChangeReceiver.unregisterReceiverSafelyAsync(mContext); mUserPreferenceChangeReceiver.unregisterReceiverSafely(mContext); unregisterOtherHomeAppUpdateReceiver(); } private void unregisterOtherHomeAppUpdateReceiver() { if (mUpdateRegisteredPackage != null) { mOtherHomeAppUpdateReceiver.unregisterReceiverSafelyAsync(mContext); mOtherHomeAppUpdateReceiver.unregisterReceiverSafely(mContext); mUpdateRegisteredPackage = null; } } Loading quickstep/src/com/android/quickstep/util/AsyncClockEventDelegate.java +5 −3 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.quickstep.util; import static android.content.Intent.ACTION_TIMEZONE_CHANGED; import static android.content.Intent.ACTION_TIME_CHANGED; import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; Loading Loading @@ -50,7 +52,7 @@ public class AsyncClockEventDelegate extends ClockEventDelegate private final Context mContext; private final SimpleBroadcastReceiver mReceiver = new SimpleBroadcastReceiver(this::onClockEventReceived); new SimpleBroadcastReceiver(UI_HELPER_EXECUTOR, this::onClockEventReceived); private final ArrayMap<BroadcastReceiver, Handler> mTimeEventReceivers = new ArrayMap<>(); private final List<ContentObserver> mFormatObservers = new ArrayList<>(); Loading @@ -62,7 +64,7 @@ public class AsyncClockEventDelegate extends ClockEventDelegate private AsyncClockEventDelegate(Context context) { super(context); mContext = context; mReceiver.registerAsync(mContext, ACTION_TIME_CHANGED, ACTION_TIMEZONE_CHANGED); mReceiver.register(mContext, ACTION_TIME_CHANGED, ACTION_TIMEZONE_CHANGED); } @Override Loading Loading @@ -123,6 +125,6 @@ public class AsyncClockEventDelegate extends ClockEventDelegate public void close() { mDestroyed = true; SettingsCache.INSTANCE.get(mContext).unregister(mFormatUri, this); mReceiver.unregisterReceiverSafelyAsync(mContext); mReceiver.unregisterReceiverSafely(mContext); } } src/com/android/launcher3/LauncherAppState.java +18 −3 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import static com.android.launcher3.LauncherPrefs.ICON_STATE; import static com.android.launcher3.LauncherPrefs.THEMED_ICONS; import static com.android.launcher3.model.LoaderTask.SMARTSPACE_ON_HOME_SCREEN; import static com.android.launcher3.util.Executors.MODEL_EXECUTOR; import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import static com.android.launcher3.util.SettingsCache.NOTIFICATION_BADGING_URI; import static com.android.launcher3.util.SettingsCache.PRIVATE_SPACE_HIDE_WHEN_LOCKED_URI; Loading Loading @@ -63,6 +64,9 @@ import com.android.launcher3.util.Themes; import com.android.launcher3.util.TraceHelper; import com.android.launcher3.widget.custom.CustomWidgetManager; import java.util.Locale; import java.util.Objects; public class LauncherAppState implements SafeCloseable { public static final String ACTION_FORCE_ROLOAD = "force-reload-launcher"; Loading Loading @@ -115,14 +119,25 @@ public class LauncherAppState implements SafeCloseable { } SimpleBroadcastReceiver modelChangeReceiver = new SimpleBroadcastReceiver(mModel::onBroadcastIntent); modelChangeReceiver.registerAsync(mContext, Intent.ACTION_LOCALE_CHANGED, new SimpleBroadcastReceiver(UI_HELPER_EXECUTOR, mModel::onBroadcastIntent); final Locale oldLocale = mContext.getResources().getConfiguration().locale; modelChangeReceiver.register( mContext, () -> { // if local has changed before receiver is registered on bg thread, // mModel needs to reload. Locale newLocale = mContext.getResources().getConfiguration().locale; if (!Objects.equals(oldLocale, newLocale)) { mModel.forceReload(); } }, Intent.ACTION_LOCALE_CHANGED, ACTION_DEVICE_POLICY_RESOURCE_UPDATED); if (BuildConfig.IS_STUDIO_BUILD) { mContext.registerReceiver(modelChangeReceiver, new IntentFilter(ACTION_FORCE_ROLOAD), RECEIVER_EXPORTED); } mOnTerminateCallback.add(() -> modelChangeReceiver.unregisterReceiverSafelyAsync(mContext)); mOnTerminateCallback.add(() -> modelChangeReceiver.unregisterReceiverSafely(mContext)); SafeCloseable userChangeListener = UserCache.INSTANCE.get(mContext) .addUserEventListener(mModel::onUserEvent); Loading Loading
quickstep/src/com/android/launcher3/model/WellbeingModel.java +9 −6 Original line number Diff line number Diff line Loading @@ -83,10 +83,8 @@ public final class WellbeingModel implements SafeCloseable { private final Handler mWorkerHandler; private final ContentObserver mContentObserver; private final SimpleBroadcastReceiver mWellbeingAppChangeReceiver = new SimpleBroadcastReceiver(t -> restartObserver()); private final SimpleBroadcastReceiver mAppAddRemoveReceiver = new SimpleBroadcastReceiver(this::onAppPackageChanged); private final SimpleBroadcastReceiver mWellbeingAppChangeReceiver; private final SimpleBroadcastReceiver mAppAddRemoveReceiver; private final Object mModelLock = new Object(); // Maps the action Id to the corresponding RemoteAction Loading @@ -101,6 +99,11 @@ public final class WellbeingModel implements SafeCloseable { mWorkerHandler = new Handler(TextUtils.isEmpty(mWellbeingProviderPkg) ? Executors.UI_HELPER_EXECUTOR.getLooper() : Executors.getPackageExecutor(mWellbeingProviderPkg).getLooper()); mWellbeingAppChangeReceiver = new SimpleBroadcastReceiver(mWorkerHandler, t -> restartObserver()); mAppAddRemoveReceiver = new SimpleBroadcastReceiver(mWorkerHandler, this::onAppPackageChanged); mContentObserver = new ContentObserver(mWorkerHandler) { @Override Loading Loading @@ -135,8 +138,8 @@ public final class WellbeingModel implements SafeCloseable { public void close() { if (!TextUtils.isEmpty(mWellbeingProviderPkg)) { mWorkerHandler.post(() -> { mWellbeingAppChangeReceiver.unregisterReceiverSafelySync(mContext); mAppAddRemoveReceiver.unregisterReceiverSafelySync(mContext); mWellbeingAppChangeReceiver.unregisterReceiverSafely(mContext); mAppAddRemoveReceiver.unregisterReceiverSafely(mContext); mContext.getContentResolver().unregisterContentObserver(mContentObserver); }); } Loading
quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java +7 −10 Original line number Diff line number Diff line Loading @@ -39,7 +39,6 @@ import android.app.PendingIntent; import android.content.ComponentCallbacks; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.hardware.display.DisplayManager; Loading Loading @@ -120,7 +119,7 @@ public class TaskbarManager { private final ComponentCallbacks mComponentCallbacks; private final SimpleBroadcastReceiver mShutdownReceiver = new SimpleBroadcastReceiver(i -> destroyExistingTaskbar()); new SimpleBroadcastReceiver(UI_HELPER_EXECUTOR, i -> destroyExistingTaskbar()); // The source for this provider is set when Launcher is available // We use 'non-destroyable' version here so the original provider won't be destroyed Loading Loading @@ -157,7 +156,7 @@ public class TaskbarManager { private boolean mUserUnlocked = false; private final SimpleBroadcastReceiver mTaskbarBroadcastReceiver = new SimpleBroadcastReceiver(this::showTaskbarFromBroadcast); new SimpleBroadcastReceiver(UI_HELPER_EXECUTOR, this::showTaskbarFromBroadcast); private final AllAppsActionManager mAllAppsActionManager; Loading Loading @@ -306,17 +305,15 @@ public class TaskbarManager { .register(NAV_BAR_KIDS_MODE, mOnSettingsChangeListener); Log.d(TASKBAR_NOT_DESTROYED_TAG, "registering component callbacks from constructor."); mContext.registerComponentCallbacks(mComponentCallbacks); mShutdownReceiver.registerAsync(mContext, Intent.ACTION_SHUTDOWN); mShutdownReceiver.register(mContext, Intent.ACTION_SHUTDOWN); UI_HELPER_EXECUTOR.execute(() -> { mSharedState.taskbarSystemActionPendingIntent = PendingIntent.getBroadcast( mContext, SYSTEM_ACTION_ID_TASKBAR, new Intent(ACTION_SHOW_TASKBAR).setPackage(mContext.getPackageName()), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); mContext.registerReceiver( mTaskbarBroadcastReceiver, new IntentFilter(ACTION_SHOW_TASKBAR), RECEIVER_NOT_EXPORTED); mTaskbarBroadcastReceiver.register( mContext, RECEIVER_NOT_EXPORTED, ACTION_SHOW_TASKBAR); }); debugWhyTaskbarNotDestroyed("TaskbarManager created"); Loading Loading @@ -623,7 +620,7 @@ public class TaskbarManager { public void destroy() { debugWhyTaskbarNotDestroyed("TaskbarManager#destroy()"); removeActivityCallbacksAndListeners(); mTaskbarBroadcastReceiver.unregisterReceiverSafelyAsync(mContext); mTaskbarBroadcastReceiver.unregisterReceiverSafely(mContext); destroyExistingTaskbar(); removeTaskbarRootViewFromWindow(); if (mUserUnlocked) { Loading @@ -635,7 +632,7 @@ public class TaskbarManager { .unregister(NAV_BAR_KIDS_MODE, mOnSettingsChangeListener); Log.d(TASKBAR_NOT_DESTROYED_TAG, "unregistering component callbacks from destroy()."); mContext.unregisterComponentCallbacks(mComponentCallbacks); mShutdownReceiver.unregisterReceiverSafelyAsync(mContext); mShutdownReceiver.unregisterReceiverSafely(mContext); } public @Nullable TaskbarActivityContext getCurrentActivityContext() { Loading
quickstep/src/com/android/quickstep/OverviewComponentObserver.java +8 −6 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.content.Intent.ACTION_PACKAGE_CHANGED; import static android.content.Intent.ACTION_PACKAGE_REMOVED; import static com.android.launcher3.config.FeatureFlags.SEPARATE_RECENTS_ACTIVITY; import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; import static com.android.systemui.shared.system.PackageManagerWrapper.ACTION_PREFERRED_ACTIVITY_CHANGED; import android.content.ActivityNotFoundException; Loading Loading @@ -55,10 +56,11 @@ import java.util.function.Consumer; public final class OverviewComponentObserver { private static final String TAG = "OverviewComponentObserver"; // We register broadcast receivers on main thread to avoid missing updates. private final SimpleBroadcastReceiver mUserPreferenceChangeReceiver = new SimpleBroadcastReceiver(this::updateOverviewTargets); new SimpleBroadcastReceiver(MAIN_EXECUTOR, this::updateOverviewTargets); private final SimpleBroadcastReceiver mOtherHomeAppUpdateReceiver = new SimpleBroadcastReceiver(this::updateOverviewTargets); new SimpleBroadcastReceiver(MAIN_EXECUTOR, this::updateOverviewTargets); private final Context mContext; private final RecentsAnimationDeviceState mDeviceState; Loading Loading @@ -102,7 +104,7 @@ public final class OverviewComponentObserver { mConfigChangesMap.append(fallbackComponent.hashCode(), fallbackInfo.configChanges); } catch (PackageManager.NameNotFoundException ignored) { /* Impossible */ } mUserPreferenceChangeReceiver.registerAsync(mContext, ACTION_PREFERRED_ACTIVITY_CHANGED); mUserPreferenceChangeReceiver.register(mContext, ACTION_PREFERRED_ACTIVITY_CHANGED); updateOverviewTargets(); } Loading Loading @@ -191,7 +193,7 @@ public final class OverviewComponentObserver { unregisterOtherHomeAppUpdateReceiver(); mUpdateRegisteredPackage = defaultHome.getPackageName(); mOtherHomeAppUpdateReceiver.registerPkgActionsAsync( mOtherHomeAppUpdateReceiver.registerPkgActions( mContext, mUpdateRegisteredPackage, ACTION_PACKAGE_ADDED, ACTION_PACKAGE_CHANGED, ACTION_PACKAGE_REMOVED); } Loading @@ -203,13 +205,13 @@ public final class OverviewComponentObserver { * Clean up any registered receivers. */ public void onDestroy() { mUserPreferenceChangeReceiver.unregisterReceiverSafelyAsync(mContext); mUserPreferenceChangeReceiver.unregisterReceiverSafely(mContext); unregisterOtherHomeAppUpdateReceiver(); } private void unregisterOtherHomeAppUpdateReceiver() { if (mUpdateRegisteredPackage != null) { mOtherHomeAppUpdateReceiver.unregisterReceiverSafelyAsync(mContext); mOtherHomeAppUpdateReceiver.unregisterReceiverSafely(mContext); mUpdateRegisteredPackage = null; } } Loading
quickstep/src/com/android/quickstep/util/AsyncClockEventDelegate.java +5 −3 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.quickstep.util; import static android.content.Intent.ACTION_TIMEZONE_CHANGED; import static android.content.Intent.ACTION_TIME_CHANGED; import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; Loading Loading @@ -50,7 +52,7 @@ public class AsyncClockEventDelegate extends ClockEventDelegate private final Context mContext; private final SimpleBroadcastReceiver mReceiver = new SimpleBroadcastReceiver(this::onClockEventReceived); new SimpleBroadcastReceiver(UI_HELPER_EXECUTOR, this::onClockEventReceived); private final ArrayMap<BroadcastReceiver, Handler> mTimeEventReceivers = new ArrayMap<>(); private final List<ContentObserver> mFormatObservers = new ArrayList<>(); Loading @@ -62,7 +64,7 @@ public class AsyncClockEventDelegate extends ClockEventDelegate private AsyncClockEventDelegate(Context context) { super(context); mContext = context; mReceiver.registerAsync(mContext, ACTION_TIME_CHANGED, ACTION_TIMEZONE_CHANGED); mReceiver.register(mContext, ACTION_TIME_CHANGED, ACTION_TIMEZONE_CHANGED); } @Override Loading Loading @@ -123,6 +125,6 @@ public class AsyncClockEventDelegate extends ClockEventDelegate public void close() { mDestroyed = true; SettingsCache.INSTANCE.get(mContext).unregister(mFormatUri, this); mReceiver.unregisterReceiverSafelyAsync(mContext); mReceiver.unregisterReceiverSafely(mContext); } }
src/com/android/launcher3/LauncherAppState.java +18 −3 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import static com.android.launcher3.LauncherPrefs.ICON_STATE; import static com.android.launcher3.LauncherPrefs.THEMED_ICONS; import static com.android.launcher3.model.LoaderTask.SMARTSPACE_ON_HOME_SCREEN; import static com.android.launcher3.util.Executors.MODEL_EXECUTOR; import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import static com.android.launcher3.util.SettingsCache.NOTIFICATION_BADGING_URI; import static com.android.launcher3.util.SettingsCache.PRIVATE_SPACE_HIDE_WHEN_LOCKED_URI; Loading Loading @@ -63,6 +64,9 @@ import com.android.launcher3.util.Themes; import com.android.launcher3.util.TraceHelper; import com.android.launcher3.widget.custom.CustomWidgetManager; import java.util.Locale; import java.util.Objects; public class LauncherAppState implements SafeCloseable { public static final String ACTION_FORCE_ROLOAD = "force-reload-launcher"; Loading Loading @@ -115,14 +119,25 @@ public class LauncherAppState implements SafeCloseable { } SimpleBroadcastReceiver modelChangeReceiver = new SimpleBroadcastReceiver(mModel::onBroadcastIntent); modelChangeReceiver.registerAsync(mContext, Intent.ACTION_LOCALE_CHANGED, new SimpleBroadcastReceiver(UI_HELPER_EXECUTOR, mModel::onBroadcastIntent); final Locale oldLocale = mContext.getResources().getConfiguration().locale; modelChangeReceiver.register( mContext, () -> { // if local has changed before receiver is registered on bg thread, // mModel needs to reload. Locale newLocale = mContext.getResources().getConfiguration().locale; if (!Objects.equals(oldLocale, newLocale)) { mModel.forceReload(); } }, Intent.ACTION_LOCALE_CHANGED, ACTION_DEVICE_POLICY_RESOURCE_UPDATED); if (BuildConfig.IS_STUDIO_BUILD) { mContext.registerReceiver(modelChangeReceiver, new IntentFilter(ACTION_FORCE_ROLOAD), RECEIVER_EXPORTED); } mOnTerminateCallback.add(() -> modelChangeReceiver.unregisterReceiverSafelyAsync(mContext)); mOnTerminateCallback.add(() -> modelChangeReceiver.unregisterReceiverSafely(mContext)); SafeCloseable userChangeListener = UserCache.INSTANCE.get(mContext) .addUserEventListener(mModel::onUserEvent); Loading