Skip to content

Commit 7fdebd8

Browse files
authored
Use adaptive colors for pre-login screens (#11362) (#11376)
* Use unmodified primary color as background through M3 utils for login screen * Use color utils to fix colors in AuthenticatorActivity for light primaries * WhatsNewActivity: fix for light primary color, port to viewbinding * Fix status bar colors in pre-login screens * FeatureFragment: fix spotbugs * Update login screenshot * build: Set ui dep to 0.5.0 tag --------- Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
1 parent 5828227 commit 7fdebd8

File tree

11 files changed

+118
-72
lines changed

11 files changed

+118
-72
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ dependencies {
367367
// upon each update first test: new registration, receive push
368368
gplayImplementation "com.google.firebase:firebase-messaging:23.1.1"
369369

370-
implementation 'com.github.nextcloud.android-common:ui:0.4.0'
370+
implementation 'com.github.nextcloud.android-common:ui:0.5.0'
371371

372372
implementation "androidx.room:room-runtime:$roomVersion"
373373
kapt "androidx.room:room-compiler:$roomVersion"
187 Bytes
Loading

app/src/main/java/com/nextcloud/client/di/AppComponent.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import com.owncloud.android.MainApp;
3434
import com.owncloud.android.media.MediaControlView;
3535
import com.owncloud.android.ui.ThemeableSwitchPreference;
36+
import com.owncloud.android.ui.whatsnew.ProgressIndicator;
3637
import com.owncloud.android.utils.FilesUploadHelper;
3738

3839
import javax.inject.Singleton;
@@ -68,6 +69,8 @@ public interface AppComponent {
6869

6970
void inject(FilesUploadHelper filesUploadHelper);
7071

72+
void inject(ProgressIndicator progressIndicator);
73+
7174
@Component.Builder
7275
interface Builder {
7376
@BindsInstance

app/src/main/java/com/nextcloud/client/onboarding/FirstRunActivity.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import android.view.ViewGroup;
3535
import android.widget.LinearLayout;
3636

37+
import com.nextcloud.android.common.ui.theme.utils.ColorRole;
3738
import com.nextcloud.client.account.UserAccountManager;
3839
import com.nextcloud.client.appinfo.AppInfo;
3940
import com.nextcloud.client.di.Injectable;
@@ -47,6 +48,7 @@
4748
import com.owncloud.android.ui.activity.FileDisplayActivity;
4849
import com.owncloud.android.ui.adapter.FeaturesViewAdapter;
4950
import com.owncloud.android.utils.DisplayUtils;
51+
import com.owncloud.android.utils.theme.ViewThemeUtils;
5052

5153
import javax.inject.Inject;
5254

@@ -66,13 +68,18 @@ public class FirstRunActivity extends BaseActivity implements ViewPager.OnPageCh
6668
@Inject AppInfo appInfo;
6769
@Inject OnboardingService onboarding;
6870

71+
@Inject ViewThemeUtils.Factory viewThemeUtilsFactory;
72+
6973
private FirstRunActivityBinding binding;
74+
private ViewThemeUtils defaultViewThemeUtils;
7075

7176
@Override
7277
protected void onCreate(Bundle savedInstanceState) {
7378
enableAccountHandling = false;
7479

7580
super.onCreate(savedInstanceState);
81+
defaultViewThemeUtils = viewThemeUtilsFactory.withPrimaryAsBackground();
82+
defaultViewThemeUtils.platform.themeStatusBar(this, ColorRole.PRIMARY);
7683
this.binding = FirstRunActivityBinding.inflate(getLayoutInflater());
7784
setContentView(binding.getRoot());
7885

@@ -81,9 +88,7 @@ protected void onCreate(Bundle savedInstanceState) {
8188
setSlideshowSize(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE);
8289

8390

84-
binding.login.setBackgroundColor(getResources().getColor(R.color.login_btn_tint));
85-
binding.login.setTextColor(getResources().getColor(R.color.primary));
86-
91+
defaultViewThemeUtils.material.colorMaterialButtonFilledOnPrimary(binding.login);
8792
binding.login.setOnClickListener(v -> {
8893
if (getIntent().getBooleanExtra(EXTRA_ALLOW_CLOSE, false)) {
8994
Intent authenticatorActivityIntent = new Intent(this, AuthenticatorActivity.class);
@@ -95,8 +100,7 @@ protected void onCreate(Bundle savedInstanceState) {
95100
});
96101

97102

98-
binding.signup.setBackgroundColor(getResources().getColor(R.color.primary));
99-
binding.signup.setTextColor(getResources().getColor(R.color.login_text_color));
103+
defaultViewThemeUtils.material.colorMaterialButtonOutlinedOnPrimary(binding.signup);
100104
binding.signup.setVisibility(isProviderOrOwnInstallationVisible ? View.VISIBLE : View.GONE);
101105
binding.signup.setOnClickListener(v -> {
102106
Intent authenticatorActivityIntent = new Intent(this, AuthenticatorActivity.class);
@@ -110,7 +114,7 @@ protected void onCreate(Bundle savedInstanceState) {
110114
}
111115
});
112116

113-
binding.hostOwnServer.setTextColor(getResources().getColor(R.color.login_text_color));
117+
defaultViewThemeUtils.platform.colorTextView(binding.hostOwnServer, ColorRole.ON_PRIMARY);
114118
binding.hostOwnServer.setVisibility(isProviderOrOwnInstallationVisible ? View.VISIBLE : View.GONE);
115119

116120
if (!isProviderOrOwnInstallationVisible) {
@@ -230,9 +234,9 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
230234

231235
public static FeatureItem[] getFirstRun() {
232236
return new FeatureItem[]{
233-
new FeatureItem(R.drawable.logo, R.string.first_run_1_text, R.string.empty, true, false),
234-
new FeatureItem(R.drawable.first_run_files, R.string.first_run_2_text, R.string.empty, true, false),
235-
new FeatureItem(R.drawable.first_run_groupware, R.string.first_run_3_text, R.string.empty, true, false),
236-
new FeatureItem(R.drawable.first_run_talk, R.string.first_run_4_text, R.string.empty, true, false)};
237+
new FeatureItem(R.drawable.logo, R.string.first_run_1_text, R.string.empty, true, false),
238+
new FeatureItem(R.drawable.first_run_files, R.string.first_run_2_text, R.string.empty, true, false),
239+
new FeatureItem(R.drawable.first_run_groupware, R.string.first_run_3_text, R.string.empty, true, false),
240+
new FeatureItem(R.drawable.first_run_talk, R.string.first_run_4_text, R.string.empty, true, false)};
237241
}
238242
}

app/src/main/java/com/nextcloud/client/onboarding/WhatsNewActivity.java

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,14 @@
2929
import android.widget.ImageButton;
3030
import android.widget.TextView;
3131

32+
import com.google.android.material.button.MaterialButton;
33+
import com.nextcloud.android.common.ui.theme.utils.ColorRole;
3234
import com.nextcloud.client.appinfo.AppInfo;
3335
import com.nextcloud.client.di.Injectable;
3436
import com.nextcloud.client.preferences.AppPreferences;
3537
import com.owncloud.android.BuildConfig;
3638
import com.owncloud.android.R;
39+
import com.owncloud.android.databinding.WhatsNewActivityBinding;
3740
import com.owncloud.android.ui.adapter.FeaturesViewAdapter;
3841
import com.owncloud.android.ui.adapter.FeaturesWebViewAdapter;
3942
import com.owncloud.android.ui.whatsnew.ProgressIndicator;
@@ -49,71 +52,69 @@
4952
*/
5053
public class WhatsNewActivity extends FragmentActivity implements ViewPager.OnPageChangeListener, Injectable {
5154

52-
private ImageButton mForwardFinishButton;
53-
private Button mSkipButton;
54-
private ProgressIndicator mProgress;
55-
private ViewPager mPager;
5655
@Inject AppPreferences preferences;
5756
@Inject AppInfo appInfo;
5857
@Inject OnboardingService onboarding;
59-
@Inject ViewThemeUtils viewThemeUtils;
58+
@Inject ViewThemeUtils.Factory viewThemeUtilsFactory;
59+
private ViewThemeUtils viewThemeUtils;
60+
61+
private WhatsNewActivityBinding binding;
6062

6163
@Override
6264
protected void onCreate(Bundle savedInstanceState) {
6365
super.onCreate(savedInstanceState);
64-
setContentView(R.layout.whats_new_activity);
66+
binding = WhatsNewActivityBinding.inflate(getLayoutInflater());
67+
setContentView(binding.getRoot());
6568

66-
int fontColor = getResources().getColor(R.color.login_text_color);
69+
viewThemeUtils = viewThemeUtilsFactory.withPrimaryAsBackground();
70+
viewThemeUtils.platform.themeStatusBar(this, ColorRole.PRIMARY);
6771

68-
mProgress = findViewById(R.id.progressIndicator);
69-
mPager = findViewById(R.id.contentPanel);
72+
7073
String[] urls = getResources().getStringArray(R.array.whatsnew_urls);
7174

7275
boolean showWebView = urls.length > 0;
7376

7477
if (showWebView) {
7578
FeaturesWebViewAdapter featuresWebViewAdapter = new FeaturesWebViewAdapter(getSupportFragmentManager(),
7679
urls);
77-
mProgress.setNumberOfSteps(featuresWebViewAdapter.getCount());
78-
mPager.setAdapter(featuresWebViewAdapter);
80+
binding.progressIndicator.setNumberOfSteps(featuresWebViewAdapter.getCount());
81+
binding.contentPanel.setAdapter(featuresWebViewAdapter);
7982
} else {
8083
FeaturesViewAdapter featuresViewAdapter = new FeaturesViewAdapter(getSupportFragmentManager(),
8184
onboarding.getWhatsNew());
82-
mProgress.setNumberOfSteps(featuresViewAdapter.getCount());
83-
mPager.setAdapter(featuresViewAdapter);
85+
binding.progressIndicator.setNumberOfSteps(featuresViewAdapter.getCount());
86+
binding.contentPanel.setAdapter(featuresViewAdapter);
8487
}
8588

86-
mPager.addOnPageChangeListener(this);
89+
binding.contentPanel.addOnPageChangeListener(this);
8790

88-
mForwardFinishButton = findViewById(R.id.forward);
89-
viewThemeUtils.platform.colorImageButton(mForwardFinishButton, fontColor);
91+
viewThemeUtils.platform.colorImageView(binding.forward, ColorRole.ON_PRIMARY);
9092

91-
mForwardFinishButton.setOnClickListener(view -> {
92-
if (mProgress.hasNextStep()) {
93-
mPager.setCurrentItem(mPager.getCurrentItem() + 1, true);
94-
mProgress.animateToStep(mPager.getCurrentItem() + 1);
93+
binding.forward.setOnClickListener(view -> {
94+
if (binding.progressIndicator.hasNextStep()) {
95+
binding.contentPanel.setCurrentItem(binding.contentPanel.getCurrentItem() + 1, true);
96+
binding.progressIndicator.animateToStep(binding.contentPanel.getCurrentItem() + 1);
9597
} else {
9698
onFinish();
9799
finish();
98100
}
99101
updateNextButtonIfNeeded();
100102
});
101103

102-
mForwardFinishButton.setBackground(null);
104+
binding.forward.setBackground(null);
103105

104-
mSkipButton = findViewById(R.id.skip);
105-
mSkipButton.setTextColor(fontColor);
106-
mSkipButton.setOnClickListener(view -> {
106+
viewThemeUtils.platform.colorTextView(binding.skip, ColorRole.ON_PRIMARY);
107+
binding.skip.setOnClickListener(view -> {
107108
onFinish();
108109
finish();
109110
});
110111

111-
TextView tv = findViewById(R.id.welcomeText);
112+
viewThemeUtils.platform.colorTextView(binding.welcomeText, ColorRole.ON_PRIMARY);
112113

113114
if (showWebView) {
114-
tv.setText(R.string.app_name);
115+
binding.welcomeText.setText(R.string.app_name);
115116
} else {
116-
tv.setText(String.format(getString(R.string.whats_new_title), appInfo.getVersionName()));
117+
binding.welcomeText.setText(String.format(getString(R.string.whats_new_title), appInfo.getVersionName()));
117118
}
118119

119120
updateNextButtonIfNeeded();
@@ -126,12 +127,12 @@ public void onBackPressed() {
126127
}
127128

128129
private void updateNextButtonIfNeeded() {
129-
if (!mProgress.hasNextStep()) {
130-
mForwardFinishButton.setImageResource(R.drawable.ic_ok);
131-
mSkipButton.setVisibility(View.INVISIBLE);
130+
if (!binding.progressIndicator.hasNextStep()) {
131+
binding.forward.setImageResource(R.drawable.ic_ok);
132+
binding.skip.setVisibility(View.INVISIBLE);
132133
} else {
133-
mForwardFinishButton.setImageResource(R.drawable.arrow_right);
134-
mSkipButton.setVisibility(View.VISIBLE);
134+
binding.forward.setImageResource(R.drawable.arrow_right);
135+
binding.skip.setVisibility(View.VISIBLE);
135136
}
136137
}
137138

@@ -146,7 +147,7 @@ public void onPageScrolled(int position, float positionOffset, int positionOffse
146147

147148
@Override
148149
public void onPageSelected(int position) {
149-
mProgress.animateToStep(position + 1);
150+
binding.progressIndicator.animateToStep(position + 1);
150151
updateNextButtonIfNeeded();
151152
}
152153

app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
import com.blikoon.qrcodescanner.QrCodeActivity;
7777
import com.google.android.material.snackbar.Snackbar;
7878
import com.nextcloud.android.common.ui.color.ColorUtil;
79+
import com.nextcloud.android.common.ui.theme.utils.ColorRole;
7980
import com.nextcloud.client.account.User;
8081
import com.nextcloud.client.account.UserAccountManager;
8182
import com.nextcloud.client.device.DeviceInfo;
@@ -239,14 +240,16 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
239240
@Inject OnboardingService onboarding;
240241
@Inject DeviceInfo deviceInfo;
241242
@Inject PassCodeManager passCodeManager;
242-
@Inject ViewThemeUtils viewThemeUtils;
243+
@Inject ViewThemeUtils.Factory viewThemeUtilsFactory;
243244
@Inject ColorUtil colorUtil;
244245

245246
private boolean onlyAdd = false;
246247
@SuppressLint("ResourceAsColor") @ColorInt
247248
private int primaryColor = R.color.primary;
248249
private boolean strictMode = false;
249250

251+
private ViewThemeUtils viewThemeUtils;
252+
250253
@VisibleForTesting
251254
public AccountSetupBinding getAccountSetupBinding() {
252255
return accountSetupBinding;
@@ -260,6 +263,9 @@ public AccountSetupBinding getAccountSetupBinding() {
260263
@Override
261264
protected void onCreate(Bundle savedInstanceState) {
262265
super.onCreate(savedInstanceState);
266+
viewThemeUtils = viewThemeUtilsFactory.withPrimaryAsBackground();
267+
viewThemeUtils.platform.themeStatusBar(this, ColorRole.PRIMARY);
268+
263269

264270
Uri data = getIntent().getData();
265271
boolean directLogin = data != null && data.toString().startsWith(getString(R.string.login_data_own_scheme));
@@ -349,6 +355,7 @@ private static String getWebLoginUserAgent() {
349355
@SuppressFBWarnings("ANDROID_WEB_VIEW_JAVASCRIPT")
350356
@SuppressLint("SetJavaScriptEnabled")
351357
private void initWebViewLogin(String baseURL, boolean useGenericUserAgent) {
358+
viewThemeUtils.platform.colorCircularProgressBar(accountSetupWebviewBinding.loginWebviewProgressBar, ColorRole.ON_PRIMARY_CONTAINER);
352359
accountSetupWebviewBinding.loginWebview.setVisibility(View.GONE);
353360

354361
accountSetupWebviewBinding.loginWebview.getSettings().setAllowFileAccess(false);
@@ -538,10 +545,15 @@ private void initOverallUi() {
538545
accountSetupBinding.hostUrlInputHelperText.setText(
539546
String.format(getString(R.string.login_url_helper_text), getString(R.string.app_name)));
540547

548+
viewThemeUtils.platform.colorTextView(accountSetupBinding.hostUrlInputHelperText, ColorRole.ON_PRIMARY);
549+
viewThemeUtils.platform.colorTextView(accountSetupBinding.serverStatusText, ColorRole.ON_PRIMARY);
550+
viewThemeUtils.platform.colorTextView(accountSetupBinding.authStatusText, ColorRole.ON_PRIMARY);
551+
viewThemeUtils.material.colorTextInputLayout(accountSetupBinding.hostUrlContainer, ColorRole.ON_PRIMARY);
552+
viewThemeUtils.platform.colorEditTextOnPrimary(accountSetupBinding.hostUrlInput);
553+
541554
if (deviceInfo.hasCamera(this)) {
542555
accountSetupBinding.scanQr.setOnClickListener(v -> onScan());
543-
viewThemeUtils.platform.colorDrawable(accountSetupBinding.scanQr.getDrawable(),
544-
getResources().getColor(R.color.login_text_color));
556+
viewThemeUtils.platform.tintDrawable(this, accountSetupBinding.scanQr.getDrawable(), ColorRole.ON_PRIMARY);
545557
} else {
546558
accountSetupBinding.scanQr.setVisibility(View.GONE);
547559
}

0 commit comments

Comments
 (0)