diff options
Diffstat (limited to 'app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java')
-rw-r--r-- | app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java | 65 |
1 files changed, 26 insertions, 39 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java index 8d0c253f..9492e43a 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java @@ -1,14 +1,13 @@ package it.niedermann.owncloud.notes.manageaccounts; +import static it.niedermann.owncloud.notes.branding.BrandingUtil.applyBrandToEditTextInputLayout; +import static it.niedermann.owncloud.notes.branding.BrandingUtil.readBrandMainColorLiveData; import static it.niedermann.owncloud.notes.shared.util.ApiVersionUtil.getPreferredApiVersion; import android.accounts.NetworkErrorException; import android.os.Bundle; import android.util.TypedValue; -import android.view.ViewGroup; -import android.widget.EditText; -import android.widget.FrameLayout; -import android.widget.ProgressBar; +import android.view.View; import android.widget.Toast; import androidx.annotation.AttrRes; @@ -18,16 +17,19 @@ import androidx.annotation.Px; import androidx.annotation.StringRes; import androidx.lifecycle.ViewModelProvider; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.nextcloud.android.sso.AccountImporter; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; import java.util.function.Function; import it.niedermann.owncloud.notes.LockedActivity; import it.niedermann.owncloud.notes.R; -import it.niedermann.owncloud.notes.branding.BrandedAlertDialogBuilder; -import it.niedermann.owncloud.notes.branding.BrandedDeleteAlertDialogBuilder; +import it.niedermann.owncloud.notes.branding.DeleteAlertDialogBuilder; import it.niedermann.owncloud.notes.databinding.ActivityManageAccountsBinding; +import it.niedermann.owncloud.notes.databinding.DialogEditSettingBinding; import it.niedermann.owncloud.notes.exception.ExceptionDialogFragment; import it.niedermann.owncloud.notes.persistence.NotesRepository; import it.niedermann.owncloud.notes.persistence.entity.Account; @@ -42,6 +44,7 @@ public class ManageAccountsActivity extends LockedActivity implements IManageAcc private ActivityManageAccountsBinding binding; private ManageAccountsViewModel viewModel; private ManageAccountAdapter adapter; + private final Executor executor = Executors.newSingleThreadExecutor(); @Override public void onCreate(@Nullable Bundle savedInstanceState) { @@ -88,7 +91,7 @@ public class ManageAccountsActivity extends LockedActivity implements IManageAcc public void onSuccess(Long unsynchronizedChangesCount) { runOnUiThread(() -> { if (unsynchronizedChangesCount > 0) { - new BrandedDeleteAlertDialogBuilder(ManageAccountsActivity.this) + new DeleteAlertDialogBuilder(ManageAccountsActivity.this) .setTitle(getString(R.string.remove_account, accountToDelete.getUserName())) .setMessage(getResources().getQuantityString(R.plurals.remove_account_message, (int) unsynchronizedChangesCount.longValue(), accountToDelete.getAccountName(), unsynchronizedChangesCount)) .setNeutralButton(android.R.string.cancel, null) @@ -129,16 +132,22 @@ public class ManageAccountsActivity extends LockedActivity implements IManageAcc private void changeAccountSetting(@NonNull Account localAccount, @StringRes int title, @StringRes int message, @StringRes int successMessage, @NonNull Function<NotesSettings, String> propertyExtractor, @NonNull Function<String, NotesSettings> settingsFactory) { final var repository = NotesRepository.getInstance(getApplicationContext()); - final var editText = new EditText(this); - final var wrapper = createDialogViewWrapper(); - final var dialog = new BrandedAlertDialogBuilder(this) + final var binding = DialogEditSettingBinding.inflate(getLayoutInflater()); + final var mainColor$ = readBrandMainColorLiveData(this); + mainColor$.observe(this, color -> { + mainColor$.removeObservers(this); + applyBrandToEditTextInputLayout(color, binding.inputWrapper); + binding.progress.setIndicatorColor(color); + }); + + final var dialog = new MaterialAlertDialogBuilder(this) .setTitle(title) .setMessage(message) - .setView(wrapper) + .setView(binding.getRoot()) .setNeutralButton(android.R.string.cancel, null) .setPositiveButton(R.string.action_edit_save, (v, d) -> { - final var property = editText.getText().toString(); - new Thread(() -> { + final var property = binding.property.getText().toString(); + executor.execute(() -> { try { final var putSettingsCall = repository.putServerSettings(AccountImporter.getSingleSignOnAccount(this, localAccount.getAccountName()), settingsFactory.apply(property), getPreferredApiVersion(localAccount.getApiVersion())); putSettingsCall.enqueue(new Callback<>() { @@ -160,7 +169,7 @@ public class ManageAccountsActivity extends LockedActivity implements IManageAcc } catch (NextcloudFilesAppAccountNotFoundException e) { ExceptionDialogFragment.newInstance(e).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()); } - }).start(); + }); }) .show(); try { @@ -171,9 +180,9 @@ public class ManageAccountsActivity extends LockedActivity implements IManageAcc runOnUiThread(() -> { final var body = response.body(); if (response.isSuccessful() && body != null) { - wrapper.removeAllViews(); - editText.setText(propertyExtractor.apply(body)); - wrapper.addView(editText); + binding.getRoot().removeView(binding.progress); + binding.property.setText(propertyExtractor.apply(body)); + binding.inputWrapper.setVisibility(View.VISIBLE); } else { dialog.dismiss(); ExceptionDialogFragment.newInstance(new NetworkErrorException(getString(R.string.http_status_code, response.code()))).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()); @@ -195,28 +204,6 @@ public class ManageAccountsActivity extends LockedActivity implements IManageAcc } } - @NonNull - private ViewGroup createDialogViewWrapper() { - final var progressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal); - progressBar.setIndeterminate(true); - final var wrapper = new FrameLayout(this); - final int paddingVertical = getResources().getDimensionPixelSize(R.dimen.spacer_1x); - final int paddingHorizontal = getDimensionFromAttribute(android.R.attr.dialogPreferredPadding); - wrapper.setPadding(paddingHorizontal, paddingVertical, paddingHorizontal, paddingVertical); - wrapper.addView(progressBar); - return wrapper; - } - - @Px - private int getDimensionFromAttribute(@SuppressWarnings("SameParameterValue") @AttrRes int attr) { - final var typedValue = new TypedValue(); - if (getTheme().resolveAttribute(attr, typedValue, true)) - return TypedValue.complexToDimensionPixelSize(typedValue.data, getResources().getDisplayMetrics()); - else { - return 0; - } - } - @Override public void applyBrand(int mainColor, int textColor) { applyBrandToPrimaryToolbar(binding.appBar, binding.toolbar); |