Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add p3a UI android #7550

Merged
merged 5 commits into from
Jan 11, 2021
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions android/brave_java_resources.gni
Original file line number Diff line number Diff line change
Expand Up @@ -614,6 +614,7 @@ brave_java_resources = [
"java/res/drawable/brave_badge_rewards_background_small.xml",
"java/res/drawable/brave_badge_shields_background_large.xml",
"java/res/drawable/brave_badge_shields_background_small.xml",
"java/res/drawable/brave_checkbox.xml",
"java/res/drawable/brave_gradient_shadow.xml",
"java/res/drawable/brave_modern_toolbar_text_box_background.xml",
"java/res/drawable/brave_rewards_circle.xml",
Expand Down Expand Up @@ -649,8 +650,11 @@ brave_java_resources = [
"java/res/drawable/ic_back.xml",
"java/res/drawable/ic_bat.xml",
"java/res/drawable/ic_binance.xml",
"java/res/drawable/ic_brave_logo.xml",
"java/res/drawable/ic_brave_rewards_widget.xml",
"java/res/drawable/ic_btc.xml",
"java/res/drawable/ic_checkbox_filled.xml",
"java/res/drawable/ic_checkbox_outline.xml",
"java/res/drawable/ic_chevron_left.xml",
"java/res/drawable/ic_chevron_right.xml",
"java/res/drawable/ic_clock.xml",
Expand All @@ -671,6 +675,8 @@ brave_java_resources = [
"java/res/drawable/ic_polygon_1.xml",
"java/res/drawable/ic_shield_done_filled.xml",
"java/res/drawable/ic_sort.xml",
"java/res/drawable/ic_spot_graphic.xml",
"java/res/drawable/ic_spot_graphic_dark.xml",
"java/res/drawable/ic_stats_icon.xml",
"java/res/drawable/ic_thank_you.xml",
"java/res/drawable/ic_toggle_down.xml",
Expand Down Expand Up @@ -716,6 +722,7 @@ brave_java_resources = [
"java/res/layout-land/verify_wallet_activity.xml",
"java/res/layout/activity_ntp_widget_stack.xml",
"java/res/layout/activity_onboarding.xml",
"java/res/layout/activity_p3a_onboarding.xml",
"java/res/layout/binance_deposit_item.xml",
"java/res/layout/binance_deposit_layout.xml",
"java/res/layout/binance_spinner_dropdown_item.xml",
Expand Down
1 change: 1 addition & 0 deletions android/brave_java_sources.gni
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ brave_java_sources = [
"../../brave/android/java/org/chromium/chrome/browser/onboarding/OnboardingActivity.java",
"../../brave/android/java/org/chromium/chrome/browser/onboarding/OnboardingPrefManager.java",
"../../brave/android/java/org/chromium/chrome/browser/onboarding/OnboardingViewPagerAdapter.java",
"../../brave/android/java/org/chromium/chrome/browser/onboarding/P3aOnboardingActivity.java",
"../../brave/android/java/org/chromium/chrome/browser/onboarding/SearchActivity.java",
"../../brave/android/java/org/chromium/chrome/browser/onboarding/SearchEngineEnum.java",
"../../brave/android/java/org/chromium/chrome/browser/onboarding/SearchEngineOnboardingFragment.java",
Expand Down
7 changes: 5 additions & 2 deletions android/java/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,12 @@
<activity
android:name="org.chromium.chrome.browser.onboarding.SearchActivity"
android:theme="@style/Theme.Chromium.Activity.Fullscreen"
android:screenOrientation="sensorPortrait">
android:screenOrientation="sensorPortrait"/>

</activity>
<activity
android:name="org.chromium.chrome.browser.onboarding.P3aOnboardingActivity"
android:theme="@style/Theme.Chromium.Activity.Fullscreen"
android:screenOrientation="sensorPortrait"/>

<activity
android:name="org.chromium.chrome.browser.ntp.widget.NTPWidgetStackActivity"
Expand Down
18 changes: 7 additions & 11 deletions android/java/org/chromium/chrome/browser/app/BraveActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.onboarding.OnboardingActivity;
import org.chromium.chrome.browser.onboarding.OnboardingPrefManager;
import org.chromium.chrome.browser.onboarding.P3aOnboardingActivity;
import org.chromium.chrome.browser.onboarding.v2.HighlightDialogFragment;
import org.chromium.chrome.browser.preferences.BravePrefServiceBridge;
import org.chromium.chrome.browser.preferences.BravePreferenceKeys;
Expand Down Expand Up @@ -113,6 +114,7 @@ public abstract class BraveActivity<C extends ChromeActivityComponent> extends C
public static final String REWARDS_LEARN_MORE_URL = "https://brave.com/faq-rewards/#unclaimed-funds";
public static final String BRAVE_TERMS_PAGE =
"https://basicattentiontoken.org/user-terms-of-service/";
public static final String P3A_URL = "https://brave.com/p3a";
public static final String BRAVE_PRIVACY_POLICY = "https://brave.com/privacy/#rewards";
private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit";
public static final String OPEN_URL = "open_url";
Expand Down Expand Up @@ -309,20 +311,14 @@ public void finishNativeInitialization() {
BraveSyncReflectionUtils.showInformers();

if (BraveConfig.P3A_ENABLED) {
// // P3A informer should be shown not for the updated users only
// if (!PackageUtils.isFirstInstall(this)) {
// BraveP3AInformers.show();
AlexeyBarabash marked this conversation as resolved.
Show resolved Hide resolved
// } else {
// // On the first run P3A is must be set from the onboarding wizard
// }
// Uncomment ^ when onboarding UI step will be ready for P3A

// Until we don't have P3A onboarding, P3A will be disabled,
// but available for activating through settings
if (!BravePrefServiceBridge.getInstance().hasPathP3AEnabled()) {
BravePrefServiceBridge.getInstance().setP3AEnabled(false);
}
SergeyZhukovsky marked this conversation as resolved.
Show resolved Hide resolved
// Remove lines above ^ when onboarding UI step will be ready for P3A
if (!OnboardingPrefManager.getInstance().isP3aOnboardingShown()) {
Intent p3aOnboardingIntent = new Intent(this, P3aOnboardingActivity.class);
p3aOnboardingIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(p3aOnboardingIntent);
}
}

if (!OnboardingPrefManager.getInstance().isOneTimeNotificationStarted()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,8 @@ protected void onAttachedToWindow() {
checkAndShowNTPImage(false);
mNTPBackgroundImagesBridge.addObserver(mNTPBackgroundImageServiceObserver);
if (PackageUtils.isFirstInstall(mActivity)
&& !OnboardingPrefManager.getInstance().isNewOnboardingShown()) {
&& !OnboardingPrefManager.getInstance().isNewOnboardingShown()
&& OnboardingPrefManager.getInstance().isP3aOnboardingShown()) {
((BraveActivity)mActivity).showOnboardingV2(false);
}
if (OnboardingPrefManager.getInstance().isFromNotification() ) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
*/
public class OnboardingPrefManager {
private static final String PREF_ONBOARDING = "onboarding";
private static final String PREF_P3A_ONBOARDING = "p3a_onboarding";
private static final String PREF_CROSS_PROMO_MODAL = "cross_promo_modal";
private static final String PREF_ONBOARDING_V2 = "onboarding_v2";
private static final String PREF_NEXT_ONBOARDING_DATE = "next_onboarding_date";
Expand Down Expand Up @@ -102,6 +103,22 @@ public void setOnboardingShown(boolean isShown) {
sharedPreferencesEditor.apply();
}

/**
* Returns the user preference for whether the onboarding is shown.
*/
public boolean isP3aOnboardingShown() {
return mSharedPreferences.getBoolean(PREF_P3A_ONBOARDING, false);
}

/**
* Sets the user preference for whether the onboarding is shown.
*/
public void setP3aOnboardingShown(boolean isShown) {
SharedPreferences.Editor sharedPreferencesEditor = mSharedPreferences.edit();
sharedPreferencesEditor.putBoolean(PREF_P3A_ONBOARDING, isShown);
sharedPreferencesEditor.apply();
}

/**
* Returns the user preference for whether the onboarding is shown.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
/**
* Copyright (c) 2021 The Brave Authors. All rights reserved.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Year 2021 👍

* 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 http://mozilla.org/MPL/2.0/.
*/

package org.chromium.chrome.browser.onboarding;

import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.ForegroundColorSpan;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import org.chromium.chrome.R;
import org.chromium.chrome.browser.BraveRewardsHelper;
import org.chromium.chrome.browser.app.BraveActivity;
import org.chromium.chrome.browser.customtabs.CustomTabActivity;
import org.chromium.chrome.browser.night_mode.GlobalNightModeStateProviderHolder;
import org.chromium.chrome.browser.onboarding.OnboardingPrefManager;
import org.chromium.chrome.browser.preferences.BravePrefServiceBridge;
import org.chromium.chrome.browser.util.PackageUtils;

public class P3aOnboardingActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_p3a_onboarding);
OnboardingPrefManager.getInstance().setP3aOnboardingShown(true);

boolean isFirstInstall = PackageUtils.isFirstInstall(this);

TextView p3aOnboardingTitle = findViewById(R.id.p3a_onboarding_title);
p3aOnboardingTitle.setText(isFirstInstall
? getResources().getString(R.string.p3a_onboarding_title_text_1)
: getResources().getString(R.string.p3a_onboarding_title_text_2));
CheckBox p3aOnboardingCheckbox = findViewById(R.id.p3a_onboarding_checkbox);
ImageView p3aOnboardingImg = findViewById(R.id.p3a_onboarding_img);
p3aOnboardingImg.setImageResource(isFirstInstall
? R.drawable.ic_brave_logo
: (GlobalNightModeStateProviderHolder.getInstance().isInNightMode()
? R.drawable.ic_spot_graphic_dark
: R.drawable.ic_spot_graphic));
TextView p3aOnboardingText = findViewById(R.id.p3a_onboarding_text);
Button btnContinue = findViewById(R.id.btn_continue);
btnContinue.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
BravePrefServiceBridge.getInstance().setP3AEnabled(
p3aOnboardingCheckbox.isChecked());
BravePrefServiceBridge.getInstance().setP3ANoticeAcknowledged(true);
if (PackageUtils.isFirstInstall(P3aOnboardingActivity.this)
&& !OnboardingPrefManager.getInstance().isNewOnboardingShown()
&& BraveActivity.getBraveActivity() != null) {
BraveActivity.getBraveActivity().showOnboardingV2(false);
}
finish();
}
});

String productAnalysisString =
String.format(getResources().getString(R.string.p3a_onboarding_checkbox_text,
getResources().getString(R.string.private_product_analysis_text)));
int productAnalysisIndex = productAnalysisString.indexOf(
getResources().getString(R.string.private_product_analysis_text));
Spanned productAnalysisSpanned =
BraveRewardsHelper.spannedFromHtmlString(productAnalysisString);
SpannableString productAnalysisTextSS =
new SpannableString(productAnalysisSpanned.toString());

ClickableSpan productAnalysisClickableSpan = new ClickableSpan() {
@Override
public void onClick(@NonNull View textView) {
CustomTabActivity.showInfoPage(P3aOnboardingActivity.this, BraveActivity.P3A_URL);
}
@Override
public void updateDrawState(@NonNull TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
};

productAnalysisTextSS.setSpan(productAnalysisClickableSpan, productAnalysisIndex,
productAnalysisIndex
+ getResources().getString(R.string.private_product_analysis_text).length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
productAnalysisTextSS.setSpan(
new ForegroundColorSpan(getResources().getColor(R.color.brave_blue_tint_color)),
productAnalysisIndex,
productAnalysisIndex
+ getResources().getString(R.string.private_product_analysis_text).length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
p3aOnboardingText.setMovementMethod(LinkMovementMethod.getInstance());
p3aOnboardingText.setText(productAnalysisTextSS);
}

@Override
public void onBackPressed() {}
}
9 changes: 9 additions & 0 deletions android/java/res/drawable/brave_checkbox.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="true"
android:drawable="@drawable/ic_checkbox_filled" />
<item
android:state_checked="false"
android:drawable="@drawable/ic_checkbox_outline" />
</selector>
40 changes: 40 additions & 0 deletions android/java/res/drawable/ic_brave_logo.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="162dp"
android:height="162dp"
android:viewportWidth="162"
android:viewportHeight="162">
<path
android:pathData="M154.177,52.36L149.086,38.806L152.623,31.02C153.077,30.017 152.859,28.841 152.072,28.063L142.449,18.517C138.241,14.345 131.963,12.911 126.308,14.835L123.618,15.749L109.563,0H88.888H75.785H57.886L44.011,15.94L41.395,15.037C35.688,13.068 29.334,14.518 25.098,18.755L15.306,28.48C14.677,29.103 14.505,30.038 14.87,30.836L18.565,38.917L13.5,52.464L16.779,64.678L31.711,120.351C33.43,126.77 37.392,132.391 42.903,136.24C42.903,136.24 61.033,148.778 78.923,160.166C80.496,161.168 82.142,161.9 83.907,161.873C85.673,161.897 87.318,161.168 88.888,160.161C108.982,147.246 124.879,136.19 124.879,136.19C130.385,132.334 134.34,126.706 136.052,120.285L150.914,64.591L154.177,52.36Z"
android:fillType="evenOdd">
<aapt:attr name="android:fillColor">
<gradient
android:startY="163.016"
android:startX="13.5002"
android:endY="163.016"
android:endX="154.177"
android:type="linear">
<item android:offset="0" android:color="#FFFF5500"/>
<item android:offset="0.409877" android:color="#FFFF5500"/>
<item android:offset="0.49434" android:color="#FFFF4530"/>
<item android:offset="0.572365" android:color="#FFFF2000"/>
<item android:offset="1" android:color="#FFFF2000"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M138.289,55.047L138.056,55.773L137.686,57.074C136.696,58.283 134.611,60.602 133.049,62.23L118.695,77.191C117.133,78.818 116.252,80.859 117.143,82.914L119.079,87.593C119.968,89.647 120.056,93.046 119.203,95.328C118.336,97.65 116.843,99.702 114.887,101.267L113.389,102.464C111.622,103.876 108.492,104.248 106.433,103.287L99.821,100.212C97.763,99.255 94.691,97.248 92.995,95.753L86.74,90.241C85.52,89.164 85.451,87.314 86.586,86.156L101.82,76.08C103.709,74.831 104.709,72.521 103.635,70.551L98.219,60.89C97.146,58.919 96.716,56.301 97.265,55.071C97.814,53.841 100.007,52.187 102.141,51.395L119.824,44.954C121.956,44.163 121.842,43.346 119.572,43.137L108.273,42.313C106.001,42.104 104.337,42.428 102.141,43.029L93.589,45.103C91.393,45.704 90.928,47.994 91.34,50.188L94.869,68.943C95.282,71.139 95.484,73.35 95.318,73.858C95.153,74.366 93.198,75.184 90.975,75.679L88.05,76.328C85.826,76.823 82.183,76.845 79.954,76.381L76.415,75.642C74.185,75.176 72.225,74.379 72.058,73.873C71.892,73.365 72.092,71.15 72.504,68.956L76.01,50.198C76.422,48.003 75.954,45.716 73.758,45.117L65.203,43.052C63.007,42.453 61.34,42.136 59.07,42.345L47.771,43.179C45.501,43.39 45.389,44.207 47.521,44.995L65.215,51.417C67.347,52.207 69.543,53.857 70.093,55.088C70.644,56.317 70.217,58.934 69.146,60.906L63.741,70.57C62.67,72.541 63.672,74.852 65.563,76.099L80.811,86.16C81.948,87.316 81.881,89.167 80.662,90.244L74.412,95.765C72.72,97.262 69.65,99.27 67.592,100.232L60.985,103.316C58.927,104.276 55.795,103.91 54.028,102.501L52.53,101.306C50.571,99.743 49.075,97.692 48.135,95.186C47.349,93.088 47.432,89.692 48.318,87.635L50.25,82.956C51.138,80.899 50.254,78.858 48.69,77.233L34.318,62.29C32.757,60.664 30.668,58.347 29.678,57.142L29.304,55.839L29.072,55.113C29.049,54.278 29.354,51.614 29.701,50.894C30.047,50.176 31.374,48.074 32.652,46.224L35.727,41.766C37.004,39.917 39.212,36.975 40.632,35.228L45.139,29.692C46.56,27.947 47.771,26.526 47.954,26.538C47.963,26.526 49.802,26.861 52.041,27.282L58.868,28.566C61.107,28.986 63.577,29.449 64.358,29.592C65.137,29.737 67.55,29.292 69.72,28.603L74.631,27.045C76.799,26.355 80.092,25.447 81.945,25.025L83.661,25.051L85.378,25.024C87.231,25.442 90.523,26.347 92.693,27.034L97.607,28.586C99.777,29.273 102.191,29.716 102.97,29.57C103.64,29.446 105.554,29.083 107.5,28.715L108.458,28.534L115.284,27.245C117.523,26.821 119.362,26.483 119.493,26.494C119.553,26.483 120.765,27.899 122.188,29.646L126.703,35.177C128.126,36.921 130.336,39.859 131.617,41.709L134.697,46.161C135.976,48.009 137.974,51.373 138.098,52.138C138.225,52.902 138.31,54.212 138.289,55.047ZM84.592,99.691C84.792,99.691 86.681,100.388 88.787,101.244L90.742,102.037C92.848,102.891 96.237,104.417 98.269,105.428L104.037,108.297C106.069,109.307 106.215,111.197 104.361,112.496L99.441,115.943C97.587,117.242 94.67,119.497 92.962,120.959C92.483,121.369 91.918,121.851 91.317,122.365C89.773,123.685 87.984,125.214 86.759,126.262C85.056,127.718 82.296,127.725 80.626,126.28C78.954,124.834 76.188,122.466 74.476,121.02C72.766,119.572 69.843,117.334 67.98,116.047L63.077,112.655C61.214,111.366 61.347,109.467 63.369,108.436L69.167,105.479C71.189,104.446 74.566,102.9 76.672,102.046L78.627,101.249C80.731,100.393 82.619,99.691 82.82,99.691H83.706H84.592Z"
android:fillType="evenOdd">
<aapt:attr name="android:fillColor">
<gradient
android:startY="151.289"
android:startX="83.6813"
android:endY="151.289"
android:endX="134.762"
android:type="linear">
<item android:offset="0" android:color="#FFFFFFFF"/>
<item android:offset="1" android:color="#FFF4F4F4"/>
</gradient>
</aapt:attr>
</path>
</vector>
12 changes: 12 additions & 0 deletions android/java/res/drawable/ic_checkbox_filled.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M4,0L20,0A4,4 0,0 1,24 4L24,20A4,4 0,0 1,20 24L4,24A4,4 0,0 1,0 20L0,4A4,4 0,0 1,4 0z"
android:fillColor="@color/brave_blue_tint_color"/>
<path
android:pathData="M18.5742,5.8405C18.2584,5.5648 17.8373,5.4546 17.4163,5.4546C16.9952,5.5097 16.6268,5.6751 16.3636,6.0059L10.1005,13.5034L7.0478,10.3611C6.4163,9.6995 5.4163,9.6995 4.8373,10.3611C4.5215,10.6918 4.3636,11.0777 4.3636,11.5188C4.3636,11.9598 4.5215,12.4008 4.8373,12.6765L9.1005,17.0868C9.4163,17.4175 9.7847,17.5829 10.2057,17.5829H10.2584C10.6794,17.5829 11.1005,17.3624 11.3636,17.0316L18.7321,8.211C19.2584,7.4944 19.2057,6.4469 18.5742,5.8405Z"
android:fillColor="#ffffff"/>
</vector>
5 changes: 5 additions & 0 deletions android/java/res/drawable/ic_checkbox_outline.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="@color/brave_blue_tint_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>
Loading