| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.firstrun; | 5 package org.chromium.chrome.browser.firstrun; |
| 6 | 6 |
| 7 import android.content.Context; | 7 import android.content.Context; |
| 8 import android.os.Bundle; | 8 import android.os.Bundle; |
| 9 import android.text.method.LinkMovementMethod; | 9 import android.text.method.LinkMovementMethod; |
| 10 import android.view.LayoutInflater; | 10 import android.view.LayoutInflater; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 | 24 |
| 25 /** | 25 /** |
| 26 * The First Run Experience fragment that allows the user to accept Terms of Ser
vice ("ToS") and | 26 * The First Run Experience fragment that allows the user to accept Terms of Ser
vice ("ToS") and |
| 27 * Privacy Notice, and to opt-in to the usage statistics and crash reports colle
ction ("UMA", | 27 * Privacy Notice, and to opt-in to the usage statistics and crash reports colle
ction ("UMA", |
| 28 * User Metrics Analysis) as defined in the Chrome Privacy Notice. | 28 * User Metrics Analysis) as defined in the Chrome Privacy Notice. |
| 29 */ | 29 */ |
| 30 public class ToSAndUMAFirstRunFragment extends FirstRunPage { | 30 public class ToSAndUMAFirstRunFragment extends FirstRunPage { |
| 31 private Button mAcceptButton; | 31 private Button mAcceptButton; |
| 32 private CheckBox mSendReportCheckBox; | 32 private CheckBox mSendReportCheckBox; |
| 33 private TextView mTosAndPrivacy; | 33 private TextView mTosAndPrivacy; |
| 34 private View mTitle; |
| 35 private View mProgressSpinner; |
| 36 private boolean mNativeInitialized; |
| 37 private boolean mTriggerAcceptAfterNativeInit; |
| 34 | 38 |
| 35 @Override | 39 @Override |
| 36 public View onCreateView( | 40 public View onCreateView( |
| 37 LayoutInflater inflater, ViewGroup container, Bundle savedInstanceSt
ate) { | 41 LayoutInflater inflater, ViewGroup container, Bundle savedInstanceSt
ate) { |
| 38 return inflater.inflate(R.layout.fre_tosanduma, container, false); | 42 return inflater.inflate(R.layout.fre_tosanduma, container, false); |
| 39 } | 43 } |
| 40 | 44 |
| 41 @Override | 45 @Override |
| 42 public void onViewCreated(View view, Bundle savedInstanceState) { | 46 public void onViewCreated(View view, Bundle savedInstanceState) { |
| 43 super.onViewCreated(view, savedInstanceState); | 47 super.onViewCreated(view, savedInstanceState); |
| 44 | 48 |
| 49 mTitle = view.findViewById(R.id.title); |
| 50 mProgressSpinner = view.findViewById(R.id.progress_spinner); |
| 51 mProgressSpinner.setVisibility(View.GONE); |
| 45 mAcceptButton = (Button) view.findViewById(R.id.terms_accept); | 52 mAcceptButton = (Button) view.findViewById(R.id.terms_accept); |
| 46 mSendReportCheckBox = (CheckBox) view.findViewById(R.id.send_report_chec
kbox); | 53 mSendReportCheckBox = (CheckBox) view.findViewById(R.id.send_report_chec
kbox); |
| 47 mTosAndPrivacy = (TextView) view.findViewById(R.id.tos_and_privacy); | 54 mTosAndPrivacy = (TextView) view.findViewById(R.id.tos_and_privacy); |
| 48 | 55 |
| 49 mAcceptButton.setOnClickListener(new OnClickListener() { | 56 mAcceptButton.setOnClickListener(new OnClickListener() { |
| 50 @Override | 57 @Override |
| 51 public void onClick(View v) { | 58 public void onClick(View v) { |
| 52 getPageDelegate().acceptTermsOfService(mSendReportCheckBox.isChe
cked()); | 59 acceptTermsOfService(); |
| 53 } | 60 } |
| 54 }); | 61 }); |
| 55 | 62 |
| 56 if (ChromeVersionInfo.isOfficialBuild()) { | 63 if (ChromeVersionInfo.isOfficialBuild()) { |
| 57 int paddingStart = getResources().getDimensionPixelSize( | 64 int paddingStart = getResources().getDimensionPixelSize( |
| 58 R.dimen.fre_tos_checkbox_padding); | 65 R.dimen.fre_tos_checkbox_padding); |
| 59 ApiCompatibilityUtils.setPaddingRelative(mSendReportCheckBox, | 66 ApiCompatibilityUtils.setPaddingRelative(mSendReportCheckBox, |
| 60 ApiCompatibilityUtils.getPaddingStart(mSendReportCheckBox) +
paddingStart, | 67 ApiCompatibilityUtils.getPaddingStart(mSendReportCheckBox) +
paddingStart, |
| 61 mSendReportCheckBox.getPaddingTop(), | 68 mSendReportCheckBox.getPaddingTop(), |
| 62 ApiCompatibilityUtils.getPaddingEnd(mSendReportCheckBox), | 69 ApiCompatibilityUtils.getPaddingEnd(mSendReportCheckBox), |
| (...skipping 17 matching lines...) Expand all Loading... |
| 80 NoUnderlineClickableSpan clickablePrivacySpan = new NoUnderlineClickable
Span() { | 87 NoUnderlineClickableSpan clickablePrivacySpan = new NoUnderlineClickable
Span() { |
| 81 @Override | 88 @Override |
| 82 public void onClick(View widget) { | 89 public void onClick(View widget) { |
| 83 if (!isAdded()) return; | 90 if (!isAdded()) return; |
| 84 getPageDelegate().showInfoPage(R.string.chrome_privacy_notice_ur
l); | 91 getPageDelegate().showInfoPage(R.string.chrome_privacy_notice_ur
l); |
| 85 } | 92 } |
| 86 }; | 93 }; |
| 87 mTosAndPrivacy.setText(SpanApplier.applySpans(getString(R.string.fre_tos
_and_privacy), | 94 mTosAndPrivacy.setText(SpanApplier.applySpans(getString(R.string.fre_tos
_and_privacy), |
| 88 new SpanInfo("<LINK1>", "</LINK1>", clickableTermsSpan), | 95 new SpanInfo("<LINK1>", "</LINK1>", clickableTermsSpan), |
| 89 new SpanInfo("<LINK2>", "</LINK2>", clickablePrivacySpan))); | 96 new SpanInfo("<LINK2>", "</LINK2>", clickablePrivacySpan))); |
| 97 |
| 98 // If this page should be skipped, hide all the UI elements except for t
he |
| 99 // Chrome logo and the spinner. |
| 100 if (FirstRunStatus.shouldSkipWelcomePage()) { |
| 101 setSpinnerVisible(true); |
| 102 } |
| 90 } | 103 } |
| 91 | 104 |
| 92 @Override | 105 @Override |
| 93 public void setUserVisibleHint(boolean isVisibleToUser) { | 106 public void setUserVisibleHint(boolean isVisibleToUser) { |
| 94 super.setUserVisibleHint(isVisibleToUser); | 107 super.setUserVisibleHint(isVisibleToUser); |
| 95 if (isVisibleToUser && mSendReportCheckBox != null) { | 108 |
| 109 if (!isVisibleToUser) { |
| 110 // Restore original enabled & visibility states, in case the user re
turns to the page. |
| 111 setSpinnerVisible(false); |
| 112 } else if (mSendReportCheckBox != null) { |
| 96 // On certain versions of Android, the checkbox will appear unchecke
d upon revisiting | 113 // On certain versions of Android, the checkbox will appear unchecke
d upon revisiting |
| 97 // the page. Force it to the end state of the drawable animation as
a work around. | 114 // the page. Force it to the end state of the drawable animation as
a work around. |
| 98 // crbug.com/666258 | 115 // crbug.com/666258 |
| 99 mSendReportCheckBox.jumpDrawablesToCurrentState(); | 116 mSendReportCheckBox.jumpDrawablesToCurrentState(); |
| 100 } | 117 } |
| 101 } | 118 } |
| 102 | 119 |
| 103 @Override | 120 @Override |
| 104 public boolean shouldSkipPageOnCreate(Context appContext) { | 121 public boolean shouldSkipPageOnCreate(Context appContext) { |
| 105 return FirstRunStatus.shouldSkipWelcomePage(); | 122 return FirstRunStatus.shouldSkipWelcomePage(); |
| 106 } | 123 } |
| 124 |
| 125 @Override |
| 126 public boolean shouldRecreatePageOnDataChange() { |
| 127 // Specify that this page shouldn't be re-created on notifyDataSetChange
d(), so |
| 128 // that state like mTriggerAcceptAfterNativeInit can be preserved on the
instance |
| 129 // when native is initialized. |
| 130 return false; |
| 131 } |
| 132 |
| 133 @Override |
| 134 protected void onNativeInitialized() { |
| 135 assert !mNativeInitialized; |
| 136 |
| 137 mNativeInitialized = true; |
| 138 if (mTriggerAcceptAfterNativeInit) acceptTermsOfService(); |
| 139 } |
| 140 |
| 141 private void acceptTermsOfService() { |
| 142 if (!mNativeInitialized) { |
| 143 mTriggerAcceptAfterNativeInit = true; |
| 144 setSpinnerVisible(true); |
| 145 return; |
| 146 } |
| 147 |
| 148 mTriggerAcceptAfterNativeInit = false; |
| 149 getPageDelegate().acceptTermsOfService(mSendReportCheckBox.isChecked()); |
| 150 } |
| 151 |
| 152 private void setSpinnerVisible(boolean spinnerVisible) { |
| 153 // When the progress spinner is visibile, we hide the other UI elements
so that |
| 154 // the user can't interact with them. |
| 155 int otherElementsVisible = spinnerVisible ? View.INVISIBLE : View.VISIBL
E; |
| 156 mTitle.setVisibility(otherElementsVisible); |
| 157 mAcceptButton.setVisibility(otherElementsVisible); |
| 158 mTosAndPrivacy.setVisibility(otherElementsVisible); |
| 159 mSendReportCheckBox.setVisibility(otherElementsVisible); |
| 160 mProgressSpinner.setVisibility(spinnerVisible ? View.VISIBLE : View.GONE
); |
| 161 } |
| 107 } | 162 } |
| OLD | NEW |