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