simplify and unify borderless button theming

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2021-02-19 15:46:59 +01:00
parent 840e3909e0
commit f7627365b2
No known key found for this signature in database
GPG key ID: 6CADC7E3523C308B
16 changed files with 72 additions and 80 deletions

View file

@ -117,6 +117,7 @@ import com.owncloud.android.utils.FileSortOrder;
import com.owncloud.android.utils.MimeTypeUtil;
import com.owncloud.android.utils.PermissionUtil;
import com.owncloud.android.utils.PushUtils;
import com.owncloud.android.utils.theme.ThemeButtonUtils;
import com.owncloud.android.utils.theme.ThemeColorUtils;
import com.owncloud.android.utils.theme.ThemeSnackbarUtils;
import com.owncloud.android.utils.theme.ThemeToolbarUtils;
@ -306,7 +307,8 @@ public class FileDisplayActivity extends FileActivity
.create();
alertDialog.show();
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(ThemeColorUtils.primaryAccentColor(this));
ThemeButtonUtils.themeBorderlessButton(ThemeColorUtils.primaryAccentColor(this),
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE));
} catch (WindowManager.BadTokenException e) {
Log_OC.e(TAG, "Error showing wrong storage info, so skipping it: " + e.getMessage());
}

View file

@ -76,6 +76,7 @@ import com.owncloud.android.utils.DeviceCredentialUtils;
import com.owncloud.android.utils.DisplayUtils;
import com.owncloud.android.utils.EncryptionUtils;
import com.owncloud.android.utils.MimeTypeUtil;
import com.owncloud.android.utils.theme.ThemeButtonUtils;
import com.owncloud.android.utils.theme.ThemeColorUtils;
import com.owncloud.android.utils.theme.ThemeTextUtils;
import com.owncloud.android.utils.theme.ThemeToolbarUtils;
@ -893,7 +894,7 @@ public class SettingsActivity extends ThemedPreferenceActivity
.create();
alertDialog.show();
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(accentColor);
ThemeButtonUtils.themeBorderlessButton(accentColor, alertDialog.getButton(AlertDialog.BUTTON_POSITIVE));
}
}
}

View file

@ -204,7 +204,8 @@ public class SyncedFoldersActivity extends FileActivity implements SyncedFolderA
.setMessage(getString(R.string.power_save_check_dialog_message))
.show();
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(ThemeColorUtils.primaryAccentColor(this));
ThemeButtonUtils.themeBorderlessButton(ThemeColorUtils.primaryAccentColor(this),
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE));
}
/**
@ -818,10 +819,9 @@ public class SyncedFoldersActivity extends FileActivity implements SyncedFolderA
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) {
AlertDialog alertDialog = alertDialogBuilder.show();
int color = ThemeColorUtils.primaryAccentColor(this);
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(color);
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL).setTextColor(color);
ThemeButtonUtils.themeBorderlessButton(ThemeColorUtils.primaryAccentColor(this),
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE),
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL));
}
}
}

View file

@ -29,6 +29,7 @@ import com.nextcloud.client.account.User;
import com.nextcloud.client.di.Injectable;
import com.nextcloud.client.jobs.BackgroundJobManager;
import com.owncloud.android.R;
import com.owncloud.android.utils.theme.ThemeButtonUtils;
import com.owncloud.android.utils.theme.ThemeColorUtils;
import javax.inject.Inject;
@ -64,12 +65,11 @@ public class AccountRemovalConfirmationDialog extends DialogFragment implements
public void onStart() {
super.onStart();
int color = ThemeColorUtils.primaryAccentColor(getActivity());
AlertDialog alertDialog = (AlertDialog) getDialog();
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(color);
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL).setTextColor(color);
ThemeButtonUtils.themeBorderlessButton(ThemeColorUtils.primaryAccentColor(getActivity()),
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE),
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL));
}
@NonNull

View file

@ -114,17 +114,15 @@ public class ChooseRichDocumentsTemplateDialogFragment extends DialogFragment im
public void onStart() {
super.onStart();
int color = ThemeColorUtils.primaryAccentColor(getContext());
AlertDialog alertDialog = (AlertDialog) getDialog();
positiveButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
ThemeButtonUtils.themeBorderlessButton(positiveButton, color);
ThemeButtonUtils.themeBorderlessButton(ThemeColorUtils.primaryAccentColor(getContext()),
positiveButton,
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL));
positiveButton.setOnClickListener(this);
positiveButton.setEnabled(false);
ThemeButtonUtils.themeBorderlessButton(alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL), color);
checkEnablingCreateButton();
}

View file

@ -118,17 +118,15 @@ public class ChooseTemplateDialogFragment extends DialogFragment implements View
public void onStart() {
super.onStart();
int color = ThemeColorUtils.primaryAccentColor(getContext());
AlertDialog alertDialog = (AlertDialog) getDialog();
positiveButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
ThemeButtonUtils.themeBorderlessButton(positiveButton, color);
ThemeButtonUtils.themeBorderlessButton(ThemeColorUtils.primaryAccentColor(getContext()),
positiveButton,
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL));
positiveButton.setOnClickListener(this);
positiveButton.setEnabled(false);
ThemeButtonUtils.themeBorderlessButton(alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL), color);
checkEnablingCreateButton();
}

View file

@ -21,6 +21,7 @@ import android.app.Dialog;
import android.os.Bundle;
import com.owncloud.android.R;
import com.owncloud.android.utils.theme.ThemeButtonUtils;
import com.owncloud.android.utils.theme.ThemeColorUtils;
import androidx.annotation.NonNull;
@ -75,12 +76,12 @@ public class ConfirmationDialogFragment extends DialogFragment {
public void onStart() {
super.onStart();
int color = ThemeColorUtils.primaryAccentColor(getContext());
AlertDialog alertDialog = (AlertDialog) getDialog();
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(color);
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(color);
ThemeButtonUtils.themeBorderlessButton(ThemeColorUtils.primaryAccentColor(getContext()),
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE),
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE),
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL));
}
public void setOnConfirmationListener(ConfirmationDialogFragmentListener listener) {

View file

@ -39,6 +39,7 @@ import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.ui.adapter.LocalFileListAdapter;
import com.owncloud.android.ui.adapter.OCFileListAdapter;
import com.owncloud.android.utils.DisplayUtils;
import com.owncloud.android.utils.theme.ThemeButtonUtils;
import com.owncloud.android.utils.theme.ThemeCheckableUtils;
import com.owncloud.android.utils.theme.ThemeColorUtils;
@ -50,7 +51,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.res.ResourcesCompat;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
@ -115,11 +115,11 @@ public class ConflictsResolveDialog extends DialogFragment {
return;
}
int color = ThemeColorUtils.primaryAccentColor(getContext());
positiveButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
setPositiveButtonStatus(false);
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL).setTextColor(color);
ThemeButtonUtils.themeBorderlessButton(ThemeColorUtils.primaryAccentColor(getContext()),
positiveButton,
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL));
positiveButton.setEnabled(false);
}
@Override
@ -209,7 +209,7 @@ public class ConflictsResolveDialog extends DialogFragment {
getContext());
View.OnClickListener checkBoxClickListener = v -> {
setPositiveButtonStatus(binding.newCheckbox.isChecked() || binding.existingCheckbox.isChecked());
positiveButton.setEnabled(binding.newCheckbox.isChecked() || binding.existingCheckbox.isChecked());
};
binding.newCheckbox.setOnClickListener(checkBoxClickListener);
@ -217,27 +217,16 @@ public class ConflictsResolveDialog extends DialogFragment {
binding.newFileContainer.setOnClickListener(v -> {
binding.newCheckbox.setChecked(!binding.newCheckbox.isChecked());
setPositiveButtonStatus(binding.newCheckbox.isChecked() || binding.existingCheckbox.isChecked());
positiveButton.setEnabled(binding.newCheckbox.isChecked() || binding.existingCheckbox.isChecked());
});
binding.existingFileContainer.setOnClickListener(v -> {
binding.existingCheckbox.setChecked(!binding.existingCheckbox.isChecked());
setPositiveButtonStatus(binding.newCheckbox.isChecked() || binding.existingCheckbox.isChecked());
positiveButton.setEnabled(binding.newCheckbox.isChecked() || binding.existingCheckbox.isChecked());
});
return builder.create();
}
private void setPositiveButtonStatus(boolean enabled) {
if (enabled) {
positiveButton.setTextColor(ThemeColorUtils.primaryAccentColor(requireContext()));
} else {
positiveButton.setTextColor(ResourcesCompat.getColor(requireContext().getResources(),
R.color.grey_200,
null));
}
positiveButton.setEnabled(enabled);
}
public void showDialog(AppCompatActivity activity) {
Fragment prev = activity.getSupportFragmentManager().findFragmentByTag("dialog");
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();

View file

@ -36,6 +36,7 @@ import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.resources.files.FileUtils;
import com.owncloud.android.ui.activity.ComponentsGetter;
import com.owncloud.android.utils.DisplayUtils;
import com.owncloud.android.utils.theme.ThemeButtonUtils;
import com.owncloud.android.utils.theme.ThemeColorUtils;
import com.owncloud.android.utils.theme.ThemeTextInputUtils;
@ -76,12 +77,11 @@ public class CreateFolderDialogFragment
public void onStart() {
super.onStart();
int color = ThemeColorUtils.primaryAccentColor(getContext());
AlertDialog alertDialog = (AlertDialog) getDialog();
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(color);
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL).setTextColor(color);
ThemeButtonUtils.themeBorderlessButton(ThemeColorUtils.primaryAccentColor(getContext()),
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE),
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL));
}
@NonNull

View file

@ -32,6 +32,7 @@ import com.owncloud.android.R;
import com.owncloud.android.ui.adapter.StoragePathAdapter;
import com.owncloud.android.ui.adapter.StoragePathItem;
import com.owncloud.android.utils.FileStorageUtils;
import com.owncloud.android.utils.theme.ThemeButtonUtils;
import com.owncloud.android.utils.theme.ThemeColorUtils;
import java.io.File;
@ -79,11 +80,10 @@ public class LocalStoragePathPickerDialogFragment extends DialogFragment
public void onStart() {
super.onStart();
int color = ThemeColorUtils.primaryAccentColor(getContext());
AlertDialog alertDialog = (AlertDialog) getDialog();
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(color);
ThemeButtonUtils.themeBorderlessButton(ThemeColorUtils.primaryAccentColor(getContext()),
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE));
}
@Override

View file

@ -34,6 +34,7 @@ import com.owncloud.android.databinding.NoteDialogBinding;
import com.owncloud.android.lib.resources.shares.OCShare;
import com.owncloud.android.ui.activity.ComponentsGetter;
import com.owncloud.android.utils.DisplayUtils;
import com.owncloud.android.utils.theme.ThemeButtonUtils;
import com.owncloud.android.utils.theme.ThemeColorUtils;
import com.owncloud.android.utils.theme.ThemeTextInputUtils;
@ -78,12 +79,11 @@ public class NoteDialogFragment extends DialogFragment implements DialogInterfac
public void onStart() {
super.onStart();
int color = ThemeColorUtils.primaryAccentColor(getContext());
AlertDialog alertDialog = (AlertDialog) getDialog();
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(color);
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL).setTextColor(color);
ThemeButtonUtils.themeBorderlessButton(ThemeColorUtils.primaryAccentColor(getContext()),
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE),
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL));
}
@NonNull

View file

@ -46,6 +46,7 @@ import com.owncloud.android.lib.resources.users.SendCSROperation;
import com.owncloud.android.lib.resources.users.StorePrivateKeyOperation;
import com.owncloud.android.utils.CsrHelper;
import com.owncloud.android.utils.EncryptionUtils;
import com.owncloud.android.utils.theme.ThemeButtonUtils;
import com.owncloud.android.utils.theme.ThemeColorUtils;
import java.io.IOException;
@ -108,15 +109,13 @@ public class SetupEncryptionDialogFragment extends DialogFragment {
public void onStart() {
super.onStart();
int color = ThemeColorUtils.primaryAccentColor(getContext());
AlertDialog alertDialog = (AlertDialog) getDialog();
positiveButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
positiveButton.setTextColor(color);
neutralButton = alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL);
neutralButton.setTextColor(color);
ThemeButtonUtils.themeBorderlessButton(ThemeColorUtils.primaryAccentColor(getContext()),
positiveButton,
neutralButton);
task = new DownloadKeysAsyncTask();
task.execute();
@ -402,7 +401,6 @@ public class SetupEncryptionDialogFragment extends DialogFragment {
@VisibleForTesting
public void showMnemonicInfo() {
int color = ThemeColorUtils.primaryAccentColor(getContext());
requireDialog().setTitle(R.string.end_to_end_encryption_passphrase_title);
textView.setText(R.string.end_to_end_encryption_keywords_description);
@ -414,8 +412,9 @@ public class SetupEncryptionDialogFragment extends DialogFragment {
positiveButton.setVisibility(View.VISIBLE);
neutralButton.setVisibility(View.VISIBLE);
ThemeUtils.themeBorderlessButton(positiveButton, color);
ThemeUtils.themeBorderlessButton(neutralButton, color);
ThemeButtonUtils.themeBorderlessButton(ThemeColorUtils.primaryAccentColor(getContext()),
positiveButton,
neutralButton);
keyResult = KEY_GENERATE;
}

View file

@ -35,6 +35,7 @@ import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.resources.shares.OCShare;
import com.owncloud.android.ui.activity.FileActivity;
import com.owncloud.android.utils.DisplayUtils;
import com.owncloud.android.utils.theme.ThemeButtonUtils;
import com.owncloud.android.utils.theme.ThemeColorUtils;
import com.owncloud.android.utils.theme.ThemeTextInputUtils;
@ -67,10 +68,11 @@ public class SharePasswordDialogFragment extends DialogFragment implements Dialo
AlertDialog alertDialog = (AlertDialog) getDialog();
if (alertDialog != null) {
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(ThemeColorUtils.primaryAccentColor(getContext()));
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(ThemeColorUtils.primaryAccentColor(getContext()));
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL)
.setTextColor(getResources().getColor(R.color.highlight_textColor_Warning));
ThemeButtonUtils.themeBorderlessButton(ThemeColorUtils.primaryAccentColor(getContext()),
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE),
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE));
ThemeButtonUtils.themeBorderlessButton(getResources().getColor(R.color.highlight_textColor_Warning),
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL));
}
}

View file

@ -30,6 +30,7 @@ import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment.ConfirmationDialogFragmentListener;
import com.owncloud.android.ui.fragment.OCFileListFragment;
import com.owncloud.android.utils.DisplayUtils;
import com.owncloud.android.utils.theme.ThemeButtonUtils;
import com.owncloud.android.utils.theme.ThemeColorUtils;
import androidx.annotation.NonNull;
@ -80,13 +81,13 @@ public class SyncFileNotEnoughSpaceDialogFragment extends ConfirmationDialogFrag
public void onStart() {
super.onStart();
int color = ThemeColorUtils.primaryAccentColor(getActivity());
AlertDialog alertDialog = (AlertDialog) getDialog();
if (alertDialog != null) {
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(color);
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL).setTextColor(color);
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(color);
ThemeButtonUtils.themeBorderlessButton(ThemeColorUtils.primaryAccentColor(getActivity()),
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE),
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL),
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE));
}
}

View file

@ -206,10 +206,9 @@ public class SyncedFolderPreferencesDialogFragment extends DialogFragment {
mNameCollisionPolicySummary = view.findViewById(R.id.setting_instant_name_collision_policy_summary);
mCancel = view.findViewById(R.id.cancel);
ThemeButtonUtils.themeBorderlessButton(mCancel, accentColor);
mSave = view.findViewById(R.id.save);
ThemeButtonUtils.themeBorderlessButton(mSave, accentColor);
ThemeButtonUtils.themeBorderlessButton(accentColor, mCancel, mSave);
// Set values
setEnabled(mSyncedFolder.isEnabled());

View file

@ -64,14 +64,13 @@ public final class ThemeButtonUtils {
}
}
public static void themeBorderlessButton(Button button, int primaryColor) {
if (button == null) {
public static void themeBorderlessButton(int primaryColor, Button... buttons) {
if (buttons == null || buttons.length < 1) {
return;
}
Context context = button.getContext();
Context context = buttons[0].getContext();
int disabledColor = ContextCompat.getColor(context, R.color.disabled_text);
button.setTextColor(new ColorStateList(
ColorStateList colorStateList = new ColorStateList(
new int[][]{
new int[]{android.R.attr.state_enabled}, // enabled
new int[]{-android.R.attr.state_enabled}, // disabled
@ -80,6 +79,9 @@ public final class ThemeButtonUtils {
primaryColor,
disabledColor
}
));
);
for (Button button: buttons) {
button.setTextColor(colorStateList);
}
}
}