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 List<DB.Apk> items = new ArrayList<DB.Apk>(); | ||||
|         private DB.Apk.CompatibilityChecker compatChecker; | ||||
| 
 | ||||
|         public ApkListAdapter(Context context) { | ||||
|             compatChecker = DB.Apk.CompatibilityChecker.getChecker(context); | ||||
|         } | ||||
| 
 | ||||
|         public void addItem(DB.Apk apk) { | ||||
| @ -122,6 +124,12 @@ public class AppDetails extends ListActivity { | ||||
|             } else {  | ||||
|                 buildtype.setText("bin"); | ||||
|             } | ||||
|             if (!compatChecker.isCompatible(apk)) { | ||||
|                 View[] views = { v, version, status, size, buildtype }; | ||||
|                 for (View view : views) { | ||||
|                     view.setEnabled(false); | ||||
|                 } | ||||
|             } | ||||
|             return v; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -32,6 +32,7 @@ import android.content.pm.PackageManager; | ||||
| import android.database.Cursor; | ||||
| import android.database.sqlite.SQLiteDatabase; | ||||
| import android.database.sqlite.SQLiteOpenHelper; | ||||
| import android.os.Build; | ||||
| import android.preference.PreferenceManager; | ||||
| import android.util.Log; | ||||
| 
 | ||||
| @ -184,6 +185,45 @@ public class DB { | ||||
|             String path = apkName.replace(" ", "%20"); | ||||
|             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. | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Henrik Tunedal
						Henrik Tunedal