Skip to content

Stats social sharing #8508

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

Merged
merged 5 commits into from
Apr 12, 2021
Merged
Show file tree
Hide file tree
Changes from all 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
8 changes: 8 additions & 0 deletions android/brave_java_resources.gni
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ brave_java_resources = [
"java/res/drawable-hdpi/search_engine_startpage.png",
"java/res/drawable-hdpi/settings_desktop_mode.png",
"java/res/drawable-hdpi/settings_play_yt_video_in_browser.png",
"java/res/drawable-hdpi/share_activity_background.png",
"java/res/drawable-hdpi/share_icon.png",
"java/res/drawable-hdpi/shortcut_incognito.png",
"java/res/drawable-hdpi/slide_down.png",
Expand Down Expand Up @@ -182,6 +183,7 @@ brave_java_resources = [
"java/res/drawable-mdpi/search_engine_startpage.png",
"java/res/drawable-mdpi/settings_desktop_mode.png",
"java/res/drawable-mdpi/settings_play_yt_video_in_browser.png",
"java/res/drawable-mdpi/share_activity_background.png",
"java/res/drawable-mdpi/share_icon.png",
"java/res/drawable-mdpi/shortcut_incognito.png",
"java/res/drawable-mdpi/slide_down.png",
Expand Down Expand Up @@ -325,6 +327,7 @@ brave_java_resources = [
"java/res/drawable-xhdpi/search_engine_startpage.png",
"java/res/drawable-xhdpi/settings_desktop_mode.png",
"java/res/drawable-xhdpi/settings_play_yt_video_in_browser.png",
"java/res/drawable-xhdpi/share_activity_background.png",
"java/res/drawable-xhdpi/share_icon.png",
"java/res/drawable-xhdpi/shortcut_incognito.png",
"java/res/drawable-xhdpi/slide_down.png",
Expand Down Expand Up @@ -418,6 +421,7 @@ brave_java_resources = [
"java/res/drawable-xxhdpi/search_engine_startpage.png",
"java/res/drawable-xxhdpi/settings_desktop_mode.png",
"java/res/drawable-xxhdpi/settings_play_yt_video_in_browser.png",
"java/res/drawable-xxhdpi/share_activity_background.png",
"java/res/drawable-xxhdpi/share_icon.png",
"java/res/drawable-xxhdpi/shortcut_incognito.png",
"java/res/drawable-xxhdpi/slide_down.png",
Expand Down Expand Up @@ -504,6 +508,7 @@ brave_java_resources = [
"java/res/drawable-xxxhdpi/rewards_settings.png",
"java/res/drawable-xxxhdpi/settings_desktop_mode.png",
"java/res/drawable-xxxhdpi/settings_play_yt_video_in_browser.png",
"java/res/drawable-xxxhdpi/share_activity_background.png",
"java/res/drawable-xxxhdpi/share_icon.png",
"java/res/drawable-xxxhdpi/shortcut_incognito.png",
"java/res/drawable-xxxhdpi/slide_down.png",
Expand Down Expand Up @@ -596,6 +601,8 @@ brave_java_resources = [
"java/res/drawable/ic_phone.xml",
"java/res/drawable/ic_setbraveasdefault.xml",
"java/res/drawable/ic_setbraveasdefault_dark.xml",
"java/res/drawable/ic_share.xml",
"java/res/drawable/ic_share_white.xml",
"java/res/drawable/ic_shield_done_filled.xml",
"java/res/drawable/ic_shield_done_filled_20dp.xml",
"java/res/drawable/ic_sort.xml",
Expand Down Expand Up @@ -693,6 +700,7 @@ brave_java_resources = [
"java/res/layout/brave_stats_bottom_sheet.xml",
"java/res/layout/brave_stats_layout.xml",
"java/res/layout/brave_stats_pager_layout.xml",
"java/res/layout/brave_stats_share_layout.xml",
"java/res/layout/brave_sync_add_laptop.xml",
"java/res/layout/brave_sync_add_mobile.xml",
"java/res/layout/brave_sync_device.xml",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,39 @@

package org.chromium.chrome.browser.brave_stats;

import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.net.Uri;
import android.provider.MediaStore;
import android.util.Pair;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import org.chromium.base.ContextUtils;
import org.chromium.base.Log;
import org.chromium.base.ThreadUtils;
import org.chromium.base.task.AsyncTask;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.app.BraveActivity;
import org.chromium.chrome.browser.brave_stats.BraveStatsBottomSheetDialogFragment;
import org.chromium.chrome.browser.local_database.DatabaseHelper;
import org.chromium.chrome.browser.preferences.BravePref;
import org.chromium.chrome.browser.preferences.BravePrefServiceBridge;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.shields.BraveShieldsUtils;

import java.io.ByteArrayOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;

public class BraveStatsUtil {
Expand Down Expand Up @@ -95,7 +114,6 @@ public static String getCalculatedDate(String dateFormat, int days) {
}

public static void updateBraveStatsLayout(View view) {
Profile mProfile = Profile.getLastUsedRegularProfile();
TextView mAdsBlockedCountTextView =
(TextView) view.findViewById(R.id.brave_stats_text_ads_count);
TextView mDataSavedValueTextView =
Expand All @@ -109,24 +127,109 @@ public static void updateBraveStatsLayout(View view) {
TextView mEstTimeSavedCountTextTextView =
(TextView) view.findViewById(R.id.brave_stats_text_time_count_text);

List<Pair<String, String>> statsPairs = getStatsPairs();

mAdsBlockedCountTextView.setText(statsPairs.get(0).first);
mDataSavedValueTextView.setText(statsPairs.get(1).first);
mEstTimeSavedCountTextView.setText(statsPairs.get(2).first);
mAdsBlockedCountTextTextView.setText(statsPairs.get(0).second);
mDataSavedValueTextTextView.setText(statsPairs.get(1).second);
mEstTimeSavedCountTextTextView.setText(statsPairs.get(2).second);
}

public static void updateBraveShareStatsLayoutAndShare(View view) {
TextView mAdsBlockedCountTextView = (TextView) view.findViewById(R.id.stats_trackers_no);
TextView mDataSavedValueTextView = (TextView) view.findViewById(R.id.stats_saved_data_no);
TextView mEstTimeSavedCountTextView = (TextView) view.findViewById(R.id.stats_timed_no);

List<Pair<String, String>> statsPairs = getStatsPairs();
String trackersString =
String.format("%s %s", statsPairs.get(0).first, statsPairs.get(0).second);
String dataSavedString =
String.format("%s %s", statsPairs.get(1).first, statsPairs.get(1).second);
String timeSavedString =
String.format("%s %s", statsPairs.get(2).first, statsPairs.get(2).second);

mAdsBlockedCountTextView.setText(trackersString);
mDataSavedValueTextView.setText(dataSavedString);
mEstTimeSavedCountTextView.setText(timeSavedString);
shareStatsAction(view);
}

public static void shareStatsAction(View view) {
Context context = ContextUtils.getApplicationContext();
Bitmap bmp = convertToBitmap(view);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
String path = MediaStore.Images.Media.insertImage(
context.getContentResolver(), bmp, "tempimage", null);
Uri uri = Uri.parse(path);

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT,
context.getResources().getString(R.string.brave_stats_share_text));
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
sendIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sendIntent.setType("image/text");

Intent shareIntent = Intent.createChooser(sendIntent, " ");
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(shareIntent);
}

public static View getLayout(int layoutId) {
Context context = ContextUtils.getApplicationContext();
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(layoutId, null);

return layout;
}

private static Bitmap convertToBitmap(View view) {
view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
int totalHeight = view.getMeasuredHeight();
int totalWidth = view.getMeasuredWidth();

Bitmap canvasBitmap = Bitmap.createBitmap(totalWidth, totalHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(canvasBitmap);
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
view.draw(canvas);

return canvasBitmap;
}

private static List<Pair<String, String>> getStatsPairs() {
List<Pair<String, String>> statsPair = new ArrayList<>();
Profile mProfile = Profile.getLastUsedRegularProfile();
long trackersBlockedCount =
BravePrefServiceBridge.getInstance().getTrackersBlockedCount(mProfile);
long adsBlockedCount = BravePrefServiceBridge.getInstance().getAdsBlockedCount(mProfile);
long adsTrackersBlockedCount = trackersBlockedCount + adsBlockedCount;
long dataSaved = BravePrefServiceBridge.getInstance().getDataSaved(mProfile);
long estimatedMillisecondsSaved =
(trackersBlockedCount + adsBlockedCount) * MILLISECONDS_PER_ITEM;

Pair<String, String> adsTrackersPair =
getBraveStatsStringFormNumberPair(adsBlockedCount, false);
getBraveStatsStringFormNumberPair(adsTrackersBlockedCount, false);
Pair<String, String> dataSavedPair = getBraveStatsStringFormNumberPair(dataSaved, true);
Pair<String, String> timeSavedPair =
getBraveStatsStringFromTime(estimatedMillisecondsSaved / 1000);
statsPair.add(adsTrackersPair);
statsPair.add(dataSavedPair);
statsPair.add(timeSavedPair);

return statsPair;
}

public static Pair<String, String> getAdsTrackersBlocked() {
Profile mProfile = Profile.getLastUsedRegularProfile();
long trackersBlockedCount =
BravePrefServiceBridge.getInstance().getTrackersBlockedCount(mProfile);
long adsBlockedCount = BravePrefServiceBridge.getInstance().getAdsBlockedCount(mProfile);
long adsTrackersBlockedCount = trackersBlockedCount + adsBlockedCount;

mAdsBlockedCountTextView.setText(adsTrackersPair.first);
mDataSavedValueTextView.setText(dataSavedPair.first);
mEstTimeSavedCountTextView.setText(timeSavedPair.first);
mAdsBlockedCountTextTextView.setText(adsTrackersPair.second);
mDataSavedValueTextTextView.setText(dataSavedPair.second);
mEstTimeSavedCountTextTextView.setText(timeSavedPair.second);
return getBraveStatsStringFormNumberPair(adsTrackersBlockedCount, false);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,24 @@
import android.content.Context;
import android.content.ContextWrapper;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.ImageSpan;
import android.text.style.StyleSpan;
import android.util.TypedValue;
import android.view.ContextThemeWrapper;
import android.view.Gravity;
import android.view.LayoutInflater;
Expand All @@ -39,6 +44,7 @@
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListPopupWindow;
Expand All @@ -49,6 +55,8 @@
import android.widget.Switch;
import android.widget.TextView;

import androidx.core.widget.TextViewCompat;

import org.chromium.base.Log;
import org.chromium.base.SysUtils;
import org.chromium.base.task.AsyncTask;
Expand All @@ -65,6 +73,9 @@
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.util.ConfigurationUtils;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
Expand Down Expand Up @@ -278,11 +289,8 @@ public PopupWindow showPopupMenu(View anchorView) {
}

Rect bgPadding = new Rect();
popupWindow.getBackground().getPadding(bgPadding);

int popupWidth = wrapper.getResources().getDimensionPixelSize(R.dimen.menu_width)
+ bgPadding.left + bgPadding.right;

popupWindow.setWidth(popupWidth);

return popupWindow;
Expand Down Expand Up @@ -310,7 +318,7 @@ public int getAdsBlockedCount(int tabId) {
return blockersInfo.mAdsBlocked;
}

public int getTackersBlockedCount(int tabId) {
public int getTrackersBlockedCount(int tabId) {
if (!mTabsStat.containsKey(tabId)) {
return 0;
}
Expand Down Expand Up @@ -397,23 +405,26 @@ private void setUpMainLayout() {

Switch mShieldMainSwitch = mMainLayout.findViewById(R.id.site_switch);

ClickableSpan mClickableSpan = new ClickableSpan() {
ImageView helpImage = (ImageView) mMainLayout.findViewById(R.id.help);
ImageView shareImage = (ImageView) mMainLayout.findViewById(R.id.share);

helpImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View widget) {
public void onClick(View v) {
mMainLayout.setVisibility(View.GONE);
mAboutLayout.setVisibility(View.VISIBLE);
setUpAboutLayout();
}
};
});

TextView mSiteBlockText = mMainLayout.findViewById(R.id.site_block_text);
mSiteBlockText.setMovementMethod(LinkMovementMethod.getInstance());
String mBlockText = mContext.getResources().getString(R.string.ads_and_other_things_blocked) + " ";
SpannableString mSpannableString = new SpannableString(mBlockText);
ImageSpan mImageSpan = new ImageSpan(mContext, R.drawable.ic_help);
mSpannableString.setSpan(mImageSpan, mBlockText.length() - 1, mBlockText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mSpannableString.setSpan(mClickableSpan, mSpannableString.getSpanStart(mImageSpan), mSpannableString.getSpanEnd(mImageSpan), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mSiteBlockText.setText(mSpannableString);
shareImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mMainLayout.setVisibility(View.GONE);
View shareStatsLayout = BraveStatsUtil.getLayout(R.layout.brave_stats_share_layout);
BraveStatsUtil.updateBraveShareStatsLayoutAndShare(shareStatsLayout);
}
});

mToggleIcon.setColorFilter(mContext.getResources().getColor(R.color.shield_toggle_button_tint));
mToggleLayout.setOnClickListener(new View.OnClickListener() {
Expand Down Expand Up @@ -928,4 +939,4 @@ public void onClick(View view) {
hideBraveShieldsMenu();
}
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,36 @@ public class BraveShieldsUtils {
"shields_ads_tracker_blocked_tooltip";
public static final String PREF_SHIELDS_HTTPS_UPGRADE_TOOLTIP =
"shields_https_upgrade_tooltip";
public static final String PREF_SHARE_SHIELDS_TOOLTIP = "share_shields_tooltip";
public static final String PREF_ADS_TRACKERS_BLOCKED_NO = "ads_trackers_blocked_no";
public static final String PREF_DATA_SAVED_NO = "data_saved_no";
public static final String PREF_TIME_SAVED_NO = "time_saved_no";

public static final String PREF_SHARE_SHIELDS_TOOLTIP_TIER1 = "share_shields_tooltip_tier1";
public static final String PREF_SHARE_SHIELDS_TOOLTIP_TIER2 = "share_shields_tooltip_tier2";
public static final String PREF_SHARE_SHIELDS_TOOLTIP_TIER3 = "share_shields_tooltip_tier3";
public static final String PREF_SHARE_SHIELDS_TOOLTIP_TIER4 = "share_shields_tooltip_tier4";
public static final String PREF_SHARE_SHIELDS_TOOLTIP_TIER5 = "share_shields_tooltip_tier5";
public static final String PREF_SHARE_SHIELDS_TOOLTIP_TIER6 = "share_shields_tooltip_tier6";
public static final String PREF_SHARE_SHIELDS_TOOLTIP_TIER7 = "share_shields_tooltip_tier7";
public static final String PREF_SHARE_SHIELDS_TOOLTIP_TIER8 = "share_shields_tooltip_tier8";
public static final String PREF_SHARE_SHIELDS_TOOLTIP_TIER9 = "share_shields_tooltip_tier9";

public static final List<String> videoSitesList =
Arrays.asList("youtube.com", "vimeo.com", "twitch.tv");
public static final List<String> videoSitesListJp =
Arrays.asList("nicovideo.jp", "tiktok.com", "instagram.com");

public static final int BRAVE_BLOCKED_TIER1 = 1000;
public static final int BRAVE_BLOCKED_TIER2 = 5000;
public static final int BRAVE_BLOCKED_TIER3 = 10000;
public static final int BRAVE_BLOCKED_TIER4 = 25000;
public static final int BRAVE_BLOCKED_TIER5 = 75000;
public static final int BRAVE_BLOCKED_TIER6 = 100000;
public static final int BRAVE_BLOCKED_TIER7 = 250000;
public static final int BRAVE_BLOCKED_TIER8 = 500000;
public static final int BRAVE_BLOCKED_TIER9 = 1000000;

public static boolean isTooltipShown;

public interface BraveShieldsCallback {
Expand Down Expand Up @@ -134,4 +158,4 @@ private static void sendBraveShieldsFeedback(String domain) {
if (urlConnection != null) urlConnection.disconnect();
}
}
}
}
Loading