Extracted ApkProvider.DataColumns to Schema.ApkTable.Cols
This commit is contained in:
		
							parent
							
								
									315f20df0c
								
							
						
					
					
						commit
						0ea5325b81
					
				| @ -1033,7 +1033,7 @@ public class AppDetails extends AppCompatActivity { | ||||
|             case REQUEST_PERMISSION_DIALOG: | ||||
|                 if (resultCode == Activity.RESULT_OK) { | ||||
|                     Uri uri = data.getData(); | ||||
|                     Apk apk = ApkProvider.Helper.find(this, uri, ApkProvider.DataColumns.ALL); | ||||
|                     Apk apk = ApkProvider.Helper.find(this, uri, Schema.ApkTable.Cols.ALL); | ||||
|                     startInstall(apk); | ||||
|                 } | ||||
|                 break; | ||||
|  | ||||
| @ -7,6 +7,7 @@ import android.os.Build; | ||||
| import android.os.Parcelable; | ||||
| 
 | ||||
| import org.fdroid.fdroid.Utils; | ||||
| import org.fdroid.fdroid.data.Schema.ApkTable.Cols; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.Date; | ||||
| @ -73,67 +74,67 @@ public class Apk extends ValueObject implements Comparable<Apk> { | ||||
| 
 | ||||
|         for (int i = 0; i < cursor.getColumnCount(); i++) { | ||||
|             switch (cursor.getColumnName(i)) { | ||||
|                 case ApkProvider.DataColumns.HASH: | ||||
|                 case Cols.HASH: | ||||
|                     hash = cursor.getString(i); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.HASH_TYPE: | ||||
|                 case Cols.HASH_TYPE: | ||||
|                     hashType = cursor.getString(i); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.ADDED_DATE: | ||||
|                 case Cols.ADDED_DATE: | ||||
|                     added = Utils.parseDate(cursor.getString(i), null); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.FEATURES: | ||||
|                 case Cols.FEATURES: | ||||
|                     features = Utils.parseCommaSeparatedString(cursor.getString(i)); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.PACKAGE_NAME: | ||||
|                 case Cols.PACKAGE_NAME: | ||||
|                     packageName = cursor.getString(i); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.IS_COMPATIBLE: | ||||
|                 case Cols.IS_COMPATIBLE: | ||||
|                     compatible = cursor.getInt(i) == 1; | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.MIN_SDK_VERSION: | ||||
|                 case Cols.MIN_SDK_VERSION: | ||||
|                     minSdkVersion = cursor.getInt(i); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.TARGET_SDK_VERSION: | ||||
|                 case Cols.TARGET_SDK_VERSION: | ||||
|                     targetSdkVersion = cursor.getInt(i); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.MAX_SDK_VERSION: | ||||
|                 case Cols.MAX_SDK_VERSION: | ||||
|                     maxSdkVersion = cursor.getInt(i); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.NAME: | ||||
|                 case Cols.NAME: | ||||
|                     apkName = cursor.getString(i); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.PERMISSIONS: | ||||
|                 case Cols.PERMISSIONS: | ||||
|                     permissions = Utils.parseCommaSeparatedString(cursor.getString(i)); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.NATIVE_CODE: | ||||
|                 case Cols.NATIVE_CODE: | ||||
|                     nativecode = Utils.parseCommaSeparatedString(cursor.getString(i)); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.INCOMPATIBLE_REASONS: | ||||
|                 case Cols.INCOMPATIBLE_REASONS: | ||||
|                     incompatibleReasons = Utils.parseCommaSeparatedString(cursor.getString(i)); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.REPO_ID: | ||||
|                 case Cols.REPO_ID: | ||||
|                     repo = cursor.getInt(i); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.SIGNATURE: | ||||
|                 case Cols.SIGNATURE: | ||||
|                     sig = cursor.getString(i); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.SIZE: | ||||
|                 case Cols.SIZE: | ||||
|                     size = cursor.getInt(i); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.SOURCE_NAME: | ||||
|                 case Cols.SOURCE_NAME: | ||||
|                     srcname = cursor.getString(i); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.VERSION_NAME: | ||||
|                 case Cols.VERSION_NAME: | ||||
|                     versionName = cursor.getString(i); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.VERSION_CODE: | ||||
|                 case Cols.VERSION_CODE: | ||||
|                     versionCode = cursor.getInt(i); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.REPO_VERSION: | ||||
|                 case Cols.REPO_VERSION: | ||||
|                     repoVersion = cursor.getInt(i); | ||||
|                     break; | ||||
|                 case ApkProvider.DataColumns.REPO_ADDRESS: | ||||
|                 case Cols.REPO_ADDRESS: | ||||
|                     repoAddress = cursor.getString(i); | ||||
|                     break; | ||||
|             } | ||||
| @ -142,7 +143,7 @@ public class Apk extends ValueObject implements Comparable<Apk> { | ||||
| 
 | ||||
|     public String getUrl() { | ||||
|         if (repoAddress == null || apkName == null) { | ||||
|             throw new IllegalStateException("Apk needs to have both ApkProvider.DataColumns.REPO_ADDRESS and ApkProvider.DataColumns.NAME set in order to calculate URL."); | ||||
|             throw new IllegalStateException("Apk needs to have both Schema.ApkTable.Cols.REPO_ADDRESS and Schema.ApkTable.Cols.NAME set in order to calculate URL."); | ||||
|         } | ||||
|         return repoAddress + "/" + apkName.replace(" ", "%20"); | ||||
|     } | ||||
| @ -191,25 +192,25 @@ public class Apk extends ValueObject implements Comparable<Apk> { | ||||
| 
 | ||||
|     public ContentValues toContentValues() { | ||||
|         ContentValues values = new ContentValues(); | ||||
|         values.put(ApkProvider.DataColumns.PACKAGE_NAME, packageName); | ||||
|         values.put(ApkProvider.DataColumns.VERSION_NAME, versionName); | ||||
|         values.put(ApkProvider.DataColumns.VERSION_CODE, versionCode); | ||||
|         values.put(ApkProvider.DataColumns.REPO_ID, repo); | ||||
|         values.put(ApkProvider.DataColumns.HASH, hash); | ||||
|         values.put(ApkProvider.DataColumns.HASH_TYPE, hashType); | ||||
|         values.put(ApkProvider.DataColumns.SIGNATURE, sig); | ||||
|         values.put(ApkProvider.DataColumns.SOURCE_NAME, srcname); | ||||
|         values.put(ApkProvider.DataColumns.SIZE, size); | ||||
|         values.put(ApkProvider.DataColumns.NAME, apkName); | ||||
|         values.put(ApkProvider.DataColumns.MIN_SDK_VERSION, minSdkVersion); | ||||
|         values.put(ApkProvider.DataColumns.TARGET_SDK_VERSION, targetSdkVersion); | ||||
|         values.put(ApkProvider.DataColumns.MAX_SDK_VERSION, maxSdkVersion); | ||||
|         values.put(ApkProvider.DataColumns.ADDED_DATE, Utils.formatDate(added, "")); | ||||
|         values.put(ApkProvider.DataColumns.PERMISSIONS, Utils.serializeCommaSeparatedString(permissions)); | ||||
|         values.put(ApkProvider.DataColumns.FEATURES, Utils.serializeCommaSeparatedString(features)); | ||||
|         values.put(ApkProvider.DataColumns.NATIVE_CODE, Utils.serializeCommaSeparatedString(nativecode)); | ||||
|         values.put(ApkProvider.DataColumns.INCOMPATIBLE_REASONS, Utils.serializeCommaSeparatedString(incompatibleReasons)); | ||||
|         values.put(ApkProvider.DataColumns.IS_COMPATIBLE, compatible ? 1 : 0); | ||||
|         values.put(Cols.PACKAGE_NAME, packageName); | ||||
|         values.put(Cols.VERSION_NAME, versionName); | ||||
|         values.put(Cols.VERSION_CODE, versionCode); | ||||
|         values.put(Cols.REPO_ID, repo); | ||||
|         values.put(Cols.HASH, hash); | ||||
|         values.put(Cols.HASH_TYPE, hashType); | ||||
|         values.put(Cols.SIGNATURE, sig); | ||||
|         values.put(Cols.SOURCE_NAME, srcname); | ||||
|         values.put(Cols.SIZE, size); | ||||
|         values.put(Cols.NAME, apkName); | ||||
|         values.put(Cols.MIN_SDK_VERSION, minSdkVersion); | ||||
|         values.put(Cols.TARGET_SDK_VERSION, targetSdkVersion); | ||||
|         values.put(Cols.MAX_SDK_VERSION, maxSdkVersion); | ||||
|         values.put(Cols.ADDED_DATE, Utils.formatDate(added, "")); | ||||
|         values.put(Cols.PERMISSIONS, Utils.serializeCommaSeparatedString(permissions)); | ||||
|         values.put(Cols.FEATURES, Utils.serializeCommaSeparatedString(features)); | ||||
|         values.put(Cols.NATIVE_CODE, Utils.serializeCommaSeparatedString(nativecode)); | ||||
|         values.put(Cols.INCOMPATIBLE_REASONS, Utils.serializeCommaSeparatedString(incompatibleReasons)); | ||||
|         values.put(Cols.IS_COMPATIBLE, compatible ? 1 : 0); | ||||
|         return values; | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -6,10 +6,10 @@ import android.content.Context; | ||||
| import android.content.UriMatcher; | ||||
| import android.database.Cursor; | ||||
| import android.net.Uri; | ||||
| import android.provider.BaseColumns; | ||||
| import android.util.Log; | ||||
| 
 | ||||
| import org.fdroid.fdroid.Utils; | ||||
| import org.fdroid.fdroid.data.Schema.ApkTable.Cols; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.HashMap; | ||||
| @ -85,7 +85,7 @@ public class ApkProvider extends FDroidProvider { | ||||
|         } | ||||
| 
 | ||||
|         public static Apk find(Context context, String packageName, int versionCode) { | ||||
|             return find(context, packageName, versionCode, DataColumns.ALL); | ||||
|             return find(context, packageName, versionCode, Cols.ALL); | ||||
|         } | ||||
| 
 | ||||
|         /** | ||||
| @ -103,7 +103,7 @@ public class ApkProvider extends FDroidProvider { | ||||
|          * @see org.fdroid.fdroid.data.ApkProvider.Helper#find(Context, Repo, List, String[]) | ||||
|          */ | ||||
|         public static List<Apk> find(Context context, Repo repo, List<App> apps) { | ||||
|             return find(context, repo, apps, DataColumns.ALL); | ||||
|             return find(context, repo, apps, Cols.ALL); | ||||
|         } | ||||
| 
 | ||||
|         public static Apk find(Context context, String packageName, int versionCode, String[] projection) { | ||||
| @ -126,14 +126,14 @@ public class ApkProvider extends FDroidProvider { | ||||
|         } | ||||
| 
 | ||||
|         public static List<Apk> findByPackageName(Context context, String packageName) { | ||||
|             return findByPackageName(context, packageName, ApkProvider.DataColumns.ALL); | ||||
|             return findByPackageName(context, packageName, Cols.ALL); | ||||
|         } | ||||
| 
 | ||||
|         public static List<Apk> findByPackageName(Context context, | ||||
|                                                   String packageName, String[] projection) { | ||||
|             ContentResolver resolver = context.getContentResolver(); | ||||
|             final Uri uri = getAppUri(packageName); | ||||
|             final String sort = ApkProvider.DataColumns.VERSION_CODE + " DESC"; | ||||
|             final String sort = Cols.VERSION_CODE + " DESC"; | ||||
|             Cursor cursor = resolver.query(uri, projection, null, null, sort); | ||||
|             return cursorToList(cursor); | ||||
|         } | ||||
| @ -176,7 +176,7 @@ public class ApkProvider extends FDroidProvider { | ||||
|         } | ||||
| 
 | ||||
|         public static Apk get(Context context, Uri uri) { | ||||
|             return get(context, uri, DataColumns.ALL); | ||||
|             return get(context, uri, Cols.ALL); | ||||
|         } | ||||
| 
 | ||||
|         public static Apk get(Context context, Uri uri, String[] fields) { | ||||
| @ -194,40 +194,6 @@ public class ApkProvider extends FDroidProvider { | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public interface DataColumns extends BaseColumns { | ||||
| 
 | ||||
|         String _COUNT_DISTINCT_ID = "countDistinct"; | ||||
| 
 | ||||
|         String PACKAGE_NAME    = "id"; | ||||
|         String VERSION_NAME    = "version"; | ||||
|         String REPO_ID         = "repo"; | ||||
|         String HASH            = "hash"; | ||||
|         String VERSION_CODE    = "vercode"; | ||||
|         String NAME            = "apkName"; | ||||
|         String SIZE            = "size"; | ||||
|         String SIGNATURE       = "sig"; | ||||
|         String SOURCE_NAME     = "srcname"; | ||||
|         String MIN_SDK_VERSION = "minSdkVersion"; | ||||
|         String TARGET_SDK_VERSION = "targetSdkVersion"; | ||||
|         String MAX_SDK_VERSION = "maxSdkVersion"; | ||||
|         String PERMISSIONS     = "permissions"; | ||||
|         String FEATURES        = "features"; | ||||
|         String NATIVE_CODE     = "nativecode"; | ||||
|         String HASH_TYPE       = "hashType"; | ||||
|         String ADDED_DATE      = "added"; | ||||
|         String IS_COMPATIBLE   = "compatible"; | ||||
|         String INCOMPATIBLE_REASONS = "incompatibleReasons"; | ||||
|         String REPO_VERSION    = "repoVersion"; | ||||
|         String REPO_ADDRESS    = "repoAddress"; | ||||
| 
 | ||||
|         String[] ALL = { | ||||
|             _ID, PACKAGE_NAME, VERSION_NAME, REPO_ID, HASH, VERSION_CODE, NAME, | ||||
|             SIZE, SIGNATURE, SOURCE_NAME, MIN_SDK_VERSION, TARGET_SDK_VERSION, MAX_SDK_VERSION, | ||||
|             PERMISSIONS, FEATURES, NATIVE_CODE, HASH_TYPE, ADDED_DATE, | ||||
|             IS_COMPATIBLE, REPO_VERSION, REPO_ADDRESS, INCOMPATIBLE_REASONS, | ||||
|         }; | ||||
|     } | ||||
| 
 | ||||
|     private static final int CODE_APP = CODE_SINGLE + 1; | ||||
|     private static final int CODE_REPO = CODE_APP + 1; | ||||
|     private static final int CODE_APKS = CODE_REPO + 1; | ||||
| @ -247,8 +213,8 @@ public class ApkProvider extends FDroidProvider { | ||||
|     private static final Map<String, String> REPO_FIELDS = new HashMap<>(); | ||||
| 
 | ||||
|     static { | ||||
|         REPO_FIELDS.put(DataColumns.REPO_VERSION, RepoProvider.DataColumns.VERSION); | ||||
|         REPO_FIELDS.put(DataColumns.REPO_ADDRESS, RepoProvider.DataColumns.ADDRESS); | ||||
|         REPO_FIELDS.put(Cols.REPO_VERSION, RepoProvider.DataColumns.VERSION); | ||||
|         REPO_FIELDS.put(Cols.REPO_ADDRESS, RepoProvider.DataColumns.ADDRESS); | ||||
| 
 | ||||
|         MATCHER.addURI(getAuthority(), PATH_REPO + "/#", CODE_REPO); | ||||
|         MATCHER.addURI(getAuthority(), PATH_APK + "/#/*", CODE_SINGLE); | ||||
| @ -378,12 +344,12 @@ public class ApkProvider extends FDroidProvider { | ||||
|         public void addField(String field) { | ||||
|             if (REPO_FIELDS.containsKey(field)) { | ||||
|                 addRepoField(REPO_FIELDS.get(field), field); | ||||
|             } else if (field.equals(DataColumns._ID)) { | ||||
|             } else if (field.equals(Cols._ID)) { | ||||
|                 appendField("rowid", "apk", "_id"); | ||||
|             } else if (field.equals(DataColumns._COUNT)) { | ||||
|                 appendField("COUNT(*) AS " + DataColumns._COUNT); | ||||
|             } else if (field.equals(DataColumns._COUNT_DISTINCT_ID)) { | ||||
|                 appendField("COUNT(DISTINCT apk.id) AS " + DataColumns._COUNT_DISTINCT_ID); | ||||
|             } else if (field.equals(Cols._COUNT)) { | ||||
|                 appendField("COUNT(*) AS " + Cols._COUNT); | ||||
|             } else if (field.equals(Cols._COUNT_DISTINCT_ID)) { | ||||
|                 appendField("COUNT(DISTINCT apk.id) AS " + Cols._COUNT_DISTINCT_ID); | ||||
|             } else { | ||||
|                 appendField(field, "apk"); | ||||
|             } | ||||
| @ -400,7 +366,7 @@ public class ApkProvider extends FDroidProvider { | ||||
|     } | ||||
| 
 | ||||
|     private QuerySelection queryApp(String packageName) { | ||||
|         final String selection = DataColumns.PACKAGE_NAME + " = ? "; | ||||
|         final String selection = Cols.PACKAGE_NAME + " = ? "; | ||||
|         final String[] args = {packageName}; | ||||
|         return new QuerySelection(selection, args); | ||||
|     } | ||||
| @ -417,13 +383,13 @@ public class ApkProvider extends FDroidProvider { | ||||
|     } | ||||
| 
 | ||||
|     protected QuerySelection queryRepo(long repoId) { | ||||
|         final String selection = DataColumns.REPO_ID + " = ? "; | ||||
|         final String selection = Cols.REPO_ID + " = ? "; | ||||
|         final String[] args = {Long.toString(repoId)}; | ||||
|         return new QuerySelection(selection, args); | ||||
|     } | ||||
| 
 | ||||
|     private QuerySelection queryRepoApps(long repoId, String packageNames) { | ||||
|         return queryRepo(repoId).add(AppProvider.queryApps(packageNames, DataColumns.PACKAGE_NAME)); | ||||
|         return queryRepo(repoId).add(AppProvider.queryApps(packageNames, Cols.PACKAGE_NAME)); | ||||
|     } | ||||
| 
 | ||||
|     protected QuerySelection queryApks(String apkKeys) { | ||||
| @ -511,14 +477,14 @@ public class ApkProvider extends FDroidProvider { | ||||
|     @Override | ||||
|     public Uri insert(Uri uri, ContentValues values) { | ||||
|         removeRepoFields(values); | ||||
|         validateFields(DataColumns.ALL, values); | ||||
|         validateFields(Cols.ALL, values); | ||||
|         db().insertOrThrow(getTableName(), null, values); | ||||
|         if (!isApplyingBatch()) { | ||||
|             getContext().getContentResolver().notifyChange(uri, null); | ||||
|         } | ||||
|         return getContentUri( | ||||
|             values.getAsString(DataColumns.PACKAGE_NAME), | ||||
|             values.getAsInteger(DataColumns.VERSION_CODE)); | ||||
|             values.getAsString(Cols.PACKAGE_NAME), | ||||
|             values.getAsInteger(Cols.VERSION_CODE)); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| @ -573,7 +539,7 @@ public class ApkProvider extends FDroidProvider { | ||||
|     } | ||||
| 
 | ||||
|     protected int performUpdateUnchecked(Uri uri, ContentValues values, String where, String[] whereArgs) { | ||||
|         validateFields(DataColumns.ALL, values); | ||||
|         validateFields(Cols.ALL, values); | ||||
|         removeRepoFields(values); | ||||
| 
 | ||||
|         QuerySelection query = new QuerySelection(where, whereArgs); | ||||
|  | ||||
| @ -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.ApkTable; | ||||
| import org.fdroid.fdroid.data.Schema.AppTable.Cols; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| @ -321,7 +322,7 @@ public class AppProvider extends FDroidProvider { | ||||
| 
 | ||||
|         private void addSuggestedApkVersionField() { | ||||
|             addSuggestedApkField( | ||||
|                     ApkProvider.DataColumns.VERSION_NAME, | ||||
|                     ApkTable.Cols.VERSION_NAME, | ||||
|                     Cols.SuggestedApk.VERSION_NAME); | ||||
|         } | ||||
| 
 | ||||
|  | ||||
| @ -9,6 +9,7 @@ import android.util.Log; | ||||
| 
 | ||||
| import org.fdroid.fdroid.R; | ||||
| import org.fdroid.fdroid.Utils; | ||||
| import org.fdroid.fdroid.data.Schema.ApkTable; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| @ -505,8 +506,8 @@ class DBHelper extends SQLiteOpenHelper { | ||||
|         } | ||||
|         Utils.debugLog(TAG, "Converting maxSdkVersion value 0 to " + Byte.MAX_VALUE); | ||||
|         ContentValues values = new ContentValues(); | ||||
|         values.put(ApkProvider.DataColumns.MAX_SDK_VERSION, Byte.MAX_VALUE); | ||||
|         db.update(TABLE_APK, values, ApkProvider.DataColumns.MAX_SDK_VERSION + " < 1", null); | ||||
|         values.put(ApkTable.Cols.MAX_SDK_VERSION, Byte.MAX_VALUE); | ||||
|         db.update(TABLE_APK, values, ApkTable.Cols.MAX_SDK_VERSION + " < 1", null); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @ -578,10 +579,10 @@ class DBHelper extends SQLiteOpenHelper { | ||||
|         if (oldVersion >= 57) { | ||||
|             return; | ||||
|         } | ||||
|         Utils.debugLog(TAG, "Adding " + ApkProvider.DataColumns.TARGET_SDK_VERSION | ||||
|         Utils.debugLog(TAG, "Adding " + ApkTable.Cols.TARGET_SDK_VERSION | ||||
|                 + " columns to " + TABLE_APK); | ||||
|         db.execSQL("alter table " + TABLE_APK + " add column " | ||||
|                 + ApkProvider.DataColumns.TARGET_SDK_VERSION + " integer"); | ||||
|                 + ApkTable.Cols.TARGET_SDK_VERSION + " integer"); | ||||
|     } | ||||
| 
 | ||||
|     private static boolean columnExists(SQLiteDatabase db, | ||||
|  | ||||
| @ -159,8 +159,8 @@ public class RepoPersister { | ||||
|      */ | ||||
|     private ArrayList<ContentProviderOperation> insertOrUpdateApks(List<Apk> packages) { | ||||
|         String[] projection = new String[]{ | ||||
|             ApkProvider.DataColumns.PACKAGE_NAME, | ||||
|             ApkProvider.DataColumns.VERSION_CODE, | ||||
|                 Schema.ApkTable.Cols.PACKAGE_NAME, | ||||
|                 Schema.ApkTable.Cols.VERSION_CODE, | ||||
|         }; | ||||
|         List<Apk> existingApks = ApkProvider.Helper.knownApks(context, packages, projection); | ||||
|         ArrayList<ContentProviderOperation> operations = new ArrayList<>(packages.size()); | ||||
| @ -245,7 +245,7 @@ public class RepoPersister { | ||||
|      */ | ||||
|     @Nullable | ||||
|     private ContentProviderOperation deleteOrphanedApks(List<App> apps, Map<String, List<Apk>> packages) { | ||||
|         String[] projection = new String[]{ApkProvider.DataColumns.PACKAGE_NAME, ApkProvider.DataColumns.VERSION_CODE}; | ||||
|         String[] projection = new String[]{Schema.ApkTable.Cols.PACKAGE_NAME, Schema.ApkTable.Cols.VERSION_CODE}; | ||||
|         List<Apk> existing = ApkProvider.Helper.find(context, repo, apps, projection); | ||||
|         List<Apk> toDelete = new ArrayList<>(); | ||||
| 
 | ||||
|  | ||||
| @ -194,7 +194,7 @@ public class RepoProvider extends FDroidProvider { | ||||
| 
 | ||||
|         public static int countAppsForRepo(Context context, long repoId) { | ||||
|             ContentResolver resolver = context.getContentResolver(); | ||||
|             final String[] projection = {ApkProvider.DataColumns._COUNT_DISTINCT_ID}; | ||||
|             final String[] projection = {Schema.ApkTable.Cols._COUNT_DISTINCT_ID}; | ||||
|             Uri apkUri = ApkProvider.getRepoUri(repoId); | ||||
|             Cursor cursor = resolver.query(apkUri, projection, null, null, null); | ||||
|             int count = 0; | ||||
|  | ||||
| @ -1,5 +1,7 @@ | ||||
| package org.fdroid.fdroid.data; | ||||
| 
 | ||||
| import android.provider.BaseColumns; | ||||
| 
 | ||||
| /** | ||||
|  * The authoritative reference to each table/column which should exist in the database. | ||||
|  * Constants from this interface should be used in preference to string literals when referring to | ||||
| @ -70,7 +72,38 @@ public interface Schema { | ||||
| 
 | ||||
|     interface ApkTable { | ||||
|         String NAME = DBHelper.TABLE_APK; | ||||
|         interface Cols extends ApkProvider.DataColumns {} | ||||
|         interface Cols extends BaseColumns { | ||||
|             String _COUNT_DISTINCT_ID = "countDistinct"; | ||||
| 
 | ||||
|             String PACKAGE_NAME    = "id"; | ||||
|             String VERSION_NAME    = "version"; | ||||
|             String REPO_ID         = "repo"; | ||||
|             String HASH            = "hash"; | ||||
|             String VERSION_CODE    = "vercode"; | ||||
|             String NAME            = "apkName"; | ||||
|             String SIZE            = "size"; | ||||
|             String SIGNATURE       = "sig"; | ||||
|             String SOURCE_NAME     = "srcname"; | ||||
|             String MIN_SDK_VERSION = "minSdkVersion"; | ||||
|             String TARGET_SDK_VERSION = "targetSdkVersion"; | ||||
|             String MAX_SDK_VERSION = "maxSdkVersion"; | ||||
|             String PERMISSIONS     = "permissions"; | ||||
|             String FEATURES        = "features"; | ||||
|             String NATIVE_CODE     = "nativecode"; | ||||
|             String HASH_TYPE       = "hashType"; | ||||
|             String ADDED_DATE      = "added"; | ||||
|             String IS_COMPATIBLE   = "compatible"; | ||||
|             String INCOMPATIBLE_REASONS = "incompatibleReasons"; | ||||
|             String REPO_VERSION    = "repoVersion"; | ||||
|             String REPO_ADDRESS    = "repoAddress"; | ||||
| 
 | ||||
|             String[] ALL = { | ||||
|                     _ID, PACKAGE_NAME, VERSION_NAME, REPO_ID, HASH, VERSION_CODE, NAME, | ||||
|                     SIZE, SIGNATURE, SOURCE_NAME, MIN_SDK_VERSION, TARGET_SDK_VERSION, MAX_SDK_VERSION, | ||||
|                     PERMISSIONS, FEATURES, NATIVE_CODE, HASH_TYPE, ADDED_DATE, | ||||
|                     IS_COMPATIBLE, REPO_VERSION, REPO_ADDRESS, INCOMPATIBLE_REASONS, | ||||
|             }; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     interface RepoTable { | ||||
|  | ||||
| @ -47,6 +47,7 @@ import org.fdroid.fdroid.data.Apk; | ||||
| import org.fdroid.fdroid.data.ApkProvider; | ||||
| import org.fdroid.fdroid.data.App; | ||||
| import org.fdroid.fdroid.data.AppProvider; | ||||
| import org.fdroid.fdroid.data.Schema; | ||||
| 
 | ||||
| /** | ||||
|  * NOTES: | ||||
| @ -191,7 +192,7 @@ public class InstallConfirmActivity extends FragmentActivity implements OnCancel | ||||
| 
 | ||||
|         intent = getIntent(); | ||||
|         Uri uri = intent.getData(); | ||||
|         Apk apk = ApkProvider.Helper.find(this, uri, ApkProvider.DataColumns.ALL); | ||||
|         Apk apk = ApkProvider.Helper.find(this, uri, Schema.ApkTable.Cols.ALL); | ||||
|         app = AppProvider.Helper.findByPackageName(getContentResolver(), apk.packageName); | ||||
| 
 | ||||
|         appDiff = new AppDiff(getPackageManager(), apk); | ||||
|  | ||||
| @ -10,6 +10,7 @@ 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.ApkTable; | ||||
| import org.fdroid.fdroid.data.Schema.AppTable; | ||||
| import org.robolectric.shadows.ShadowContentResolver; | ||||
| 
 | ||||
| @ -206,16 +207,16 @@ public class Assert { | ||||
| 
 | ||||
|         ContentValues values = new ContentValues(); | ||||
| 
 | ||||
|         values.put(ApkProvider.DataColumns.PACKAGE_NAME, id); | ||||
|         values.put(ApkProvider.DataColumns.VERSION_CODE, versionCode); | ||||
|         values.put(ApkTable.Cols.PACKAGE_NAME, id); | ||||
|         values.put(ApkTable.Cols.VERSION_CODE, versionCode); | ||||
| 
 | ||||
|         // Required fields (NOT NULL in the database). | ||||
|         values.put(ApkProvider.DataColumns.REPO_ID, 1); | ||||
|         values.put(ApkProvider.DataColumns.VERSION_NAME, "The good one"); | ||||
|         values.put(ApkProvider.DataColumns.HASH, "11111111aaaaaaaa"); | ||||
|         values.put(ApkProvider.DataColumns.NAME, "Test Apk"); | ||||
|         values.put(ApkProvider.DataColumns.SIZE, 10000); | ||||
|         values.put(ApkProvider.DataColumns.IS_COMPATIBLE, 1); | ||||
|         values.put(ApkTable.Cols.REPO_ID, 1); | ||||
|         values.put(ApkTable.Cols.VERSION_NAME, "The good one"); | ||||
|         values.put(ApkTable.Cols.HASH, "11111111aaaaaaaa"); | ||||
|         values.put(ApkTable.Cols.NAME, "Test Apk"); | ||||
|         values.put(ApkTable.Cols.SIZE, 10000); | ||||
|         values.put(ApkTable.Cols.IS_COMPATIBLE, 1); | ||||
| 
 | ||||
|         values.putAll(additionalValues); | ||||
| 
 | ||||
|  | ||||
| @ -91,7 +91,7 @@ public abstract class MultiRepoUpdaterTest extends FDroidProviderTest { | ||||
|     } | ||||
| 
 | ||||
|     protected void assertApp(String packageName, int[] versionCodes) { | ||||
|         List<Apk> apks = ApkProvider.Helper.findByPackageName(context, packageName, ApkProvider.DataColumns.ALL); | ||||
|         List<Apk> apks = ApkProvider.Helper.findByPackageName(context, packageName); | ||||
|         assertApksExist(apks, packageName, versionCodes); | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -7,6 +7,7 @@ import org.fdroid.fdroid.data.Apk; | ||||
| import org.fdroid.fdroid.data.ApkProvider; | ||||
| import org.fdroid.fdroid.data.Repo; | ||||
| import org.fdroid.fdroid.data.RepoProvider; | ||||
| import org.fdroid.fdroid.data.Schema; | ||||
| 
 | ||||
| import java.util.List; | ||||
| 
 | ||||
| @ -101,7 +102,7 @@ public class ProperMultiRepoUpdaterTest extends MultiRepoUpdaterTest { | ||||
|     private void assertMainRepo(List<Repo> allRepos) { | ||||
|         Repo repo = findRepo(REPO_MAIN, allRepos); | ||||
| 
 | ||||
|         List<Apk> apks = ApkProvider.Helper.findByRepo(context, repo, ApkProvider.DataColumns.ALL); | ||||
|         List<Apk> apks = ApkProvider.Helper.findByRepo(context, repo, Schema.ApkTable.Cols.ALL); | ||||
|         assertEquals("Apks for main repo", apks.size(), 6); | ||||
|         assertApksExist(apks, "com.uberspot.a2048", new int[]{18, 19}); | ||||
|         assertApksExist(apks, "org.adaway", new int[]{52, 53, 54}); | ||||
| @ -127,7 +128,7 @@ public class ProperMultiRepoUpdaterTest extends MultiRepoUpdaterTest { | ||||
|     private void assertMainArchiveRepo(List<Repo> allRepos) { | ||||
|         Repo repo = findRepo(REPO_ARCHIVE, allRepos); | ||||
| 
 | ||||
|         List<Apk> apks = ApkProvider.Helper.findByRepo(context, repo, ApkProvider.DataColumns.ALL); | ||||
|         List<Apk> apks = ApkProvider.Helper.findByRepo(context, repo, Schema.ApkTable.Cols.ALL); | ||||
|         assertEquals("Apks for main archive repo", 13, apks.size()); | ||||
|         assertApksExist(apks, "org.adaway", new int[]{35, 36, 37, 38, 40, 42, 45, 46, 47, 48, 49, 50, 51}); | ||||
|     } | ||||
| @ -145,7 +146,7 @@ public class ProperMultiRepoUpdaterTest extends MultiRepoUpdaterTest { | ||||
|     private void assertConflictingRepo(List<Repo> allRepos) { | ||||
|         Repo repo = findRepo(REPO_CONFLICTING, allRepos); | ||||
| 
 | ||||
|         List<Apk> apks = ApkProvider.Helper.findByRepo(context, repo, ApkProvider.DataColumns.ALL); | ||||
|         List<Apk> apks = ApkProvider.Helper.findByRepo(context, repo, Schema.ApkTable.Cols.ALL); | ||||
|         assertEquals("Apks for main repo", 6, apks.size()); | ||||
|         assertApksExist(apks, "org.adaway", new int[]{50, 51, 52, 53}); | ||||
|         assertApksExist(apks, "org.dgtale.icsimport", new int[]{2, 3}); | ||||
|  | ||||
| @ -7,6 +7,7 @@ import android.net.Uri; | ||||
| 
 | ||||
| import org.fdroid.fdroid.Assert; | ||||
| import org.fdroid.fdroid.BuildConfig; | ||||
| import org.fdroid.fdroid.data.Schema.ApkTable.Cols; | ||||
| import org.fdroid.fdroid.mock.MockApk; | ||||
| import org.fdroid.fdroid.mock.MockApp; | ||||
| import org.fdroid.fdroid.mock.MockRepo; | ||||
| @ -32,7 +33,7 @@ import static org.junit.Assert.fail; | ||||
| @RunWith(RobolectricGradleTestRunner.class) | ||||
| public class ApkProviderTest extends FDroidProviderTest { | ||||
| 
 | ||||
|     private static final String[] PROJ = ApkProvider.DataColumns.ALL; | ||||
|     private static final String[] PROJ = Cols.ALL; | ||||
| 
 | ||||
|     @Test | ||||
|     public void testAppApks() { | ||||
| @ -89,7 +90,7 @@ public class ApkProviderTest extends FDroidProviderTest { | ||||
|             "com.example.five", | ||||
|         }; | ||||
| 
 | ||||
|         List<Apk> all = ApkProvider.Helper.findByRepo(context, new MockRepo(10), ApkProvider.DataColumns.ALL); | ||||
|         List<Apk> all = ApkProvider.Helper.findByRepo(context, new MockRepo(10), Cols.ALL); | ||||
|         List<String> actualIds = new ArrayList<>(); | ||||
|         for (Apk apk : all) { | ||||
|             actualIds.add(apk.packageName); | ||||
| @ -105,7 +106,7 @@ public class ApkProviderTest extends FDroidProviderTest { | ||||
| 
 | ||||
|         assertTotalApkCount(2); | ||||
| 
 | ||||
|         List<Apk> allRemaining = ApkProvider.Helper.findByRepo(context, new MockRepo(10), ApkProvider.DataColumns.ALL); | ||||
|         List<Apk> allRemaining = ApkProvider.Helper.findByRepo(context, new MockRepo(10), Cols.ALL); | ||||
|         List<String> actualRemainingIds = new ArrayList<>(); | ||||
|         for (Apk apk : allRemaining) { | ||||
|             actualRemainingIds.add(apk.packageName); | ||||
| @ -211,7 +212,7 @@ public class ApkProviderTest extends FDroidProviderTest { | ||||
| 
 | ||||
|     @Test | ||||
|     public void testCount() { | ||||
|         String[] projectionCount = new String[] {ApkProvider.DataColumns._COUNT}; | ||||
|         String[] projectionCount = new String[] {Cols._COUNT}; | ||||
| 
 | ||||
|         for (int i = 0; i < 13; i++) { | ||||
|             Assert.insertApk(contentResolver, "com.example", i); | ||||
| @ -226,7 +227,7 @@ public class ApkProviderTest extends FDroidProviderTest { | ||||
|         assertResultCount(1, allWithCount); | ||||
| 
 | ||||
|         allWithCount.moveToFirst(); | ||||
|         int countColumn = allWithCount.getColumnIndex(ApkProvider.DataColumns._COUNT); | ||||
|         int countColumn = allWithCount.getColumnIndex(Cols._COUNT); | ||||
|         assertEquals(13, allWithCount.getInt(countColumn)); | ||||
|         allWithCount.close(); | ||||
|     } | ||||
| @ -268,15 +269,15 @@ public class ApkProviderTest extends FDroidProviderTest { | ||||
|         assertResultCount(0, queryAllApks()); | ||||
| 
 | ||||
|         ContentValues values = new ContentValues(); | ||||
|         values.put(ApkProvider.DataColumns.REPO_ID, 10); | ||||
|         values.put(ApkProvider.DataColumns.REPO_ADDRESS, "http://example.com"); | ||||
|         values.put(ApkProvider.DataColumns.REPO_VERSION, 3); | ||||
|         values.put(ApkProvider.DataColumns.FEATURES, "Some features"); | ||||
|         values.put(Cols.REPO_ID, 10); | ||||
|         values.put(Cols.REPO_ADDRESS, "http://example.com"); | ||||
|         values.put(Cols.REPO_VERSION, 3); | ||||
|         values.put(Cols.FEATURES, "Some features"); | ||||
|         Uri uri = Assert.insertApk(contentResolver, "com.example.com", 1, values); | ||||
| 
 | ||||
|         assertResultCount(1, queryAllApks()); | ||||
| 
 | ||||
|         String[] projections = ApkProvider.DataColumns.ALL; | ||||
|         String[] projections = Cols.ALL; | ||||
|         Cursor cursor = contentResolver.query(uri, projections, null, null, null); | ||||
|         cursor.moveToFirst(); | ||||
|         Apk apk = new Apk(cursor); | ||||
| @ -340,8 +341,8 @@ public class ApkProviderTest extends FDroidProviderTest { | ||||
|         Collections.addAll(apksToCheck, unknown); | ||||
| 
 | ||||
|         String[] projection = { | ||||
|             ApkProvider.DataColumns.PACKAGE_NAME, | ||||
|             ApkProvider.DataColumns.VERSION_CODE, | ||||
|             Cols.PACKAGE_NAME, | ||||
|             Cols.VERSION_CODE, | ||||
|         }; | ||||
| 
 | ||||
|         List<Apk> knownApks = ApkProvider.Helper.knownApks(context, apksToCheck, projection); | ||||
| @ -394,7 +395,7 @@ public class ApkProviderTest extends FDroidProviderTest { | ||||
| 
 | ||||
|         Uri apkUri = Assert.insertApk(contentResolver, "com.example", 10); | ||||
| 
 | ||||
|         String[] allFields = ApkProvider.DataColumns.ALL; | ||||
|         String[] allFields = Cols.ALL; | ||||
|         Cursor cursor = contentResolver.query(apkUri, allFields, null, null, null); | ||||
|         assertResultCount(1, cursor); | ||||
| 
 | ||||
| @ -455,9 +456,9 @@ public class ApkProviderTest extends FDroidProviderTest { | ||||
|         } | ||||
| 
 | ||||
|         ContentValues values = new ContentValues(); | ||||
|         values.put(ApkProvider.DataColumns.VERSION_NAME, "v1.1"); | ||||
|         values.put(ApkProvider.DataColumns.HASH, "xxxxyyyy"); | ||||
|         values.put(ApkProvider.DataColumns.HASH_TYPE, "a hash type"); | ||||
|         values.put(Cols.VERSION_NAME, "v1.1"); | ||||
|         values.put(Cols.HASH, "xxxxyyyy"); | ||||
|         values.put(Cols.HASH_TYPE, "a hash type"); | ||||
|         Assert.insertApk(contentResolver, "com.example", 11, values); | ||||
| 
 | ||||
|         // ...and a few more for good measure... | ||||
| @ -478,8 +479,8 @@ public class ApkProviderTest extends FDroidProviderTest { | ||||
|         assertEquals("a hash type", apk.hashType); | ||||
| 
 | ||||
|         String[] projection = { | ||||
|             ApkProvider.DataColumns.PACKAGE_NAME, | ||||
|             ApkProvider.DataColumns.HASH, | ||||
|             Cols.PACKAGE_NAME, | ||||
|             Cols.HASH, | ||||
|         }; | ||||
| 
 | ||||
|         Apk apkLessFields = ApkProvider.Helper.find(context, "com.example", 11, projection); | ||||
| @ -537,7 +538,7 @@ public class ApkProviderTest extends FDroidProviderTest { | ||||
| 
 | ||||
|     protected Apk insertApkForRepo(String id, int versionCode, long repoId) { | ||||
|         ContentValues additionalValues = new ContentValues(); | ||||
|         additionalValues.put(ApkProvider.DataColumns.REPO_ID, repoId); | ||||
|         additionalValues.put(Cols.REPO_ID, repoId); | ||||
|         Uri uri = Assert.insertApk(contentResolver, id, versionCode, additionalValues); | ||||
|         return ApkProvider.Helper.get(context, uri); | ||||
|     } | ||||
|  | ||||
| @ -110,7 +110,7 @@ public class ProviderUriTests { | ||||
|     @Test | ||||
|     public void validApkProviderUris() { | ||||
|         ShadowContentResolver.registerProvider(ApkProvider.getAuthority(), new ApkProvider()); | ||||
|         String[] projection = new String[] {ApkProvider.DataColumns._ID}; | ||||
|         String[] projection = new String[] {Schema.ApkTable.Cols._ID}; | ||||
| 
 | ||||
|         List<Apk> apks = new ArrayList<>(10); | ||||
|         for (int i = 0; i < 10; i++) { | ||||
| @ -127,7 +127,7 @@ public class ProviderUriTests { | ||||
| 
 | ||||
|     @Test(expected = IllegalArgumentException.class) | ||||
|     public void invalidApkUrisWithTooManyApks() { | ||||
|         String[] projection = ApkProvider.DataColumns.ALL; | ||||
|         String[] projection = Schema.ApkTable.Cols.ALL; | ||||
| 
 | ||||
|         List<Apk> manyApks = new ArrayList<>(ApkProvider.MAX_APKS_TO_QUERY - 5); | ||||
|         for (int i = 0; i < ApkProvider.MAX_APKS_TO_QUERY - 1; i++) { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Peter Serwylo
						Peter Serwylo