Skip to content

Commit c920074

Browse files
Convert lessons external link icon to icon button
1 parent 92f1ae3 commit c920074

File tree

3 files changed

+24
-10
lines changed

3 files changed

+24
-10
lines changed

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/AndroidStudioFragment.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.d4rk.androidtutorials.java.databinding.ItemAndroidStudioLessonBinding;
3535
import com.google.android.gms.ads.AdListener;
3636
import com.google.android.gms.ads.LoadAdError;
37+
import com.google.android.material.button.MaterialButton;
3738
import com.google.android.material.card.MaterialCardView;
3839
import com.google.android.material.shape.CornerFamily;
3940
import com.google.android.material.shape.ShapeAppearanceModel;
@@ -427,15 +428,15 @@ static class LessonHolder extends RecyclerView.ViewHolder {
427428
final AppCompatImageView icon;
428429
final MaterialTextView title;
429430
final MaterialTextView summary;
430-
final AppCompatImageView externalIcon;
431+
final MaterialButton externalButton;
431432

432433
LessonHolder(@NonNull ItemAndroidStudioLessonBinding binding) {
433434
super(binding.getRoot());
434435
card = binding.lessonCard;
435436
icon = binding.lessonIcon;
436437
title = binding.lessonTitle;
437438
summary = binding.lessonSummary;
438-
externalIcon = binding.lessonExternalIcon;
439+
externalButton = binding.lessonExternalIcon;
439440
}
440441

441442
void bind(Lesson lesson, boolean first, boolean last) {
@@ -452,7 +453,13 @@ void bind(Lesson lesson, boolean first, boolean last) {
452453
} else {
453454
summary.setVisibility(View.GONE);
454455
}
455-
externalIcon.setVisibility(lesson.opensInBrowser ? View.VISIBLE : View.GONE);
456+
boolean showExternalButton = lesson.opensInBrowser && lesson.intent != null;
457+
externalButton.setVisibility(showExternalButton ? View.VISIBLE : View.GONE);
458+
if (showExternalButton) {
459+
externalButton.setOnClickListener(v -> v.getContext().startActivity(lesson.intent));
460+
} else {
461+
externalButton.setOnClickListener(null);
462+
}
456463
itemView.setOnClickListener(v -> {
457464
if (lesson.intent != null) {
458465
v.getContext().startActivity(lesson.intent);

app/src/main/res/layout/item_android_studio_lesson.xml

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,20 @@
4545
android:textAppearance="@style/TextAppearance.Material3.BodySmall" />
4646
</androidx.appcompat.widget.LinearLayoutCompat>
4747

48-
<androidx.appcompat.widget.AppCompatImageView
48+
<com.google.android.material.button.MaterialButton
4949
android:id="@+id/lesson_external_icon"
50-
android:layout_width="24dp"
51-
android:layout_height="24dp"
50+
style="@style/Widget.Material3.Button.IconButton"
51+
android:layout_width="wrap_content"
52+
android:layout_height="wrap_content"
5253
android:layout_marginStart="12dp"
53-
android:contentDescription="@null"
54-
android:importantForAccessibility="no"
55-
app:srcCompat="@drawable/ic_open_in_new"
56-
android:visibility="gone" />
54+
android:contentDescription="@string/lesson_open_in_browser"
55+
android:tooltipText="@string/lesson_open_in_browser"
56+
android:visibility="gone"
57+
android:text="@null"
58+
android:minHeight="0dp"
59+
android:minWidth="0dp"
60+
app:icon="@drawable/ic_open_in_new"
61+
app:iconPadding="0dp"
62+
app:iconSize="24dp" />
5763
</androidx.appcompat.widget.LinearLayoutCompat>
5864
</com.google.android.material.card.MaterialCardView>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<string name="menu">Menu</string>
1111
<string name="press_back_again_to_exit">Press back again to exit</string>
1212
<string name="error_no_app_for_link">No app found to open this link.</string>
13+
<string name="lesson_open_in_browser">Open lesson in browser</string>
1314

1415
<string name="welcome">Welcome</string>
1516
<string name="summary_browse_terms_of_service_and_privacy_policy">Read and agree to the Terms of Service and Privacy Policy to continue</string>

0 commit comments

Comments
 (0)