convert Latest Tab's selection into a sort
This removes the convoluted logic of both a selection and a sort, and just does all the ordering in the sort. closes #939 closes #2024
This commit is contained in:
parent
3d9a68c1e3
commit
19215db243
@ -852,11 +852,36 @@ public class AppProvider extends FDroidProvider {
|
||||
break;
|
||||
|
||||
case LATEST_TAB:
|
||||
String table = getTableName();
|
||||
String isNew = table + "." + Cols.LAST_UPDATED + " <= " + table + "." + Cols.ADDED + " DESC";
|
||||
String hasFeatureGraphic = table + "." + Cols.FEATURE_GRAPHIC + " IS NULL ASC ";
|
||||
String lastUpdated = table + "." + Cols.LAST_UPDATED + " DESC";
|
||||
sortOrder = lastUpdated + ", " + isNew + ", " + hasFeatureGraphic;
|
||||
/* Sort by localized first so users see entries in their language,
|
||||
* then sort by highlighted fields, then sort by whether the app is new,
|
||||
* then if it has WhatsNew/Changelog entries, then by when it was last
|
||||
* updated. Last, it sorts by the date the app was added, putting older
|
||||
* ones first, to give preference to apps that have been maintained in
|
||||
* F-Droid longer.
|
||||
*/
|
||||
final String table = getTableName();
|
||||
final String added = table + "." + Cols.ADDED;
|
||||
final String lastUpdated = table + "." + Cols.LAST_UPDATED;
|
||||
sortOrder = table + "." + Cols.IS_LOCALIZED + " DESC"
|
||||
+ ", " + table + "." + Cols.NAME + " IS NULL ASC"
|
||||
+ ", " + table + "." + Cols.ICON + " IS NULL ASC"
|
||||
+ ", " + table + "." + Cols.SUMMARY + " IS NULL ASC"
|
||||
+ ", " + table + "." + Cols.DESCRIPTION + " IS NULL ASC"
|
||||
+ ", CASE WHEN " + table + "." + Cols.PHONE_SCREENSHOTS + " IS NULL"
|
||||
+ " AND " + table + "." + Cols.SEVEN_INCH_SCREENSHOTS + " IS NULL"
|
||||
+ " AND " + table + "." + Cols.TEN_INCH_SCREENSHOTS + " IS NULL"
|
||||
+ " AND " + table + "." + Cols.TV_SCREENSHOTS + " IS NULL"
|
||||
+ " AND " + table + "." + Cols.WEAR_SCREENSHOTS + " IS NULL"
|
||||
+ " AND " + table + "." + Cols.FEATURE_GRAPHIC + " IS NULL"
|
||||
+ " AND " + table + "." + Cols.PROMO_GRAPHIC + " IS NULL"
|
||||
+ " AND " + table + "." + Cols.TV_BANNER + " IS NULL"
|
||||
+ " THEN 1 ELSE 0 END"
|
||||
+ ", CASE WHEN date(" + added + ") >= date(" + lastUpdated + ")"
|
||||
+ " AND date('now','-7 days') < date(" + lastUpdated + ")"
|
||||
+ " THEN 0 ELSE 1 END"
|
||||
+ ", " + table + "." + Cols.WHATSNEW + " IS NULL ASC"
|
||||
+ ", " + lastUpdated + " DESC"
|
||||
+ ", " + added + " ASC";
|
||||
|
||||
// There seems no reason to limit the number of apps on the front page, but it helps
|
||||
// if it loads quickly, as it is the default view shown every time F-Droid is opened.
|
||||
|
@ -3,20 +3,20 @@ package org.fdroid.fdroid.views.main;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.os.Bundle;
|
||||
import androidx.annotation.NonNull;
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
import androidx.loader.content.CursorLoader;
|
||||
import androidx.loader.content.Loader;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import android.view.View;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
import androidx.loader.content.CursorLoader;
|
||||
import androidx.loader.content.Loader;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
import org.fdroid.fdroid.Preferences;
|
||||
import org.fdroid.fdroid.R;
|
||||
import org.fdroid.fdroid.UpdateService;
|
||||
@ -24,12 +24,11 @@ import org.fdroid.fdroid.Utils;
|
||||
import org.fdroid.fdroid.data.AppProvider;
|
||||
import org.fdroid.fdroid.data.RepoProvider;
|
||||
import org.fdroid.fdroid.data.Schema.AppMetadataTable;
|
||||
import org.fdroid.fdroid.views.apps.AppListActivity;
|
||||
import org.fdroid.fdroid.panic.HidingManager;
|
||||
import org.fdroid.fdroid.views.apps.AppListActivity;
|
||||
import org.fdroid.fdroid.views.whatsnew.WhatsNewAdapter;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* Loads a list of newly added or recently updated apps and displays them to the user.
|
||||
@ -104,32 +103,11 @@ class WhatsNewViewBinder implements LoaderManager.LoaderCallbacks<Cursor> {
|
||||
if (id != LOADER_ID) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// select that have all required items:
|
||||
String selection = "(" + AppMetadataTable.NAME + "." + AppMetadataTable.Cols.NAME + " != ''"
|
||||
+ " AND " + AppMetadataTable.NAME + "." + AppMetadataTable.Cols.SUMMARY + " != ''"
|
||||
+ " AND " + AppMetadataTable.NAME + "." + AppMetadataTable.Cols.DESCRIPTION + " != ''"
|
||||
+ " AND " + AppMetadataTable.NAME + "." + AppMetadataTable.Cols.LICENSE + " != ''"
|
||||
+ " AND " + AppMetadataTable.NAME + "." + AppMetadataTable.Cols.WHATSNEW + " != ''";
|
||||
if (!"en".equals(Locale.getDefault().getLanguage())) {
|
||||
// only require localization if using a non-English locale
|
||||
selection += " AND " + AppMetadataTable.NAME + "." + AppMetadataTable.Cols.IS_LOCALIZED + " = 1";
|
||||
}
|
||||
// and at least one optional item:
|
||||
selection += ") AND ("
|
||||
+ AppMetadataTable.NAME + "." + AppMetadataTable.Cols.SEVEN_INCH_SCREENSHOTS + " IS NOT NULL "
|
||||
+ " OR " + AppMetadataTable.NAME + "." + AppMetadataTable.Cols.PHONE_SCREENSHOTS + " IS NOT NULL "
|
||||
+ " OR " + AppMetadataTable.NAME + "." + AppMetadataTable.Cols.TEN_INCH_SCREENSHOTS + " IS NOT NULL "
|
||||
+ " OR " + AppMetadataTable.NAME + "." + AppMetadataTable.Cols.TV_SCREENSHOTS + " IS NOT NULL "
|
||||
+ " OR " + AppMetadataTable.NAME + "." + AppMetadataTable.Cols.WEAR_SCREENSHOTS + " IS NOT NULL "
|
||||
+ " OR " + AppMetadataTable.NAME + "." + AppMetadataTable.Cols.FEATURE_GRAPHIC + " IS NOT NULL "
|
||||
+ ")";
|
||||
|
||||
return new CursorLoader(
|
||||
activity,
|
||||
AppProvider.getLatestTabUri(),
|
||||
AppMetadataTable.Cols.ALL,
|
||||
selection,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
);
|
||||
|
Loading…
x
Reference in New Issue
Block a user