Как получить ActivityContext в классе Java с помощью Dagger - PullRequest
0 голосов
/ 05 июля 2019

У меня есть класс AlertDisplay для показа диалога, мне нужен контекст активности внутри этого класса с помощью кинжала.

ApplicationComponent.java

@Singleton
@Component(modules = {AndroidSupportInjectionModule.class, ApplicationModule.class, ActivityBuilder.class, FragmentBuilder.class, ViewModelBuilder.class, NetworkModule.class, ServiceBuilder.class})
public interface ApplicationComponent extends AndroidInjector<AircraftOnLoadApplication> {

    void inject(AircraftOnLoadApplication app);

    @Component.Builder
    interface Builder {

        @BindsInstance
        Builder application(Application application);

        @BindsInstance
        Builder baseUrl(@BaseUrl String baseUrl);

        ApplicationComponent build();
    }
}

ApplicationModule.jva

@Module
public class ApplicationModule {

    @Provides
    @Singleton
    Context provideContext(Application application) {
        return application;
    }
}

ActivityBuilder.java

@Module
public abstract class ActivityBuilder {

    @ContributesAndroidInjector
    abstract LoginActivity contributeLoginActivityInjector();
}

это то, как я делаю инъекцию в своем классе application.java в методе oncreate.

daggerApplicationComponent = DaggerApplicationComponent.builder()
                .application(this)
                .baseUrl(BuildConfig.baseURL).build();
        daggerApplicationComponent.inject(this);

Ниже приведен мой класс отображения предупреждений, где я использую статическую ссылку на активность, чтобы показать диалог из неактивного класса, вместо этого я хочу контекст активности внутри этого класса.

public class AlertDisplay {

    private final Context context;
    private final INavigationService navigationService;
    private Dialog progressDialog;
    private CustomProgressDataBinding binding;


    @Inject
    public AlertDisplay(Context context, INavigationService navigationService) {
        this.context = context;
        this.navigationService = navigationService;
    }

    @Override
    public void displayAlert(String title, String message) {
        if (this.context == null) {
            return;
        }
        Dialog dialog = new Dialog(BaseActivity.currentActivity);
        dialog.requestWindowFeature(1);
        dialog.setContentView(R.layout.dialog_alert);
        TextView titleTextView = dialog.findViewById(R.id.textViewHeader);
        TextView messageTextView = dialog.findViewById(R.id.textViewMessage);
        Button positiveButton = dialog.findViewById(R.id.buttonPositive);
        messageTextView.setText(message);
        titleTextView.setText(title);
        if (!dialog.isShowing()) {
            dialog.show();
        }
        dialog.setCanceledOnTouchOutside(false);
        dialog.setCancelable(false);
        Window window = dialog.getWindow();
        window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
        Objects.requireNonNull(dialog.getWindow()).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        positiveButton.setOnClickListener(v -> {
            dialog.dismiss();
        });
    }
}

Заранее благодарю за помощь

...