diff --git a/quickstep/dagger/LauncherAppComponent.java b/quickstep/dagger/LauncherAppComponent.java index dab25820ce..bd6008e70d 100644 --- a/quickstep/dagger/LauncherAppComponent.java +++ b/quickstep/dagger/LauncherAppComponent.java @@ -16,15 +16,16 @@ package com.android.launcher3.dagger; -import dagger.Component; -import javax.inject.Singleton; +import com.android.quickstep.dagger.QuickStepModule; + +import dagger.Component; /** * Root component for Dagger injection for Launcher Quickstep. */ -@Singleton -@Component +@LauncherAppSingleton +@Component(modules = QuickStepModule.class) public interface LauncherAppComponent extends LauncherBaseAppComponent { /** Builder for quickstep LauncherAppComponent. */ @Component.Builder diff --git a/quickstep/src/com/android/quickstep/dagger/QuickStepModule.java b/quickstep/src/com/android/quickstep/dagger/QuickStepModule.java new file mode 100644 index 0000000000..db29636c36 --- /dev/null +++ b/quickstep/src/com/android/quickstep/dagger/QuickStepModule.java @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2024 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 com.android.quickstep.dagger; + +import com.android.quickstep.logging.LoggingModule; + +import dagger.Module; + +@Module(includes = {LoggingModule.class}) +public class QuickStepModule { +} diff --git a/quickstep/src/com/android/quickstep/logging/LoggingModule.java b/quickstep/src/com/android/quickstep/logging/LoggingModule.java new file mode 100644 index 0000000000..8fdf3c7edf --- /dev/null +++ b/quickstep/src/com/android/quickstep/logging/LoggingModule.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2024 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 com.android.quickstep.logging; + +import android.content.Context; + +import com.android.launcher3.dagger.ApplicationContext; +import com.android.launcher3.dagger.LauncherAppSingleton; + +import dagger.Module; +import dagger.Provides; + +@Module +public class LoggingModule { + @Provides + @LauncherAppSingleton + SettingsChangeLogger provideSettingsChangeLogger(@ApplicationContext Context context) { + return SettingsChangeLogger.INSTANCE.get(context); + } +} diff --git a/src/com/android/launcher3/LauncherApplication.java b/src/com/android/launcher3/LauncherApplication.java index 8969b60534..490186a524 100644 --- a/src/com/android/launcher3/LauncherApplication.java +++ b/src/com/android/launcher3/LauncherApplication.java @@ -30,7 +30,7 @@ public class LauncherApplication extends Application { public void onCreate() { super.onCreate(); MainProcessInitializer.initialize(this); - mAppComponent = DaggerLauncherAppComponent.builder().build(); + mAppComponent = DaggerLauncherAppComponent.builder().appContext(this).build(); } public LauncherBaseAppComponent getAppComponent() { diff --git a/src/com/android/launcher3/dagger/ActivityContextScope.java b/src/com/android/launcher3/dagger/ActivityContextScope.java new file mode 100644 index 0000000000..887f15cacf --- /dev/null +++ b/src/com/android/launcher3/dagger/ActivityContextScope.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2024 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 com.android.launcher3.dagger; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import javax.inject.Scope; + +/** + * Scope annotation for singletons associated with Launcher activity context. + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Scope +public @interface ActivityContextScope { +} diff --git a/src/com/android/launcher3/dagger/ApplicationContext.java b/src/com/android/launcher3/dagger/ApplicationContext.java new file mode 100644 index 0000000000..9a5b08b51b --- /dev/null +++ b/src/com/android/launcher3/dagger/ApplicationContext.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2024 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 com.android.launcher3.dagger; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import javax.inject.Qualifier; + +/** + * Qualifier for Launcher application context. + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Qualifier +public @interface ApplicationContext { +} diff --git a/src/com/android/launcher3/dagger/LauncherAppSingleton.java b/src/com/android/launcher3/dagger/LauncherAppSingleton.java new file mode 100644 index 0000000000..92c00b6d85 --- /dev/null +++ b/src/com/android/launcher3/dagger/LauncherAppSingleton.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2024 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 com.android.launcher3.dagger; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import javax.inject.Scope; + +/** + * Scope annotation for singleton items within the LauncherAppComponent. + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Scope +public @interface LauncherAppSingleton { +} diff --git a/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java b/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java index 3488c95333..1a59d82266 100644 --- a/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java +++ b/src/com/android/launcher3/dagger/LauncherBaseAppComponent.java @@ -16,6 +16,10 @@ package com.android.launcher3.dagger; +import android.content.Context; + +import dagger.BindsInstance; + /** * Launcher base component for Dagger injection. * @@ -27,6 +31,7 @@ package com.android.launcher3.dagger; public interface LauncherBaseAppComponent { /** Builder for LauncherBaseAppComponent. */ interface Builder { + @BindsInstance Builder appContext(@ApplicationContext Context context); LauncherBaseAppComponent build(); } } diff --git a/src/com/android/launcher3/util/MainThreadInitializedObject.java b/src/com/android/launcher3/util/MainThreadInitializedObject.java index 1a0f9a0a8b..63f14bd6ea 100644 --- a/src/com/android/launcher3/util/MainThreadInitializedObject.java +++ b/src/com/android/launcher3/util/MainThreadInitializedObject.java @@ -35,6 +35,9 @@ import java.util.function.Consumer; /** * Utility class for defining singletons which are initiated on main thread. + * + * TODO(b/361850561): Do not delete MainThreadInitializedObject until we find a way to + * unregister and understand how singleton objects are destroyed in dagger graph. */ public class MainThreadInitializedObject { diff --git a/src_no_quickstep/com/android/launcher3/dagger/LauncherAppComponent.java b/src_no_quickstep/com/android/launcher3/dagger/LauncherAppComponent.java index 4d7f93701e..63d87e8684 100644 --- a/src_no_quickstep/com/android/launcher3/dagger/LauncherAppComponent.java +++ b/src_no_quickstep/com/android/launcher3/dagger/LauncherAppComponent.java @@ -18,12 +18,10 @@ package com.android.launcher3.dagger; import dagger.Component; -import javax.inject.Singleton; - /** * Root component for Dagger injection for Launcher AOSP. */ -@Singleton +@LauncherAppSingleton @Component public interface LauncherAppComponent extends LauncherBaseAppComponent { /** Builder for aosp LauncherAppComponent. */