Index: chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java |
index 3c4c4f53cee4271ac3a1456b9f90aac43428426a..858c51b56d01bc0eda192f3d2159f638f4c6c012 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/ToSAndUMAFirstRunFragment.java |
@@ -31,6 +31,10 @@ public class ToSAndUMAFirstRunFragment extends FirstRunPage { |
private Button mAcceptButton; |
private CheckBox mSendReportCheckBox; |
private TextView mTosAndPrivacy; |
+ private View mTitle; |
+ private View mProgressSpinner; |
+ private boolean mNativeInitialized; |
+ private boolean mTriggerAcceptAfterNativeInit; |
@Override |
public View onCreateView( |
@@ -42,6 +46,9 @@ public class ToSAndUMAFirstRunFragment extends FirstRunPage { |
public void onViewCreated(View view, Bundle savedInstanceState) { |
super.onViewCreated(view, savedInstanceState); |
+ mTitle = view.findViewById(R.id.title); |
+ mProgressSpinner = view.findViewById(R.id.progress_spinner); |
+ mProgressSpinner.setVisibility(View.GONE); |
mAcceptButton = (Button) view.findViewById(R.id.terms_accept); |
mSendReportCheckBox = (CheckBox) view.findViewById(R.id.send_report_checkbox); |
mTosAndPrivacy = (TextView) view.findViewById(R.id.tos_and_privacy); |
@@ -49,7 +56,7 @@ public class ToSAndUMAFirstRunFragment extends FirstRunPage { |
mAcceptButton.setOnClickListener(new OnClickListener() { |
@Override |
public void onClick(View v) { |
- getPageDelegate().acceptTermsOfService(mSendReportCheckBox.isChecked()); |
+ acceptTermsOfService(); |
} |
}); |
@@ -87,12 +94,22 @@ public class ToSAndUMAFirstRunFragment extends FirstRunPage { |
mTosAndPrivacy.setText(SpanApplier.applySpans(getString(R.string.fre_tos_and_privacy), |
new SpanInfo("<LINK1>", "</LINK1>", clickableTermsSpan), |
new SpanInfo("<LINK2>", "</LINK2>", clickablePrivacySpan))); |
+ |
+ // If this page should be skipped, hide all the UI elements except for the |
+ // Chrome logo and the spinner. |
+ if (FirstRunStatus.shouldSkipWelcomePage()) { |
+ setSpinnerVisible(true); |
+ } |
} |
@Override |
public void setUserVisibleHint(boolean isVisibleToUser) { |
super.setUserVisibleHint(isVisibleToUser); |
- if (isVisibleToUser && mSendReportCheckBox != null) { |
+ |
+ if (!isVisibleToUser) { |
+ // Restore original enabled & visibility states, in case the user returns to the page. |
+ setSpinnerVisible(false); |
+ } else if (mSendReportCheckBox != null) { |
// On certain versions of Android, the checkbox will appear unchecked upon revisiting |
// the page. Force it to the end state of the drawable animation as a work around. |
// crbug.com/666258 |
@@ -104,4 +121,42 @@ public class ToSAndUMAFirstRunFragment extends FirstRunPage { |
public boolean shouldSkipPageOnCreate(Context appContext) { |
return FirstRunStatus.shouldSkipWelcomePage(); |
} |
+ |
+ @Override |
+ public boolean shouldRecreatePageOnDataChange() { |
+ // Specify that this page shouldn't be re-created on notifyDataSetChanged(), so |
+ // that state like mTriggerAcceptAfterNativeInit can be preserved on the instance |
+ // when native is initialized. |
+ return false; |
+ } |
+ |
+ @Override |
+ protected void onNativeInitialized() { |
+ assert !mNativeInitialized; |
+ |
+ mNativeInitialized = true; |
+ if (mTriggerAcceptAfterNativeInit) acceptTermsOfService(); |
+ } |
+ |
+ private void acceptTermsOfService() { |
+ if (!mNativeInitialized) { |
+ mTriggerAcceptAfterNativeInit = true; |
+ setSpinnerVisible(true); |
+ return; |
+ } |
+ |
+ mTriggerAcceptAfterNativeInit = false; |
+ getPageDelegate().acceptTermsOfService(mSendReportCheckBox.isChecked()); |
+ } |
+ |
+ private void setSpinnerVisible(boolean spinnerVisible) { |
+ // When the progress spinner is visibile, we hide the other UI elements so that |
+ // the user can't interact with them. |
+ int otherElementsVisible = spinnerVisible ? View.INVISIBLE : View.VISIBLE; |
+ mTitle.setVisibility(otherElementsVisible); |
+ mAcceptButton.setVisibility(otherElementsVisible); |
+ mTosAndPrivacy.setVisibility(otherElementsVisible); |
+ mSendReportCheckBox.setVisibility(otherElementsVisible); |
+ mProgressSpinner.setVisibility(spinnerVisible ? View.VISIBLE : View.GONE); |
+ } |
} |