Extracted AppProvider.DataColumns to Schema.AppTable.Cols

This commit is contained in:
Peter Serwylo 2016-06-30 13:14:01 +10:00
parent 7c13cc26fc
commit 315f20df0c
11 changed files with 200 additions and 192 deletions

View File

@ -84,6 +84,7 @@ import org.fdroid.fdroid.data.App;
import org.fdroid.fdroid.data.AppProvider;
import org.fdroid.fdroid.data.InstalledAppProvider;
import org.fdroid.fdroid.data.RepoProvider;
import org.fdroid.fdroid.data.Schema;
import org.fdroid.fdroid.installer.InstallManagerService;
import org.fdroid.fdroid.installer.Installer;
import org.fdroid.fdroid.installer.InstallerFactory;
@ -667,8 +668,8 @@ public class AppDetails extends AppCompatActivity {
Uri uri = AppProvider.getContentUri(packageName);
ContentValues values = new ContentValues(2);
values.put(AppProvider.DataColumns.IGNORE_ALLUPDATES, ignoreAll ? 1 : 0);
values.put(AppProvider.DataColumns.IGNORE_THISUPDATE, ignoreVersionCode);
values.put(Schema.AppTable.Cols.IGNORE_ALLUPDATES, ignoreAll ? 1 : 0);
values.put(Schema.AppTable.Cols.IGNORE_THISUPDATE, ignoreVersionCode);
getContentResolver().update(uri, values, null, null);

View File

@ -47,6 +47,7 @@ import org.fdroid.fdroid.data.App;
import org.fdroid.fdroid.data.AppProvider;
import org.fdroid.fdroid.data.Repo;
import org.fdroid.fdroid.data.RepoProvider;
import org.fdroid.fdroid.data.Schema;
import org.fdroid.fdroid.installer.InstallManagerService;
import java.net.URL;
@ -415,7 +416,7 @@ public class UpdateService extends IntentService {
private void performUpdateNotification() {
Cursor cursor = getContentResolver().query(
AppProvider.getCanUpdateUri(),
AppProvider.DataColumns.ALL,
Schema.AppTable.Cols.ALL,
null, null, null);
if (cursor != null) {
if (cursor.getCount() > 0) {
@ -461,7 +462,7 @@ public class UpdateService extends IntentService {
private void autoDownloadUpdates() {
Cursor cursor = getContentResolver().query(
AppProvider.getCanUpdateUri(),
AppProvider.DataColumns.ALL,
Schema.AppTable.Cols.ALL,
null, null, null);
if (cursor != null) {
cursor.moveToFirst();

View File

@ -32,6 +32,8 @@ import java.util.jar.JarFile;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.fdroid.fdroid.data.Schema.AppTable.Cols;
public class App extends ValueObject implements Comparable<App> {
private static final String TAG = "App";
@ -151,103 +153,103 @@ public class App extends ValueObject implements Comparable<App> {
for (int i = 0; i < cursor.getColumnCount(); i++) {
String n = cursor.getColumnName(i);
switch (n) {
case AppProvider.DataColumns.IS_COMPATIBLE:
case Cols.IS_COMPATIBLE:
compatible = cursor.getInt(i) == 1;
break;
case AppProvider.DataColumns.PACKAGE_NAME:
case Cols.PACKAGE_NAME:
packageName = cursor.getString(i);
break;
case AppProvider.DataColumns.NAME:
case Cols.NAME:
name = cursor.getString(i);
break;
case AppProvider.DataColumns.SUMMARY:
case Cols.SUMMARY:
summary = cursor.getString(i);
break;
case AppProvider.DataColumns.ICON:
case Cols.ICON:
icon = cursor.getString(i);
break;
case AppProvider.DataColumns.DESCRIPTION:
case Cols.DESCRIPTION:
description = cursor.getString(i);
break;
case AppProvider.DataColumns.LICENSE:
case Cols.LICENSE:
license = cursor.getString(i);
break;
case AppProvider.DataColumns.AUTHOR:
case Cols.AUTHOR:
author = cursor.getString(i);
break;
case AppProvider.DataColumns.EMAIL:
case Cols.EMAIL:
email = cursor.getString(i);
break;
case AppProvider.DataColumns.WEB_URL:
case Cols.WEB_URL:
webURL = cursor.getString(i);
break;
case AppProvider.DataColumns.TRACKER_URL:
case Cols.TRACKER_URL:
trackerURL = cursor.getString(i);
break;
case AppProvider.DataColumns.SOURCE_URL:
case Cols.SOURCE_URL:
sourceURL = cursor.getString(i);
break;
case AppProvider.DataColumns.CHANGELOG_URL:
case Cols.CHANGELOG_URL:
changelogURL = cursor.getString(i);
break;
case AppProvider.DataColumns.DONATE_URL:
case Cols.DONATE_URL:
donateURL = cursor.getString(i);
break;
case AppProvider.DataColumns.BITCOIN_ADDR:
case Cols.BITCOIN_ADDR:
bitcoinAddr = cursor.getString(i);
break;
case AppProvider.DataColumns.LITECOIN_ADDR:
case Cols.LITECOIN_ADDR:
litecoinAddr = cursor.getString(i);
break;
case AppProvider.DataColumns.FLATTR_ID:
case Cols.FLATTR_ID:
flattrID = cursor.getString(i);
break;
case AppProvider.DataColumns.SuggestedApk.VERSION_NAME:
case Cols.SuggestedApk.VERSION_NAME:
suggestedVersionName = cursor.getString(i);
break;
case AppProvider.DataColumns.SUGGESTED_VERSION_CODE:
case Cols.SUGGESTED_VERSION_CODE:
suggestedVersionCode = cursor.getInt(i);
break;
case AppProvider.DataColumns.UPSTREAM_VERSION_CODE:
case Cols.UPSTREAM_VERSION_CODE:
upstreamVersionCode = cursor.getInt(i);
break;
case AppProvider.DataColumns.UPSTREAM_VERSION_NAME:
case Cols.UPSTREAM_VERSION_NAME:
upstreamVersionName = cursor.getString(i);
break;
case AppProvider.DataColumns.ADDED:
case Cols.ADDED:
added = Utils.parseDate(cursor.getString(i), null);
break;
case AppProvider.DataColumns.LAST_UPDATED:
case Cols.LAST_UPDATED:
lastUpdated = Utils.parseDate(cursor.getString(i), null);
break;
case AppProvider.DataColumns.CATEGORIES:
case Cols.CATEGORIES:
categories = Utils.parseCommaSeparatedString(cursor.getString(i));
break;
case AppProvider.DataColumns.ANTI_FEATURES:
case Cols.ANTI_FEATURES:
antiFeatures = Utils.parseCommaSeparatedString(cursor.getString(i));
break;
case AppProvider.DataColumns.REQUIREMENTS:
case Cols.REQUIREMENTS:
requirements = Utils.parseCommaSeparatedString(cursor.getString(i));
break;
case AppProvider.DataColumns.IGNORE_ALLUPDATES:
case Cols.IGNORE_ALLUPDATES:
ignoreAllUpdates = cursor.getInt(i) == 1;
break;
case AppProvider.DataColumns.IGNORE_THISUPDATE:
case Cols.IGNORE_THISUPDATE:
ignoreThisUpdate = cursor.getInt(i);
break;
case AppProvider.DataColumns.ICON_URL:
case Cols.ICON_URL:
iconUrl = cursor.getString(i);
break;
case AppProvider.DataColumns.ICON_URL_LARGE:
case Cols.ICON_URL_LARGE:
iconUrlLarge = cursor.getString(i);
break;
case AppProvider.DataColumns.InstalledApp.VERSION_CODE:
case Cols.InstalledApp.VERSION_CODE:
installedVersionCode = cursor.getInt(i);
break;
case AppProvider.DataColumns.InstalledApp.VERSION_NAME:
case Cols.InstalledApp.VERSION_NAME:
installedVersionName = cursor.getString(i);
break;
case AppProvider.DataColumns.InstalledApp.SIGNATURE:
case Cols.InstalledApp.SIGNATURE:
installedSig = cursor.getString(i);
break;
case "_id":
@ -438,35 +440,35 @@ public class App extends ValueObject implements Comparable<App> {
public ContentValues toContentValues() {
final ContentValues values = new ContentValues();
values.put(AppProvider.DataColumns.PACKAGE_NAME, packageName);
values.put(AppProvider.DataColumns.NAME, name);
values.put(AppProvider.DataColumns.SUMMARY, summary);
values.put(AppProvider.DataColumns.ICON, icon);
values.put(AppProvider.DataColumns.ICON_URL, iconUrl);
values.put(AppProvider.DataColumns.ICON_URL_LARGE, iconUrlLarge);
values.put(AppProvider.DataColumns.DESCRIPTION, description);
values.put(AppProvider.DataColumns.LICENSE, license);
values.put(AppProvider.DataColumns.AUTHOR, author);
values.put(AppProvider.DataColumns.EMAIL, email);
values.put(AppProvider.DataColumns.WEB_URL, webURL);
values.put(AppProvider.DataColumns.TRACKER_URL, trackerURL);
values.put(AppProvider.DataColumns.SOURCE_URL, sourceURL);
values.put(AppProvider.DataColumns.CHANGELOG_URL, changelogURL);
values.put(AppProvider.DataColumns.DONATE_URL, donateURL);
values.put(AppProvider.DataColumns.BITCOIN_ADDR, bitcoinAddr);
values.put(AppProvider.DataColumns.LITECOIN_ADDR, litecoinAddr);
values.put(AppProvider.DataColumns.FLATTR_ID, flattrID);
values.put(AppProvider.DataColumns.ADDED, Utils.formatDate(added, ""));
values.put(AppProvider.DataColumns.LAST_UPDATED, Utils.formatDate(lastUpdated, ""));
values.put(AppProvider.DataColumns.SUGGESTED_VERSION_CODE, suggestedVersionCode);
values.put(AppProvider.DataColumns.UPSTREAM_VERSION_NAME, upstreamVersionName);
values.put(AppProvider.DataColumns.UPSTREAM_VERSION_CODE, upstreamVersionCode);
values.put(AppProvider.DataColumns.CATEGORIES, Utils.serializeCommaSeparatedString(categories));
values.put(AppProvider.DataColumns.ANTI_FEATURES, Utils.serializeCommaSeparatedString(antiFeatures));
values.put(AppProvider.DataColumns.REQUIREMENTS, Utils.serializeCommaSeparatedString(requirements));
values.put(AppProvider.DataColumns.IS_COMPATIBLE, compatible ? 1 : 0);
values.put(AppProvider.DataColumns.IGNORE_ALLUPDATES, ignoreAllUpdates ? 1 : 0);
values.put(AppProvider.DataColumns.IGNORE_THISUPDATE, ignoreThisUpdate);
values.put(Cols.PACKAGE_NAME, packageName);
values.put(Cols.NAME, name);
values.put(Cols.SUMMARY, summary);
values.put(Cols.ICON, icon);
values.put(Cols.ICON_URL, iconUrl);
values.put(Cols.ICON_URL_LARGE, iconUrlLarge);
values.put(Cols.DESCRIPTION, description);
values.put(Cols.LICENSE, license);
values.put(Cols.AUTHOR, author);
values.put(Cols.EMAIL, email);
values.put(Cols.WEB_URL, webURL);
values.put(Cols.TRACKER_URL, trackerURL);
values.put(Cols.SOURCE_URL, sourceURL);
values.put(Cols.CHANGELOG_URL, changelogURL);
values.put(Cols.DONATE_URL, donateURL);
values.put(Cols.BITCOIN_ADDR, bitcoinAddr);
values.put(Cols.LITECOIN_ADDR, litecoinAddr);
values.put(Cols.FLATTR_ID, flattrID);
values.put(Cols.ADDED, Utils.formatDate(added, ""));
values.put(Cols.LAST_UPDATED, Utils.formatDate(lastUpdated, ""));
values.put(Cols.SUGGESTED_VERSION_CODE, suggestedVersionCode);
values.put(Cols.UPSTREAM_VERSION_NAME, upstreamVersionName);
values.put(Cols.UPSTREAM_VERSION_CODE, upstreamVersionCode);
values.put(Cols.CATEGORIES, Utils.serializeCommaSeparatedString(categories));
values.put(Cols.ANTI_FEATURES, Utils.serializeCommaSeparatedString(antiFeatures));
values.put(Cols.REQUIREMENTS, Utils.serializeCommaSeparatedString(requirements));
values.put(Cols.IS_COMPATIBLE, compatible ? 1 : 0);
values.put(Cols.IGNORE_ALLUPDATES, ignoreAllUpdates ? 1 : 0);
values.put(Cols.IGNORE_THISUPDATE, ignoreThisUpdate);
return values;
}

View File

@ -13,6 +13,7 @@ import android.util.Log;
import org.fdroid.fdroid.Preferences;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.Utils;
import org.fdroid.fdroid.data.Schema.AppTable.Cols;
import java.util.ArrayList;
import java.util.Arrays;
@ -30,7 +31,7 @@ public class AppProvider extends FDroidProvider {
private Helper() { }
public static int count(Context context, Uri uri) {
final String[] projection = {AppProvider.DataColumns._COUNT};
final String[] projection = {Cols._COUNT};
Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null);
int count = 0;
if (cursor != null) {
@ -44,7 +45,7 @@ public class AppProvider extends FDroidProvider {
}
public static List<App> all(ContentResolver resolver) {
return all(resolver, DataColumns.ALL);
return all(resolver, Cols.ALL);
}
public static List<App> all(ContentResolver resolver, String[] projection) {
@ -90,7 +91,7 @@ public class AppProvider extends FDroidProvider {
public static List<String> categories(Context context) {
final ContentResolver resolver = context.getContentResolver();
final Uri uri = getContentUri();
final String[] projection = {DataColumns.CATEGORIES};
final String[] projection = {Cols.CATEGORIES};
final Cursor cursor = resolver.query(uri, projection, null, null, null);
final Set<String> categorySet = new HashSet<>();
if (cursor != null) {
@ -121,7 +122,7 @@ public class AppProvider extends FDroidProvider {
}
public static App findByPackageName(ContentResolver resolver, String packageName) {
return findByPackageName(resolver, packageName, DataColumns.ALL);
return findByPackageName(resolver, packageName, Cols.ALL);
}
public static App findByPackageName(ContentResolver resolver, String packageName,
@ -167,63 +168,6 @@ public class AppProvider extends FDroidProvider {
}
public interface DataColumns {
String _ID = "rowid as _id"; // Required for CursorLoaders
String _COUNT = "_count";
String IS_COMPATIBLE = "compatible";
String PACKAGE_NAME = "id";
String NAME = "name";
String SUMMARY = "summary";
String ICON = "icon";
String DESCRIPTION = "description";
String LICENSE = "license";
String AUTHOR = "author";
String EMAIL = "email";
String WEB_URL = "webURL";
String TRACKER_URL = "trackerURL";
String SOURCE_URL = "sourceURL";
String CHANGELOG_URL = "changelogURL";
String DONATE_URL = "donateURL";
String BITCOIN_ADDR = "bitcoinAddr";
String LITECOIN_ADDR = "litecoinAddr";
String FLATTR_ID = "flattrID";
String SUGGESTED_VERSION_CODE = "suggestedVercode";
String UPSTREAM_VERSION_NAME = "upstreamVersion";
String UPSTREAM_VERSION_CODE = "upstreamVercode";
String ADDED = "added";
String LAST_UPDATED = "lastUpdated";
String CATEGORIES = "categories";
String ANTI_FEATURES = "antiFeatures";
String REQUIREMENTS = "requirements";
String IGNORE_ALLUPDATES = "ignoreAllUpdates";
String IGNORE_THISUPDATE = "ignoreThisUpdate";
String ICON_URL = "iconUrl";
String ICON_URL_LARGE = "iconUrlLarge";
interface SuggestedApk {
String VERSION_NAME = "suggestedApkVersion";
}
interface InstalledApp {
String VERSION_CODE = "installedVersionCode";
String VERSION_NAME = "installedVersionName";
String SIGNATURE = "installedSig";
}
String[] ALL = {
_ID, IS_COMPATIBLE, PACKAGE_NAME, NAME, SUMMARY, ICON, DESCRIPTION,
LICENSE, AUTHOR, EMAIL, WEB_URL, TRACKER_URL, SOURCE_URL,
CHANGELOG_URL, DONATE_URL, BITCOIN_ADDR, LITECOIN_ADDR, FLATTR_ID,
UPSTREAM_VERSION_NAME, UPSTREAM_VERSION_CODE, ADDED, LAST_UPDATED,
CATEGORIES, ANTI_FEATURES, REQUIREMENTS, IGNORE_ALLUPDATES,
IGNORE_THISUPDATE, ICON_URL, ICON_URL_LARGE,
SUGGESTED_VERSION_CODE, SuggestedApk.VERSION_NAME,
InstalledApp.VERSION_CODE, InstalledApp.VERSION_NAME,
InstalledApp.SIGNATURE,
};
}
/**
* A QuerySelection which is aware of the option/need to join onto the
* installed apps table. Not that the base classes
@ -346,23 +290,23 @@ public class AppProvider extends FDroidProvider {
@Override
public void addField(String field) {
switch (field) {
case DataColumns.SuggestedApk.VERSION_NAME:
case Cols.SuggestedApk.VERSION_NAME:
addSuggestedApkVersionField();
break;
case DataColumns.InstalledApp.VERSION_NAME:
case Cols.InstalledApp.VERSION_NAME:
addInstalledAppVersionName();
break;
case DataColumns.InstalledApp.VERSION_CODE:
case Cols.InstalledApp.VERSION_CODE:
addInstalledAppVersionCode();
break;
case DataColumns.InstalledApp.SIGNATURE:
case Cols.InstalledApp.SIGNATURE:
addInstalledSig();
break;
case DataColumns._COUNT:
case Cols._COUNT:
appendCountField();
break;
default:
if (field.equals(DataColumns.CATEGORIES)) {
if (field.equals(Cols.CATEGORIES)) {
categoryFieldAdded = true;
}
appendField(field, getTableName());
@ -372,13 +316,13 @@ public class AppProvider extends FDroidProvider {
private void appendCountField() {
countFieldAppended = true;
appendField("COUNT( DISTINCT " + getTableName() + ".id ) AS " + DataColumns._COUNT);
appendField("COUNT( DISTINCT " + getTableName() + ".id ) AS " + Cols._COUNT);
}
private void addSuggestedApkVersionField() {
addSuggestedApkField(
ApkProvider.DataColumns.VERSION_NAME,
DataColumns.SuggestedApk.VERSION_NAME);
Cols.SuggestedApk.VERSION_NAME);
}
private void addSuggestedApkField(String fieldName, String alias) {
@ -395,21 +339,21 @@ public class AppProvider extends FDroidProvider {
private void addInstalledAppVersionName() {
addInstalledAppField(
InstalledAppProvider.DataColumns.VERSION_NAME,
DataColumns.InstalledApp.VERSION_NAME
Cols.InstalledApp.VERSION_NAME
);
}
private void addInstalledAppVersionCode() {
addInstalledAppField(
InstalledAppProvider.DataColumns.VERSION_CODE,
DataColumns.InstalledApp.VERSION_CODE
Cols.InstalledApp.VERSION_CODE
);
}
private void addInstalledSig() {
addInstalledAppField(
InstalledAppProvider.DataColumns.SIGNATURE,
DataColumns.InstalledApp.SIGNATURE
Cols.InstalledApp.SIGNATURE
);
}
@ -602,7 +546,7 @@ public class AppProvider extends FDroidProvider {
final String ignoreCurrent = getTableName() + ".ignoreThisUpdate != " + getTableName() + ".suggestedVercode ";
final String ignoreAll = getTableName() + ".ignoreAllUpdates != 1 ";
final String ignore = " ( " + ignoreCurrent + " AND " + ignoreAll + " ) ";
final String where = ignore + " AND " + getTableName() + "." + DataColumns.SUGGESTED_VERSION_CODE + " > installed.versionCode";
final String where = ignore + " AND " + getTableName() + "." + Cols.SUGGESTED_VERSION_CODE + " > installed.versionCode";
return new AppQuerySelection(where).requireNaturalInstalledTable();
}
@ -821,7 +765,7 @@ public class AppProvider extends FDroidProvider {
selection = selection.add(queryExcludeSwap());
}
if (AppProvider.DataColumns.NAME.equals(sortOrder)) {
if (Cols.NAME.equals(sortOrder)) {
sortOrder = getTableName() + "." + sortOrder + " COLLATE LOCALIZED ";
}
@ -861,7 +805,7 @@ public class AppProvider extends FDroidProvider {
if (!isApplyingBatch()) {
getContext().getContentResolver().notifyChange(uri, null);
}
return getContentUri(values.getAsString(DataColumns.PACKAGE_NAME));
return getContentUri(values.getAsString(Cols.PACKAGE_NAME));
}
@Override

View File

@ -32,8 +32,8 @@ public class RepoPersister {
* is essentially completely transient, and can be nuked at any time.
*/
private static final String[] APP_FIELDS_TO_IGNORE = {
AppProvider.DataColumns.IGNORE_ALLUPDATES,
AppProvider.DataColumns.IGNORE_THISUPDATE,
Schema.AppTable.Cols.IGNORE_ALLUPDATES,
Schema.AppTable.Cols.IGNORE_THISUPDATE,
};
/**
@ -214,7 +214,7 @@ public class RepoPersister {
* array.
*/
private boolean isAppInDatabase(App app) {
String[] fields = {AppProvider.DataColumns.PACKAGE_NAME};
String[] fields = {Schema.AppTable.Cols.PACKAGE_NAME};
App found = AppProvider.Helper.findByPackageName(context.getContentResolver(), app.packageName, fields);
return found != null;
}

View File

@ -5,11 +5,67 @@ package org.fdroid.fdroid.data;
* Constants from this interface should be used in preference to string literals when referring to
* the tables/columns in the database.
*/
interface Schema {
public interface Schema {
interface AppTable {
String NAME = DBHelper.TABLE_APP;
interface Cols extends AppProvider.DataColumns {}
interface Cols {
String _ID = "rowid as _id"; // Required for CursorLoaders
String _COUNT = "_count";
String IS_COMPATIBLE = "compatible";
String PACKAGE_NAME = "id";
String NAME = "name";
String SUMMARY = "summary";
String ICON = "icon";
String DESCRIPTION = "description";
String LICENSE = "license";
String AUTHOR = "author";
String EMAIL = "email";
String WEB_URL = "webURL";
String TRACKER_URL = "trackerURL";
String SOURCE_URL = "sourceURL";
String CHANGELOG_URL = "changelogURL";
String DONATE_URL = "donateURL";
String BITCOIN_ADDR = "bitcoinAddr";
String LITECOIN_ADDR = "litecoinAddr";
String FLATTR_ID = "flattrID";
String SUGGESTED_VERSION_CODE = "suggestedVercode";
String UPSTREAM_VERSION_NAME = "upstreamVersion";
String UPSTREAM_VERSION_CODE = "upstreamVercode";
String ADDED = "added";
String LAST_UPDATED = "lastUpdated";
String CATEGORIES = "categories";
String ANTI_FEATURES = "antiFeatures";
String REQUIREMENTS = "requirements";
String IGNORE_ALLUPDATES = "ignoreAllUpdates";
String IGNORE_THISUPDATE = "ignoreThisUpdate";
String ICON_URL = "iconUrl";
String ICON_URL_LARGE = "iconUrlLarge";
interface SuggestedApk {
String VERSION_NAME = "suggestedApkVersion";
}
interface InstalledApp {
String VERSION_CODE = "installedVersionCode";
String VERSION_NAME = "installedVersionName";
String SIGNATURE = "installedSig";
}
String[] ALL = {
_ID, IS_COMPATIBLE, PACKAGE_NAME, NAME, SUMMARY, ICON, DESCRIPTION,
LICENSE, AUTHOR, EMAIL, WEB_URL, TRACKER_URL, SOURCE_URL,
CHANGELOG_URL, DONATE_URL, BITCOIN_ADDR, LITECOIN_ADDR, FLATTR_ID,
UPSTREAM_VERSION_NAME, UPSTREAM_VERSION_CODE, ADDED, LAST_UPDATED,
CATEGORIES, ANTI_FEATURES, REQUIREMENTS, IGNORE_ALLUPDATES,
IGNORE_THISUPDATE, ICON_URL, ICON_URL_LARGE,
SUGGESTED_VERSION_CODE, SuggestedApk.VERSION_NAME,
InstalledApp.VERSION_CODE, InstalledApp.VERSION_NAME,
InstalledApp.SIGNATURE,
};
}
}
interface ApkTable {

View File

@ -25,7 +25,7 @@ import org.fdroid.fdroid.R;
import org.fdroid.fdroid.UpdateService;
import org.fdroid.fdroid.Utils;
import org.fdroid.fdroid.data.App;
import org.fdroid.fdroid.data.AppProvider;
import org.fdroid.fdroid.data.Schema.AppTable;
import org.fdroid.fdroid.views.AppListAdapter;
public abstract class AppListFragment extends ListFragment implements
@ -38,24 +38,24 @@ public abstract class AppListFragment extends ListFragment implements
private static final int REQUEST_APPDETAILS = 0;
private static final String[] APP_PROJECTION = {
AppProvider.DataColumns._ID, // Required for cursor loader to work.
AppProvider.DataColumns.PACKAGE_NAME,
AppProvider.DataColumns.NAME,
AppProvider.DataColumns.SUMMARY,
AppProvider.DataColumns.IS_COMPATIBLE,
AppProvider.DataColumns.LICENSE,
AppProvider.DataColumns.ICON,
AppProvider.DataColumns.ICON_URL,
AppProvider.DataColumns.InstalledApp.VERSION_CODE,
AppProvider.DataColumns.InstalledApp.VERSION_NAME,
AppProvider.DataColumns.SuggestedApk.VERSION_NAME,
AppProvider.DataColumns.SUGGESTED_VERSION_CODE,
AppProvider.DataColumns.IGNORE_ALLUPDATES,
AppProvider.DataColumns.IGNORE_THISUPDATE,
AppProvider.DataColumns.REQUIREMENTS, // Needed for filtering apps that require root.
AppTable.Cols._ID, // Required for cursor loader to work.
AppTable.Cols.PACKAGE_NAME,
AppTable.Cols.NAME,
AppTable.Cols.SUMMARY,
AppTable.Cols.IS_COMPATIBLE,
AppTable.Cols.LICENSE,
AppTable.Cols.ICON,
AppTable.Cols.ICON_URL,
AppTable.Cols.InstalledApp.VERSION_CODE,
AppTable.Cols.InstalledApp.VERSION_NAME,
AppTable.Cols.SuggestedApk.VERSION_NAME,
AppTable.Cols.SUGGESTED_VERSION_CODE,
AppTable.Cols.IGNORE_ALLUPDATES,
AppTable.Cols.IGNORE_THISUPDATE,
AppTable.Cols.REQUIREMENTS, // Needed for filtering apps that require root.
};
private static final String APP_SORT = AppProvider.DataColumns.NAME;
private static final String APP_SORT = AppTable.Cols.NAME;
private AppListAdapter appAdapter;

View File

@ -49,6 +49,7 @@ import org.fdroid.fdroid.data.ApkProvider;
import org.fdroid.fdroid.data.App;
import org.fdroid.fdroid.data.AppProvider;
import org.fdroid.fdroid.data.Repo;
import org.fdroid.fdroid.data.Schema;
import org.fdroid.fdroid.localrepo.SwapService;
import org.fdroid.fdroid.net.Downloader;
import org.fdroid.fdroid.net.DownloaderService;
@ -104,7 +105,7 @@ public class SwapAppsView extends ListView implements
*/
adapter = new AppListAdapter(getContext(), getContext().getContentResolver().query(
AppProvider.getRepoUri(repo), AppProvider.DataColumns.ALL, null, null, null));
AppProvider.getRepoUri(repo), Schema.AppTable.Cols.ALL, null, null, null));
setAdapter(adapter);
@ -194,7 +195,7 @@ public class SwapAppsView extends ListView implements
? AppProvider.getRepoUri(repo)
: AppProvider.getSearchUri(repo, mCurrentFilterString);
return new CursorLoader(getActivity(), uri, AppProvider.DataColumns.ALL, null, null, AppProvider.DataColumns.NAME);
return new CursorLoader(getActivity(), uri, Schema.AppTable.Cols.ALL, null, null, Schema.AppTable.Cols.NAME);
}
@Override

View File

@ -9,6 +9,8 @@ import junit.framework.AssertionFailedError;
import org.fdroid.fdroid.data.ApkProvider;
import org.fdroid.fdroid.data.AppProvider;
import org.fdroid.fdroid.data.InstalledAppProvider;
import org.fdroid.fdroid.data.Schema;
import org.fdroid.fdroid.data.Schema.AppTable;
import org.robolectric.shadows.ShadowContentResolver;
import java.util.ArrayList;
@ -178,16 +180,16 @@ public class Assert {
public static void insertApp(ShadowContentResolver resolver, String id, String name, ContentValues additionalValues) {
ContentValues values = new ContentValues();
values.put(AppProvider.DataColumns.PACKAGE_NAME, id);
values.put(AppProvider.DataColumns.NAME, name);
values.put(AppTable.Cols.PACKAGE_NAME, id);
values.put(AppTable.Cols.NAME, name);
// Required fields (NOT NULL in the database).
values.put(AppProvider.DataColumns.SUMMARY, "test summary");
values.put(AppProvider.DataColumns.DESCRIPTION, "test description");
values.put(AppProvider.DataColumns.LICENSE, "GPL?");
values.put(AppProvider.DataColumns.IS_COMPATIBLE, 1);
values.put(AppProvider.DataColumns.IGNORE_ALLUPDATES, 0);
values.put(AppProvider.DataColumns.IGNORE_THISUPDATE, 0);
values.put(AppTable.Cols.SUMMARY, "test summary");
values.put(AppTable.Cols.DESCRIPTION, "test description");
values.put(AppTable.Cols.LICENSE, "GPL?");
values.put(AppTable.Cols.IS_COMPATIBLE, 1);
values.put(AppTable.Cols.IGNORE_ALLUPDATES, 0);
values.put(AppTable.Cols.IGNORE_THISUPDATE, 0);
values.putAll(additionalValues);

View File

@ -8,6 +8,7 @@ import android.net.Uri;
import org.fdroid.fdroid.BuildConfig;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.data.Schema.AppTable.Cols;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@ -30,7 +31,7 @@ import static org.junit.Assert.assertTrue;
@RunWith(RobolectricGradleTestRunner.class)
public class AppProviderTest extends FDroidProviderTest {
private static final String[] PROJ = AppProvider.DataColumns.ALL;
private static final String[] PROJ = Cols.ALL;
@Before
public void setup() {
@ -86,9 +87,9 @@ public class AppProviderTest extends FDroidProviderTest {
String packageName, int installedVercode, int suggestedVercode,
boolean ignoreAll, int ignoreVercode) {
ContentValues values = new ContentValues(3);
values.put(AppProvider.DataColumns.SUGGESTED_VERSION_CODE, suggestedVercode);
values.put(AppProvider.DataColumns.IGNORE_ALLUPDATES, ignoreAll);
values.put(AppProvider.DataColumns.IGNORE_THISUPDATE, ignoreVercode);
values.put(Cols.SUGGESTED_VERSION_CODE, suggestedVercode);
values.put(Cols.IGNORE_ALLUPDATES, ignoreAll);
values.put(Cols.IGNORE_THISUPDATE, ignoreVercode);
insertApp(packageName, "App: " + packageName, values);
InstalledAppTestUtils.install(context, packageName, installedVercode, "v" + installedVercode);
@ -135,7 +136,7 @@ public class AppProviderTest extends FDroidProviderTest {
assertFalse(installedOldIgnoreLatest.canAndWantToUpdate());
assertTrue(installedOldIgnoreNewerNotLatest.canAndWantToUpdate());
Cursor canUpdateCursor = r.query(AppProvider.getCanUpdateUri(), AppProvider.DataColumns.ALL, null, null, null);
Cursor canUpdateCursor = r.query(AppProvider.getCanUpdateUri(), Cols.ALL, null, null, null);
assertNotNull(canUpdateCursor);
canUpdateCursor.moveToFirst();
List<String> canUpdateIds = new ArrayList<>(canUpdateCursor.getCount());
@ -168,7 +169,7 @@ public class AppProviderTest extends FDroidProviderTest {
assertResultCount(contentResolver, 10, AppProvider.getContentUri(), PROJ);
String[] projection = {AppProvider.DataColumns.PACKAGE_NAME};
String[] projection = {Cols.PACKAGE_NAME};
List<App> ignoredApps = AppProvider.Helper.findIgnored(context, projection);
String[] expectedIgnored = {
@ -251,9 +252,9 @@ public class AppProviderTest extends FDroidProviderTest {
private Cursor queryAllApps() {
String[] projection = new String[] {
AppProvider.DataColumns._ID,
AppProvider.DataColumns.NAME,
AppProvider.DataColumns.PACKAGE_NAME,
Cols._ID,
Cols.NAME,
Cols.PACKAGE_NAME,
};
return contentResolver.query(AppProvider.getContentUri(), projection, null, null, null);
}
@ -342,23 +343,23 @@ public class AppProviderTest extends FDroidProviderTest {
private void insertAppWithCategory(String id, String name, String categories) {
ContentValues values = new ContentValues(1);
values.put(AppProvider.DataColumns.CATEGORIES, categories);
values.put(Cols.CATEGORIES, categories);
insertApp(id, name, values);
}
public void insertApp(String id, String name, ContentValues additionalValues) {
ContentValues values = new ContentValues();
values.put(AppProvider.DataColumns.PACKAGE_NAME, id);
values.put(AppProvider.DataColumns.NAME, name);
values.put(Cols.PACKAGE_NAME, id);
values.put(Cols.NAME, name);
// Required fields (NOT NULL in the database).
values.put(AppProvider.DataColumns.SUMMARY, "test summary");
values.put(AppProvider.DataColumns.DESCRIPTION, "test description");
values.put(AppProvider.DataColumns.LICENSE, "GPL?");
values.put(AppProvider.DataColumns.IS_COMPATIBLE, 1);
values.put(AppProvider.DataColumns.IGNORE_ALLUPDATES, 0);
values.put(AppProvider.DataColumns.IGNORE_THISUPDATE, 0);
values.put(Cols.SUMMARY, "test summary");
values.put(Cols.DESCRIPTION, "test description");
values.put(Cols.LICENSE, "GPL?");
values.put(Cols.IS_COMPATIBLE, 1);
values.put(Cols.IGNORE_ALLUPDATES, 0);
values.put(Cols.IGNORE_THISUPDATE, 0);
values.putAll(additionalValues);

View File

@ -79,7 +79,7 @@ public class ProviderUriTests {
@Test
public void validAppProviderUris() {
ShadowContentResolver.registerProvider(AppProvider.getAuthority(), new AppProvider());
String[] projection = new String[] {AppProvider.DataColumns._ID};
String[] projection = new String[] {Schema.AppTable.Cols._ID};
assertValidUri(resolver, AppProvider.getContentUri(), "content://org.fdroid.fdroid.data.AppProvider", projection);
assertValidUri(resolver, AppProvider.getSearchUri("'searching!'"), "content://org.fdroid.fdroid.data.AppProvider/search/'searching!'", projection);
assertValidUri(resolver, AppProvider.getSearchUri("/"), "content://org.fdroid.fdroid.data.AppProvider/search/%2F", projection);