Skip to content

Commit

Permalink
Merge pull request #7833 from brave/pr7817_deprecate_bap_modal_androi…
Browse files Browse the repository at this point in the history
…d_1.20.x

Deprecate bap modal android (uplift to 1.20.x)
  • Loading branch information
kjozwiak authored Feb 16, 2021
2 parents 472b8a6 + 4d1db86 commit 1ac3a51
Show file tree
Hide file tree
Showing 17 changed files with 429 additions and 10 deletions.
5 changes: 5 additions & 0 deletions android/brave_java_resources.gni
Original file line number Diff line number Diff line change
Expand Up @@ -685,6 +685,8 @@ brave_java_resources = [
"java/res/drawable/ic_toggle_down.xml",
"java/res/drawable/ic_toggle_up.xml",
"java/res/drawable/ic_wallet_add.xml",
"java/res/drawable/ic_warning_triangle.xml",
"java/res/drawable/ic_warning_triangle_2.xml",
"java/res/drawable/ic_yahoo.xml",
"java/res/drawable/image_credit_rounded_shape.xml",
"java/res/drawable/indicator_selector.xml",
Expand All @@ -706,6 +708,8 @@ brave_java_resources = [
"java/res/drawable/rewards_button_purple_border.xml",
"java/res/drawable/rewards_button_summary.xml",
"java/res/drawable/rewards_image_button.xml",
"java/res/drawable/rewards_modal_background.xml",
"java/res/drawable/rewards_tooltip_background.xml",
"java/res/drawable/rounded_corners.xml",
"java/res/drawable/rounded_filled.xml",
"java/res/drawable/rounded_filled_binance.xml",
Expand Down Expand Up @@ -798,6 +802,7 @@ brave_java_resources = [
"java/res/layout/fragment_brave_rewards_onboarding.xml",
"java/res/layout/fragment_cross_promotional_modal_dialog.xml",
"java/res/layout/fragment_crypto_widget_bottom_sheet_dialog.xml",
"java/res/layout/fragment_deprecate_bap_modal_dialog.xml",
"java/res/layout/fragment_onboarding_v2.xml",
"java/res/layout/fragment_qr_code_share.xml",
"java/res/layout/fragment_rate_dialog.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 @@ -35,6 +35,7 @@ brave_java_sources = [
"../../brave/android/java/org/chromium/chrome/browser/BraveSyncReflectionUtils.java",
"../../brave/android/java/org/chromium/chrome/browser/BraveUphold.java",
"../../brave/android/java/org/chromium/chrome/browser/CrossPromotionalModalDialogFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/DeprecateBAPModalDialogFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/InternetConnection.java",
"../../brave/android/java/org/chromium/chrome/browser/QRCodeShareDialogFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/SetDefaultBrowserActivity.java",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import org.json.JSONException;
import org.json.JSONObject;

class BraveRewardsBalance {
public class BraveRewardsBalance {
public static final String WALLET_ANONYMOUS = "anonymous";
public static final String WALLET_UPHOLD = "uphold";
public static final String WALLET_BLINDED = "blinded";
Expand Down Expand Up @@ -46,6 +46,10 @@ private void fromJson(String json_balance) throws JSONException {
}
}

public double getTotal() {
return mTotal;
}

@VisibleForTesting
@Override
public String toString() {
Expand Down
12 changes: 12 additions & 0 deletions android/java/org/chromium/chrome/browser/BraveRewardsHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ public class BraveRewardsHelper implements LargeIconBridge.LargeIconCallback{
private static final String PREF_SHOW_ONBOARDING_MINI_MODAL = "show_onboarding_mini_modal";
private static final String PREF_NEXT_REWARDS_ONBOARDING_MODAL_DATE =
"next_rewards_onboarding_modal_date";
private static final String PREF_NEXT_BAP_MODAL_DATE = "next_bap_modal_date";
private static final String PREF_REWARDS_ENV_CHANGE = "rewards_env_change";
private static final String PREF_REWARDS_ONBOARDING_MODAL = "rewards_onboarding_modal";
private static final int FAVICON_CIRCLE_MEASUREMENTS = 70; // dp
Expand Down Expand Up @@ -97,6 +98,17 @@ public static void setNextRewardsOnboardingModalDate(long nextDate) {
sharedPreferencesEditor.apply();
}

public static long getNextBAPModalDate() {
return ContextUtils.getAppSharedPreferences().getLong(PREF_NEXT_BAP_MODAL_DATE, 0);
}

public static void setNextBAPModalDate(long nextDate) {
SharedPreferences.Editor sharedPreferencesEditor =
ContextUtils.getAppSharedPreferences().edit();
sharedPreferencesEditor.putLong(PREF_NEXT_BAP_MODAL_DATE, nextDate);
sharedPreferencesEditor.apply();
}

public static void setRewardsOnboardingModalShown(boolean isShown) {
SharedPreferences.Editor sharedPreferencesEditor =
ContextUtils.getAppSharedPreferences().edit();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -472,9 +472,6 @@ protected void onCreate() {
SetupNotificationsControls();

ShowWebSiteView();
mBraveRewardsNativeWorker.GetRewardsParameters();

mBraveRewardsNativeWorker.GetExternalWallet();
}

private void showBraveRewardsOptInLayout(View root) {
Expand Down Expand Up @@ -856,6 +853,8 @@ private void checkForRewardsOnboarding() {

@Override
public void OnStartProcess() {
mBraveRewardsNativeWorker.GetRewardsParameters();
mBraveRewardsNativeWorker.GetExternalWallet();
if (root != null && PackageUtils.isFirstInstall(mActivity)
&& ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS)) {
if (BraveRewardsHelper.getBraveRewardsAppOpenCount() == 0
Expand Down Expand Up @@ -895,6 +894,10 @@ public void dismiss() {
this.window.dismiss();
}

public boolean isShowing() {
return this.window.isShowing();
}

private Tab launchTabInRunningTabbedActivity(LoadUrlParams loadUrlParams) {
if (mActivity == null || mActivity.getTabModelSelector() == null) return null;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
/**
* Copyright (c) 2021 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 http://mozilla.org/MPL/2.0/.
*/

package org.chromium.chrome.browser;

import android.content.DialogInterface;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.LinearLayout;

import androidx.appcompat.widget.AppCompatImageView;
import androidx.fragment.app.DialogFragment;

import org.chromium.chrome.R;
import org.chromium.chrome.browser.util.ConfigurationUtils;
import org.chromium.ui.base.DeviceFormFactor;

public class DeprecateBAPModalDialogFragment
extends DialogFragment implements View.OnClickListener {
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setDialogParams();
}

@Override
public void onResume() {
super.onResume();
getDialog().setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(android.content.DialogInterface dialog, int keyCode,
android.view.KeyEvent event) {
if ((keyCode == android.view.KeyEvent.KEYCODE_BACK)) {
dismiss();
return true;
} else
return false;
}
});
setDialogParams();
}

@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_deprecate_bap_modal_dialog, container, false);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
Button mDoneButton = view.findViewById(R.id.btn_done);
mDoneButton.setOnClickListener(this);
}

@Override
public void onClick(View view) {
dismiss();
}

private void setDialogParams() {
DisplayMetrics displayMetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int mDeviceHeight = displayMetrics.heightPixels;
int mDeviceWidth = displayMetrics.widthPixels;

WindowManager.LayoutParams params = getDialog().getWindow().getAttributes();
boolean isTablet = DeviceFormFactor.isNonMultiDisplayContextOnTablet(getActivity());
boolean isLandscape = ConfigurationUtils.isLandscape(getActivity());
if (isTablet) {
params.width = (int) (0.5 * mDeviceWidth);
} else {
if (isLandscape) {
params.width = (int) (0.5 * mDeviceWidth);
} else {
params.width = (int) (0.9 * mDeviceWidth);
}
}
params.height = LinearLayout.LayoutParams.WRAP_CONTENT;
getDialog().getWindow().setAttributes(params);
}
}
112 changes: 111 additions & 1 deletion android/java/org/chromium/chrome/browser/app/BraveActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,18 +42,22 @@
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ApplicationLifetime;
import org.chromium.chrome.browser.BraveConfig;
import org.chromium.chrome.browser.BraveFeatureList;
import org.chromium.chrome.browser.BraveHelper;
import org.chromium.chrome.browser.BraveRewardsHelper;
import org.chromium.chrome.browser.BraveRewardsNativeWorker;
import org.chromium.chrome.browser.BraveRewardsObserver;
import org.chromium.chrome.browser.BraveSyncReflectionUtils;
import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.CrossPromotionalModalDialogFragment;
import org.chromium.chrome.browser.DeprecateBAPModalDialogFragment;
import org.chromium.chrome.browser.LaunchIntentDispatcher;
import org.chromium.chrome.browser.SetDefaultBrowserActivity;
import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
import org.chromium.chrome.browser.bookmarks.BookmarkModel;
import org.chromium.chrome.browser.brave_stats.BraveStatsUtil;
import org.chromium.chrome.browser.dependency_injection.ChromeActivityComponent;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.notifications.BraveSetDefaultBrowserNotificationService;
import org.chromium.chrome.browser.notifications.retention.RetentionNotificationUtil;
Expand Down Expand Up @@ -103,7 +107,8 @@
* Brave's extension for ChromeActivity
*/
@JNINamespace("chrome::android")
public abstract class BraveActivity<C extends ChromeActivityComponent> extends ChromeActivity {
public abstract class BraveActivity<C extends ChromeActivityComponent>
extends ChromeActivity implements BraveRewardsObserver {
public static final int SITE_BANNER_REQUEST_CODE = 33;
public static final int VERIFY_WALLET_ACTIVITY_REQUEST_CODE = 34;
public static final int USER_WALLET_ACTIVITY_REQUEST_CODE = 35;
Expand All @@ -119,6 +124,7 @@ public abstract class BraveActivity<C extends ChromeActivityComponent> extends C
private static final String PREF_CLOSE_TABS_ON_EXIT = "close_tabs_on_exit";
public static final String OPEN_URL = "open_url";

private static final int DAYS_3 = 3;
private static final int DAYS_4 = 4;
private static final int DAYS_5 = 5;
private static final int DAYS_12 = 12;
Expand All @@ -131,9 +137,12 @@ public abstract class BraveActivity<C extends ChromeActivityComponent> extends C
public static final String ANDROID_PACKAGE_NAME = "android";
public static final String BRAVE_BLOG_URL = "http://www.brave.com/blog";

private static final String JAPAN_COUNTRY_CODE = "JP";

// Explicitly declare this variable to avoid build errors.
// It will be removed in asm and parent variable will be used instead.
protected ObservableSupplier<Profile> mTabModelProfileSupplier;
private BraveRewardsNativeWorker mBraveRewardsNativeWorker;

private static final List<String> yandexRegions =
Arrays.asList("AM", "AZ", "BY", "KG", "KZ", "MD", "RU", "TJ", "TM", "UZ");
Expand All @@ -147,6 +156,19 @@ public BraveActivity() {
public void onResumeWithNative() {
super.onResumeWithNative();
nativeRestartStatsUpdater();
if (ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS)
&& !BravePrefServiceBridge.getInstance().getSafetynetCheckFailed()) {
if (mBraveRewardsNativeWorker == null)
mBraveRewardsNativeWorker = BraveRewardsNativeWorker.getInstance();
mBraveRewardsNativeWorker.AddObserver(this);
}
}

@Override
public void onPauseWithNative() {
if (mBraveRewardsNativeWorker != null) {
mBraveRewardsNativeWorker.RemoveObserver(this);
}
}

@Override
Expand Down Expand Up @@ -370,6 +392,69 @@ public void finishNativeInitialization() {
calender.getTimeInMillis());
}
checkSetDefaultBrowserModal();
if (mBraveRewardsNativeWorker != null
&& ChromeFeatureList.isEnabled(BraveFeatureList.BRAVE_REWARDS)
&& !BravePrefServiceBridge.getInstance().getSafetynetCheckFailed()) {
mBraveRewardsNativeWorker.StartProcess();
}
}

@Override
public void OnRewardsParameters(int errorCode) {
if (errorCode == BraveRewardsNativeWorker.LEDGER_OK && mBraveRewardsNativeWorker != null
&& mBraveRewardsNativeWorker.GetWalletBalance() != null
&& mBraveRewardsNativeWorker.GetWalletBalance().getTotal() > 0) {
checkForDeprecateBAPDialog();
}
}

@Override
public void OnStartProcess() {
mBraveRewardsNativeWorker.GetRewardsParameters();
}

private void checkForDeprecateBAPDialog() {
String countryCode = Locale.getDefault().getCountry();
if (countryCode.equals(JAPAN_COUNTRY_CODE) && !isRewardsPanelOpened()
&& System.currentTimeMillis() > BraveRewardsHelper.getNextBAPModalDate()) {
Calendar toDayCalendar = Calendar.getInstance();
Date todayDate = toDayCalendar.getTime();

Calendar march6Calendar = Calendar.getInstance();
march6Calendar.set(Calendar.DAY_OF_MONTH, 6);
march6Calendar.set(Calendar.YEAR, 2021);
march6Calendar.set(Calendar.MONTH, 2);
march6Calendar.set(Calendar.HOUR_OF_DAY, 0);
march6Calendar.set(Calendar.MINUTE, 0);
march6Calendar.set(Calendar.SECOND, 0);
march6Calendar.set(Calendar.MILLISECOND, 0);
Date march6Date = march6Calendar.getTime();

Calendar march13Calendar = Calendar.getInstance();
march13Calendar.set(Calendar.DAY_OF_MONTH, 13);
march13Calendar.set(Calendar.YEAR, 2021);
march13Calendar.set(Calendar.MONTH, 2);
march13Calendar.set(Calendar.HOUR_OF_DAY, 0);
march13Calendar.set(Calendar.MINUTE, 0);
march13Calendar.set(Calendar.SECOND, 0);
march13Calendar.set(Calendar.MILLISECOND, 0);
Date march13Date = march13Calendar.getTime();

boolean shouldSetNextDate = false;
if (todayDate.compareTo(march6Date) < 0) {
showRewardsTooltip();
shouldSetNextDate = true;
} else if (todayDate.compareTo(march6Date) > 0
&& todayDate.compareTo(march13Date) < 0) {
showDeprecateBAPDialog();
shouldSetNextDate = true;
}
if (shouldSetNextDate) {
Calendar calender = toDayCalendar;
calender.add(Calendar.DATE, DAYS_3);
BraveRewardsHelper.setNextBAPModalDate(calender.getTimeInMillis());
}
}
}

private void checkSetDefaultBrowserModal() {
Expand Down Expand Up @@ -484,6 +569,14 @@ public void hideRewardsOnboardingIcon() {
}
}

public void showRewardsTooltip() {
BraveToolbarLayout layout = (BraveToolbarLayout) findViewById(R.id.toolbar);
assert layout != null;
if (layout != null) {
layout.showRewardsTooltip();
}
}

private void createNotificationChannel() {
Context context = ContextUtils.getApplicationContext();
// Create the NotificationChannel, but only on API 26+ because
Expand Down Expand Up @@ -604,6 +697,15 @@ public void openRewardsPanel() {
}
}

public boolean isRewardsPanelOpened() {
BraveToolbarLayout layout = (BraveToolbarLayout) findViewById(R.id.toolbar);
assert layout != null;
if (layout != null) {
return layout.isRewardsPanelOpened();
}
return false;
}

public Tab selectExistingTab(String url) {
Tab tab = getActivityTab();
if (tab != null && tab.getUrlString().equals(url)) {
Expand Down Expand Up @@ -651,6 +753,14 @@ private void showCrossPromotionalDialog() {
mCrossPromotionalModalDialogFragment.show(getSupportFragmentManager(), "CrossPromotionalModalDialogFragment");
}

public void showDeprecateBAPDialog() {
DeprecateBAPModalDialogFragment mDeprecateBAPModalDialogFragment =
new DeprecateBAPModalDialogFragment();
mDeprecateBAPModalDialogFragment.setCancelable(false);
mDeprecateBAPModalDialogFragment.show(
getSupportFragmentManager(), "DeprecateBAPModalDialogFragment");
}

private native void nativeRestartStatsUpdater();

static public ChromeTabbedActivity getChromeTabbedActivity() {
Expand Down
Loading

0 comments on commit 1ac3a51

Please sign in to comment.