From 93db29f5ffff6ab5a3d68c03faa53fb6c69363f6 Mon Sep 17 00:00:00 2001 From: Stefano Pacifici Date: Wed, 3 Jul 2019 17:34:24 +0200 Subject: [PATCH] WIP --- app/build.gradle | 3 + .../cliqz/browser/main/HistoryFragment.java | 114 ++++-------------- .../browser/starttab/StartTabContainer.java | 5 +- .../browser/starttab/HistoryAdapter.java | 8 +- .../starttab/HistoryItemTouchHelper.java | 4 +- 5 files changed, 34 insertions(+), 100 deletions(-) rename app/src/{lumen => main}/java/com/cliqz/browser/starttab/HistoryItemTouchHelper.java (93%) diff --git a/app/build.gradle b/app/build.gradle index 38034bf0f..dadce072d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -108,6 +108,9 @@ android { universalApk false } } + testOptions { + animationsDisabled = true + } } dexcount { diff --git a/app/src/cliqz/java/com/cliqz/browser/main/HistoryFragment.java b/app/src/cliqz/java/com/cliqz/browser/main/HistoryFragment.java index dc48f01f4..e045fe896 100644 --- a/app/src/cliqz/java/com/cliqz/browser/main/HistoryFragment.java +++ b/app/src/cliqz/java/com/cliqz/browser/main/HistoryFragment.java @@ -2,24 +2,27 @@ import android.database.Cursor; import android.os.Bundle; -import androidx.annotation.Nullable; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.ItemTouchHelper; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.ItemTouchHelper; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import com.cliqz.browser.R; +import com.cliqz.browser.app.BrowserApp; import com.cliqz.browser.overview.OverviewFragment; import com.cliqz.browser.overview.OverviewTabsEnum; -import com.cliqz.browser.webview.CliqzMessages; +import com.cliqz.browser.starttab.HistoryAdapter; +import com.cliqz.browser.starttab.HistoryItemTouchHelper; import com.cliqz.nove.Subscribe; import java.util.ArrayList; -import java.util.Collections; +import java.util.Objects; import butterknife.BindView; import butterknife.ButterKnife; @@ -32,7 +35,6 @@ public class HistoryFragment extends FragmentWithBus { private boolean isMultiSelect; private HistoryAdapter adapter; - private final ArrayList historyList = new ArrayList<>(); private View contextualToolBar; private TextView contextualToolBarTitle; @@ -48,6 +50,9 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, contextualToolBarTitle = contextualToolBar.findViewById(R.id.contextual_title); final View view = inflater.inflate(R.layout.fragment_history, container, false); ButterKnife.bind(this,view); + final FlavoredActivityComponent component = BrowserApp.getActivityComponent(getContext()); + Objects.requireNonNull(component).inject(this); + adapter = new HistoryAdapter(engine, handler, bus); return view; } @@ -62,45 +67,13 @@ public void onStart() { preferenceManager.setShouldClearQueries(PreferenceManager.ClearQueriesOptions.NO); }*/ prepareListData(); - if (historyList.size() == 0) { + if (adapter.getItemCount() == 0) { noHistoryMessage.setVisibility(View.VISIBLE); return; } noHistoryMessage.setVisibility(View.GONE); if (adapter == null) { - adapter = new HistoryAdapter(historyList, engine, handler, new HistoryAdapter.ClickListener() { - @Override - public void onClick(View view, int position) { - //ignore click on date - if (adapter.getItemViewType(position) == HistoryAdapter.VIEW_TYPE_DATE) { - return; - } - if (isMultiSelect) { - multiSelect(position); - } else if (adapter.getItemViewType(position) == HistoryAdapter.VIEW_TYPE_HISTORY) { - bus.post(CliqzMessages.OpenLink.openFromHistory(historyList.get(position).getUrl())); - } else if (adapter.getItemViewType(position) == HistoryAdapter.VIEW_TYPE_QUERY) { - bus.post(new Messages.OpenQuery(historyList.get(position).getUrl())); - } - } - - @Override - public void onLongPress(View view, int position) { - //if view is being swiped ignore long press - if (view.getTranslationX() != 0) { - return; - } - //ignore long press on date - if (adapter.getItemViewType(position) == HistoryAdapter.VIEW_TYPE_DATE) { - return; - } - if (!isMultiSelect) { - adapter.multiSelectList.clear(); - showContextualMenu(); - } - multiSelect(position); - } - }); + adapter = new HistoryAdapter(engine, handler, bus); } prepareRecyclerView(); } @@ -130,7 +103,7 @@ public void onContextualBarCanceled(Messages.OnContextualBarCancelPressed event) public void onContextualBarDelete(Messages.OnContextualBarDeletePressed event) { if (((OverviewFragment)getParentFragment()).getCurrentPageIndex() == OverviewTabsEnum.HISTORY.getFragmentIndex()) { - deleteSelectedItems(); + // deleteSelectedItems(); } } @@ -142,59 +115,17 @@ private void prepareRecyclerView() { historyListView.setLayoutManager(new LinearLayoutManager(getContext())); //callback to handle swipe and delete - final ItemTouchHelper.SimpleCallback simpleItemTouchCallback = - new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) { - - @Override - public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { - //Dont swipe date view and when contextual menu is enabled - if (viewHolder instanceof HistoryAdapter.DateViewHolder || isMultiSelect) { - return 0; - } - return super.getSwipeDirs(recyclerView, viewHolder); - } - - @Override - public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, - RecyclerView.ViewHolder target) { - return false; - } - - @Override - public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { - final int position = viewHolder.getAdapterPosition(); - final int type = viewHolder.getItemViewType(); - if (type == HistoryAdapter.VIEW_TYPE_HISTORY) { - historyDatabase.deleteHistoryPoint(historyList.get(position).getId()); - } else { - historyDatabase.deleteQuery(historyList.get(position).getId()); - } - historyList.remove(position); - adapter.notifyItemRemoved(position); - //check if date view is to be removed - if ((position == historyList.size() - || historyListView.getAdapter().getItemViewType(position) == HistoryAdapter.VIEW_TYPE_DATE) - && historyListView.getAdapter().getItemViewType(position - 1 ) == HistoryAdapter.VIEW_TYPE_DATE) { - historyList.remove(position-1); - adapter.notifyItemRemoved(position-1); - if (historyList.size() == 0) { - noHistoryMessage.setVisibility(View.VISIBLE); - } - } - } - }; - - //callbacks for click and long click on items - final ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback); + final ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new HistoryItemTouchHelper(historyDatabase, adapter)); itemTouchHelper.attachToRecyclerView(historyListView); historyListView.setAdapter(adapter); - historyListView.scrollToPosition(historyList.size()-1); + historyListView.scrollToPosition(adapter.getItemCount()-1); } private void prepareListData() { //TODO historyDatabase.getHistoryItemsCount has to be modified to get the limit correctly; - historyList.clear(); - final Cursor cursor = historyDatabase.getHistoryItemsForRecyclerView(0, historyDatabase.getHistoryItemsCount()); + final int itemsCount = historyDatabase.getHistoryItemsCount(); + final ArrayList historyList = new ArrayList<>(itemsCount); + final Cursor cursor = historyDatabase.getHistoryItemsForRecyclerView(0, itemsCount); final int typeIndex = cursor.getColumnIndex("type"); final int idIndex = cursor.getColumnIndex("id"); final int urlIndex = cursor.getColumnIndex("url"); @@ -208,8 +139,10 @@ private void prepareListData() { cursor.getInt(typeIndex))); } cursor.close(); + adapter.setHistory(historyList); } + /* private void multiSelect(int position) { if (adapter.multiSelectList.contains(position)) { adapter.multiSelectList.remove(Integer.valueOf(position)); @@ -250,6 +183,7 @@ private void deleteSelectedItems() { historyListView.scrollToPosition(historyList.size() - 1); hideContextualMenu(); } + */ private void showContextualMenu() { //if its already visible dont execute the next lines @@ -268,7 +202,7 @@ private void hideContextualMenu() { return; } isMultiSelect = false; - adapter.multiSelectList.clear(); + // adapter.multiSelectList.clear(); adapter.notifyDataSetChanged(); getParentFragment().setHasOptionsMenu(true); setDisplayHomeAsUpEnabled(true); diff --git a/app/src/cliqz/java/com/cliqz/browser/starttab/StartTabContainer.java b/app/src/cliqz/java/com/cliqz/browser/starttab/StartTabContainer.java index fa33f4c23..400812ce2 100644 --- a/app/src/cliqz/java/com/cliqz/browser/starttab/StartTabContainer.java +++ b/app/src/cliqz/java/com/cliqz/browser/starttab/StartTabContainer.java @@ -29,10 +29,7 @@ public StartTabContainer(@NonNull Context context, @Nullable AttributeSet attrs) public StartTabContainer(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); - } - - public void init(FragmentManager supportFragmentManager, PreferenceManager preferenceManager) { - mFreshtab = new Freshtab(getContext()); + mFreshtab = new Freshtab(context); addView(mFreshtab); } diff --git a/app/src/main/java/com/cliqz/browser/starttab/HistoryAdapter.java b/app/src/main/java/com/cliqz/browser/starttab/HistoryAdapter.java index 615317081..d9ec3937e 100644 --- a/app/src/main/java/com/cliqz/browser/starttab/HistoryAdapter.java +++ b/app/src/main/java/com/cliqz/browser/starttab/HistoryAdapter.java @@ -38,9 +38,9 @@ */ public class HistoryAdapter extends RecyclerView.Adapter { - static final int VIEW_TYPE_DATE = 0; - static final int VIEW_TYPE_HISTORY = 1; - static final int VIEW_TYPE_QUERY = 2; + public static final int VIEW_TYPE_DATE = 0; + public static final int VIEW_TYPE_HISTORY = 1; + public static final int VIEW_TYPE_QUERY = 2; private final Bus bus; private final Engine engine; private final Handler handler; @@ -49,7 +49,7 @@ public class HistoryAdapter extends RecyclerView.Adapter multiSelectList = new ArrayList<>(); - HistoryAdapter(Engine engine, Handler handler, + public HistoryAdapter(Engine engine, Handler handler, Bus bus) { this.historyList = new ArrayList<>(); this.engine = engine; diff --git a/app/src/lumen/java/com/cliqz/browser/starttab/HistoryItemTouchHelper.java b/app/src/main/java/com/cliqz/browser/starttab/HistoryItemTouchHelper.java similarity index 93% rename from app/src/lumen/java/com/cliqz/browser/starttab/HistoryItemTouchHelper.java rename to app/src/main/java/com/cliqz/browser/starttab/HistoryItemTouchHelper.java index 5756c6a66..bbce69aaa 100644 --- a/app/src/lumen/java/com/cliqz/browser/starttab/HistoryItemTouchHelper.java +++ b/app/src/main/java/com/cliqz/browser/starttab/HistoryItemTouchHelper.java @@ -8,12 +8,12 @@ import acr.browser.lightning.database.HistoryDatabase; -class HistoryItemTouchHelper extends ItemTouchHelper.SimpleCallback { +public class HistoryItemTouchHelper extends ItemTouchHelper.SimpleCallback { private final HistoryDatabase db; private final HistoryAdapter adapter; - HistoryItemTouchHelper(HistoryDatabase db, HistoryAdapter adapter) { + public HistoryItemTouchHelper(HistoryDatabase db, HistoryAdapter adapter) { super(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT); this.db = db; this.adapter = adapter;