Skip to content

Commit add5e19

Browse files
authored
Merge pull request #27239 from brave/remove_lion_animation_onboarding
Remove lion animation onboarding
2 parents 20cf651 + fe7033f commit add5e19

File tree

3 files changed

+42
-85
lines changed

3 files changed

+42
-85
lines changed

android/java/org/chromium/chrome/browser/firstrun/WelcomeOnboardingActivity.java

+41-71
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,9 @@
99

1010
import static org.chromium.ui.base.ViewUtils.dpToPx;
1111

12-
import android.Manifest;
1312
import android.animation.LayoutTransition;
1413
import android.content.Intent;
15-
import android.os.Build;
1614
import android.os.Bundle;
17-
import android.os.Handler;
1815
import android.os.RemoteException;
1916
import android.view.View;
2017
import android.view.ViewGroup;
@@ -35,15 +32,13 @@
3532
import com.android.installreferrer.api.InstallReferrerStateListener;
3633
import com.android.installreferrer.api.ReferrerDetails;
3734

38-
import org.chromium.base.BraveFeatureList;
3935
import org.chromium.base.BravePreferenceKeys;
4036
import org.chromium.base.Log;
4137
import org.chromium.base.ThreadUtils;
4238
import org.chromium.chrome.R;
4339
import org.chromium.chrome.browser.BraveLocalState;
4440
import org.chromium.chrome.browser.back_press.SecondaryActivityBackPressUma.SecondaryActivity;
4541
import org.chromium.chrome.browser.customtabs.CustomTabActivity;
46-
import org.chromium.chrome.browser.flags.ChromeFeatureList;
4742
import org.chromium.chrome.browser.metrics.ChangeMetricsReportingStateCalledFrom;
4843
import org.chromium.chrome.browser.metrics.UmaSessionStats;
4944
import org.chromium.chrome.browser.onboarding.OnboardingPrefManager;
@@ -60,18 +55,23 @@
6055
import java.util.Locale;
6156

6257
/**
63-
* This is on boarding activity
64-
* */
58+
* Activity that handles the first run onboarding experience for new Brave browser installations.
59+
* Extends FirstRunActivityBase to provide onboarding flows for: - Setting Brave as default browser
60+
* - Configuring privacy and analytics preferences (P3A and crash reporting) - Accepting terms of
61+
* service The activity guides users through a series of steps using animations and clear UI
62+
* elements to explain Brave's key features and privacy-focused approach.
63+
*/
6564
public class WelcomeOnboardingActivity extends FirstRunActivityBase {
66-
// mInitializeViewsDone and mInvokePostWorkAtInitializeViews are accessed
67-
// from the same thread, so no need to use extra locks
6865
private static final String P3A_URL =
6966
"https://support.brave.com/hc/en-us/articles/9140465918093-What-is-P3A-in-Brave";
7067

7168
private static final String TAG = "WelcomeOnboarding";
7269

70+
// mInitializeViewsDone and mInvokePostWorkAtInitializeViews are accessed
71+
// from the same thread, so no need to use extra locks
7372
private boolean mInitializeViewsDone;
7473
private boolean mInvokePostWorkAtInitializeViews;
74+
7575
private boolean mIsTablet;
7676
private BraveFirstRunFlowSequencer mFirstRunFlowSequencer;
7777
private int mCurrentStep = -1;
@@ -83,29 +83,37 @@ public class WelcomeOnboardingActivity extends FirstRunActivityBase {
8383
private ImageView mIvBrave;
8484
private ImageView mIvArrowDown;
8585
private LinearLayout mLayoutCard;
86-
private TextView mTvWelcome;
8786
private TextView mTvCard;
8887
private TextView mTvDefault;
8988
private Button mBtnPositive;
9089
private Button mBtnNegative;
9190
private CheckBox mCheckboxCrash;
9291
private CheckBox mCheckboxP3a;
9392

93+
/**
94+
* Initializes the views and sets up the onboarding activity UI. This method handles the initial
95+
* setup of the welcome onboarding screen, including loading the layout, initializing views and
96+
* click listeners, and performing first-run setup tasks.
97+
*/
9498
private void initializeViews() {
9599
assert !mInitializeViewsDone;
100+
96101
setContentView(R.layout.activity_welcome_onboarding);
97102

98103
mIsTablet = DeviceFormFactor.isNonMultiDisplayContextOnTablet(this);
99104

100105
initViews();
106+
101107
onClickViews();
102108

103109
mInitializeViewsDone = true;
110+
104111
if (mInvokePostWorkAtInitializeViews) {
105112
finishNativeInitializationPostWork();
106113
}
107114

108115
checkReferral();
116+
109117
maybeUpdateFirstRunDefaultValues();
110118
}
111119

@@ -166,7 +174,6 @@ private void initViews() {
166174
mIvBrave = findViewById(R.id.iv_brave);
167175
mIvArrowDown = findViewById(R.id.iv_arrow_down);
168176
mLayoutCard = findViewById(R.id.layout_card);
169-
mTvWelcome = findViewById(R.id.tv_welcome);
170177
mTvCard = findViewById(R.id.tv_card);
171178
mTvDefault = findViewById(R.id.tv_default);
172179
mCheckboxCrash = findViewById(R.id.checkbox_crash);
@@ -211,7 +218,7 @@ private void onClickViews() {
211218
if (mBtnPositive != null) {
212219
mBtnPositive.setOnClickListener(
213220
view -> {
214-
if (mCurrentStep == 1 && !isDefaultBrowser()) {
221+
if (mCurrentStep == 0 && !isDefaultBrowser()) {
215222
setDefaultBrowserAndProceedToNextStep();
216223
} else {
217224
nextOnboardingStep();
@@ -232,11 +239,7 @@ private void onClickViews() {
232239
}
233240

234241
private boolean shouldForceDefaultBrowserPrompt() {
235-
return isNewOnboardingEnabled() && !isDefaultBrowser();
236-
}
237-
238-
private boolean isNewOnboardingEnabled() {
239-
return ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_NEW_ANDROID_ONBOARDING);
242+
return !isDefaultBrowser();
240243
}
241244

242245
private void setDefaultBrowserAndProceedToNextStep() {
@@ -251,82 +254,46 @@ private boolean isDefaultBrowser() {
251254
return BraveSetDefaultBrowserUtils.isBraveSetAsDefaultBrowser(this);
252255
}
253256

254-
private void startTimer(int delayMillis) {
255-
new Handler().postDelayed(this::nextOnboardingStep, delayMillis);
256-
}
257-
258-
ActivityResultLauncher<String> mRequestPermissionLauncher = registerForActivityResult(
259-
new ActivityResultContracts.RequestPermission(), isGranted -> { startTimer(3000); });
257+
ActivityResultLauncher<String> mRequestPermissionLauncher =
258+
registerForActivityResult(
259+
new ActivityResultContracts.RequestPermission(),
260+
isGranted -> {
261+
nextOnboardingStep();
262+
});
260263

261264
private void nextOnboardingStep() {
262265
if (isActivityFinishingOrDestroyed()) return;
263266

264267
mCurrentStep++;
265268
if (mCurrentStep == 0) {
266-
showIntroPage();
267-
} else if (mCurrentStep == 1) {
268-
if (!isNewOnboardingEnabled()
269-
|| !BraveSetDefaultBrowserUtils.supportsDefaultRoleManager()) {
269+
if (!BraveSetDefaultBrowserUtils.supportsDefaultRoleManager()) {
270+
mIvBrave.setVisibility(View.VISIBLE);
270271
showBrowserSelectionPage();
271272
} else if (!isDefaultBrowser()) {
272273
setDefaultBrowserAndProceedToNextStep();
273274
} else {
274275
nextOnboardingStep();
275276
}
276277
} else if (mCurrentStep == getAnalyticsConsentPageStep()) {
278+
mIvBrave.setVisibility(View.VISIBLE);
277279
showAnalyticsConsentPage();
278280
} else {
279281
OnboardingPrefManager.getInstance().setP3aOnboardingShown(true);
280282
OnboardingPrefManager.getInstance().setOnboardingSearchBoxTooltip(true);
283+
281284
FirstRunStatus.setFirstRunFlowComplete(true);
285+
282286
ChromeSharedPreferences.getInstance()
283287
.writeBoolean(ChromePreferenceKeys.FIRST_RUN_CACHED_TOS_ACCEPTED, true);
284288
FirstRunUtils.setEulaAccepted();
289+
285290
finish();
286291
sendFirstRunCompletePendingIntent();
287292
}
288293
}
289294

290295
private int getAnalyticsConsentPageStep() {
291-
return 2;
292-
}
293-
294-
private void showIntroPage() {
295-
int margin = mIsTablet ? 100 : 0;
296-
setLeafAnimation(mVLeafAlignTop, mIvLeafTop, 1f, margin, true);
297-
setLeafAnimation(mVLeafAlignBottom, mIvLeafBottom, 1f, margin, false);
298-
if (mTvWelcome != null) {
299-
mTvWelcome
300-
.animate()
301-
.alpha(1f)
302-
.setDuration(200)
303-
.withEndAction(() -> mTvWelcome.setVisibility(View.VISIBLE));
304-
}
305-
if (mIvBrave != null) {
306-
mIvBrave.animate().scaleX(0.8f).scaleY(0.8f).setDuration(1000);
307-
}
308-
new Handler()
309-
.postDelayed(
310-
new Runnable() {
311-
@Override
312-
public void run() {
313-
if (mTvWelcome != null) {
314-
mTvWelcome
315-
.animate()
316-
.translationYBy(
317-
-dpToPx(WelcomeOnboardingActivity.this, 20))
318-
.setDuration(3000)
319-
.start();
320-
}
321-
}
322-
},
323-
200);
324-
325-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && !isNewOnboardingEnabled()) {
326-
mRequestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS);
327-
} else {
328-
startTimer(3000);
329-
}
296+
return 1;
330297
}
331298

332299
private void showBrowserSelectionPage() {
@@ -342,9 +309,6 @@ private void showBrowserSelectionPage() {
342309
mBtnNegative.setVisibility(View.GONE);
343310
}
344311
}
345-
if (mTvWelcome != null) {
346-
mTvWelcome.setVisibility(View.GONE);
347-
}
348312
if (mLayoutCard != null) {
349313
mLayoutCard.setVisibility(View.VISIBLE);
350314
}
@@ -388,24 +352,30 @@ private void showAnalyticsConsentPage() {
388352
mBtnNegative.setVisibility(View.VISIBLE);
389353
}
390354

355+
// Handle crash reporting consent based on installation status
391356
if (PackageUtils.isFirstInstall(this)
392357
&& !OnboardingPrefManager.getInstance().isP3aCrashReportingMessageShown()) {
358+
// For first time installs, enable crash reporting by default
393359
if (mCheckboxCrash != null) {
394360
mCheckboxCrash.setChecked(true);
395361
}
362+
// Update metrics reporting consent
396363
UmaSessionStats.changeMetricsReportingConsent(
397364
true, ChangeMetricsReportingStateCalledFrom.UI_FIRST_RUN);
365+
// Mark crash reporting message as shown
398366
OnboardingPrefManager.getInstance().setP3aCrashReportingMessageShown(true);
399367
} else {
368+
// For existing installations, restore previous crash reporting preference
400369
boolean isCrashReporting = false;
401370
try {
371+
// Get current crash reporting permission status
402372
isCrashReporting =
403373
PrivacyPreferencesManagerImpl.getInstance()
404374
.isUsageAndCrashReportingPermittedByUser();
405-
406375
} catch (Exception e) {
407376
Log.e(TAG, "isCrashReportingOnboarding: " + e.getMessage());
408377
}
378+
// Update checkbox to match current preference
409379
if (mCheckboxCrash != null) {
410380
mCheckboxCrash.setChecked(isCrashReporting);
411381
}
@@ -525,7 +495,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
525495

526496
private void finishNativeInitializationPostWork() {
527497
assert mInitializeViewsDone;
528-
startTimer(1000);
498+
nextOnboardingStep();
529499
}
530500

531501
@Override

android/java/res/layout/activity_welcome_onboarding.xml

+1-11
Original file line numberDiff line numberDiff line change
@@ -67,17 +67,6 @@
6767
android:layout_height="wrap_content"
6868
android:gravity="center"
6969
android:orientation="vertical">
70-
71-
<TextView
72-
android:id="@+id/tv_welcome"
73-
android:layout_width="match_parent"
74-
android:layout_height="wrap_content"
75-
android:gravity="center"
76-
android:textSize="24sp"
77-
android:alpha="0"
78-
android:visibility="gone"
79-
android:textColor="@color/onboarding_welcome_text_color"
80-
android:text="@string/welcome_to_brave"/>
8170

8271
<LinearLayout
8372
android:id="@+id/layout_card"
@@ -182,6 +171,7 @@
182171
android:adjustViewBounds="true"
183172
android:layout_gravity="center_horizontal"
184173
android:contentDescription="@null"
174+
android:visibility="gone"
185175
android:src="@drawable/ic_brave_onboarding"/>
186176

187177
</LinearLayout>

browser/ui/android/strings/android_brave_strings.grd

-3
Original file line numberDiff line numberDiff line change
@@ -881,9 +881,6 @@ This file contains all "about" strings. It is set to NOT be translated, in tran
881881
</message>
882882

883883
<!-- Onboarding strings -->
884-
<message name="IDS_WELCOME_TO_BRAVE" desc="Text for welcome onboarding">
885-
Welcome to Brave
886-
</message>
887884
<message name="IDS_PRIVACY_ONBOARDING" desc="Text for privacy onboarding">
888885
Privacy. Made simple.
889886
</message>

0 commit comments

Comments
 (0)