diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/AndroidStudioFragment.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/AndroidStudioFragment.java index b624aef3..a8dfbb95 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/AndroidStudioFragment.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/AndroidStudioFragment.java @@ -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; @@ -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; @@ -55,12 +58,14 @@ public class AndroidStudioFragment extends Fragment { private final List 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 @@ -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); @@ -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()); @@ -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); } } @@ -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) { @@ -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); } diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/basics/shortcuts/tabs/NavigationAndSearchingShortcutsActivity.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/basics/shortcuts/tabs/NavigationAndSearchingShortcutsActivity.java index 36939060..7ae63be5 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/basics/shortcuts/tabs/NavigationAndSearchingShortcutsActivity.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/basics/shortcuts/tabs/NavigationAndSearchingShortcutsActivity.java @@ -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 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 { + private final List items; + + ShortcutsAdapter(List 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) { } } \ No newline at end of file diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/data/room/Note.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/data/room/Note.java index f4e3ad10..68471c5f 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/data/room/Note.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/data/room/Note.java @@ -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; diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/BottomLabelsFragment.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/BottomLabelsFragment.java index ad320688..3928f813 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/BottomLabelsFragment.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/BottomLabelsFragment.java @@ -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 @@ -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 diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/FontFragment.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/FontFragment.java index 057caafb..987f45a8 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/FontFragment.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/FontFragment.java @@ -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 @@ -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, diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/OnboardingActivity.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/OnboardingActivity.java index 7832ce3d..7bcd301f 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/OnboardingActivity.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/OnboardingActivity.java @@ -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); @@ -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 { diff --git a/app/src/main/res/layout/activity_onboarding.xml b/app/src/main/res/layout/activity_onboarding.xml index 3347fec9..37b0c7db 100644 --- a/app/src/main/res/layout/activity_onboarding.xml +++ b/app/src/main/res/layout/activity_onboarding.xml @@ -26,7 +26,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/buttonSkip" /> - - + diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index ec7d0231..d51bc310 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_shortcuts_navigation_and_searching.xml b/app/src/main/res/layout/activity_shortcuts_navigation_and_searching.xml index 9388e66d..b1f70efc 100644 --- a/app/src/main/res/layout/activity_shortcuts_navigation_and_searching.xml +++ b/app/src/main/res/layout/activity_shortcuts_navigation_and_searching.xml @@ -6,597 +6,43 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintEnd_toEndOf="parent" /> - \ No newline at end of file + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> + + diff --git a/app/src/main/res/layout/activity_table_layout.xml b/app/src/main/res/layout/activity_table_layout.xml index 18fa1ddb..035390b3 100644 --- a/app/src/main/res/layout/activity_table_layout.xml +++ b/app/src/main/res/layout/activity_table_layout.xml @@ -29,7 +29,7 @@ android:layout_marginTop="12dp" app:cardCornerRadius="24dp"> - - + @@ -82,7 +82,7 @@ android:layout_marginTop="12dp" app:cardCornerRadius="24dp"> - - + @@ -135,7 +135,7 @@ android:layout_marginTop="12dp" app:cardCornerRadius="24dp"> - - + @@ -188,7 +188,7 @@ android:layout_marginTop="12dp" app:cardCornerRadius="24dp"> - - + diff --git a/app/src/main/res/layout/ad_about.xml b/app/src/main/res/layout/ad_about.xml index e9c8543b..e473dd45 100644 --- a/app/src/main/res/layout/ad_about.xml +++ b/app/src/main/res/layout/ad_about.xml @@ -14,7 +14,7 @@ app:cardUseCompatPadding="false" app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.CardViewBottomRounded"> - - - - + diff --git a/app/src/main/res/layout/ad_android_studio_list.xml b/app/src/main/res/layout/ad_android_studio_list.xml index 124f1e85..946fff1b 100644 --- a/app/src/main/res/layout/ad_android_studio_list.xml +++ b/app/src/main/res/layout/ad_android_studio_list.xml @@ -12,7 +12,7 @@ android:layout_marginHorizontal="16dp" app:cardCornerRadius="4dp"> - - - - - - - + - - + + diff --git a/app/src/main/res/layout/ad_attribution.xml b/app/src/main/res/layout/ad_attribution.xml index 32680d1a..bbcdc62a 100644 --- a/app/src/main/res/layout/ad_attribution.xml +++ b/app/src/main/res/layout/ad_attribution.xml @@ -1,5 +1,5 @@ - - - - - - - + - - + + diff --git a/app/src/main/res/layout/ad_home_banner_large.xml b/app/src/main/res/layout/ad_home_banner_large.xml index efb4216d..8b8136b0 100644 --- a/app/src/main/res/layout/ad_home_banner_large.xml +++ b/app/src/main/res/layout/ad_home_banner_large.xml @@ -11,7 +11,7 @@ android:layout_height="wrap_content" app:cardCornerRadius="24dp"> - - - - - - + - - + + diff --git a/app/src/main/res/layout/ad_home_banner_small.xml b/app/src/main/res/layout/ad_home_banner_small.xml index 7d7004a4..fee0eb2f 100644 --- a/app/src/main/res/layout/ad_home_banner_small.xml +++ b/app/src/main/res/layout/ad_home_banner_small.xml @@ -14,7 +14,7 @@ android:layout_marginBottom="16dp" app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.CardViewBottomRounded"> - - - - - - - + - - + + diff --git a/app/src/main/res/layout/ad_lesson_code.xml b/app/src/main/res/layout/ad_lesson_code.xml index 81883277..77f70519 100644 --- a/app/src/main/res/layout/ad_lesson_code.xml +++ b/app/src/main/res/layout/ad_lesson_code.xml @@ -11,7 +11,7 @@ android:layout_height="wrap_content" app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.CardViewBottomRounded"> - - - - - - - + - - + + diff --git a/app/src/main/res/layout/ad_support.xml b/app/src/main/res/layout/ad_support.xml index c8dce2dc..71038652 100644 --- a/app/src/main/res/layout/ad_support.xml +++ b/app/src/main/res/layout/ad_support.xml @@ -11,7 +11,7 @@ android:layout_height="wrap_content" app:cardCornerRadius="24dp"> - - - - - + - - + diff --git a/app/src/main/res/layout/fragment_onboarding_bottom_labels.xml b/app/src/main/res/layout/fragment_onboarding_bottom_labels.xml index b6d52ffd..682a5a8e 100644 --- a/app/src/main/res/layout/fragment_onboarding_bottom_labels.xml +++ b/app/src/main/res/layout/fragment_onboarding_bottom_labels.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - + - + diff --git a/app/src/main/res/layout/fragment_onboarding_data.xml b/app/src/main/res/layout/fragment_onboarding_data.xml index d2a96c39..c933c10f 100644 --- a/app/src/main/res/layout/fragment_onboarding_data.xml +++ b/app/src/main/res/layout/fragment_onboarding_data.xml @@ -4,7 +4,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - + - + diff --git a/app/src/main/res/layout/fragment_onboarding_done.xml b/app/src/main/res/layout/fragment_onboarding_done.xml index c6b83733..4f62ea62 100644 --- a/app/src/main/res/layout/fragment_onboarding_done.xml +++ b/app/src/main/res/layout/fragment_onboarding_done.xml @@ -5,7 +5,7 @@ android:layout_height="match_parent" android:padding="24dp"> - - - - + - + diff --git a/app/src/main/res/layout/fragment_onboarding_font.xml b/app/src/main/res/layout/fragment_onboarding_font.xml index bb3821ea..dc87f3bf 100644 --- a/app/src/main/res/layout/fragment_onboarding_font.xml +++ b/app/src/main/res/layout/fragment_onboarding_font.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - + + diff --git a/app/src/main/res/layout/fragment_onboarding_selection.xml b/app/src/main/res/layout/fragment_onboarding_selection.xml index ff0f2530..ab187775 100644 --- a/app/src/main/res/layout/fragment_onboarding_selection.xml +++ b/app/src/main/res/layout/fragment_onboarding_selection.xml @@ -144,7 +144,7 @@ - - - - - - - - - - + android:textAppearance="@style/TextAppearance.Material3.BodySmall" /> diff --git a/app/src/main/res/layout/item_android_studio_lesson.xml b/app/src/main/res/layout/item_android_studio_lesson.xml index 842ee898..fd2bd08e 100644 --- a/app/src/main/res/layout/item_android_studio_lesson.xml +++ b/app/src/main/res/layout/item_android_studio_lesson.xml @@ -8,7 +8,7 @@ android:layout_marginHorizontal="16dp" app:cardCornerRadius="4dp"> - - - - - - + + diff --git a/app/src/main/res/layout/item_shortcut.xml b/app/src/main/res/layout/item_shortcut.xml new file mode 100644 index 00000000..b33648ef --- /dev/null +++ b/app/src/main/res/layout/item_shortcut.xml @@ -0,0 +1,28 @@ + + + + + + + diff --git a/app/src/main/res/values-ar-rEG/strings.xml b/app/src/main/res/values-ar-rEG/strings.xml index 177ac047..67fe7831 100644 --- a/app/src/main/res/values-ar-rEG/strings.xml +++ b/app/src/main/res/values-ar-rEG/strings.xml @@ -226,6 +226,28 @@ الوضع الداكن الوضع الداكن التلقائي حسب البطارية التبويب الافتراضي + اختر علامة التبويب التي تظهر عند فتح التطبيق + أفضل القصص والتحديثات الحديثة + أدوات استوديو Android ، نصائح ، وكتالوج البرنامج التعليمي الكامل + تفاصيل التطبيق والإصدار والائتمانات + يتخطى + اختر أسلوبك + اختر كيف يبدو التطبيق + مظهر مشرق ونظيف + مريح في الضوء المنخفض + يتبع موضوع جهازك + ساعدنا في تحسين تجربتك + ساعدنا في جعل التطبيق أفضل لك من خلال مشاركة تقارير التعطل المجهول وإحصائيات الاستخدام. + تمكين التقارير تحطم + من خلال تمكين هذا ، يمكنك مساعدتنا في تحديد وإصلاح الأخطاء بشكل أسرع. نحن لا نجمع أي معلومات شخصية. + السماح الإعلانات الشخصية + السماح بتخزين بيانات الإعلان ، ومعلومات المستخدم ، والتخصيص للحفاظ على إعلانات ذات صلة. + اقرأ سياسة الخصوصية الخاصة بنا + أيقونة الخصوصية + أنت كل مجموعة! + الإعداد الخاص بك اكتمل. أنت الآن مستعد لاستكشاف جميع الميزات. + ابدأ + أيقونة النجاح عناوين شريط التنقل السفلي معنون المحدد %1$s diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 27e03e10..29132d28 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -252,6 +252,28 @@ Тъмен режим Автоматичен тъмен режим при ниска батерия Раздел по подразбиране + Изберете кой раздел се появява, когато приложението се отвори + Топ истории и скорошни актуализации + Андроид студио инструменти, съвети и пълния каталог на урока + Подробности за приложението, версия и кредити + Пропуснете + Изберете вашия стил + Изберете как изглежда приложението + Ярък, чист външен вид + Удобно при ниска светлина + Следва темата на вашето устройство + Помогнете ни да подобрим вашия опит + Помогнете ни да направим приложението по -добро за вас, като споделяте анонимни отчети за сривове и статистика за използване. + Активиране на отчитане на катастрофи + Като активирате това, вие ни помагате да идентифицираме и поправим грешки по -бързо. Ние не събираме лична информация. + Позволяват персонализирани реклами + Разрешаване на съхранение на рекламни данни, информация за потребителя и персонализация, за да се поддържат рекламните реклами. + Прочетете нашата Политика за поверителност + Икона за поверителност + Вие сте готови! + Вашата настройка е пълна. Вече сте готови да проучите всички функции. + Започнете + Икона за успех Етикети на долната навигационна лента С етикети Избрани %1$s diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 9282ab2e..423a91ad 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -252,6 +252,28 @@ ডার্ক মোড অটো ব্যাটারি ডার্ক মোড ডিফল্ট ট্যাব + অ্যাপটি খোলার পরে কোন ট্যাবটি প্রদর্শিত হবে তা চয়ন করুন + শীর্ষ গল্প এবং সাম্প্রতিক আপডেটগুলি + অ্যান্ড্রয়েড স্টুডিও সরঞ্জাম, টিপস এবং সম্পূর্ণ টিউটোরিয়াল ক্যাটালগ + অ্যাপ্লিকেশন বিশদ, সংস্করণ এবং ক্রেডিট + এড়িয়ে যান + আপনার স্টাইল চয়ন করুন + অ্যাপটি কেমন দেখাচ্ছে তা চয়ন করুন + উজ্জ্বল, পরিষ্কার চেহারা + কম আলোতে আরামদায়ক + আপনার ডিভাইস থিম অনুসরণ করে + আমাদের আপনার অভিজ্ঞতা উন্নত করতে সহায়তা করুন + বেনামে ক্র্যাশ রিপোর্ট এবং ব্যবহারের পরিসংখ্যান ভাগ করে আপনার জন্য অ্যাপ্লিকেশনটিকে আরও উন্নত করতে আমাদের সহায়তা করুন। + ক্র্যাশ রিপোর্টিং সক্ষম করুন + এটি সক্ষম করে আপনি আমাদের বাগগুলি দ্রুত সনাক্ত করতে এবং ঠিক করতে সহায়তা করেন। আমরা কোনও ব্যক্তিগত তথ্য সংগ্রহ করি না। + ব্যক্তিগতকৃত বিজ্ঞাপনগুলির অনুমতি দিন + বিজ্ঞাপনগুলি প্রাসঙ্গিক রাখতে বিজ্ঞাপন ডেটা, ব্যবহারকারীর তথ্য এবং ব্যক্তিগতকরণের সংরক্ষণের অনুমতি দিন। + আমাদের গোপনীয়তা নীতি পড়ুন + গোপনীয়তা আইকন + আপনি সব সেট! + আপনার সেটআপ সম্পূর্ণ। আপনি এখন সমস্ত বৈশিষ্ট্য অন্বেষণ করতে প্রস্তুত। + শুরু করুন + সাফল্য আইকন নিচের নেভিগেশন বার লেবেল লেবেলযুক্ত নির্বাচিত %1$s diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 4ec55d47..716e18ac 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -252,6 +252,28 @@ Dunkler Modus Automatischer Dunkelmodus bei niedrigem Akkustand Standard-Tab + Wählen Sie aus, welche Registerkarte angezeigt wird, wenn die App geöffnet wird + Top -Geschichten und aktuelle Updates + Android Studio Tools, Tipps und der vollständige Tutorial -Katalog + App -Details, Version und Credits + Überspringen + Wählen Sie Ihren Stil + Wählen Sie, wie die App aussieht + Helles, sauberes Aussehen + Bequem bei schwacher Licht + Folgen Sie Ihrem Gerätethema + Helfen Sie uns, Ihre Erfahrung zu verbessern + Helfen Sie uns, die App für Sie besser zu machen, indem Sie anonyme Absturzberichte und Nutzungsstatistiken teilen. + Absturzberichterstattung aktivieren + Wenn Sie dies aktivieren, helfen Sie uns, Fehler schneller zu identifizieren und zu beheben. Wir sammeln keine persönlichen Informationen. + Personalisierte Anzeigen zulassen + Ermöglichen Sie das Speichern von Anzeigendaten, Benutzerinformationen und Personalisierung, um Anzeigen relevant zu halten. + Lesen Sie unsere Datenschutzrichtlinie + Datenschutz -Ikone + Sie sind alle gesetzt! + Ihr Setup ist abgeschlossen. Sie sind jetzt bereit, alle Funktionen zu erkunden. + Fangen an + Erfolgsikone Beschriftungen der unteren Navigationsleiste Beschriftet Ausgewählt %1$s diff --git a/app/src/main/res/values-es-rGQ/strings.xml b/app/src/main/res/values-es-rGQ/strings.xml index 90a734e8..b4ad8624 100644 --- a/app/src/main/res/values-es-rGQ/strings.xml +++ b/app/src/main/res/values-es-rGQ/strings.xml @@ -252,6 +252,28 @@ Modo oscuro Modo oscuro automático por batería Pestaña predeterminada + Elija qué pestaña aparece cuando se abre la aplicación + Las principales historias y actualizaciones recientes + Android Studio Tools, consejos y el catálogo de tutorial completo + Detalles, versión y créditos de la aplicación + Saltar + Elige tu estilo + Elija cómo se ve la aplicación + Apariencia brillante y limpia + Cómodo con poca luz + Sigue el tema de tu dispositivo + Ayúdanos a mejorar tu experiencia + Ayúdanos a mejorar la aplicación para compartir informes anónimos de accidentes y estadísticas de uso. + Habilitar informes de accidentes + Al habilitar esto, nos ayuda a identificar y solucionar errores más rápido. No recopilamos ninguna información personal. + Permitir anuncios personalizados + Permitir almacenar datos de anuncios, información del usuario y personalización para mantener los anuncios relevantes. + Lea nuestra Política de privacidad + Icono de privacidad + ¡Estás listo! + Tu configuración está completa. Ahora estás listo para explorar todas las características. + Empezar + Icono de éxito Etiquetas de la barra de navegación inferior Etiquetado Seleccionado %1$s diff --git a/app/src/main/res/values-es-rMX/strings.xml b/app/src/main/res/values-es-rMX/strings.xml index c6947ea1..d461d23b 100644 --- a/app/src/main/res/values-es-rMX/strings.xml +++ b/app/src/main/res/values-es-rMX/strings.xml @@ -226,6 +226,28 @@ Modo Oscuro Modo Oscuro Automático por Batería Pestaña predeterminada + Elija qué pestaña aparece cuando se abre la aplicación + Las principales historias y actualizaciones recientes + Android Studio Tools, consejos y el catálogo de tutorial completo + Detalles, versión y créditos de la aplicación + Saltar + Elige tu estilo + Elija cómo se ve la aplicación + Apariencia brillante y limpia + Cómodo con poca luz + Sigue el tema de tu dispositivo + Ayúdanos a mejorar tu experiencia + Ayúdanos a mejorar la aplicación para compartir informes anónimos de accidentes y estadísticas de uso. + Habilitar informes de accidentes + Al habilitar esto, nos ayuda a identificar y solucionar errores más rápido. No recopilamos ninguna información personal. + Permitir anuncios personalizados + Permitir almacenar datos de anuncios, información del usuario y personalización para mantener los anuncios relevantes. + Lea nuestra Política de privacidad + Icono de privacidad + ¡Estás listo! + Tu configuración está completa. Ahora estás listo para explorar todas las características. + Empezar + Icono de éxito Etiquetas de la barra de navegación inferior Etiquetado Seleccionado %1$s diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index 4bfa500a..c3d54733 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -226,6 +226,28 @@ Dark Mode Auto Battery Dark Mode Default na tab + Piliin kung aling tab ang lilitaw kapag magbubukas ang app + Nangungunang mga kwento at kamakailang mga pag -update + Mga tool sa Android Studio, mga tip, at ang buong katalogo ng tutorial + Mga detalye ng app, bersyon, at kredito + Laktawan + Piliin ang iyong estilo + Piliin kung paano ang hitsura ng app + Maliwanag, malinis na hitsura + Kumportable sa mababang ilaw + Sumusunod sa tema ng iyong aparato + Tulungan kaming mapagbuti ang iyong karanasan + Tulungan kaming gawing mas mahusay ang app para sa iyo sa pamamagitan ng pagbabahagi ng hindi nagpapakilalang mga ulat ng pag -crash at mga istatistika ng paggamit. + Paganahin ang pag -uulat ng pag -crash + Sa pamamagitan ng pagpapagana nito, tinutulungan mo kaming kilalanin at ayusin ang mga bug nang mas mabilis. Hindi namin kinokolekta ang anumang personal na impormasyon. + Payagan ang mga personalized na ad + Pahintulutan ang pag -iimbak ng data ng ad, impormasyon ng gumagamit, at pag -personalize upang mapanatili ang mga ad na may kaugnayan. + Basahin ang aming Patakaran sa Pagkapribado + Icon ng privacy + Nakatakda kayong lahat! + Kumpleto ang iyong pag -setup. Handa ka na upang galugarin ang lahat ng mga tampok. + Magsimula + Tagumpay icon Mga label ng bottom navigation bar May label Napili %1$s diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 0fe1bc23..8315e281 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -252,6 +252,28 @@ Mode sombre Mode sombre auto (batterie) Onglet par défaut + Choisissez l\'onglet apparaît lorsque l\'application s\'ouvre + Les meilleures histoires et les mises à jour récentes + Outils de studio Android, conseils et catalogue de tutoriel complet + Détails de l\'application, version et crédits + Sauter + Choisissez votre style + Choisissez à quoi ressemble l\'application + Apparence brillante et propre + Confortable en basse lumière + Suit le thème de votre appareil + Aidez-nous à améliorer votre expérience + Aidez-nous à améliorer l\'application pour vous en partageant des rapports de crash anonymes et des statistiques d\'utilisation. + Activer les rapports de crash + En permettant cela, vous nous aidez à identifier et à corriger les bogues plus rapidement. Nous ne recueillons aucune information personnelle. + Autoriser les annonces personnalisées + Perminez le stockage des données publicitaires, des informations d\'utilisateur et de la personnalisation pour garder les annonces pertinentes. + Lisez notre politique de confidentialité + Icône de confidentialité + Vous êtes prêt! + Votre configuration est complète. Vous êtes maintenant prêt à explorer toutes les fonctionnalités. + Commencer + Icône de succès Étiquettes de la barre de navigation inférieure Étiqueté Sélectionné %1$s diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 41eda870..bac968f1 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -253,6 +253,28 @@ डार्क मोड ऑटो बैटरी डार्क मोड डिफ़ॉल्ट टैब + ऐप खुलने पर कौन सा टैब दिखाई देता है, चुनें + शीर्ष कहानियाँ और हाल के अपडेट + एंड्रॉइड स्टूडियो टूल्स, टिप्स और फुल ट्यूटोरियल कैटलॉग + ऐप विवरण, संस्करण और क्रेडिट + छोडना + अपनी शैली चुनें + चुनें कि ऐप कैसा दिखता है + उज्ज्वल, स्वच्छ उपस्थिति + कम रोशनी में आरामदायक + अपने डिवाइस थीम का अनुसरण करता है + हमें अपने अनुभव को बेहतर बनाने में मदद करें + अनाम क्रैश रिपोर्ट और उपयोग के आंकड़े साझा करके हमारे लिए ऐप को बेहतर बनाने में हमारी मदद करें। + क्रैश रिपोर्टिंग सक्षम करें + इसे सक्षम करके, आप हमें तेजी से कीड़े को पहचानने और ठीक करने में मदद करते हैं। हम कोई व्यक्तिगत जानकारी एकत्र नहीं करते हैं। + व्यक्तिगत विज्ञापनों की अनुमति दें + विज्ञापन डेटा, उपयोगकर्ता की जानकारी और विज्ञापन को प्रासंगिक रखने के लिए वैयक्तिकरण की अनुमति दें। + हमारी गोपनीयता नीति पढ़ें + गोपनीयता आइकन + तुम सब सेट हो! + आपका सेटअप पूरा हो गया है। अब आप सभी सुविधाओं का पता लगाने के लिए तैयार हैं। + शुरू हो जाओ + सफलता चिह्न बॉटम नेविगेशन बार लेबल लेबल किया हुआ चयनित %1$s diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 442a1d39..0e644507 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -273,6 +273,28 @@ Sötét mód Automatikus akkumulátor-alapú sötét mód Alapértelmezett lap + Válassza ki, melyik lap jelenik meg, amikor az alkalmazás megnyílik + A legnépszerűbb történetek és a legújabb frissítések + Android Studio Tools, Tippek és a teljes bemutató katalógus + Az alkalmazás részletei, verziója és kreditjei + Kihagyás + Válassza ki a stílusát + Válassza ki, hogyan néz ki az alkalmazás + Fényes, tiszta megjelenés + Kényelmes gyenge fényben + Követi az eszköz témáját + Segítsen javítani tapasztalatait + Segítsen nekünk, hogy az alkalmazás jobbá tegye az Ön számára az anonim összeomlási jelentések és a használati statisztikák megosztásával. + Engedélyezze az ütközésjelentést + Ennek engedélyezésével segít a hibák gyorsabb azonosításában és javításában. Nem gyűjtünk személyes információkat. + Engedélyezze a személyre szabott hirdetéseket + Engedélyezze a hirdetési adatok, a felhasználói információk és a személyre szabás tárolását, hogy a hirdetések relevánsak maradjanak. + Olvassa el adatvédelmi irányelveinket + Adatvédelmi ikon + Minden készen állsz! + A beállítás teljes. Most már készen áll az összes szolgáltatás felfedezésére. + Elindul + Sikerikon Alsó navigációs sáv címkék Címkézett Kiválasztva %1$s diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 0af9a58a..af5cc87c 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -252,6 +252,28 @@ Mode Gelap Mode Gelap Baterai Otomatis Tab default + Pilih tab mana yang muncul saat aplikasi terbuka + Cerita teratas dan pembaruan terbaru + Alat studio android, tips, dan katalog tutorial lengkap + Detail aplikasi, versi, dan kredit + Melewati + Pilih Gaya Anda + Pilih penampilan aplikasi + Penampilan yang cerah dan bersih + Nyaman dalam cahaya rendah + Mengikuti tema perangkat Anda + Bantu kami meningkatkan pengalaman Anda + Bantu kami membuat aplikasi lebih baik untuk Anda dengan berbagi laporan kecelakaan anonim dan statistik penggunaan. + Aktifkan pelaporan crash + Dengan mengaktifkan ini, Anda membantu kami mengidentifikasi dan memperbaiki bug lebih cepat. Kami tidak mengumpulkan informasi pribadi apa pun. + Izinkan iklan yang dipersonalisasi + Izin menyimpan data iklan, info pengguna, dan personalisasi agar iklan tetap relevan. + Baca Kebijakan Privasi Kami + Ikon Privasi + Anda siap! + Pengaturan Anda selesai. Anda sekarang siap untuk menjelajahi semua fitur. + Mulai + Ikon Sukses Label bilah navigasi bawah Berlabel Terpilih %1$s diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 0d6d07ef..f4289358 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -273,6 +273,28 @@ Modalità scura Modalità scura automatica in base alla batteria Scheda predefinita + Scegli quale scheda appare quando si apre l\'app + Storie migliori e aggiornamenti recenti + Strumenti di studio Android, suggerimenti e catalogo tutorial completo + Dettagli, versione e crediti dell\'app + Saltare + Scegli il tuo stile + Scegli come appare l\'app + Aspetto luminoso e pulito + Comodo in condizioni di scarsa luminosità + Segue il tema del tuo dispositivo + Aiutaci a migliorare la tua esperienza + Aiutaci a migliorare l\'app per te condividendo rapporti anonimi e statistiche sull\'uso. + Abilita i report di crash + Abilitando questo, ci aiuti a identificare e correggere i bug più velocemente. Non raccogliamo alcuna informazione personale. + Consenti annunci personalizzati + Consentire la memorizzazione di dati di annunci, informazioni sull\'utente e personalizzazione per mantenere gli annunci pertinenti. + Leggi la nostra politica sulla privacy + Icona della privacy + Siete tutti pronti! + La tua configurazione è completa. Ora sei pronto per esplorare tutte le funzionalità. + Inizia + Icona di successo Etichette barra di navigazione inferiore Con etichetta Selezionato %1$s diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 74039e23..caa8f30b 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -273,6 +273,28 @@ ダークモード 自動バッテリーダークモード デフォルトタブ + アプリが開いたときに表示されるタブを選択します + トップストーリーと最近の更新 + Android Studioツール、ヒント、および完全なチュートリアルカタログ + アプリの詳細、バージョン、クレジット + スキップ + あなたのスタイルを選択してください + アプリの見た目を選択してください + 明るくてきれいな外観 + 低光の中で快適 + デバイスのテーマに従います + 私たちがあなたの経験を改善するのを手伝ってください + 匿名のクラッシュレポートと使用統計を共有することにより、アプリをより良くするのに役立ちます。 + クラッシュレポートを有効にします + これを有効にすることで、バグをより速く特定して修正するのに役立ちます。個人情報は収集しません。 + パーソナライズされた広告を許可します + 広告データ、ユーザー情報、およびパーソナライズを保存して、広告を関連させます。 + プライバシーポリシーをお読みください + プライバシーアイコン + あなたはすべて設定されています! + セットアップが完了しました。これで、すべての機能を探索する準備ができました。 + 始めましょう + 成功アイコン ボトムナビゲーションバーのラベル ラベル付き 選択済み %1$s diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index a2b890d4..96c9c0cb 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -226,6 +226,28 @@ 다크 모드 배터리 절약 시 자동 다크 모드 기본 탭 + 앱이 열릴 때 나타나는 탭을 선택하십시오 + 최고의 이야기와 최근 업데이트 + 안드로이드 스튜디오 도구, 팁 및 전체 자습서 카탈로그 + 앱 세부 사항, 버전 및 크레딧 + 건너뛰다 + 스타일을 선택하십시오 + 앱의 모양을 선택하십시오 + 밝고 깨끗한 외관 + 낮은 조명에서 편안합니다 + 장치 테마를 따릅니다 + 경험을 향상시키는 데 도움이됩니다 + 익명의 충돌 보고서 및 사용 통계를 공유하여 앱을 더 좋게 만들도록 도와줍니다. + 충돌보고를 활성화합니다 + 이를 활성화하면 버그를 더 빨리 식별하고 수정하는 데 도움이됩니다. 우리는 개인 정보를 수집하지 않습니다. + 개인화 된 광고를 허용합니다 + 광고 데이터, 사용자 정보 및 개인화를 저장하여 광고를 관련성있게 유지할 수 있습니다. + 개인 정보 보호 정책을 읽으십시오 + 프라이버시 아이콘 + 당신은 모두 설정되었습니다! + 설정이 완료되었습니다. 이제 모든 기능을 탐색 할 준비가되었습니다. + 시작하세요 + 성공 아이콘 하단 탐색 메뉴 라벨 라벨 표시 선택됨 %1$s diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index a40d51e1..579435c3 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -273,6 +273,28 @@ Tryb ciemny Automatyczny tryb ciemny baterii Domyślna karta + Wybierz, która karta pojawi się, gdy aplikacja się otworzy + Najlepsze historie i najnowsze aktualizacje + Narzędzia Studio Android, wskazówki i pełny katalog samouczka + Szczegóły aplikacji, wersja i kredyty + Pominąć + Wybierz swój styl + Wybierz, jak wygląda aplikacja + Jasny, czysty wygląd + Wygodne w słabym świetle + Śledzi motyw urządzenia + Pomóż nam poprawić swoje doświadczenie + Pomóż nam ulepszyć aplikację, udostępniając anonimowe raporty katastrofy i statystyki użytkowania. + Włącz raportowanie o awarie + Umożliwiając to, pomagasz nam szybciej identyfikować i naprawić błędy. Nie zbieramy żadnych danych osobowych. + Zezwalaj na spersonalizowane reklamy + Zezwalaj na przechowywanie danych AD, informacje o użytkowniku i personalizacja, aby zapewnić odpowiednie reklamy. + Przeczytaj naszą politykę prywatności + Ikona prywatności + Jesteś gotowy! + Twoja konfiguracja jest kompletna. Jesteś teraz gotowy do zbadania wszystkich funkcji. + Zacznij + Ikona sukcesu Etykiety dolnego paska nawigacji Z etykietą Wybrane %1$s diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 3d2c8c2f..c3be3546 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -226,6 +226,28 @@ Modo Escuro Modo Escuro Automático por Bateria Aba padrão + Escolha qual guia aparece quando o aplicativo é aberto + Principais histórias e atualizações recentes + Android Studio Tools, dicas e o catálogo completo do tutorial + Detalhes do aplicativo, versão e créditos + Pular + Escolha o seu estilo + Escolha como o aplicativo parece + Aparência brilhante e limpa + Confortável com pouca luz + Segue o tema do seu dispositivo + Ajude -nos a melhorar sua experiência + Ajude -nos a melhorar o aplicativo para você, compartilhando relatórios anônimos e estatísticas de uso. + Ativar relatórios de falhas + Ao ativar isso, você nos ajuda a identificar e corrigir bugs mais rapidamente. Não coletamos nenhuma informação pessoal. + Permitir anúncios personalizados + Permita armazenar dados de anúncios, informações do usuário e personalização para manter os anúncios relevantes. + Leia nossa Política de Privacidade + Ícone de privacidade + Você está pronto! + Sua configuração está completa. Agora você está pronto para explorar todos os recursos. + Comece + Ícone de sucesso Rótulos da barra de navegação inferior Rotulado Selecionado %1$s diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 81991c7d..051f1ec1 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -260,6 +260,28 @@ Mod Întunecat Mod întunecat automat la baterie scăzută Filă implicită + Alegeți ce filă apare când se deschide aplicația + Povești de top și actualizări recente + Instrumente Android Studio, Sfaturi și Catalogul Tutorial complet + Detalii despre aplicație, versiune și credite + Skip + Alege -ți stilul + Alegeți cum arată aplicația + Aspect luminos, curat + Confortabil în lumină scăzută + Urmează tema dispozitivului + Ajută -ne să -ți îmbunătățim experiența + Ajută -ne să îmbunătățim aplicația pentru dvs. prin partajarea rapoartelor de accidente anonime și a statisticilor de utilizare. + Activați raportarea accidentelor + Activând acest lucru, ne ajutați să identificăm și să remediem mai repede erorile. Nu colectăm nicio informație personală. + Permiteți reclame personalizate + Permiterea stocării datelor publicitare, informațiile utilizatorilor și personalizarea pentru a menține anunțurile relevante. + Citiți Politica noastră de confidențialitate + Pictograma confidențialității + Ești cu toții setat! + Configurarea dvs. este completă. Acum sunteți gata să explorați toate caracteristicile. + Începeți + Pictograma de succes Etichete bară de navigare inferioară Etichetate Selectat %1$s diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 58438280..337d2540 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -252,6 +252,28 @@ Темный режим Автоматический темный режим по заряду батареи Вкладка по умолчанию + Выберите, какая вкладка появляется, когда приложение откроется + Лучшие истории и последние обновления + Инструменты Android Studio, советы и полный учебный каталог + Детали приложения, версия и кредиты + Пропускать + Выберите свой стиль + Выберите, как выглядит приложение + Яркий, чистый внешний вид + Удобно при слабом освещении + Следует за темой вашего устройства + Помогите нам улучшить ваш опыт + Помогите нам сделать приложение лучше для вас, поделившись анонимными отчетами об аварии и статистике использования. + Включить отчет о сбоях + Включив это, вы помогаете нам быстрее определять и исправлять ошибки. Мы не собираем никакой личной информации. + Разрешить персонализированную рекламу + Разрешение на хранение данных рекламы, информация пользователя и персонализация, чтобы поддерживать актуальность объявлений. + Прочитайте нашу политику конфиденциальности + Значок конфиденциальности + Ты все готово! + Ваша установка завершена. Теперь вы готовы исследовать все функции. + Начните + Иконка успеха Подписи нижней панели навигации С подписями Выбрано %1$s diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index fabf9af2..fb259fe1 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -226,6 +226,28 @@ Mörkt läge Automatiskt mörkt läge vid lågt batteri Standardflik + Välj vilken flik som visas när appen öppnas + Topphistorier och senaste uppdateringar + Android Studio -verktyg, tips och hela handledningskatalogen + Appdetaljer, version och krediter + Hoppa + Välj din stil + Välj hur appen ser ut + Ljust, rent utseende + Bekvämt i svagt ljus + Följer ditt enhetstema + Hjälp oss att förbättra din upplevelse + Hjälp oss att göra appen bättre för dig genom att dela anonyma kraschrapporter och användningsstatistik. + Aktivera kraschrapportering + Genom att aktivera detta hjälper du oss att identifiera och fixa buggar snabbare. Vi samlar inte in någon personlig information. + Tillåt personliga annonser + Tillåt lagring av annonsdata, användarinformation och personalisering för att hålla annonser relevanta. + Läs vår integritetspolicy + Integritetsikon + Ni är alla redo! + Din installation är klar. Du är nu redo att utforska alla funktioner. + Komma igång + Framgångsikon Etiketter i nedre navigeringsfältet Med etikett Vald %1$s diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index cd8954de..d31472b5 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -228,6 +228,28 @@ โหมดมืด โหมดมืดอัตโนมัติตามแบตเตอรี่ แท็บเริ่มต้น + เลือกแท็บที่จะปรากฏขึ้นเมื่อแอปเปิดขึ้น + เรื่องยอดนิยมและการอัปเดตล่าสุด + เครื่องมือ Android Studio, เคล็ดลับและแคตตาล็อกการสอนเต็มรูปแบบ + รายละเอียดแอพเวอร์ชันและเครดิต + ข้าม + เลือกสไตล์ของคุณ + เลือกรูปลักษณ์ของแอป + รูปลักษณ์ที่สดใสและสะอาด + สะดวกสบายในแสงน้อย + ทำตามธีมอุปกรณ์ของคุณ + ช่วยเราปรับปรุงประสบการณ์ของคุณ + ช่วยเราทำให้แอพดีขึ้นสำหรับคุณโดยการแบ่งปันรายงานความผิดพลาดที่ไม่ระบุชื่อและสถิติการใช้งาน + เปิดใช้งานการรายงานข้อผิดพลาด + ด้วยการเปิดใช้งานสิ่งนี้คุณจะช่วยเราระบุและแก้ไขข้อบกพร่องได้เร็วขึ้น เราไม่รวบรวมข้อมูลส่วนบุคคลใด ๆ + อนุญาตให้โฆษณาส่วนบุคคล + อนุญาตให้จัดเก็บข้อมูลโฆษณาข้อมูลผู้ใช้และการปรับเปลี่ยนส่วนบุคคลเพื่อให้โฆษณาที่เกี่ยวข้อง + อ่านนโยบายความเป็นส่วนตัวของเรา + ไอคอนความเป็นส่วนตัว + คุณพร้อมแล้ว! + การตั้งค่าของคุณเสร็จสมบูรณ์ ตอนนี้คุณพร้อมที่จะสำรวจคุณสมบัติทั้งหมด + เริ่มต้นใช้งาน + ไอคอนความสำเร็จ ป้ายกำกับแถบนำทางด้านล่าง มีป้ายกำกับ ที่เลือก %1$s diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index b0473ce9..d05368d4 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -226,6 +226,28 @@ Karanlık Mod Otomatik Pil Karanlık Modu Varsayılan sekme + Uygulama açıldığında hangi sekmenin göründüğünü seçin + En iyi hikayeler ve son güncellemeler + Android stüdyo araçları, ipuçları ve tam öğretici katalog + Uygulama ayrıntıları, sürüm ve krediler + Atlamak + Stilinizi Seçin + Uygulamanın nasıl göründüğünü seçin + Parlak, temiz görünüm + Düşük ışıkta rahat + Cihaz temanızı takip eder + Deneyiminizi geliştirmemize yardımcı olun + Anonim çarpışma raporlarını ve kullanım istatistiklerini paylaşarak uygulamayı sizin için daha iyi hale getirmemize yardımcı olun. + Kaza raporlamasını etkinleştirin + Bunu etkinleştirerek, hataları daha hızlı tanımlamamıza ve düzeltmemize yardımcı olursunuz. Herhangi bir kişisel bilgi toplamıyoruz. + Kişiselleştirilmiş Reklamlara İzin Ver + Reklamları, kullanıcı bilgilerinin ve kişiselleştirmenin reklamları alakalı tutmak için saklanmasına izin verin. + Gizlilik Politikamızı Okuyun + Gizlilik simgesi + Hepiniz hazırsınız! + Kurulumunuz tamamlandı. Artık tüm özellikleri keşfetmeye hazırsınız. + Başlamak + Başarı simgesi Alt gezinme çubuğu etiketleri Etiketli Seçili %1$s diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 7b77e12c..f0220946 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -226,6 +226,28 @@ Темний режим Автоматичний темний режим при низькому заряді Вкладка за замовчуванням + Виберіть, яка вкладка відображається, коли додаток відкривається + Найпопулярніші історії та останні оновлення + Інструменти, поради Android Studio, поради та повний каталог підручників + Деталі програми, версія та кредити + Пропустити + Виберіть свій стиль + Виберіть, як виглядає додаток + Яскравий, чистий зовнішній вигляд + Зручно при слабкому освітленні + Слідкує за темою вашого пристрою + Допоможіть нам покращити ваш досвід + Допоможіть нам покращити додаток, поділившись анонімними звітами про аварію та статистикою використання. + Увімкнути звітність про аварію + Увімкнувши це, ви допомагаєте нам швидше визначити та виправити помилки. Ми не збираємо жодної особистої інформації. + Дозволити персоналізовані оголошення + Дозволити зберігати дані реклами, інформацію про користувачів та персоналізацію, щоб підтримувати рекламу актуальними. + Прочитайте нашу Політику конфіденційності + Значок конфіденційності + Ви всі налаштовані! + Ваша установка завершена. Тепер ви готові вивчити всі функції. + Розпочати + Значок успіху Підписи нижньої навігаційної панелі З підписами Вибрані %1$s diff --git a/app/src/main/res/values-ur-rPK/strings.xml b/app/src/main/res/values-ur-rPK/strings.xml index 6a53ed62..1f538f7b 100644 --- a/app/src/main/res/values-ur-rPK/strings.xml +++ b/app/src/main/res/values-ur-rPK/strings.xml @@ -226,6 +226,28 @@ ڈارک موڈ آٹو بیٹری ڈارک موڈ پہلے سے طے شدہ ٹیب + جب ایپ کھلتی ہے تو کون سا ٹیب ظاہر ہوتا ہے اس کا انتخاب کریں + اعلی کہانیاں اور حالیہ تازہ کارییں + اینڈروئیڈ اسٹوڈیو ٹولز ، اشارے ، اور مکمل ٹیوٹوریل کیٹلاگ + ایپ کی تفصیلات ، ورژن ، اور کریڈٹ + چھوڑ دیں + اپنے انداز کا انتخاب کریں + منتخب کریں کہ ایپ کیسی دکھتی ہے + روشن ، صاف ظاہری شکل + کم روشنی میں آرام دہ + آپ کے آلے کے تھیم کی پیروی کرتا ہے + اپنے تجربے کو بہتر بنانے میں ہماری مدد کریں + گمنام کریش رپورٹس اور استعمال کے اعدادوشمار کا اشتراک کرکے آپ کے لئے ایپ کو بہتر بنانے میں ہماری مدد کریں۔ + کریش رپورٹنگ کو فعال کریں + اس کو چالو کرنے سے ، آپ کیڑے کی تیزی سے شناخت اور ٹھیک کرنے میں ہماری مدد کرتے ہیں۔ ہم کوئی ذاتی معلومات اکٹھا نہیں کرتے ہیں۔ + ذاتی نوعیت کے اشتہارات کی اجازت دیں + اشتہارات کو متعلقہ رکھنے کے لئے اشتہار کے اعداد و شمار ، صارف کی معلومات ، اور ذاتی نوعیت کو ذخیرہ کرنے کی اجازت دیں۔ + ہماری رازداری کی پالیسی پڑھیں + رازداری کا آئیکن + آپ سب تیار ہیں! + آپ کا سیٹ اپ مکمل ہے۔ اب آپ تمام خصوصیات کو دریافت کرنے کے لئے تیار ہیں۔ + شروع کریں + کامیابی کا آئیکن نیچے نیویگیشن بار کے لیبلز لیبل شدہ منتخب %1$s diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index d13ec20c..bce59630 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -226,6 +226,28 @@ Chế độ tối Chế độ tối tự động theo pin Tab mặc định + Chọn tab nào xuất hiện khi ứng dụng mở + Những câu chuyện hàng đầu và các bản cập nhật gần đây + Android Studio Tools, Mẹo và Danh mục hướng dẫn đầy đủ + Chi tiết ứng dụng, phiên bản và tín dụng + Nhảy + Chọn phong cách của bạn + Chọn cách ứng dụng trông như thế nào + Xuất hiện tươi sáng, sạch sẽ + Thoải mái trong ánh sáng yếu + Theo chủ đề thiết bị của bạn + Giúp chúng tôi cải thiện trải nghiệm của bạn + Giúp chúng tôi làm cho ứng dụng tốt hơn cho bạn bằng cách chia sẻ các báo cáo sự cố ẩn danh và thống kê sử dụng. + Cho phép báo cáo sự cố + Bằng cách cho phép điều này, bạn giúp chúng tôi xác định và sửa lỗi nhanh hơn. Chúng tôi không thu thập bất kỳ thông tin cá nhân. + Cho phép quảng cáo được cá nhân hóa + Cho phép lưu trữ dữ liệu quảng cáo, thông tin người dùng và cá nhân hóa để giữ quảng cáo có liên quan. + Đọc chính sách bảo mật của chúng tôi + Biểu tượng riêng tư + Tất cả các bạn đã thiết lập! + Thiết lập của bạn đã hoàn tất. Bây giờ bạn đã sẵn sàng để khám phá tất cả các tính năng. + Bắt đầu + Biểu tượng thành công Nhãn thanh điều hướng dưới cùng Có nhãn Đã chọn %1$s diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 97049248..0a66fbb7 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -226,6 +226,28 @@ 深色模式 自動省電深色模式 預設分頁 + 選擇應用程序打開時出現哪個選項卡 + 頂級故事和最新更新 + Android Studio工具,技巧和完整的教程目錄 + 應用詳細信息,版本和積分 + 跳過 + 選擇您的風格 + 選擇應用的外觀 + 明亮,乾淨的外觀 + 在弱光中舒適 + 遵循您的設備主題 + 幫助我們改善您的經驗 + 通過共享匿名崩潰報告和使用統計信息,幫助我們為您提供更好的應用程序。 + 啟用崩潰報告 + 通過啟用此功能,您可以幫助我們更快地識別和修復錯誤。我們沒有收集任何個人信息。 + 允許個性化廣告 + 允許存儲廣告數據,用戶信息和個性化,以使廣告相關。 + 閱讀我們的隱私政策 + 隱私圖標 + 你們都設定了! + 您的設置已完成。您現在準備探索所有功能。 + 開始 + 成功偶像 底部導覽列標籤 有標籤 已選取 %1$s diff --git a/app/src/test/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeViewModelTest.java b/app/src/test/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeViewModelTest.java index a17f52e0..7673d9da 100644 --- a/app/src/test/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeViewModelTest.java +++ b/app/src/test/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeViewModelTest.java @@ -27,7 +27,7 @@ public class HomeViewModelTest { @Test public void uiStateUpdatesWithData() { List promoted = List.of(new PromotedApp("App", "pkg", "icon")); - FakeHomeRepository repo = new FakeHomeRepository("tip", promoted); + FakeHomeRepository repo = new FakeHomeRepository(promoted); HomeViewModel viewModel = new HomeViewModel( new GetDailyTipUseCase(repo), new GetPromotedAppsUseCase(repo), @@ -46,7 +46,7 @@ public void uiStateUpdatesWithData() { @Test public void uiStateHandlesEmptyPromotedApps() { - FakeHomeRepository repo = new FakeHomeRepository("tip", List.of()); + FakeHomeRepository repo = new FakeHomeRepository(List.of()); HomeViewModel viewModel = new HomeViewModel( new GetDailyTipUseCase(repo), new GetPromotedAppsUseCase(repo), @@ -60,21 +60,26 @@ public void uiStateHandlesEmptyPromotedApps() { assertTrue(state.promotedApps().isEmpty()); } - record FakeHomeRepository(String dailyTip, List apps) implements HomeRepository { // FIXME: Value for parameter 'dailyTip' is always "tip" + record FakeHomeRepository(List apps) implements HomeRepository { @Override - public String getPlayStoreUrl() { - return ""; - } - - @Override - public String getAppPlayStoreUrl(String packageName) { - return ""; - } - - @Override - public void fetchPromotedApps(PromotedAppsCallback callback) { - callback.onResult(apps); - } + public String dailyTip() { + return "tip"; } + + @Override + public String getPlayStoreUrl() { + return ""; + } + + @Override + public String getAppPlayStoreUrl(String packageName) { + return ""; + } + + @Override + public void fetchPromotedApps(PromotedAppsCallback callback) { + callback.onResult(apps); + } + } }