+
+
+
diff --git a/extern/nanohttpd b/extern/nanohttpd
new file mode 160000
index 000000000..58f73260e
--- /dev/null
+++ b/extern/nanohttpd
@@ -0,0 +1 @@
+Subproject commit 58f73260ed98df878bae1051dc8e6a0bce842fcb
diff --git a/libs/core-3.0.1.jar b/libs/core-3.0.1.jar
new file mode 100644
index 000000000..d1b35fcbb
Binary files /dev/null and b/libs/core-3.0.1.jar differ
diff --git a/libs/core-3.0.1.jar.README b/libs/core-3.0.1.jar.README
new file mode 100644
index 000000000..8535081d5
--- /dev/null
+++ b/libs/core-3.0.1.jar.README
@@ -0,0 +1,17 @@
+zxing
+-----
+
+ZXing ("zebra crossing") is an open-source, multi-format 1D/2D barcode image
+processing library implemented in Java, with ports to other languages.
+
+https://github.com/zxing/zxing
+
+Building zxing from scratch is a massive pain, so we use the official jar.
+The main source repo is SVN, so we couldn't do a git submodule anyway.
+
+The releases should be signed by this key:
+Sean Owen (ZXing)
+CE32 85F3 2068 5193 D11F EA01 F6CE 9695 C931 8406
+
+http://central.maven.org/maven2/com/google/zxing/core/3.0.1/core-3.0.1.jar
+http://central.maven.org/maven2/com/google/zxing/core/3.0.1/core-3.0.1.jar.asc
diff --git a/res/layout/local_repo_activity.xml b/res/layout/local_repo_activity.xml
new file mode 100644
index 000000000..81ba324ca
--- /dev/null
+++ b/res/layout/local_repo_activity.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/qr_wizard_activity.xml b/res/layout/qr_wizard_activity.xml
new file mode 100644
index 000000000..5d2fac14a
--- /dev/null
+++ b/res/layout/qr_wizard_activity.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/select_local_apps_activity.xml b/res/layout/select_local_apps_activity.xml
new file mode 100644
index 000000000..9734b2fd5
--- /dev/null
+++ b/res/layout/select_local_apps_activity.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/res/menu/local_repo_activity.xml b/res/menu/local_repo_activity.xml
new file mode 100644
index 000000000..b81b2a670
--- /dev/null
+++ b/res/menu/local_repo_activity.xml
@@ -0,0 +1,20 @@
+
+
diff --git a/res/menu/select_local_apps_action_mode.xml b/res/menu/select_local_apps_action_mode.xml
new file mode 100644
index 000000000..2550ebcfe
--- /dev/null
+++ b/res/menu/select_local_apps_action_mode.xml
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/res/menu/select_local_apps_activity.xml b/res/menu/select_local_apps_activity.xml
new file mode 100644
index 000000000..0d2d96089
--- /dev/null
+++ b/res/menu/select_local_apps_activity.xml
@@ -0,0 +1,10 @@
+
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e8e837990..ae4f18a66 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -150,8 +150,33 @@
What\'s NewRecently Updated
+ Local RepoLocal FDroid ReposDiscovering local FDroid repos…
+ Your local FDroid repo is accessible.
+ Setup Local Repo
+ Touch to setup your local repo.
+ Updating…
+ Update Repo
+ Deleting current repo…
+ Adding %s to repo…
+ Writing raw index file (index.xml)…
+ Linking APKs into the repo…
+ Copying app icons into the repo…
+ Finished updating local repo
+ No applications found
+ icon
+ Fingerprint:
+ WiFi Network:
+ Enable WiFi
+ Enabling WiFi…
+ To connect to other people\'s devices, make sure both devices are on the same WiFi network. Then either type the URL above into F-Droid, or scan this QR Code:
+ QR Code
+ Next
+ QR Code of repo URL
+ Scan this QR Code to connect to the same WiFi network as this device.
+ Scan this QR Code to connect to the website for getting started.
+ Send FDroid via WiFi…
\n" +
+ "" +
+ "
" + heading + "
");
+
+ String up = null;
+ if (uri.length() > 1) {
+ String u = uri.substring(0, uri.length() - 1);
+ int slash = u.lastIndexOf('/');
+ if (slash >= 0 && slash < u.length()) {
+ up = uri.substring(0, slash + 1);
+ }
+ }
+
+ List files = Arrays.asList(f.list(new FilenameFilter() {
+ @Override
+ public boolean accept(File dir, String name) {
+ return new File(dir, name).isFile();
+ }
+ }));
+ Collections.sort(files);
+ List directories = Arrays.asList(f.list(new FilenameFilter() {
+ @Override
+ public boolean accept(File dir, String name) {
+ return new File(dir, name).isDirectory();
+ }
+ }));
+ Collections.sort(directories);
+ if (up != null || directories.size() + files.size() > 0) {
+ msg.append("