Skip to content

Commit 54bc2c7

Browse files
Merge pull request #2298 from nextcloud/feature/branding-notes-app
Feature Use Branding Util
2 parents 30a0fd8 + ff82055 commit 54bc2c7

18 files changed

+199
-80
lines changed

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,16 @@
1515

1616
import android.app.Application;
1717
import android.content.Context;
18+
import android.text.TextUtils;
1819
import android.util.Log;
1920
import android.webkit.WebView;
2021

2122
import androidx.appcompat.app.AppCompatDelegate;
2223

24+
import com.nextcloud.android.sso.FilesAppTypeRegistry;
25+
import com.nextcloud.android.sso.model.FilesAppType;
26+
27+
import it.niedermann.owncloud.notes.branding.BrandingUtil;
2328
import it.niedermann.owncloud.notes.preferences.DarkModeSetting;
2429

2530
public class NotesApplication extends Application {
@@ -31,6 +36,7 @@ public class NotesApplication extends Application {
3136
private static long lastInteraction = 0;
3237
private static String PREF_KEY_THEME;
3338
private static boolean isGridViewEnabled = false;
39+
private static BrandingUtil brandingUtil;
3440

3541
@Override
3642
public void onCreate() {
@@ -40,9 +46,26 @@ public void onCreate() {
4046
lockedPreference = prefs.getBoolean(getString(R.string.pref_key_lock), false);
4147
isGridViewEnabled = getDefaultSharedPreferences(this).getBoolean(getString(R.string.pref_key_gridview), false);
4248
super.onCreate();
49+
brandingUtil = BrandingUtil.getInstance(this);
4350
if (BuildConfig.DEBUG) {
4451
WebView.setWebContentsDebuggingEnabled(true);
4552
}
53+
registerFilesAppType();
54+
}
55+
56+
private void registerFilesAppType() {
57+
String packageId = getResources().getString(R.string.package_id);
58+
String accountType = getResources().getString(R.string.account_type);
59+
60+
if (TextUtils.isEmpty(packageId) || TextUtils.isEmpty(accountType)) {
61+
return;
62+
}
63+
64+
FilesAppTypeRegistry.getInstance().init(new FilesAppType(packageId, accountType, FilesAppType.Type.PROD));
65+
}
66+
67+
public static BrandingUtil brandingUtil() {
68+
return brandingUtil;
4669
}
4770

4871
public static void setAppTheme(DarkModeSetting setting) {

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.Objects;
2828
import java.util.stream.Collectors;
2929

30+
import it.niedermann.owncloud.notes.NotesApplication;
3031
import it.niedermann.owncloud.notes.R;
3132
import it.niedermann.owncloud.notes.branding.BrandedDialogFragment;
3233
import it.niedermann.owncloud.notes.databinding.DialogChooseAccountBinding;
@@ -80,11 +81,11 @@ public void onAttach(@NonNull Context context) {
8081
@NonNull
8182
@Override
8283
public Dialog onCreateDialog(Bundle savedInstanceState) {
83-
final var dialogBuilder = new MaterialAlertDialogBuilder(requireActivity())
84+
final MaterialAlertDialogBuilder dialogBuilder = new MaterialAlertDialogBuilder(requireActivity())
8485
.setTitle(R.string.simple_move)
8586
.setNegativeButton(android.R.string.cancel, null);
8687

87-
if (targetAccounts.size() > 0) {
88+
if (!targetAccounts.isEmpty()) {
8889
final var binding = DialogChooseAccountBinding.inflate(LayoutInflater.from(requireContext()));
8990
final var adapter = new AccountChooserAdapter(targetAccounts, (account -> {
9091
accountPickerListener.onAccountPicked(account);
@@ -96,6 +97,8 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
9697
dialogBuilder.setMessage(getString(R.string.no_other_accounts));
9798
}
9899

100+
NotesApplication.brandingUtil().dialog.colorMaterialAlertDialogBackground(requireContext(), dialogBuilder);
101+
99102
return dialogBuilder.create();
100103
}
101104

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
package it.niedermann.owncloud.notes.accountswitcher;
99

10+
1011
import android.app.Dialog;
1112
import android.content.Context;
1213
import android.content.Intent;
@@ -21,6 +22,7 @@
2122
import com.bumptech.glide.request.RequestOptions;
2223
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
2324

25+
import it.niedermann.owncloud.notes.NotesApplication;
2426
import it.niedermann.owncloud.notes.R;
2527
import it.niedermann.owncloud.notes.branding.BrandedDialogFragment;
2628
import it.niedermann.owncloud.notes.branding.BrandingUtil;
@@ -107,9 +109,12 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
107109
dismiss();
108110
});
109111

110-
return new MaterialAlertDialogBuilder(requireContext())
111-
.setView(binding.getRoot())
112-
.create();
112+
final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireContext())
113+
.setView(binding.getRoot());
114+
115+
NotesApplication.brandingUtil().dialog.colorMaterialAlertDialogBackground(requireContext(), builder);
116+
117+
return builder.create();
113118
}
114119

115120
public static DialogFragment newInstance(long currentAccountId) {

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

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,45 +6,51 @@
66
*/
77
package it.niedermann.owncloud.notes.branding;
88

9-
import android.annotation.SuppressLint;
109
import android.content.Context;
1110
import android.util.AttributeSet;
1211
import android.view.View;
1312
import android.view.ViewGroup;
14-
import android.widget.Switch;
1513

1614
import androidx.annotation.ColorInt;
15+
import androidx.annotation.NonNull;
1716
import androidx.annotation.Nullable;
1817
import androidx.preference.PreferenceViewHolder;
19-
import androidx.preference.SwitchPreference;
18+
import androidx.preference.SwitchPreferenceCompat;
2019

21-
public class BrandedSwitchPreference extends SwitchPreference implements Branded {
20+
import com.google.android.material.materialswitch.MaterialSwitch;
21+
22+
import it.niedermann.owncloud.notes.R;
23+
24+
public class BrandedSwitchPreference extends SwitchPreferenceCompat implements Branded {
2225

2326
@ColorInt
2427
private Integer mainColor = null;
2528

26-
@SuppressLint("UseSwitchCompatOrMaterialCode")
2729
@Nullable
28-
private Switch switchView;
30+
private MaterialSwitch switchView;
2931

3032
public BrandedSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
3133
super(context, attrs, defStyleAttr, defStyleRes);
34+
setWidgetLayoutResource(R.layout.preference_switch);
3235
}
3336

3437
public BrandedSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
3538
super(context, attrs, defStyleAttr);
39+
setWidgetLayoutResource(R.layout.preference_switch);
3640
}
3741

3842
public BrandedSwitchPreference(Context context, AttributeSet attrs) {
3943
super(context, attrs);
44+
setWidgetLayoutResource(R.layout.preference_switch);
4045
}
4146

4247
public BrandedSwitchPreference(Context context) {
4348
super(context);
49+
setWidgetLayoutResource(R.layout.preference_switch);
4450
}
4551

4652
@Override
47-
public void onBindViewHolder(PreferenceViewHolder holder) {
53+
public void onBindViewHolder(@NonNull PreferenceViewHolder holder) {
4854
super.onBindViewHolder(holder);
4955

5056
if (holder.itemView instanceof ViewGroup) {
@@ -65,7 +71,7 @@ public void applyBrand(@ColorInt int color) {
6571
private void applyBrand() {
6672
if (switchView != null) {
6773
final var util = BrandingUtil.of(mainColor, getContext());
68-
util.platform.colorSwitch(switchView);
74+
util.material.colorMaterialSwitch(switchView);
6975
}
7076
}
7177

@@ -76,19 +82,19 @@ private void applyBrand() {
7682
* @return A Switch class or null
7783
* @see <a href="https://gist.github.com/marchold/45e22839eb94aa14dfb5">Source</a>
7884
*/
79-
private Switch findSwitchWidget(View view) {
80-
if (view instanceof Switch) {
81-
return (Switch) view;
85+
private MaterialSwitch findSwitchWidget(View view) {
86+
if (view instanceof MaterialSwitch) {
87+
return (MaterialSwitch) view;
8288
}
8389
if (view instanceof ViewGroup viewGroup) {
8490
for (int i = 0; i < viewGroup.getChildCount(); i++) {
8591
final var child = viewGroup.getChildAt(i);
8692
if (child instanceof ViewGroup) {
87-
@SuppressLint("UseSwitchCompatOrMaterialCode") final var result = findSwitchWidget(child);
93+
final var result = findSwitchWidget(child);
8894
if (result != null) return result;
8995
}
90-
if (child instanceof Switch) {
91-
return (Switch) child;
96+
if (child instanceof MaterialSwitch) {
97+
return (MaterialSwitch) child;
9298
}
9399
}
94100
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,14 @@ private BrandingUtil(
5454
this.notes = new NotesViewThemeUtils(schemes);
5555
}
5656

57+
public static BrandingUtil getInstance(@NonNull Context context) {
58+
int color = BrandingUtil.readBrandMainColor(context);
59+
return new BrandingUtil(
60+
MaterialSchemes.Companion.fromColor(color),
61+
new com.nextcloud.android.common.ui.color.ColorUtil(context)
62+
);
63+
}
64+
5765
public static BrandingUtil of(@ColorInt int color, @NonNull Context context) {
5866
return CACHE.computeIfAbsent(color, c -> new BrandingUtil(
5967
MaterialSchemes.Companion.fromColor(c),

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@
77
package it.niedermann.owncloud.notes.branding;
88

99
import android.content.Context;
10-
import android.content.DialogInterface;
1110

1211
import androidx.annotation.NonNull;
1312
import androidx.appcompat.app.AlertDialog;
14-
import androidx.core.content.ContextCompat;
1513

14+
import com.google.android.material.button.MaterialButton;
1615
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
1716

18-
import it.niedermann.owncloud.notes.R;
17+
import it.niedermann.owncloud.notes.NotesApplication;
1918

2019
public class DeleteAlertDialogBuilder extends MaterialAlertDialogBuilder {
2120

@@ -35,9 +34,12 @@ public AlertDialog create() {
3534
}
3635

3736
public void applyBrand() {
38-
final var positiveButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
39-
if (positiveButton != null) {
40-
positiveButton.setTextColor(ContextCompat.getColor(getContext(), R.color.danger));
37+
if (dialog.getButton(AlertDialog.BUTTON_POSITIVE) instanceof MaterialButton positiveButton) {
38+
NotesApplication.brandingUtil().material.colorMaterialButtonPrimaryTonal(positiveButton);
39+
}
40+
41+
if (dialog.getButton(AlertDialog.BUTTON_NEGATIVE) instanceof MaterialButton negativeButton) {
42+
NotesApplication.brandingUtil().material.colorMaterialButtonPrimaryBorderless(negativeButton);
4143
}
4244
}
4345
}

app/src/main/java/it/niedermann/owncloud/notes/edit/category/CategoryDialogFragment.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import java.util.List;
2626

27+
import it.niedermann.owncloud.notes.NotesApplication;
2728
import it.niedermann.owncloud.notes.R;
2829
import it.niedermann.owncloud.notes.branding.BrandedDialogFragment;
2930
import it.niedermann.owncloud.notes.branding.BrandingUtil;
@@ -155,13 +156,16 @@ public void afterTextChanged(Editable s) {
155156
}
156157
});
157158

158-
return new MaterialAlertDialogBuilder(requireContext())
159+
final MaterialAlertDialogBuilder alertDialogBuilder = new MaterialAlertDialogBuilder(requireContext())
159160
.setTitle(R.string.change_category_title)
160161
.setView(dialogView)
161162
.setCancelable(true)
162163
.setPositiveButton(R.string.action_edit_save, (dialog, which) -> listener.onCategoryChosen(editCategory.getText().toString()))
163-
.setNegativeButton(R.string.simple_cancel, null)
164-
.create();
164+
.setNegativeButton(R.string.simple_cancel, null);
165+
166+
NotesApplication.brandingUtil().dialog.colorMaterialAlertDialogBackground(requireContext(), alertDialogBuilder);
167+
168+
return alertDialogBuilder.create();
165169
}
166170

167171
@Override

app/src/main/java/it/niedermann/owncloud/notes/edit/title/EditTitleDialogFragment.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
1919

20+
import it.niedermann.owncloud.notes.NotesApplication;
2021
import it.niedermann.owncloud.notes.R;
2122
import it.niedermann.owncloud.notes.branding.BrandedDialogFragment;
2223
import it.niedermann.owncloud.notes.branding.BrandingUtil;
@@ -59,13 +60,16 @@ public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
5960
binding.title.setText(oldTitle);
6061
}
6162

62-
return new MaterialAlertDialogBuilder(requireContext())
63+
final MaterialAlertDialogBuilder alertDialogBuilder = new MaterialAlertDialogBuilder(requireContext())
6364
.setTitle(R.string.change_note_title)
6465
.setView(dialogView)
6566
.setCancelable(true)
6667
.setPositiveButton(R.string.action_edit_save, (dialog, which) -> listener.onTitleEdited(binding.title.getText().toString()))
67-
.setNegativeButton(R.string.simple_cancel, null)
68-
.create();
68+
.setNegativeButton(R.string.simple_cancel, null);
69+
70+
NotesApplication.brandingUtil().dialog.colorMaterialAlertDialogBackground(requireContext(), alertDialogBuilder);
71+
72+
return alertDialogBuilder.create();
6973
}
7074

7175
@Override

app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionActivity.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import it.niedermann.android.util.ClipboardUtil;
2020
import it.niedermann.nextcloud.exception.ExceptionUtil;
2121
import it.niedermann.owncloud.notes.BuildConfig;
22+
import it.niedermann.owncloud.notes.NotesApplication;
2223
import it.niedermann.owncloud.notes.R;
2324
import it.niedermann.owncloud.notes.databinding.ActivityExceptionBinding;
2425
import it.niedermann.owncloud.notes.exception.tips.TipsAdapter;
@@ -53,6 +54,11 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
5354
binding.copy.setOnClickListener((v) -> ClipboardUtil.copyToClipboard(this, getString(R.string.simple_exception), "```\n" + debugInfos + "\n```"));
5455
binding.close.setOnClickListener((v) -> finish());
5556

57+
NotesApplication.brandingUtil().platform.themeStatusBar(this);
58+
NotesApplication.brandingUtil().material.themeToolbar(binding.toolbar);
59+
NotesApplication.brandingUtil().material.colorMaterialButtonPrimaryBorderless(binding.close);
60+
NotesApplication.brandingUtil().material.colorMaterialButtonPrimaryFilled(binding.copy);
61+
5662
adapter.setThrowables(Collections.singletonList(throwable));
5763
}
5864

app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionDialogFragment.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import it.niedermann.android.util.ClipboardUtil;
2323
import it.niedermann.nextcloud.exception.ExceptionUtil;
2424
import it.niedermann.owncloud.notes.BuildConfig;
25+
import it.niedermann.owncloud.notes.NotesApplication;
2526
import it.niedermann.owncloud.notes.R;
2627
import it.niedermann.owncloud.notes.databinding.DialogExceptionBinding;
2728
import it.niedermann.owncloud.notes.exception.tips.TipsAdapter;
@@ -69,12 +70,15 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
6970

7071
adapter.setThrowables(throwables);
7172

72-
return new MaterialAlertDialogBuilder(requireActivity())
73+
final MaterialAlertDialogBuilder alertDialogBuilder = new MaterialAlertDialogBuilder(requireActivity())
7374
.setView(binding.getRoot())
7475
.setTitle(R.string.error_dialog_title)
7576
.setPositiveButton(android.R.string.copy, (a, b) -> ClipboardUtil.copyToClipboard(requireContext(), getString(R.string.simple_exception), "```\n" + debugInfos + "\n```"))
76-
.setNegativeButton(R.string.simple_close, null)
77-
.create();
77+
.setNegativeButton(R.string.simple_close, null);
78+
79+
NotesApplication.brandingUtil().dialog.colorMaterialAlertDialogBackground(requireContext(), alertDialogBuilder);
80+
81+
return alertDialogBuilder.create();
7882
}
7983

8084
public static DialogFragment newInstance(ArrayList<Throwable> exceptions) {

0 commit comments

Comments
 (0)