Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ plugins {
id 'com.google.gms.google-services'
id 'com.google.firebase.crashlytics'
id 'com.mikepenz.aboutlibraries.plugin'
id 'com.google.dagger.hilt.android'
}

android {
Expand Down Expand Up @@ -93,4 +94,6 @@ dependencies {
implementation libs.library
implementation libs.materialratingbar.library
implementation libs.codeview
implementation libs.hilt.android
annotationProcessor libs.hilt.compiler
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,12 @@
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.appopen.AppOpenAd.AppOpenAdLoadCallback;

import dagger.hilt.android.HiltAndroidApp;

import java.util.Date;

@SuppressWarnings("ALL")
@HiltAndroidApp
public class AppOpenAd extends Application implements ActivityLifecycleCallbacks, LifecycleObserver {
private AppOpenAdManager appOpenAdManager;
private Activity currentActivity;
Expand Down
268 changes: 268 additions & 0 deletions app/src/main/java/com/d4rk/androidtutorials/java/di/AppModule.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,268 @@
package com.d4rk.androidtutorials.java.di;

import android.app.Application;
import android.content.res.AssetManager;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;
import com.d4rk.androidtutorials.java.data.repository.DefaultHomeRepository;
import com.d4rk.androidtutorials.java.data.repository.DefaultQuizRepository;
import com.d4rk.androidtutorials.java.data.repository.HomeRepository;
import com.d4rk.androidtutorials.java.data.repository.QuizRepository;
import com.d4rk.androidtutorials.java.data.source.DefaultHomeLocalDataSource;
import com.d4rk.androidtutorials.java.data.source.DefaultHomeRemoteDataSource;
import com.d4rk.androidtutorials.java.data.source.DefaultQuizLocalDataSource;
import com.d4rk.androidtutorials.java.data.source.HomeLocalDataSource;
import com.d4rk.androidtutorials.java.data.source.HomeRemoteDataSource;
import com.d4rk.androidtutorials.java.data.source.QuizLocalDataSource;
import com.d4rk.androidtutorials.java.domain.about.GetCurrentYearUseCase;
import com.d4rk.androidtutorials.java.domain.about.GetVersionStringUseCase;
import com.d4rk.androidtutorials.java.domain.help.LaunchReviewFlowUseCase;
import com.d4rk.androidtutorials.java.domain.help.RequestReviewFlowUseCase;
import com.d4rk.androidtutorials.java.domain.home.GetDailyTipUseCase;
import com.d4rk.androidtutorials.java.domain.home.GetPromotedAppsUseCase;
import com.d4rk.androidtutorials.java.domain.main.ApplyLanguageSettingsUseCase;
import com.d4rk.androidtutorials.java.domain.main.ApplyThemeSettingsUseCase;
import com.d4rk.androidtutorials.java.domain.main.BuildShortcutIntentUseCase;
import com.d4rk.androidtutorials.java.domain.main.GetAppUpdateManagerUseCase;
import com.d4rk.androidtutorials.java.domain.main.GetBottomNavLabelVisibilityUseCase;
import com.d4rk.androidtutorials.java.domain.main.GetDefaultTabPreferenceUseCase;
import com.d4rk.androidtutorials.java.domain.main.IsAppInstalledUseCase;
import com.d4rk.androidtutorials.java.domain.main.MarkStartupScreenShownUseCase;
import com.d4rk.androidtutorials.java.domain.main.ShouldShowStartupScreenUseCase;
import com.d4rk.androidtutorials.java.domain.quiz.LoadQuizQuestionsUseCase;
import com.d4rk.androidtutorials.java.domain.settings.ApplyConsentUseCase;
import com.d4rk.androidtutorials.java.domain.settings.GetSharedPreferencesUseCase;
import com.d4rk.androidtutorials.java.domain.settings.OnPreferenceChangedUseCase;
import com.d4rk.androidtutorials.java.domain.startup.LoadConsentFormUseCase;
import com.d4rk.androidtutorials.java.domain.startup.RequestConsentInfoUseCase;
import com.d4rk.androidtutorials.java.domain.support.InitBillingClientUseCase;
import com.d4rk.androidtutorials.java.domain.support.InitMobileAdsUseCase;
import com.d4rk.androidtutorials.java.domain.support.InitiatePurchaseUseCase;
import com.d4rk.androidtutorials.java.domain.support.QueryProductDetailsUseCase;
import com.d4rk.androidtutorials.java.ui.screens.about.repository.AboutRepository;
import com.d4rk.androidtutorials.java.ui.screens.help.repository.HelpRepository;
import com.d4rk.androidtutorials.java.ui.screens.main.repository.MainRepository;
import com.d4rk.androidtutorials.java.ui.screens.settings.repository.SettingsRepository;
import com.d4rk.androidtutorials.java.ui.screens.startup.repository.StartupRepository;
import com.d4rk.androidtutorials.java.ui.screens.support.repository.SupportRepository;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import dagger.Module;
import dagger.Provides;
import dagger.hilt.InstallIn;
import dagger.hilt.components.SingletonComponent;
import javax.inject.Singleton;

@Module
@InstallIn(SingletonComponent.class)
public class AppModule {

@Provides
@Singleton
public ExecutorService provideExecutorService() {
return Executors.newSingleThreadExecutor();
}

@Provides
@Singleton
public RequestQueue provideRequestQueue(Application application) {
return Volley.newRequestQueue(application);
}

@Provides
@Singleton
public HomeRemoteDataSource provideHomeRemoteDataSource(RequestQueue queue) {
return new DefaultHomeRemoteDataSource(queue,
"https://raw.githubusercontent.com/D4rK7355608/com.d4rk.apis/refs/heads/main/App%20Toolkit/release/en/home/api_android_apps.json");
}

@Provides
@Singleton
public HomeLocalDataSource provideHomeLocalDataSource(Application application) {
return new DefaultHomeLocalDataSource(application);
}

@Provides
@Singleton
public HomeRepository provideHomeRepository(HomeRemoteDataSource remote,
HomeLocalDataSource local) {
return new DefaultHomeRepository(remote, local);
}

@Provides
public GetDailyTipUseCase provideGetDailyTipUseCase(HomeRepository repository) {
return new GetDailyTipUseCase(repository);
}

@Provides
public GetPromotedAppsUseCase provideGetPromotedAppsUseCase(HomeRepository repository) {
return new GetPromotedAppsUseCase(repository);
}

@Provides
@Singleton
public AboutRepository provideAboutRepository(Application application) {
return new AboutRepository(application);
}

@Provides
public GetVersionStringUseCase provideGetVersionStringUseCase(AboutRepository repository) {
return new GetVersionStringUseCase(repository);
}

@Provides
public GetCurrentYearUseCase provideGetCurrentYearUseCase(AboutRepository repository) {
return new GetCurrentYearUseCase(repository);
}

@Provides
@Singleton
public MainRepository provideMainRepository(Application application) {
return new MainRepository(application);
}

@Provides
public ApplyThemeSettingsUseCase provideApplyThemeSettingsUseCase(MainRepository repository) {
return new ApplyThemeSettingsUseCase(repository);
}

@Provides
public GetBottomNavLabelVisibilityUseCase provideGetBottomNavLabelVisibilityUseCase(MainRepository repository) {
return new GetBottomNavLabelVisibilityUseCase(repository);
}

@Provides
public GetDefaultTabPreferenceUseCase provideGetDefaultTabPreferenceUseCase(MainRepository repository) {
return new GetDefaultTabPreferenceUseCase(repository);
}

@Provides
public ApplyLanguageSettingsUseCase provideApplyLanguageSettingsUseCase(MainRepository repository) {
return new ApplyLanguageSettingsUseCase(repository);
}

@Provides
public ShouldShowStartupScreenUseCase provideShouldShowStartupScreenUseCase(MainRepository repository) {
return new ShouldShowStartupScreenUseCase(repository);
}

@Provides
public MarkStartupScreenShownUseCase provideMarkStartupScreenShownUseCase(MainRepository repository) {
return new MarkStartupScreenShownUseCase(repository);
}

@Provides
public IsAppInstalledUseCase provideIsAppInstalledUseCase(MainRepository repository) {
return new IsAppInstalledUseCase(repository);
}

@Provides
public BuildShortcutIntentUseCase provideBuildShortcutIntentUseCase(MainRepository repository) {
return new BuildShortcutIntentUseCase(repository);
}

@Provides
public GetAppUpdateManagerUseCase provideGetAppUpdateManagerUseCase(MainRepository repository) {
return new GetAppUpdateManagerUseCase(repository);
}

@Provides
@Singleton
public SettingsRepository provideSettingsRepository(Application application) {
return new SettingsRepository(application);
}

@Provides
public OnPreferenceChangedUseCase provideOnPreferenceChangedUseCase(SettingsRepository repository) {
return new OnPreferenceChangedUseCase(repository);
}

@Provides
public GetSharedPreferencesUseCase provideGetSharedPreferencesUseCase(SettingsRepository repository) {
return new GetSharedPreferencesUseCase(repository);
}

@Provides
public ApplyConsentUseCase provideApplyConsentUseCase(SettingsRepository repository) {
return new ApplyConsentUseCase(repository);
}

@Provides
@Singleton
public QuizLocalDataSource provideQuizLocalDataSource(Application application) {
AssetManager manager = application.getAssets();
return new DefaultQuizLocalDataSource(manager);
}

@Provides
@Singleton
public QuizRepository provideQuizRepository(QuizLocalDataSource local) {
return new DefaultQuizRepository(local);
}

@Provides
public LoadQuizQuestionsUseCase provideLoadQuizQuestionsUseCase(QuizRepository repository) {
return new LoadQuizQuestionsUseCase(repository);
}

@Provides
@Singleton
public StartupRepository provideStartupRepository(Application application) {
return new StartupRepository(application);
}

@Provides
public RequestConsentInfoUseCase provideRequestConsentInfoUseCase(StartupRepository repository) {
return new RequestConsentInfoUseCase(repository);
}

@Provides
public LoadConsentFormUseCase provideLoadConsentFormUseCase(StartupRepository repository) {
return new LoadConsentFormUseCase(repository);
}

@Provides
@Singleton
public SupportRepository provideSupportRepository(Application application) {
return new SupportRepository(application);
}

@Provides
public InitBillingClientUseCase provideInitBillingClientUseCase(SupportRepository repository) {
return new InitBillingClientUseCase(repository);
}

@Provides
public QueryProductDetailsUseCase provideQueryProductDetailsUseCase(SupportRepository repository) {
return new QueryProductDetailsUseCase(repository);
}

@Provides
public InitiatePurchaseUseCase provideInitiatePurchaseUseCase(SupportRepository repository) {
return new InitiatePurchaseUseCase(repository);
}

@Provides
public InitMobileAdsUseCase provideInitMobileAdsUseCase(SupportRepository repository) {
return new InitMobileAdsUseCase(repository);
}

@Provides
@Singleton
public HelpRepository provideHelpRepository(Application application) {
return new HelpRepository(application);
}

@Provides
public RequestReviewFlowUseCase provideRequestReviewFlowUseCase(HelpRepository repository) {
return new RequestReviewFlowUseCase(repository);
}

@Provides
public LaunchReviewFlowUseCase provideLaunchReviewFlowUseCase(HelpRepository repository) {
return new LaunchReviewFlowUseCase(repository);
}
}
Original file line number Diff line number Diff line change
@@ -1,29 +1,28 @@
package com.d4rk.androidtutorials.java.ui.screens.about;

import android.app.Application;
import androidx.lifecycle.ViewModel;

import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import dagger.hilt.android.lifecycle.HiltViewModel;
import javax.inject.Inject;

import com.d4rk.androidtutorials.java.ui.screens.about.repository.AboutRepository;
import com.d4rk.androidtutorials.java.domain.about.GetVersionStringUseCase;
import com.d4rk.androidtutorials.java.domain.about.GetCurrentYearUseCase;


/**
* ViewModel for the About screen. Delegates data/logic to AboutRepository.
*/
public class AboutViewModel extends AndroidViewModel {
@HiltViewModel
public class AboutViewModel extends ViewModel {

private final AboutRepository repository;
private final GetVersionStringUseCase getVersionStringUseCase;
private final GetCurrentYearUseCase getCurrentYearUseCase;

public AboutViewModel(@NonNull Application application) {
super(application);
repository = new AboutRepository(application);
getVersionStringUseCase = new GetVersionStringUseCase(repository);
getCurrentYearUseCase = new GetCurrentYearUseCase(repository);
@Inject
public AboutViewModel(GetVersionStringUseCase getVersionStringUseCase,
GetCurrentYearUseCase getCurrentYearUseCase) {
this.getVersionStringUseCase = getVersionStringUseCase;
this.getCurrentYearUseCase = getCurrentYearUseCase;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,32 @@


import android.app.Activity;
import android.app.Application;

import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.ViewModel;

import com.d4rk.androidtutorials.java.ui.screens.help.repository.HelpRepository;
import com.d4rk.androidtutorials.java.domain.help.RequestReviewFlowUseCase;
import com.d4rk.androidtutorials.java.domain.help.LaunchReviewFlowUseCase;
import com.google.android.play.core.review.ReviewInfo;
import com.d4rk.androidtutorials.java.ui.screens.help.repository.HelpRepository;

import dagger.hilt.android.lifecycle.HiltViewModel;
import javax.inject.Inject;

/**
* ViewModel for the Help screen. Delegates to HelpRepository for
* requesting or launching in-app reviews.
*/
public class HelpViewModel extends AndroidViewModel {
@HiltViewModel
public class HelpViewModel extends ViewModel {

private final RequestReviewFlowUseCase requestReviewFlowUseCase;
private final LaunchReviewFlowUseCase launchReviewFlowUseCase;

public HelpViewModel(@NonNull Application application) {
super(application);
HelpRepository repository = new HelpRepository(application);
requestReviewFlowUseCase = new RequestReviewFlowUseCase(repository);
launchReviewFlowUseCase = new LaunchReviewFlowUseCase(repository);
@Inject
public HelpViewModel(RequestReviewFlowUseCase requestReviewFlowUseCase,
LaunchReviewFlowUseCase launchReviewFlowUseCase) {
this.requestReviewFlowUseCase = requestReviewFlowUseCase;
this.launchReviewFlowUseCase = launchReviewFlowUseCase;
}

/**
Expand Down
Loading