Show new onboarding by default (#36349)

Shows the new onboarding flow by default and removes old unused code in
Java, XML layouts and strings.
This commit is contained in:
Simone Arpe
2026-05-12 18:07:13 +02:00
committed by GitHub
parent 71f9226370
commit f1cd4c159b
32 changed files with 138 additions and 840 deletions
-22
View File
@@ -109,9 +109,6 @@ android_resources("java_resources") {
"java/brave-res/drawable-hdpi/check.png",
"java/brave-res/drawable-hdpi/copy_paste.png",
"java/brave-res/drawable-hdpi/ic_ad_free_videos.png",
"java/brave-res/drawable-hdpi/ic_brave_onboarding.png",
"java/brave-res/drawable-hdpi/ic_onboarding_bottom_leaf.png",
"java/brave-res/drawable-hdpi/ic_onboarding_top_leaf.png",
"java/brave-res/drawable-hdpi/share_activity_background.png",
"java/brave-res/drawable-mdpi/brave_ads_launch_graphic.png",
"java/brave-res/drawable-mdpi/brave_sync_btn_laptop.png",
@@ -125,9 +122,6 @@ android_resources("java_resources") {
"java/brave-res/drawable-mdpi/check.png",
"java/brave-res/drawable-mdpi/copy_paste.png",
"java/brave-res/drawable-mdpi/ic_ad_free_videos.png",
"java/brave-res/drawable-mdpi/ic_brave_onboarding.png",
"java/brave-res/drawable-mdpi/ic_onboarding_bottom_leaf.png",
"java/brave-res/drawable-mdpi/ic_onboarding_top_leaf.png",
"java/brave-res/drawable-mdpi/share_activity_background.png",
"java/brave-res/drawable-night-nodpi/ic_quick_action_search_and_bookmark_widget_preview.png",
"java/brave-res/drawable-night-nodpi/widget_preview.png",
@@ -160,9 +154,6 @@ android_resources("java_resources") {
"java/brave-res/drawable-xhdpi/check.png",
"java/brave-res/drawable-xhdpi/copy_paste.png",
"java/brave-res/drawable-xhdpi/ic_ad_free_videos.png",
"java/brave-res/drawable-xhdpi/ic_brave_onboarding.png",
"java/brave-res/drawable-xhdpi/ic_onboarding_bottom_leaf.png",
"java/brave-res/drawable-xhdpi/ic_onboarding_top_leaf.png",
"java/brave-res/drawable-xhdpi/share_activity_background.png",
"java/brave-res/drawable-xxhdpi/brave_ads_launch_graphic.png",
"java/brave-res/drawable-xxhdpi/brave_sync_btn_laptop.png",
@@ -176,9 +167,6 @@ android_resources("java_resources") {
"java/brave-res/drawable-xxhdpi/check.png",
"java/brave-res/drawable-xxhdpi/copy_paste.png",
"java/brave-res/drawable-xxhdpi/ic_ad_free_videos.png",
"java/brave-res/drawable-xxhdpi/ic_brave_onboarding.png",
"java/brave-res/drawable-xxhdpi/ic_onboarding_bottom_leaf.png",
"java/brave-res/drawable-xxhdpi/ic_onboarding_top_leaf.png",
"java/brave-res/drawable-xxhdpi/share_activity_background.png",
"java/brave-res/drawable-xxxhdpi/brave_ads_launch_graphic.png",
"java/brave-res/drawable-xxxhdpi/brave_sync_btn_laptop.png",
@@ -192,9 +180,6 @@ android_resources("java_resources") {
"java/brave-res/drawable-xxxhdpi/check.png",
"java/brave-res/drawable-xxxhdpi/copy_paste.png",
"java/brave-res/drawable-xxxhdpi/ic_ad_free_videos.png",
"java/brave-res/drawable-xxxhdpi/ic_brave_onboarding.png",
"java/brave-res/drawable-xxxhdpi/ic_onboarding_bottom_leaf.png",
"java/brave-res/drawable-xxxhdpi/ic_onboarding_top_leaf.png",
"java/brave-res/drawable-xxxhdpi/share_activity_background.png",
"java/brave-res/drawable/ad_free_card_bg.xml",
"java/brave-res/drawable/add_custom_filter_button_background_disabled.xml",
@@ -376,12 +361,7 @@ android_resources("java_resources") {
"java/brave-res/drawable/ic_neon_color.xml",
"java/brave-res/drawable/ic_news_settings.xml",
"java/brave-res/drawable/ic_notification_icon.xml",
"java/brave-res/drawable/ic_onboarding_arrow_down.xml",
"java/brave-res/drawable/ic_onboarding_bg.xml",
"java/brave-res/drawable/ic_op_color.xml",
"java/brave-res/drawable/ic_p3a_checkbox.xml",
"java/brave-res/drawable/ic_p3a_checkbox_filled.xml",
"java/brave-res/drawable/ic_p3a_checkbox_outline.xml",
"java/brave-res/drawable/ic_pause_filled.xml",
"java/brave-res/drawable/ic_phantom.xml",
"java/brave-res/drawable/ic_phone.xml",
@@ -475,7 +455,6 @@ android_resources("java_resources") {
"java/brave-res/drawable/rounded_dot_success_status.xml",
"java/brave-res/drawable/rounded_filled.xml",
"java/brave-res/drawable/rounded_holo_button.xml",
"java/brave-res/drawable/rounded_onboarding_welcome_bg.xml",
"java/brave-res/drawable/rounded_set_default_top_corners.xml",
"java/brave-res/drawable/rounded_shape.xml",
"java/brave-res/drawable/rounded_surface_container_background.xml",
@@ -528,7 +507,6 @@ android_resources("java_resources") {
"java/brave-res/layout/activity_vpn_server.xml",
"java/brave-res/layout/activity_vpn_server_selection.xml",
"java/brave-res/layout/activity_welcome_onboarding.xml",
"java/brave-res/layout/activity_welcome_onboarding_default.xml",
"java/brave-res/layout/application_item_layout.xml",
"java/brave-res/layout/approve_tx_bottom_sheet.xml",
"java/brave-res/layout/auto_reconnect_vpn_tutorial_item_layout.xml",
Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 564 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 481 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 KiB

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="28dp"
android:height="12dp"
android:viewportWidth="8"
android:viewportHeight="6">
<path
android:pathData="M4,6L7.46,0H0.54L4,6Z"
android:fillColor="@color/onboarding_card_bg_color"/>
</vector>
@@ -1,25 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="200dp"
android:height="200dp"
android:viewportWidth="200"
android:viewportHeight="200">
<group>
<clip-path
android:pathData="M0,0h200v200h-200z"/>
<path
android:pathData="M200,0H0V200H200V0Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="75.5"
android:startY="0"
android:endX="105.65"
android:endY="196.68"
android:type="linear">
<item android:offset="0" android:color="#FFA315AE"/>
<item android:offset="1" android:color="#FF4C10E3"/>
</gradient>
</aapt:attr>
</path>
</group>
</vector>
@@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2022 The Brave Authors. All rights reserved.
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this file,
You can obtain one at https://mozilla.org/MPL/2.0/. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="true"
android:drawable="@drawable/ic_p3a_checkbox_filled" />
<item
android:state_checked="false"
android:drawable="@drawable/ic_p3a_checkbox_outline" />
</selector>
@@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="@color/brave_action_color"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M19,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.11,0 2,-0.9 2,-2L21,5c0,-1.1 -0.89,-2 -2,-2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z"/>
</vector>
@@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="@color/brave_action_color"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M19,5v14H5V5h14m0,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V5c0,-1.1 -0.9,-2 -2,-2z"/>
</vector>
@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2022 The Brave Authors. All rights reserved.
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this file,
You can obtain one at https://mozilla.org/MPL/2.0/.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/onboarding_card_bg_color" />
<corners android:radius="8dp" />
</shape>
@@ -4,54 +4,49 @@
License, v. 2.0. If a copy of the MPL was not distributed with this file,
You can obtain one at https://mozilla.org/MPL/2.0/.
-->
<merge xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/onboarding_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/onboarding_background">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/onboarding_variant_y"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/onboarding_background">
<FrameLayout
android:id="@+id/brave_splash_container"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/schemes_surface_container_lowest"
tools:ignore="InconsistentLayout"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<ImageView
android:id="@+id/brave_splash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_brave_splash_animated"
android:contentDescription="@string/brave_onboarding_splash_logo_description"
android:alpha="0" />
</FrameLayout>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/splash_anchor"
<FrameLayout
android:id="@+id/brave_splash_container"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/schemes_surface_container_lowest"
tools:ignore="InconsistentLayout"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<ImageView
android:id="@+id/brave_splash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="0dp"/>
android:layout_gravity="center"
android:src="@drawable/ic_brave_splash_animated"
android:contentDescription="@string/brave_onboarding_splash_logo_description"
android:alpha="0" />
</FrameLayout>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/onboarding_steps_pager"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="invisible"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/splash_anchor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="0dp"/>
<include layout="@layout/activity_welcome_onboarding_default" />
</merge>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/onboarding_steps_pager"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="invisible"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -4,47 +4,42 @@
License, v. 2.0. If a copy of the MPL was not distributed with this file,
You can obtain one at https://mozilla.org/MPL/2.0/.
-->
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/onboarding_container"
android:paddingTop="@dimen/onboarding_padding_top"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/onboarding_variant_y"
android:visibility="gone"
android:paddingTop="@dimen/onboarding_padding_top"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/brave_splash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:src="@drawable/ic_brave_splash_animated"
android:contentDescription="@string/brave_onboarding_splash_logo_description"
android:alpha="0"
<ImageView
android:id="@+id/brave_splash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:src="@drawable/ic_brave_splash_animated"
android:contentDescription="@string/brave_onboarding_splash_logo_description"
android:alpha="0"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/splash_anchor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="0dp"/>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/splash_anchor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="0dp"/>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/onboarding_steps_pager"
android:layout_width="0dp"
android:visibility="invisible"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/splash_anchor"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<include layout="@layout/activity_welcome_onboarding_default" />
</merge>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/onboarding_steps_pager"
android:layout_width="0dp"
android:visibility="invisible"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/splash_anchor"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -1,182 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2026 The Brave Authors. All rights reserved.
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this file,
You can obtain one at https://mozilla.org/MPL/2.0/.
-->
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="@layout/activity_welcome_onboarding">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/onboarding_default_variant"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/iv_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/brave_onboarding_background_description"
android:scaleType="fitXY"
app:srcCompat="@drawable/ic_onboarding_bg"/>
<View
android:id="@+id/view_leaf_top_align"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toStartOf="parent"
app:layout_constraintBottom_toTopOf="parent"/>
<ImageView
android:id="@+id/iv_leaf_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/view_leaf_top_align"
android:adjustViewBounds="true"
android:scaleX="1.3"
android:scaleY="1.3"
android:src="@drawable/ic_onboarding_top_leaf"
android:contentDescription="@string/brave_onboarding_top_leaf_description"/>
<ImageView
android:id="@+id/iv_leaf_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/view_leaf_bottom_align"
android:adjustViewBounds="true"
android:contentDescription="@string/brave_onboarding_bottom_leaf_description"
android:scaleX="1.3"
android:scaleY="1.3"
android:src="@drawable/ic_onboarding_bottom_leaf"/>
<View
android:id="@+id/view_leaf_bottom_align"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent"/>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:id="@+id/layout_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:id="@+id/layout_card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginStart="40dp"
android:layout_marginEnd="40dp"
android:padding="24dp"
android:visibility="gone"
android:orientation="vertical"
android:background="@drawable/rounded_onboarding_welcome_bg">
<TextView
android:id="@+id/tv_card"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/privacy_onboarding"
android:textSize="22sp"
android:textColor="@color/onboarding_card_text_color"/>
<TextView
android:id="@+id/tv_default"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:lineSpacingMultiplier="1.2"
android:text="@string/onboarding_set_default"
android:textSize="16sp"
android:textColor="@color/onboarding_card_text_color"/>
<android.widget.CheckBox
android:id="@+id/checkbox_crash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:button="@drawable/ic_p3a_checkbox"
android:gravity="top"
android:visibility="gone"
android:paddingStart="4dp"
android:text="@string/p3a_crash"
android:textColor="@color/onboarding_card_text_color"
android:textSize="14sp" />
<android.widget.CheckBox
android:id="@+id/checkbox_p3a"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:button="@drawable/ic_p3a_checkbox"
android:gravity="top"
android:visibility="gone"
android:paddingStart="4dp"
android:text="@string/p3a_insights"
android:textColor="@color/onboarding_card_text_color"
android:textSize="14sp" />
<Button
android:id="@+id/btn_positive"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:background="@drawable/blue_48_rounded_bg"
app:backgroundTint="@null"
android:text="@string/set_default_browser"
android:textAllCaps="false"
android:textColor="@android:color/white"
android:textSize="16sp"
android:padding="4dp"
android:minHeight="0dp"
style="?android:attr/borderlessButtonStyle"/>
<Button
android:id="@+id/btn_negative"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="6dp"
android:background="@android:color/transparent"
android:text="@string/not_now"
android:textAllCaps="false"
android:textColor="@color/onboarding_negative_button_color"
android:textSize="16sp"
style="?android:attr/borderlessButtonStyle"/>
</LinearLayout>
<ImageView
android:id="@+id/iv_arrow_down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_gravity="center_horizontal"
app:srcCompat="@drawable/ic_onboarding_arrow_down"
android:contentDescription="@string/brave_onboarding_arrow_down_description"/>
<ImageView
android:id="@+id/iv_brave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:layout_gravity="center_horizontal"
android:contentDescription="@string/brave_onboarding_logo_description"
android:visibility="gone"
android:src="@drawable/ic_brave_onboarding"/>
</LinearLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
</merge>
@@ -58,19 +58,19 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_margin="16dp"
android:gravity="end|center_vertical"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="20dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/tvNotNow"
style="@style/LargeButtonBase"
android:background="@drawable/button_transparent"
android:layout_width="0dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/not_now"
android:gravity="end"
android:layout_marginEnd="2dp"
android:textColor="@color/schemes_on_surface_variant" />
@@ -9,13 +9,10 @@ import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
import static org.chromium.build.NullUtil.assumeNonNull;
import static org.chromium.chrome.browser.set_default_browser.BraveSetDefaultBrowserUtils.isBraveSetAsDefaultBrowser;
import static org.chromium.chrome.browser.set_default_browser.BraveSetDefaultBrowserUtils.setDefaultBrowser;
import static org.chromium.ui.base.ViewUtils.dpToPx;
import android.animation.Animator;
import android.animation.AnimatorInflater;
import android.animation.LayoutTransition;
import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.Animatable2;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.Drawable;
@@ -23,19 +20,10 @@ import android.os.Build;
import android.os.Bundle;
import android.os.RemoteException;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.OvershootInterpolator;
import android.view.animation.Transformation;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
@@ -59,16 +47,13 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.BraveConfig;
import org.chromium.chrome.browser.BraveLocalState;
import org.chromium.chrome.browser.customtabs.CustomTabActivity;
import org.chromium.chrome.browser.day_zero.DayZeroHelper;
import org.chromium.chrome.browser.metrics.ChangeMetricsReportingStateCalledFrom;
import org.chromium.chrome.browser.metrics.UmaSessionStats;
import org.chromium.chrome.browser.notifications.BravePermissionUtils;
import org.chromium.chrome.browser.onboarding.OnboardingPrefManager;
import org.chromium.chrome.browser.preferences.BravePref;
import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImpl;
import org.chromium.chrome.browser.util.BraveConstants;
import org.chromium.chrome.browser.util.BraveTouchUtils;
import org.chromium.chrome.browser.util.PackageUtils;
import org.chromium.components.user_prefs.UserPrefs;
import org.chromium.components.web_discovery.WebDiscoveryPrefs;
@@ -96,67 +81,35 @@ import org.chromium.ui.text.SpanApplier.SpanInfo;
@NullMarked
public class WelcomeOnboardingActivity extends FirstRunActivityBase
implements OnboardingStepAdapter.OnboardingNavigationListener {
private static final String P3A_URL =
"https://support.brave.app/hc/en-us/articles/9140465918093-What-is-P3A-in-Brave";
private static final String WDP_LINK =
"https://www.brave.com/browser/privacy/#web-discovery-project";
private static final String TAG = "WelcomeOnboarding";
private static final String DAY_ZERO_DEFAULT_VARIANT = "X";
private static final String DAY_ZERO_VARIANT_Y = "Y";
private static final String KEY_SPLASH_ANIMATION_FINISHED =
"WelcomeOnboardingActivity.SplashAnimationFinished";
private static final String KEY_VARIANT_Y_PAGE_INDEX =
"WelcomeOnboardingActivity.VariantYPageIndex";
private static final String KEY_PAGE_INDEX = "WelcomeOnboardingActivity.PageIndex";
private static final float LEAF_SCALE_ANIMATION = 1.5f;
private static final float REDUCED_TENSION_OVERSHOOT_INTERPOLATOR = 1f;
private static final float BRAVE_SPLASH_SCALE_ANIMATION = 0.4f;
private static final int BRAVE_SPLASH_ANIMATION_DURATION_MS = 600;
private boolean mIsTablet;
private int mCurrentStep = -1;
private boolean mSplashAnimationFinished;
private int mRestoredVariantYPageIndex;
private int mRestoredPageIndex;
private ConstraintLayout mDefaultConstraintLayout;
private ConstraintLayout mVariantYConstraintLayout;
private View mVLeafAlignTop;
private View mVLeafAlignBottom;
private ImageView mIvLeafTop;
private ImageView mIvLeafBottom;
private ImageView mBraveSplash;
private ImageView mIvBrave;
private ImageView mIvArrowDown;
private LinearLayout mLayoutCard;
private TextView mTvCard;
private TextView mTvDefault;
private Button mBtnPositive;
private Button mBtnNegative;
private CheckBox mCheckboxCrash;
private CheckBox mCheckboxP3a;
private FrameLayout mBraveSplashContainer;
@Nullable private FrameLayout mBraveSplashContainer;
private Guideline mSplashGuideline;
private ViewPager2 mVariantYPager;
@Nullable private OnboardingStepAdapter mVariantYAdapter;
private ViewPager2 mOnboardingPager;
private OnboardingStepAdapter mStepAdapter;
private PageBounceAnimator mPageBounceAnimator;
private String mDayZeroVariant = "";
private SpannableString mWdpLearnMore;
@Nullable private PageBounceAnimator mPageBounceAnimator;
private boolean mIsP3aManaged;
private boolean mIsCrashReportingManaged;
private enum CurrentOnboardingPage {
SET_AS_DEFAULT,
NOTIFICATION_PERMISSION,
WDP_PAGE,
ANALYTICS_CONSENT_PAGE
}
@Nullable private CurrentOnboardingPage mCurrentOnboardingPage;
private void checkReferral() {
InstallReferrerClient referrerClient = InstallReferrerClient.newBuilder(this).build();
referrerClient.startConnection(
@@ -207,35 +160,13 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase
}
private void enableWebDiscoverPreference() {
if ((isWDPSettingAvailable() && mCurrentOnboardingPage == CurrentOnboardingPage.WDP_PAGE)
|| isVariantY()) {
UserPrefs.get(assumeNonNull(getProfileProviderSupplier().get()).getOriginalProfile())
.setBoolean(BravePref.WEB_DISCOVERY_ENABLED, true);
}
UserPrefs.get(assumeNonNull(getProfileProviderSupplier().get()).getOriginalProfile())
.setBoolean(BravePref.WEB_DISCOVERY_ENABLED, true);
}
private void nextOnboardingStepForDefaultVariant() {
if (isActivityFinishingOrDestroyed()) {
return;
}
mCurrentStep++;
if (mCurrentStep == 0) {
handleSetAsDefaultStep();
} else if (mCurrentStep == 1) {
handleWDPStep();
} else if (mCurrentStep == 2) {
handleAnalyticsConsentPage();
} else {
finalStep(false);
}
}
private void finalStep(final boolean showSearchWidgetPromoPanel) {
if (showSearchWidgetPromoPanel) {
ChromeSharedPreferences.getInstance()
.writeBoolean(OnboardingPrefManager.SHOULD_SHOW_SEARCH_WIDGET_PROMO, true);
}
private void finalStep() {
ChromeSharedPreferences.getInstance()
.writeBoolean(OnboardingPrefManager.SHOULD_SHOW_SEARCH_WIDGET_PROMO, true);
CustomizeBraveMenu.initDefaultInvisibleItems(getResources());
OnboardingPrefManager.getInstance().setP3aOnboardingShown(true);
@@ -282,26 +213,6 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase
}
}
private void handleSetAsDefaultStep() {
mCurrentOnboardingPage = CurrentOnboardingPage.SET_AS_DEFAULT;
if (!maybeRequestDefaultBrowser()) {
nextOnboardingStepForDefaultVariant();
}
}
private void handleWDPStep() {
if (!isWDPSettingAvailable()) {
nextOnboardingStepForDefaultVariant();
return;
}
mCurrentOnboardingPage = CurrentOnboardingPage.WDP_PAGE;
if (isDefaultVariant() && mIvBrave != null) {
mIvBrave.setVisibility(View.VISIBLE);
}
showWDPPage();
}
private boolean isWDPSettingAvailable() {
if (!BraveConfig.WEB_DISCOVERY_ENABLED) {
return false;
@@ -311,74 +222,6 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase
.isManagedPreference(WebDiscoveryPrefs.WEB_DISCOVERY_ENABLED);
}
private void handleAnalyticsConsentPage() {
// If both settings are managed by policy, skip this page entirely
if (mIsP3aManaged && mIsCrashReportingManaged) {
nextOnboardingStepForDefaultVariant();
return;
}
mCurrentOnboardingPage = CurrentOnboardingPage.ANALYTICS_CONSENT_PAGE;
int margin = mIsTablet ? 250 : 60;
setLeafAnimation(mVLeafAlignTop, mIvLeafTop, margin, true);
setLeafAnimation(mVLeafAlignBottom, mIvLeafBottom, margin, false);
if (mLayoutCard != null) {
mLayoutCard.setVisibility(View.GONE);
}
if (mTvDefault != null) {
mTvDefault.setVisibility(View.GONE);
}
if (mIvArrowDown != null) {
mIvArrowDown.setVisibility(View.GONE);
}
if (mTvCard != null) {
mTvCard.setText(getResources().getString(R.string.p3a_title));
}
if (mBtnPositive != null) {
mBtnPositive.setText(getResources().getString(R.string.continue_text));
}
if (mBtnNegative != null) {
mBtnNegative.setText(getResources().getString(R.string.learn_more_onboarding));
mBtnNegative.setVisibility(View.VISIBLE);
}
if (!mIsCrashReportingManaged) {
final boolean isCrashReporting = getCrashReportingPreference();
if (mCheckboxCrash != null) {
mCheckboxCrash.setChecked(isCrashReporting);
mCheckboxCrash.setOnCheckedChangeListener(
(buttonView, isChecked) -> setMetricsReportingConsent(isChecked, false));
}
}
if (!mIsP3aManaged) {
final boolean isP3aEnabled = getP3aPreference();
if (mCheckboxP3a != null) {
mCheckboxP3a.setChecked(isP3aEnabled);
mCheckboxP3a.setOnCheckedChangeListener(
(buttonView, isChecked) -> setP3aConsent(isChecked));
}
}
if (mTvCard != null) {
mTvCard.setVisibility(View.VISIBLE);
}
if (mCheckboxCrash != null) {
mCheckboxCrash.setVisibility(mIsCrashReportingManaged ? View.GONE : View.VISIBLE);
}
if (mCheckboxP3a != null) {
mCheckboxP3a.setVisibility(mIsP3aManaged ? View.GONE : View.VISIBLE);
}
if (mLayoutCard != null) {
mLayoutCard.setVisibility(View.VISIBLE);
}
if (mIvArrowDown != null) {
mIvArrowDown.setVisibility(View.VISIBLE);
}
}
private void setMetricsReportingConsent(final boolean consent, final boolean markAsShown) {
try {
// Updates reporting consent for first run.
@@ -403,113 +246,6 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase
}
}
private void showWDPPage() {
if (isDefaultVariant()) {
int margin = mIsTablet ? 250 : 60;
setLeafAnimation(mVLeafAlignTop, mIvLeafTop, margin, true);
setLeafAnimation(mVLeafAlignBottom, mIvLeafBottom, margin, false);
if (mLayoutCard != null) {
mLayoutCard.setVisibility(View.GONE);
}
if (mIvArrowDown != null) {
mIvArrowDown.setVisibility(View.GONE);
}
if (mTvCard != null) {
mTvCard.setText(getResources().getString(R.string.wdp_title));
}
if (mTvDefault != null) {
mTvDefault.setMovementMethod(LinkMovementMethod.getInstance());
mTvDefault.setText(mWdpLearnMore);
}
if (mBtnPositive != null) {
mBtnPositive.setText(getResources().getString(R.string.sure_ill_help_onboarding));
}
if (mBtnNegative != null) {
mBtnNegative.setText(getResources().getString(R.string.maybe_later));
mBtnNegative.setVisibility(View.VISIBLE);
}
if (mTvCard != null) {
mTvCard.setVisibility(View.VISIBLE);
}
if (mTvDefault != null) {
mTvDefault.setVisibility(View.VISIBLE);
}
if (mLayoutCard != null) {
mLayoutCard.setVisibility(View.VISIBLE);
}
if (mIvArrowDown != null) {
mIvArrowDown.setVisibility(View.VISIBLE);
}
if (mCheckboxCrash != null) {
mCheckboxCrash.setVisibility(View.GONE);
}
if (mCheckboxP3a != null) {
mCheckboxP3a.setVisibility(View.GONE);
}
}
}
private void setLeafAnimation(
View leafAlignView, ImageView leafView, float leafMargin, boolean isTopLeaf) {
if (leafMargin > 0 && leafAlignView != null) {
int margin = dpToPx(this, leafMargin);
Animation animation =
new Animation() {
@Override
protected void applyTransformation(float time, Transformation t) {
transformLeaf(time, margin, leafAlignView, isTopLeaf);
}
};
animation.setDuration(800);
leafAlignView.startAnimation(animation);
}
if (leafView != null) {
leafView.animate()
.scaleX(LEAF_SCALE_ANIMATION)
.scaleY(LEAF_SCALE_ANIMATION)
.setDuration(800);
}
}
private void transformLeaf(
final float time, final int margin, final View leafAlignView, final boolean isTopLeaf) {
ViewGroup.MarginLayoutParams layoutParams =
(ViewGroup.MarginLayoutParams) leafAlignView.getLayoutParams();
if (isTopLeaf) {
layoutParams.bottomMargin =
margin - (int) ((margin - layoutParams.bottomMargin) * time);
} else {
layoutParams.topMargin = margin - (int) ((margin - layoutParams.topMargin) * time);
}
leafAlignView.setLayoutParams(layoutParams);
}
@Override
public void onRequestPermissionsResult(
int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == BravePermissionUtils.NOTIFICATION_PERMISSION_CODE) {
if (isDefaultVariant()) {
nextOnboardingStepForDefaultVariant();
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
assert requestCode == BraveConstants.DEFAULT_BROWSER_ROLE_REQUEST_CODE;
if (isDefaultVariant()) {
nextOnboardingStepForDefaultVariant();
}
}
@Override
protected void performPreInflationStartup() {
super.performPreInflationStartup();
@@ -525,7 +261,7 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase
setContentView(R.layout.activity_welcome_onboarding);
mSplashGuideline = findViewById(R.id.splash_anchor);
mVariantYPager = findViewById(R.id.onboarding_steps_pager);
mOnboardingPager = findViewById(R.id.onboarding_steps_pager);
final ChromeClickableSpan wdpLearnMoreClickableSpan =
new ChromeClickableSpan(
@@ -533,91 +269,21 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase
(textView) -> CustomTabActivity.showInfoPage(this, WDP_LINK));
final String wdpText = getResources().getString(R.string.wdp_text);
mWdpLearnMore =
final SpannableString wdpLearnMore =
SpanApplier.applySpans(
wdpText,
new SpanInfo("<learn_more>", "</learn_more>", wdpLearnMoreClickableSpan));
if (mVariantYPager != null) {
mVariantYPager.setUserInputEnabled(false);
mPageBounceAnimator = new PageBounceAnimator(mVariantYPager);
mVariantYAdapter = new OnboardingStepAdapter(mWdpLearnMore, this);
mVariantYPager.setAdapter(mVariantYAdapter);
}
mOnboardingPager.setUserInputEnabled(false);
mPageBounceAnimator = new PageBounceAnimator(mOnboardingPager);
mStepAdapter = new OnboardingStepAdapter(wdpLearnMore, this);
mOnboardingPager.setAdapter(mStepAdapter);
mDefaultConstraintLayout = findViewById(R.id.onboarding_default_variant);
mVariantYConstraintLayout = findViewById(R.id.onboarding_variant_y);
mBraveSplash = findViewById(R.id.brave_splash);
mBraveSplashContainer = findViewById(R.id.brave_splash_container);
assert !mIsTablet || mBraveSplashContainer != null
: "R.id.brave_splash_container must be declared on tablet layout.";
mIvLeafTop = findViewById(R.id.iv_leaf_top);
mIvLeafBottom = findViewById(R.id.iv_leaf_bottom);
mVLeafAlignTop = findViewById(R.id.view_leaf_top_align);
mVLeafAlignBottom = findViewById(R.id.view_leaf_bottom_align);
mIvBrave = findViewById(R.id.iv_brave);
mIvArrowDown = findViewById(R.id.iv_arrow_down);
mLayoutCard = findViewById(R.id.layout_card);
mTvCard = findViewById(R.id.tv_card);
mTvDefault = findViewById(R.id.tv_default);
mCheckboxCrash = findViewById(R.id.checkbox_crash);
mCheckboxP3a = findViewById(R.id.checkbox_p3a);
mBtnPositive = findViewById(R.id.btn_positive);
mBtnNegative = findViewById(R.id.btn_negative);
LinearLayout layoutData = findViewById(R.id.layout_data);
LayoutTransition layoutTransition = new LayoutTransition();
layoutTransition.setDuration(1000);
if (layoutData != null) {
layoutData.setLayoutTransition(layoutTransition);
}
int margin = mIsTablet ? 200 : 50;
if (mVLeafAlignTop != null) {
ViewGroup.MarginLayoutParams topLeafParams =
(ViewGroup.MarginLayoutParams) mVLeafAlignTop.getLayoutParams();
topLeafParams.bottomMargin = margin;
mVLeafAlignTop.setLayoutParams(topLeafParams);
}
if (mVLeafAlignBottom != null) {
ViewGroup.MarginLayoutParams bottomLeafParams =
(ViewGroup.MarginLayoutParams) mVLeafAlignBottom.getLayoutParams();
bottomLeafParams.topMargin = margin;
mVLeafAlignBottom.setLayoutParams(bottomLeafParams);
}
if (mBtnPositive != null) {
BraveTouchUtils.ensureMinTouchTarget(mBtnPositive);
}
if (mCheckboxCrash != null) {
BraveTouchUtils.ensureMinTouchTarget(mCheckboxCrash);
}
if (mCheckboxP3a != null) {
BraveTouchUtils.ensureMinTouchTarget(mCheckboxP3a);
}
if (mBtnPositive != null) {
mBtnPositive.setOnClickListener(
view -> {
if (mCurrentStep != 0 || !maybeRequestDefaultBrowser()) {
enableWebDiscoverPreference();
nextOnboardingStepForDefaultVariant();
}
});
}
if (mBtnNegative != null) {
mBtnNegative.setOnClickListener(
view -> {
if (mCurrentOnboardingPage
== CurrentOnboardingPage.ANALYTICS_CONSENT_PAGE) {
CustomTabActivity.showInfoPage(this, P3A_URL);
} else {
nextOnboardingStepForDefaultVariant();
}
});
}
checkReferral();
if (PackageUtils.isFirstInstall(this)) {
ChromeSharedPreferences.getInstance()
@@ -636,49 +302,27 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase
!PrivacyPreferencesManagerImpl.getInstance()
.isUsageAndCrashReportingPermittedByPolicy();
mDayZeroVariant = DayZeroHelper.getDayZeroVariant();
// Filter out day zero variants different from X and Y.
if (TextUtils.isEmpty(mDayZeroVariant)
|| (!mDayZeroVariant.equals(DAY_ZERO_VARIANT_Y)
&& !mDayZeroVariant.equals(DAY_ZERO_DEFAULT_VARIANT))) {
mDayZeroVariant = DAY_ZERO_DEFAULT_VARIANT;
if (!mIsCrashReportingManaged) {
final boolean isCrashReporting = getCrashReportingPreference();
mStepAdapter.setCrashReportingChecked(isCrashReporting);
} else {
mStepAdapter.setCrashReportingManaged(true);
}
if (isVariantY()) {
if (!mIsCrashReportingManaged) {
final boolean isCrashReporting = getCrashReportingPreference();
if (mVariantYAdapter != null) {
mVariantYAdapter.setCrashReportingChecked(isCrashReporting);
}
} else if (mVariantYAdapter != null) {
mVariantYAdapter.setCrashReportingManaged(true);
}
if (!mIsP3aManaged) {
final boolean isP3aEnabled = getP3aPreference();
if (mVariantYAdapter != null) {
mVariantYAdapter.setP3aChecked(isP3aEnabled);
}
} else if (mVariantYAdapter != null) {
mVariantYAdapter.setP3aManaged(true);
}
mVariantYConstraintLayout.setVisibility(View.VISIBLE);
if (mSplashAnimationFinished) {
if (mBraveSplashContainer != null) {
mBraveSplashContainer.setVisibility(View.GONE);
}
if (mVariantYPager != null) {
mVariantYPager.setCurrentItem(mRestoredVariantYPageIndex, false);
mVariantYPager.setVisibility(View.VISIBLE);
}
} else {
final AnimatedVectorDrawable vectorDrawable = getAnimatedVectorDrawable();
vectorDrawable.start();
}
if (!mIsP3aManaged) {
final boolean isP3aEnabled = getP3aPreference();
mStepAdapter.setP3aChecked(isP3aEnabled);
} else {
mDefaultConstraintLayout.setVisibility(View.VISIBLE);
nextOnboardingStepForDefaultVariant();
mStepAdapter.setP3aManaged(true);
}
if (mSplashAnimationFinished) {
if (mBraveSplashContainer != null) {
mBraveSplashContainer.setVisibility(View.GONE);
}
mOnboardingPager.setCurrentItem(mRestoredPageIndex, false);
mOnboardingPager.setVisibility(View.VISIBLE);
} else {
playAnimatedVectorDrawable();
}
}
@@ -686,9 +330,7 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(KEY_SPLASH_ANIMATION_FINISHED, mSplashAnimationFinished);
if (mVariantYPager != null) {
outState.putInt(KEY_VARIANT_Y_PAGE_INDEX, mVariantYPager.getCurrentItem());
}
outState.putInt(KEY_PAGE_INDEX, mOnboardingPager.getCurrentItem());
}
@Override
@@ -698,20 +340,13 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase
return;
}
mSplashAnimationFinished = state.getBoolean(KEY_SPLASH_ANIMATION_FINISHED, false);
mRestoredVariantYPageIndex = state.getInt(KEY_VARIANT_Y_PAGE_INDEX, 0);
mRestoredPageIndex = state.getInt(KEY_PAGE_INDEX, 0);
}
private boolean isDefaultVariant() {
return mDayZeroVariant.equals(DAY_ZERO_DEFAULT_VARIANT);
}
private boolean isVariantY() {
return mDayZeroVariant.equals(DAY_ZERO_VARIANT_Y);
}
private AnimatedVectorDrawable getAnimatedVectorDrawable() {
final AnimatedVectorDrawable result = (AnimatedVectorDrawable) mBraveSplash.getDrawable();
result.registerAnimationCallback(
private void playAnimatedVectorDrawable() {
final AnimatedVectorDrawable vectorDrawable =
(AnimatedVectorDrawable) mBraveSplash.getDrawable();
vectorDrawable.registerAnimationCallback(
new Animatable2.AnimationCallback() {
@Override
@@ -728,11 +363,11 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase
if (mIsTablet) {
fadeBraveSplashContainer();
} else {
animateBraveSplash(result);
animateBraveSplash(vectorDrawable);
}
}
});
return result;
vectorDrawable.start();
}
private boolean getCrashReportingPreference() {
@@ -763,19 +398,14 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase
return isP3aEnabled;
}
private void showVariantYPagerAfterSplash() {
if (mVariantYPager != null) {
mVariantYPager.setCurrentItem(isWDPSettingAvailable() ? 0 : 1, false);
mVariantYPager.setVisibility(View.VISIBLE);
}
private void showPagerAfterSplash() {
mOnboardingPager.setCurrentItem(isWDPSettingAvailable() ? 0 : 1, false);
mOnboardingPager.setVisibility(View.VISIBLE);
mSplashAnimationFinished = true;
maybeRequestDefaultBrowser();
}
private void fadeBraveSplashContainer() {
if (mBraveSplashContainer == null) {
return;
}
Animator animator =
AnimatorInflater.loadAnimator(
WelcomeOnboardingActivity.this, R.animator.ic_brave_splash_fade_out);
@@ -789,8 +419,8 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase
@Override
public void onAnimationEnd(@NonNull Animator animation) {
mBraveSplashContainer.setVisibility(View.GONE);
showVariantYPagerAfterSplash();
assumeNonNull(mBraveSplashContainer).setVisibility(View.GONE);
showPagerAfterSplash();
}
@Override
@@ -845,10 +475,7 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase
mSplashGuideline.getLayoutParams();
guidelineLayoutParams.guideBegin = Math.round(splashBottomPx);
mSplashGuideline.setLayoutParams(guidelineLayoutParams);
if (mBraveSplashContainer != null) {
mBraveSplashContainer.setVisibility(View.GONE);
}
showVariantYPagerAfterSplash();
showPagerAfterSplash();
}
@Override
@@ -864,15 +491,13 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase
.start();
}
private boolean maybeRequestDefaultBrowser() {
private void maybeRequestDefaultBrowser() {
if (isActivityFinishingOrDestroyed()) {
return false;
return;
}
if (!isBraveSetAsDefaultBrowser(this)) {
setDefaultBrowser(this);
return true;
}
return false;
}
@Override
@@ -885,18 +510,16 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase
if (position == 2) {
// If both settings are managed by policy, skip this page entirely
if (mIsP3aManaged && mIsCrashReportingManaged) {
finalStep(true);
finalStep();
return;
}
}
if (mPageBounceAnimator != null) {
mPageBounceAnimator.animateToPosition(position);
}
mPageBounceAnimator.animateToPosition(position);
}
@Override
public void onDismiss() {
finalStep(true);
finalStep();
}
@Override
@@ -31,7 +31,6 @@
<color name="onboarding_progressbar_secondary_bg">#212529</color>
<color name="onboarding_card_bg_color">#1E2029</color>
<color name="onboarding_card_text_color">#F0F2FF</color>
<color name="onboarding_negative_button_color">#A0A5EB</color>
<color name="scan_qr_code_text_color">#F0F2FF</color>
-1
View File
@@ -99,7 +99,6 @@
<color name="onboarding_welcome_text_color">#F0F2FF</color>
<color name="onboarding_card_bg_color">@android:color/white</color>
<color name="onboarding_card_text_color">#212529</color>
<color name="onboarding_negative_button_color">#4C54D2</color>
<color name="onboarding_search_highlight_color">#737ADE</color>
<color name="onboarding_arrow_color">#4D54D3</color>
@@ -21,8 +21,8 @@ import org.chromium.brave.browser.firstrun.R;
import org.chromium.build.annotations.NullMarked;
/**
* RecyclerView adapter for the variant-B onboarding ViewPager2, inflating one layout per step and
* delegating navigation requests to the host via {@link OnboardingNavigationListener}.
* RecyclerView adapter for the onboarding ViewPager2, inflating one layout per step and delegating
* navigation requests to the host via {@link OnboardingNavigationListener}.
*/
@NullMarked
public class OnboardingStepAdapter
@@ -123,7 +123,7 @@ public class OnboardingStepAdapter
mP3aManaged = managed;
}
abstract static class OnboardingBaseViewHolder extends RecyclerView.ViewHolder {
public abstract static class OnboardingBaseViewHolder extends RecyclerView.ViewHolder {
public OnboardingBaseViewHolder(View itemView) {
super(itemView);
@@ -50,11 +50,6 @@ public class PageBounceAnimator {
@Nullable private ValueAnimator mPageAnimator;
@Nullable private ValueAnimator mBounceAnimator;
/** Listener called when a page finishes settling. */
public interface OnPageShownListener {
void onPageShown(final int position);
}
/** Creates a new animator bound to the provided ViewPager2. */
public PageBounceAnimator(final ViewPager2 viewPager) {
mViewPager = viewPager;
@@ -138,11 +133,6 @@ public class PageBounceAnimator {
mPageAnimator.start();
}
/** Returns the adapter position of the currently snapped page. */
public int getCurrentPosition() {
return mViewPager.getCurrentItem();
}
private void playBounce(final int targetPosition) {
if (mBounceAnimator != null && mBounceAnimator.isRunning()) {
mBounceAnimator.cancel();
@@ -753,24 +753,12 @@ This file contains all "about" strings. It is set to NOT be translated, in tran
</message>
<!-- Onboarding strings -->
<message name="IDS_PRIVACY_ONBOARDING" desc="Text for privacy onboarding">
Privacy. Made simple.
</message>
<message name="IDS_ONBOARDING_SET_DEFAULT" desc="Text for set default onboarding">
With Brave as default, every link you tap opens with Brave's privacy protections.
</message>
<message name="IDS_P3A_TITLE" desc="Text for p3a title onboarding">
Help make Brave better
</message>
<message name="IDS_P3A_SUBTITLE" desc="Text for p3a subtitle onboarding">
Let us know which features you're enjoying the most.
</message>
<message name="IDS_P3A_CRASH" desc="Text for p3a crash onboarding">
Send diagnostic reports if you experience a crash or freeze.
</message>
<message name="IDS_P3A_INSIGHTS" desc="Text for p3a insights onboarding">
Share private and anonymous product insights about what features are being used by Brave's users.
</message>
<message name="IDS_WDP_TITLE" desc="Text for WDP title onboarding">
Help Brave Search grow
</message>
@@ -783,21 +771,6 @@ This file contains all "about" strings. It is set to NOT be translated, in tran
<message name="IDS_BRAVE_ONBOARDING_SPLASH_LOGO_DESCRIPTION" desc="Accessibility description for the onboarding splash logo">
Brave logo
</message>
<message name="IDS_BRAVE_ONBOARDING_BACKGROUND_DESCRIPTION" desc="Accessibility description for the onboarding background image">
Onboarding background
</message>
<message name="IDS_BRAVE_ONBOARDING_TOP_LEAF_DESCRIPTION" desc="Accessibility description for the onboarding top leaf decoration">
Top leaf decoration
</message>
<message name="IDS_BRAVE_ONBOARDING_BOTTOM_LEAF_DESCRIPTION" desc="Accessibility description for the onboarding bottom leaf decoration">
Bottom leaf decoration
</message>
<message name="IDS_BRAVE_ONBOARDING_ARROW_DOWN_DESCRIPTION" desc="Accessibility description for the onboarding down arrow">
Scroll down
</message>
<message name="IDS_BRAVE_ONBOARDING_LOGO_DESCRIPTION" desc="Accessibility description for the onboarding Brave logo">
Brave logo
</message>
<message name="IDS_BRAVE_ONBOARDING_HELP_BRAVE_SEARCH_ILLUSTRATION_DESCRIPTION" desc="Accessibility description for the help Brave Search onboarding illustration">
Help Brave Search illustration
</message>
@@ -843,9 +816,6 @@ This file contains all "about" strings. It is set to NOT be translated, in tran
<message name="IDS_SKIP" desc="Text for skip button in onboarding">
Skip
</message>
<message name="IDS_LEARN_MORE_ONBOARDING" desc="Text for learn more button onboarding">
Learn more
</message>
<message name="IDS_TROUBLESHOOTING_ONBOARDING" desc="Text for trouble shooting page for onboarding">
Troubleshooting onboarding
</message>