Skip to content

Commit 1f1cdc0

Browse files
authored
Merge pull request #1680 from nextcloud/theme-alignment
feat(theming): Use nextcloud-common library for theming UI elements (#1648)
2 parents 466d053 + 2558acd commit 1f1cdc0

48 files changed

Lines changed: 486 additions & 532 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ dependencies {
7676
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.2'
7777

7878
// Nextcloud SSO
79+
implementation 'com.github.nextcloud.android-common:ui:0.6.0'
7980
implementation 'com.github.nextcloud:Android-SingleSignOn:0.6.1'
8081
implementation 'com.github.stefan-niedermann:android-commons:0.2.9'
8182
implementation 'com.github.stefan-niedermann.nextcloud-commons:sso-glide:1.6.4'

app/src/main/java/it/niedermann/owncloud/notes/FormattingHelpActivity.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import it.niedermann.owncloud.notes.R;
1414
import it.niedermann.owncloud.notes.branding.BrandedActivity;
15+
import it.niedermann.owncloud.notes.branding.BrandingUtil;
1516
import it.niedermann.owncloud.notes.databinding.ActivityFormattingHelpBinding;
1617

1718
import static it.niedermann.owncloud.notes.shared.util.NoteUtil.getFontSizeFromPreferences;
@@ -222,7 +223,8 @@ private String buildFormattingHelp() {
222223
}
223224

224225
@Override
225-
public void applyBrand(int mainColor, int textColor) {
226-
applyBrandToPrimaryToolbar(binding.appBar, binding.toolbar);
226+
public void applyBrand(int color) {
227+
final var util = BrandingUtil.of(color, this);
228+
util.notes.applyBrandToPrimaryToolbar(binding.appBar, binding.toolbar, colorAccent);
227229
}
228230
}

app/src/main/java/it/niedermann/owncloud/notes/NotesApplication.java

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
package it.niedermann.owncloud.notes;
22

3+
import static androidx.preference.PreferenceManager.getDefaultSharedPreferences;
4+
35
import android.app.Application;
46
import android.content.Context;
5-
import android.content.SharedPreferences;
6-
import android.content.res.Configuration;
77
import android.util.Log;
88

99
import androidx.appcompat.app.AppCompatDelegate;
1010
import androidx.preference.PreferenceManager;
1111

1212
import it.niedermann.owncloud.notes.preferences.DarkModeSetting;
1313

14-
import static androidx.preference.PreferenceManager.getDefaultSharedPreferences;
15-
1614
public class NotesApplication extends Application {
1715
private static final String TAG = NotesApplication.class.getSimpleName();
1816

@@ -57,19 +55,6 @@ public static DarkModeSetting getAppTheme(Context context) {
5755
return DarkModeSetting.valueOf(mode);
5856
}
5957

60-
public static boolean isDarkThemeActive(Context context, DarkModeSetting setting) {
61-
if (setting == DarkModeSetting.SYSTEM_DEFAULT) {
62-
return isDarkThemeActive(context);
63-
} else {
64-
return setting == DarkModeSetting.DARK;
65-
}
66-
}
67-
68-
public static boolean isDarkThemeActive(Context context) {
69-
final int uiMode = context.getResources().getConfiguration().uiMode;
70-
return (uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
71-
}
72-
7358
public static void setLockedPreference(boolean lockedPreference) {
7459
Log.i(TAG, "New locked preference: " + lockedPreference);
7560
NotesApplication.lockedPreference = lockedPreference;

app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ protected void onCreate(Bundle savedInstanceState) {
5050
}
5151

5252
@Override
53-
public void applyBrand(int mainColor, int textColor) {
54-
applyBrandToPrimaryToolbar(binding.appBar, binding.toolbar);
55-
@ColorInt int finalMainColor = BrandingUtil.getSecondaryForegroundColorDependingOnTheme(this, mainColor);
56-
binding.tabs.setSelectedTabIndicatorColor(finalMainColor);
53+
public void applyBrand(int color) {
54+
final var util = BrandingUtil.of(color, this);
55+
util.material.themeTabLayout(binding.tabs);
56+
util.notes.applyBrandToPrimaryToolbar(binding.appBar, binding.toolbar, colorAccent);
5757
}
5858

5959
private static class TabsStateAdapter extends FragmentStateAdapter {

app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentLicenseTab.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,8 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
3434
}
3535

3636
@Override
37-
public void applyBrand(int mainColor, int textColor) {
38-
@ColorInt final int finalMainColor = BrandingUtil.getSecondaryForegroundColorDependingOnTheme(requireContext(), mainColor);
39-
DrawableCompat.setTintList(binding.aboutAppLicenseButton.getBackground(), ColorStateList.valueOf(finalMainColor));
40-
binding.aboutAppLicenseButton.setTextColor(ColorUtil.INSTANCE.getForegroundColorForBackgroundColor(finalMainColor));
37+
public void applyBrand(int color) {
38+
final var util = BrandingUtil.of(color, requireContext());
39+
util.material.colorMaterialButtonPrimaryFilled(binding.aboutAppLicenseButton);
4140
}
4241
}

app/src/main/java/it/niedermann/owncloud/notes/accountpicker/AccountPickerDialogFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public static DialogFragment newInstance(@NonNull ArrayList<Account> targetAccou
109109
}
110110

111111
@Override
112-
public void applyBrand(int mainColor, int textColor) {
112+
public void applyBrand(int color) {
113113
// Nothing to do...
114114
}
115115
}

app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherDialog.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package it.niedermann.owncloud.notes.accountswitcher;
22

3-
import static it.niedermann.owncloud.notes.branding.BrandingUtil.applyBrandToLayerDrawable;
4-
53
import android.app.Dialog;
64
import android.content.Context;
75
import android.content.Intent;
@@ -18,6 +16,7 @@
1816

1917
import it.niedermann.owncloud.notes.R;
2018
import it.niedermann.owncloud.notes.branding.BrandedDialogFragment;
19+
import it.niedermann.owncloud.notes.branding.BrandingUtil;
2120
import it.niedermann.owncloud.notes.databinding.DialogAccountSwitcherBinding;
2221
import it.niedermann.owncloud.notes.manageaccounts.ManageAccountsActivity;
2322
import it.niedermann.owncloud.notes.persistence.NotesRepository;
@@ -117,7 +116,8 @@ public static DialogFragment newInstance(long currentAccountId) {
117116
}
118117

119118
@Override
120-
public void applyBrand(int mainColor, int textColor) {
121-
applyBrandToLayerDrawable((LayerDrawable) binding.check.getDrawable(), R.id.area, mainColor);
119+
public void applyBrand(int color) {
120+
final var util = BrandingUtil.of(color, requireContext());
121+
util.notes.colorLayerDrawable((LayerDrawable) binding.check.getDrawable(), R.id.area, color);
122122
}
123123
}

app/src/main/java/it/niedermann/owncloud/notes/branding/Branded.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55

66
public interface Branded {
77
@UiThread
8-
void applyBrand(@ColorInt int mainColor, @ColorInt int textColor);
8+
void applyBrand(@ColorInt int color);
99
}
Lines changed: 7 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,20 @@
11
package it.niedermann.owncloud.notes.branding;
22

3-
import android.content.res.ColorStateList;
4-
import android.graphics.PorterDuff;
5-
import android.graphics.drawable.Drawable;
3+
import static it.niedermann.owncloud.notes.branding.BrandingUtil.readBrandMainColorLiveData;
4+
65
import android.util.TypedValue;
76
import android.view.Menu;
87

98
import androidx.annotation.ColorInt;
10-
import androidx.annotation.NonNull;
119
import androidx.appcompat.app.AppCompatActivity;
12-
import androidx.appcompat.widget.Toolbar;
13-
import androidx.core.content.ContextCompat;
14-
15-
import com.google.android.material.appbar.AppBarLayout;
16-
import com.google.android.material.floatingactionbutton.FloatingActionButton;
1710

1811
import it.niedermann.owncloud.notes.R;
1912

20-
import static it.niedermann.owncloud.notes.branding.BrandingUtil.readBrandColors;
21-
import static it.niedermann.owncloud.notes.branding.BrandingUtil.tintMenuIcon;
22-
2313
public abstract class BrandedActivity extends AppCompatActivity implements Branded {
2414

2515
@ColorInt
2616
protected int colorAccent;
2717

28-
public static void applyBrandToFAB(@ColorInt int mainColor, @ColorInt int textColor, @NonNull FloatingActionButton fab) {
29-
fab.setSupportBackgroundTintList(ColorStateList.valueOf(mainColor));
30-
fab.setColorFilter(textColor);
31-
}
32-
3318
@Override
3419
protected void onStart() {
3520
super.onStart();
@@ -38,31 +23,17 @@ protected void onStart() {
3823
getTheme().resolveAttribute(R.attr.colorAccent, typedValue, true);
3924
colorAccent = typedValue.data;
4025

41-
readBrandColors(this).observe(this, (pair) -> applyBrand(pair.first, pair.second));
26+
readBrandMainColorLiveData(this).observe(this, this::applyBrand);
4227
}
4328

4429
@Override
4530
public boolean onCreateOptionsMenu(Menu menu) {
46-
for (int i = 0; i < menu.size(); i++) {
47-
tintMenuIcon(menu.getItem(i), colorAccent);
48-
}
49-
return super.onCreateOptionsMenu(menu);
50-
}
51-
52-
public void applyBrandToPrimaryToolbar(@NonNull AppBarLayout appBarLayout, @NonNull Toolbar toolbar) {
53-
// FIXME Workaround for https://github.com/nextcloud/notes-android/issues/889
54-
appBarLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.primary));
31+
final var utils = BrandingUtil.of(colorAccent, this);
5532

56-
final var overflowDrawable = toolbar.getOverflowIcon();
57-
if (overflowDrawable != null) {
58-
overflowDrawable.setColorFilter(colorAccent, PorterDuff.Mode.SRC_ATOP);
59-
toolbar.setOverflowIcon(overflowDrawable);
33+
for (int i = 0; i < menu.size(); i++) {
34+
utils.platform.colorToolbarMenuIcon(this, menu.getItem(i));
6035
}
6136

62-
final var navigationDrawable = toolbar.getNavigationIcon();
63-
if (navigationDrawable != null) {
64-
navigationDrawable.setColorFilter(colorAccent, PorterDuff.Mode.SRC_ATOP);
65-
toolbar.setNavigationIcon(navigationDrawable);
66-
}
37+
return super.onCreateOptionsMenu(menu);
6738
}
6839
}

app/src/main/java/it/niedermann/owncloud/notes/branding/BrandedDialogFragment.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ public void onStart() {
1313
super.onStart();
1414

1515
@Nullable final var context = requireContext();
16-
@ColorInt final int mainColor = BrandingUtil.readBrandMainColor(context);
17-
@ColorInt final int textColor = BrandingUtil.readBrandTextColor(context);
18-
applyBrand(mainColor, textColor);
16+
@ColorInt final int color = BrandingUtil.readBrandMainColor(context);
17+
applyBrand(color);
1918
}
2019
}

0 commit comments

Comments
 (0)