Skip to content
This repository has been archived by the owner. It is now read-only.

Consolidated work on project bond #501

Closed
wants to merge 5 commits into from
Closed
Changes from 1 commit
Commits
File filter
Filter file types
Jump to
Jump to file
Failed to load files.

Always

Just for now

Next

AP-21 [Dashboard] Implement basic Dashboard view (#493)

* Gradle build now sync also features in the apk (#494)

* import history API using the geckoview path (#480)

* Privacy extension uplift adaptations (#470)

* Disable AMO detector (#483)

* Delete the extensions inside the profile in order to use the system addons packaged within the browser (#485)

* AB2-309 Change the text in the 'Privacy' settings menu (#487)

* AP-21 [Dashboard] Implement basic Dashboard view

* restructure bond src directory

* AP-31 Add tabs view

* AP-37 add money widget

* AP-32 add companies blocked widget

* fix crash of vector drawable < SDK 24

* AP-33 add dashboard controls

* restructor the src code agian

* differeniate tabs layout design from bond and standard

* hide money item from paid dashboard

* AP-64 fix dashboard after switching between landscape and portrait mode

* refactor based on reviews

* AP-44: change the browser name

* fix mach build

* Fix flavour dimensions (#2)

* remove the flavour dimension features

* Revert "fix mach build"

This reverts commit e99f891.

* Use standard resources in photon
  • Loading branch information
ravjit-cliqz committed Nov 13, 2018
commit 246d7b86966ea1059e080c206288c9d5ffa8e7f3
@@ -127,15 +127,15 @@ android {
/* Cliqz start */
//Photon is the only flavour, which doesnt make sense. But we cant remove it because it has a
//separate source set which is included by the build system. Merging main and photon source set
//will take some refactoring. For now we branch standard and premium from photon
//will take some refactoring. For now we branch standard and bond from photon
bond {
dimension "skin"
versionCode 5
}

standard {
dimension "skin"
versionCode 5 //version code can be same as premium because its a different app and package name is different
versionCode 5
}
/* Cliqz end */
}
@@ -234,28 +234,32 @@ android {
}

/* Cliqz start */
//photon should contain some implementation of CC. We take the implementation from standard version
photon {
java {
srcDir "${topsrcdir}/mobile/android/standard/java"
srcDir "${topsrcdir}/mobile/android/app/src/standard/java"
}
res {
srcDir "${topsrcdir}/mobile/android/app/src/standard/res"
}
}
bond {
java {
srcDir "${topsrcdir}/mobile/android/bond/java"
srcDir "${topsrcdir}/mobile/android/app/src/photon/java" //need to include the sources in the photon folder
srcDir "${topsrcdir}/mobile/android/app/src/bond/java"
srcDir "${topsrcdir}/mobile/android/app/src/photon/java"
}
res {
srcDir "${topsrcdir}/mobile/android/app/src/photon/res" //need to include the sources in the photon folder
srcDir "${topsrcdir}/mobile/android/app/src/bond/res"
srcDir "${topsrcdir}/mobile/android/app/src/photon/res"
}
}
standard {
java {
srcDir "${topsrcdir}/mobile/android/standard/java"
srcDir "${topsrcdir}/mobile/android/app/src/photon/java" //need to include the sources in the photon folder
srcDir "${topsrcdir}/mobile/android/app/src/standard/java"
srcDir "${topsrcdir}/mobile/android/app/src/photon/java"
}
res {
srcDir "${topsrcdir}/mobile/android/app/src/photon/res" //need to include the sources in the photon folder
srcDir "${topsrcdir}/mobile/android/app/src/standard/res"
srcDir "${topsrcdir}/mobile/android/app/src/photon/res"
}
}
/* Cliqz end */
@@ -917,4 +917,6 @@ pref("general.useragent.override.google.de", "Mozilla/5.0 (Linux; Android 8.0.0;

/* Cliqz start */
pref("media.autoplay.enabled", false);
/* Cliqz end */
// Prevent mozaddonmanager on AMO
pref("privacy.resistFingerprinting.block_mozAddonManager", true);
/* Cliqz end */
@@ -0,0 +1,19 @@
package org.mozilla.gecko.controlcenter;

import android.content.Context;
import android.support.v4.app.FragmentManager;

public class ControlCenterPagerAdapter extends BaseControlCenterPagerAdapter{

public ControlCenterPagerAdapter(FragmentManager fm, Context context) {
super(fm, context);
}

@Override
public void init(BaseControlCenterPagerAdapter.ControlCenterCallbacks controlCenterCallbacks) {
final DashboardTodayFragment dashboardTodayFragment = new DashboardTodayFragment();
final DashboardWeekFragment dashboardWeekFragment = new DashboardWeekFragment();
mFragmentList.add(dashboardTodayFragment);
mFragmentList.add(dashboardWeekFragment);
}
}
@@ -0,0 +1,238 @@
package org.mozilla.gecko.controlcenter;

import android.content.Context;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.support.graphics.drawable.VectorDrawableCompat;
import android.support.v7.widget.RecyclerView;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.TypefaceSpan;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import org.mozilla.gecko.R;
import org.mozilla.gecko.util.GeckoBundle;
import java.util.ArrayList;
import java.util.List;

/**
* Copyright © Cliqz 2018
*/
public class DashboardAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private Context mContext;
private List<DashboardItemEntity> mDashboardItems;
private enum ItemType {ONE_VIEW, TWO_VIEWS}
private final int MIN_MONEY_BAR_VALUE = 5;
public static final int AVERAGE_MONEY_BAR_VALUE = 5;

public DashboardAdapter(Context context) {
mContext = context;
mDashboardItems = new ArrayList<>();
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == ItemType.ONE_VIEW.ordinal()) {
final View view = LayoutInflater.from(mContext).inflate(R.layout.dashboard_item1,
parent, false);
return new ItemViewHolder(view);
} else {
final View view = LayoutInflater.from(mContext).inflate(R.layout.dashboard_item2,
parent, false);
return new TwoItemsViewHolder(view);
}
}

public void setTwoItemsRowValues(ItemStructure view, DashboardItemEntity item) {
final Drawable drawable = VectorDrawableCompat.create(mContext.getResources(), item
.getIconResId(), null);
view.itemIconView.setImageDrawable(drawable);
String measurementText = item.getMeasurementValue();
final int unitStartIdx = measurementText.length();
if (!item.getMeasurementUnit().isEmpty()) {
measurementText = measurementText.concat("\n").concat(item.getMeasurementUnit());
}
Spannable spannable = new SpannableString(measurementText);
spannable.setSpan(new TypefaceSpan(mContext.getString(R.string.roboto_light)), unitStartIdx, measurementText.length()
, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
view.itemMeasurementView.setText(spannable);
view.itemTitleView.setText(item.getTitle());
view.itemContentView.setText(item.getContent());
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder.getItemViewType() == ItemType.TWO_VIEWS.ordinal()) {
final TwoItemsViewHolder viewHolder = (TwoItemsViewHolder) holder;
setTwoItemsRowValues(viewHolder.leftItem, mDashboardItems.get(position));
setTwoItemsRowValues(viewHolder.rightItem, mDashboardItems.get(position + 1));
} else {
final ItemViewHolder itemViewHolder = (ItemViewHolder) holder;
// +1 because first 2 items is combined in 1 item
final DashboardItemEntity curItem = mDashboardItems.get(position + 1);

if (curItem.getIconResId() != -1) {
final Drawable drawable = VectorDrawableCompat.create(mContext.getResources(), curItem
.getIconResId(), null);
itemViewHolder.itemIconView.setVisibility(View.VISIBLE);
itemViewHolder.itemIconView.setImageDrawable(drawable);
} else {
itemViewHolder.itemIconView.setVisibility(View.GONE);
}

if(curItem.getMeasurementValue().isEmpty()) { // no measurement value
itemViewHolder.itemMeasurementView.setVisibility(View.GONE);
} else {
itemViewHolder.itemMeasurementView.setVisibility(View.VISIBLE);
final Spannable spannableValue = new SpannableString(curItem.getMeasurementValue());
final Spannable spannableUnit = new SpannableString(curItem.getMeasurementUnit());
String separator;
if (curItem.getIconResId() != -1) { //measurement value exist with icon
final int valueTextSize = (int)mContext.getResources()
.getDimension(R.dimen.dashboard_measurement_value_size);
final int unitTextSize = (int)mContext.getResources()
.getDimension(R.dimen.dashboard_measurement_unit_size);

spannableValue.setSpan(new AbsoluteSizeSpan(valueTextSize), 0,
curItem.getMeasurementValue().length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

spannableUnit.setSpan(new AbsoluteSizeSpan(unitTextSize), 0,
curItem.getMeasurementUnit().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
itemViewHolder.itemMeasurementView.setTypeface(Typeface.SANS_SERIF);
separator = "";
} else { //measurement value exist with no icon
final int valueTextSize = (int)mContext.getResources()
.getDimension(R.dimen.dashboard_measurement_value_size_large);

spannableValue.setSpan(new TypefaceSpan(mContext.getString(R.string.roboto_light))
, 0, curItem.getMeasurementValue().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

spannableUnit.setSpan(new TypefaceSpan(mContext.getString(R.string.roboto_medium))
, 0, curItem.getMeasurementUnit().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

itemViewHolder.itemMeasurementView.setTextSize(TypedValue.COMPLEX_UNIT_PX, valueTextSize);
separator = "\n";
}
itemViewHolder.itemMeasurementView.setText(TextUtils.concat(spannableValue,separator,spannableUnit));
}
itemViewHolder.itemTitleView.setText(curItem.getTitle());
itemViewHolder.itemContentView.setText(curItem.getContent());

if(curItem.getOptionValue() == -1) {
itemViewHolder.itemMoneyBarView.setVisibility(View.GONE);
itemViewHolder.itemMoneyBarValueView.setVisibility(View.GONE);
} else {
itemViewHolder.itemMoneyBarView.setVisibility(View.VISIBLE);
final int curMoneyValue = curItem.getOptionValue() + MIN_MONEY_BAR_VALUE;
itemViewHolder.itemMoneyBarView.setProgress(curMoneyValue);
itemViewHolder.itemMoneyBarValueView.setText(String.valueOf(curItem.getOptionValue() +
MIN_MONEY_BAR_VALUE).concat(""));

itemViewHolder.itemMoneyBarView.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
itemViewHolder.itemMoneyBarValueView.setText(String.valueOf(progress +
MIN_MONEY_BAR_VALUE).concat(""));
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}
});

itemViewHolder.itemMoneyBarValueView.setVisibility(View.VISIBLE);
}
}
}

@Override
public int getItemViewType(int position) {
return position == 0 ? ItemType.TWO_VIEWS.ordinal() : ItemType.ONE_VIEW.ordinal();
}

@Override
public int getItemCount() { // -1, because first 2 items combined in the first view
return mDashboardItems.size() - 1;
}

void setData(GeckoBundle data) {
// @TODO fetch the data and fill the list
}

public void addItems(List<DashboardItemEntity> items) {
mDashboardItems.clear();
mDashboardItems.addAll(items);
notifyDataSetChanged();
}

private class ItemViewHolder extends RecyclerView.ViewHolder {
public ImageView itemIconView;
public TextView itemMeasurementView;
public TextView itemTitleView;
public TextView itemContentView;
public SeekBar itemMoneyBarView;
public TextView itemMoneyBarValueView;

public ItemViewHolder(View itemView) {
super(itemView);
itemIconView = (ImageView) itemView.findViewById(R.id.item_icon);
itemMeasurementView = (TextView) itemView.findViewById(R.id.item_measurement);
itemTitleView = (TextView) itemView.findViewById(R.id.item_title);
itemContentView = (TextView) itemView.findViewById(R.id.item_content);
itemMoneyBarView = (SeekBar) itemView.findViewById(R.id.item_money_bar);
itemMoneyBarValueView = (TextView) itemView.findViewById(R.id.item_money_bar_value);
}
}

private class ItemStructure {
public ImageView itemIconView;
public TextView itemMeasurementView;
public TextView itemTitleView;
public TextView itemContentView;
}

private class TwoItemsViewHolder extends RecyclerView.ViewHolder {
final ItemStructure leftItem, rightItem;

public TwoItemsViewHolder(View itemView) {
super(itemView);
final View leftView = itemView.findViewById(R.id.left_item);
leftItem = findViews(leftView);
final View rightView = itemView.findViewById(R.id.right_item);
rightItem = findViews(rightView);
}

private ItemStructure findViews(View view) {
final ItemStructure item = new ItemStructure();
item.itemTitleView = (TextView) view.findViewById(R.id.item_title);
item.itemContentView = (TextView) view.findViewById(R.id.item_content);
item.itemMeasurementView = (TextView) view.findViewById(R.id.item_measurement);
item.itemIconView = (ImageView) view.findViewById(R.id.item_icon);
return item;
}
}

public void resetData() {
for(int i = 0;i < mDashboardItems.size(); i++) {
if(!mDashboardItems.get(i).getMeasurementValue().equals("")) {
mDashboardItems.get(i).setMeasurementValue("0");
}
}
notifyDataSetChanged();
}
}
@@ -0,0 +1,70 @@
package org.mozilla.gecko.controlcenter;

/**
* Copyright © Cliqz 2018
*/
public class DashboardItemEntity {
private String measurementValue;
private String measurementUnit;
private int iconResId;
private String title;
private String content;
private int optionValue;

public DashboardItemEntity(String measurementValue, String measurementUnit, int iconResId, String title, String content, int optionValue) {
this.measurementValue = measurementValue;
this.measurementUnit = measurementUnit;
this.iconResId = iconResId;
this.title = title;
this.content = content;
this.optionValue = optionValue;
}

public String getMeasurementValue() {
return measurementValue;
}

public void setMeasurementValue(String measurementValue) {
this.measurementValue = measurementValue;
}

public String getMeasurementUnit() {
return measurementUnit;
}

public void setMeasurementUnit(String measurementUnit) {
this.measurementUnit = measurementUnit;
}

public int getIconResId() {
return iconResId;
}

public void setIconResId(int iconResId) {
this.iconResId = iconResId;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public int getOptionValue() {
return optionValue;
}

public void setOptionValue(int optionValue) {
this.optionValue = optionValue;
}
}
ProTip! Use n and p to navigate between commits in a pull request.