Merge pull request #6171 from brave/cross_promotional_modal_dp
Cross promotional modal dp
This commit is contained in:
@@ -171,6 +171,7 @@ brave_java_resources = [
|
||||
"java/res/drawable-hdpi/bat_unverified.png",
|
||||
"java/res/drawable-hdpi/share_icon.png",
|
||||
"java/res/drawable-hdpi/omnibox_https_valid.png",
|
||||
"java/res/drawable-hdpi/ic_cross_modal.png",
|
||||
"java/res/drawable-mdpi/check.png",
|
||||
"java/res/drawable-mdpi/btn_bookmark.png",
|
||||
"java/res/drawable-mdpi/arrow_forward.png",
|
||||
@@ -276,6 +277,7 @@ brave_java_resources = [
|
||||
"java/res/drawable-mdpi/bat_unverified.png",
|
||||
"java/res/drawable-mdpi/share_icon.png",
|
||||
"java/res/drawable-mdpi/omnibox_https_valid.png",
|
||||
"java/res/drawable-mdpi/ic_cross_modal.png",
|
||||
"java/res/drawable-nodpi/will_christiansen_glacier_peak.jpg",
|
||||
"java/res/drawable-nodpi/loader16.png",
|
||||
"java/res/drawable-nodpi/loader11.png",
|
||||
@@ -426,6 +428,7 @@ brave_java_resources = [
|
||||
"java/res/drawable-xhdpi/bat_unverified.png",
|
||||
"java/res/drawable-xhdpi/share_icon.png",
|
||||
"java/res/drawable-xhdpi/omnibox_https_valid.png",
|
||||
"java/res/drawable-xhdpi/ic_cross_modal.png",
|
||||
"java/res/drawable-xxhdpi/check.png",
|
||||
"java/res/drawable-xxhdpi/btn_bookmark.png",
|
||||
"java/res/drawable-xxhdpi/arrow_forward.png",
|
||||
@@ -532,6 +535,7 @@ brave_java_resources = [
|
||||
"java/res/drawable-xxhdpi/bat_unverified.png",
|
||||
"java/res/drawable-xxhdpi/share_icon.png",
|
||||
"java/res/drawable-xxhdpi/omnibox_https_valid.png",
|
||||
"java/res/drawable-xxhdpi/ic_cross_modal.png",
|
||||
"java/res/drawable-xxxhdpi/check.png",
|
||||
"java/res/drawable-xxxhdpi/btn_bookmark.png",
|
||||
"java/res/drawable-xxxhdpi/arrow_forward.png",
|
||||
@@ -624,6 +628,7 @@ brave_java_resources = [
|
||||
"java/res/drawable-xxxhdpi/bat_unverified.png",
|
||||
"java/res/drawable-xxxhdpi/share_icon.png",
|
||||
"java/res/drawable-xxxhdpi/omnibox_https_valid.png",
|
||||
"java/res/drawable-xxxhdpi/ic_cross_modal.png",
|
||||
"java/res/layout/brave_shields_ads_tracking_switcher.xml",
|
||||
"java/res/layout/web_notification_icon_frame_brave.xml",
|
||||
"java/res/layout/brave_sync_layout.xml",
|
||||
@@ -684,6 +689,7 @@ brave_java_resources = [
|
||||
"java/res/layout/menu_separator.xml",
|
||||
"java/res/layout/brave_rewards_panel_grant.xml",
|
||||
"java/res/layout/brave_sync_add_laptop.xml",
|
||||
"java/res/layout/fragment_cross_promotional_modal_dialog.xml",
|
||||
"java/res/layout-land/brave_rewards_site_banner.xml",
|
||||
"java/res/layout-land/verify_wallet_activity.xml",
|
||||
"java/res/menu/new_tab_menu.xml",
|
||||
|
||||
@@ -141,7 +141,8 @@ brave_java_sources = [
|
||||
"../../brave/android/java/org/chromium/chrome/browser/rate/RateFeedbackUtils.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/shields/BraveShieldsMenuObserver.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/shields/BraveShieldsHandler.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/shields/BraveShieldsUtils.java"
|
||||
"../../brave/android/java/org/chromium/chrome/browser/shields/BraveShieldsUtils.java",
|
||||
"../../brave/android/java/org/chromium/chrome/browser/CrossPromotionalModalDialogFragment.java"
|
||||
]
|
||||
|
||||
if (brave_rewards_enabled || enable_brave_referrals) {
|
||||
|
||||
@@ -66,6 +66,7 @@ import org.chromium.ui.widget.Toast;
|
||||
import org.chromium.chrome.browser.util.PackageUtils;
|
||||
import org.chromium.chrome.browser.onboarding.OnboardingPrefManager;
|
||||
import org.chromium.chrome.browser.onboarding.OnboardingActivity;
|
||||
import org.chromium.chrome.browser.CrossPromotionalModalDialogFragment;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
@@ -88,6 +89,7 @@ public abstract class BraveActivity<C extends ChromeActivityComponent> extends C
|
||||
public static final String OPEN_URL = "open_url";
|
||||
|
||||
private static final int DAYS_4 = 4;
|
||||
private static final int DAYS_12 = 12;
|
||||
|
||||
/**
|
||||
* Settings for sending local notification reminders.
|
||||
@@ -240,6 +242,20 @@ public abstract class BraveActivity<C extends ChromeActivityComponent> extends C
|
||||
OnboardingPrefManager.getInstance().showOnboarding(this);
|
||||
OnboardingPrefManager.getInstance().setOnboardingShownForSkip(true);
|
||||
}
|
||||
|
||||
if (PackageUtils.isFirstInstall(this)
|
||||
&& SharedPreferencesManager.getInstance().readInt(BravePreferenceKeys.BRAVE_APP_OPEN_COUNT) == 1) {
|
||||
Calendar calender = Calendar.getInstance();
|
||||
calender.setTime(new Date());
|
||||
calender.add(Calendar.DATE, DAYS_12);
|
||||
OnboardingPrefManager.getInstance().setNextCrossPromoModalDate(
|
||||
calender.getTimeInMillis());
|
||||
}
|
||||
|
||||
if (OnboardingPrefManager.getInstance().showCrossPromoModal()) {
|
||||
showCrossPromotionalDialog();
|
||||
OnboardingPrefManager.getInstance().setCrossPromoModalShown(true);
|
||||
}
|
||||
}
|
||||
|
||||
private void createNotificationChannel() {
|
||||
@@ -396,6 +412,12 @@ public abstract class BraveActivity<C extends ChromeActivityComponent> extends C
|
||||
mRateDialogFragment.show(getSupportFragmentManager(), "RateDialogFragment");
|
||||
}
|
||||
|
||||
private void showCrossPromotionalDialog() {
|
||||
CrossPromotionalModalDialogFragment mCrossPromotionalModalDialogFragment = new CrossPromotionalModalDialogFragment();
|
||||
mCrossPromotionalModalDialogFragment.setCancelable(false);
|
||||
mCrossPromotionalModalDialogFragment.show(getSupportFragmentManager(), "CrossPromotionalModalDialogFragment");
|
||||
}
|
||||
|
||||
private native void nativeRestartStatsUpdater();
|
||||
|
||||
static public ChromeTabbedActivity getChromeTabbedActivity() {
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
/**
|
||||
* Copyright (c) 2020 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.TextView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.text.SpannableString;
|
||||
import android.text.Spanned;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
|
||||
import org.chromium.chrome.R;
|
||||
|
||||
import org.chromium.ui.base.DeviceFormFactor;
|
||||
import org.chromium.chrome.browser.util.ConfigurationUtils;
|
||||
import org.chromium.chrome.browser.BraveRewardsHelper;
|
||||
|
||||
public class CrossPromotionalModalDialogFragment extends DialogFragment implements View.OnClickListener {
|
||||
|
||||
private static final String BRAVE_URL = "brave.com";
|
||||
|
||||
@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_cross_promotional_modal_dialog, container, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||
Button mDoneButton = view.findViewById(R.id.btn_done);
|
||||
mDoneButton.setOnClickListener(this);
|
||||
|
||||
String mPromoText = getResources().getString(R.string.download_brave);
|
||||
int indexOfSpan = mPromoText.indexOf(BRAVE_URL);
|
||||
|
||||
TextView mCrossPromoText = view.findViewById(R.id.cross_modal_text);
|
||||
|
||||
Spanned textToSpan = BraveRewardsHelper.spannedFromHtmlString(mPromoText);
|
||||
SpannableString ss = new SpannableString(textToSpan.toString());
|
||||
|
||||
ForegroundColorSpan foregroundSpan =
|
||||
new ForegroundColorSpan(getResources().getColor(R.color.shield_back_button_tint));
|
||||
ss.setSpan(foregroundSpan, indexOfSpan,
|
||||
(indexOfSpan + BRAVE_URL.length()), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
|
||||
mCrossPromoText.setText(ss);
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
@@ -30,7 +30,9 @@ import java.util.Map;
|
||||
*/
|
||||
public class OnboardingPrefManager {
|
||||
private static final String PREF_ONBOARDING = "onboarding";
|
||||
private static final String PREF_CROSS_PROMO_MODAL = "cross_promo_modal";
|
||||
private static final String PREF_NEXT_ONBOARDING_DATE = "next_onboarding_date";
|
||||
private static final String PREF_NEXT_CROSS_PROMO_MODAL_DATE = "next_cross_promo_modal_date";
|
||||
private static final String PREF_ONBOARDING_FOR_SKIP = "onboarding_for_skip";
|
||||
private static final String PREF_ONBOARDING_SKIP_COUNT = "onboarding_skip_count";
|
||||
private static final String PREF_SEARCH_ENGINE_ONBOARDING = "search_engine_onboarding";
|
||||
@@ -159,6 +161,33 @@ public class OnboardingPrefManager {
|
||||
}
|
||||
}
|
||||
|
||||
private long getNextCrossPromoModalDate() {
|
||||
return mSharedPreferences.getLong(PREF_NEXT_CROSS_PROMO_MODAL_DATE, 0);
|
||||
}
|
||||
|
||||
public void setNextCrossPromoModalDate(long nextDate) {
|
||||
SharedPreferences.Editor sharedPreferencesEditor = mSharedPreferences.edit();
|
||||
sharedPreferencesEditor.putLong(PREF_NEXT_CROSS_PROMO_MODAL_DATE, nextDate);
|
||||
sharedPreferencesEditor.apply();
|
||||
}
|
||||
|
||||
public void setCrossPromoModalShown(boolean isShown) {
|
||||
SharedPreferences.Editor sharedPreferencesEditor = mSharedPreferences.edit();
|
||||
sharedPreferencesEditor.putBoolean(PREF_CROSS_PROMO_MODAL, isShown);
|
||||
sharedPreferencesEditor.apply();
|
||||
}
|
||||
|
||||
private boolean hasCrossPromoModalShown() {
|
||||
return mSharedPreferences.getBoolean(PREF_CROSS_PROMO_MODAL, false);
|
||||
}
|
||||
|
||||
public boolean showCrossPromoModal() {
|
||||
boolean shouldShow = !hasCrossPromoModalShown()
|
||||
&& (getNextCrossPromoModalDate() > 0
|
||||
&& System.currentTimeMillis() > getNextCrossPromoModalDate());
|
||||
return shouldShow;
|
||||
}
|
||||
|
||||
public static Map<String, SearchEngineEnum> searchEngineMap =
|
||||
new HashMap<String, SearchEngineEnum>() {
|
||||
{
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 95 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 160 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 338 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 575 KiB |
@@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (c) 2020 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/.
|
||||
-->
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="32dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/brave_works_everywhere"
|
||||
android:textSize="20sp"
|
||||
android:layout_marginBottom="24dp"
|
||||
android:textColor="@color/shield_text_color"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:src="@drawable/ic_cross_modal"
|
||||
android:contentDescription="@null"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/cross_modal_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:textSize="16sp"
|
||||
android:text="@string/download_brave"
|
||||
android:layout_marginBottom="32dp"
|
||||
android:textColor="@color/shield_text_color"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/btn_done"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:background="@drawable/orange_rounded_button"
|
||||
android:text="@string/brave_sync_btn_done"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="16sp"
|
||||
style="?android:attr/borderlessButtonStyle"/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -1166,6 +1166,12 @@ until they verify, or until 90 days have passed.
|
||||
<message name="IDS_NICE" desc="Shields tootltip title">
|
||||
Nice!
|
||||
</message>
|
||||
<message name="IDS_BRAVE_WORKS_EVERYWHERE" desc="Cross promotional modal title text">
|
||||
Brave works everywhere
|
||||
</message>
|
||||
<message name="IDS_DOWNLOAD_BRAVE" desc="Cross promotional modal text">
|
||||
Download Brave at brave.com on your laptop or tablet for a faster and more private web
|
||||
</message>
|
||||
</messages>
|
||||
</release>
|
||||
</grit>
|
||||
|
||||
Reference in New Issue
Block a user