From 87b82a67514432a4496af9e73b5a8c93ce90a6d2 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Sun, 29 Jun 2014 08:09:30 +0930 Subject: [PATCH] Bring the swap website (hosted on the phone) in line with new designs. The website now also has icons which it needs to worry about copying across to the webroot, so I refactored the "symlink webroot to other folders - such as /fdroid and /fdroid/repo". --- assets/index.template.html | 137 ++++++++++++------ assets/swap-icon.png | Bin 0 -> 4944 bytes assets/swap-icon.svg | 48 ++++++ assets/swap-tick-done.png | Bin 0 -> 1255 bytes assets/swap-tick-not-done.png | Bin 0 -> 1155 bytes .../fdroid/localrepo/LocalRepoManager.java | 62 +++++--- 6 files changed, 181 insertions(+), 66 deletions(-) create mode 100644 assets/swap-icon.png create mode 100644 assets/swap-icon.svg create mode 100644 assets/swap-tick-done.png create mode 100644 assets/swap-tick-not-done.png diff --git a/assets/index.template.html b/assets/index.template.html index fe48db91f..fd77b404b 100644 --- a/assets/index.template.html +++ b/assets/index.template.html @@ -1,65 +1,114 @@ + "http://www.w3.org/TR/html4/strict.dtd"> - - - {{REPO_URL}} local FDroid repo - - - - - + + + F-Droid swap + + + - -

Kerplapp Bootstrap

-
    -
  1. Find a Kerplapp Repo
  2. -
  3. Download F-Droid client
  4. -
  5. Install F-Droid client
  6. -
  7. Add Kerplapp Repo to F-Droid client
  8. -
  9. Kerplapp an App!
  10. -
- + ol > li a { + font-family: "Roboto", Helvetica, sans-serif; + font-weight: bold; + color: #fff; + } + + #download-from-web { + padding-left: 2em; + padding-right: 2em; + } + + + + + + + +

You're minutes away from having swap success!

+
    +
  1. + Find a swap + Done +
  2. +
  3. + Download F-Droid + Not done +
  4. +
  5. + Install F-Droid + Not done +
  6. +
  7. + Add the swap to F-Droid + Not done +
  8. +
  9. + Install the apps you want + Not done +
  10. +
+
+ + Or, download apps from the web + +
+ diff --git a/assets/swap-icon.png b/assets/swap-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..50a5852d8aaa6fa338bc0bc1cf47a41ea9e662c2 GIT binary patch literal 4944 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 + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/assets/swap-tick-done.png b/assets/swap-tick-done.png new file mode 100644 index 0000000000000000000000000000000000000000..c50f409472c4c9f93d8b0409dfab97af71e5d969 GIT binary patch literal 1255 zcmVK~!jg?b}<3)m0S7@sE;LM3ayfF&0FqAeGgF-ER;GDHfQ} zMJlr>gI=sCm3oPaph%;nddQN>h;AA|8fBW6RN8|?Wl~90MwVsT&CBXxJ1~x?Gv|Lh z=gdrB_&?15?EPQs{ATU_UwiF+21SJbaReU1>sWG7i=Al)CgE{(;sh)iG=L-JNX*Ao zJ?@_}P(`^6kKw2qpDi3{!{=y8j45^6j2he|XWD^j_*8vC)?ng5h?GugBAwJrySH%( zcJ}v3xn7En-UNALUz?rKUnAvkEL4A}bn!B-z^<+v{ZW*$cm-n`X!|U##h&gr``hrj z93N^-kSB4C9)i$+L>VF_VvBKD1MTPGM(nNiVSgAtop=#vHQ4?>%&pg;uSd#-Sg&zG z=ITWd`nD){;4QUN^;*o9qNG>);@YPJ&*0JweV)RMMjQ7vQAS`HPR-C~6)w^(59y7* zB+7Bpa2cJU&sP|apR*Y1D|5;itd>oX-=x$%lOXgBQBK2qI5tC{JyIg~SssJ!F3NdW zAMInpko%)o;=``#thS4*QE=9H;; zLB4;`2RK)aLQxUAM42LGi$CYKVxA zh*%u?*%T2sMZ_Typ@C~uMEqF5-nNJs*`TdlSNA`rN5qZ-&Tff_IT10ej=_-;vAKYa zh=^%*o?p5sB4TtztS{*F_K3JMB8K#M_K1l1yx_B6ii!n^8ls4Zp%L+LMC>j21vW&) znfspE5fSSOK5t7z438#=QZG-r7*ET-Y~OFnk~W>jO8G<)CQHY!DyO&P?HDYQYMiZP zA+Bqdu|_i5!P2UAX7%pWWHV02_GTGuB(>g)n{ju=zSJTxT@wW%+j`?3+@R!jMlZ~l zGU%p~XF)hwTEHDzzB~J|QObP(s@To}!@t2I{8zD*kmLbW@DtEJ!N z)nk=(Ah@lldWY~}e2f!oe6~kA(6^yV2l7z$Uh?14FsgMjae+1zgyw9pf8xOWm&(RfrD#|OH{jt1B9BmUiS4x=bf z;S-$5(e_VV)FcRpPm~wL40$3)+g1FmMGy{;C}SdayqdH9GJfgw=3x+JN-URWa<;#Q zg>DT-U6j-KSo_Sh9ScH~u8guMuj5Uzbn=i(5Jpp!aeRp96P{UkGyP)Of|_07!^@Yh#7J`;hBdxhrQI!MnRNQLXd8!+g39Cfcr%{ z9ClG=@R{^+Ucq|NPKQ~PGa@O=ld?CnA~M#(467(}V%yD|gEY8}%l&pfjH0|OEW=bm zwnQB1+jJf_QQi<)YAO%JPV=CQK^!aNLrUT`#RO^WG+Sj2WLQLL*oH+|6tSc{9<7qLlcC#k)SfslmA-W?{ z=zf{Orycsu!&N25k!HrSESnc*O`#_I*EBanfP3Tb$nOw*`ADLSvHRM zh3Q*_ZLzM`JgS@YU>aY_@0PXl0AGt4TnWtu_7_Fcl$usI*cIvZiq84M6uy#n+HK{6 zC{0vG>#c)n;d!Q*IITPsF4vO(E~^PKL-N#PI&od(B$d+cD#kIqC4ae~6MqTEYf}XD zdHspKE0#^wJ7QZ=8k`Y_vJ@Yq9V?=0H`C|moX5>RKO+~tF6~T;?fTg|2GfN#T&ka^z6`l^iXO%`@r?+ARd7QeZhXJ=HJNtAmR;sjT2j8yNtEHdZE3n$*eBZ(ZUm zhhJM>+cP-RswZ_7*sqDQYl8*VTMvb)OO#A3qkSRHYEAtXqVBKYz9K}q+oRn;`3L9j V?i`aQmwf;L002ovPDHLkV1o2J8^-_u literal 0 HcmV?d00001 diff --git a/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java b/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java index f0ff3fe42..5da82ef8e 100644 --- a/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java +++ b/src/org/fdroid/fdroid/localrepo/LocalRepoManager.java @@ -28,6 +28,14 @@ import org.fdroid.fdroid.data.App; import org.w3c.dom.Document; import org.w3c.dom.Element; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; @@ -50,15 +58,6 @@ import java.util.Map.Entry; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - public class LocalRepoManager { private static final String TAG = "LocalRepoManager"; @@ -74,6 +73,12 @@ public class LocalRepoManager { private String ipAddressString = "UNSET"; private String uriString = "UNSET"; + private static String[] WEB_ROOT_ASSET_FILES = { + "swap-icon.png", + "swap-tick-done.png", + "swap-tick-not-done.png" + }; + private Map apps = new HashMap(); public final File xmlIndex; @@ -159,30 +164,43 @@ public class LocalRepoManager { } in.close(); out.close(); + + for (String file : WEB_ROOT_ASSET_FILES) { + Utils.copy(assetManager.open(file), new FileOutputStream(new File(webRoot, file))); + } + // make symlinks/copies in each subdir of the repo to make sure that // the user will always find the bootstrap page. - File fdroidDirIndex = new File(fdroidDir, "index.html"); - fdroidDirIndex.delete(); - Utils.symlinkOrCopyFile(new File("../index.html"), fdroidDirIndex); - File repoDirIndex = new File(repoDir, "index.html"); - repoDirIndex.delete(); - Utils.symlinkOrCopyFile(new File("../../index.html"), repoDirIndex); + symlinkIndexPageElsewhere("../", fdroidDir); + symlinkIndexPageElsewhere("../../", repoDir); + // add in /FDROID/REPO to support bad QR Scanner apps File fdroidCAPS = new File(fdroidDir.getParentFile(), "FDROID"); fdroidCAPS.mkdir(); + File repoCAPS = new File(fdroidCAPS, "REPO"); repoCAPS.mkdir(); - File fdroidCAPSIndex = new File(fdroidCAPS, "index.html"); - fdroidCAPSIndex.delete(); - Utils.symlinkOrCopyFile(new File("../index.html"), fdroidCAPSIndex); - File repoCAPSIndex = new File(repoCAPS, "index.html"); - repoCAPSIndex.delete(); - Utils.symlinkOrCopyFile(new File("../../index.html"), repoCAPSIndex); + + symlinkIndexPageElsewhere("../", fdroidCAPS); + symlinkIndexPageElsewhere("../../", repoCAPS); + } catch (IOException e) { e.printStackTrace(); } } + private void symlinkIndexPageElsewhere(String symlinkPrefix, File directory) { + File index = new File(directory, "index.html"); + index.delete(); + Utils.symlinkOrCopyFile(new File(symlinkPrefix + "index.html"), index); + + for(String fileName : WEB_ROOT_ASSET_FILES) { + File file = new File(directory, fileName); + file.delete(); + Utils.symlinkOrCopyFile(new File(symlinkPrefix + fileName), file); + } + } + private void deleteContents(File path) { if (path.exists()) { for (File file : path.listFiles()) { @@ -225,7 +243,7 @@ public class LocalRepoManager { public void addApp(Context context, String packageName) { App app; try { - app = new App(context, pm, packageName); + app = new App(context.getApplicationContext(), pm, packageName); if (!app.isValid()) return; PackageInfo packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_META_DATA);