Correctly check for 'suggestedApk' in app details.
Take into account the preferred/installed signature instead of just the version code.
This commit is contained in:
parent
caac895442
commit
41f85f3c9d
@ -8,7 +8,6 @@ import android.database.Cursor;
|
|||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.text.TextUtils;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.fdroid.fdroid.data.Schema.ApkTable;
|
import org.fdroid.fdroid.data.Schema.ApkTable;
|
||||||
@ -84,14 +83,7 @@ public class ApkProvider extends FDroidProvider {
|
|||||||
* </ul>
|
* </ul>
|
||||||
*/
|
*/
|
||||||
public static Apk findSuggestedApk(Context context, App app) {
|
public static Apk findSuggestedApk(Context context, App app) {
|
||||||
String preferredSignature = null;
|
return findApkFromAnyRepo(context, app.packageName, app.suggestedVersionCode, app.getMostAppropriateSignature());
|
||||||
if (!TextUtils.isEmpty(app.installedSig)) {
|
|
||||||
preferredSignature = app.installedSig;
|
|
||||||
} else if (!TextUtils.isEmpty(app.preferredSigner)) {
|
|
||||||
preferredSignature = app.preferredSigner;
|
|
||||||
}
|
|
||||||
|
|
||||||
return findApkFromAnyRepo(context, app.packageName, app.suggestedVersionCode, preferredSignature);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Apk findApkFromAnyRepo(Context context, String packageName, int versionCode) {
|
public static Apk findApkFromAnyRepo(Context context, String packageName, int versionCode) {
|
||||||
|
@ -1098,4 +1098,24 @@ public class App extends ValueObject implements Comparable<App>, Parcelable {
|
|||||||
return new App[size];
|
return new App[size];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Choose the signature which we should encourage the user to install.
|
||||||
|
* Usually, we want the {@link #preferredSigner} rather than any random signature.
|
||||||
|
* However, if the app is installed, then we override this and instead want to only encourage
|
||||||
|
* the user to try and install versions with that signature (because thats all the OS will let
|
||||||
|
* them do).
|
||||||
|
* TODO: I don't think preferredSigner should ever be null, because if an app has apks then
|
||||||
|
* we should have chosen the first and used that. If so, then we should change to @NonNull and
|
||||||
|
* throw an exception if it is null.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public String getMostAppropriateSignature() {
|
||||||
|
if (!TextUtils.isEmpty(installedSig)) {
|
||||||
|
return installedSig;
|
||||||
|
} else if (!TextUtils.isEmpty(preferredSigner)) {
|
||||||
|
return preferredSigner;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -178,9 +178,10 @@ public class AppDetailsRecyclerViewAdapter
|
|||||||
|
|
||||||
private Apk getSuggestedApk() {
|
private Apk getSuggestedApk() {
|
||||||
Apk curApk = null;
|
Apk curApk = null;
|
||||||
|
String appropriateSig = app.getMostAppropriateSignature();
|
||||||
for (int i = 0; i < versions.size(); i++) {
|
for (int i = 0; i < versions.size(); i++) {
|
||||||
final Apk apk = versions.get(i);
|
final Apk apk = versions.get(i);
|
||||||
if (apk.versionCode == app.suggestedVersionCode) {
|
if (apk.versionCode == app.suggestedVersionCode && TextUtils.equals(apk.sig, appropriateSig)) {
|
||||||
curApk = apk;
|
curApk = apk;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user