package com.tplink.omada.sdncontroller.ui.settings.networksecurity.appcontrol;
import android.content.Context;
import android.os.Bundle;
import androidx.activity.contextaware.OnContextAvailableListener;
import androidx.annotation.CallSuper;
import androidx.annotation.Nullable;
import androidx.databinding.ViewDataBinding;
import androidx.lifecycle.ViewModelProvider;
import com.tplink.omada.sdncontroller.SdnBaseHiltActivity;
import com.tplink.omada.sdncontroller.base.SdnBaseViewModel;
import dagger.hilt.android.internal.lifecycle.DefaultViewModelFactories;
import dagger.hilt.android.internal.managers.ActivityComponentManager;
import dagger.hilt.android.internal.managers.SavedStateHandleHolder;
import dagger.hilt.internal.GeneratedComponentManagerHolder;
import dagger.hilt.internal.UnsafeCasts;
import java.lang.Object;
import java.lang.Override;
import javax.annotation.processing.Generated;
/**
* A generated base class to be extended by the @dagger.hilt.android.AndroidEntryPoint annotated class. If using the Gradle plugin, this is swapped as the base class via bytecode transformation.
*/
@Generated("dagger.hilt.android.processor.internal.androidentrypoint.ActivityGenerator")
public abstract class Hilt_SdnAppControlActivity<VDB extends ViewDataBinding, V extends SdnBaseViewModel> extends SdnBaseHiltActivity<VDB, V> implements GeneratedComponentManagerHolder {
private SavedStateHandleHolder savedStateHandleHolder;
private volatile ActivityComponentManager componentManager;
private final Object componentManagerLock = new Object();
private boolean injected = false;
Hilt_SdnAppControlActivity() {
super();
_initHiltInternal();
}
private void _initHiltInternal() {
addOnContextAvailableListener(new OnContextAvailableListener() {
@Override
public void onContextAvailable(Context context) {
inject();
}
});
}
private void initSavedStateHandleHolder() {
savedStateHandleHolder = componentManager().getSavedStateHandleHolder();
if (savedStateHandleHolder.isInvalid()) {
savedStateHandleHolder.setExtras(getDefaultViewModelCreationExtras());
}
}
@CallSuper
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initSavedStateHandleHolder();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (savedStateHandleHolder != null) {
savedStateHandleHolder.clear();
}
}
@Override
public final Object generatedComponent() {
return this.componentManager().generatedComponent();
}
protected ActivityComponentManager createComponentManager() {
return new ActivityComponentManager(this);
}
@Override
public final ActivityComponentManager componentManager() {
if (componentManager == null) {
synchronized (componentManagerLock) {
if (componentManager == null) {
componentManager = createComponentManager();
}
}
}
return componentManager;
}
protected void inject() {
if (!injected) {
injected = true;
((SdnAppControlActivity_GeneratedInjector) this.generatedComponent()).injectSdnAppControlActivity(UnsafeCasts.<SdnAppControlActivity>unsafeCast(this));
}
}
@Override
public ViewModelProvider.Factory getDefaultViewModelProviderFactory() {
return DefaultViewModelFactories.getActivityFactory(this, super.getDefaultViewModelProviderFactory());
}
}
/*
* Copyright (C) 2023 The Dagger Authors.
*
* 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 dagger.hilt.android.internal.managers;
import static dagger.hilt.internal.Preconditions.checkNotNull;
import static dagger.hilt.internal.Preconditions.checkState;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.lifecycle.SavedStateHandle;
import androidx.lifecycle.SavedStateHandleSupport;
import androidx.lifecycle.viewmodel.CreationExtras;
import androidx.lifecycle.viewmodel.MutableCreationExtras;
import dagger.hilt.android.internal.ThreadUtil;
/** Implementation for SavedStateHandleHolder. */
public final class SavedStateHandleHolder {
@Nullable private CreationExtras extras;
@Nullable private SavedStateHandle handle;
private final boolean isComponentActivity;
public SavedStateHandleHolder(@Nullable CreationExtras extras) {
isComponentActivity = (extras != null);
this.extras = extras;
}
public SavedStateHandle getSavedStateHandle() {
ThreadUtil.ensureMainThread();
checkState(
isComponentActivity,
"Activity that does not extend ComponentActivity cannot use SavedStateHandle");
if (handle != null) {
return handle;
}
checkNotNull(
extras,
"The first access to SavedStateHandle should happen between super.onCreate() and"
+ " super.onDestroy()");
// Clean up default args, since those are unused and we don't want to duplicate those for each
// SavedStateHandle
MutableCreationExtras mutableExtras = new MutableCreationExtras(extras);
mutableExtras.set(SavedStateHandleSupport.DEFAULT_ARGS_KEY, Bundle.EMPTY);
extras = mutableExtras;
handle = SavedStateHandleSupport.createSavedStateHandle(extras);
extras = null;
return handle;
}
public void clear() {
extras = null;
}
public void setExtras(CreationExtras extras) {
checkState(
isComponentActivity,
"setExtras should only be called for an Activity that extends ComponentActivity");
if (handle != null) {
// If handle is already created, we don't need to store CreationExtras.
return;
}
this.extras = extras;
}
public boolean isInvalid() {
return handle == null && extras == null;
}
}
/*
* Copyright (C) 2020 The Dagger Authors.
*
* 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 dagger.hilt.android.internal.lifecycle;
import static androidx.lifecycle.SavedStateHandleSupport.createSavedStateHandle;
import android.app.Activity;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.viewmodel.CreationExtras;
import androidx.savedstate.SavedStateRegistryOwner;
import dagger.Module;
import dagger.hilt.EntryPoint;
import dagger.hilt.EntryPoints;
import dagger.hilt.InstallIn;
import dagger.hilt.android.components.ActivityComponent;
import dagger.hilt.android.components.ViewModelComponent;
import dagger.hilt.android.internal.builders.ViewModelComponentBuilder;
import dagger.multibindings.Multibinds;
import java.util.Map;
import javax.inject.Provider;
import kotlin.jvm.functions.Function1;
/**
* View Model Provider Factory for the Hilt Extension.
*
* <p>A provider for this factory will be installed in the {@link
* dagger.hilt.android.components.ActivityComponent} and {@link
* dagger.hilt.android.components.FragmentComponent}. An instance of this factory will also be the
* default factory by activities and fragments annotated with {@link
* dagger.hilt.android.AndroidEntryPoint}.
*/
public final class HiltViewModelFactory implements ViewModelProvider.Factory {
/** Hilt entry point for getting the multi-binding map of ViewModels. */
@EntryPoint
@InstallIn(ViewModelComponent.class)
public interface ViewModelFactoriesEntryPoint {
@HiltViewModelMap
Map<Class<?>, Provider<ViewModel>> getHiltViewModelMap();
// From ViewModel class names to user defined @AssistedFactory-annotated implementations.
@HiltViewModelAssistedMap
Map<Class<?>, Object> getHiltViewModelAssistedMap();
}
/** Creation extra key for the callbacks that create @AssistedInject-annotated ViewModels. */
public static final CreationExtras.Key<Function1<Object, ViewModel>> CREATION_CALLBACK_KEY =
new CreationExtras.Key<Function1<Object, ViewModel>>() {};
/** Hilt module for providing the empty multi-binding map of ViewModels. */
@Module
@InstallIn(ViewModelComponent.class)
interface ViewModelModule {
@Multibinds
@HiltViewModelMap
Map<Class<?>, ViewModel> hiltViewModelMap();
@Multibinds
@HiltViewModelAssistedMap
Map<Class<?>, Object> hiltViewModelAssistedMap();
}
private final Map<Class<?>, Boolean> hiltViewModelKeys;
private final ViewModelProvider.Factory delegateFactory;
private final ViewModelProvider.Factory hiltViewModelFactory;
public HiltViewModelFactory(
@NonNull Map<Class<?>, Boolean> hiltViewModelKeys,
@NonNull ViewModelProvider.Factory delegateFactory,
@NonNull ViewModelComponentBuilder viewModelComponentBuilder) {
this.hiltViewModelKeys = hiltViewModelKeys;
this.delegateFactory = delegateFactory;
this.hiltViewModelFactory =
new ViewModelProvider.Factory() {
@NonNull
@Override
public <T extends ViewModel> T create(
@NonNull Class<T> modelClass, @NonNull CreationExtras extras) {
RetainedLifecycleImpl lifecycle = new RetainedLifecycleImpl();
ViewModelComponent component =
viewModelComponentBuilder
.savedStateHandle(createSavedStateHandle(extras))
.viewModelLifecycle(lifecycle)
.build();
T viewModel = createViewModel(component, modelClass, extras);
viewModel.addCloseable(lifecycle::dispatchOnCleared);
return viewModel;
}
@SuppressWarnings("unchecked")
private <T extends ViewModel> T createViewModel(
@NonNull ViewModelComponent component,
@NonNull Class<T> modelClass,
@NonNull CreationExtras extras) {
Provider<? extends ViewModel> provider =
EntryPoints.get(component, ViewModelFactoriesEntryPoint.class)
.getHiltViewModelMap()
.get(modelClass);
Function1<Object, ViewModel> creationCallback = extras.get(CREATION_CALLBACK_KEY);
Object assistedFactory =
EntryPoints.get(component, ViewModelFactoriesEntryPoint.class)
.getHiltViewModelAssistedMap()
.get(modelClass);
if (assistedFactory == null) {
if (creationCallback == null) {
if (provider == null) {
throw new IllegalStateException(
"Expected the @HiltViewModel-annotated class "
+ modelClass.getName()
+ " to be available in the multi-binding of "
+ "@HiltViewModelMap"
+ " but none was found.");
} else {
return (T) provider.get();
}
} else {
// Provider could be null or non-null.
throw new IllegalStateException(
"Found creation callback but class "
+ modelClass.getName()
+ " does not have an assisted factory specified in @HiltViewModel.");
}
} else {
if (provider == null) {
if (creationCallback == null) {
throw new IllegalStateException(
"Found @HiltViewModel-annotated class "
+ modelClass.getName()
+ " using @AssistedInject but no creation callback"
+ " was provided in CreationExtras.");
} else {
return (T) creationCallback.invoke(assistedFactory);
}
} else {
// Creation callback could be null or non-null.
throw new AssertionError(
"Found the @HiltViewModel-annotated class "
+ modelClass.getName()
+ " in both the multi-bindings of "
+ "@HiltViewModelMap and @HiltViewModelAssistedMap.");
}
}
}
};
}
@NonNull
@Override
public <T extends ViewModel> T create(
@NonNull Class<T> modelClass, @NonNull CreationExtras extras) {
if (hiltViewModelKeys.containsKey(modelClass)) {
return hiltViewModelFactory.create(modelClass, extras);
} else {
return delegateFactory.create(modelClass, extras);
}
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
if (hiltViewModelKeys.containsKey(modelClass)) {
return hiltViewModelFactory.create(modelClass);
} else {
return delegateFactory.create(modelClass);
}
}
@EntryPoint
@InstallIn(ActivityComponent.class)
interface ActivityCreatorEntryPoint {
@HiltViewModelMap.KeySet
Map<Class<?>, Boolean> getViewModelKeys();
ViewModelComponentBuilder getViewModelComponentBuilder();
}
public static ViewModelProvider.Factory createInternal(
@NonNull Activity activity,
@NonNull SavedStateRegistryOwner owner,
@Nullable Bundle defaultArgs,
@NonNull ViewModelProvider.Factory delegateFactory) {
return createInternal(activity, delegateFactory);
}
public static ViewModelProvider.Factory createInternal(
@NonNull Activity activity, @NonNull ViewModelProvider.Factory delegateFactory) {
ActivityCreatorEntryPoint entryPoint =
EntryPoints.get(activity, ActivityCreatorEntryPoint.class);
return new HiltViewModelFactory(
entryPoint.getViewModelKeys(),
delegateFactory,
entryPoint.getViewModelComponentBuilder()
);
}
}
package com.tplink.omada.sdncontroller.viewmodel.settings.networksecurity;
import android.app.Application;
import androidx.lifecycle.SavedStateHandle;
import com.tplink.omada.controller.session.ControllerSessionManager;
import com.tplink.omada.di.provider.DispatcherProvider;
import dagger.internal.DaggerGenerated;
import dagger.internal.Factory;
import dagger.internal.Provider;
import dagger.internal.QualifierMetadata;
import dagger.internal.ScopeMetadata;
import javax.annotation.processing.Generated;
@ScopeMetadata
@QualifierMetadata
@DaggerGenerated
@Generated(
value = "dagger.internal.codegen.ComponentProcessor",
comments = "https://dagger.dev"
)
@SuppressWarnings({
"unchecked",
"rawtypes",
"KotlinInternal",
"KotlinInternalInJava",
"cast",
"deprecation",
"nullness:initialization.field.uninitialized"
})
public final class AppControlViewModel_Factory implements Factory<AppControlViewModel> {
private final Provider<Application> applicationProvider;
private final Provider<ControllerSessionManager> managerProvider;
private final Provider<DispatcherProvider> dispatcherProvider;
private final Provider<SavedStateHandle> savedStateHandleProvider;
private AppControlViewModel_Factory(Provider<Application> applicationProvider,
Provider<ControllerSessionManager> managerProvider,
Provider<DispatcherProvider> dispatcherProvider,
Provider<SavedStateHandle> savedStateHandleProvider) {
this.applicationProvider = applicationProvider;
this.managerProvider = managerProvider;
this.dispatcherProvider = dispatcherProvider;
this.savedStateHandleProvider = savedStateHandleProvider;
}
@Override
public AppControlViewModel get() {
return newInstance(applicationProvider.get(), managerProvider.get(), dispatcherProvider.get(), savedStateHandleProvider.get());
}
public static AppControlViewModel_Factory create(Provider<Application> applicationProvider,
Provider<ControllerSessionManager> managerProvider,
Provider<DispatcherProvider> dispatcherProvider,
Provider<SavedStateHandle> savedStateHandleProvider) {
return new AppControlViewModel_Factory(applicationProvider, managerProvider, dispatcherProvider, savedStateHandleProvider);
}
public static AppControlViewModel newInstance(Application application,
ControllerSessionManager manager, DispatcherProvider dispatcherProvider,
SavedStateHandle savedStateHandle) {
return new AppControlViewModel(application, manager, dispatcherProvider, savedStateHandle);
}
}
阅读这四部分代码,告诉我savestatehandle是怎么创建并传递的?
最新发布