Skip to content

Commit 89bac3d

Browse files
Merge pull request #64 from MihaiCristianCondrea/codex/refactor-resource-lookups-and-package-checks
Decouple MainViewModel from Application context
2 parents d2cbeb7 + b65b1eb commit 89bac3d

File tree

7 files changed

+30
-40
lines changed

7 files changed

+30
-40
lines changed

app/src/main/java/com/d4rk/androidtutorials/java/data/repository/DefaultMainRepository.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@ private static int getNewNightMode(String[] darkModeValues, int currentNightMode
5050
/**
5151
* Check if a given package name is installed.
5252
*
53-
* @param packageManager The PackageManager used to check installations.
54-
* @param packageName The package to check.
53+
* @param packageName The package to check.
5554
* @return True if installed, false otherwise.
5655
*/
57-
public boolean isAppInstalled(PackageManager packageManager, String packageName) {
56+
public boolean isAppInstalled(String packageName) {
57+
PackageManager packageManager = context.getPackageManager();
5858
try {
5959
packageManager.getPackageInfo(packageName, 0);
6060
return true;
@@ -85,14 +85,18 @@ public boolean applyThemeSettings(String[] darkModeValues) {
8585
/**
8686
* Retrieves the bottom navigation label visibility preference.
8787
*/
88-
public String getBottomNavLabelVisibility(String labelKey, String labelDefaultValue) {
88+
public String getBottomNavLabelVisibility() {
89+
String labelKey = context.getString(R.string.key_bottom_navigation_bar_labels);
90+
String labelDefaultValue = context.getString(R.string.default_value_bottom_navigation_bar_labels);
8991
return defaultSharedPrefs.getString(labelKey, labelDefaultValue);
9092
}
9193

9294
/**
9395
* Retrieves which tab should be shown by default.
9496
*/
95-
public String getDefaultTabPreference(String defaultTabKey, String defaultTabValue) {
97+
public String getDefaultTabPreference() {
98+
String defaultTabKey = context.getString(R.string.key_default_tab);
99+
String defaultTabValue = context.getString(R.string.default_value_tab);
96100
return defaultSharedPrefs.getString(defaultTabKey, defaultTabValue);
97101
}
98102

app/src/main/java/com/d4rk/androidtutorials/java/data/repository/MainRepository.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package com.d4rk.androidtutorials.java.data.repository;
22

33
import android.content.Intent;
4-
import android.content.pm.PackageManager;
54
import com.google.android.play.core.appupdate.AppUpdateManager;
65

76
public interface MainRepository {
8-
boolean isAppInstalled(PackageManager packageManager, String packageName);
7+
boolean isAppInstalled(String packageName);
98
boolean applyThemeSettings(String[] darkModeValues);
10-
String getBottomNavLabelVisibility(String labelKey, String labelDefaultValue);
11-
String getDefaultTabPreference(String defaultTabKey, String defaultTabValue);
9+
String getBottomNavLabelVisibility();
10+
String getDefaultTabPreference();
1211
boolean shouldShowStartupScreen();
1312
void markStartupScreenShown();
1413
void applyLanguageSettings();

app/src/main/java/com/d4rk/androidtutorials/java/domain/main/GetBottomNavLabelVisibilityUseCase.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public GetBottomNavLabelVisibilityUseCase(MainRepository repository) {
1010
this.repository = repository;
1111
}
1212

13-
public String invoke(String key, String defaultValue) {
14-
return repository.getBottomNavLabelVisibility(key, defaultValue);
13+
public String invoke() {
14+
return repository.getBottomNavLabelVisibility();
1515
}
1616
}

app/src/main/java/com/d4rk/androidtutorials/java/domain/main/GetDefaultTabPreferenceUseCase.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public GetDefaultTabPreferenceUseCase(MainRepository repository) {
1010
this.repository = repository;
1111
}
1212

13-
public String invoke(String key, String defaultValue) {
14-
return repository.getDefaultTabPreference(key, defaultValue);
13+
public String invoke() {
14+
return repository.getDefaultTabPreference();
1515
}
1616
}
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.d4rk.androidtutorials.java.domain.main;
22

3-
import android.content.pm.PackageManager;
43
import com.d4rk.androidtutorials.java.data.repository.MainRepository;
54

65
/** Checks if an app is installed by package name. */
@@ -11,7 +10,7 @@ public IsAppInstalledUseCase(MainRepository repository) {
1110
this.repository = repository;
1211
}
1312

14-
public boolean invoke(PackageManager pm, String packageName) {
15-
return repository.isAppInstalled(pm, packageName);
13+
public boolean invoke(String packageName) {
14+
return repository.isAppInstalled(packageName);
1615
}
1716
}

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,10 @@ protected void onCreate(Bundle savedInstanceState) {
127127

128128
setupUpdateNotifications();
129129

130-
mainViewModel.applySettings();
130+
String[] themeValues = getResources().getStringArray(R.array.preference_theme_values);
131+
String[] bottomNavBarLabelsValues = getResources().getStringArray(R.array.preference_bottom_navigation_bar_labels_values);
132+
String[] defaultTabValues = getResources().getStringArray(R.array.preference_default_tab_values);
133+
mainViewModel.applySettings(themeValues, bottomNavBarLabelsValues, defaultTabValues);
131134
if (mainViewModel.shouldShowStartupScreen()) {
132135
mainViewModel.markStartupScreenShown();
133136
startActivity(new Intent(this, StartupActivity.class));

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainViewModel.java

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.d4rk.androidtutorials.java.ui.screens.main;
22

3-
import android.app.Application;
43
import android.content.Intent;
5-
import android.content.pm.PackageManager;
64

75
import androidx.lifecycle.ViewModel;
86
import androidx.lifecycle.LiveData;
@@ -31,7 +29,6 @@
3129
@HiltViewModel
3230
public class MainViewModel extends ViewModel {
3331

34-
private final Application application;
3532
private final ApplyThemeSettingsUseCase applyThemeSettingsUseCase;
3633
private final GetBottomNavLabelVisibilityUseCase getBottomNavLabelVisibilityUseCase;
3734
private final GetDefaultTabPreferenceUseCase getDefaultTabPreferenceUseCase;
@@ -46,8 +43,7 @@ public class MainViewModel extends ViewModel {
4643
private final MutableLiveData<Boolean> themeChanged = new MutableLiveData<>();
4744

4845
@Inject
49-
public MainViewModel(Application application,
50-
ApplyThemeSettingsUseCase applyThemeSettingsUseCase,
46+
public MainViewModel(ApplyThemeSettingsUseCase applyThemeSettingsUseCase,
5147
GetBottomNavLabelVisibilityUseCase getBottomNavLabelVisibilityUseCase,
5248
GetDefaultTabPreferenceUseCase getDefaultTabPreferenceUseCase,
5349
ApplyLanguageSettingsUseCase applyLanguageSettingsUseCase,
@@ -56,7 +52,6 @@ public MainViewModel(Application application,
5652
IsAppInstalledUseCase isAppInstalledUseCase,
5753
BuildShortcutIntentUseCase buildShortcutIntentUseCase,
5854
GetAppUpdateManagerUseCase getAppUpdateManagerUseCase) {
59-
this.application = application;
6055
this.applyThemeSettingsUseCase = applyThemeSettingsUseCase;
6156
this.getBottomNavLabelVisibilityUseCase = getBottomNavLabelVisibilityUseCase;
6257
this.getDefaultTabPreferenceUseCase = getDefaultTabPreferenceUseCase;
@@ -84,26 +79,17 @@ private static int getVisibilityMode(String labelVisibilityStr, String[] bottomN
8479
* Loads and applies settings such as theme, bottom nav visibility, default tab, etc.
8580
* This can be called from onCreate() or similar lifecycle methods in MainActivity.
8681
*/
87-
public void applySettings() {
88-
boolean changedTheme = applyThemeSettingsUseCase.invoke(
89-
application.getResources().getStringArray(R.array.preference_theme_values)
90-
);
82+
public void applySettings(String[] themeValues,
83+
String[] bottomNavBarLabelsValues,
84+
String[] defaultTabValues) {
85+
boolean changedTheme = applyThemeSettingsUseCase.invoke(themeValues);
9186
themeChanged.setValue(changedTheme);
9287

93-
String labelKey = application.getString(R.string.key_bottom_navigation_bar_labels);
94-
String labelDefaultValue = application.getString(R.string.default_value_bottom_navigation_bar_labels);
95-
String[] bottomNavBarLabelsValues =
96-
application.getResources().getStringArray(R.array.preference_bottom_navigation_bar_labels_values);
97-
98-
String labelVisibilityStr = getBottomNavLabelVisibilityUseCase.invoke(labelKey, labelDefaultValue);
88+
String labelVisibilityStr = getBottomNavLabelVisibilityUseCase.invoke();
9989
int visibilityMode = getVisibilityMode(labelVisibilityStr, bottomNavBarLabelsValues);
10090
bottomNavLabelVisibility.setValue(visibilityMode);
10191

102-
String defaultTabKey = application.getString(R.string.key_default_tab);
103-
String defaultTabValue = application.getString(R.string.default_value_tab);
104-
String[] defaultTabValues = application.getResources().getStringArray(R.array.preference_default_tab_values);
105-
106-
String startFragmentIdValue = getDefaultTabPreferenceUseCase.invoke(defaultTabKey, defaultTabValue);
92+
String startFragmentIdValue = getDefaultTabPreferenceUseCase.invoke();
10793
int startFragmentId;
10894
if (startFragmentIdValue.equals(defaultTabValues[0])) {
10995
startFragmentId = R.id.navigation_home;
@@ -136,8 +122,7 @@ public void markStartupScreenShown() {
136122
* Check if the “Android Tutorials” app is installed or not.
137123
*/
138124
public boolean isAndroidTutorialsInstalled() {
139-
PackageManager pm = application.getPackageManager();
140-
return isAppInstalledUseCase.invoke(pm, "com.d4rk.androidtutorials.java");
125+
return isAppInstalledUseCase.invoke("com.d4rk.androidtutorials.java");
141126
}
142127

143128
/**

0 commit comments

Comments
 (0)