/
Libra
/
my-application
Обзор
Документация
Войти
/
Libra
/
my-application
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/src/main/java/com/libraprogramming/myapplication/presentation/activity/ApplicationSettingsActivity.java
247 строк
10 KB
Толмачёв Владимир Викторович
Architecture refactoring 2
20 июл 2026, 17:22
20 июл 2026, 17:22
87aa6f2
Код
Авторство
О чём код?
package com.libraprogramming.myapplication.presentation.activity; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.widget.Toast; import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; import com.libraprogramming.domain.interactor.*; import com.libraprogramming.domain.interactor.observer.DefaultSingleObserver; import com.libraprogramming.myapplication.MyApplication; import com.libraprogramming.myapplication.R; import com.libraprogramming.myapplication.presentation.PreferenceKeys; import com.libraprogramming.myapplication.presentation.internal.di.HasComponent; import com.libraprogramming.myapplication.presentation.internal.di.component.CardComponent; import com.libraprogramming.myapplication.presentation.internal.di.component.DaggerCardComponent; import org.jetbrains.annotations.NotNull; import javax.inject.Inject; import java.util.Objects; public class ApplicationSettingsActivity extends AppCompatActivity implements HasComponent<CardComponent> { private static final String TAG = "ApplicationSettingsActivity"; private CardComponent component; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); component = DaggerCardComponent.builder() .myApplicationComponent(((MyApplication) getApplication()).getApplicationComponent()) .build(); setContentView(R.layout.activity_settings); if (savedInstanceState == null) { getSupportFragmentManager() .beginTransaction() .replace(R.id.preferences_container, new SettingsFragment(component)) .commit(); } ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } } /*@Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case android.R.id.home:{ NavUtils.navigateUpFromSameTask(this); return true; } default:{ return super.onOptionsItemSelected(item); } } }*/ @Override public CardComponent getComponent() { return component; } public static class SettingsFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener { private final CardComponent component; private ActivityResultLauncher<Uri> exportCardsLauncher; private ActivityResultLauncher<String[]> importCardsLauncher; private Preference clearAllCardsPreference; private Preference exportAllCardsPreference; private Preference importAllCardsPreference; private Preference currentThemePreference; private Toast clearAllToast; @Inject DeleteAllLoyaltyCardsUseCase deleteAllLoyaltyCardsUseCase; @Inject GetLoyaltyCardsCountUseCase getLoyaltyCardsCountUseCase; @Inject ExportAllCardsUseCase exportAllCardsUseCase; @Inject ImportAllCardsUseCase importAllCardsUseCase; public SettingsFragment(CardComponent component) { this.component = component; } @Override public void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); component.inject(this); exportCardsLauncher = registerForActivityResult( new ActivityResultContracts.OpenDocumentTree(), new RunCompletableUseCaseCallback<>(exportAllCardsUseCase) ); importCardsLauncher = registerForActivityResult( new ActivityResultContracts.OpenDocument(), new RunCompletableUseCaseCallback<>(importAllCardsUseCase) ); clearAllToast = Toast.makeText( requireContext(), R.string.lorem_ipsum_short, Toast.LENGTH_SHORT ); currentThemePreference.setOnPreferenceChangeListener(this); exportAllCardsPreference.setOnPreferenceChangeListener(this); exportAllCardsPreference.setOnPreferenceClickListener(this); importAllCardsPreference.setOnPreferenceChangeListener(this); importAllCardsPreference.setOnPreferenceClickListener(this); clearAllCardsPreference.setOnPreferenceClickListener(this); updateExportAllCardsPreferenceSummary(); } @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.root_preferences, rootKey); currentThemePreference = Objects.requireNonNull(findPreference(PreferenceKeys.CURRENT_THEME.key())); clearAllCardsPreference = Objects.requireNonNull(findPreference("clear_all_cards")); exportAllCardsPreference = Objects.requireNonNull(findPreference("export_all_cards")); importAllCardsPreference = Objects.requireNonNull(findPreference("import_all_cards")); } @Override public boolean onPreferenceChange(@NonNull @NotNull Preference preference, Object newValue) { if (Objects.equals(preference, currentThemePreference)) { final String summary = String.format("Theme changed: %s", newValue); preference.setSummary(summary); Log.d(TAG, summary); return true; } else if (Objects.equals(preference, clearAllCardsPreference)) { return true; } else if (Objects.equals(preference, exportAllCardsPreference)) { updateExportAllCardsPreferenceSummary(); } else if (Objects.equals(preference, importAllCardsPreference)) { updateImportAllCardsPreferenceSummary(); } return false; } @Override public boolean onPreferenceClick(@NonNull @NotNull Preference preference) { if (Objects.equals(preference, clearAllCardsPreference)) { new AlertDialog.Builder(requireContext()) .setMessage(R.string.preferences_action_clear_all_confirm_dialog_message) // .setIcon(R.drawable.ic_warning) .setNegativeButton(android.R.string.cancel, null) .setPositiveButton(android.R.string.ok, (dialog, id) -> deleteAllLoyaltyCardsUseCase.execute(null, ignore -> { updateExportAllCardsPreferenceSummary(); clearAllToast.show(); }) ) .show(); return true; } else if (Objects.equals(preference, exportAllCardsPreference)) { final Uri exportTargetUri = Uri.parse(Environment.getExternalStorageDirectory().getPath()); exportCardsLauncher.launch(exportTargetUri); return true; } else if (Objects.equals(preference, importAllCardsPreference)) { // final Uri importTargetUri = Uri.parse(Environment.getExternalStorageDirectory().getPath()); final var mimeTypes= new String[]{ "text/xml" }; importCardsLauncher.launch(mimeTypes); } return false; } private void updateExportAllCardsPreferenceSummary() { getLoyaltyCardsCountUseCase.execute(null, new DefaultSingleObserver<>() { @Override public void onSuccess(@io.reactivex.rxjava3.annotations.NonNull Integer count) { final var resourceId = count > 0 ? R.string.preferences_action_clear_all_data_summary_count : R.string.preferences_action_clear_all_data_summary_empty; final var summary = getResources().getString(resourceId, count); clearAllCardsPreference.setSummary(summary); } }); } private void updateImportAllCardsPreferenceSummary() { ; } /*public static class ExportCardsResultCallback implements ActivityResultCallback<Uri> { private final ExportAllCardsUseCase useCase; public ExportCardsResultCallback(ExportAllCardsUseCase useCase) { this.useCase = useCase; } @Override public void onActivityResult(Uri result) { useCase.execute( result, () -> Log.d(TAG, "Done") ); } }*/ public static class RunCompletableUseCaseCallback<T> implements ActivityResultCallback<T> { private final CompletableUseCase<T> useCase; public RunCompletableUseCaseCallback(CompletableUseCase<T> useCase) { this.useCase = useCase; } @Override public void onActivityResult(T result) { useCase.execute( result, () -> Log.d(TAG, "Done") ); } } } }