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
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,10 @@
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.appcompat.widget.SearchView;
import androidx.core.view.MenuHost;
import androidx.core.view.MenuProvider;
Expand All @@ -30,10 +29,14 @@
import com.d4rk.androidtutorials.java.R;
import com.d4rk.androidtutorials.java.ads.views.NativeAdBannerView;
import com.d4rk.androidtutorials.java.utils.ConsentUtils;
import com.d4rk.androidtutorials.java.databinding.FragmentAndroidStudioBinding;
import com.d4rk.androidtutorials.java.databinding.ItemAndroidStudioCategoryBinding;
import com.d4rk.androidtutorials.java.databinding.ItemAndroidStudioLessonBinding;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.LoadAdError;
import com.google.android.gms.ads.MobileAds;
import com.google.android.material.card.MaterialCardView;
import com.google.android.material.textview.MaterialTextView;
import com.google.android.material.shape.CornerFamily;
import com.google.android.material.shape.ShapeAppearanceModel;

Expand All @@ -55,12 +58,14 @@ public class AndroidStudioFragment extends Fragment {
private final List<Object> allItems = new ArrayList<>();
private LessonsAdapter adapter;
private boolean showAds;
private FragmentAndroidStudioBinding binding;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_android_studio, container, false);
binding = FragmentAndroidStudioBinding.inflate(inflater, container, false);
return binding.getRoot();
}

@Override
Expand All @@ -70,7 +75,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
if (showAds) {
ensureMobileAdsInitialized();
}
RecyclerView list = view.findViewById(R.id.lessons_list);
RecyclerView list = binding.lessonsList;
list.setLayoutManager(new LinearLayoutManager(requireContext()));
adapter = new LessonsAdapter();
list.setAdapter(adapter);
Expand Down Expand Up @@ -125,6 +130,12 @@ public boolean onMenuItemSelected(@NonNull MenuItem menuItem) {
}, getViewLifecycleOwner(), Lifecycle.State.RESUMED);
}

@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}

private void ensureMobileAdsInitialized() {
if (!mobileAdsInitialized) {
MobileAds.initialize(requireContext());
Expand Down Expand Up @@ -351,13 +362,13 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int
adView.setNativeAdLayout(R.layout.ad_android_studio_list);
return new AdHolder(adView);
} else if (viewType == TYPE_CATEGORY) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_android_studio_category, parent, false);
return new CategoryHolder(view);
ItemAndroidStudioCategoryBinding binding = ItemAndroidStudioCategoryBinding.inflate(
LayoutInflater.from(parent.getContext()), parent, false);
return new CategoryHolder(binding);
} else {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_android_studio_lesson, parent, false);
return new LessonHolder(view);
ItemAndroidStudioLessonBinding binding = ItemAndroidStudioLessonBinding.inflate(
LayoutInflater.from(parent.getContext()), parent, false);
return new LessonHolder(binding);
}
}

Expand Down Expand Up @@ -401,16 +412,16 @@ static class AdHolder extends RecyclerView.ViewHolder {

static class LessonHolder extends RecyclerView.ViewHolder {
final MaterialCardView card;
final ImageView icon;
final TextView title;
final TextView summary;

LessonHolder(@NonNull View itemView) {
super(itemView);
card = (MaterialCardView) itemView;
icon = itemView.findViewById(R.id.lesson_icon);
title = itemView.findViewById(R.id.lesson_title);
summary = itemView.findViewById(R.id.lesson_summary);
final AppCompatImageView icon;
final MaterialTextView title;
final MaterialTextView summary;

LessonHolder(@NonNull ItemAndroidStudioLessonBinding binding) {
super(binding.getRoot());
card = binding.lessonCard;
icon = binding.lessonIcon;
title = binding.lessonTitle;
summary = binding.lessonSummary;
}

void bind(Lesson lesson, boolean first, boolean last) {
Expand Down Expand Up @@ -450,21 +461,18 @@ private void applyCorners(boolean first, boolean last) {
}

static class CategoryHolder extends RecyclerView.ViewHolder {
final ImageView icon;
final TextView title;
final MaterialTextView title;

CategoryHolder(@NonNull View itemView) {
super(itemView);
icon = itemView.findViewById(R.id.category_icon);
title = itemView.findViewById(R.id.category_title);
CategoryHolder(@NonNull ItemAndroidStudioCategoryBinding binding) {
super(binding.getRoot());
title = binding.categoryTitle;
}

void bind(Category category) {
if (category.iconRes != 0) {
icon.setImageResource(category.iconRes);
icon.setVisibility(View.VISIBLE);
title.setCompoundDrawablesRelativeWithIntrinsicBounds(category.iconRes, 0, 0, 0);
} else {
icon.setVisibility(View.GONE);
title.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0, 0);
}
title.setText(category.title);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,108 @@
package com.d4rk.androidtutorials.java.ui.screens.android.lessons.basics.shortcuts.tabs;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.d4rk.androidtutorials.java.R;
import com.d4rk.androidtutorials.java.databinding.ActivityShortcutsNavigationAndSearchingBinding;
import com.d4rk.androidtutorials.java.ui.components.navigation.UpNavigationActivity;
import com.d4rk.androidtutorials.java.utils.EdgeToEdgeDelegate;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.MobileAds;

import java.util.List;

import me.zhanghai.android.fastscroll.FastScrollerBuilder;

public class NavigationAndSearchingShortcutsActivity extends UpNavigationActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
com.d4rk.androidtutorials.java.databinding.ActivityShortcutsNavigationAndSearchingBinding binding = ActivityShortcutsNavigationAndSearchingBinding.inflate(getLayoutInflater());
ActivityShortcutsNavigationAndSearchingBinding binding = ActivityShortcutsNavigationAndSearchingBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
MobileAds.initialize(this);

EdgeToEdgeDelegate edgeToEdgeDelegate = new EdgeToEdgeDelegate(this);
edgeToEdgeDelegate.applyEdgeToEdge(binding.scrollView);
edgeToEdgeDelegate.applyEdgeToEdge(binding.shortcutList);

binding.adView.loadAd(new AdRequest.Builder().build());
new FastScrollerBuilder(binding.scrollView).useMd2Style().build();
new FastScrollerBuilder(binding.shortcutList).useMd2Style().build();

List<Shortcut> shortcuts = List.of(
new Shortcut(getString(R.string.press_shift_twice), getString(R.string.search_everything)),
new Shortcut("Ctrl + F", getString(R.string.find)),
new Shortcut("F3", getString(R.string.find_next)),
new Shortcut("Shift + F3", getString(R.string.find_previous)),
new Shortcut("Ctrl + R", getString(R.string.replace)),
new Shortcut("Ctrl + Shift + A", getString(R.string.find_action)),
new Shortcut("Ctrl + Alt + Shift + N", getString(R.string.search_by_symbol_name)),
new Shortcut("Ctrl + N", getString(R.string.find_class)),
new Shortcut("Ctrl + Shift + N", getString(R.string.find_file)),
new Shortcut("Ctrl + Shift + F", getString(R.string.find_path)),
new Shortcut("Ctrl + F12", getString(R.string.open_file_structure)),
new Shortcut("Alt + Right/Left Arrow", getString(R.string.navigate_between_open_tabs)),
new Shortcut("F4/Ctrl +Enter", getString(R.string.jump_to_source)),
new Shortcut("Shift + F4", getString(R.string.open_current_editor_tab_in_new_window)),
new Shortcut("Ctrl + E", getString(R.string.recently_opened_files)),
new Shortcut("Ctrl + Shift + E", getString(R.string.recently_edited_files)),
new Shortcut("Ctrl + Shift + Backspace", getString(R.string.go_to_last_edit_location)),
new Shortcut("Ctrl + F4", getString(R.string.close_active_editor_tabs)),
new Shortcut("Esc", getString(R.string.return_to_editor_window)),
new Shortcut("Shift + Esc", getString(R.string.hide_active_window)),
new Shortcut("Ctrl + G", getString(R.string.go_to_line)),
new Shortcut("Ctrl + H", getString(R.string.open_type_hierarchy)),
new Shortcut("Ctrl + Shift + H", getString(R.string.open_v_hierarchy)),
new Shortcut("Ctrl + Alt + H", getString(R.string.open_call_hierarchy))
);

binding.shortcutList.setLayoutManager(new LinearLayoutManager(this));
binding.shortcutList.setAdapter(new ShortcutsAdapter(shortcuts));
}

private static class ShortcutsAdapter extends RecyclerView.Adapter<ShortcutsAdapter.ShortcutHolder> {
private final List<Shortcut> items;

ShortcutsAdapter(List<Shortcut> items) {
this.items = items;
}

@NonNull
@Override
public ShortcutHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_shortcut, parent, false);
return new ShortcutHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ShortcutHolder holder, int position) {
Shortcut item = items.get(position);
holder.key.setText(item.key);
holder.description.setText(item.description);
}

@Override
public int getItemCount() {
return items.size();
}

static class ShortcutHolder extends RecyclerView.ViewHolder {
final TextView key;
final TextView description;

ShortcutHolder(@NonNull View itemView) {
super(itemView);
key = itemView.findViewById(R.id.shortcut_key);
description = itemView.findViewById(R.id.shortcut_description);
}
}
}

private record Shortcut(String key, String description) { }
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
public class Note {
@PrimaryKey(autoGenerate = true)
public int id;
public String text; // FIXME: Declaration can have final modifier
public final String text;

public Note(String text) {
this.text = text;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ public class BottomLabelsFragment extends Fragment {
private FragmentOnboardingBottomLabelsBinding binding;
private OnboardingViewModel viewModel;
private MaterialRadioButton[] radioButtons;
private View[] optionCards; // FIXME: Field can be converted to a local variable

@Nullable
@Override
Expand All @@ -40,7 +39,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
binding.optionUnlabeled.radioButton
};

optionCards = new View[]{
View[] optionCards = new View[]{
binding.cardLabeled,
binding.cardSelected,
binding.cardUnlabeled
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ public class FontFragment extends Fragment {
private FragmentOnboardingFontBinding binding;
private OnboardingViewModel viewModel;
private MaterialRadioButton[] radioButtons;
private View[] optionCards; // FIXME: Field can be converted to a local variable

@Nullable
@Override
Expand All @@ -45,7 +44,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
binding.optionGoogleSansCode.radioButton
};

optionCards = new View[]{
View[] optionCards = new View[]{
binding.cardAudiowide,
binding.cardFiraCode,
binding.cardJetbrainsMono,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,9 @@ public void onPageSelected(int position) {

new TabLayoutMediator(binding.tabIndicator, binding.viewPager, (tab, position) -> {
ImageView dot = new ImageView(this);
dot.setImageResource(R.drawable.onboarding_dot_unselected);
int margin = dpToPx(2);
dot.setImageResource(R.drawable.onboarding_dot_unselected);
int margin = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics()));
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
Expand Down Expand Up @@ -173,10 +174,7 @@ private void updateButtons(int position) {
}
}

private int dpToPx(int dp) { // FIXME: Value of parameter 'dp' is always '2'
return Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics()));
}


private static class OnboardingPagerAdapter extends FragmentStateAdapter {

Expand Down
4 changes: 2 additions & 2 deletions app/src/main/res/layout/activity_onboarding.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/buttonSkip" />

<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/bottomBar"
android:layout_width="0dp"
android:layout_height="wrap_content"
Expand Down Expand Up @@ -71,6 +71,6 @@
app:icon="@drawable/ic_arrow_forward"
app:iconGravity="textEnd" />

</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>

</androidx.constraintlayout.widget.ConstraintLayout>
4 changes: 2 additions & 2 deletions app/src/main/res/layout/activity_settings.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
Expand All @@ -9,4 +9,4 @@
android:id="@+id/settings"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
Loading
Loading