From 3ef86d96c298e191cf6869de26f09331a689da8d Mon Sep 17 00:00:00 2001 From: Stefan Niedermann Date: Fri, 24 Mar 2023 14:00:20 +0100 Subject: feat: Align theming with Nextcloud Files app Signed-off-by: Stefan Niedermann --- .../deck/ui/settings/PreferencesViewModel.java | 4 --- .../deck/ui/settings/SettingsActivity.java | 15 ++++---- .../deck/ui/settings/SettingsFragment.java | 41 ++++++++++++++++------ 3 files changed, 39 insertions(+), 21 deletions(-) (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/ui/settings') diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/PreferencesViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/PreferencesViewModel.java index c1e6857f8..9ab461523 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/PreferencesViewModel.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/PreferencesViewModel.java @@ -25,10 +25,6 @@ public class PreferencesViewModel extends BaseViewModel { return baseRepository.getCurrentAccountId$(); } - public LiveData getAccountColor(long accountId) { - return baseRepository.getAccountColor(accountId); - } - public void setAppTheme(int setting) { preferencesRepository.setAppTheme(setting); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsActivity.java index 0ca0739fe..86f43b482 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsActivity.java @@ -32,12 +32,15 @@ public class SettingsActivity extends AppCompatActivity implements Themed { binding = ActivitySettingsBinding.inflate(getLayoutInflater()); - applyTheme(account.getColor()); - setSupportActionBar(binding.toolbar); setContentView(binding.getRoot()); + setSupportActionBar(binding.toolbar); + applyTheme(account.getColor()); + setResult(RESULT_CANCELED); - // TODO We should only set this if a preference has changed that influences the MainActivity - setResult(RESULT_OK); + getSupportFragmentManager() + .beginTransaction() + .add(binding.settingsFragment.getId(), SettingsFragment.newInstance(account)) + .commit(); } @Override @@ -56,8 +59,8 @@ public class SettingsActivity extends AppCompatActivity implements Themed { public void applyTheme(int color) { final var utils = ThemeUtils.of(color, this); -// utils.platform.themeStatusBar(this); -// utils.material.themeToolbar(binding.toolbar); + utils.platform.themeStatusBar(this); + utils.material.themeToolbar(binding.toolbar); } @NonNull diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsFragment.java index 44cfe5410..229c61afc 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsFragment.java @@ -1,25 +1,29 @@ package it.niedermann.nextcloud.deck.ui.settings; +import android.content.Context; import android.os.Bundle; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.app.ActivityCompat; +import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; import java.util.stream.Stream; -import it.niedermann.android.reactivelivedata.ReactiveLiveData; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.R; +import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.remote.SyncWorker; import it.niedermann.nextcloud.deck.ui.theme.ThemedSwitchPreference; public class SettingsFragment extends PreferenceFragmentCompat { + private static final String KEY_ACCOUNT = "account"; + private Account account; private PreferencesViewModel preferencesViewModel; private ThemedSwitchPreference wifiOnlyPref; private ThemedSwitchPreference compactPref; @@ -28,6 +32,18 @@ public class SettingsFragment extends PreferenceFragmentCompat { private ThemedSwitchPreference debuggingPref; private ThemedSwitchPreference eTagPref; + @Override + public void onAttach(@NonNull Context context) { + super.onAttach(context); + + final var args = getArguments(); + if (args == null || !args.containsKey(KEY_ACCOUNT)) { + throw new IllegalArgumentException(KEY_ACCOUNT + " must be provided"); + } + + account = (Account) args.getSerializable(KEY_ACCOUNT); + } + @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.settings, rootKey); @@ -77,15 +93,18 @@ public class SettingsFragment extends PreferenceFragmentCompat { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - new ReactiveLiveData<>(preferencesViewModel.getCurrentAccountId$()) - .flatMap(preferencesViewModel::getAccountColor) - .observe(getViewLifecycleOwner(), color -> Stream.of( - wifiOnlyPref, - compactPref, - coverImagesPref, - compressImageAttachmentsPref, - debuggingPref, - eTagPref) - .forEach(pref -> pref.applyTheme(color))); + Stream.of(wifiOnlyPref, compactPref, coverImagesPref, compressImageAttachmentsPref, debuggingPref, eTagPref) + .forEach(pref -> pref.applyTheme(account.getColor())); + } + + @NonNull + public static Fragment newInstance(@NonNull Account account) { + final var fragment = new SettingsFragment(); + + final var args = new Bundle(); + args.putSerializable(KEY_ACCOUNT, account); + fragment.setArguments(args); + + return fragment; } } -- cgit v1.2.3