allow install history to be read from an ContentProvider
This allows a designated app to read the install history from F-Droid via a ContentProvider. The app is designated by the packageName defined in the string install_history_reader_packageName.
This commit is contained in:
		
							parent
							
								
									c4ff9ecc43
								
							
						
					
					
						commit
						0a1baa9e67
					
				| @ -109,6 +109,15 @@ | ||||
|                 android:name="android.support.FILE_PROVIDER_PATHS" | ||||
|                 android:resource="@xml/apk_file_provider" /> | ||||
|         </provider> | ||||
|         <provider | ||||
|             android:name="android.support.v4.content.FileProvider" | ||||
|             android:authorities="org.fdroid.fdroid.installer" | ||||
|             android:exported="false" | ||||
|             android:grantUriPermissions="true"> | ||||
|             <meta-data | ||||
|                 android:name="android.support.FILE_PROVIDER_PATHS" | ||||
|                 android:resource="@xml/install_history_file_provider" /> | ||||
|         </provider> | ||||
| 
 | ||||
|         <meta-data | ||||
|             android:name="android.app.default_searchable" | ||||
|  | ||||
| @ -303,6 +303,17 @@ public class FDroidApp extends Application { | ||||
| 
 | ||||
|         // TODO enable this based on a preference | ||||
|         InstallHistoryService.register(this); | ||||
| 
 | ||||
|         String packageName = getString(R.string.install_history_reader_packageName); | ||||
|         String unset = getString(R.string.install_history_reader_packageName_UNSET); | ||||
|         if (!TextUtils.equals(packageName, unset)) { | ||||
|             int modeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION | ||||
|                     | Intent.FLAG_GRANT_WRITE_URI_PERMISSION; | ||||
|             if (Build.VERSION.SDK_INT >= 19) { | ||||
|                 modeFlags |= Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION; | ||||
|             } | ||||
|             grantUriPermission(packageName, InstallHistoryService.LOG_URI, modeFlags); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @TargetApi(18) | ||||
|  | ||||
| @ -24,11 +24,11 @@ import android.content.BroadcastReceiver; | ||||
| import android.content.Context; | ||||
| import android.content.Intent; | ||||
| import android.content.IntentFilter; | ||||
| import android.net.Uri; | ||||
| import android.os.Process; | ||||
| import android.support.v4.content.LocalBroadcastManager; | ||||
| import android.text.TextUtils; | ||||
| 
 | ||||
| import org.fdroid.fdroid.R; | ||||
| import org.fdroid.fdroid.Utils; | ||||
| import org.fdroid.fdroid.data.Apk; | ||||
| 
 | ||||
| @ -47,6 +47,8 @@ import java.util.List; | ||||
| public class InstallHistoryService extends IntentService { | ||||
|     public static final String TAG = "InstallHistoryService"; | ||||
| 
 | ||||
|     public static final Uri LOG_URI = Uri.parse("content://org.fdroid.fdroid.installer/install_history/all"); | ||||
| 
 | ||||
|     private static BroadcastReceiver broadcastReceiver; | ||||
| 
 | ||||
|     public static void register(Context context) { | ||||
| @ -107,7 +109,9 @@ public class InstallHistoryService extends IntentService { | ||||
|         values.add(String.valueOf(versionCode)); | ||||
|         values.add(intent.getAction()); | ||||
| 
 | ||||
|         File logFile = new File(getFilesDir(), getString(R.string.install_history_log_file)); | ||||
|         File installHistoryDir = new File(getCacheDir(), "install_history"); | ||||
|         installHistoryDir.mkdir(); | ||||
|         File logFile = new File(installHistoryDir, "all"); | ||||
|         FileWriter fw = null; | ||||
|         PrintWriter out = null; | ||||
|         try { | ||||
|  | ||||
| @ -15,7 +15,10 @@ | ||||
| 
 | ||||
|     <string name="app_details_subject">%1$s on F-Droid</string> | ||||
| 
 | ||||
|     <string name="install_history_log_file">all</string> | ||||
|     <!-- The unset value is set to a string that is impossible to be a valid Java package name. This | ||||
|      prevents abuse by creating malware with the same packageName as the unset string. --> | ||||
|     <string name="install_history_reader_packageName_UNSET">1-THIS MEANS NO APP IS GRANTED ACCESS!</string> | ||||
|     <string name="install_history_reader_packageName">@string/install_history_reader_packageName_UNSET</string> | ||||
| 
 | ||||
|     <string-array name="updateIntervalValues"> | ||||
|         <item>0</item> | ||||
|  | ||||
							
								
								
									
										6
									
								
								app/src/main/res/xml/install_history_file_provider.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								app/src/main/res/xml/install_history_file_provider.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <paths> | ||||
|     <cache-path | ||||
|         name="install_history" | ||||
|         path="install_history" /> | ||||
| </paths> | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Hans-Christoph Steiner
						Hans-Christoph Steiner