[app] Add sorting by update time to repo (#131)
This commit is contained in:
parent
ade95e6f05
commit
8abf2bd86b
|
|
@ -36,9 +36,11 @@ import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
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.RepoLoader;
|
||||||
import io.github.lsposed.manager.repo.model.OnlineModule;
|
import io.github.lsposed.manager.repo.model.OnlineModule;
|
||||||
import io.github.lsposed.manager.ui.activity.base.ListActivity;
|
import io.github.lsposed.manager.ui.activity.base.ListActivity;
|
||||||
|
import rikka.core.util.LabelComparator;
|
||||||
|
|
||||||
public class RepoActivity extends ListActivity implements RepoLoader.Listener {
|
public class RepoActivity extends ListActivity implements RepoLoader.Listener {
|
||||||
private final RepoLoader repoLoader = RepoLoader.getInstance();
|
private final RepoLoader repoLoader = RepoLoader.getInstance();
|
||||||
|
|
@ -93,6 +96,14 @@ public class RepoActivity extends ListActivity implements RepoLoader.Listener {
|
||||||
if (itemId == R.id.menu_refresh) {
|
if (itemId == R.id.menu_refresh) {
|
||||||
binding.progress.show();
|
binding.progress.show();
|
||||||
repoLoader.loadRemoteData();
|
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);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
@ -105,6 +116,7 @@ public class RepoActivity extends ListActivity implements RepoLoader.Listener {
|
||||||
|
|
||||||
private class RepoAdapter extends BaseAdapter<RepoAdapter.ViewHolder> {
|
private class RepoAdapter extends BaseAdapter<RepoAdapter.ViewHolder> {
|
||||||
private List<OnlineModule> fullList, showList;
|
private List<OnlineModule> fullList, showList;
|
||||||
|
private final LabelComparator labelComparator = new LabelComparator();
|
||||||
|
|
||||||
RepoAdapter() {
|
RepoAdapter() {
|
||||||
fullList = showList = Collections.emptyList();
|
fullList = showList = Collections.emptyList();
|
||||||
|
|
@ -145,7 +157,12 @@ public class RepoActivity extends ListActivity implements RepoLoader.Listener {
|
||||||
public void setData(Collection<OnlineModule> modules) {
|
public void setData(Collection<OnlineModule> modules) {
|
||||||
fullList = new ArrayList<>(modules);
|
fullList = new ArrayList<>(modules);
|
||||||
fullList = fullList.stream().filter((onlineModule -> !onlineModule.isHide())).collect(Collectors.toList());
|
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() : "";
|
String queryStr = searchView != null ? searchView.getQuery().toString() : "";
|
||||||
runOnUiThread(() -> getFilter().filter(queryStr));
|
runOnUiThread(() -> getFilter().filter(queryStr));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,4 +31,22 @@
|
||||||
android:title="@string/refresh"
|
android:title="@string/refresh"
|
||||||
android:icon="@drawable/ic_refresh"
|
android:icon="@drawable/ic_refresh"
|
||||||
app:showAsAction="ifRoom" />
|
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>
|
</menu>
|
||||||
Loading…
Reference in New Issue