diff --git a/app/src/main/java/org/kiwix/kiwixmobile/data/DataModule.java b/app/src/main/java/org/kiwix/kiwixmobile/data/DataModule.java index 9c2d1ddec..0faca15cc 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/data/DataModule.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/data/DataModule.java @@ -1,5 +1,9 @@ package org.kiwix.kiwixmobile.data; +import org.kiwix.kiwixmobile.di.qualifiers.Computation; +import org.kiwix.kiwixmobile.di.qualifiers.IO; +import org.kiwix.kiwixmobile.di.qualifiers.MainThread; + import javax.inject.Singleton; import dagger.Module; diff --git a/app/src/main/java/org/kiwix/kiwixmobile/data/DataSource.java b/app/src/main/java/org/kiwix/kiwixmobile/data/DataSource.java index 3cc873bab..9ad6a181b 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/data/DataSource.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/data/DataSource.java @@ -22,5 +22,7 @@ public interface DataSource { Single> getDateCategorizedHistory(boolean showHistoryCurrentBook); - void saveHistory(String file, String favicon, String url, String title, long timeStamp); + Completable saveHistory(String file, String favicon, String url, String title, long timeStamp); + + Completable deleteHistory(List historyList); } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/data/Repository.java b/app/src/main/java/org/kiwix/kiwixmobile/data/Repository.java index cca5a4a15..5d6a778ed 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/data/Repository.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/data/Repository.java @@ -4,6 +4,8 @@ import org.kiwix.kiwixmobile.data.local.dao.BookDao; import org.kiwix.kiwixmobile.data.local.dao.HistoryDao; import org.kiwix.kiwixmobile.data.local.entity.History; import org.kiwix.kiwixmobile.data.local.dao.NetworkLanguageDao; +import org.kiwix.kiwixmobile.di.qualifiers.IO; +import org.kiwix.kiwixmobile.di.qualifiers.MainThread; import org.kiwix.kiwixmobile.library.entity.LibraryNetworkEntity; import org.kiwix.kiwixmobile.models.Language; @@ -108,11 +110,20 @@ public class Repository implements DataSource { history = histories.get(position); } return histories; - }); + }) + .subscribeOn(io) + .observeOn(mainThread); } @Override - public void saveHistory(String file, String favicon, String url, String title, long timeStamp) { - historyDao.saveHistory(file, favicon, url, title, timeStamp); + public Completable saveHistory(String file, String favicon, String url, String title, long timeStamp) { + return Completable.fromAction(() -> historyDao.saveHistory(file, favicon, url, title, timeStamp)) + .subscribeOn(io); + } + + @Override + public Completable deleteHistory(List historyList) { + return Completable.fromAction(() -> historyDao.deleteHistory(historyList)) + .subscribeOn(io); } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/data/local/dao/HistoryDao.java b/app/src/main/java/org/kiwix/kiwixmobile/data/local/dao/HistoryDao.java index 150c167a8..29d40993a 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/data/local/dao/HistoryDao.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/data/local/dao/HistoryDao.java @@ -8,6 +8,7 @@ import org.kiwix.kiwixmobile.data.local.KiwixDatabase; import org.kiwix.kiwixmobile.data.local.entity.History; import java.util.ArrayList; +import java.util.List; import javax.inject.Inject; @@ -24,7 +25,7 @@ public class HistoryDao { .setHistoryUrl(url).setHistoryTitle(title).setTimeStamp(timeStamp)); } - public ArrayList getHistoryList(boolean showHistoryCurrentBook) { + public List getHistoryList(boolean showHistoryCurrentBook) { ArrayList histories = new ArrayList<>(); Query query = Query.select(); if (showHistoryCurrentBook) { @@ -44,4 +45,10 @@ public class HistoryDao { } return histories; } + + public void deleteHistory(List historyList) { + for (History history : historyList) { + kiwixDatabase.deleteWhere(History.class, History.TIME_STAMP.eq(history.getTimeStamp())); + } + } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/data/Computation.java b/app/src/main/java/org/kiwix/kiwixmobile/di/qualifiers/Computation.java similarity index 81% rename from app/src/main/java/org/kiwix/kiwixmobile/data/Computation.java rename to app/src/main/java/org/kiwix/kiwixmobile/di/qualifiers/Computation.java index 0d581cb5e..fa484c996 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/data/Computation.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/di/qualifiers/Computation.java @@ -1,4 +1,4 @@ -package org.kiwix.kiwixmobile.data; +package org.kiwix.kiwixmobile.di.qualifiers; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/app/src/main/java/org/kiwix/kiwixmobile/data/IO.java b/app/src/main/java/org/kiwix/kiwixmobile/di/qualifiers/IO.java similarity index 80% rename from app/src/main/java/org/kiwix/kiwixmobile/data/IO.java rename to app/src/main/java/org/kiwix/kiwixmobile/di/qualifiers/IO.java index 54d712c2c..087646bc9 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/data/IO.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/di/qualifiers/IO.java @@ -1,4 +1,4 @@ -package org.kiwix.kiwixmobile.data; +package org.kiwix.kiwixmobile.di.qualifiers; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/app/src/main/java/org/kiwix/kiwixmobile/data/MainThread.java b/app/src/main/java/org/kiwix/kiwixmobile/di/qualifiers/MainThread.java similarity index 81% rename from app/src/main/java/org/kiwix/kiwixmobile/data/MainThread.java rename to app/src/main/java/org/kiwix/kiwixmobile/di/qualifiers/MainThread.java index 6fc9676b4..18aef51b3 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/data/MainThread.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/di/qualifiers/MainThread.java @@ -1,4 +1,4 @@ -package org.kiwix.kiwixmobile.data; +package org.kiwix.kiwixmobile.di.qualifiers; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/app/src/main/java/org/kiwix/kiwixmobile/history/HistoryActivity.java b/app/src/main/java/org/kiwix/kiwixmobile/history/HistoryActivity.java index 700c30443..c5102ad90 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/history/HistoryActivity.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/history/HistoryActivity.java @@ -4,12 +4,15 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.provider.Settings; +import android.support.v4.content.ContextCompat; import android.support.v7.app.ActionBar; +import android.support.v7.view.ActionMode; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SearchView; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; +import android.widget.ImageView; import org.kiwix.kiwixmobile.R; import org.kiwix.kiwixmobile.base.BaseActivity; @@ -25,11 +28,16 @@ import javax.inject.Inject; import butterknife.BindView; +import static org.kiwix.kiwixmobile.library.LibraryAdapter.createBitmapFromEncodedString; import static org.kiwix.kiwixmobile.utils.Constants.EXTRA_CHOSE_X_URL; public class HistoryActivity extends BaseActivity implements HistoryContract.View, HistoryAdapter.OnItemClickListener { + private final List historyList = new ArrayList<>(); + private final List fullHistory = new ArrayList<>(); + private final List deleteList = new ArrayList<>(); + @BindView(R.id.activity_history_toolbar) Toolbar toolbar; @BindView(R.id.activity_history_recycler_view) @@ -37,9 +45,62 @@ public class HistoryActivity extends BaseActivity implements HistoryContract.Vie @Inject HistoryContract.Presenter presenter; + private boolean refreshAdapter = true; private HistoryAdapter historyAdapter; - private List historyList = new ArrayList<>(); - private List fullHistory = new ArrayList<>(); + private ActionMode actionMode; + private final ActionMode.Callback actionModeCallback = new ActionMode.Callback() { + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + mode.getMenuInflater().inflate(R.menu.menu_context_history, menu); + return true; + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return false; + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + refreshAdapter = false; + switch (item.getItemId()) { + case R.id.menu_context_history_delete: + fullHistory.removeAll(deleteList); + for (History history : deleteList) { + int position = historyList.indexOf(history); + /* + Delete the current category header if there are no items after the current one or + if the item being removed is between two category headers. + */ + if (position - 1 >= 0 && historyList.get(position - 1) == null && + (position + 1 >= historyList.size() || + (position + 1 < historyList.size() && historyList.get(position + 1) == null))) { + historyList.remove(position - 1); + historyAdapter.notifyItemRemoved(position - 1); + } + position = historyList.indexOf(history); + historyList.remove(history); + historyAdapter.notifyItemRemoved(position); + historyAdapter.notifyItemRangeChanged(position, historyAdapter.getItemCount()); + } + mode.finish(); + return true; + } + return false; + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + if (deleteList.size() != 0) { + presenter.deleteHistory(new ArrayList<>(deleteList)); + deleteList.clear(); + } + actionMode = null; + if (refreshAdapter) { + historyAdapter.notifyDataSetChanged(); + } + } + }; @Override protected void onCreate(Bundle savedInstanceState) { @@ -52,7 +113,7 @@ public class HistoryActivity extends BaseActivity implements HistoryContract.Vie if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } - historyAdapter = new HistoryAdapter(this); + historyAdapter = new HistoryAdapter(historyList, deleteList, this); recyclerView.setAdapter(historyAdapter); } @@ -80,6 +141,10 @@ public class HistoryActivity extends BaseActivity implements HistoryContract.Vie public boolean onQueryTextChange(String newText) { historyList.clear(); historyList.addAll(fullHistory); + if ("".equals(newText)) { + historyAdapter.notifyDataSetChanged(); + return true; + } presenter.filterHistory(historyList, newText); return true; } @@ -110,30 +175,60 @@ public class HistoryActivity extends BaseActivity implements HistoryContract.Vie @Override public void updateHistoryList(List historyList) { - this.historyList = historyList; fullHistory.clear(); fullHistory.addAll(historyList); - notifyHistoryListFiltered(this.historyList); + notifyHistoryListFiltered(historyList); } @Override public void notifyHistoryListFiltered(List historyList) { - historyAdapter.setHistoryList(historyList); + this.historyList.clear(); + this.historyList.addAll(historyList); + historyAdapter.notifyDataSetChanged(); } @Override - public void openHistoryUrl(String url, String zimFile) { - Intent intent = new Intent(this, MainActivity.class); - intent.putExtra(EXTRA_CHOSE_X_URL, url); - if (!zimFile.equals(ZimContentProvider.getZimFile())) { - intent.setData(Uri.fromFile(new File(zimFile))); - } - if (Settings.System.getInt(getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0) == 1) { - startActivity(intent); - finish(); + public void onItemClick(ImageView favicon, History history) { + if (actionMode == null) { + Intent intent = new Intent(this, MainActivity.class); + intent.putExtra(EXTRA_CHOSE_X_URL, history.getHistoryUrl()); + if (!history.getZimFile().equals(ZimContentProvider.getZimFile())) { + intent.setData(Uri.fromFile(new File(history.getZimFile()))); + } + if (Settings.System.getInt(getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0) == 1) { + startActivity(intent); + finish(); + } else { + setResult(RESULT_OK, intent); + finish(); + } } else { - setResult(RESULT_OK, intent); - finish(); + toggleSelection(favicon, history); + } + } + + @Override + public boolean onItemLongClick(ImageView favicon, History history) { + if (actionMode != null) { + return false; + } + actionMode = startSupportActionMode(actionModeCallback); + refreshAdapter = true; + toggleSelection(favicon, history); + return true; + } + + private void toggleSelection(ImageView favicon, History history) { + if (deleteList.remove(history)) { + favicon.setImageBitmap(createBitmapFromEncodedString(history.getFavicon(), this)); + } else { + favicon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_check_circle_blue_24dp)); + deleteList.add(history); + } + actionMode.setTitle(getString(R.string.selected_items, deleteList.size())); + + if (deleteList.size() == 0) { + actionMode.finish(); } } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/history/HistoryAdapter.java b/app/src/main/java/org/kiwix/kiwixmobile/history/HistoryAdapter.java index 6aeec759f..9a2e7ef3b 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/history/HistoryAdapter.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/history/HistoryAdapter.java @@ -1,6 +1,7 @@ package org.kiwix.kiwixmobile.history; import android.support.annotation.NonNull; +import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; @@ -10,10 +11,8 @@ import android.widget.TextView; import org.kiwix.kiwixmobile.R; import org.kiwix.kiwixmobile.data.local.entity.History; -import org.kiwix.kiwixmobile.library.LibraryAdapter; import java.text.DateFormat; -import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Locale; @@ -21,12 +20,17 @@ import java.util.Locale; import butterknife.BindView; import butterknife.ButterKnife; -class HistoryAdapter extends RecyclerView.Adapter { - private static int TYPE_ITEM = 1; - private List historyList = new ArrayList<>(); - private OnItemClickListener itemClickListener; +import static org.kiwix.kiwixmobile.library.LibraryAdapter.createBitmapFromEncodedString; - HistoryAdapter(OnItemClickListener itemClickListener) { +class HistoryAdapter extends RecyclerView.Adapter { + private static final int TYPE_ITEM = 1; + private final List historyList; + private final OnItemClickListener itemClickListener; + private final List deleteList; + + HistoryAdapter(List historyList, List deleteList, OnItemClickListener itemClickListener) { + this.historyList = historyList; + this.deleteList = deleteList; this.itemClickListener = itemClickListener; } @@ -48,10 +52,16 @@ class HistoryAdapter extends RecyclerView.Adapter { History history = historyList.get(position); Item item = (Item) holder; item.title.setText(history.getHistoryTitle()); - item.favicon.setImageBitmap(LibraryAdapter.createBitmapFromEncodedString(history.getFavicon(), - item.favicon.getContext())); - item.itemView.setOnClickListener(v -> itemClickListener - .openHistoryUrl(history.getHistoryUrl(), history.getZimFile())); + if (deleteList.contains(history)) { + item.favicon.setImageDrawable(ContextCompat.getDrawable(item.favicon.getContext(), + R.drawable.ic_check_circle_blue_24dp)); + } else { + item.favicon.setImageBitmap(createBitmapFromEncodedString(history.getFavicon(), + item.favicon.getContext())); + } + item.itemView.setOnClickListener(v -> itemClickListener.onItemClick(item.favicon, history)); + item.itemView.setOnLongClickListener(v -> + itemClickListener.onItemLongClick(item.favicon, history)); } else { DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.getDefault()); ((Category) holder).date.setText(dateFormat.format(new Date(historyList.get(position + 1) @@ -69,13 +79,10 @@ class HistoryAdapter extends RecyclerView.Adapter { return historyList.size(); } - public void setHistoryList(List historyList) { - this.historyList = historyList; - notifyDataSetChanged(); - } - interface OnItemClickListener { - void openHistoryUrl(String historyUrl, String zimFile); + void onItemClick(ImageView favicon, History history); + + boolean onItemLongClick(ImageView favicon, History history); } class Item extends RecyclerView.ViewHolder { diff --git a/app/src/main/java/org/kiwix/kiwixmobile/history/HistoryContract.java b/app/src/main/java/org/kiwix/kiwixmobile/history/HistoryContract.java index 41c3eb497..8e2885f4a 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/history/HistoryContract.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/history/HistoryContract.java @@ -16,5 +16,7 @@ interface HistoryContract { void loadHistory(boolean showHistoryCurrentBook); void filterHistory(List historyList, String newText); + + void deleteHistory(List deleteList); } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/history/HistoryPresenter.java b/app/src/main/java/org/kiwix/kiwixmobile/history/HistoryPresenter.java index 6fc47eb9f..f9788ee3a 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/history/HistoryPresenter.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/history/HistoryPresenter.java @@ -3,18 +3,18 @@ package org.kiwix.kiwixmobile.history; import android.util.Log; import org.kiwix.kiwixmobile.base.BasePresenter; -import org.kiwix.kiwixmobile.data.Computation; import org.kiwix.kiwixmobile.data.DataSource; -import org.kiwix.kiwixmobile.data.IO; -import org.kiwix.kiwixmobile.data.MainThread; import org.kiwix.kiwixmobile.data.local.entity.History; import org.kiwix.kiwixmobile.di.PerActivity; +import org.kiwix.kiwixmobile.di.qualifiers.Computation; +import org.kiwix.kiwixmobile.di.qualifiers.MainThread; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; +import io.reactivex.CompletableObserver; import io.reactivex.Observable; import io.reactivex.Scheduler; import io.reactivex.SingleObserver; @@ -23,16 +23,15 @@ import io.reactivex.disposables.Disposable; @PerActivity class HistoryPresenter extends BasePresenter implements HistoryContract.Presenter { - private DataSource dataSource; - private Scheduler io; - private Scheduler mainThread; - private Scheduler computation; + private final DataSource dataSource; + private final Scheduler mainThread; + private final Scheduler computation; + private Disposable disposable; @Inject - HistoryPresenter(DataSource dataSource, @IO Scheduler io, @MainThread Scheduler mainThread, + HistoryPresenter(DataSource dataSource, @MainThread Scheduler mainThread, @Computation Scheduler computation) { this.dataSource = dataSource; - this.io = io; this.mainThread = mainThread; this.computation = computation; } @@ -40,11 +39,13 @@ class HistoryPresenter extends BasePresenter implements Hi @Override public void loadHistory(boolean showHistoryCurrentBook) { dataSource.getDateCategorizedHistory(showHistoryCurrentBook) - .subscribeOn(io) - .observeOn(mainThread) .subscribe(new SingleObserver>() { @Override public void onSubscribe(Disposable d) { + if (disposable != null && !disposable.isDisposed()) { + disposable.dispose(); + } + disposable = d; compositeDisposable.add(d); } @@ -93,4 +94,25 @@ class HistoryPresenter extends BasePresenter implements Hi } }); } + + @Override + public void deleteHistory(List deleteList) { + dataSource.deleteHistory(deleteList) + .subscribe(new CompletableObserver() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onComplete() { + + } + + @Override + public void onError(Throwable e) { + Log.e("HistoryPresenter", e.toString()); + } + }); + } } diff --git a/app/src/main/java/org/kiwix/kiwixmobile/main/MainPresenter.java b/app/src/main/java/org/kiwix/kiwixmobile/main/MainPresenter.java index 60b79e914..ec03f0861 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/main/MainPresenter.java +++ b/app/src/main/java/org/kiwix/kiwixmobile/main/MainPresenter.java @@ -4,7 +4,6 @@ import android.util.Log; import org.kiwix.kiwixmobile.base.BasePresenter; import org.kiwix.kiwixmobile.data.DataSource; -import org.kiwix.kiwixmobile.data.IO; import org.kiwix.kiwixmobile.di.PerActivity; import org.kiwix.kiwixmobile.library.entity.LibraryNetworkEntity; @@ -12,9 +11,7 @@ import java.util.List; import javax.inject.Inject; -import io.reactivex.Completable; import io.reactivex.CompletableObserver; -import io.reactivex.Scheduler; import io.reactivex.SingleObserver; import io.reactivex.disposables.Disposable; @@ -26,12 +23,10 @@ import io.reactivex.disposables.Disposable; class MainPresenter extends BasePresenter implements MainContract.Presenter { private DataSource dataSource; - private Scheduler io; @Inject - MainPresenter(DataSource dataSource, @IO Scheduler io) { + MainPresenter(DataSource dataSource) { this.dataSource = dataSource; - this.io = io; } @Override @@ -63,8 +58,7 @@ class MainPresenter extends BasePresenter implements MainCont @Override public void saveHistory(String file, String favicon, String url, String title, long timeStamp) { - Completable.fromAction(() -> dataSource.saveHistory(file, favicon, url, title, timeStamp)) - .subscribeOn(io) + dataSource.saveHistory(file, favicon, url, title, timeStamp) .subscribe(new CompletableObserver() { @Override public void onSubscribe(Disposable d) { diff --git a/app/src/main/res/drawable/ic_check_circle_blue_24dp.xml b/app/src/main/res/drawable/ic_check_circle_blue_24dp.xml new file mode 100644 index 000000000..7dd40af96 --- /dev/null +++ b/app/src/main/res/drawable/ic_check_circle_blue_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_delete_white_24dp.xml b/app/src/main/res/drawable/ic_delete_white_24dp.xml index f9213d2b5..a4704c3cd 100644 --- a/app/src/main/res/drawable/ic_delete_white_24dp.xml +++ b/app/src/main/res/drawable/ic_delete_white_24dp.xml @@ -1,9 +1,9 @@ - + android:width="24dp" + android:height="24dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0"> + diff --git a/app/src/main/res/menu/menu_context_history.xml b/app/src/main/res/menu/menu_context_history.xml new file mode 100644 index 000000000..bdf027ddb --- /dev/null +++ b/app/src/main/res/menu/menu_context_history.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_history.xml b/app/src/main/res/menu/menu_history.xml index 096d8b582..0329b0dd0 100644 --- a/app/src/main/res/menu/menu_history.xml +++ b/app/src/main/res/menu/menu_history.xml @@ -5,7 +5,6 @@ + + \ No newline at end of file diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml index 5f8ca6f9b..2b480efbc 100644 --- a/app/src/main/res/values-v21/styles.xml +++ b/app/src/main/res/values-v21/styles.xml @@ -11,6 +11,7 @@ true false @color/primary_dark + @color/actionModeBackground @drawable/list_bg @null true diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index d33df8993..bbef198d2 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -29,4 +29,5 @@ #651FFF #1565c0 #962e7ac4 + #4285F4 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5e99ed901..413eaee20 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -210,4 +210,5 @@ History History from current book Search history + %1$d selected diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 931dfde0b..87335dc26 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -12,6 +12,7 @@ @null true false + @color/actionModeBackground @color/primary_dark @drawable/list_bg @null @@ -62,13 +63,12 @@