diff --git a/src/org/fdroid/fdroid/FDroidApp.java b/src/org/fdroid/fdroid/FDroidApp.java index c344db3c5..e5d8c13fe 100644 --- a/src/org/fdroid/fdroid/FDroidApp.java +++ b/src/org/fdroid/fdroid/FDroidApp.java @@ -23,22 +23,12 @@ import android.app.Activity; import android.app.Application; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothManager; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.ServiceConnection; -import android.content.SharedPreferences; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; +import android.content.*; +import android.content.pm.*; import android.content.pm.PackageManager.NameNotFoundException; -import android.content.pm.ResolveInfo; import android.net.Uri; import android.net.wifi.WifiManager; -import android.os.Build; -import android.os.IBinder; -import android.os.Message; -import android.os.Messenger; -import android.os.RemoteException; +import android.os.*; import android.preference.PreferenceManager; import android.util.Log; import android.widget.Toast; @@ -55,24 +45,16 @@ import org.fdroid.fdroid.compat.PRNGFixes; import org.fdroid.fdroid.data.AppProvider; import org.fdroid.fdroid.data.InstalledAppCacheUpdater; import org.fdroid.fdroid.data.Repo; -import org.fdroid.fdroid.localrepo.LocalRepoManager; import org.fdroid.fdroid.localrepo.LocalRepoService; import org.fdroid.fdroid.net.WifiStateChangeService; import org.thoughtcrime.ssl.pinning.PinningTrustManager; import org.thoughtcrime.ssl.pinning.SystemKeyStore; import java.io.File; -import java.security.KeyManagementException; -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; +import java.security.*; import java.util.Set; -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.TrustManagerFactory; -import javax.net.ssl.X509TrustManager; +import javax.net.ssl.*; public class FDroidApp extends Application { @@ -82,7 +64,6 @@ public class FDroidApp extends Application { public static String ssid = ""; public static String bssid = ""; public static Repo repo = new Repo(); - public static LocalRepoManager localRepo = null; public static Set selectedApps = null; // init in SelectLocalAppsFragment private static Messenger localRepoServiceMessenger = null; @@ -125,8 +106,6 @@ public class FDroidApp extends Application { // Apply the Google PRNG fixes to properly seed SecureRandom PRNGFixes.apply(); - localRepo = new LocalRepoManager(getApplicationContext()); - // Check that the installed app cache hasn't gotten out of sync somehow. // e.g. if we crashed/ran out of battery half way through responding // to a package installed intent. It doesn't really matter where diff --git a/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java b/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java index 29b35fc71..86ab0bcfd 100644 --- a/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java +++ b/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java @@ -63,7 +63,15 @@ public class LocalRepoManager { public final File repoDir; public final File iconsDir; - public LocalRepoManager(Context c) { + private static LocalRepoManager localRepoManager; + + public static LocalRepoManager get(Context context) { + if(localRepoManager == null) + localRepoManager = new LocalRepoManager(context); + return localRepoManager; + } + + private LocalRepoManager(Context c) { context = c; pm = c.getPackageManager(); assetManager = c.getAssets(); diff --git a/src/org/fdroid/fdroid/net/WifiStateChangeService.java b/src/org/fdroid/fdroid/net/WifiStateChangeService.java index cecfb1c42..e1cdd09a6 100644 --- a/src/org/fdroid/fdroid/net/WifiStateChangeService.java +++ b/src/org/fdroid/fdroid/net/WifiStateChangeService.java @@ -14,6 +14,7 @@ import org.fdroid.fdroid.FDroidApp; import org.fdroid.fdroid.Preferences; import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.localrepo.LocalRepoKeyStore; +import org.fdroid.fdroid.localrepo.LocalRepoManager; import java.security.cert.Certificate; import java.util.Locale; @@ -66,8 +67,9 @@ public class WifiStateChangeService extends Service { scheme, FDroidApp.ipAddressString, FDroidApp.port); Certificate localCert = LocalRepoKeyStore.get(getApplication()).getCertificate(); FDroidApp.repo.fingerprint = Utils.calcFingerprint(localCert); - FDroidApp.localRepo.setUriString(FDroidApp.repo.address); - FDroidApp.localRepo.writeIndexPage( + LocalRepoManager lrm = LocalRepoManager.get(WifiStateChangeService.this); + lrm.setUriString(FDroidApp.repo.address); + lrm.writeIndexPage( Utils.getSharingUri(WifiStateChangeService.this, FDroidApp.repo).toString()); } catch (InterruptedException e) { e.printStackTrace(); diff --git a/src/org/fdroid/fdroid/views/LocalRepoActivity.java b/src/org/fdroid/fdroid/views/LocalRepoActivity.java index 411caed54..88cf18ea4 100644 --- a/src/org/fdroid/fdroid/views/LocalRepoActivity.java +++ b/src/org/fdroid/fdroid/views/LocalRepoActivity.java @@ -23,6 +23,7 @@ import android.widget.*; import org.fdroid.fdroid.*; import org.fdroid.fdroid.localrepo.LocalRepoKeyStore; +import org.fdroid.fdroid.localrepo.LocalRepoManager; import org.fdroid.fdroid.localrepo.LocalRepoService; import org.fdroid.fdroid.net.WifiStateChangeService; import org.spongycastle.operator.OperatorCreationException; @@ -73,7 +74,7 @@ public class LocalRepoActivity extends Activity { LocalBroadcastManager.getInstance(this).registerReceiver(onLocalRepoChange, new IntentFilter(LocalRepoService.STATE)); // if no local repo exists, create one with only FDroid in it - if (!FDroidApp.localRepo.xmlIndex.exists()) + if (!LocalRepoManager.get(this).xmlIndex.exists()) new UpdateAsyncTask(this, new String[] { getPackageName(), }).execute(); @@ -321,26 +322,27 @@ public class LocalRepoActivity extends Activity { @Override protected Void doInBackground(Void... params) { try { + final LocalRepoManager lrm = LocalRepoManager.get(LocalRepoActivity.this); publishProgress(getString(R.string.deleting_repo)); - FDroidApp.localRepo.deleteRepo(); + lrm.deleteRepo(); for (String app : selectedApps) { publishProgress(String.format(getString(R.string.adding_apks_format), app)); - FDroidApp.localRepo.addApp(getApplicationContext(), app); + lrm.addApp(getApplicationContext(), app); } - FDroidApp.localRepo.writeIndexPage(sharingUri.toString()); + lrm.writeIndexPage(sharingUri.toString()); publishProgress(getString(R.string.writing_index_xml)); - FDroidApp.localRepo.writeIndexXML(); + lrm.writeIndexXML(); publishProgress(getString(R.string.writing_index_jar)); - FDroidApp.localRepo.writeIndexJar(); + lrm.writeIndexJar(); publishProgress(getString(R.string.linking_apks)); - FDroidApp.localRepo.copyApksToRepo(); + lrm.copyApksToRepo(); publishProgress(getString(R.string.copying_icons)); // run the icon copy without progress, its not a blocker new AsyncTask() { @Override protected Void doInBackground(Void... params) { - FDroidApp.localRepo.copyIconsToRepo(); + lrm.copyIconsToRepo(); return null; } }.execute(); diff --git a/src/org/fdroid/fdroid/views/fragments/SelectLocalAppsFragment.java b/src/org/fdroid/fdroid/views/fragments/SelectLocalAppsFragment.java index 24b254cc6..785b9ac25 100644 --- a/src/org/fdroid/fdroid/views/fragments/SelectLocalAppsFragment.java +++ b/src/org/fdroid/fdroid/views/fragments/SelectLocalAppsFragment.java @@ -26,7 +26,6 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; -import android.util.Log; import android.view.ActionMode; import android.view.View; import android.widget.*; @@ -37,6 +36,7 @@ import org.fdroid.fdroid.FDroidApp; import org.fdroid.fdroid.R; import org.fdroid.fdroid.data.InstalledAppProvider; import org.fdroid.fdroid.data.InstalledAppProvider.DataColumns; +import org.fdroid.fdroid.localrepo.LocalRepoManager; import org.fdroid.fdroid.views.SelectLocalAppsActivity; import java.util.HashSet; @@ -113,7 +113,7 @@ public class SelectLocalAppsFragment extends ListFragment // build list of existing apps from what is on the file system if (FDroidApp.selectedApps == null) { FDroidApp.selectedApps = new HashSet(); - for (String filename : FDroidApp.localRepo.repoDir.list()) { + for (String filename : LocalRepoManager.get(selectLocalAppsActivity).repoDir.list()) { if (filename.matches(".*\\.apk")) { String packageName = filename.substring(0, filename.indexOf("_")); FDroidApp.selectedApps.add(packageName);