Disable incompatible APKs
This commit is contained in:
parent
08816e4bc8
commit
111a57fc47
@ -70,8 +70,10 @@ public class AppDetails extends ListActivity {
|
|||||||
private class ApkListAdapter extends BaseAdapter {
|
private class ApkListAdapter extends BaseAdapter {
|
||||||
|
|
||||||
private List<DB.Apk> items = new ArrayList<DB.Apk>();
|
private List<DB.Apk> items = new ArrayList<DB.Apk>();
|
||||||
|
private DB.Apk.CompatibilityChecker compatChecker;
|
||||||
|
|
||||||
public ApkListAdapter(Context context) {
|
public ApkListAdapter(Context context) {
|
||||||
|
compatChecker = DB.Apk.CompatibilityChecker.getChecker(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addItem(DB.Apk apk) {
|
public void addItem(DB.Apk apk) {
|
||||||
@ -122,6 +124,12 @@ public class AppDetails extends ListActivity {
|
|||||||
} else {
|
} else {
|
||||||
buildtype.setText("bin");
|
buildtype.setText("bin");
|
||||||
}
|
}
|
||||||
|
if (!compatChecker.isCompatible(apk)) {
|
||||||
|
View[] views = { v, version, status, size, buildtype };
|
||||||
|
for (View view : views) {
|
||||||
|
view.setEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ import android.content.pm.PackageManager;
|
|||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
import android.database.sqlite.SQLiteOpenHelper;
|
import android.database.sqlite.SQLiteOpenHelper;
|
||||||
|
import android.os.Build;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
@ -184,6 +185,45 @@ public class DB {
|
|||||||
String path = apkName.replace(" ", "%20");
|
String path = apkName.replace(" ", "%20");
|
||||||
return server + "/" + path;
|
return server + "/" + path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Call isCompatible(apk) on an instance of this class to
|
||||||
|
// check if an APK is compatible with the user's device.
|
||||||
|
public static abstract class CompatibilityChecker {
|
||||||
|
// Because Build.VERSION.SDK_INT requires API level 5
|
||||||
|
protected final static int SDK_INT
|
||||||
|
= Integer.parseInt(Build.VERSION.SDK);
|
||||||
|
public static CompatibilityChecker getChecker(Context ctx) {
|
||||||
|
CompatibilityChecker checker;
|
||||||
|
if (SDK_INT >= 5)
|
||||||
|
checker = new EclairChecker(ctx);
|
||||||
|
else
|
||||||
|
checker = new BasicChecker();
|
||||||
|
Log.d("FDroid", "Compatibility checker for API level "
|
||||||
|
+ SDK_INT + ": " + checker.getClass().getName());
|
||||||
|
return checker;
|
||||||
|
}
|
||||||
|
public abstract boolean isCompatible(Apk apk);
|
||||||
|
}
|
||||||
|
private static class BasicChecker extends CompatibilityChecker {
|
||||||
|
public boolean isCompatible(Apk apk) {
|
||||||
|
return (apk.minSdkVersion <= SDK_INT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private static class EclairChecker extends CompatibilityChecker {
|
||||||
|
private PackageManager pm;
|
||||||
|
public EclairChecker(Context ctx) {
|
||||||
|
pm = ctx.getPackageManager();
|
||||||
|
}
|
||||||
|
public boolean isCompatible(Apk apk) {
|
||||||
|
if (apk.minSdkVersion > SDK_INT)
|
||||||
|
return false;
|
||||||
|
for (String feat : apk.features) {
|
||||||
|
if (!pm.hasSystemFeature(feat))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The TABLE_REPO table stores the details of the repositories in use.
|
// The TABLE_REPO table stores the details of the repositories in use.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user