run Android Studio's Ctrl-Alt-O Organize Imports on all .java files
This commit is contained in:
		
							parent
							
								
									9d5af90c61
								
							
						
					
					
						commit
						cf94cfb543
					
				@ -4,12 +4,13 @@ import android.os.Parcel;
 | 
			
		||||
import android.os.Parcelable;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
 | 
			
		||||
import javax.jmdns.ServiceInfo;
 | 
			
		||||
import javax.jmdns.impl.util.ByteWrangler;
 | 
			
		||||
import java.net.Inet4Address;
 | 
			
		||||
import java.net.Inet6Address;
 | 
			
		||||
import java.net.UnknownHostException;
 | 
			
		||||
 | 
			
		||||
import javax.jmdns.ServiceInfo;
 | 
			
		||||
import javax.jmdns.impl.util.ByteWrangler;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The ServiceInfo class needs to be serialized in order to be sent as an Android broadcast.
 | 
			
		||||
 * In order to make it Parcelable (or Serializable for that matter), there are some package-scope
 | 
			
		||||
 | 
			
		||||
@ -10,15 +10,17 @@ import android.os.Handler;
 | 
			
		||||
import android.os.HandlerThread;
 | 
			
		||||
import android.os.Message;
 | 
			
		||||
import android.os.Process;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.nearby.peers.BluetoothPeer;
 | 
			
		||||
 | 
			
		||||
import java.lang.ref.WeakReference;
 | 
			
		||||
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Manage the {@link android.bluetooth.BluetoothAdapter}in a {@link HandlerThread}.
 | 
			
		||||
 * The start process is in {@link HandlerThread#onLooperPrepared()} so that it is
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@ import android.bluetooth.BluetoothServerSocket;
 | 
			
		||||
import android.bluetooth.BluetoothSocket;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import android.webkit.MimeTypeMap;
 | 
			
		||||
import fi.iki.elonen.NanoHTTPD;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.nearby.httpish.Request;
 | 
			
		||||
import org.fdroid.fdroid.nearby.httpish.Response;
 | 
			
		||||
@ -20,6 +20,8 @@ import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import fi.iki.elonen.NanoHTTPD;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Act as a layer on top of LocalHTTPD server, by forwarding requests served
 | 
			
		||||
 * over bluetooth to that server.
 | 
			
		||||
 | 
			
		||||
@ -10,9 +10,6 @@ import android.os.Process;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
import org.fdroid.fdroid.Preferences;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
@ -28,6 +25,9 @@ import javax.jmdns.ServiceEvent;
 | 
			
		||||
import javax.jmdns.ServiceInfo;
 | 
			
		||||
import javax.jmdns.ServiceListener;
 | 
			
		||||
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Manage {@link JmDNS} in a {@link HandlerThread}.  The start process is in
 | 
			
		||||
 * {@link HandlerThread#onLooperPrepared()} so that it is always started before
 | 
			
		||||
 | 
			
		||||
@ -35,11 +35,9 @@ package org.fdroid.fdroid.nearby;
 | 
			
		||||
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import fi.iki.elonen.NanoHTTPD;
 | 
			
		||||
import fi.iki.elonen.NanoHTTPD.Response.IStatus;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.BuildConfig;
 | 
			
		||||
 | 
			
		||||
import javax.net.ssl.SSLServerSocketFactory;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.FileInputStream;
 | 
			
		||||
import java.io.FileNotFoundException;
 | 
			
		||||
@ -62,6 +60,11 @@ import java.util.Map;
 | 
			
		||||
import java.util.StringTokenizer;
 | 
			
		||||
import java.util.TimeZone;
 | 
			
		||||
 | 
			
		||||
import javax.net.ssl.SSLServerSocketFactory;
 | 
			
		||||
 | 
			
		||||
import fi.iki.elonen.NanoHTTPD;
 | 
			
		||||
import fi.iki.elonen.NanoHTTPD.Response.IStatus;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A HTTP server for serving the files that are being swapped via WiFi, etc.
 | 
			
		||||
 * The only changes were to remove unneeded extras like {@code main()}, the
 | 
			
		||||
 | 
			
		||||
@ -6,8 +6,8 @@ import android.os.Handler;
 | 
			
		||||
import android.os.HandlerThread;
 | 
			
		||||
import android.os.Message;
 | 
			
		||||
import android.os.Process;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
import org.fdroid.fdroid.Preferences;
 | 
			
		||||
 | 
			
		||||
@ -15,6 +15,8 @@ import java.io.IOException;
 | 
			
		||||
import java.net.BindException;
 | 
			
		||||
import java.util.Random;
 | 
			
		||||
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Manage {@link LocalHTTPD} in a {@link HandlerThread};
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@ package org.fdroid.fdroid.nearby;
 | 
			
		||||
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import kellinwood.security.zipsigner.ZipSigner;
 | 
			
		||||
 | 
			
		||||
import org.bouncycastle.asn1.ASN1Sequence;
 | 
			
		||||
import org.bouncycastle.asn1.x500.X500Name;
 | 
			
		||||
import org.bouncycastle.asn1.x509.GeneralName;
 | 
			
		||||
@ -19,9 +19,6 @@ import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
 | 
			
		||||
import javax.net.ssl.KeyManager;
 | 
			
		||||
import javax.net.ssl.KeyManagerFactory;
 | 
			
		||||
import javax.net.ssl.X509KeyManager;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.FileInputStream;
 | 
			
		||||
import java.io.FileOutputStream;
 | 
			
		||||
@ -49,6 +46,12 @@ import java.util.Date;
 | 
			
		||||
import java.util.GregorianCalendar;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
 | 
			
		||||
import javax.net.ssl.KeyManager;
 | 
			
		||||
import javax.net.ssl.KeyManagerFactory;
 | 
			
		||||
import javax.net.ssl.X509KeyManager;
 | 
			
		||||
 | 
			
		||||
import kellinwood.security.zipsigner.ZipSigner;
 | 
			
		||||
 | 
			
		||||
// TODO Address exception handling in a uniform way throughout
 | 
			
		||||
 | 
			
		||||
@SuppressWarnings("LineLength")
 | 
			
		||||
 | 
			
		||||
@ -12,8 +12,7 @@ import android.graphics.drawable.BitmapDrawable;
 | 
			
		||||
import android.graphics.drawable.Drawable;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
import org.fdroid.fdroid.Hasher;
 | 
			
		||||
import org.fdroid.fdroid.IndexUpdater;
 | 
			
		||||
@ -50,6 +49,9 @@ import java.util.concurrent.ConcurrentHashMap;
 | 
			
		||||
import java.util.jar.JarEntry;
 | 
			
		||||
import java.util.jar.JarOutputStream;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The {@link SwapService} deals with managing the entire workflow from selecting apps to
 | 
			
		||||
 * swap, to invoking this class to prepare the webroot, to enabling various communication protocols.
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@ import android.app.IntentService;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.os.Process;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
@ -15,6 +15,8 @@ import java.util.Arrays;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Handles setting up and generating the local repo used to swap apps, including
 | 
			
		||||
 * the {@code index.jar}, the symlinks to the shared APKs, etc.
 | 
			
		||||
 | 
			
		||||
@ -29,7 +29,7 @@ import android.os.Build;
 | 
			
		||||
import android.os.Environment;
 | 
			
		||||
import android.os.Process;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.IndexUpdater;
 | 
			
		||||
import org.fdroid.fdroid.IndexV1Updater;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
@ -44,6 +44,8 @@ import java.util.Collections;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * An {@link IntentService} subclass for scanning removable "external storage"
 | 
			
		||||
 * for F-Droid package repos, e.g. SD Cards. This is intended to support
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,6 @@ import android.annotation.TargetApi;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.pm.PackageManager;
 | 
			
		||||
import android.database.Cursor;
 | 
			
		||||
import android.graphics.PorterDuff;
 | 
			
		||||
import android.graphics.drawable.Drawable;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
@ -21,6 +20,10 @@ import android.widget.ImageView;
 | 
			
		||||
import android.widget.ListView;
 | 
			
		||||
import android.widget.TextView;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.data.InstalledAppProvider;
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.InstalledAppTable;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
@ -29,10 +32,6 @@ import androidx.loader.app.LoaderManager;
 | 
			
		||||
import androidx.loader.content.CursorLoader;
 | 
			
		||||
import androidx.loader.content.Loader;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.data.InstalledAppProvider;
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.InstalledAppTable;
 | 
			
		||||
 | 
			
		||||
public class SelectAppsView extends SwapView implements LoaderManager.LoaderCallbacks<Cursor> {
 | 
			
		||||
 | 
			
		||||
    public SelectAppsView(Context context) {
 | 
			
		||||
 | 
			
		||||
@ -20,11 +20,6 @@ import android.widget.ListView;
 | 
			
		||||
import android.widget.ProgressBar;
 | 
			
		||||
import android.widget.TextView;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.appcompat.widget.SwitchCompat;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
@ -32,6 +27,10 @@ import org.fdroid.fdroid.nearby.peers.Peer;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.appcompat.widget.SwitchCompat;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
import cc.mvdan.accesspoint.WifiApControl;
 | 
			
		||||
 | 
			
		||||
@SuppressWarnings("LineLength")
 | 
			
		||||
 | 
			
		||||
@ -17,13 +17,7 @@ import android.os.AsyncTask;
 | 
			
		||||
import android.os.IBinder;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.core.app.NotificationCompat;
 | 
			
		||||
import androidx.core.app.ServiceCompat;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
import cc.mvdan.accesspoint.WifiApControl;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
import org.fdroid.fdroid.NotificationHelper;
 | 
			
		||||
import org.fdroid.fdroid.Preferences;
 | 
			
		||||
@ -47,6 +41,14 @@ import java.util.Set;
 | 
			
		||||
import java.util.Timer;
 | 
			
		||||
import java.util.TimerTask;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.core.app.NotificationCompat;
 | 
			
		||||
import androidx.core.app.ServiceCompat;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
import cc.mvdan.accesspoint.WifiApControl;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Central service which manages all of the different moving parts of swap which are required
 | 
			
		||||
 * to enable p2p swapping of apps.
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,6 @@
 | 
			
		||||
package org.fdroid.fdroid.nearby;
 | 
			
		||||
 | 
			
		||||
import android.annotation.TargetApi;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import android.app.PendingIntent;
 | 
			
		||||
import android.content.BroadcastReceiver;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
@ -12,14 +11,6 @@ import android.database.Cursor;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import android.os.Handler;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.loader.app.LoaderManager;
 | 
			
		||||
import androidx.loader.content.CursorLoader;
 | 
			
		||||
import androidx.loader.content.Loader;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
import androidx.cursoradapter.widget.CursorAdapter;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.AttributeSet;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
@ -32,7 +23,9 @@ import android.widget.ListView;
 | 
			
		||||
import android.widget.ProgressBar;
 | 
			
		||||
import android.widget.TextView;
 | 
			
		||||
import android.widget.Toast;
 | 
			
		||||
 | 
			
		||||
import com.nostra13.universalimageloader.core.ImageLoader;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.UpdateService;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
@ -49,6 +42,16 @@ import org.fdroid.fdroid.net.DownloaderService;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.cursoradapter.widget.CursorAdapter;
 | 
			
		||||
import androidx.loader.app.LoaderManager;
 | 
			
		||||
import androidx.loader.content.CursorLoader;
 | 
			
		||||
import androidx.loader.content.Loader;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This is a view that shows a listing of all apps in the swap repo that this
 | 
			
		||||
 * just connected to.  The app listing and search should be replaced by
 | 
			
		||||
 | 
			
		||||
@ -6,12 +6,12 @@ import android.content.res.TypedArray;
 | 
			
		||||
import android.util.AttributeSet;
 | 
			
		||||
import android.widget.RelativeLayout;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.ColorInt;
 | 
			
		||||
import androidx.annotation.LayoutRes;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A {@link android.view.View} that registers to handle the swap events from
 | 
			
		||||
 * {@link SwapService}.
 | 
			
		||||
 | 
			
		||||
@ -34,17 +34,6 @@ import android.widget.ProgressBar;
 | 
			
		||||
import android.widget.TextView;
 | 
			
		||||
import android.widget.Toast;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.LayoutRes;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.annotation.StringRes;
 | 
			
		||||
import androidx.appcompat.app.AlertDialog;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.appcompat.widget.SearchView;
 | 
			
		||||
import androidx.appcompat.widget.SwitchCompat;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
import com.google.android.material.appbar.MaterialToolbar;
 | 
			
		||||
import com.google.zxing.integration.android.IntentIntegrator;
 | 
			
		||||
import com.google.zxing.integration.android.IntentResult;
 | 
			
		||||
@ -76,6 +65,16 @@ import java.util.Set;
 | 
			
		||||
import java.util.Timer;
 | 
			
		||||
import java.util.TimerTask;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.LayoutRes;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.annotation.StringRes;
 | 
			
		||||
import androidx.appcompat.app.AlertDialog;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.appcompat.widget.SearchView;
 | 
			
		||||
import androidx.appcompat.widget.SwitchCompat;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
import cc.mvdan.accesspoint.WifiApControl;
 | 
			
		||||
 | 
			
		||||
import static org.fdroid.fdroid.views.main.MainActivity.ACTION_REQUEST_SWAP;
 | 
			
		||||
 | 
			
		||||
@ -29,7 +29,7 @@ import android.os.Build;
 | 
			
		||||
import android.os.Process;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import android.widget.Toast;
 | 
			
		||||
import androidx.documentfile.provider.DocumentFile;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.io.FileUtils;
 | 
			
		||||
import org.apache.commons.io.IOUtils;
 | 
			
		||||
import org.fdroid.fdroid.AddRepoIntentService;
 | 
			
		||||
@ -49,6 +49,8 @@ import java.util.jar.JarEntry;
 | 
			
		||||
import java.util.jar.JarFile;
 | 
			
		||||
import java.util.jar.JarInputStream;
 | 
			
		||||
 | 
			
		||||
import androidx.documentfile.provider.DocumentFile;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * An {@link IntentService} subclass for handling asynchronous scanning of a
 | 
			
		||||
 * removable storage device like an SD Card or USB OTG thumb drive using the
 | 
			
		||||
 | 
			
		||||
@ -8,13 +8,13 @@ import android.os.Build;
 | 
			
		||||
import android.os.storage.StorageManager;
 | 
			
		||||
import android.provider.DocumentsContract;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.lang.reflect.Array;
 | 
			
		||||
import java.lang.reflect.Method;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @see <a href="https://stackoverflow.com/a/36162691">Android 5.0 DocumentFile from tree URI</a>
 | 
			
		||||
 | 
			
		||||
@ -31,9 +31,11 @@ import android.os.Build;
 | 
			
		||||
import android.os.Handler;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import androidx.annotation.RequiresApi;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.views.main.NearbyViewBinder;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.RequiresApi;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This is just a shim to receive {@link UsbManager#ACTION_USB_ACCESSORY_ATTACHED}
 | 
			
		||||
 | 
			
		||||
@ -29,11 +29,13 @@ import android.net.Uri;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import androidx.annotation.RequiresApi;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.views.main.NearbyViewBinder;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.RequiresApi;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This is just a shim to receive {@link UsbManager#ACTION_USB_DEVICE_DETACHED}
 | 
			
		||||
 * events.
 | 
			
		||||
 | 
			
		||||
@ -4,6 +4,7 @@ import android.content.BroadcastReceiver;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.os.Environment;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.views.main.NearbyViewBinder;
 | 
			
		||||
 | 
			
		||||
public class UsbDeviceMediaMountedReceiver extends BroadcastReceiver {
 | 
			
		||||
 | 
			
		||||
@ -4,6 +4,7 @@ import android.content.BroadcastReceiver;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.net.wifi.WifiManager;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
 | 
			
		||||
public class WifiStateChangeReceiver extends BroadcastReceiver {
 | 
			
		||||
 | 
			
		||||
@ -10,12 +10,9 @@ import android.net.wifi.WifiConfiguration;
 | 
			
		||||
import android.net.wifi.WifiInfo;
 | 
			
		||||
import android.net.wifi.WifiManager;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import cc.mvdan.accesspoint.WifiApControl;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.net.util.SubnetUtils;
 | 
			
		||||
import org.fdroid.fdroid.BuildConfig;
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
@ -34,6 +31,11 @@ import java.security.cert.Certificate;
 | 
			
		||||
import java.util.Enumeration;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
import cc.mvdan.accesspoint.WifiApControl;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Handle state changes to the device's wifi, storing the required bits.
 | 
			
		||||
 * The {@link Intent} that starts it either has no extras included,
 | 
			
		||||
 | 
			
		||||
@ -5,10 +5,10 @@ import android.bluetooth.BluetoothDevice;
 | 
			
		||||
import android.os.Parcel;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
public class BluetoothPeer implements Peer {
 | 
			
		||||
 | 
			
		||||
    private static final String BLUETOOTH_NAME_TAG = "FDroid:";
 | 
			
		||||
 | 
			
		||||
@ -2,13 +2,15 @@ package org.fdroid.fdroid.nearby.peers;
 | 
			
		||||
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.os.Parcel;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
 | 
			
		||||
import javax.jmdns.ServiceInfo;
 | 
			
		||||
import javax.jmdns.impl.FDroidServiceInfo;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
public class BonjourPeer extends WifiPeer {
 | 
			
		||||
    private static final String TAG = "BonjourPeer";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,7 @@
 | 
			
		||||
package org.fdroid.fdroid.nearby.peers;
 | 
			
		||||
 | 
			
		||||
import android.os.Parcelable;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.DrawableRes;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,6 @@
 | 
			
		||||
package org.fdroid.fdroid.panic;
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import android.view.View;
 | 
			
		||||
import android.widget.Button;
 | 
			
		||||
import android.widget.TextView;
 | 
			
		||||
@ -15,6 +13,9 @@ import org.fdroid.fdroid.R;
 | 
			
		||||
 | 
			
		||||
import java.util.regex.Pattern;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A very hacky calculator which is barely functional.
 | 
			
		||||
 * It is just meant to pass a very casual inspection.
 | 
			
		||||
 | 
			
		||||
@ -3,13 +3,13 @@ package org.fdroid.fdroid.panic;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.util.AttributeSet;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.preference.CheckBoxPreference;
 | 
			
		||||
import androidx.preference.PreferenceViewHolder;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
 | 
			
		||||
public class DestructiveCheckBoxPreference extends CheckBoxPreference {
 | 
			
		||||
    public DestructiveCheckBoxPreference(Context context, AttributeSet attrs, int defStyleAttr) {
 | 
			
		||||
        super(context, attrs, defStyleAttr);
 | 
			
		||||
 | 
			
		||||
@ -3,13 +3,13 @@ package org.fdroid.fdroid.panic;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.util.AttributeSet;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.preference.Preference;
 | 
			
		||||
import androidx.preference.PreferenceViewHolder;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
 | 
			
		||||
public class DestructivePreference extends Preference {
 | 
			
		||||
    public DestructivePreference(Context context, AttributeSet attrs, int defStyleAttr) {
 | 
			
		||||
        super(context, attrs, defStyleAttr);
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,7 @@ package org.fdroid.fdroid.panic;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
 | 
			
		||||
public class ExitActivity extends AppCompatActivity {
 | 
			
		||||
 | 
			
		||||
@ -7,12 +7,14 @@ import android.content.Intent;
 | 
			
		||||
import android.content.pm.PackageInfo;
 | 
			
		||||
import android.content.pm.PackageManager;
 | 
			
		||||
import android.content.pm.ServiceInfo;
 | 
			
		||||
import androidx.core.app.NotificationManagerCompat;
 | 
			
		||||
import androidx.appcompat.app.AlertDialog;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.BuildConfig;
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.views.main.MainActivity;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AlertDialog;
 | 
			
		||||
import androidx.core.app.NotificationManagerCompat;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This class is encapsulating all methods related to hiding the app from the launcher
 | 
			
		||||
 * and restoring it.
 | 
			
		||||
 | 
			
		||||
@ -3,13 +3,13 @@ package org.fdroid.fdroid.panic;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import android.view.View;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
 | 
			
		||||
import com.google.android.material.appbar.MaterialToolbar;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
 | 
			
		||||
public class PanicPreferencesActivity extends AppCompatActivity {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,5 @@
 | 
			
		||||
package org.fdroid.fdroid.panic;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import android.content.ComponentName;
 | 
			
		||||
import android.content.DialogInterface;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
@ -16,16 +15,6 @@ import android.os.Bundle;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.TypedValue;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.ColorInt;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.appcompat.app.AlertDialog;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.preference.CheckBoxPreference;
 | 
			
		||||
import androidx.preference.ListPreference;
 | 
			
		||||
import androidx.preference.Preference;
 | 
			
		||||
import androidx.preference.PreferenceCategory;
 | 
			
		||||
import androidx.preference.PreferenceFragmentCompat;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.Preferences;
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.installer.PrivilegedInstaller;
 | 
			
		||||
@ -33,6 +22,16 @@ import org.fdroid.fdroid.installer.PrivilegedInstaller;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.ColorInt;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.appcompat.app.AlertDialog;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.preference.CheckBoxPreference;
 | 
			
		||||
import androidx.preference.ListPreference;
 | 
			
		||||
import androidx.preference.Preference;
 | 
			
		||||
import androidx.preference.PreferenceCategory;
 | 
			
		||||
import androidx.preference.PreferenceFragmentCompat;
 | 
			
		||||
import info.guardianproject.panic.Panic;
 | 
			
		||||
import info.guardianproject.panic.PanicResponder;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,17 +1,13 @@
 | 
			
		||||
package org.fdroid.fdroid.panic;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import android.content.BroadcastReceiver;
 | 
			
		||||
import android.content.ContentValues;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import info.guardianproject.panic.Panic;
 | 
			
		||||
import info.guardianproject.panic.PanicResponder;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.Preferences;
 | 
			
		||||
import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
import org.fdroid.fdroid.data.DBHelper;
 | 
			
		||||
@ -31,6 +27,11 @@ import java.util.List;
 | 
			
		||||
import java.util.concurrent.CountDownLatch;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
import info.guardianproject.panic.Panic;
 | 
			
		||||
import info.guardianproject.panic.PanicResponder;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This {@link AppCompatActivity} is purely to run events in response to a panic trigger.
 | 
			
		||||
 * It needs to be an {@code AppCompatActivity} rather than a {@link android.app.Service}
 | 
			
		||||
 | 
			
		||||
@ -1,9 +1,8 @@
 | 
			
		||||
package org.fdroid.fdroid.panic;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import android.view.View;
 | 
			
		||||
import android.view.ViewGroup;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.Preferences;
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.views.installed.InstalledAppListAdapter;
 | 
			
		||||
@ -11,6 +10,9 @@ import org.fdroid.fdroid.views.installed.InstalledAppListItemController;
 | 
			
		||||
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
 | 
			
		||||
public class SelectInstalledAppListAdapter extends InstalledAppListAdapter {
 | 
			
		||||
    private final Set<String> selectedApps;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,9 +1,7 @@
 | 
			
		||||
package org.fdroid.fdroid.panic;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import android.view.View;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.AppUpdateStatusManager;
 | 
			
		||||
import org.fdroid.fdroid.data.App;
 | 
			
		||||
import org.fdroid.fdroid.views.apps.AppListItemState;
 | 
			
		||||
@ -11,6 +9,10 @@ import org.fdroid.fdroid.views.installed.InstalledAppListItemController;
 | 
			
		||||
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Shows the currently installed apps as a selectable list.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@ -27,14 +27,6 @@ import android.view.MenuItem;
 | 
			
		||||
import android.view.View;
 | 
			
		||||
import android.widget.TextView;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.loader.app.LoaderManager;
 | 
			
		||||
import androidx.loader.content.CursorLoader;
 | 
			
		||||
import androidx.loader.content.Loader;
 | 
			
		||||
import androidx.recyclerview.widget.LinearLayoutManager;
 | 
			
		||||
import androidx.recyclerview.widget.RecyclerView;
 | 
			
		||||
 | 
			
		||||
import com.google.android.material.appbar.MaterialToolbar;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
@ -43,6 +35,14 @@ import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.data.InstalledAppProvider;
 | 
			
		||||
import org.fdroid.fdroid.views.installed.InstalledAppListAdapter;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.loader.app.LoaderManager;
 | 
			
		||||
import androidx.loader.content.CursorLoader;
 | 
			
		||||
import androidx.loader.content.Loader;
 | 
			
		||||
import androidx.recyclerview.widget.LinearLayoutManager;
 | 
			
		||||
import androidx.recyclerview.widget.RecyclerView;
 | 
			
		||||
 | 
			
		||||
public class SelectInstalledAppsActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> {
 | 
			
		||||
 | 
			
		||||
    private InstalledAppListAdapter adapter;
 | 
			
		||||
 | 
			
		||||
@ -6,15 +6,9 @@ import android.os.Bundle;
 | 
			
		||||
import android.view.View;
 | 
			
		||||
import android.widget.FrameLayout;
 | 
			
		||||
import android.widget.TextView;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.loader.app.LoaderManager;
 | 
			
		||||
import androidx.loader.content.CursorLoader;
 | 
			
		||||
import androidx.loader.content.Loader;
 | 
			
		||||
import androidx.recyclerview.widget.LinearLayoutManager;
 | 
			
		||||
import androidx.recyclerview.widget.RecyclerView;
 | 
			
		||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 | 
			
		||||
 | 
			
		||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.Preferences;
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.UpdateService;
 | 
			
		||||
@ -31,6 +25,15 @@ import java.util.Collections;
 | 
			
		||||
import java.util.Comparator;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.loader.app.LoaderManager;
 | 
			
		||||
import androidx.loader.content.CursorLoader;
 | 
			
		||||
import androidx.loader.content.Loader;
 | 
			
		||||
import androidx.recyclerview.widget.LinearLayoutManager;
 | 
			
		||||
import androidx.recyclerview.widget.RecyclerView;
 | 
			
		||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Responsible for ensuring that the categories view is inflated and then populated correctly.
 | 
			
		||||
 * Will start a loader to get the list of categories from the database and populate a recycler
 | 
			
		||||
 | 
			
		||||
@ -2,15 +2,15 @@ package org.fdroid.fdroid.views.main;
 | 
			
		||||
 | 
			
		||||
import android.widget.FrameLayout;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.views.PreferencesFragment;
 | 
			
		||||
import org.fdroid.fdroid.views.updates.UpdatesViewBinder;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.fragment.app.Fragment;
 | 
			
		||||
import androidx.recyclerview.widget.RecyclerView;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.views.PreferencesFragment;
 | 
			
		||||
import org.fdroid.fdroid.views.updates.UpdatesViewBinder;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Decides which view on the main screen to attach to a given {@link FrameLayout}. This class
 | 
			
		||||
 * doesn't know which view it will be rendering at the time it is constructed. Rather, at some
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,6 @@
 | 
			
		||||
package org.fdroid.fdroid.views.main;
 | 
			
		||||
 | 
			
		||||
import android.Manifest;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.content.UriPermission;
 | 
			
		||||
@ -22,9 +21,7 @@ import android.widget.FrameLayout;
 | 
			
		||||
import android.widget.ImageView;
 | 
			
		||||
import android.widget.TextView;
 | 
			
		||||
import android.widget.Toast;
 | 
			
		||||
import androidx.annotation.RequiresApi;
 | 
			
		||||
import androidx.core.app.ActivityCompat;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.nearby.SDCardScannerService;
 | 
			
		||||
@ -34,6 +31,11 @@ import org.fdroid.fdroid.nearby.TreeUriScannerIntentService;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.RequiresApi;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.core.app.ActivityCompat;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A splash screen encouraging people to start the swap process. The swap
 | 
			
		||||
 * process is quite heavy duty in that it fires up Bluetooth and/or WiFi
 | 
			
		||||
 | 
			
		||||
@ -1,11 +1,12 @@
 | 
			
		||||
package org.fdroid.fdroid;
 | 
			
		||||
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import android.view.View;
 | 
			
		||||
import android.widget.TextView;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
 | 
			
		||||
public class AboutActivity extends AppCompatActivity {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 | 
			
		||||
@ -5,10 +5,9 @@ import android.content.ComponentName;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.data.Repo;
 | 
			
		||||
import org.fdroid.fdroid.data.RepoProvider;
 | 
			
		||||
import org.fdroid.fdroid.views.ManageReposActivity;
 | 
			
		||||
@ -18,6 +17,9 @@ import java.net.URI;
 | 
			
		||||
import java.net.URISyntaxException;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Handles requests to add new repos via URLs.  This is an {@code IntentService}
 | 
			
		||||
 * so that requests are queued, which is necessary when either
 | 
			
		||||
 | 
			
		||||
@ -9,10 +9,7 @@ import android.content.SharedPreferences;
 | 
			
		||||
import android.content.pm.PackageManager;
 | 
			
		||||
import android.os.Parcel;
 | 
			
		||||
import android.os.Parcelable;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.core.app.TaskStackBuilder;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
import org.fdroid.fdroid.data.App;
 | 
			
		||||
import org.fdroid.fdroid.data.AppProvider;
 | 
			
		||||
@ -28,6 +25,11 @@ import java.util.Iterator;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.core.app.TaskStackBuilder;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Manages the state of APKs that are being installed or that have updates available.
 | 
			
		||||
 * This also ensures the state is saved across F-Droid restarts, and repopulates
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@ import android.content.Context;
 | 
			
		||||
import android.content.pm.FeatureInfo;
 | 
			
		||||
import android.content.pm.PackageManager;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.compat.SupportedArchitectures;
 | 
			
		||||
import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
 | 
			
		||||
@ -14,6 +14,8 @@ import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
// Call getIncompatibleReasons(apk) on an instance of this class to
 | 
			
		||||
// find reasons why an apk may be incompatible with the user's device.
 | 
			
		||||
public class CompatibilityChecker {
 | 
			
		||||
 | 
			
		||||
@ -3,14 +3,16 @@ package org.fdroid.fdroid;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.os.Process;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.core.app.JobIntentService;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.io.FileUtils;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.core.app.JobIntentService;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * An {@link JobIntentService} subclass for deleting the full cache for this app.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@ -45,12 +45,6 @@ import android.util.Log;
 | 
			
		||||
import android.view.Display;
 | 
			
		||||
import android.view.WindowManager;
 | 
			
		||||
import android.widget.Toast;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.appcompat.app.AppCompatDelegate;
 | 
			
		||||
import androidx.collection.LongSparseArray;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
 | 
			
		||||
import com.nostra13.universalimageloader.cache.disc.DiskCache;
 | 
			
		||||
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
 | 
			
		||||
@ -59,8 +53,7 @@ import com.nostra13.universalimageloader.core.DefaultConfigurationFactory;
 | 
			
		||||
import com.nostra13.universalimageloader.core.ImageLoader;
 | 
			
		||||
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
 | 
			
		||||
import com.nostra13.universalimageloader.core.process.BitmapProcessor;
 | 
			
		||||
import info.guardianproject.netcipher.NetCipher;
 | 
			
		||||
import info.guardianproject.netcipher.proxy.OrbotHelper;
 | 
			
		||||
 | 
			
		||||
import org.acra.ACRA;
 | 
			
		||||
import org.acra.ReportField;
 | 
			
		||||
import org.acra.ReportingInteractionMode;
 | 
			
		||||
@ -84,13 +77,23 @@ import org.fdroid.fdroid.net.ImageLoaderForUIL;
 | 
			
		||||
import org.fdroid.fdroid.panic.HidingManager;
 | 
			
		||||
import org.fdroid.fdroid.work.CleanCacheWorker;
 | 
			
		||||
 | 
			
		||||
import javax.microedition.khronos.opengles.GL10;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.nio.ByteBuffer;
 | 
			
		||||
import java.security.Security;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import javax.microedition.khronos.opengles.GL10;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.appcompat.app.AppCompatDelegate;
 | 
			
		||||
import androidx.collection.LongSparseArray;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import info.guardianproject.netcipher.NetCipher;
 | 
			
		||||
import info.guardianproject.netcipher.proxy.OrbotHelper;
 | 
			
		||||
 | 
			
		||||
@ReportsCrashes(mailTo = BuildConfig.ACRA_REPORT_EMAIL,
 | 
			
		||||
        mode = ReportingInteractionMode.DIALOG,
 | 
			
		||||
        reportDialogClass = org.fdroid.fdroid.acra.CrashReportActivity.class,
 | 
			
		||||
 | 
			
		||||
@ -27,9 +27,9 @@ import android.content.ContentResolver;
 | 
			
		||||
import android.content.ContentValues;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.pm.PackageInfo;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
import org.fdroid.fdroid.data.ApkProvider;
 | 
			
		||||
import org.fdroid.fdroid.data.App;
 | 
			
		||||
@ -48,9 +48,6 @@ import org.xml.sax.InputSource;
 | 
			
		||||
import org.xml.sax.SAXException;
 | 
			
		||||
import org.xml.sax.XMLReader;
 | 
			
		||||
 | 
			
		||||
import javax.xml.parsers.ParserConfigurationException;
 | 
			
		||||
import javax.xml.parsers.SAXParser;
 | 
			
		||||
import javax.xml.parsers.SAXParserFactory;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
@ -64,6 +61,12 @@ import java.util.List;
 | 
			
		||||
import java.util.jar.JarEntry;
 | 
			
		||||
import java.util.jar.JarFile;
 | 
			
		||||
 | 
			
		||||
import javax.xml.parsers.ParserConfigurationException;
 | 
			
		||||
import javax.xml.parsers.SAXParser;
 | 
			
		||||
import javax.xml.parsers.SAXParserFactory;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
// TODO move to org.fdroid.fdroid.updater
 | 
			
		||||
// TODO reduce visibility of methods once in .updater package (.e.g tests need it public now)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -25,9 +25,9 @@ package org.fdroid.fdroid;
 | 
			
		||||
import android.content.ContentValues;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.pm.PackageInfo;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonAutoDetect;
 | 
			
		||||
import com.fasterxml.jackson.annotation.PropertyAccessor;
 | 
			
		||||
import com.fasterxml.jackson.core.JsonFactory;
 | 
			
		||||
@ -36,6 +36,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
 | 
			
		||||
import com.fasterxml.jackson.databind.DeserializationFeature;
 | 
			
		||||
import com.fasterxml.jackson.databind.InjectableValues;
 | 
			
		||||
import com.fasterxml.jackson.databind.ObjectMapper;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.io.FileUtils;
 | 
			
		||||
import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
import org.fdroid.fdroid.data.App;
 | 
			
		||||
@ -47,10 +48,6 @@ import org.fdroid.fdroid.data.Schema;
 | 
			
		||||
import org.fdroid.fdroid.net.Downloader;
 | 
			
		||||
import org.fdroid.fdroid.net.DownloaderFactory;
 | 
			
		||||
 | 
			
		||||
import javax.net.ssl.SSLHandshakeException;
 | 
			
		||||
import javax.net.ssl.SSLKeyException;
 | 
			
		||||
import javax.net.ssl.SSLPeerUnverifiedException;
 | 
			
		||||
import javax.net.ssl.SSLProtocolException;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
@ -71,6 +68,13 @@ import java.util.Map;
 | 
			
		||||
import java.util.jar.JarEntry;
 | 
			
		||||
import java.util.jar.JarFile;
 | 
			
		||||
 | 
			
		||||
import javax.net.ssl.SSLHandshakeException;
 | 
			
		||||
import javax.net.ssl.SSLKeyException;
 | 
			
		||||
import javax.net.ssl.SSLPeerUnverifiedException;
 | 
			
		||||
import javax.net.ssl.SSLProtocolException;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Receives the index data about all available apps and packages via the V1
 | 
			
		||||
 * JSON data {@link #DATA_FILE_NAME}, embedded in a signed jar
 | 
			
		||||
 | 
			
		||||
@ -8,8 +8,6 @@ import android.content.res.Resources;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.LinkedHashSet;
 | 
			
		||||
@ -18,6 +16,8 @@ import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.TreeMap;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
 | 
			
		||||
public final class Languages {
 | 
			
		||||
    public static final String TAG = "Languages";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,6 @@
 | 
			
		||||
package org.fdroid.fdroid;
 | 
			
		||||
 | 
			
		||||
import android.annotation.TargetApi;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.pm.ApplicationInfo;
 | 
			
		||||
import android.content.pm.PackageManager;
 | 
			
		||||
@ -12,6 +11,8 @@ import android.nfc.NfcAdapter;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
 | 
			
		||||
public class NfcHelper {
 | 
			
		||||
 | 
			
		||||
    private static final String TAG = "NfcHelper";
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,7 @@ import android.nfc.NfcAdapter;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import android.provider.Settings;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
 | 
			
		||||
// aka Android 4.0 aka Ice Cream Sandwich
 | 
			
		||||
 | 
			
		||||
@ -20,11 +20,6 @@ import android.text.TextUtils;
 | 
			
		||||
import android.text.style.StyleSpan;
 | 
			
		||||
import android.view.View;
 | 
			
		||||
 | 
			
		||||
import androidx.core.app.NotificationCompat;
 | 
			
		||||
import androidx.core.app.NotificationManagerCompat;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
import com.nostra13.universalimageloader.core.ImageLoader;
 | 
			
		||||
import com.nostra13.universalimageloader.core.assist.FailReason;
 | 
			
		||||
import com.nostra13.universalimageloader.core.assist.ImageSize;
 | 
			
		||||
@ -38,6 +33,11 @@ import org.fdroid.fdroid.views.main.MainActivity;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
 | 
			
		||||
import androidx.core.app.NotificationCompat;
 | 
			
		||||
import androidx.core.app.NotificationManagerCompat;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
@SuppressWarnings("LineLength")
 | 
			
		||||
public class NotificationHelper {
 | 
			
		||||
    public static final String CHANNEL_SWAPS = "swap-channel";
 | 
			
		||||
 | 
			
		||||
@ -30,8 +30,7 @@ import android.net.NetworkInfo;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import android.text.format.DateUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.preference.PreferenceManager;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.installer.PrivilegedInstaller;
 | 
			
		||||
import org.fdroid.fdroid.net.ConnectivityMonitorService;
 | 
			
		||||
 | 
			
		||||
@ -44,6 +43,9 @@ import java.util.Random;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.preference.PreferenceManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Handles shared preferences for FDroid, looking after the names of
 | 
			
		||||
 * preferences, default values and caching. Needs to be setup in the FDroidApp
 | 
			
		||||
 | 
			
		||||
@ -1,11 +1,11 @@
 | 
			
		||||
package org.fdroid.fdroid;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import java.io.BufferedInputStream;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
class ProgressBufferedInputStream extends BufferedInputStream {
 | 
			
		||||
 | 
			
		||||
    private final ProgressListener progressListener;
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,9 @@ import android.content.Context;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.util.Base64;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.databind.ObjectMapper;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.io.IOUtils;
 | 
			
		||||
import org.fdroid.fdroid.data.Repo;
 | 
			
		||||
import org.fdroid.fdroid.data.RepoProvider;
 | 
			
		||||
 | 
			
		||||
@ -38,12 +38,6 @@ import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import android.widget.Toast;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.core.app.JobIntentService;
 | 
			
		||||
import androidx.core.app.NotificationCompat;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
import org.fdroid.fdroid.data.ApkProvider;
 | 
			
		||||
import org.fdroid.fdroid.data.App;
 | 
			
		||||
@ -61,6 +55,12 @@ import java.lang.ref.WeakReference;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.core.app.JobIntentService;
 | 
			
		||||
import androidx.core.app.NotificationCompat;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
public class UpdateService extends JobIntentService {
 | 
			
		||||
 | 
			
		||||
    private static final String TAG = "UpdateService";
 | 
			
		||||
 | 
			
		||||
@ -48,15 +48,13 @@ import android.view.View;
 | 
			
		||||
import android.view.ViewTreeObserver;
 | 
			
		||||
import android.widget.ImageView;
 | 
			
		||||
import android.widget.Toast;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.annotation.RequiresApi;
 | 
			
		||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 | 
			
		||||
 | 
			
		||||
import com.nostra13.universalimageloader.core.DisplayImageOptions;
 | 
			
		||||
import com.nostra13.universalimageloader.core.ImageLoader;
 | 
			
		||||
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
 | 
			
		||||
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
 | 
			
		||||
import com.nostra13.universalimageloader.utils.StorageUtils;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.compat.FileCompat;
 | 
			
		||||
import org.fdroid.fdroid.data.App;
 | 
			
		||||
import org.fdroid.fdroid.data.Repo;
 | 
			
		||||
@ -94,6 +92,11 @@ import java.util.TimeZone;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
import java.util.regex.Pattern;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.annotation.RequiresApi;
 | 
			
		||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 | 
			
		||||
 | 
			
		||||
public final class Utils {
 | 
			
		||||
 | 
			
		||||
    private static final String TAG = "Utils";
 | 
			
		||||
 | 
			
		||||
@ -2,12 +2,13 @@ package org.fdroid.fdroid.acra;
 | 
			
		||||
 | 
			
		||||
import android.content.DialogInterface;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import androidx.appcompat.app.AlertDialog;
 | 
			
		||||
import android.widget.EditText;
 | 
			
		||||
 | 
			
		||||
import org.acra.dialog.BaseCrashReportDialog;
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AlertDialog;
 | 
			
		||||
 | 
			
		||||
public class CrashReportActivity extends BaseCrashReportDialog
 | 
			
		||||
        implements DialogInterface.OnDismissListener, DialogInterface.OnClickListener {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,13 +4,15 @@ package org.fdroid.fdroid.acra;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import org.acra.ReportField;
 | 
			
		||||
import org.acra.collections.ImmutableSet;
 | 
			
		||||
import org.acra.collector.CrashReportData;
 | 
			
		||||
import org.acra.config.ACRAConfiguration;
 | 
			
		||||
import org.acra.sender.ReportSender;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
public class CrashReportSender implements ReportSender {
 | 
			
		||||
 | 
			
		||||
    private final ACRAConfiguration config;
 | 
			
		||||
 | 
			
		||||
@ -1,12 +1,13 @@
 | 
			
		||||
package org.fdroid.fdroid.acra;
 | 
			
		||||
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import org.acra.config.ACRAConfiguration;
 | 
			
		||||
import org.acra.sender.ReportSender;
 | 
			
		||||
import org.acra.sender.ReportSenderFactory;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
public class CrashReportSenderFactory implements ReportSenderFactory {
 | 
			
		||||
    @NonNull
 | 
			
		||||
    @Override
 | 
			
		||||
 | 
			
		||||
@ -5,8 +5,6 @@ import android.os.Build;
 | 
			
		||||
import android.system.ErrnoException;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.RequiresApi;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.data.SanitizedFile;
 | 
			
		||||
@ -14,6 +12,8 @@ import org.fdroid.fdroid.data.SanitizedFile;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.lang.reflect.Method;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.RequiresApi;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This class works only with {@link SanitizedFile} instances to enforce
 | 
			
		||||
 * filtering of the file names from files downloaded from the internet.
 | 
			
		||||
 | 
			
		||||
@ -12,11 +12,11 @@ import android.os.Parcel;
 | 
			
		||||
import android.os.Parcelable;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.webkit.MimeTypeMap;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.annotation.JacksonInject;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonIgnore;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonProperty;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.BuildConfig;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.ApkTable.Cols;
 | 
			
		||||
@ -30,6 +30,9 @@ import java.util.HashSet;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import java.util.zip.ZipFile;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Represents a single package of an application. This represents one particular
 | 
			
		||||
 * package of a given application, for info about the app in general, see
 | 
			
		||||
 | 
			
		||||
@ -6,9 +6,8 @@ import android.content.Context;
 | 
			
		||||
import android.content.UriMatcher;
 | 
			
		||||
import android.database.Cursor;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.AntiFeatureTable;
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.ApkAntiFeatureJoinTable;
 | 
			
		||||
@ -26,6 +25,9 @@ import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
public class ApkProvider extends FDroidProvider {
 | 
			
		||||
 | 
			
		||||
    private static final String TAG = "ApkProvider";
 | 
			
		||||
 | 
			
		||||
@ -17,13 +17,11 @@ import android.os.Parcel;
 | 
			
		||||
import android.os.Parcelable;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.core.os.ConfigurationCompat;
 | 
			
		||||
import androidx.core.os.LocaleListCompat;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.annotation.JacksonInject;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonIgnore;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonProperty;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.io.filefilter.RegexFileFilter;
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
import org.fdroid.fdroid.Preferences;
 | 
			
		||||
@ -54,6 +52,11 @@ import java.util.jar.JarFile;
 | 
			
		||||
import java.util.regex.Matcher;
 | 
			
		||||
import java.util.regex.Pattern;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.core.os.ConfigurationCompat;
 | 
			
		||||
import androidx.core.os.LocaleListCompat;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Represents an application, its availability, and its current installed state.
 | 
			
		||||
 * This represents the app in general, for a specific version of this app, see
 | 
			
		||||
 | 
			
		||||
@ -5,11 +5,13 @@ import android.content.Context;
 | 
			
		||||
import android.content.UriMatcher;
 | 
			
		||||
import android.database.Cursor;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.AppPrefsTable;
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.AppPrefsTable.Cols;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
public class AppPrefsProvider extends FDroidProvider {
 | 
			
		||||
 | 
			
		||||
    public static final class Helper {
 | 
			
		||||
 | 
			
		||||
@ -8,8 +8,7 @@ import android.database.Cursor;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.Preferences;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.ApkAntiFeatureJoinTable;
 | 
			
		||||
@ -29,6 +28,9 @@ import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Each app has a bunch of metadata that it associates with a package name (such as org.fdroid.fdroid).
 | 
			
		||||
 * Multiple repositories can host the same package, and provide different metadata for that app.
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@ import android.content.Context;
 | 
			
		||||
import android.content.UriMatcher;
 | 
			
		||||
import android.database.Cursor;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.AppMetadataTable;
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.CatJoinTable;
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.CategoryTable;
 | 
			
		||||
@ -16,6 +16,8 @@ import java.util.HashMap;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
public class CategoryProvider extends FDroidProvider {
 | 
			
		||||
    public static final String TAG = "CategoryProvider";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -30,6 +30,7 @@ import android.database.sqlite.SQLiteDatabase;
 | 
			
		||||
import android.database.sqlite.SQLiteOpenHelper;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.Preferences;
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
 | 
			
		||||
@ -8,12 +8,13 @@ import android.content.OperationApplicationException;
 | 
			
		||||
import android.content.UriMatcher;
 | 
			
		||||
import android.database.sqlite.SQLiteDatabase;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.BuildConfig;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
public abstract class FDroidProvider extends ContentProvider {
 | 
			
		||||
 | 
			
		||||
    public static final String TAG = "FDroidProvider";
 | 
			
		||||
 | 
			
		||||
@ -9,10 +9,9 @@ import android.content.pm.PackageManager;
 | 
			
		||||
import android.content.res.Resources;
 | 
			
		||||
import android.database.Cursor;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.AppMetadataTable;
 | 
			
		||||
@ -25,6 +24,9 @@ import java.util.HashMap;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
public class InstalledAppProvider extends FDroidProvider {
 | 
			
		||||
 | 
			
		||||
    private static final String TAG = "InstalledAppProvider";
 | 
			
		||||
 | 
			
		||||
@ -5,6 +5,7 @@ import android.content.Intent;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.nearby.SwapWorkflowActivity;
 | 
			
		||||
 | 
			
		||||
@ -6,10 +6,10 @@ import android.content.pm.PackageInfo;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Replies with the public download URL for the OBB that belongs to the
 | 
			
		||||
 * requesting app/version.  If it doesn't know the OBB URL for the requesting
 | 
			
		||||
 | 
			
		||||
@ -5,10 +5,12 @@ import android.content.Context;
 | 
			
		||||
import android.content.UriMatcher;
 | 
			
		||||
import android.database.Cursor;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.PackageTable;
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.PackageTable.Cols;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
public class PackageIdProvider extends FDroidProvider {
 | 
			
		||||
 | 
			
		||||
    public static final class Helper {
 | 
			
		||||
 | 
			
		||||
@ -1,12 +1,13 @@
 | 
			
		||||
package org.fdroid.fdroid.data;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
abstract class QueryBuilder {
 | 
			
		||||
 | 
			
		||||
    private final List<String> fields = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
@ -27,7 +27,9 @@ import android.content.ContentValues;
 | 
			
		||||
import android.database.Cursor;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonIgnore;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
import org.fdroid.fdroid.Preferences;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,6 @@ import android.content.Context;
 | 
			
		||||
import android.content.OperationApplicationException;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.os.RemoteException;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.CompatibilityChecker;
 | 
			
		||||
import org.fdroid.fdroid.IndexUpdater;
 | 
			
		||||
@ -17,6 +16,8 @@ import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
public class RepoPersister {
 | 
			
		||||
 | 
			
		||||
    private static final String TAG = "RepoPersister";
 | 
			
		||||
 | 
			
		||||
@ -7,10 +7,9 @@ import android.content.Context;
 | 
			
		||||
import android.content.UriMatcher;
 | 
			
		||||
import android.database.Cursor;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.AppUpdateStatusManager;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.RepoTable;
 | 
			
		||||
@ -20,6 +19,9 @@ import java.util.ArrayList;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
public class RepoProvider extends FDroidProvider {
 | 
			
		||||
 | 
			
		||||
    private static final String TAG = "RepoProvider";
 | 
			
		||||
 | 
			
		||||
@ -19,12 +19,13 @@
 | 
			
		||||
 | 
			
		||||
package org.fdroid.fdroid.data;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Represents action requests embedded in the index XML received from a repo.
 | 
			
		||||
 * When {@link #versionCode} is {@code null}, that means that the
 | 
			
		||||
 | 
			
		||||
@ -21,8 +21,7 @@ package org.fdroid.fdroid.data;
 | 
			
		||||
 | 
			
		||||
import android.Manifest;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.ApkTable;
 | 
			
		||||
import org.xml.sax.Attributes;
 | 
			
		||||
@ -34,6 +33,9 @@ import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.regex.Pattern;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Parses the index.xml into Java data structures.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@ -5,11 +5,12 @@ import android.content.Context;
 | 
			
		||||
import android.content.UriMatcher;
 | 
			
		||||
import android.database.sqlite.SQLiteDatabase;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.ApkTable;
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.ApkTable.Cols;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This class does all of its operations in a temporary sqlite table.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@ -7,8 +7,8 @@ import android.database.Cursor;
 | 
			
		||||
import android.database.sqlite.SQLiteDatabase;
 | 
			
		||||
import android.database.sqlite.SQLiteException;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.ApkTable;
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.AppMetadataTable;
 | 
			
		||||
import org.fdroid.fdroid.data.Schema.AppMetadataTable.Cols;
 | 
			
		||||
@ -17,6 +17,8 @@ import org.fdroid.fdroid.data.Schema.PackageTable;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This class does all of its operations in a temporary sqlite table.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@ -23,7 +23,9 @@ import android.content.Context;
 | 
			
		||||
import android.content.pm.ApplicationInfo;
 | 
			
		||||
import android.content.pm.PackageInfo;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
 | 
			
		||||
import com.nostra13.universalimageloader.utils.StorageUtils;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.io.FileUtils;
 | 
			
		||||
import org.fdroid.fdroid.Hasher;
 | 
			
		||||
import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
 | 
			
		||||
@ -24,7 +24,7 @@ import android.content.Intent;
 | 
			
		||||
import android.content.pm.PackageInfo;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import androidx.core.content.FileProvider;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.BuildConfig;
 | 
			
		||||
import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
import org.fdroid.fdroid.data.SanitizedFile;
 | 
			
		||||
@ -32,6 +32,8 @@ import org.fdroid.fdroid.data.SanitizedFile;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
 | 
			
		||||
import androidx.core.content.FileProvider;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Helper methods for preparing APKs and arbitrary files for installation,
 | 
			
		||||
 * either locally or for sending via bluetooth.
 | 
			
		||||
 | 
			
		||||
@ -24,6 +24,7 @@ import android.content.Context;
 | 
			
		||||
import android.content.pm.PackageInfo;
 | 
			
		||||
import android.content.pm.PackageManager;
 | 
			
		||||
import android.content.pm.Signature;
 | 
			
		||||
 | 
			
		||||
import org.acra.ACRA;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -25,13 +25,15 @@ import android.content.pm.PackageManager;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This ApkVerifier verifies that the downloaded apk corresponds to the Apk information
 | 
			
		||||
 * displayed to the user. This is especially important in case an unattended installer
 | 
			
		||||
 | 
			
		||||
@ -24,9 +24,11 @@ import android.app.PendingIntent;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The default installer of F-Droid. It uses the normal Intents APIs of Android
 | 
			
		||||
 * to install apks. Its main inner workings are encapsulated in DefaultInstallerActivity.
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,6 @@
 | 
			
		||||
package org.fdroid.fdroid.installer;
 | 
			
		||||
 | 
			
		||||
import android.annotation.SuppressLint;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import android.content.ActivityNotFoundException;
 | 
			
		||||
import android.content.ContentResolver;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
@ -29,12 +28,14 @@ import android.content.pm.PackageManager;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import androidx.fragment.app.FragmentActivity;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.fragment.app.FragmentActivity;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A transparent activity as a wrapper around Android's PackageInstaller Intents
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@ -19,17 +19,18 @@
 | 
			
		||||
 | 
			
		||||
package org.fdroid.fdroid.installer;
 | 
			
		||||
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import android.content.DialogInterface;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.fragment.app.FragmentActivity;
 | 
			
		||||
import androidx.appcompat.app.AlertDialog;
 | 
			
		||||
import android.view.ContextThemeWrapper;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import androidx.appcompat.app.AlertDialog;
 | 
			
		||||
import androidx.appcompat.app.AppCompatActivity;
 | 
			
		||||
import androidx.fragment.app.FragmentActivity;
 | 
			
		||||
 | 
			
		||||
public class ErrorDialogActivity extends FragmentActivity {
 | 
			
		||||
 | 
			
		||||
    public static final String EXTRA_TITLE = "title";
 | 
			
		||||
 | 
			
		||||
@ -23,9 +23,11 @@ import android.app.PendingIntent;
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
public class FileInstaller extends Installer {
 | 
			
		||||
 | 
			
		||||
    public FileInstaller(Context context, @NonNull Apk apk) {
 | 
			
		||||
 | 
			
		||||
@ -8,11 +8,7 @@ import android.net.Uri;
 | 
			
		||||
import android.os.Bundle;
 | 
			
		||||
import android.view.ContextThemeWrapper;
 | 
			
		||||
import android.widget.Toast;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.appcompat.app.AlertDialog;
 | 
			
		||||
import androidx.core.app.ActivityCompat;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.fragment.app.FragmentActivity;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.io.FileUtils;
 | 
			
		||||
import org.fdroid.fdroid.FDroidApp;
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
@ -22,6 +18,12 @@ import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.appcompat.app.AlertDialog;
 | 
			
		||||
import androidx.core.app.ActivityCompat;
 | 
			
		||||
import androidx.core.content.ContextCompat;
 | 
			
		||||
import androidx.fragment.app.FragmentActivity;
 | 
			
		||||
 | 
			
		||||
public class FileInstallerActivity extends FragmentActivity {
 | 
			
		||||
 | 
			
		||||
    private static final String TAG = "FileInstallerActivity";
 | 
			
		||||
 | 
			
		||||
@ -27,7 +27,7 @@ import android.content.IntentFilter;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.os.Process;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
 | 
			
		||||
@ -38,6 +38,8 @@ import java.io.PrintWriter;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Saves all activity of installs and uninstalls to the database for later use, like
 | 
			
		||||
 * displaying in some kind of history viewer or reporting to a "popularity contest"
 | 
			
		||||
 | 
			
		||||
@ -12,8 +12,7 @@ import android.net.Uri;
 | 
			
		||||
import android.os.IBinder;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.io.FileUtils;
 | 
			
		||||
import org.apache.commons.io.filefilter.WildcardFileFilter;
 | 
			
		||||
import org.fdroid.fdroid.AppUpdateStatusManager;
 | 
			
		||||
@ -31,6 +30,9 @@ import java.io.File;
 | 
			
		||||
import java.io.FileFilter;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Manages the whole process when a background update triggers an install or the user
 | 
			
		||||
 * requests an APK to be installed.  It handles checking whether the APK is cached,
 | 
			
		||||
 | 
			
		||||
@ -28,9 +28,8 @@ import android.content.pm.PackageManager;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import android.os.PatternMatcher;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.BuildConfig;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
@ -42,6 +41,9 @@ import org.fdroid.fdroid.privileged.views.UninstallDialogActivity;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Handles the actual install process.  Subclasses implement the details.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@ -21,11 +21,13 @@
 | 
			
		||||
package org.fdroid.fdroid.installer;
 | 
			
		||||
 | 
			
		||||
import android.content.Context;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
public class InstallerFactory {
 | 
			
		||||
 | 
			
		||||
    private static final String TAG = "InstallerFactory";
 | 
			
		||||
 | 
			
		||||
@ -24,8 +24,7 @@ import android.content.Context;
 | 
			
		||||
import android.content.Intent;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.os.Build;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.core.app.JobIntentService;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.io.FileUtils;
 | 
			
		||||
import org.apache.commons.io.filefilter.WildcardFileFilter;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
@ -37,6 +36,9 @@ import java.io.File;
 | 
			
		||||
import java.io.FileFilter;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import androidx.core.app.JobIntentService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This service handles the install process of apk files and
 | 
			
		||||
 * uninstall process of apps.
 | 
			
		||||
 | 
			
		||||
@ -10,6 +10,7 @@ import android.os.StrictMode;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
import android.webkit.MimeTypeMap;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.io.FileUtils;
 | 
			
		||||
import org.fdroid.fdroid.data.Apk;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,8 +29,8 @@ import android.content.pm.PackageManager;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.os.IBinder;
 | 
			
		||||
import android.os.RemoteException;
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.BuildConfig;
 | 
			
		||||
import org.fdroid.fdroid.Preferences;
 | 
			
		||||
import org.fdroid.fdroid.R;
 | 
			
		||||
@ -40,6 +40,8 @@ import org.fdroid.fdroid.privileged.IPrivilegedService;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.NonNull;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Installer that only works if the "F-Droid Privileged
 | 
			
		||||
 * Extension" is installed as a privileged app.
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,7 @@
 | 
			
		||||
package org.fdroid.fdroid.nearby;
 | 
			
		||||
 | 
			
		||||
import android.bluetooth.BluetoothSocket;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
 | 
			
		||||
import java.io.BufferedInputStream;
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,7 @@
 | 
			
		||||
package org.fdroid.fdroid.nearby.httpish;
 | 
			
		||||
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.nearby.BluetoothConnection;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,8 @@
 | 
			
		||||
package org.fdroid.fdroid.net;
 | 
			
		||||
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.io.input.BoundedInputStream;
 | 
			
		||||
import org.fdroid.fdroid.Utils;
 | 
			
		||||
import org.fdroid.fdroid.nearby.BluetoothClient;
 | 
			
		||||
@ -16,6 +16,8 @@ import java.io.IOException;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
import java.util.regex.Pattern;
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.Nullable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Download from a Bluetooth swap repo.  Example URI:
 | 
			
		||||
 * {@code bluetooth://84-CF-BF-8B-3E-34/fdroid/repo}
 | 
			
		||||
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user