[app] Add sorting by update time to repo (#131)

This commit is contained in:
tehcneko 2021-02-13 21:28:09 +08:00 committed by GitHub
parent ade95e6f05
commit 8abf2bd86b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 1 deletions

View File

@ -36,9 +36,11 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
@ -46,6 +48,7 @@ import io.github.lsposed.manager.R;
import io.github.lsposed.manager.repo.RepoLoader;
import io.github.lsposed.manager.repo.model.OnlineModule;
import io.github.lsposed.manager.ui.activity.base.ListActivity;
import rikka.core.util.LabelComparator;
public class RepoActivity extends ListActivity implements RepoLoader.Listener {
private final RepoLoader repoLoader = RepoLoader.getInstance();
@ -93,6 +96,14 @@ public class RepoActivity extends ListActivity implements RepoLoader.Listener {
if (itemId == R.id.menu_refresh) {
binding.progress.show();
repoLoader.loadRemoteData();
} else if (itemId == R.id.item_sort_by_name) {
item.setChecked(!item.isChecked());
preferences.edit().putInt("repo_sort", 0).apply();
adapter.setData(repoLoader.getOnlineModules());
} else if (itemId == R.id.item_sort_by_update_time) {
item.setChecked(!item.isChecked());
preferences.edit().putInt("repo_sort", 1).apply();
adapter.setData(repoLoader.getOnlineModules());
}
return super.onOptionsItemSelected(item);
}
@ -105,6 +116,7 @@ public class RepoActivity extends ListActivity implements RepoLoader.Listener {
private class RepoAdapter extends BaseAdapter<RepoAdapter.ViewHolder> {
private List<OnlineModule> fullList, showList;
private final LabelComparator labelComparator = new LabelComparator();
RepoAdapter() {
fullList = showList = Collections.emptyList();
@ -145,7 +157,12 @@ public class RepoActivity extends ListActivity implements RepoLoader.Listener {
public void setData(Collection<OnlineModule> modules) {
fullList = new ArrayList<>(modules);
fullList = fullList.stream().filter((onlineModule -> !onlineModule.isHide())).collect(Collectors.toList());
fullList.sort((o1, o2) -> o1.getDescription().compareToIgnoreCase(o2.getDescription()));
int sort = preferences.getInt("repo_sort", 0);
if (sort == 0) {
fullList.sort((o1, o2) -> labelComparator.compare(o1.getDescription(), o2.getDescription()));
} else if (sort == 1) {
fullList.sort(Comparator.comparing(o -> Instant.parse(o.getUpdatedAt())));
}
String queryStr = searchView != null ? searchView.getQuery().toString() : "";
runOnUiThread(() -> getFilter().filter(queryStr));
}

View File

@ -31,4 +31,22 @@
android:title="@string/refresh"
android:icon="@drawable/ic_refresh"
app:showAsAction="ifRoom" />
<item
android:id="@+id/item_list_sort"
android:title="@string/menu_sort"
app:showAsAction="never">
<menu>
<group android:checkableBehavior="single">
<item
android:id="@+id/item_sort_by_name"
android:checked="true"
android:title="@string/sort_by_name" />
<item
android:id="@+id/item_sort_by_update_time"
android:title="@string/sort_by_update_time" />
</group>
</menu>
</item>
</menu>