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

Stats social sharing #8508

Merged
merged 5 commits into from
Apr 12, 2021
Merged
Show file tree
Hide file tree
Changes from 3 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,41 @@

package org.chromium.chrome.browser.brave_stats;

import android.content.Context;
import android.content.DialogInterface;
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.AlertDialog;
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 +116,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 +129,106 @@ 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 = "" + statsPairs.get(0).first + " " + statsPairs.get(0).second;
String dataSavedString = "" + statsPairs.get(1).first + " " + statsPairs.get(1).second;
String timeSavedString = "" + 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 @@ -198,6 +209,19 @@ public void show(View anchorView, Tab tab) {
updateValues(mTabId);
}

protected 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;
}

public PopupWindow showPopupMenu(View anchorView) {
int rotation = ((Activity)mContext).getWindowManager().getDefaultDisplay().getRotation();
// This fixes the bug where the bottom of the menu starts at the top of
Expand Down Expand Up @@ -278,7 +302,8 @@ public PopupWindow showPopupMenu(View anchorView) {
}

Rect bgPadding = new Rect();
popupWindow.getBackground().getPadding(bgPadding);
// is this neccesary?
// popupWindow.getBackground().getPadding(bgPadding);

int popupWidth = wrapper.getResources().getDimensionPixelSize(R.dimen.menu_width)
+ bgPadding.left + bgPadding.right;
Expand Down Expand Up @@ -310,7 +335,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 +422,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 +956,4 @@ public void onClick(View view) {
hideBraveShieldsMenu();
}
};
}
}
Loading