Skip to content

Commit 99395b9

Browse files
author
Mihai-Cristian Condrea
committed
feat: Refactor shortcuts screens to use a single activity
This commit refactors the shortcuts feature by replacing multiple individual activity classes for each shortcut category with a single, generic `ShortcutsCategoryActivity`. This new activity dynamically loads the appropriate layout and sets the title based on intent extras, significantly reducing boilerplate code. - A new `ShortcutsCategoryActivity` is introduced to display different shortcut categories. - The `ShortcutsActivity` now uses preference click listeners to launch `ShortcutsCategoryActivity` with the correct layout and title resource IDs. - Removed seven separate activity classes and their corresponding manifest entries, consolidating the logic into the new generic activity. - The `EdgeToEdgeHelper` is updated to correctly apply system bar colors based on the current theme.
1 parent 460d528 commit 99395b9

12 files changed

+111
-327
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -197,45 +197,15 @@
197197
android:label="@string/shortcuts"
198198
android:parentActivityName=".ui.screens.main.MainActivity" />
199199
<activity
200-
android:name=".ui.screens.android.lessons.basics.shortcuts.tabs.CodeShortcutsActivity"
200+
android:name=".ui.screens.android.lessons.basics.shortcuts.tabs.ShortcutsCategoryActivity"
201201
android:exported="false"
202-
android:label="@string/writing_code"
203-
android:parentActivityName=".ui.screens.android.lessons.basics.shortcuts.ShortcutsActivity" />
204-
<activity
205-
android:name=".ui.screens.android.lessons.basics.shortcuts.tabs.GeneralShortcutsActivity"
206-
android:exported="false"
207-
android:label="@string/general"
208-
android:parentActivityName=".ui.screens.android.lessons.basics.shortcuts.ShortcutsActivity" />
209-
<activity
210-
android:name=".ui.screens.android.lessons.basics.shortcuts.tabs.RefactoringShortcutsActivity"
211-
android:exported="false"
212-
android:label="@string/refactoring"
213-
android:parentActivityName=".ui.screens.android.lessons.basics.shortcuts.ShortcutsActivity" />
214-
<activity
215-
android:name=".ui.screens.android.lessons.basics.shortcuts.tabs.BuildShortcutsActivity"
216-
android:exported="false"
217-
android:label="@string/build_and_run"
202+
android:label="@string/shortcuts"
218203
android:parentActivityName=".ui.screens.android.lessons.basics.shortcuts.ShortcutsActivity" />
219204
<activity
220205
android:name=".ui.screens.android.lessons.clocks.chronometer.ChronometerActivity"
221206
android:exported="false"
222207
android:label="@string/chronometer"
223208
android:parentActivityName=".ui.screens.main.MainActivity" />
224-
<activity
225-
android:name=".ui.screens.android.lessons.basics.shortcuts.tabs.DebuggingShortcutsActivity"
226-
android:exported="false"
227-
android:label="@string/debugging"
228-
android:parentActivityName=".ui.screens.android.lessons.basics.shortcuts.ShortcutsActivity" />
229-
<activity
230-
android:name=".ui.screens.android.lessons.basics.shortcuts.tabs.NavigationAndSearchingShortcutsActivity"
231-
android:exported="false"
232-
android:label="@string/navigation_and_searching"
233-
android:parentActivityName=".ui.screens.android.lessons.basics.shortcuts.ShortcutsActivity" />
234-
<activity
235-
android:name=".ui.screens.android.lessons.basics.shortcuts.tabs.VersionControlShortcutsActivity"
236-
android:exported="false"
237-
android:label="@string/version_control"
238-
android:parentActivityName=".ui.screens.android.lessons.basics.shortcuts.ShortcutsActivity" />
239209
<activity
240210
android:name=".ui.screens.android.lessons.basics.history.AndroidHistory"
241211
android:exported="false"

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/basics/shortcuts/ShortcutsActivity.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
import android.os.Bundle;
66

77
import androidx.core.view.WindowCompat;
8+
import androidx.preference.Preference;
89
import androidx.preference.PreferenceFragmentCompat;
910

1011
import com.d4rk.androidtutorials.java.R;
1112
import com.d4rk.androidtutorials.java.ads.AdUtils;
1213
import com.d4rk.androidtutorials.java.databinding.ActivityShortcutsBinding;
1314
import com.d4rk.androidtutorials.java.ui.components.navigation.UpNavigationActivity;
15+
import com.d4rk.androidtutorials.java.ui.screens.android.lessons.basics.shortcuts.tabs.ShortcutsCategoryActivity;
1416
import com.d4rk.androidtutorials.java.utils.EdgeToEdgeHelper;
1517

1618
public class ShortcutsActivity extends UpNavigationActivity {
@@ -30,6 +32,28 @@ public static class SettingsFragment extends PreferenceFragmentCompat {
3032
@Override
3133
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
3234
setPreferencesFromResource(R.xml.preferences_shortcuts, rootKey);
35+
setupPreference("shortcuts_general", R.layout.activity_shortcuts_general, R.string.general);
36+
setupPreference("shortcuts_refactoring", R.layout.activity_shortcuts_refractoring, R.string.refactoring);
37+
setupPreference("shortcuts_build", R.layout.activity_shortcuts_build, R.string.build_and_run);
38+
setupPreference("shortcuts_debugging", R.layout.activity_shortcuts_debugging, R.string.debugging);
39+
setupPreference("shortcuts_navigation", R.layout.activity_shortcuts_navigation_and_searching, R.string.navigation_and_searching);
40+
setupPreference("shortcuts_code", R.layout.activity_shortcuts_code, R.string.writing_code);
41+
setupPreference("shortcuts_version_control", R.layout.activity_shortcuts_version_control, R.string.version_control);
42+
}
43+
44+
private void setupPreference(String key, int layoutResId, int titleResId) {
45+
Preference preference = findPreference(key);
46+
if (preference == null) {
47+
return;
48+
}
49+
50+
preference.setOnPreferenceClickListener(pref -> {
51+
Intent intent = new Intent(requireContext(), ShortcutsCategoryActivity.class);
52+
intent.putExtra(ShortcutsCategoryActivity.EXTRA_LAYOUT_RES_ID, layoutResId);
53+
intent.putExtra(ShortcutsCategoryActivity.EXTRA_TITLE_RES_ID, titleResId);
54+
startActivity(intent);
55+
return true;
56+
});
3357
}
3458
}
35-
}
59+
}

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/basics/shortcuts/tabs/BuildShortcutsActivity.java

Lines changed: 0 additions & 24 deletions
This file was deleted.

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/basics/shortcuts/tabs/CodeShortcutsActivity.java

Lines changed: 0 additions & 24 deletions
This file was deleted.

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/basics/shortcuts/tabs/DebuggingShortcutsActivity.java

Lines changed: 0 additions & 25 deletions
This file was deleted.

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/basics/shortcuts/tabs/GeneralShortcutsActivity.java

Lines changed: 0 additions & 24 deletions
This file was deleted.

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/basics/shortcuts/tabs/NavigationAndSearchingShortcutsActivity.java

Lines changed: 0 additions & 106 deletions
This file was deleted.

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/basics/shortcuts/tabs/RefactoringShortcutsActivity.java

Lines changed: 0 additions & 24 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.d4rk.androidtutorials.java.ui.screens.android.lessons.basics.shortcuts.tabs;
2+
3+
import android.content.Intent;
4+
import android.os.Bundle;
5+
import android.view.View;
6+
import android.view.ViewGroup;
7+
8+
import com.d4rk.androidtutorials.java.R;
9+
import com.d4rk.androidtutorials.java.ads.AdUtils;
10+
import com.d4rk.androidtutorials.java.ui.components.navigation.UpNavigationActivity;
11+
import com.d4rk.androidtutorials.java.utils.EdgeToEdgeHelper;
12+
13+
import com.google.android.gms.ads.AdView;
14+
15+
import me.zhanghai.android.fastscroll.FastScrollScrollView;
16+
import me.zhanghai.android.fastscroll.FastScrollerBuilder;
17+
18+
public class ShortcutsCategoryActivity extends UpNavigationActivity {
19+
20+
public static final String EXTRA_LAYOUT_RES_ID =
21+
"com.d4rk.androidtutorials.java.ui.screens.android.lessons.basics.shortcuts.tabs.EXTRA_LAYOUT_RES_ID";
22+
public static final String EXTRA_TITLE_RES_ID =
23+
"com.d4rk.androidtutorials.java.ui.screens.android.lessons.basics.shortcuts.tabs.EXTRA_TITLE_RES_ID";
24+
25+
@Override
26+
protected void onCreate(Bundle savedInstanceState) {
27+
super.onCreate(savedInstanceState);
28+
29+
Intent intent = getIntent();
30+
int layoutResId = intent.getIntExtra(EXTRA_LAYOUT_RES_ID, 0);
31+
int titleResId = intent.getIntExtra(EXTRA_TITLE_RES_ID, R.string.shortcuts);
32+
33+
if (layoutResId == 0) {
34+
finish();
35+
return;
36+
}
37+
38+
setContentView(layoutResId);
39+
setTitle(titleResId);
40+
41+
View contentView = findViewById(android.R.id.content);
42+
if (contentView instanceof ViewGroup) {
43+
View root = ((ViewGroup) contentView).getChildAt(0);
44+
if (root != null) {
45+
EdgeToEdgeHelper.applyEdgeToEdge(getWindow(), root);
46+
}
47+
}
48+
49+
AdView adView = findViewById(R.id.ad_view);
50+
if (adView != null) {
51+
AdUtils.loadBanner(adView);
52+
}
53+
54+
FastScrollScrollView scrollView = findViewById(R.id.scroll_view);
55+
if (scrollView != null) {
56+
new FastScrollerBuilder(scrollView).useMd2Style().build();
57+
}
58+
}
59+
}

0 commit comments

Comments
 (0)