Skip to content

Commit

Permalink
Merge pull request #8508 from brave/stats-social-sharing
Browse files Browse the repository at this point in the history
Stats social sharing
  • Loading branch information
alexsafe authored Apr 12, 2021
2 parents 79aeb63 + a6b66a0 commit c5443ff
Show file tree
Hide file tree
Showing 20 changed files with 547 additions and 39 deletions.
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

0 comments on commit c5443ff

Please sign in to comment.