Merge branch 'blank-versionName' into 'master'
handle Blank versionName Closes #1418 See merge request fdroid/fdroidclient!673
This commit is contained in:
		
						commit
						59ec2a7751
					
				@ -641,7 +641,13 @@ public class AppDetails2 extends AppCompatActivity
 | 
				
			|||||||
                        Log.e(TAG, "uninstall aborted with errorMessage: " + errorMessage);
 | 
					                        Log.e(TAG, "uninstall aborted with errorMessage: " + errorMessage);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        AlertDialog.Builder alertBuilder = new AlertDialog.Builder(AppDetails2.this);
 | 
					                        AlertDialog.Builder alertBuilder = new AlertDialog.Builder(AppDetails2.this);
 | 
				
			||||||
                        alertBuilder.setTitle(R.string.uninstall_error_notify_title);
 | 
					                        Uri uri = intent.getData();
 | 
				
			||||||
 | 
					                        if (uri == null) {
 | 
				
			||||||
 | 
					                            alertBuilder.setTitle(getString(R.string.uninstall_error_notify_title, ""));
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            alertBuilder.setTitle(getString(R.string.uninstall_error_notify_title,
 | 
				
			||||||
 | 
					                                    uri.getSchemeSpecificPart()));
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                        alertBuilder.setMessage(errorMessage);
 | 
					                        alertBuilder.setMessage(errorMessage);
 | 
				
			||||||
                        alertBuilder.setNeutralButton(android.R.string.ok, null);
 | 
					                        alertBuilder.setNeutralButton(android.R.string.ok, null);
 | 
				
			||||||
                        alertBuilder.create().show();
 | 
					                        alertBuilder.create().show();
 | 
				
			||||||
 | 
				
			|||||||
@ -10,6 +10,7 @@ import android.os.Environment;
 | 
				
			|||||||
import android.os.Parcel;
 | 
					import android.os.Parcel;
 | 
				
			||||||
import android.os.Parcelable;
 | 
					import android.os.Parcelable;
 | 
				
			||||||
import android.support.annotation.NonNull;
 | 
					import android.support.annotation.NonNull;
 | 
				
			||||||
 | 
					import android.support.annotation.Nullable;
 | 
				
			||||||
import android.text.TextUtils;
 | 
					import android.text.TextUtils;
 | 
				
			||||||
import android.webkit.MimeTypeMap;
 | 
					import android.webkit.MimeTypeMap;
 | 
				
			||||||
import com.fasterxml.jackson.annotation.JacksonInject;
 | 
					import com.fasterxml.jackson.annotation.JacksonInject;
 | 
				
			||||||
@ -65,6 +66,7 @@ public class Apk extends ValueObject implements Comparable<Apk>, Parcelable {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // these come directly from the index metadata
 | 
					    // these come directly from the index metadata
 | 
				
			||||||
    public String packageName;
 | 
					    public String packageName;
 | 
				
			||||||
 | 
					    @Nullable
 | 
				
			||||||
    public String versionName;
 | 
					    public String versionName;
 | 
				
			||||||
    public int versionCode;
 | 
					    public int versionCode;
 | 
				
			||||||
    public int size; // Size in bytes - 0 means we don't know!
 | 
					    public int size; // Size in bytes - 0 means we don't know!
 | 
				
			||||||
 | 
				
			|||||||
@ -95,7 +95,7 @@ public class DBHelper extends SQLiteOpenHelper {
 | 
				
			|||||||
    static final String CREATE_TABLE_APK =
 | 
					    static final String CREATE_TABLE_APK =
 | 
				
			||||||
            "CREATE TABLE " + ApkTable.NAME + " ( "
 | 
					            "CREATE TABLE " + ApkTable.NAME + " ( "
 | 
				
			||||||
                    + ApkTable.Cols.APP_ID + " integer not null, "
 | 
					                    + ApkTable.Cols.APP_ID + " integer not null, "
 | 
				
			||||||
                    + ApkTable.Cols.VERSION_NAME + " text not null, "
 | 
					                    + ApkTable.Cols.VERSION_NAME + " text, "
 | 
				
			||||||
                    + ApkTable.Cols.REPO_ID + " integer not null, "
 | 
					                    + ApkTable.Cols.REPO_ID + " integer not null, "
 | 
				
			||||||
                    + ApkTable.Cols.HASH + " text not null, "
 | 
					                    + ApkTable.Cols.HASH + " text not null, "
 | 
				
			||||||
                    + ApkTable.Cols.VERSION_CODE + " int not null,"
 | 
					                    + ApkTable.Cols.VERSION_CODE + " int not null,"
 | 
				
			||||||
@ -215,7 +215,7 @@ public class DBHelper extends SQLiteOpenHelper {
 | 
				
			|||||||
            + "primary key(" + ApkAntiFeatureJoinTable.Cols.APK_ID + ", " + ApkAntiFeatureJoinTable.Cols.ANTI_FEATURE_ID + ") "
 | 
					            + "primary key(" + ApkAntiFeatureJoinTable.Cols.APK_ID + ", " + ApkAntiFeatureJoinTable.Cols.ANTI_FEATURE_ID + ") "
 | 
				
			||||||
            + " );";
 | 
					            + " );";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected static final int DB_VERSION = 78;
 | 
					    protected static final int DB_VERSION = 79;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final Context context;
 | 
					    private final Context context;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -323,6 +323,16 @@ public class DBHelper extends SQLiteOpenHelper {
 | 
				
			|||||||
        addIgnoreVulnPref(db, oldVersion);
 | 
					        addIgnoreVulnPref(db, oldVersion);
 | 
				
			||||||
        addLiberapayID(db, oldVersion);
 | 
					        addLiberapayID(db, oldVersion);
 | 
				
			||||||
        addUserMirrorsFields(db, oldVersion);
 | 
					        addUserMirrorsFields(db, oldVersion);
 | 
				
			||||||
 | 
					        removeNotNullFromVersionName(db, oldVersion);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void removeNotNullFromVersionName(SQLiteDatabase db, int oldVersion) {
 | 
				
			||||||
 | 
					        if (oldVersion >= 79) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Log.i(TAG, "Forcing repo refresh to remove NOT NULL from " + ApkTable.Cols.VERSION_NAME);
 | 
				
			||||||
 | 
					        resetTransient(db);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void addUserMirrorsFields(SQLiteDatabase db, int oldVersion) {
 | 
					    private void addUserMirrorsFields(SQLiteDatabase db, int oldVersion) {
 | 
				
			||||||
 | 
				
			|||||||
@ -10,6 +10,7 @@ import android.content.pm.Signature;
 | 
				
			|||||||
import android.net.Uri;
 | 
					import android.net.Uri;
 | 
				
			||||||
import android.os.Process;
 | 
					import android.os.Process;
 | 
				
			||||||
import android.support.annotation.Nullable;
 | 
					import android.support.annotation.Nullable;
 | 
				
			||||||
 | 
					import android.util.Log;
 | 
				
			||||||
import org.acra.ACRA;
 | 
					import org.acra.ACRA;
 | 
				
			||||||
import org.fdroid.fdroid.AppUpdateStatusManager;
 | 
					import org.fdroid.fdroid.AppUpdateStatusManager;
 | 
				
			||||||
import org.fdroid.fdroid.Hasher;
 | 
					import org.fdroid.fdroid.Hasher;
 | 
				
			||||||
@ -290,6 +291,7 @@ public class InstalledAppProviderService extends IntentService {
 | 
				
			|||||||
     *             into the database when under test.
 | 
					     *             into the database when under test.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    static void insertAppIntoDb(Context context, PackageInfo packageInfo, String hashType, String hash) {
 | 
					    static void insertAppIntoDb(Context context, PackageInfo packageInfo, String hashType, String hash) {
 | 
				
			||||||
 | 
					        Log.d(TAG, "insertAppIntoDb " + packageInfo.packageName);
 | 
				
			||||||
        Uri uri = InstalledAppProvider.getContentUri();
 | 
					        Uri uri = InstalledAppProvider.getContentUri();
 | 
				
			||||||
        ContentValues contentValues = new ContentValues();
 | 
					        ContentValues contentValues = new ContentValues();
 | 
				
			||||||
        contentValues.put(InstalledAppTable.Cols.Package.NAME, packageInfo.packageName);
 | 
					        contentValues.put(InstalledAppTable.Cols.Package.NAME, packageInfo.packageName);
 | 
				
			||||||
@ -307,6 +309,7 @@ public class InstalledAppProviderService extends IntentService {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static void deleteAppFromDb(Context context, String packageName) {
 | 
					    static void deleteAppFromDb(Context context, String packageName) {
 | 
				
			||||||
 | 
					        Log.d(TAG, "deleteAppFromDb " + packageName);
 | 
				
			||||||
        Uri uri = InstalledAppProvider.getAppUri(packageName);
 | 
					        Uri uri = InstalledAppProvider.getAppUri(packageName);
 | 
				
			||||||
        context.getContentResolver().delete(uri, null, null);
 | 
					        context.getContentResolver().delete(uri, null, null);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -357,9 +357,12 @@ public final class LocalRepoManager {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        /**
 | 
					        /**
 | 
				
			||||||
         * Helper function to start a tag called "name", fill it with text "text", and then
 | 
					         * Helper function to start a tag called "name", fill it with text "text", and then
 | 
				
			||||||
         * end the tag in a more concise manner.
 | 
					         * end the tag in a more concise manner.  If "text" is blank, skip the tag entirely.
 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
        private void tag(String name, String text) throws IOException {
 | 
					        private void tag(String name, String text) throws IOException {
 | 
				
			||||||
 | 
					            if (TextUtils.isEmpty(text)) {
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            serializer.startTag("", name).text(text).endTag("", name);
 | 
					            serializer.startTag("", name).text(text).endTag("", name);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -4,8 +4,7 @@ import android.content.BroadcastReceiver;
 | 
				
			|||||||
import android.content.Context;
 | 
					import android.content.Context;
 | 
				
			||||||
import android.content.Intent;
 | 
					import android.content.Intent;
 | 
				
			||||||
import android.text.TextUtils;
 | 
					import android.text.TextUtils;
 | 
				
			||||||
 | 
					import android.util.Log;
 | 
				
			||||||
import org.fdroid.fdroid.Utils;
 | 
					 | 
				
			||||||
import org.fdroid.fdroid.data.InstalledAppProviderService;
 | 
					import org.fdroid.fdroid.data.InstalledAppProviderService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@ -28,12 +27,12 @@ public class PackageManagerReceiver extends BroadcastReceiver {
 | 
				
			|||||||
                InstalledAppProviderService.insert(context, intent.getData());
 | 
					                InstalledAppProviderService.insert(context, intent.getData());
 | 
				
			||||||
            } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) {
 | 
					            } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) {
 | 
				
			||||||
                if (TextUtils.equals(context.getPackageName(), intent.getData().getSchemeSpecificPart())) {
 | 
					                if (TextUtils.equals(context.getPackageName(), intent.getData().getSchemeSpecificPart())) {
 | 
				
			||||||
                    Utils.debugLog(TAG, "Ignoring request to remove ourselves from cache.");
 | 
					                    Log.i(TAG, "Ignoring request to remove ourselves from cache.");
 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    InstalledAppProviderService.delete(context, intent.getData());
 | 
					                    InstalledAppProviderService.delete(context, intent.getData());
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                Utils.debugLog(TAG, "unsupported action: " + action + " " + intent);
 | 
					                Log.i(TAG, "unsupported action: " + action + " " + intent);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -50,6 +50,7 @@ import static org.hamcrest.core.IsNot.not;
 | 
				
			|||||||
import static org.junit.Assert.assertArrayEquals;
 | 
					import static org.junit.Assert.assertArrayEquals;
 | 
				
			||||||
import static org.junit.Assert.assertEquals;
 | 
					import static org.junit.Assert.assertEquals;
 | 
				
			||||||
import static org.junit.Assert.assertNotEquals;
 | 
					import static org.junit.Assert.assertNotEquals;
 | 
				
			||||||
 | 
					import static org.junit.Assert.assertNull;
 | 
				
			||||||
import static org.junit.Assert.assertThat;
 | 
					import static org.junit.Assert.assertThat;
 | 
				
			||||||
import static org.junit.Assert.assertTrue;
 | 
					import static org.junit.Assert.assertTrue;
 | 
				
			||||||
import static org.junit.Assert.fail;
 | 
					import static org.junit.Assert.fail;
 | 
				
			||||||
@ -419,6 +420,8 @@ public class IndexV1UpdaterTest extends FDroidProviderTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        assertEquals(1, apps.length);
 | 
					        assertEquals(1, apps.length);
 | 
				
			||||||
        assertEquals(1, packages.size());
 | 
					        assertEquals(1, packages.size());
 | 
				
			||||||
 | 
					        List<Apk> cacerts =  packages.get("info.guardianproject.cacert");
 | 
				
			||||||
 | 
					        assertEquals(2, cacerts.size());
 | 
				
			||||||
        assertEquals(1488828510109L, repo.timestamp);
 | 
					        assertEquals(1488828510109L, repo.timestamp);
 | 
				
			||||||
        assertEquals("GPLv3", apps[0].license);
 | 
					        assertEquals("GPLv3", apps[0].license);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -427,12 +430,16 @@ public class IndexV1UpdaterTest extends FDroidProviderTest {
 | 
				
			|||||||
            assertNotEquals("secret", field);
 | 
					            assertNotEquals("secret", field);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Apk apk = packages.get("info.guardianproject.cacert").get(0);
 | 
					        Apk apk = cacerts.get(0);
 | 
				
			||||||
        assertEquals("e013db095e8da843fae5ac44be6152e51377ee717e5c8a7b6d913d7720566b5a", apk.hash);
 | 
					        assertEquals("e013db095e8da843fae5ac44be6152e51377ee717e5c8a7b6d913d7720566b5a", apk.hash);
 | 
				
			||||||
        Set<String> packageFields = getFields(apk);
 | 
					        Set<String> packageFields = getFields(apk);
 | 
				
			||||||
        for (String field : packageFields) {
 | 
					        for (String field : packageFields) {
 | 
				
			||||||
            assertNotEquals("secret", field);
 | 
					            assertNotEquals("secret", field);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        apk = cacerts.get(1);
 | 
				
			||||||
 | 
					        assertEquals("2353d1235e8da843fae5ac44be6152e513123e717e5c8a7b6d913d7720566b5a", apk.hash);
 | 
				
			||||||
 | 
					        assertNull(apk.versionName);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private Set<String> getFields(Object instance) {
 | 
					    private Set<String> getFields(Object instance) {
 | 
				
			||||||
 | 
				
			|||||||
@ -87,6 +87,56 @@
 | 
				
			|||||||
                ],
 | 
					                ],
 | 
				
			||||||
                "versionCode": 14,
 | 
					                "versionCode": 14,
 | 
				
			||||||
                "versionName": "0.1.8"
 | 
					                "versionName": "0.1.8"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                "added": 1400014500000,
 | 
				
			||||||
 | 
					                "apkName": "Courier-0.0.apk",
 | 
				
			||||||
 | 
					                "hash": "2353d1235e8da843fae5ac44be6152e513123e717e5c8a7b6d913d7720566b5a",
 | 
				
			||||||
 | 
					                "hashType": "sha256",
 | 
				
			||||||
 | 
					                "minSdkVersion": "9",
 | 
				
			||||||
 | 
					                "nativecode": [
 | 
				
			||||||
 | 
					                    "armeabi",
 | 
				
			||||||
 | 
					                    "x86"
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "packageName": "info.guardianproject.courier",
 | 
				
			||||||
 | 
					                "sig": "d70ac6a02b53ebdd1354ea7af7b9ceee",
 | 
				
			||||||
 | 
					                "size": 16536125,
 | 
				
			||||||
 | 
					                "targetSdkVersion": "15",
 | 
				
			||||||
 | 
					                "uses-permission": [
 | 
				
			||||||
 | 
					                    [
 | 
				
			||||||
 | 
					                        "android.permission.READ_EXTERNAL_STORAGE",
 | 
				
			||||||
 | 
					                        null
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    [
 | 
				
			||||||
 | 
					                        "android.permission.INTERNET",
 | 
				
			||||||
 | 
					                        null
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    [
 | 
				
			||||||
 | 
					                        "android.permission.BLUETOOTH",
 | 
				
			||||||
 | 
					                        null
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    [
 | 
				
			||||||
 | 
					                        "android.permission.BLUETOOTH_ADMIN",
 | 
				
			||||||
 | 
					                        null
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    [
 | 
				
			||||||
 | 
					                        "android.permission.VIBRATE",
 | 
				
			||||||
 | 
					                        null
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    [
 | 
				
			||||||
 | 
					                        "android.permission.ACCESS_NETWORK_STATE",
 | 
				
			||||||
 | 
					                        null
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    [
 | 
				
			||||||
 | 
					                        "android.permission.WRITE_EXTERNAL_STORAGE",
 | 
				
			||||||
 | 
					                        null
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    [
 | 
				
			||||||
 | 
					                        "android.permission.ACCESS_WIFI_STATE",
 | 
				
			||||||
 | 
					                        null
 | 
				
			||||||
 | 
					                    ]
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "versionCode": 0
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user