From e3defb682a53de656d09eb0f1df05908ed3df979 Mon Sep 17 00:00:00 2001 From: Mihai-Cristian Condrea Date: Fri, 12 Sep 2025 23:51:52 +0300 Subject: [PATCH 1/3] Remove quiz feature and resolve FIXME issues --- app/src/main/AndroidManifest.xml | 10 - app/src/main/assets/quiz_questions.json | 62 - .../java/ads/views/NativeAdBannerView.java | 15 +- .../java/data/model/QuizQuestion.java | 11 - .../repository/DefaultQuizRepository.java | 20 - .../java/data/repository/QuizRepository.java | 17 - .../source/DefaultQuizLocalDataSource.java | 72 - .../java/data/source/QuizLocalDataSource.java | 17 - .../androidtutorials/java/di/AppModule.java | 23 - .../domain/quiz/LoadQuizQuestionsUseCase.java | 25 - .../managers/QuizReminderManager.java | 42 - .../receivers/QuizReminderReceiver.java | 23 - .../workers/QuizReminderWorker.java | 56 - .../android/AndroidStudioFragment.java | 3 +- .../networking/retrofit/RetrofitActivity.java | 5 +- .../start/AndroidStartProjectActivity.java | 2 +- .../passwordbox/PasswordBoxActivity.java | 2 +- .../java/ui/screens/home/HomeFragment.java | 3 +- .../java/ui/screens/main/MainActivity.java | 78 +- .../java/ui/screens/quiz/QuizActivity.java | 114 - .../java/ui/screens/quiz/QuizViewModel.java | 65 - .../repository/SettingsRepository.java | 5 +- .../java/utils/FontManager.java | 6 +- app/src/main/res/layout/activity_quiz.xml | 63 - .../main/res/layout/dialog_quiz_result.xml | 25 - app/src/main/res/raw/anim_quiz_success.json | 5557 ----------------- app/src/main/res/values-ar-rEG/strings.xml | 6 - app/src/main/res/values-bg-rBG/strings.xml | 6 - app/src/main/res/values-bn-rBD/strings.xml | 6 - app/src/main/res/values-de-rDE/strings.xml | 6 - app/src/main/res/values-es-rGQ/strings.xml | 6 - app/src/main/res/values-es-rMX/strings.xml | 6 - app/src/main/res/values-fil-rPH/strings.xml | 6 - app/src/main/res/values-fr-rFR/strings.xml | 6 - app/src/main/res/values-hi-rIN/strings.xml | 6 - app/src/main/res/values-hu-rHU/strings.xml | 6 - app/src/main/res/values-in-rID/strings.xml | 6 - app/src/main/res/values-it-rIT/strings.xml | 6 - app/src/main/res/values-ja-rJP/strings.xml | 6 - app/src/main/res/values-ko-rKR/strings.xml | 6 - app/src/main/res/values-pl-rPL/strings.xml | 6 - app/src/main/res/values-pt-rBR/strings.xml | 6 - app/src/main/res/values-ro-rRO/strings.xml | 6 - app/src/main/res/values-ru-rRU/strings.xml | 6 - app/src/main/res/values-sv-rSE/strings.xml | 6 - app/src/main/res/values-th-rTH/strings.xml | 6 - app/src/main/res/values-tr-rTR/strings.xml | 6 - app/src/main/res/values-uk-rUA/strings.xml | 6 - app/src/main/res/values-ur-rPK/strings.xml | 6 - app/src/main/res/values-vi-rVN/strings.xml | 6 - app/src/main/res/values-zh-rTW/strings.xml | 6 - app/src/main/res/values/strings.xml | 6 - .../repository/DefaultQuizRepositoryTest.java | 40 - 53 files changed, 50 insertions(+), 6467 deletions(-) delete mode 100644 app/src/main/assets/quiz_questions.json delete mode 100644 app/src/main/java/com/d4rk/androidtutorials/java/data/model/QuizQuestion.java delete mode 100644 app/src/main/java/com/d4rk/androidtutorials/java/data/repository/DefaultQuizRepository.java delete mode 100644 app/src/main/java/com/d4rk/androidtutorials/java/data/repository/QuizRepository.java delete mode 100644 app/src/main/java/com/d4rk/androidtutorials/java/data/source/DefaultQuizLocalDataSource.java delete mode 100644 app/src/main/java/com/d4rk/androidtutorials/java/data/source/QuizLocalDataSource.java delete mode 100644 app/src/main/java/com/d4rk/androidtutorials/java/domain/quiz/LoadQuizQuestionsUseCase.java delete mode 100644 app/src/main/java/com/d4rk/androidtutorials/java/notifications/managers/QuizReminderManager.java delete mode 100644 app/src/main/java/com/d4rk/androidtutorials/java/notifications/receivers/QuizReminderReceiver.java delete mode 100644 app/src/main/java/com/d4rk/androidtutorials/java/notifications/workers/QuizReminderWorker.java delete mode 100644 app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/quiz/QuizActivity.java delete mode 100644 app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/quiz/QuizViewModel.java delete mode 100644 app/src/main/res/layout/activity_quiz.xml delete mode 100644 app/src/main/res/layout/dialog_quiz_result.xml delete mode 100644 app/src/main/res/raw/anim_quiz_success.json delete mode 100644 app/src/test/java/com/d4rk/androidtutorials/java/data/repository/DefaultQuizRepositoryTest.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5c81b0dd..3ddffffa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -356,16 +356,6 @@ android:exported="false" android:label="@string/support_us" android:parentActivityName=".ui.screens.support.SupportActivity" /> - - - - questions); - } -} diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/data/source/DefaultQuizLocalDataSource.java b/app/src/main/java/com/d4rk/androidtutorials/java/data/source/DefaultQuizLocalDataSource.java deleted file mode 100644 index fb3bcaaa..00000000 --- a/app/src/main/java/com/d4rk/androidtutorials/java/data/source/DefaultQuizLocalDataSource.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.d4rk.androidtutorials.java.data.source; - -import android.content.res.AssetManager; -import android.util.JsonReader; - -import com.d4rk.androidtutorials.java.data.model.QuizQuestion; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.ExecutorService; - -/** - * Reads quiz questions from the assets folder. - */ -public class DefaultQuizLocalDataSource implements QuizLocalDataSource { - - private final AssetManager assetManager; - private final ExecutorService executorService; - - public DefaultQuizLocalDataSource(AssetManager assetManager, ExecutorService executorService) { - this.assetManager = assetManager; - this.executorService = executorService; - } - - @Override - public void loadQuestions(QuestionsCallback callback) { - executorService.execute(() -> { - List result = new ArrayList<>(); - try (InputStream is = assetManager.open("quiz_questions.json"); - JsonReader reader = new JsonReader(new InputStreamReader(is, StandardCharsets.UTF_8))) { - reader.beginArray(); - while (reader.hasNext()) { - reader.beginObject(); - String question = null; - List options = new ArrayList<>(); - int answer = -1; - while (reader.hasNext()) { - String name = reader.nextName(); - switch (name) { - case "question" -> question = reader.nextString(); - case "options" -> { - reader.beginArray(); - while (reader.hasNext()) { - options.add(reader.nextString()); - } - reader.endArray(); - } - case "answer" -> answer = reader.nextInt(); - default -> reader.skipValue(); - } - } - reader.endObject(); - if (question != null && !options.isEmpty() && answer >= 0) { - result.add(new QuizQuestion( - question, - options.toArray(new String[0]), - answer)); - } - } - reader.endArray(); - } catch (IOException e) { - result = Collections.emptyList(); - } - callback.onResult(result); - }); - } -} diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/data/source/QuizLocalDataSource.java b/app/src/main/java/com/d4rk/androidtutorials/java/data/source/QuizLocalDataSource.java deleted file mode 100644 index 3a20a989..00000000 --- a/app/src/main/java/com/d4rk/androidtutorials/java/data/source/QuizLocalDataSource.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.d4rk.androidtutorials.java.data.source; - -import com.d4rk.androidtutorials.java.data.model.QuizQuestion; - -import java.util.List; - -/** - * Contract for reading quiz data from local storage. - */ -public interface QuizLocalDataSource { - - void loadQuestions(QuestionsCallback callback); - - interface QuestionsCallback { - void onResult(List questions); - } -} diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/di/AppModule.java b/app/src/main/java/com/d4rk/androidtutorials/java/di/AppModule.java index 9e6ae471..c49f7efd 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/di/AppModule.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/di/AppModule.java @@ -7,18 +7,14 @@ import com.android.volley.toolbox.Volley; import com.d4rk.androidtutorials.java.data.repository.DefaultHomeRepository; import com.d4rk.androidtutorials.java.data.repository.DefaultMainRepository; -import com.d4rk.androidtutorials.java.data.repository.DefaultQuizRepository; import com.d4rk.androidtutorials.java.data.repository.DefaultSupportRepository; import com.d4rk.androidtutorials.java.data.repository.HomeRepository; import com.d4rk.androidtutorials.java.data.repository.MainRepository; -import com.d4rk.androidtutorials.java.data.repository.QuizRepository; import com.d4rk.androidtutorials.java.data.repository.SupportRepository; import com.d4rk.androidtutorials.java.data.source.DefaultHomeLocalDataSource; import com.d4rk.androidtutorials.java.data.source.DefaultHomeRemoteDataSource; -import com.d4rk.androidtutorials.java.data.source.DefaultQuizLocalDataSource; import com.d4rk.androidtutorials.java.data.source.HomeLocalDataSource; import com.d4rk.androidtutorials.java.data.source.HomeRemoteDataSource; -import com.d4rk.androidtutorials.java.data.source.QuizLocalDataSource; import com.d4rk.androidtutorials.java.domain.about.GetCurrentYearUseCase; import com.d4rk.androidtutorials.java.domain.about.GetVersionStringUseCase; import com.d4rk.androidtutorials.java.domain.help.LaunchReviewFlowUseCase; @@ -34,7 +30,6 @@ import com.d4rk.androidtutorials.java.domain.main.GetDefaultTabPreferenceUseCase; import com.d4rk.androidtutorials.java.domain.main.MarkStartupScreenShownUseCase; import com.d4rk.androidtutorials.java.domain.main.ShouldShowStartupScreenUseCase; -import com.d4rk.androidtutorials.java.domain.quiz.LoadQuizQuestionsUseCase; import com.d4rk.androidtutorials.java.domain.settings.ApplyConsentUseCase; import com.d4rk.androidtutorials.java.domain.settings.GetDarkModeUseCase; import com.d4rk.androidtutorials.java.domain.settings.OnPreferenceChangedUseCase; @@ -211,24 +206,6 @@ public SetConsentAcceptedUseCase provideSetConsentAcceptedUseCase(SettingsReposi return new SetConsentAcceptedUseCase(repository); } - @Provides - @Singleton - public QuizLocalDataSource provideQuizLocalDataSource(Application application, ExecutorService executorService) { - AssetManager manager = application.getAssets(); - return new DefaultQuizLocalDataSource(manager, executorService); - } - - @Provides - @Singleton - public QuizRepository provideQuizRepository(QuizLocalDataSource local) { - return new DefaultQuizRepository(local); - } - - @Provides - public LoadQuizQuestionsUseCase provideLoadQuizQuestionsUseCase(QuizRepository repository) { - return new LoadQuizQuestionsUseCase(repository); - } - @Provides @Singleton public StartupRepository provideStartupRepository(Application application) { diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/domain/quiz/LoadQuizQuestionsUseCase.java b/app/src/main/java/com/d4rk/androidtutorials/java/domain/quiz/LoadQuizQuestionsUseCase.java deleted file mode 100644 index 6cde5672..00000000 --- a/app/src/main/java/com/d4rk/androidtutorials/java/domain/quiz/LoadQuizQuestionsUseCase.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.d4rk.androidtutorials.java.domain.quiz; - -import com.d4rk.androidtutorials.java.data.model.QuizQuestion; -import com.d4rk.androidtutorials.java.data.repository.QuizRepository; - -import java.util.List; - -/** - * Loads quiz questions from assets. - */ -public class LoadQuizQuestionsUseCase { - private final QuizRepository repository; - - public LoadQuizQuestionsUseCase(QuizRepository repository) { - this.repository = repository; - } - - public void invoke(Callback callback) { - repository.loadQuestions(callback::onResult); - } - - public interface Callback { - void onResult(List questions); - } -} diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/notifications/managers/QuizReminderManager.java b/app/src/main/java/com/d4rk/androidtutorials/java/notifications/managers/QuizReminderManager.java deleted file mode 100644 index ed688205..00000000 --- a/app/src/main/java/com/d4rk/androidtutorials/java/notifications/managers/QuizReminderManager.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.d4rk.androidtutorials.java.notifications.managers; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.content.Context; -import android.content.Intent; - -import com.d4rk.androidtutorials.java.notifications.receivers.QuizReminderReceiver; - -import java.util.concurrent.TimeUnit; - -/** - * Utility for scheduling daily quiz reminder notifications. - */ -public class QuizReminderManager { - - private final AlarmManager alarmManager; - private final PendingIntent reminderIntent; - - public QuizReminderManager(Context context) { - alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); - reminderIntent = PendingIntent.getBroadcast( - context, - 1, - new Intent(context, QuizReminderReceiver.class), - PendingIntent.FLAG_IMMUTABLE - ); - } - - /** - * Schedule a repeating daily reminder. - */ - public void scheduleDailyReminder() { - long trigger = System.currentTimeMillis() + TimeUnit.DAYS.toMillis(1); - alarmManager.setRepeating( - AlarmManager.RTC_WAKEUP, - trigger, - TimeUnit.DAYS.toMillis(1), - reminderIntent - ); - } -} diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/notifications/receivers/QuizReminderReceiver.java b/app/src/main/java/com/d4rk/androidtutorials/java/notifications/receivers/QuizReminderReceiver.java deleted file mode 100644 index 6b2d3eac..00000000 --- a/app/src/main/java/com/d4rk/androidtutorials/java/notifications/receivers/QuizReminderReceiver.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.d4rk.androidtutorials.java.notifications.receivers; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; - -import androidx.work.OneTimeWorkRequest; -import androidx.work.WorkManager; - -import com.d4rk.androidtutorials.java.notifications.workers.QuizReminderWorker; - -/** - * BroadcastReceiver that enqueues a {@link QuizReminderWorker}. - */ -public class QuizReminderReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - OneTimeWorkRequest request = new OneTimeWorkRequest.Builder( - QuizReminderWorker.class) - .build(); - WorkManager.getInstance(context).enqueue(request); - } -} diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/notifications/workers/QuizReminderWorker.java b/app/src/main/java/com/d4rk/androidtutorials/java/notifications/workers/QuizReminderWorker.java deleted file mode 100644 index 356a12dd..00000000 --- a/app/src/main/java/com/d4rk/androidtutorials/java/notifications/workers/QuizReminderWorker.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.d4rk.androidtutorials.java.notifications.workers; - -import android.app.NotificationChannel; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.content.Context; -import android.content.Intent; -import android.os.Build; - -import androidx.annotation.NonNull; -import androidx.annotation.RequiresApi; -import androidx.core.app.NotificationCompat; -import androidx.work.Worker; -import androidx.work.WorkerParameters; - -import com.d4rk.androidtutorials.java.R; -import com.d4rk.androidtutorials.java.ui.screens.quiz.QuizActivity; - -/** - * Worker that displays the daily quiz reminder notification. - */ -public class QuizReminderWorker extends Worker { - - public QuizReminderWorker(@NonNull Context context, @NonNull WorkerParameters params) { - super(context, params); - } - - @RequiresApi(api = Build.VERSION_CODES.O) - @NonNull - @Override - public Result doWork() { - NotificationManager manager = (NotificationManager) getApplicationContext() - .getSystemService(Context.NOTIFICATION_SERVICE); - String channelId = "quiz_reminder_channel"; - NotificationChannel channel = new NotificationChannel( - channelId, - getApplicationContext().getString(R.string.quiz_reminder_title), - NotificationManager.IMPORTANCE_HIGH - ); - manager.createNotificationChannel(channel); - - Intent intent = new Intent(getApplicationContext(), QuizActivity.class); - PendingIntent pendingIntent = PendingIntent.getActivity( - getApplicationContext(), 0, intent, PendingIntent.FLAG_IMMUTABLE); - - NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(), channelId) - .setSmallIcon(R.drawable.ic_check_circle) - .setContentTitle(getApplicationContext().getString(R.string.quiz_reminder_title)) - .setContentText(getApplicationContext().getString(R.string.quiz_reminder_body)) - .setAutoCancel(true) - .setContentIntent(pendingIntent); - - manager.notify(1001, builder.build()); - return Result.success(); - } -} 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 96d60277..b624aef3 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 @@ -31,7 +31,6 @@ import com.d4rk.androidtutorials.java.ads.views.NativeAdBannerView; import com.d4rk.androidtutorials.java.utils.ConsentUtils; import com.google.android.gms.ads.AdListener; -import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.LoadAdError; import com.google.android.gms.ads.MobileAds; import com.google.android.material.card.MaterialCardView; @@ -369,7 +368,7 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi int type = getItemViewType(pos); if (type == TYPE_AD) { AdHolder adHolder = (AdHolder) holder; - adHolder.adView.loadAd(new AdRequest.Builder().build(), new AdListener() { + adHolder.adView.loadAd(new AdListener() { @Override public void onAdFailedToLoad(@NonNull LoadAdError error) { adHolder.adView.setVisibility(View.GONE); diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/networking/retrofit/RetrofitActivity.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/networking/retrofit/RetrofitActivity.java index 3951c1f9..305754d3 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/networking/retrofit/RetrofitActivity.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/networking/retrofit/RetrofitActivity.java @@ -5,6 +5,7 @@ import android.os.Handler; import android.os.Looper; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.d4rk.androidtutorials.java.R; @@ -46,7 +47,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { binding.buttonFetch.setEnabled(false); api.getTodo().enqueue(new Callback<>() { @Override - public void onResponse(Call call, Response response) { // FIXME: Not annotated parameter overrides @EverythingIsNonNull parameter + public void onResponse(@NonNull Call call, @NonNull Response response) { if (response.isSuccessful() && response.body() != null) { binding.textViewResult.setText(response.body().title); } else { @@ -56,7 +57,7 @@ public void onResponse(Call call, Response response) { // FIXME: Not } @Override - public void onFailure(Call call, Throwable t) { // FIXME: Not annotated parameter overrides @EverythingIsNonNull parameter + public void onFailure(@NonNull Call call, @NonNull Throwable t) { binding.textViewResult.setText(R.string.snack_general_error); binding.buttonFetch.setEnabled(true); } diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/start/AndroidStartProjectActivity.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/start/AndroidStartProjectActivity.java index 4a6f974f..e987e319 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/start/AndroidStartProjectActivity.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/start/AndroidStartProjectActivity.java @@ -25,7 +25,7 @@ protected void onCreate(Bundle savedInstanceState) { edgeToEdgeDelegate.applyEdgeToEdge(binding.constraintLayout); setSupportActionBar(binding.topAppBar); - binding.topAppBar.setNavigationOnClickListener(v -> onBackPressed()); // FIXME: 'onBackPressed()' is deprecated + binding.topAppBar.setNavigationOnClickListener(v -> getOnBackPressedDispatcher().onBackPressed()); binding.topAppBar.setOnMenuItemClickListener(item -> { if (item.getItemId() == R.id.action_share) { Intent sharingIntent = new Intent(Intent.ACTION_SEND); diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/textboxes/passwordbox/PasswordBoxActivity.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/textboxes/passwordbox/PasswordBoxActivity.java index 75908d6e..bcdc35e0 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/textboxes/passwordbox/PasswordBoxActivity.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/android/lessons/textboxes/passwordbox/PasswordBoxActivity.java @@ -62,7 +62,7 @@ private void hidePassword() { private void addKeyListener() { binding.buttonShowPassword.setOnClickListener(v -> - Snackbar.make(binding.getRoot(), binding.editText.getText(), Snackbar.LENGTH_LONG).show()); // FIXME: Argument 'binding.editText.getText()' might be null + Snackbar.make(binding.getRoot(), String.valueOf(binding.editText.getText()), Snackbar.LENGTH_LONG).show()); } diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeFragment.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeFragment.java index 228abb19..c8627c20 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeFragment.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeFragment.java @@ -107,7 +107,8 @@ private void shareTip(String tip) { private void shareApp(com.d4rk.androidtutorials.java.data.model.PromotedApp app) { android.content.Intent sharingIntent = new android.content.Intent(android.content.Intent.ACTION_SEND); sharingIntent.setType("text/plain"); - String shareLink = homeViewModel.getPromotedAppIntent(app.packageName()).getData().toString(); // FIXME: Method invocation 'toString' may produce 'NullPointerException' + android.net.Uri data = homeViewModel.getPromotedAppIntent(app.packageName()).getData(); + String shareLink = data != null ? data.toString() : ""; String shareMessage = getString(com.d4rk.androidtutorials.java.R.string.share_message, shareLink); sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareMessage); sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, getString(com.d4rk.androidtutorials.java.R.string.share_subject)); diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java index f29ccf56..d973eb7b 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java @@ -33,7 +33,6 @@ import com.d4rk.androidtutorials.java.BuildConfig; import com.d4rk.androidtutorials.java.R; import com.d4rk.androidtutorials.java.databinding.ActivityMainBinding; -import com.d4rk.androidtutorials.java.notifications.managers.AppUpdateNotificationsManager; import com.d4rk.androidtutorials.java.ui.components.navigation.BottomSheetMenuFragment; import com.d4rk.androidtutorials.java.ui.screens.startup.StartupActivity; import com.d4rk.androidtutorials.java.ui.screens.support.SupportActivity; @@ -72,17 +71,17 @@ public class MainActivity extends AppCompatActivity { @Override public void onResume(@NonNull LifecycleOwner owner) { ConsentUtils.applyStoredConsent(MainActivity.this); - if (mBinding.adView != null) { + if (mBinding != null && mBinding.adView != null) { if (ConsentUtils.canShowAds(MainActivity.this)) { if (mBinding.adView.getVisibility() != View.VISIBLE) { MobileAds.initialize(MainActivity.this); - mBinding.adPlaceholder.setVisibility(View.GONE); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException' + mBinding.adPlaceholder.setVisibility(View.GONE); mBinding.adView.setVisibility(View.VISIBLE); mBinding.adView.loadAd(new AdRequest.Builder().build()); } } else { mBinding.adView.setVisibility(View.GONE); - mBinding.adPlaceholder.setVisibility(View.VISIBLE); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException' + mBinding.adPlaceholder.setVisibility(View.VISIBLE); } } } @@ -90,7 +89,6 @@ public void onResume(@NonNull LifecycleOwner owner) { private MainViewModel mainViewModel; private NavController navController; private int currentNavIndex; - private AppUpdateNotificationsManager appUpdateNotificationsManager; // FIXME: Private field 'appUpdateNotificationsManager' is assigned but never accessed private AppUpdateManager appUpdateManager; private InstallStateUpdatedListener installStateUpdatedListener; private long backPressedTime; @@ -113,7 +111,6 @@ protected void onCreate(Bundle savedInstanceState) { setupActionBar(); observeViewModel(); - setupUpdateNotifications(); String[] themeValues = getResources().getStringArray(R.array.preference_theme_values); String[] bottomNavBarLabelsValues = getResources().getStringArray(R.array.preference_bottom_navigation_bar_labels_values); @@ -171,26 +168,30 @@ private void observeViewModel() { boolean useRail = shouldUseNavigationRail(); EdgeToEdgeDelegate edgeToEdgeDelegate = new EdgeToEdgeDelegate(this); - NavigationBarView navBarView = (NavigationBarView) mBinding.navView; + ActivityMainBinding binding = mBinding; + if (binding == null) { + return; + } + NavigationBarView navBarView = (NavigationBarView) binding.navView; if (useRail) { - mBinding.navRail.setVisibility(View.VISIBLE); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException' + binding.navRail.setVisibility(View.VISIBLE); navBarView.setVisibility(View.GONE); - edgeToEdgeDelegate.applyEdgeToEdge(mBinding.container); + edgeToEdgeDelegate.applyEdgeToEdge(binding.container); } else { - mBinding.navRail.setVisibility(View.GONE); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException' + binding.navRail.setVisibility(View.GONE); navBarView.setVisibility(View.VISIBLE); - edgeToEdgeDelegate.applyEdgeToEdgeBottomBar(mBinding.container, navBarView); + edgeToEdgeDelegate.applyEdgeToEdgeBottomBar(binding.container, navBarView); navBarView.setLabelVisibilityMode(uiState.bottomNavVisibility()); - if (mBinding.adView != null) { + if (binding.adView != null) { if (ConsentUtils.canShowAds(this)) { MobileAds.initialize(this); - mBinding.adPlaceholder.setVisibility(View.GONE); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException' - mBinding.adView.setVisibility(View.VISIBLE); - mBinding.adView.loadAd(new AdRequest.Builder().build()); + binding.adPlaceholder.setVisibility(View.GONE); + binding.adView.setVisibility(View.VISIBLE); + binding.adView.loadAd(new AdRequest.Builder().build()); } else { - mBinding.adView.setVisibility(View.GONE); - mBinding.adPlaceholder.setVisibility(View.VISIBLE); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException' + binding.adView.setVisibility(View.GONE); + binding.adPlaceholder.setVisibility(View.VISIBLE); } } } @@ -206,7 +207,10 @@ private void observeViewModel() { navOrder.put(R.id.navigation_home, 0); navOrder.put(R.id.navigation_android_studio, 1); navOrder.put(R.id.navigation_about, 2); - currentNavIndex = navOrder.get(navController.getCurrentDestination().getId()); // FIXME: Method invocation 'getId' may produce 'NullPointerException' + androidx.navigation.NavDestination destination = navController.getCurrentDestination(); + if (destination != null) { + currentNavIndex = navOrder.get(destination.getId()); + } NavOptions forwardOptions = new NavOptions.Builder() .setEnterAnim(R.anim.fragment_spring_enter) @@ -261,12 +265,11 @@ private void observeViewModel() { } }); - mainViewModel.getLoadingState().observe(this, isLoading -> - mBinding.progressBar.setVisibility(Boolean.TRUE.equals(isLoading) ? View.VISIBLE : View.GONE)); // FIXME: Method invocation 'setVisibility' may produce 'NullPointerException' - } - - private void setupUpdateNotifications() { - appUpdateNotificationsManager = new AppUpdateNotificationsManager(this); + mainViewModel.getLoadingState().observe(this, isLoading -> { + if (mBinding != null) { + mBinding.progressBar.setVisibility(Boolean.TRUE.equals(isLoading) ? View.VISIBLE : View.GONE); + } + }); } @@ -285,33 +288,6 @@ public boolean onOptionsItemSelected(android.view.MenuItem item) { return super.onOptionsItemSelected(item); } - // TODO: Call on onResume - private void checkForImmediateUpdate() { // FIXME: Private method 'checkForImmediateUpdate()' is never used - appUpdateManager - .getAppUpdateInfo() - .addOnSuccessListener( - appUpdateInfo -> { - boolean updateAvailable = - appUpdateInfo.updateAvailability() - == UpdateAvailability.UPDATE_AVAILABLE; - if (updateAvailable - && appUpdateInfo.isUpdateTypeAllowed( - AppUpdateType.IMMEDIATE)) { - startImmediateUpdate(appUpdateInfo); - } - }) - .addOnFailureListener( - e -> { - if (!BuildConfig.DEBUG) { - Snackbar.make( - findViewById(android.R.id.content), - getString(R.string.snack_general_error), - Snackbar.LENGTH_LONG) - .show(); - } - }); - } - private void startImmediateUpdate(AppUpdateInfo appUpdateInfo) { appUpdateManager.startUpdateFlowForResult( appUpdateInfo, diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/quiz/QuizActivity.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/quiz/QuizActivity.java deleted file mode 100644 index 1bc070a2..00000000 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/quiz/QuizActivity.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.d4rk.androidtutorials.java.ui.screens.quiz; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.MenuItem; -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; -import androidx.lifecycle.ViewModelProvider; - -import com.airbnb.lottie.LottieAnimationView; -import com.d4rk.androidtutorials.java.R; -import com.d4rk.androidtutorials.java.data.model.QuizQuestion; -import com.d4rk.androidtutorials.java.databinding.ActivityQuizBinding; -import com.d4rk.androidtutorials.java.utils.EdgeToEdgeDelegate; -import com.google.android.material.dialog.MaterialAlertDialogBuilder; - -import dagger.hilt.android.AndroidEntryPoint; - -@AndroidEntryPoint -public class QuizActivity extends AppCompatActivity { - - private ActivityQuizBinding binding; - private QuizViewModel viewModel; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - binding = ActivityQuizBinding.inflate(getLayoutInflater()); - setContentView(binding.getRoot()); - - EdgeToEdgeDelegate edgeToEdgeDelegate = new EdgeToEdgeDelegate(this); - edgeToEdgeDelegate.applyEdgeToEdge(binding.container); - - ActionBar actionBar = getSupportActionBar(); - if (actionBar != null) { - actionBar.setDisplayHomeAsUpEnabled(true); - } - - viewModel = new ViewModelProvider(this).get(QuizViewModel.class); - if (viewModel.getTotalQuestions() == 0) { - new MaterialAlertDialogBuilder(this) - .setMessage(R.string.quiz_no_more_questions) - .setPositiveButton(android.R.string.ok, (d, w) -> finish()) - .setCancelable(false) - .show(); - return; - } - showQuestion(viewModel.getCurrentQuestion()); - - binding.buttonNext.setOnClickListener(v -> onNextClicked()); - } - - private void onNextClicked() { - int selectedId = binding.optionsGroup.getCheckedRadioButtonId(); - int selectedIndex = -1; - if (selectedId == binding.option1.getId()) { - selectedIndex = 0; - } else if (selectedId == binding.option2.getId()) { - selectedIndex = 1; - } else if (selectedId == binding.option3.getId()) { - selectedIndex = 2; - } else if (selectedId == binding.option4.getId()) { - selectedIndex = 3; - } - if (selectedIndex != -1) { - viewModel.answer(selectedIndex); - } - if (viewModel.getCurrentIndex().getValue() >= viewModel.getTotalQuestions()) { // FIXME: Unboxing of 'viewModel.getCurrentIndex().getValue()' may produce 'NullPointerException' - showResult(); - } else { - showQuestion(viewModel.getCurrentQuestion()); - binding.optionsGroup.clearCheck(); - } - } - - private void showQuestion(QuizQuestion question) { - if (question == null) { - return; - } - binding.textQuestion.setText(question.question()); - binding.option1.setText(question.options()[0]); - binding.option2.setText(question.options()[1]); - binding.option3.setText(question.options()[2]); - binding.option4.setText(question.options()[3]); - } - - private void showResult() { - int score = viewModel.getScore().getValue(); // FIXME: Unboxing of 'viewModel.getScore().getValue()' may produce 'NullPointerException' - int total = viewModel.getTotalQuestions(); - View view = LayoutInflater.from(this).inflate(R.layout.dialog_quiz_result, null, false); - TextView textResult = view.findViewById(R.id.text_result); - textResult.setText(getString(R.string.quiz_finished, score, total)); - LottieAnimationView animationView = view.findViewById(R.id.animation_success); - animationView.playAnimation(); - new MaterialAlertDialogBuilder(this) - .setView(view) - .setPositiveButton(android.R.string.ok, (d, w) -> finish()) - .setCancelable(false) - .show(); - } - - @Override - public boolean onOptionsItemSelected(@NonNull MenuItem item) { - if (item.getItemId() == android.R.id.home) { - finish(); - return true; - } - return super.onOptionsItemSelected(item); - } -} diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/quiz/QuizViewModel.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/quiz/QuizViewModel.java deleted file mode 100644 index 99ab4a34..00000000 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/quiz/QuizViewModel.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.d4rk.androidtutorials.java.ui.screens.quiz; - -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MutableLiveData; -import androidx.lifecycle.ViewModel; - -import com.d4rk.androidtutorials.java.data.model.QuizQuestion; -import com.d4rk.androidtutorials.java.domain.quiz.LoadQuizQuestionsUseCase; - -import java.util.Collections; -import java.util.List; - -import javax.inject.Inject; - -import dagger.hilt.android.lifecycle.HiltViewModel; - -/** - * ViewModel managing quiz state and scoring. - */ -@HiltViewModel -public class QuizViewModel extends ViewModel { - - private final MutableLiveData> questions = new MutableLiveData<>(Collections.emptyList()); - private final MutableLiveData currentIndex = new MutableLiveData<>(0); - private final MutableLiveData score = new MutableLiveData<>(0); - private final LoadQuizQuestionsUseCase loadQuizQuestionsUseCase; // FIXME: Field can be converted to a local variable && Private field 'loadQuizQuestionsUseCase' is assigned but never accessed - - @Inject - public QuizViewModel(LoadQuizQuestionsUseCase loadQuizQuestionsUseCase) { - this.loadQuizQuestionsUseCase = loadQuizQuestionsUseCase; - loadQuizQuestionsUseCase.invoke(questions::postValue); - } - - public QuizQuestion getCurrentQuestion() { - List list = questions.getValue(); - if (list == null || list.isEmpty()) return null; - int index = currentIndex.getValue(); // FIXME: Unboxing of 'currentIndex.getValue()' may produce 'NullPointerException' - return list.get(Math.min(index, list.size() - 1)); - } - - public LiveData getCurrentIndex() { - return currentIndex; - } - - public LiveData getScore() { - return score; - } - - public LiveData> getQuestions() { // FIXME: Method 'getQuestions()' is never used - return questions; - } - - public void answer(int optionIndex) { - QuizQuestion question = getCurrentQuestion(); - if (question != null && optionIndex == question.answerIndex()) { - score.setValue(score.getValue() + 1); // FIXME: Unboxing of 'score.getValue()' may produce 'NullPointerException' - } - currentIndex.setValue(currentIndex.getValue() + 1); // FIXME: Unboxing of 'currentIndex.getValue()' may produce 'NullPointerException' - } - - public int getTotalQuestions() { - List list = questions.getValue(); - return list != null ? list.size() : 0; - } -} diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/settings/repository/SettingsRepository.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/settings/repository/SettingsRepository.java index 00e059dc..30f7406b 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/settings/repository/SettingsRepository.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/settings/repository/SettingsRepository.java @@ -50,8 +50,11 @@ public boolean applyTheme() { String defaultThemeValue = context.getString(R.string.default_value_theme); String preference = sharedPreferences.getString(preferenceKey, defaultThemeValue); + if (preference == null) { + preference = defaultThemeValue; + } int currentNightMode = AppCompatDelegate.getDefaultNightMode(); - int newNightMode = getNewNightMode(currentNightMode, preference, darkModeValues); // FIXME: Argument 'preference' might be null + int newNightMode = getNewNightMode(currentNightMode, preference, darkModeValues); if (newNightMode != currentNightMode) { AppCompatDelegate.setDefaultNightMode(newNightMode); return true; diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/utils/FontManager.java b/app/src/main/java/com/d4rk/androidtutorials/java/utils/FontManager.java index 91f395f5..e264a702 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/utils/FontManager.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/utils/FontManager.java @@ -19,14 +19,16 @@ public static Typeface getMonospaceFont(Context context, SharedPreferences prefs prefs.edit().remove(key).apply(); font = "6"; } - return switch (font) { // FIXME: Dereference of 'font' may produce 'NullPointerException' + if (font == null) { + font = "6"; + } + return switch (font) { case "0" -> ResourcesCompat.getFont(context, R.font.font_audiowide); case "1" -> ResourcesCompat.getFont(context, R.font.font_fira_code); case "2" -> ResourcesCompat.getFont(context, R.font.font_jetbrains_mono); case "3" -> ResourcesCompat.getFont(context, R.font.font_noto_sans_mono); case "4" -> ResourcesCompat.getFont(context, R.font.font_poppins); case "5" -> ResourcesCompat.getFont(context, R.font.font_roboto_mono); - case "6" -> ResourcesCompat.getFont(context, R.font.font_google_sans_code); // FIXME: Branch in 'switch' is a duplicate of the default branch default -> ResourcesCompat.getFont(context, R.font.font_google_sans_code); }; } diff --git a/app/src/main/res/layout/activity_quiz.xml b/app/src/main/res/layout/activity_quiz.xml deleted file mode 100644 index 84c73468..00000000 --- a/app/src/main/res/layout/activity_quiz.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/dialog_quiz_result.xml b/app/src/main/res/layout/dialog_quiz_result.xml deleted file mode 100644 index da5ce1bd..00000000 --- a/app/src/main/res/layout/dialog_quiz_result.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - diff --git a/app/src/main/res/raw/anim_quiz_success.json b/app/src/main/res/raw/anim_quiz_success.json deleted file mode 100644 index 6041ead7..00000000 --- a/app/src/main/res/raw/anim_quiz_success.json +++ /dev/null @@ -1,5557 +0,0 @@ -{ - "v": "5.6.3", - "fr": 29.9700012207031, - "ip": 0, - "op": 47.0000019143492, - "w": 1920, - "h": 1080, - "nm": "Successful", - "ddd": 0, - "assets": [], - "fonts": { - "list": [ - { - "fName": "SFUIDisplay-Bold", - "fFamily": "SF UI Display", - "fStyle": "Bold", - "ascent": 73.828125 - } - ] - }, - "layers": [ - { - "ddd": 0, - "ind": 1, - "ty": 5, - "nm": "Payment Successful", - "sr": 1, - "ks": { - "o": { - "a": 1, - "k": [ - { - "i": { - "x": [ - 0.833 - ], - "y": [ - 0.833 - ] - }, - "o": { - "x": [ - 0.167 - ], - "y": [ - 0.167 - ] - }, - "t": 27, - "s": [ - 0 - ] - }, - { - "t": 37.0000015070409, - "s": [ - 100 - ] - } - ], - "ix": 11 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "p": { - "a": 0, - "k": [ - 664.641, - 864, - 0 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100, - 100 - ], - "ix": 6 - } - }, - "ao": 0, - "t": { - "d": { - "k": [ - { - "s": { - "s": 64, - "f": "SFUIDisplay-Bold", - "t": "", - "j": 0, - "tr": 0, - "lh": 76.8, - "ls": 0, - "fc": [ - 0, - 1, - 0.592 - ] - }, - "t": 0 - } - ] - }, - "p": {}, - "m": { - "g": 1, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 2 - } - }, - "a": [] - }, - "ip": 0, - "op": 47.0000019143492, - "st": 0, - "bm": 0 - }, - { - "ddd": 0, - "ind": 2, - "ty": 4, - "nm": "check", - "sr": 1, - "ks": { - "o": { - "a": 0, - "k": 100, - "ix": 11 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "p": { - "a": 0, - "k": [ - 961.141, - 540, - 0 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 376.304, - 376.304, - 100 - ], - "ix": 6 - } - }, - "ao": 0, - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - -23, - -3.5 - ], - [ - -7.5, - 12 - ], - [ - 20.5, - -16 - ] - ], - "c": false - }, - "ix": 2 - }, - "nm": "Path 1", - "mn": "ADBE Vector Shape - Group", - "hd": false - }, - { - "ty": "st", - "c": { - "a": 0, - "k": [ - 1, - 1, - 1, - 1 - ], - "ix": 3 - }, - "o": { - "a": 0, - "k": 100, - "ix": 4 - }, - "w": { - "a": 0, - "k": 12, - "ix": 5 - }, - "lc": 2, - "lj": 1, - "ml": 4, - "bm": 0, - "nm": "Stroke 1", - "mn": "ADBE Vector Graphic - Stroke", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Shape 1", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - }, - { - "ty": "tm", - "s": { - "a": 0, - "k": 0, - "ix": 1 - }, - "e": { - "a": 1, - "k": [ - { - "i": { - "x": [ - 0.667 - ], - "y": [ - 1 - ] - }, - "o": { - "x": [ - 0.333 - ], - "y": [ - 0 - ] - }, - "t": 14, - "s": [ - 0 - ] - }, - { - "t": 27.0000010997325, - "s": [ - 100 - ] - } - ], - "ix": 2 - }, - "o": { - "a": 0, - "k": 0, - "ix": 3 - }, - "m": 1, - "ix": 2, - "nm": "Trim Paths 1", - "mn": "ADBE Vector Filter - Trim", - "hd": false - } - ], - "ip": 0, - "op": 47.0000019143492, - "st": 0, - "bm": 0 - }, - { - "ddd": 0, - "ind": 3, - "ty": 4, - "nm": "elipse bold", - "sr": 1, - "ks": { - "o": { - "a": 1, - "k": [ - { - "i": { - "x": [ - 0.667 - ], - "y": [ - 1 - ] - }, - "o": { - "x": [ - 0.333 - ], - "y": [ - 0 - ] - }, - "t": 0, - "s": [ - 0 - ] - }, - { - "i": { - "x": [ - 0.667 - ], - "y": [ - 1 - ] - }, - "o": { - "x": [ - 0.333 - ], - "y": [ - 0 - ] - }, - "t": 14, - "s": [ - 81 - ] - }, - { - "t": 27.0000010997325, - "s": [ - 100 - ] - } - ], - "ix": 11 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "p": { - "a": 0, - "k": [ - 960, - 535.5, - 0 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - -62, - -4.5, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "i": { - "x": [ - 0.667, - 0.667, - 0.667 - ], - "y": [ - 1, - 1, - 1 - ] - }, - "o": { - "x": [ - 0.333, - 0.333, - 0.333 - ], - "y": [ - 0, - 0, - 0 - ] - }, - "t": 0, - "s": [ - 41.25, - 41.25, - 100 - ] - }, - { - "i": { - "x": [ - 0.667, - 0.667, - 0.667 - ], - "y": [ - 1, - 1, - 1 - ] - }, - "o": { - "x": [ - 0.333, - 0.333, - 0.333 - ], - "y": [ - 0, - 0, - 0 - ] - }, - "t": 14, - "s": [ - 532.5, - 532.5, - 100 - ] - }, - { - "i": { - "x": [ - 0.667, - 0.667, - 0.667 - ], - "y": [ - 1, - 1, - 1 - ] - }, - "o": { - "x": [ - 0.333, - 0.333, - 0.333 - ], - "y": [ - 0, - 0, - 0 - ] - }, - "t": 21, - "s": [ - 413.25, - 413.25, - 100 - ] - }, - { - "t": 27.0000010997325, - "s": [ - 508.75, - 508.75, - 100 - ] - } - ], - "ix": 6 - } - }, - "ao": 0, - "shapes": [ - { - "ty": "gr", - "it": [ - { - "d": 1, - "ty": "el", - "s": { - "a": 0, - "k": [ - 80, - 80 - ], - "ix": 2 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 3 - }, - "nm": "Ellipse Path 1", - "mn": "ADBE Vector Shape - Ellipse", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 0, - 0.8117647058823529, - 0.2, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - -62, - -4.5 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Ellipse 1", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ], - "ip": 0, - "op": 47.0000019143492, - "st": 0, - "bm": 0 - }, - { - "ddd": 0, - "ind": 4, - "ty": 4, - "nm": "elipse light", - "sr": 1, - "ks": { - "o": { - "a": 1, - "k": [ - { - "i": { - "x": [ - 0.667 - ], - "y": [ - 1 - ] - }, - "o": { - "x": [ - 0.333 - ], - "y": [ - 0 - ] - }, - "t": 0, - "s": [ - 0 - ] - }, - { - "i": { - "x": [ - 0.667 - ], - "y": [ - 1 - ] - }, - "o": { - "x": [ - 0.333 - ], - "y": [ - 0 - ] - }, - "t": 14, - "s": [ - 80 - ] - }, - { - "t": 27.0000010997325, - "s": [ - 0 - ] - } - ], - "ix": 11 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "p": { - "a": 0, - "k": [ - 960, - 535.5, - 0 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - -60.75, - -4.5, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "i": { - "x": [ - 0.667, - 0.667, - 0.667 - ], - "y": [ - 1, - 1, - 1 - ] - }, - "o": { - "x": [ - 0.333, - 0.333, - 0.333 - ], - "y": [ - 0, - 0, - 0 - ] - }, - "t": 0, - "s": [ - 100, - 100, - 100 - ] - }, - { - "i": { - "x": [ - 0.667, - 0.667, - 0.667 - ], - "y": [ - 1, - 1, - 1 - ] - }, - "o": { - "x": [ - 0.333, - 0.333, - 0.333 - ], - "y": [ - 0, - 0, - 0 - ] - }, - "t": 14, - "s": [ - 530, - 530, - 100 - ] - }, - { - "i": { - "x": [ - 0.667, - 0.667, - 0.667 - ], - "y": [ - 1, - 1, - 1 - ] - }, - "o": { - "x": [ - 0.333, - 0.333, - 0.333 - ], - "y": [ - 0, - 0, - 0 - ] - }, - "t": 21, - "s": [ - 431, - 431, - 100 - ] - }, - { - "t": 27.0000010997325, - "s": [ - 535, - 535, - 100 - ] - } - ], - "ix": 6 - } - }, - "ao": 0, - "shapes": [ - { - "ty": "gr", - "it": [ - { - "d": 1, - "ty": "el", - "s": { - "a": 0, - "k": [ - 122.5, - 122.5 - ], - "ix": 2 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 3 - }, - "nm": "Ellipse Path 1", - "mn": "ADBE Vector Shape - Ellipse", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 0.22745098039215686, - 0.9647058823529412, - 0.35294117647058826, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - -60.75, - -4.25 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Ellipse 1", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ], - "ip": 0, - "op": 47.0000019143492, - "st": 0, - "bm": 0 - }, - { - "ddd": 0, - "ind": 5, - "ty": 4, - "nm": "stars", - "sr": 1, - "ks": { - "o": { - "a": 1, - "k": [ - { - "i": { - "x": [ - 0.667 - ], - "y": [ - 1 - ] - }, - "o": { - "x": [ - 0.333 - ], - "y": [ - 0 - ] - }, - "t": 9, - "s": [ - 0 - ] - }, - { - "i": { - "x": [ - 0.667 - ], - "y": [ - 1 - ] - }, - "o": { - "x": [ - 0.333 - ], - "y": [ - 0 - ] - }, - "t": 21, - "s": [ - 100 - ] - }, - { - "t": 33.0000013441176, - "s": [ - 0 - ] - } - ], - "ix": 11 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "p": { - "a": 0, - "k": [ - 960, - 540, - 0 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "i": { - "x": [ - 0.667, - 0.667, - 0.667 - ], - "y": [ - 1, - 1, - 1 - ] - }, - "o": { - "x": [ - 0.333, - 0.333, - 0.333 - ], - "y": [ - 0, - 0, - 0 - ] - }, - "t": 9, - "s": [ - 89.979, - 89.979, - 100 - ] - }, - { - "i": { - "x": [ - 0.667, - 0.667, - 0.667 - ], - "y": [ - 1, - 1, - 1 - ] - }, - "o": { - "x": [ - 0.333, - 0.333, - 0.333 - ], - "y": [ - 0, - 0, - 0 - ] - }, - "t": 21, - "s": [ - 440.397, - 440.397, - 100 - ] - }, - { - "t": 33.0000013441176, - "s": [ - 554.944, - 554.944, - 100 - ] - } - ], - "ix": 6 - } - }, - "ao": 0, - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ty": "sr", - "sy": 1, - "d": 1, - "pt": { - "a": 0, - "k": 5, - "ix": 3 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 4 - }, - "r": { - "a": 0, - "k": 0, - "ix": 5 - }, - "ir": { - "a": 0, - "k": 4.301, - "ix": 6 - }, - "is": { - "a": 0, - "k": 0, - "ix": 8 - }, - "or": { - "a": 0, - "k": 8.602, - "ix": 7 - }, - "os": { - "a": 0, - "k": 0, - "ix": 9 - }, - "ix": 1, - "nm": "Polystar Path 1", - "mn": "ADBE Vector Shape - Star", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 1, - 0.5372549019607843, - 0.011764705882352941, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - 2.5, - 81 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Polystar 7", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - }, - { - "ty": "gr", - "it": [ - { - "ty": "sr", - "sy": 1, - "d": 1, - "pt": { - "a": 0, - "k": 5, - "ix": 3 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 4 - }, - "r": { - "a": 0, - "k": 0, - "ix": 5 - }, - "ir": { - "a": 0, - "k": 2.761, - "ix": 6 - }, - "is": { - "a": 0, - "k": 0, - "ix": 8 - }, - "or": { - "a": 0, - "k": 5.523, - "ix": 7 - }, - "os": { - "a": 0, - "k": 0, - "ix": 9 - }, - "ix": 1, - "nm": "Polystar Path 1", - "mn": "ADBE Vector Shape - Star", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 1, - 0.5372549019607843, - 0.011764705882352941, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - -3.5, - -91.75 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Polystar 6", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 2, - "mn": "ADBE Vector Group", - "hd": false - }, - { - "ty": "gr", - "it": [ - { - "ty": "sr", - "sy": 1, - "d": 1, - "pt": { - "a": 0, - "k": 5, - "ix": 3 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 4 - }, - "r": { - "a": 0, - "k": 0, - "ix": 5 - }, - "ir": { - "a": 0, - "k": 4.301, - "ix": 6 - }, - "is": { - "a": 0, - "k": 0, - "ix": 8 - }, - "or": { - "a": 0, - "k": 8.602, - "ix": 7 - }, - "os": { - "a": 0, - "k": 0, - "ix": 9 - }, - "ix": 1, - "nm": "Polystar Path 1", - "mn": "ADBE Vector Shape - Star", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 1, - 0.5372549019607843, - 0.011764705882352941, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - -82, - -12 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Polystar 4", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 3, - "mn": "ADBE Vector Group", - "hd": false - }, - { - "ty": "gr", - "it": [ - { - "ty": "sr", - "sy": 1, - "d": 1, - "pt": { - "a": 0, - "k": 5, - "ix": 3 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 4 - }, - "r": { - "a": 0, - "k": 0, - "ix": 5 - }, - "ir": { - "a": 0, - "k": 3.64, - "ix": 6 - }, - "is": { - "a": 0, - "k": 0, - "ix": 8 - }, - "or": { - "a": 0, - "k": 7.28, - "ix": 7 - }, - "os": { - "a": 0, - "k": 0, - "ix": 9 - }, - "ix": 1, - "nm": "Polystar Path 1", - "mn": "ADBE Vector Shape - Star", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 1, - 0.5372549019607843, - 0.011764705882352941, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - 89.5, - -14.5 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Polystar 2", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 4, - "mn": "ADBE Vector Group", - "hd": false - } - ], - "ip": 0, - "op": 47.0000019143492, - "st": 0, - "bm": 0 - }, - { - "ddd": 0, - "ind": 6, - "ty": 4, - "nm": "circle", - "sr": 1, - "ks": { - "o": { - "a": 1, - "k": [ - { - "i": { - "x": [ - 0.667 - ], - "y": [ - 1 - ] - }, - "o": { - "x": [ - 0.333 - ], - "y": [ - 0 - ] - }, - "t": 9, - "s": [ - 0 - ] - }, - { - "i": { - "x": [ - 0.667 - ], - "y": [ - 1 - ] - }, - "o": { - "x": [ - 0.333 - ], - "y": [ - 0 - ] - }, - "t": 21, - "s": [ - 100 - ] - }, - { - "t": 33.0000013441176, - "s": [ - 0 - ] - } - ], - "ix": 11 - }, - "r": { - "a": 0, - "k": 0, - "ix": 10 - }, - "p": { - "a": 0, - "k": [ - 960, - 540, - 0 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 1, - "k": [ - { - "i": { - "x": [ - 0.667, - 0.667, - 0.667 - ], - "y": [ - 1, - 1, - 1 - ] - }, - "o": { - "x": [ - 0.333, - 0.333, - 0.333 - ], - "y": [ - 0, - 0, - 0 - ] - }, - "t": 9, - "s": [ - 139.752, - 139.752, - 100 - ] - }, - { - "i": { - "x": [ - 0.667, - 0.667, - 0.667 - ], - "y": [ - 1, - 1, - 1 - ] - }, - "o": { - "x": [ - 0.333, - 0.333, - 0.333 - ], - "y": [ - 0, - 0, - 0 - ] - }, - "t": 21, - "s": [ - 535.117, - 535.117, - 100 - ] - }, - { - "t": 33.0000013441176, - "s": [ - 785.336, - 785.336, - 100 - ] - } - ], - "ix": 6 - } - }, - "ao": 0, - "shapes": [ - { - "ty": "gr", - "it": [ - { - "d": 1, - "ty": "el", - "s": { - "a": 0, - "k": [ - 7.5, - 7.5 - ], - "ix": 2 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 3 - }, - "nm": "Ellipse Path 1", - "mn": "ADBE Vector Shape - Ellipse", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 0.011764706817, - 1, - 0.596078431373, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - -0.25, - 58.75 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Ellipse 8", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - }, - { - "ty": "gr", - "it": [ - { - "d": 1, - "ty": "el", - "s": { - "a": 0, - "k": [ - 6.5, - 6.5 - ], - "ix": 2 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 3 - }, - "nm": "Ellipse Path 1", - "mn": "ADBE Vector Shape - Ellipse", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 0.011764706817, - 1, - 0.596078431373, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - -4.25, - -61.75 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Ellipse 7", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 2, - "mn": "ADBE Vector Group", - "hd": false - }, - { - "ty": "gr", - "it": [ - { - "d": 1, - "ty": "el", - "s": { - "a": 0, - "k": [ - 7, - 7 - ], - "ix": 2 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 3 - }, - "nm": "Ellipse Path 1", - "mn": "ADBE Vector Shape - Ellipse", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 0.011764705882352941, - 1, - 0.596078431372549, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - 55, - -14 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Ellipse 6", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 3, - "mn": "ADBE Vector Group", - "hd": false - }, - { - "ty": "gr", - "it": [ - { - "d": 1, - "ty": "el", - "s": { - "a": 0, - "k": [ - 6, - 6 - ], - "ix": 2 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 3 - }, - "nm": "Ellipse Path 1", - "mn": "ADBE Vector Shape - Ellipse", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 0.011764706817, - 1, - 0.596078431373, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - -56.5, - 9.5 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Ellipse 5", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 4, - "mn": "ADBE Vector Group", - "hd": false - }, - { - "ty": "gr", - "it": [ - { - "d": 1, - "ty": "el", - "s": { - "a": 0, - "k": [ - 11.5, - 11.5 - ], - "ix": 2 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 3 - }, - "nm": "Ellipse Path 1", - "mn": "ADBE Vector Shape - Ellipse", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 0.011764706817, - 1, - 0.596078431373, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - 54.25, - 32.75 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Ellipse 4", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 5, - "mn": "ADBE Vector Group", - "hd": false - }, - { - "ty": "gr", - "it": [ - { - "d": 1, - "ty": "el", - "s": { - "a": 0, - "k": [ - 14.5, - 14.5 - ], - "ix": 2 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 3 - }, - "nm": "Ellipse Path 1", - "mn": "ADBE Vector Shape - Ellipse", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 0.011764706817, - 1, - 0.596078431373, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - -50.25, - 41.25 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Ellipse 3", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 6, - "mn": "ADBE Vector Group", - "hd": false - }, - { - "ty": "gr", - "it": [ - { - "d": 1, - "ty": "el", - "s": { - "a": 0, - "k": [ - 12.5, - 12.5 - ], - "ix": 2 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 3 - }, - "nm": "Ellipse Path 1", - "mn": "ADBE Vector Shape - Ellipse", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 0.011764706817, - 1, - 0.596078431373, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - -46.75, - -50.25 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Ellipse 2", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 7, - "mn": "ADBE Vector Group", - "hd": false - }, - { - "ty": "gr", - "it": [ - { - "d": 1, - "ty": "el", - "s": { - "a": 0, - "k": [ - 15.5, - 15.5 - ], - "ix": 2 - }, - "p": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 3 - }, - "nm": "Ellipse Path 1", - "mn": "ADBE Vector Shape - Ellipse", - "hd": false - }, - { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 0.011764706817, - 1, - 0.596078431373, - 1 - ], - "ix": 4 - }, - "o": { - "a": 0, - "k": 100, - "ix": 5 - }, - "r": 1, - "bm": 0, - "nm": "Fill 1", - "mn": "ADBE Vector Graphic - Fill", - "hd": false - }, - { - "ty": "tr", - "p": { - "a": 0, - "k": [ - 45.25, - -60.75 - ], - "ix": 2 - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ], - "ix": 1 - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ], - "ix": 3 - }, - "r": { - "a": 0, - "k": 0, - "ix": 6 - }, - "o": { - "a": 0, - "k": 100, - "ix": 7 - }, - "sk": { - "a": 0, - "k": 0, - "ix": 4 - }, - "sa": { - "a": 0, - "k": 0, - "ix": 5 - }, - "nm": "Transform" - } - ], - "nm": "Ellipse 1", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 8, - "mn": "ADBE Vector Group", - "hd": false - } - ], - "ip": 0, - "op": 47.0000019143492, - "st": 0, - "bm": 0 - } - ], - "markers": [], - "chars": [ - { - "ch": "P", - "size": 64, - "style": "Bold", - "w": 62.5, - "data": { - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 14.453 - ], - [ - 14.453, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 14.844, - 0 - ], - [ - 0, - -14.502 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - 5.859, - -70.459 - ], - [ - 5.859, - 0 - ], - [ - 20.605, - 0 - ], - [ - 20.605, - -22.217 - ], - [ - 34.521, - -22.217 - ], - [ - 59.668, - -46.338 - ], - [ - 35.254, - -70.459 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "P", - "mn": "ADBE Vector Shape - Group", - "hd": false - }, - { - "ind": 1, - "ty": "sh", - "ix": 2, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - -8.008 - ], - [ - 8.447, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 8.447, - 0 - ], - [ - 0, - 8.057 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - 20.605, - -58.789 - ], - [ - 31.348, - -58.789 - ], - [ - 44.678, - -46.289 - ], - [ - 31.299, - -33.74 - ], - [ - 20.605, - -33.74 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "P", - "mn": "ADBE Vector Shape - Group", - "hd": false - } - ], - "nm": "P", - "np": 5, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ] - }, - "fFamily": "SF UI Display" - }, - { - "ch": "a", - "size": 64, - "style": "Bold", - "w": 56.01, - "data": { - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 6.592, - 0 - ], - [ - 0, - 3.955 - ], - [ - -5.957, - 0.391 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - -5.176, - 0 - ], - [ - 0, - -3.955 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 5.859 - ] - ], - "v": [ - [ - 25.391, - -9.766 - ], - [ - 16.846, - -16.211 - ], - [ - 25.977, - -22.9 - ], - [ - 37.256, - -23.682 - ], - [ - 37.256, - -19.727 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "a", - "mn": "ADBE Vector Shape - Group", - "hd": false - }, - { - "ind": 1, - "ty": "sh", - "ix": 2, - "ks": { - "a": 0, - "k": { - "i": [ - [ - -10.352, - 0 - ], - [ - -2.93, - 5.615 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 13.818, - 0 - ], - [ - 0.391, - -10.254 - ], - [ - 0, - 0 - ], - [ - -5.176, - 0 - ], - [ - 0, - -5.176 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - -9.766 - ] - ], - "o": [ - [ - 6.885, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - -10.742 - ], - [ - -13.428, - 0 - ], - [ - 0, - 0 - ], - [ - 0.684, - -3.906 - ], - [ - 5.859, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - -13.721, - 0.83 - ], - [ - 0, - 9.619 - ] - ], - "v": [ - [ - 20.752, - 0.635 - ], - [ - 37.207, - -8.301 - ], - [ - 37.5, - -8.301 - ], - [ - 37.5, - 0 - ], - [ - 51.27, - 0 - ], - [ - 51.27, - -36.865 - ], - [ - 28.418, - -54.688 - ], - [ - 5.322, - -37.354 - ], - [ - 18.359, - -37.354 - ], - [ - 27.832, - -43.994 - ], - [ - 37.256, - -35.986 - ], - [ - 37.256, - -32.422 - ], - [ - 23.828, - -31.592 - ], - [ - 2.637, - -15.479 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "a", - "mn": "ADBE Vector Shape - Group", - "hd": false - } - ], - "nm": "a", - "np": 5, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ] - }, - "fFamily": "SF UI Display" - }, - { - "ch": "y", - "size": 64, - "style": "Bold", - "w": 56.2, - "data": { - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - -0.537, - 0 - ], - [ - -4.59, - 13.721 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 5.322, - 0 - ], - [ - 0.488, - 0.098 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 13.428, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - -1.123, - 4.297 - ], - [ - -0.586, - 0 - ], - [ - 0, - 0 - ], - [ - 0.537, - 0.098 - ] - ], - "v": [ - [ - 11.67, - 19.629 - ], - [ - 36.279, - 1.074 - ], - [ - 54.883, - -53.76 - ], - [ - 39.844, - -53.76 - ], - [ - 28.174, - -11.572 - ], - [ - 27.881, - -11.572 - ], - [ - 16.26, - -53.76 - ], - [ - 0.635, - -53.76 - ], - [ - 19.482, - 0.342 - ], - [ - 18.994, - 2.393 - ], - [ - 9.473, - 8.545 - ], - [ - 6.25, - 8.398 - ], - [ - 6.25, - 19.434 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "y", - "mn": "ADBE Vector Shape - Group", - "hd": false - } - ], - "nm": "y", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ] - }, - "fFamily": "SF UI Display" - }, - { - "ch": "m", - "size": 64, - "style": "Bold", - "w": 88.43, - "data": { - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - -5.615, - 0 - ], - [ - 0, - -5.762 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - -5.615, - 0 - ], - [ - 0, - -6.299 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 10.547, - 0 - ], - [ - 2.441, - -6.738 - ], - [ - 0, - 0 - ], - [ - 7.715, - 0 - ], - [ - 2.295, - -6.494 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - -6.104 - ], - [ - 5.518, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - -6.104 - ], - [ - 5.811, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - -10.84 - ], - [ - -7.813, - 0 - ], - [ - 0, - 0 - ], - [ - -1.807, - -7.031 - ], - [ - -7.178, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - 4.834, - 0 - ], - [ - 19.092, - 0 - ], - [ - 19.092, - -32.324 - ], - [ - 28.613, - -42.725 - ], - [ - 37.451, - -33.496 - ], - [ - 37.451, - 0 - ], - [ - 51.221, - 0 - ], - [ - 51.221, - -32.52 - ], - [ - 60.596, - -42.725 - ], - [ - 69.58, - -32.959 - ], - [ - 69.58, - 0 - ], - [ - 83.838, - 0 - ], - [ - 83.838, - -36.523 - ], - [ - 66.211, - -54.541 - ], - [ - 49.512, - -43.555 - ], - [ - 49.219, - -43.555 - ], - [ - 34.229, - -54.541 - ], - [ - 18.896, - -43.994 - ], - [ - 18.604, - -43.994 - ], - [ - 18.604, - -53.76 - ], - [ - 4.834, - -53.76 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "m", - "mn": "ADBE Vector Shape - Group", - "hd": false - } - ], - "nm": "m", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ] - }, - "fFamily": "SF UI Display" - }, - { - "ch": "e", - "size": 64, - "style": "Bold", - "w": 56.84, - "data": { - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - -6.494, - 0 - ], - [ - -0.244, - -7.031 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 6.592, - 0 - ], - [ - 0, - 0 - ], - [ - 0.488, - -6.885 - ] - ], - "v": [ - [ - 28.809, - -44.043 - ], - [ - 40.234, - -32.422 - ], - [ - 17.041, - -32.422 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "e", - "mn": "ADBE Vector Shape - Group", - "hd": false - }, - { - "ind": 1, - "ty": "sh", - "ix": 2, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 0, - 0 - ], - [ - 5.371, - 0 - ], - [ - 0, - 7.764 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 15.479, - 0 - ], - [ - 0, - -17.09 - ], - [ - -16.357, - 0 - ], - [ - -1.563, - 10.4 - ] - ], - "o": [ - [ - -1.367, - 4.15 - ], - [ - -7.52, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - -16.357 - ], - [ - -15.771, - 0 - ], - [ - 0, - 17.09 - ], - [ - 13.086, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - 40.43, - -16.406 - ], - [ - 29.443, - -9.717 - ], - [ - 16.895, - -22.705 - ], - [ - 16.895, - -23.584 - ], - [ - 54.004, - -23.584 - ], - [ - 54.004, - -27.979 - ], - [ - 28.662, - -54.688 - ], - [ - 2.832, - -26.66 - ], - [ - 29.199, - 0.928 - ], - [ - 53.564, - -16.406 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "e", - "mn": "ADBE Vector Shape - Group", - "hd": false - } - ], - "nm": "e", - "np": 5, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ] - }, - "fFamily": "SF UI Display" - }, - { - "ch": "n", - "size": 64, - "style": "Bold", - "w": 58.94, - "data": { - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - -6.836, - 0 - ], - [ - 0, - -7.129 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 11.914, - 0 - ], - [ - 3.076, - -6.787 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - -7.129 - ], - [ - 6.738, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - -12.549 - ], - [ - -8.252, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - 4.834, - 0 - ], - [ - 19.092, - 0 - ], - [ - 19.092, - -30.664 - ], - [ - 30.029, - -42.676 - ], - [ - 40.088, - -31.494 - ], - [ - 40.088, - 0 - ], - [ - 54.346, - 0 - ], - [ - 54.346, - -34.473 - ], - [ - 35.693, - -54.541 - ], - [ - 18.896, - -44.141 - ], - [ - 18.604, - -44.141 - ], - [ - 18.604, - -53.76 - ], - [ - 4.834, - -53.76 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "n", - "mn": "ADBE Vector Shape - Group", - "hd": false - } - ], - "nm": "n", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ] - }, - "fFamily": "SF UI Display" - }, - { - "ch": "t", - "size": 64, - "style": "Bold", - "w": 36.18, - "data": { - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - -12.451, - 0 - ], - [ - -1.465, - 0.293 - ], - [ - 0, - 0 - ], - [ - 1.27, - 0 - ], - [ - 0, - 4.15 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 10.498 - ], - [ - 2.881, - 0 - ], - [ - 0, - 0 - ], - [ - -0.879, - 0.146 - ], - [ - -4.346, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - 8.643, - -65.723 - ], - [ - 8.643, - -53.76 - ], - [ - 1.367, - -53.76 - ], - [ - 1.367, - -42.969 - ], - [ - 8.643, - -42.969 - ], - [ - 8.643, - -14.502 - ], - [ - 25.977, - 0.195 - ], - [ - 32.861, - -0.391 - ], - [ - 32.861, - -10.938 - ], - [ - 29.297, - -10.693 - ], - [ - 22.9, - -16.846 - ], - [ - 22.9, - -42.969 - ], - [ - 32.861, - -42.969 - ], - [ - 32.861, - -53.76 - ], - [ - 22.9, - -53.76 - ], - [ - 22.9, - -65.723 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "t", - "mn": "ADBE Vector Shape - Group", - "hd": false - } - ], - "nm": "t", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ] - }, - "fFamily": "SF UI Display" - }, - { - "ch": " ", - "size": 64, - "style": "Bold", - "w": 21.48, - "data": {}, - "fFamily": "SF UI Display" - }, - { - "ch": "S", - "size": 64, - "style": "Bold", - "w": 63.13, - "data": { - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 0, - 0 - ], - [ - -16.943, - 0 - ], - [ - 0, - 13.672 - ], - [ - 14.111, - 3.027 - ], - [ - 0, - 0 - ], - [ - 0, - 4.346 - ], - [ - -7.275, - 0 - ], - [ - -0.488, - -5.957 - ], - [ - 0, - 0 - ], - [ - 16.406, - 0 - ], - [ - 0, - -12.988 - ], - [ - -12.988, - -2.783 - ], - [ - 0, - 0 - ], - [ - 0, - -4.59 - ], - [ - 7.861, - 0 - ], - [ - 0.684, - 5.811 - ] - ], - "o": [ - [ - 0.439, - 13.232 - ], - [ - 17.48, - 0 - ], - [ - 0, - -10.742 - ], - [ - 0, - 0 - ], - [ - -8.105, - -1.855 - ], - [ - 0, - -5.225 - ], - [ - 7.373, - 0 - ], - [ - 0, - 0 - ], - [ - -0.244, - -12.744 - ], - [ - -15.723, - 0 - ], - [ - 0, - 10.303 - ], - [ - 0, - 0 - ], - [ - 8.496, - 1.904 - ], - [ - 0, - 5.176 - ], - [ - -7.813, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - 3.223, - -20.068 - ], - [ - 31.396, - 1.221 - ], - [ - 59.961, - -21.094 - ], - [ - 39.697, - -40.918 - ], - [ - 31.152, - -42.725 - ], - [ - 19.629, - -51.367 - ], - [ - 31.787, - -60.059 - ], - [ - 44.873, - -50.488 - ], - [ - 58.691, - -50.488 - ], - [ - 31.738, - -71.68 - ], - [ - 4.785, - -50.098 - ], - [ - 24.17, - -30.42 - ], - [ - 33.35, - -28.418 - ], - [ - 45.215, - -19.385 - ], - [ - 31.982, - -10.449 - ], - [ - 17.432, - -20.068 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "S", - "mn": "ADBE Vector Shape - Group", - "hd": false - } - ], - "nm": "S", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ] - }, - "fFamily": "SF UI Display" - }, - { - "ch": "u", - "size": 64, - "style": "Bold", - "w": 58.94, - "data": { - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 6.641, - 0 - ], - [ - 0, - 7.275 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - -11.621, - 0 - ], - [ - -2.734, - 6.738 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 7.275 - ], - [ - -6.592, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 12.5 - ], - [ - 8.154, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - 54.102, - -53.76 - ], - [ - 39.844, - -53.76 - ], - [ - 39.844, - -23.145 - ], - [ - 29.053, - -11.084 - ], - [ - 18.848, - -22.266 - ], - [ - 18.848, - -53.76 - ], - [ - 4.59, - -53.76 - ], - [ - 4.59, - -19.287 - ], - [ - 23.877, - 0.781 - ], - [ - 40.039, - -9.717 - ], - [ - 40.332, - -9.717 - ], - [ - 40.332, - 0 - ], - [ - 54.102, - 0 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "u", - "mn": "ADBE Vector Shape - Group", - "hd": false - } - ], - "nm": "u", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ] - }, - "fFamily": "SF UI Display" - }, - { - "ch": "c", - "size": 64, - "style": "Bold", - "w": 55.76, - "data": { - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 0, - 0 - ], - [ - 14.453, - 0 - ], - [ - 0, - -17.041 - ], - [ - -16.064, - 0 - ], - [ - -0.83, - 12.5 - ], - [ - 0, - 0 - ], - [ - 6.006, - 0 - ], - [ - 0, - 10.498 - ], - [ - -7.324, - 0 - ], - [ - -0.781, - -5.566 - ] - ], - "o": [ - [ - -0.684, - -11.963 - ], - [ - -15.967, - 0 - ], - [ - 0, - 17.285 - ], - [ - 14.111, - 0 - ], - [ - 0, - 0 - ], - [ - -0.928, - 5.908 - ], - [ - -7.373, - 0 - ], - [ - 0, - -10.303 - ], - [ - 6.201, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - 53.418, - -33.936 - ], - [ - 29.053, - -54.688 - ], - [ - 2.832, - -26.904 - ], - [ - 29.15, - 0.928 - ], - [ - 53.467, - -19.531 - ], - [ - 40.186, - -19.531 - ], - [ - 29.297, - -10.352 - ], - [ - 17.285, - -26.904 - ], - [ - 29.248, - -43.457 - ], - [ - 40.137, - -33.936 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "c", - "mn": "ADBE Vector Shape - Group", - "hd": false - } - ], - "nm": "c", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ] - }, - "fFamily": "SF UI Display" - }, - { - "ch": "s", - "size": 64, - "style": "Bold", - "w": 52.64, - "data": { - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 0, - -10.107 - ], - [ - -10.107, - -2.295 - ], - [ - 0, - 0 - ], - [ - 0, - -2.783 - ], - [ - 5.664, - 0 - ], - [ - 0.684, - 4.541 - ], - [ - 0, - 0 - ], - [ - -14.16, - 0 - ], - [ - 0, - 10.449 - ], - [ - 10.791, - 2.441 - ], - [ - 0, - 0 - ], - [ - 0, - 2.686 - ], - [ - -5.127, - 0 - ], - [ - -0.293, - -4.248 - ], - [ - 0, - 0 - ], - [ - 13.281, - 0 - ] - ], - "o": [ - [ - 0, - 7.861 - ], - [ - 0, - 0 - ], - [ - 4.883, - 1.172 - ], - [ - 0, - 3.516 - ], - [ - -5.908, - 0 - ], - [ - 0, - 0 - ], - [ - 0.732, - 10.352 - ], - [ - 14.063, - 0 - ], - [ - 0, - -8.008 - ], - [ - 0, - 0 - ], - [ - -4.834, - -1.123 - ], - [ - 0, - -3.467 - ], - [ - 5.469, - 0 - ], - [ - 0, - 0 - ], - [ - -0.195, - -10.254 - ], - [ - -13.623, - 0 - ] - ], - "v": [ - [ - 3.906, - -37.939 - ], - [ - 19.238, - -22.559 - ], - [ - 29.15, - -20.313 - ], - [ - 35.889, - -14.893 - ], - [ - 26.758, - -9.18 - ], - [ - 16.504, - -16.26 - ], - [ - 2.588, - -16.26 - ], - [ - 26.367, - 0.928 - ], - [ - 50.049, - -16.406 - ], - [ - 34.961, - -31.006 - ], - [ - 24.854, - -33.203 - ], - [ - 17.676, - -38.818 - ], - [ - 26.221, - -44.58 - ], - [ - 35.547, - -37.646 - ], - [ - 48.73, - -37.646 - ], - [ - 26.416, - -54.688 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "s", - "mn": "ADBE Vector Shape - Group", - "hd": false - } - ], - "nm": "s", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ] - }, - "fFamily": "SF UI Display" - }, - { - "ch": "f", - "size": 64, - "style": "Bold", - "w": 35.84, - "data": { - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - -4.297, - 0 - ], - [ - -1.025, - -0.195 - ], - [ - 0, - 0 - ], - [ - 2.441, - 0 - ], - [ - 0, - -10.352 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0.049, - -3.76 - ], - [ - 1.563, - 0 - ], - [ - 0, - 0 - ], - [ - -1.953, - -0.293 - ], - [ - -12.451, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - 8.643, - 0 - ], - [ - 22.9, - 0 - ], - [ - 22.9, - -42.969 - ], - [ - 32.666, - -42.969 - ], - [ - 32.666, - -53.76 - ], - [ - 22.607, - -53.76 - ], - [ - 22.607, - -57.715 - ], - [ - 28.711, - -63.086 - ], - [ - 32.617, - -62.744 - ], - [ - 32.617, - -72.656 - ], - [ - 26.025, - -73.145 - ], - [ - 8.643, - -58.545 - ], - [ - 8.643, - -53.76 - ], - [ - 1.367, - -53.76 - ], - [ - 1.367, - -42.969 - ], - [ - 8.643, - -42.969 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "f", - "mn": "ADBE Vector Shape - Group", - "hd": false - } - ], - "nm": "f", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ] - }, - "fFamily": "SF UI Display" - }, - { - "ch": "l", - "size": 64, - "style": "Bold", - "w": 24.66, - "data": { - "shapes": [ - { - "ty": "gr", - "it": [ - { - "ind": 0, - "ty": "sh", - "ix": 1, - "ks": { - "a": 0, - "k": { - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - 5.225, - 0 - ], - [ - 19.482, - 0 - ], - [ - 19.482, - -73.828 - ], - [ - 5.225, - -73.828 - ] - ], - "c": true - }, - "ix": 2 - }, - "nm": "l", - "mn": "ADBE Vector Shape - Group", - "hd": false - } - ], - "nm": "l", - "np": 3, - "cix": 2, - "bm": 0, - "ix": 1, - "mn": "ADBE Vector Group", - "hd": false - } - ] - }, - "fFamily": "SF UI Display" - } - ] -} \ No newline at end of file diff --git a/app/src/main/res/values-ar-rEG/strings.xml b/app/src/main/res/values-ar-rEG/strings.xml index db2d9edd..631541bf 100644 --- a/app/src/main/res/values-ar-rEG/strings.xml +++ b/app/src/main/res/values-ar-rEG/strings.xml @@ -439,12 +439,6 @@ صمّم لإمكانية الوصول باستخدام أوصاف المحتوى وتباين مناسب. قلّل العمل الخلفي غير الضروري لتحسين عمر البطارية. نصيحة اليوم - اختبار - السؤال التالي - اكتمل الاختبار. نتيجتك: %1$d/%2$d - لا مزيد من الأسئلة، تابع التحديثات القادمة للمزيد. - تذكير الاختبار اليومي - عد للاختبار اليومي اليوم. تطبيقات أخرى من المطور لقطة شاشة تعرض زر مشروع جديد في Android Studio. لقطة شاشة تعرض اختيار نوع النشاط أثناء إعداد المشروع. diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index eec5ed78..e3ad01ec 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -465,12 +465,6 @@ Проектирайте за достъпност с описания на съдържанието и правилен контраст. Намалете ненужната работа във фонов режим, за да подобрите живота на батерията. Съвет на деня - Тест - Следващ въпрос - Тестът приключи. Вашият резултат: %1$d/%2$d - Няма повече въпроси, очаквайте нови в следващи обновления. - Ежедневно напомняне за тест - Върнете се за днешния тест. Още приложения от разработчика Екранна снимка, показваща бутона Нов проект в Android Studio. Екранна снимка, показваща избор на тип активност при настройка на проекта. diff --git a/app/src/main/res/values-bn-rBD/strings.xml b/app/src/main/res/values-bn-rBD/strings.xml index 7c680b34..9477150d 100644 --- a/app/src/main/res/values-bn-rBD/strings.xml +++ b/app/src/main/res/values-bn-rBD/strings.xml @@ -466,12 +466,6 @@ কন্টেন্ট বর্ণনা এবং সঠিক কনট্রাস্ট দিয়ে অ্যাক্সেসিবিলিটির জন্য নকশা করুন। অপ্রয়োজনীয় ব্যাকগ্রাউন্ড কাজ কমিয়ে ব্যাটারির স্থায়িত্ব বাড়ান। আজকের উপদেশ - কুইজ - পরবর্তী প্রশ্ন - কুইজ শেষ. আপনার স্কোর: %1$d/%2$d - আর কোনো প্রশ্ন নেই, পরবর্তী আপডেটে দেখুন। - দৈনিক কুইজ রিমাইন্ডার - আজকের কুইজে ফিরে আসুন. ডেভেলপারকে আরো টুল স্ক্রিনশটে Android Studio-তে নতুন প্রকল্প বোতাম দেখা যাচ্ছে। স্ক্রিনশটে প্রকল্প সেটআপের সময় অ্যাক্টিভিটি টাইপ নির্বাচন দেখা যাচ্ছে। diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index d9f92d90..acff5ebb 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -467,12 +467,6 @@ Entwickle barrierefrei mit Inhaltsbeschreibungen und ausreichendem Kontrast. Reduziere unnötige Hintergrundarbeit, um die Akkulaufzeit zu verbessern. Tipp des Tages - Quiz - Nächste Frage - Quiz abgeschlossen. Deine Punktzahl: %1$d/%2$d - Keine weiteren Fragen, schau bei zukünftigen Updates vorbei. - Tägliche Quiz-Erinnerung - Komm zurück für das heutige Quiz. Weitere Apps des Entwicklers Screenshot mit der Schaltfläche Neues Projekt in Android Studio. Screenshot mit der Auswahl des Aktivitätstyps während der Projekteinrichtung. diff --git a/app/src/main/res/values-es-rGQ/strings.xml b/app/src/main/res/values-es-rGQ/strings.xml index 9884bce2..7d502212 100644 --- a/app/src/main/res/values-es-rGQ/strings.xml +++ b/app/src/main/res/values-es-rGQ/strings.xml @@ -467,12 +467,6 @@ Diseña para la accesibilidad con descripciones de contenido y contraste adecuado. Reduce el trabajo en segundo plano innecesario para mejorar la duración de la batería. Consejo del día - Cuestionario - Siguiente pregunta - Cuestionario completado. Tu puntuación: %1$d/%2$d - No hay más preguntas, revisa futuras actualizaciones para más. - Recordatorio diario del cuestionario - Vuelve para el cuestionario de hoy. Más aplicaciones por el desarrollador Captura de pantalla que muestra el botón Nuevo proyecto en Android Studio. Captura de pantalla que muestra la selección del tipo de actividad durante la configuración. diff --git a/app/src/main/res/values-es-rMX/strings.xml b/app/src/main/res/values-es-rMX/strings.xml index ec1d6f36..f8da0be1 100644 --- a/app/src/main/res/values-es-rMX/strings.xml +++ b/app/src/main/res/values-es-rMX/strings.xml @@ -439,12 +439,6 @@ Diseña para la accesibilidad con descripciones de contenido y contraste adecuado. Reduce el trabajo en segundo plano innecesario para mejorar la duración de la batería. Consejo del día - Cuestionario - Siguiente pregunta - Cuestionario completado. Tu puntuación: %1$d/%2$d - No hay más preguntas, revisa futuras actualizaciones para más. - Recordatorio diario del cuestionario - Vuelve para el cuestionario de hoy. Más apps del desarrollador Captura de pantalla que muestra el botón Nuevo proyecto en Android Studio. Captura de pantalla que muestra la selección del tipo de actividad durante la configuración. diff --git a/app/src/main/res/values-fil-rPH/strings.xml b/app/src/main/res/values-fil-rPH/strings.xml index 1741f20e..1a7f9283 100644 --- a/app/src/main/res/values-fil-rPH/strings.xml +++ b/app/src/main/res/values-fil-rPH/strings.xml @@ -437,12 +437,6 @@ Magdisenyo para maging accessible gamit ang mga paglalarawan ng nilalaman at tamang contrast. Bawasan ang hindi kinakailangang gawa sa background upang mapahaba ang buhay ng baterya. Tip ng Araw - Pagsusulit - Susunod na Tanong - Tapos na ang pagsusulit. Ang iyong puntos: %1$d/%2$d - Wala nang mga tanong, abangan ang susunod na mga update. - Paalala sa Araw-araw na Pagsusulit - Bumalik para sa pagsusulit ngayong araw. Higit pang mga app mula sa developer Screenshot na nagpapakita ng button na New project sa Android Studio. Screenshot na nagpapakita ng pagpili ng uri ng activity sa pag-set up ng proyekto. diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index fcaa2fc7..b1f58196 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -467,12 +467,6 @@ Concevez en tenant compte de l\'accessibilité avec des descriptions de contenu et un contraste adéquat. Réduisez le travail en arrière-plan inutile pour améliorer l\'autonomie de la batterie. Astuce du jour - Quiz - Question suivante - Quiz terminé . Votre score : %1$d/%2$d - Plus de questions, consultez les prochaines mises à jour pour plus. - Rappel quotidien du quiz - Revenez pour le quiz du jour . Plus d\'applications par le développeur Capture d’écran montrant le bouton Nouveau projet dans Android Studio. Capture d’écran montrant la sélection du type d’activité pendant la configuration du projet. diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index a5a55855..7c53620e 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -467,12 +467,6 @@ सामग्री विवरण और उचित कॉन्ट्रास्ट के साथ पहुँचनीयता के लिए डिज़ाइन करें। बैटरी जीवन बढ़ाने के लिए अनावश्यक पृष्ठभूमि कार्य को कम करें। दिन का सुझाव - प्रश्नोत्तरी - अगला प्रश्न - प्रश्नोत्तरी पूरी हुई. आपका स्कोर: %1$d/%2$d - कोई और प्रश्न नहीं, अधिक के लिए आगामी अपडेट देखें। - दैनिक प्रश्नोत्तरी अनुस्मारक - आज की प्रश्नोत्तरी के लिए वापस आएं. डेवलपर द्वारा अधिक एप्लिकेशन स्क्रीनशॉट जिसमें Android Studio में नया प्रोजेक्ट बटन दिख रहा है। स्क्रीनशॉट जिसमें प्रोजेक्ट सेटअप के दौरान एक्टिविटी प्रकार चुनना दिख रहा है। diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 42f914ac..4f16d2b7 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -484,12 +484,6 @@ Tervezzen az akadálymentesség érdekében tartalmi leírásokkal és megfelelő kontraszttal. Csökkentse a felesleges háttérmunkát az akkumulátor élettartamának javítása érdekében. A nap tippje - Kvíz - Következő kérdés - Kvíz kész. Pontszámod: %1$d/%2$d - Nincs több kérdés, továbbiakért nézd meg a frissítéseket. - Napi kvíz emlékeztető - Gyere vissza a mai kvízért. A fejlesztő további alkalmazásai Képernyőkép az Új projekt gombbal az Android Studioban. diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index a02f9ea7..e5051f6b 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -465,12 +465,6 @@ Rancang dengan aksesibilitas menggunakan deskripsi konten dan kontras yang tepat. Kurangi pekerjaan latar belakang yang tidak perlu untuk meningkatkan daya tahan baterai. Tip Hari - Kuis - Pertanyaan Selanjutnya - Kuis selesai. Skor Anda: %1$d/%2$d - Tidak ada lagi pertanyaan, cek pembaruan selanjutnya untuk lebih. - Pengingat Kuis Harian - Kembali untuk kuis hari ini. Lebih banyak aplikasi oleh pengembang Cuplikan layar yang menampilkan tombol Proyek baru di Android Studio. Cuplikan layar yang menampilkan pemilihan jenis aktivitas saat menyiapkan proyek. diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 1676bb25..f971b4aa 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -486,12 +486,6 @@ Progetta per l\'accessibilità con descrizioni dei contenuti e contrasto adeguato. Riduci il lavoro in background non necessario per migliorare la durata della batteria. Suggerimento del giorno - Quiz - Prossima domanda - Quiz completato. Il tuo punteggio: %1$d/%2$d - Nessun\'altra domanda, controlla gli aggiornamenti futuri per altro. - Promemoria quiz giornaliero - Torna per il quiz di oggi. Altre app dello sviluppatore Screenshot che mostra il pulsante Nuovo progetto in Android Studio. diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 62ff02cd..106a843d 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -486,12 +486,6 @@ コンテンツの説明と適切なコントラストでアクセシビリティに配慮してデザインしましょう。 不要なバックグラウンド作業を減らしてバッテリー寿命を伸ばしましょう。 今日のヒント - クイズ - 次の質問 - クイズ完了。あなたのスコア: %1$d/%2$d - これ以上質問はありません。続きは次回の更新をお待ちください。 - 毎日のクイズリマインダー - 今日のクイズに戻ってきてください。 開発者の他のアプリ Android Studio の新規プロジェクトボタンを示すスクリーンショット。 diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 3e01a683..cf7308c7 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -437,12 +437,6 @@ 콘텐츠 설명과 적절한 대비로 접근성을 고려해 디자인하세요. 불필요한 백그라운드 작업을 줄여 배터리 수명을 향상시키세요. 오늘의 팁 - 퀴즈 - 다음 질문 - 퀴즈 완료. 점수: %1$d/%2$d - 더 이상 질문이 없습니다. 추후 업데이트를 확인하세요. - 일일 퀴즈 알림 - 오늘의 퀴즈를 위해 다시 오세요. 개발자의 다른 앱 Android Studio에서 새 프로젝트 버튼을 보여주는 스크린샷. 프로젝트 설정 중 액티비티 유형 선택을 보여주는 스크린샷. diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 1ec3740c..2a9da27a 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -484,12 +484,6 @@ Projektuj z myślą o dostępności, używając opisów treści i odpowiedniego kontrastu. Ogranicz zbędną pracę w tle, aby wydłużyć czas pracy baterii. Porada dnia - Quiz - Następne pytanie - Quiz ukończony. Twój wynik: %1$d/%2$d - Brak kolejnych pytań, sprawdź przyszłe aktualizacje, by zobaczyć więcej. - Codzienne przypomnienie o quizie - Wróć na dzisiejszy quiz. Więcej aplikacji tego dewelopera Zrzut ekranu pokazujący przycisk Nowy projekt w Android Studio. diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 4ef73fd6..0813fd3e 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -439,12 +439,6 @@ Projete com acessibilidade usando descrições de conteúdo e contraste adequado. Reduza o trabalho em segundo plano desnecessário para melhorar a duração da bateria. Dica do Dia - Quiz - Próxima pergunta - Quiz completo. Sua pontuação: %1$d/%2$d - Sem mais perguntas, confira as próximas atualizações para mais. - Lembrete diário do quiz - Volte para o quiz de hoje. Mais aplicativos do desenvolvedor Captura de tela mostrando o botão Novo projeto no Android Studio. Captura de tela mostrando a seleção do tipo de atividade na configuração do projeto. diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 09917e7e..5a0b2926 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -475,12 +475,6 @@ Proiectează pentru accesibilitate cu descrieri de conținut și contrast corespunzător. Reduceți munca de fundal inutilă pentru a îmbunătăți durata bateriei. Sfat al zilei - Chestionar - Întrebarea următoare - Chestionar complet. Scorul tău: %1$d/%2$d - Nu mai sunt întrebări, urmărește actualizările viitoare pentru mai multe. - Memento zilnic pentru chestionar - Revino pentru chestionarul de astăzi. Mai multe aplicații ale dezvoltatorului Captură de ecran cu butonul Proiect nou în Android Studio. Captură de ecran cu selectarea tipului de activitate în timpul configurării proiectului. diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 5501e0fa..d5f3348c 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -465,12 +465,6 @@ Проектируйте с учетом доступности, используя описания содержимого и правильный контраст. Сократите ненужную фоновую работу, чтобы увеличить время работы батареи. День Победы - Викторина - Следующий вопрос - Викторина завершена. Ваш результат: %1$d/%2$d - Вопросы закончились, ждите следующих обновлений. - Ежедневное напоминание о викторине - Возвращайтесь на сегодняшнюю викторину. Больше приложений от разработчика Скриншот с кнопкой Новый проект в Android Studio. Скриншот выбора типа активности при настройке проекта. diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 89b7dba5..da30a7e1 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -437,12 +437,6 @@ Designa för tillgänglighet med innehållsbeskrivningar och rätt kontrast. Minska onödigt bakgrundsarbete för att förbättra batteritiden. Dagens tips - Quiz - Nästa fråga - Quiz klart. Ditt resultat: %1$d/%2$d - Inga fler frågor, se kommande uppdateringar för mer. - Daglig quizpåminnelse - Kom tillbaka för dagens quiz. Fler appar av utvecklaren Skärmdump som visar knappen Nytt projekt i Android Studio. Skärmdump som visar val av aktivitetstyp vid projektkonfiguration. diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index cbc7f638..761acd8e 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -439,12 +439,6 @@ ออกแบบโดยคำนึงถึงการเข้าถึงด้วยคำอธิบายเนื้อหาและความคมชัดที่เหมาะสม. ลดงานเบื้องหลังที่ไม่จำเป็นเพื่อยืดอายุการใช้งานแบตเตอรี่. เคล็ดลับประจำวัน - แบบทดสอบ - คำถามถัดไป - ทำแบบทดสอบเสร็จสิ้น. คะแนนของคุณ: %1$d/%2$d - ไม่มีคำถามเพิ่มเติม โปรดติดตามการอัปเดตต่อไป - การแจ้งเตือนแบบทดสอบรายวัน - กลับมาทำแบบทดสอบของวันนี้. แอปอื่นๆ จากนักพัฒนา ภาพหน้าจอแสดงปุ่มโปรเจ็กต์ใหม่ใน Android Studio. ภาพหน้าจอแสดงการเลือกประเภทกิจกรรมระหว่างตั้งค่าโปรเจ็กต์. diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 7eb23b1b..7eb00f67 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -437,12 +437,6 @@ İçerik açıklamaları ve uygun kontrastla erişilebilirlik için tasarlayın. Pil ömrünü artırmak için gereksiz arka plan çalışmalarını azaltın. Günün İpucu - Test - Sonraki Soru - Test tamamlandı. Skorunuz: %1$d/%2$d - Başka soru yok, daha fazlası için güncellemeleri kontrol edin. - Günlük Test Hatırlatıcısı - Bugünün testi için geri gelin. Geliştiricinin diğer uygulamaları Android Studio’da Yeni proje düğmesini gösteren ekran görüntüsü. Proje kurulumunda etkinlik türü seçimini gösteren ekran görüntüsü. diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 691a6d9f..29baa3c7 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -437,12 +437,6 @@ Проєктуйте з урахуванням доступності, використовуючи описи вмісту та належний контраст. Зменшуйте непотрібну фонову роботу, щоб покращити час роботи акумулятора. Порада дня - Вікторина - Наступне запитання - Вікторину завершено. Ваш рахунок: %1$d/%2$d - Більше питань немає, стежте за оновленнями. - Щоденне нагадування про вікторину - Поверніться на сьогоднішню вікторину. Інші додатки розробника Знімок екрана з кнопкою Новий проєкт у Android Studio. Знімок екрана вибору типу активності під час налаштування проєкту. diff --git a/app/src/main/res/values-ur-rPK/strings.xml b/app/src/main/res/values-ur-rPK/strings.xml index 788a3c9e..9856af3e 100644 --- a/app/src/main/res/values-ur-rPK/strings.xml +++ b/app/src/main/res/values-ur-rPK/strings.xml @@ -438,12 +438,6 @@ رسائی کے لیے مواد کی وضاحتوں اور مناسب کنٹراسٹ کے ساتھ ڈیزائن کریں۔ بیٹری کی زندگی بہتر بنانے کے لیے غیر ضروری پس منظر کا کام کم کریں۔ آج کی ٹپ - کوئز - اگلا سوال - کوئز مکمل. آپ کا اسکور: %1$d/%2$d - مزید سوالات نہیں، مزید کے لیے آنے والی اپ ڈیٹس دیکھیں۔ - روزانہ کوئز یاددہانی - آج کے کوئز کے لیے دوبارہ آئیں. ڈیولپر کی مزید ایپس اسکرین شاٹ جس میں اینڈروئیڈ اسٹوڈیو میں نیا پروجیکٹ بٹن دکھایا گیا ہے۔ اسکرین شاٹ جس میں پروجیکٹ سیٹ اپ کے دوران سرگرمی کی قسم کا انتخاب دکھایا گیا ہے۔ diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index e3b29446..672348b0 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -437,12 +437,6 @@ Thiết kế có tính đến khả năng tiếp cận với mô tả nội dung và độ tương phản phù hợp. Giảm công việc nền không cần thiết để cải thiện thời lượng pin. Mẹo trong ngày - Câu đố - Câu hỏi tiếp theo - Hoàn thành câu đố. Điểm của bạn: %1$d/%2$d - Hết câu hỏi, hãy xem các bản cập nhật sau để có thêm. - Nhắc nhở làm quiz hằng ngày - Quay lại để làm quiz hôm nay. Các ứng dụng khác của nhà phát triển Ảnh chụp màn hình hiển thị nút Dự án mới trong Android Studio. Ảnh chụp màn hình hiển thị lựa chọn loại hoạt động khi thiết lập dự án. diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 09e9aa9b..d30df05f 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -437,12 +437,6 @@ 使用內容描述和適當的對比來設計無障礙性。 減少不必要的背景作業以改善電池續航。 今日提示 - 小測驗 - 下一題 - 測驗完成!你的分數:%1$d/%2$d - 沒有更多題目,請留意之後的更新。 - 每日測驗提醒 - 回來參加今天的測驗吧! 開發人員的其他應用程式 顯示 Android Studio 中新專案按鈕的螢幕截圖。 顯示在專案設定期間選擇活動類型的螢幕截圖。 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8f6fe066..92390b15 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -476,12 +476,6 @@ Design for accessibility with content descriptions and proper contrast. Reduce unnecessary background work to improve battery life. Tip of the day - Quiz - Next question - Quiz complete. Your score: %1$d/%2$d - No more questions, check further updates for more. - Daily quiz reminder - Come back for today\'s quiz. More apps by the developer Screenshot showing the New project button in Android Studio. Screenshot showing activity type selection during project setup. diff --git a/app/src/test/java/com/d4rk/androidtutorials/java/data/repository/DefaultQuizRepositoryTest.java b/app/src/test/java/com/d4rk/androidtutorials/java/data/repository/DefaultQuizRepositoryTest.java deleted file mode 100644 index 8d258ad8..00000000 --- a/app/src/test/java/com/d4rk/androidtutorials/java/data/repository/DefaultQuizRepositoryTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.d4rk.androidtutorials.java.data.repository; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import com.d4rk.androidtutorials.java.data.model.QuizQuestion; -import com.d4rk.androidtutorials.java.data.source.QuizLocalDataSource; - -import org.junit.Test; - -import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -public class DefaultQuizRepositoryTest { - - @Test - public void loadQuestionsReturnsLocalData() throws InterruptedException { - List expected = List.of( - new QuizQuestion("Q", new String[]{"A", "B"}, 0) - ); - FakeQuizLocalDataSource local = new FakeQuizLocalDataSource(expected); - DefaultQuizRepository repository = new DefaultQuizRepository(local); - CountDownLatch latch = new CountDownLatch(1); - repository.loadQuestions(result -> { - assertEquals(expected, result); - latch.countDown(); - }); - assertTrue(latch.await(1, TimeUnit.SECONDS)); - } - - private record FakeQuizLocalDataSource( - List questions) implements QuizLocalDataSource { - - @Override - public void loadQuestions(QuestionsCallback callback) { - callback.onResult(questions); - } - } -} From f3c5036df5d51c3d5fd11df9625739f2507f95f9 Mon Sep 17 00:00:00 2001 From: Mihai-Cristian Condrea Date: Sat, 13 Sep 2025 00:10:21 +0300 Subject: [PATCH 2/3] Restore AdRequest overload for native ad views --- .../java/ads/managers/NativeAdLoader.java | 14 +++++++++++--- .../java/ads/views/NativeAdBannerView.java | 13 +++++++++++-- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ads/managers/NativeAdLoader.java b/app/src/main/java/com/d4rk/androidtutorials/java/ads/managers/NativeAdLoader.java index 177435a6..d02ba45b 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ads/managers/NativeAdLoader.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ads/managers/NativeAdLoader.java @@ -29,17 +29,25 @@ public class NativeAdLoader { private static final String TAG = "NativeAdLoader"; public static void load(@NonNull Context context, @NonNull ViewGroup container) { - load(context, container, R.layout.ad_home_banner_large, null); + load(context, container, R.layout.ad_home_banner_large, new AdRequest.Builder().build(), null); } public static void load(@NonNull Context context, @NonNull ViewGroup container, @LayoutRes int layoutRes) { - load(context, container, layoutRes, null); + load(context, container, layoutRes, new AdRequest.Builder().build(), null); } public static void load(@NonNull Context context, @NonNull ViewGroup container, @LayoutRes int layoutRes, @androidx.annotation.Nullable AdListener listener) { + load(context, container, layoutRes, new AdRequest.Builder().build(), listener); + } + + public static void load(@NonNull Context context, + @NonNull ViewGroup container, + @LayoutRes int layoutRes, + @NonNull AdRequest adRequest, + @androidx.annotation.Nullable AdListener listener) { AdLoader.Builder builder = new AdLoader.Builder(context, context.getString(R.string.native_ad_banner_unit_id)) .forNativeAd(nativeAd -> { LayoutInflater inflater = LayoutInflater.from(context); @@ -66,7 +74,7 @@ public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { }); AdLoader adLoader = builder.build(); - adLoader.loadAd(new AdRequest.Builder().build()); + adLoader.loadAd(adRequest); } private static void populateNativeAdView(@NonNull NativeAd nativeAd, @NonNull NativeAdView adView) { diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ads/views/NativeAdBannerView.java b/app/src/main/java/com/d4rk/androidtutorials/java/ads/views/NativeAdBannerView.java index 1bb31012..e4e56023 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ads/views/NativeAdBannerView.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ads/views/NativeAdBannerView.java @@ -12,6 +12,7 @@ import com.d4rk.androidtutorials.java.R; import com.d4rk.androidtutorials.java.ads.managers.NativeAdLoader; import com.google.android.gms.ads.AdListener; +import com.google.android.gms.ads.AdRequest; /** * Custom view that acts as a drop-in replacement for AdView and loads @@ -45,11 +46,19 @@ private void init(@NonNull Context context, @Nullable AttributeSet attrs, int de } public void loadAd() { - loadAd(null); + loadAd(new AdRequest.Builder().build(), null); } public void loadAd(@Nullable AdListener listener) { - NativeAdLoader.load(getContext(), this, layoutRes, listener); + loadAd(new AdRequest.Builder().build(), listener); + } + + public void loadAd(@NonNull AdRequest request) { + loadAd(request, null); + } + + public void loadAd(@NonNull AdRequest request, @Nullable AdListener listener) { + NativeAdLoader.load(getContext(), this, layoutRes, request, listener); } public void setNativeAdLayout(@LayoutRes int layoutRes) { From 77cad2ece6eef3a056d5e81b6fb19dec5dd9ea6f Mon Sep 17 00:00:00 2001 From: Mihai-Cristian Condrea Date: Sat, 13 Sep 2025 00:19:15 +0300 Subject: [PATCH 3/3] Persist onboarding defaults and neutral ad placeholder --- .../screens/onboarding/OnboardingViewModel.java | 15 +++++++++++++++ app/src/main/res/layout/activity_main.xml | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/OnboardingViewModel.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/OnboardingViewModel.java index fd17d219..5f8496c5 100644 --- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/OnboardingViewModel.java +++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/onboarding/OnboardingViewModel.java @@ -3,6 +3,7 @@ import android.content.Context; import android.content.SharedPreferences; +import androidx.appcompat.app.AppCompatDelegate; import androidx.lifecycle.ViewModel; import androidx.preference.PreferenceManager; @@ -24,6 +25,20 @@ public class OnboardingViewModel extends ViewModel { public OnboardingViewModel(@ApplicationContext Context context) { this.context = context; this.prefs = PreferenceManager.getDefaultSharedPreferences(context); + + // Ensure defaults are persisted so skipping onboarding still sets them + String themeKey = context.getString(R.string.key_theme); + String[] themeValues = context.getResources().getStringArray(R.array.preference_theme_values); + if (!prefs.contains(themeKey)) { + prefs.edit().putString(themeKey, themeValues[0]).apply(); + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM); + } + + String tabKey = context.getString(R.string.key_default_tab); + String[] tabValues = context.getResources().getStringArray(R.array.preference_default_tab_values); + if (!prefs.contains(tabKey)) { + prefs.edit().putString(tabKey, tabValues[0]).apply(); + } } public void setTheme(String value) { diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a911bc1f..aa805bc8 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -51,7 +51,7 @@ android:id="@+id/ad_placeholder" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@android:color/darker_gray" /> + android:background="?attr/colorSurfaceContainer" />