new icon, new about dialog, some refactorings

This commit is contained in:
Dominik committed 2012-03-09 18:43:10 +01:00
1 parent 8452fb62b7
commit 4a8d9694c4
86 files changed
+1044 -132

No files matched your search

+6 -1
View File
@@ -8,7 +8,7 @@
android:versionName="1.1" > android:versionName="1.1" >
<uses-sdk <uses-sdk
android:minSdkVersion="3" android:minSdkVersion="4"
android:targetSdkVersion="14" /> android:targetSdkVersion="14" />
<permission <permission
@@ -197,6 +197,11 @@
android:name=".ui.ImportFromQRCodeActivity" android:name=".ui.ImportFromQRCodeActivity"
android:configChanges="keyboardHidden|orientation|keyboard" android:configChanges="keyboardHidden|orientation|keyboard"
android:label="@string/title_importFromQRCode" /> android:label="@string/title_importFromQRCode" />
<activity
android:name=".ui.AboutActivity"
android:excludeFromRecents="true"
android:label="@string/title_about"
android:theme="@android:style/Theme.Dialog" />
<service android:name=".Service" /> <service android:name=".Service" />
<service <service
+16
View File
@@ -0,0 +1,16 @@
The following open source projects are used in APG:
* ZXing QRCode Integration
http://code.google.com/p/zxing/
Apache License v2
* SpongyCastle
https://github.com/rtyley/spongycastle
MIT X11 License
Images:
* icon.svg
modified version of GnuPG Logo (not)
http://openclipart.org/detail/15078/gnupg-logo-(not)-by-mrbordello
Public Domain
+739
View File
@@ -0,0 +1,739 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="16.879999"
inkscape:export-xdpi="16.879999"
inkscape:export-filename="/home/ds1/Projekte/APG Plus/res/drawable-xhdpi/icon.png"
version="1.0"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
sodipodi:docname="icon.svg"
inkscape:version="0.48.1 r9760"
sodipodi:version="0.32"
id="svg2"
height="512"
width="512">
<defs
id="defs4">
<linearGradient
id="linearGradient7008">
<stop
style="stop-color:#666666;stop-opacity:1;"
offset="0"
id="stop7010" />
<stop
style="stop-color:#d2d6d0;stop-opacity:1;"
offset="1"
id="stop7012" />
</linearGradient>
<linearGradient
id="linearGradient5479"
osb:paint="solid">
<stop
style="stop-color:#b3b3b3;stop-opacity:1;"
offset="0"
id="stop5481" />
</linearGradient>
<linearGradient
id="linearGradient4957">
<stop
id="stop4959"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop4961"
offset="1"
style="stop-color:#b6b3ac;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient4905">
<stop
style="stop-color:#00c2e6;stop-opacity:1;"
offset="0"
id="stop4907" />
<stop
style="stop-color:#007fa2;stop-opacity:1;"
offset="1"
id="stop4909" />
</linearGradient>
<linearGradient
id="linearGradient3861">
<stop
style="stop-color:#75a5ce;stop-opacity:1;"
offset="0"
id="stop3863" />
<stop
style="stop-color:#75a5ce;stop-opacity:1;"
offset="1"
id="stop3865" />
</linearGradient>
<linearGradient
id="linearGradient3849">
<stop
style="stop-color:#00789a;stop-opacity:1;"
offset="0"
id="stop3851" />
<stop
style="stop-color:#50789a;stop-opacity:1;"
offset="1"
id="stop3853" />
</linearGradient>
<linearGradient
id="linearGradient2201">
<stop
id="stop2203"
offset="0"
style="stop-color:#d5d5d5;stop-opacity:1;" />
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0.22727273"
id="stop2207" />
<stop
id="stop3082"
offset="0.87706614"
style="stop-color:#d1d1d1;stop-opacity:1;" />
<stop
id="stop2205"
offset="1"
style="stop-color:#afafaf;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient2191">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop2193" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop2195" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2201"
id="linearGradient2199"
x1="320.69421"
y1="285.6604"
x2="253.32147"
y2="591.70483"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.93617,296.44,-189.045)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4905"
id="linearGradient4911"
x1="277.07236"
y1="211.8645"
x2="276.87354"
y2="552.9649"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0112027,0,-2.3678154)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient4955"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient5065"
gradientUnits="userSpaceOnUse"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient5067"
gradientUnits="userSpaceOnUse"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient5069"
gradientUnits="userSpaceOnUse"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient5071"
gradientUnits="userSpaceOnUse"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient5073"
gradientUnits="userSpaceOnUse"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient5075"
gradientUnits="userSpaceOnUse"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient5079"
gradientUnits="userSpaceOnUse"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient5082"
gradientUnits="userSpaceOnUse"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient5085"
gradientUnits="userSpaceOnUse"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient5088"
gradientUnits="userSpaceOnUse"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient5091"
gradientUnits="userSpaceOnUse"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298"
gradientTransform="translate(-8.0847263,-100.8597)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient5137"
gradientUnits="userSpaceOnUse"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298"
gradientTransform="translate(-8.0847263,-100.8597)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient5140"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-8.0847263,-100.8597)"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient5148"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-8.0847263,-100.8597)"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient5151"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-8.0847263,-100.8597)"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient5154"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-8.0847263,-100.8597)"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<filter
id="filter5214"
inkscape:label="Drop shadow"
width="1.5"
height="1.5"
x="-.25"
y="-.25">
<feGaussianBlur
id="feGaussianBlur5216"
in="SourceAlpha"
stdDeviation="2"
result="blur" />
<feColorMatrix
id="feColorMatrix5218"
result="bluralpha"
type="matrix"
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0.5 0 " />
<feOffset
id="feOffset5220"
in="bluralpha"
dx="0"
dy="6"
result="offsetBlur" />
<feMerge
id="feMerge5222">
<feMergeNode
id="feMergeNode5224"
in="offsetBlur" />
<feMergeNode
id="feMergeNode5226"
in="SourceGraphic" />
</feMerge>
</filter>
<filter
inkscape:collect="always"
id="filter5475">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="1.1836883"
id="feGaussianBlur5477" />
</filter>
<filter
inkscape:collect="always"
id="filter6936">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.72311148"
id="feGaussianBlur6938" />
</filter>
<filter
inkscape:collect="always"
id="filter6944">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.69609809"
id="feGaussianBlur6946" />
</filter>
<filter
inkscape:collect="always"
id="filter6952">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.68277711"
id="feGaussianBlur6954" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient6956"
gradientUnits="userSpaceOnUse"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient6978"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-8.0847263,-100.8597)"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient6980"
gradientUnits="userSpaceOnUse"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient6982"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-8.0847263,-100.8597)"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4957"
id="linearGradient6984"
gradientUnits="userSpaceOnUse"
x1="265.73489"
y1="232.44435"
x2="262.43457"
y2="535.43298" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient7008"
id="linearGradient7014"
x1="215.32114"
y1="561.41132"
x2="215.79901"
y2="207.90399"
gradientUnits="userSpaceOnUse" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.37106997"
inkscape:cx="202.2058"
inkscape:cy="175.87027"
inkscape:document-units="px"
inkscape:current-layer="layer1"
inkscape:window-width="1278"
inkscape:window-height="779"
inkscape:window-x="0"
inkscape:window-y="19"
showgrid="false"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-8.0847263,-100.8597)">
<image
y="-80.79155"
x="-799.50232"
id="image4902"
xlink:href="data:image/png;base64,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
"
height="697.32062"
width="697.32062" />
<rect
style="fill:#cab6b2;fill-opacity:1;stroke:#e6e6e6;stroke-width:7.59385872;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter6952)"
id="rect5269-9"
width="415.09143"
height="40.093307"
x="54.771664"
y="161.00397"
transform="matrix(1.0443987,0,0,1.0443987,-9.5360611,-20.336718)" />
<rect
style="fill:#00bee3;fill-rule:evenodd;stroke:#00e0f4;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter6944)"
x="48.620232"
y="178.68233"
clip-rule="evenodd"
width="430.92899"
height="33.13641"
id="rect4077"
transform="matrix(1.0443987,0,0,1.0443987,-9.5360611,-20.336718)" />
<rect
style="fill:#cab6b2;fill-opacity:1;stroke:#ececec;stroke-width:6.39377022;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter6936)"
id="rect5269"
width="449.6232"
height="32.451118"
x="38.901093"
y="193.63016"
transform="matrix(1.0443987,0,0,1.0443987,-9.5360611,-20.336718)" />
<path
transform="matrix(1.0443987,0,0,1.0443987,-9.5360611,-20.336718)"
style="fill:url(#linearGradient4911);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7014);stroke-width:5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter5475)"
d="m 38.873764,211.36108 451.425746,0 -6.45086,342.72265 -438.524022,1.29017 z"
id="rect4081"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<g
id="g6972"
transform="translate(0,30.267528)">
<path
id="path4097"
transform="matrix(1.0443987,0,0,1.0443987,-1.0923835,85.001022)"
d="m 162.03125,133.9375 c -49.54172,0 -89.6875,39.31605 -89.6875,87.875 0,48.52912 40.14578,87.90625 89.6875,87.90625 49.52683,0 89.65625,-39.36219 89.65625,-87.90625 0,-48.55895 -40.12942,-87.8898 -89.65625,-87.875 z M 127,179.5 c 15.431,-0.18063 30.22296,9.49659 36.53125,23.53125 1.1589,2.33661 2.03044,4.7691 2.625,7.25 l 67.84375,0 0,13.96875 0,6.96875 0,27.9375 -17.15625,0 0,-27.9375 -5.0625,0 0,22.4375 -16.28125,0 0,-22.4375 -30.28125,0 c -3.71161,11.68619 -12.49891,21.87072 -24.25,25.90625 -21.85981,8.94251 -48.933986,-6.26108 -53.15625,-29.3125 -5.704275,-23.08531 13.88377,-48.31905 37.71875,-48.28125 0.49884,-0.0265 0.97098,-0.0254 1.46875,-0.0312 z m 0.28125,15.25 c -4.75625,-0.039 -9.49795,1.29027 -13.53125,3.875 -13.9155,8.00528 -15.08095,29.07247 -3.3125,39.375 11.76556,11.32313 32.91529,6.54173 39.3125,-8.375 7.63441,-15.14179 -5.42735,-35.43389 -22.46875,-34.875 z"
style="fill:url(#linearGradient6978);fill-opacity:1;fill-rule:evenodd;filter:url(#filter5214)"
inkscape:connector-curvature="0" />
<path
transform="matrix(1.0443987,0,0,1.0443987,-9.5360611,-20.336718)"
id="path4099"
d="M 170.0922,462.95886 H 65.648064 c 0,-53.26442 61.677736,-48.23134 61.677736,-48.23134 12.71675,6.77529 27.27996,10.61716 42.7664,10.61716 15.47154,0 30.03476,-3.84187 42.73661,-10.61716 0,0 61.67774,-5.03308 61.67774,48.23134 H 170.0922 z"
clip-rule="evenodd"
inkscape:connector-curvature="0"
style="fill:url(#linearGradient6980);fill-opacity:1;fill-rule:evenodd;filter:url(#filter5214)" />
<path
id="path4097-5"
transform="matrix(1.0443987,0,0,1.0443987,-1.0923835,85.001022)"
d="m 350.03125,133.8125 c -49.54172,0 -89.6875,39.31605 -89.6875,87.875 0,48.52912 40.14578,87.90625 89.6875,87.90625 49.52683,0 89.6875,-39.36219 89.6875,-87.90625 0,-48.55895 -40.16067,-87.8898 -89.6875,-87.875 z m -1.875,32 c 14.41604,-0.16876 28.26288,8.8572 34.15625,21.96875 2.40913,4.85738 3.44286,10.15179 3.34375,15.4375 l 3.8125,0 0,63.21875 -82.5625,0 0,-63.21875 3.71875,0 c 10e-4,-19.10536 16.53325,-37.40611 36.15625,-37.375 0.46603,-0.0248 0.90997,-0.0258 1.375,-0.0312 z m 0.25,14.25 c -4.4434,-0.0364 -8.85699,1.21027 -12.625,3.625 -7.09533,4.08178 -10.62297,11.79948 -10.59375,19.53125 l 46.28125,0 C 371.16721,191.329 360.94367,179.65133 348.40625,180.0625 z"
style="fill:url(#linearGradient6982);fill-opacity:1;fill-rule:evenodd;filter:url(#filter5214)"
inkscape:connector-curvature="0" />
<path
transform="matrix(1.0443987,0,0,1.0443987,-9.5360611,-20.336718)"
id="path4099-4"
d="M 358.10704,462.8403 H 253.66291 c 0,-53.26442 61.67773,-48.23134 61.67773,-48.23134 12.71675,6.77529 27.27995,10.61717 42.7664,10.61717 15.47154,0 30.03476,-3.84188 42.73661,-10.61717 0,0 61.67774,-5.03308 61.67774,48.23134 H 358.10704 z"
clip-rule="evenodd"
inkscape:connector-curvature="0"
style="fill:url(#linearGradient6984);fill-opacity:1;fill-rule:evenodd;filter:url(#filter5214)" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 34 KiB

+21
View File
@@ -0,0 +1,21 @@
Launcher Icon:
-----------------------
ldpi: 36x36
mdpi: 48x48
hdpi: 72x72
xhdpi: 96x96
google code: 55x55
android market: 512x512
Status Bar Icon:
-----------------------
Android < 3.0
ldpi: 12x19
mdpi: 16x25
hdpi: 24x38
Android > 3.0
ldpi: 18x18
mdpi: 24x24
hdpi: 36x36
xhdpi: 48x48
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

File renamed without changes.
File renamed without changes.
File renamed without changes.
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

File renamed without changes.
File renamed without changes.
File renamed without changes.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

File renamed without changes.
File renamed without changes.
File renamed without changes.
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

+97
View File
@@ -0,0 +1,97 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:isScrollContainer="true"
android:orientation="vertical"
android:paddingBottom="15dp"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:scrollbars="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:layout_marginRight="10dp"
android:src="@drawable/icon" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textStyle="bold" />
<TextView
android:id="@+id/about_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@android:style/TextAppearance.Small" />
</LinearLayout>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:autoLink="web"
android:text="@string/about_url"
android:textAppearance="@android:style/TextAppearance.Small" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/about_description"
android:textAppearance="@android:style/TextAppearance.Small" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/about_license"
android:textAppearance="@android:style/TextAppearance.Small" />
<!-- <TextView -->
<!-- android:layout_width="wrap_content" -->
<!-- android:layout_height="wrap_content" -->
<!-- android:layout_marginTop="8dp" -->
<!-- android:text="@string/about_developer" -->
<!-- android:textAppearance="@android:style/TextAppearance.Small" /> -->
<!-- <TextView -->
<!-- android:layout_width="wrap_content" -->
<!-- android:layout_height="wrap_content" -->
<!-- android:layout_marginTop="8dp" -->
<!-- android:text="@string/about_icons" -->
<!-- android:textAppearance="@android:style/TextAppearance.Small" /> -->
<!-- <TextView -->
<!-- android:layout_width="wrap_content" -->
<!-- android:layout_height="wrap_content" -->
<!-- android:layout_marginTop="8dp" -->
<!-- android:text="@string/about_libs" -->
<!-- android:textAppearance="@android:style/TextAppearance.Small" /> -->
</LinearLayout>
</ScrollView>
+2 -1
View File
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="app_name">APG Plus</string> <string name="app_name" translate="false">APG+</string>
<string name="about_url" translate="false">https://github.com/dschuermann/apg</string>
</resources> </resources>
+9 -2
View File
@@ -46,7 +46,8 @@
<string name="title_unknownSignatureKey">Unknown Signature Key</string> <string name="title_unknownSignatureKey">Unknown Signature Key</string>
<string name="title_importFromQRCode">Import from QR Code</string> <string name="title_importFromQRCode">Import from QR Code</string>
<string name="title_signKey">Sign Key</string> <string name="title_signKey">Sign Key</string>
<string name="title_about">About</string>
<!-- section_lowerCase: capitalized words, no punctuation --> <!-- section_lowerCase: capitalized words, no punctuation -->
<string name="section_userIds">User IDs</string> <string name="section_userIds">User IDs</string>
<string name="section_keys">Keys</string> <string name="section_keys">Keys</string>
@@ -314,7 +315,13 @@
<string name="fast">fast</string> <string name="fast">fast</string>
<string name="slow">slow</string> <string name="slow">slow</string>
<string name="very_slow">very slow</string> <string name="very_slow">very slow</string>
<!-- about -->
<string name="about_description">Android Privacy Guard (APG) is a OpenPGP implementation for Android.</string>
<string name="about_license">License: Apache License 2.0</string>
<string name="about_version">Version:</string>
<string name="about_developer">Developer: ...</string>
<!-- texts --> <!-- texts -->
<!-- "OI File Manager", "ASTRO", and "K-9 Mail" must not be translated in order for the links to the market to work. --> <!-- "OI File Manager", "ASTRO", and "K-9 Mail" must not be translated in order for the links to the market to work. -->
<string name="text_help">Install K-9 Mail for the best integration, it supports APG for PGP/INLINE and lets you directly encrypt/decrypt emails. <string name="text_help">Install K-9 Mail for the best integration, it supports APG for PGP/INLINE and lets you directly encrypt/decrypt emails.
+2 -2
View File
@@ -1966,8 +1966,8 @@ public class Apg {
} }
if (signatureKey == null) { if (signatureKey == null) {
Bundle pauseData = new Bundle(); Bundle pauseData = new Bundle();
pauseData.putInt(Constants.extras.status, Id.message.unknown_signature_key); pauseData.putInt(Constants.extras.STATUS, Id.message.unknown_signature_key);
pauseData.putLong(Constants.extras.key_id, signatureKeyId); pauseData.putLong(Constants.extras.KEY_ID, signatureKeyId);
Message msg = new Message(); Message msg = new Message();
msg.setData(pauseData); msg.setData(pauseData);
context.sendMessage(msg); context.sendMessage(msg);
+19 -19
View File
@@ -20,35 +20,35 @@ import android.os.Environment;
public final class Constants { public final class Constants {
public static final String tag = "APG"; public static final String TAG = "APG";
public static final class path { public static final class path {
public static final String app_dir = Environment.getExternalStorageDirectory() + "/APG"; public static final String APP_DIR = Environment.getExternalStorageDirectory() + "/APG";
} }
public static final class pref { public static final class pref {
public static final String has_seen_help = "seenHelp"; public static final String HAS_SEEN_HELP = "seenHelp";
public static final String has_seen_change_log = "seenChangeLogDialog"; public static final String HAS_SEEN_CHANGE_LOG = "seenChangeLogDialog";
public static final String default_encryption_algorithm = "defaultEncryptionAlgorithm"; public static final String DEFAULT_ENCRYPTION_ALGORITHM = "defaultEncryptionAlgorithm";
public static final String default_hash_algorithm = "defaultHashAlgorithm"; public static final String DEFAULT_HASH_ALGORITHM = "defaultHashAlgorithm";
public static final String default_ascii_armour = "defaultAsciiArmour"; public static final String DEFAULT_ASCII_ARMOUR = "defaultAsciiArmour";
public static final String default_message_compression = "defaultMessageCompression"; public static final String DEFAULT_MESSAGE_COMPRESSION = "defaultMessageCompression";
public static final String default_file_compression = "defaultFileCompression"; public static final String DEFAULT_FILE_COMPRESSION = "defaultFileCompression";
public static final String pass_phrase_cache_ttl = "passPhraseCacheTtl"; public static final String PASS_PHRASE_CACHE_TTL = "passPhraseCacheTtl";
public static final String language = "language"; public static final String LANGUAGE = "language";
public static final String force_v3_signatures = "forceV3Signatures"; public static final String FORCE_V3_SIGNATURES = "forceV3Signatures";
public static final String key_servers = "keyServers"; public static final String KEY_SERVERS = "keyServers";
} }
public static final class defaults { public static final class defaults {
public static final String key_servers = "pool.sks-keyservers.net, subkeys.pgp.net, pgp.mit.edu"; public static final String KEY_SERVERS = "pool.sks-keyservers.net, subkeys.pgp.net, pgp.mit.edu";
} }
public static final class extras { public static final class extras {
public static final String progress = "progress"; public static final String PROGRESS = "progress";
public static final String progress_max = "max"; public static final String PROGRESS_MAX = "max";
public static final String status = "status"; public static final String STATUS = "status";
public static final String message = "message"; public static final String MESSAGE = "message";
public static final String key_id = "keyId"; public static final String KEY_ID = "keyId";
} }
} }
+1 -1
View File
@@ -88,7 +88,7 @@ public final class Id {
public static final int export_keys = 0x2107000c; public static final int export_keys = 0x2107000c;
public static final int exporting = 0x2107000d; public static final int exporting = 0x2107000d;
public static final int new_account = 0x2107000e; public static final int new_account = 0x2107000e;
public static final int about = 0x2107000f; // public static final int about = 0x2107000f;
public static final int change_log = 0x21070010; public static final int change_log = 0x21070010;
public static final int output_filename = 0x21070011; public static final int output_filename = 0x21070011;
public static final int delete_file = 0x21070012; public static final int delete_file = 0x21070012;
+23 -23
View File
@@ -28,17 +28,17 @@ public class Preferences {
} }
public String getLanguage() { public String getLanguage() {
return mSharedPreferences.getString(Constants.pref.language, ""); return mSharedPreferences.getString(Constants.pref.LANGUAGE, "");
} }
public void setLanguage(String value) { public void setLanguage(String value) {
SharedPreferences.Editor editor = mSharedPreferences.edit(); SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putString(Constants.pref.language, value); editor.putString(Constants.pref.LANGUAGE, value);
editor.commit(); editor.commit();
} }
public int getPassPhraseCacheTtl() { public int getPassPhraseCacheTtl() {
int ttl = mSharedPreferences.getInt(Constants.pref.pass_phrase_cache_ttl, 180); int ttl = mSharedPreferences.getInt(Constants.pref.PASS_PHRASE_CACHE_TTL, 180);
// fix the value if it was set to "never" in previous versions, which currently is not // fix the value if it was set to "never" in previous versions, which currently is not
// supported // supported
if (ttl == 0) { if (ttl == 0) {
@@ -49,97 +49,97 @@ public class Preferences {
public void setPassPhraseCacheTtl(int value) { public void setPassPhraseCacheTtl(int value) {
SharedPreferences.Editor editor = mSharedPreferences.edit(); SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putInt(Constants.pref.pass_phrase_cache_ttl, value); editor.putInt(Constants.pref.PASS_PHRASE_CACHE_TTL, value);
editor.commit(); editor.commit();
} }
public int getDefaultEncryptionAlgorithm() { public int getDefaultEncryptionAlgorithm() {
return mSharedPreferences.getInt(Constants.pref.default_encryption_algorithm, return mSharedPreferences.getInt(Constants.pref.DEFAULT_ENCRYPTION_ALGORITHM,
PGPEncryptedData.AES_256); PGPEncryptedData.AES_256);
} }
public void setDefaultEncryptionAlgorithm(int value) { public void setDefaultEncryptionAlgorithm(int value) {
SharedPreferences.Editor editor = mSharedPreferences.edit(); SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putInt(Constants.pref.default_encryption_algorithm, value); editor.putInt(Constants.pref.DEFAULT_ENCRYPTION_ALGORITHM, value);
editor.commit(); editor.commit();
} }
public int getDefaultHashAlgorithm() { public int getDefaultHashAlgorithm() {
return mSharedPreferences.getInt(Constants.pref.default_hash_algorithm, return mSharedPreferences.getInt(Constants.pref.DEFAULT_HASH_ALGORITHM,
HashAlgorithmTags.SHA256); HashAlgorithmTags.SHA256);
} }
public void setDefaultHashAlgorithm(int value) { public void setDefaultHashAlgorithm(int value) {
SharedPreferences.Editor editor = mSharedPreferences.edit(); SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putInt(Constants.pref.default_hash_algorithm, value); editor.putInt(Constants.pref.DEFAULT_HASH_ALGORITHM, value);
editor.commit(); editor.commit();
} }
public int getDefaultMessageCompression() { public int getDefaultMessageCompression() {
return mSharedPreferences.getInt(Constants.pref.default_message_compression, return mSharedPreferences.getInt(Constants.pref.DEFAULT_MESSAGE_COMPRESSION,
Id.choice.compression.zlib); Id.choice.compression.zlib);
} }
public void setDefaultMessageCompression(int value) { public void setDefaultMessageCompression(int value) {
SharedPreferences.Editor editor = mSharedPreferences.edit(); SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putInt(Constants.pref.default_message_compression, value); editor.putInt(Constants.pref.DEFAULT_MESSAGE_COMPRESSION, value);
editor.commit(); editor.commit();
} }
public int getDefaultFileCompression() { public int getDefaultFileCompression() {
return mSharedPreferences.getInt(Constants.pref.default_file_compression, return mSharedPreferences.getInt(Constants.pref.DEFAULT_FILE_COMPRESSION,
Id.choice.compression.none); Id.choice.compression.none);
} }
public void setDefaultFileCompression(int value) { public void setDefaultFileCompression(int value) {
SharedPreferences.Editor editor = mSharedPreferences.edit(); SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putInt(Constants.pref.default_file_compression, value); editor.putInt(Constants.pref.DEFAULT_FILE_COMPRESSION, value);
editor.commit(); editor.commit();
} }
public boolean getDefaultAsciiArmour() { public boolean getDefaultAsciiArmour() {
return mSharedPreferences.getBoolean(Constants.pref.default_ascii_armour, false); return mSharedPreferences.getBoolean(Constants.pref.DEFAULT_ASCII_ARMOUR, false);
} }
public void setDefaultAsciiArmour(boolean value) { public void setDefaultAsciiArmour(boolean value) {
SharedPreferences.Editor editor = mSharedPreferences.edit(); SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putBoolean(Constants.pref.default_ascii_armour, value); editor.putBoolean(Constants.pref.DEFAULT_ASCII_ARMOUR, value);
editor.commit(); editor.commit();
} }
public boolean getForceV3Signatures() { public boolean getForceV3Signatures() {
return mSharedPreferences.getBoolean(Constants.pref.force_v3_signatures, false); return mSharedPreferences.getBoolean(Constants.pref.FORCE_V3_SIGNATURES, false);
} }
public void setForceV3Signatures(boolean value) { public void setForceV3Signatures(boolean value) {
SharedPreferences.Editor editor = mSharedPreferences.edit(); SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putBoolean(Constants.pref.force_v3_signatures, value); editor.putBoolean(Constants.pref.FORCE_V3_SIGNATURES, value);
editor.commit(); editor.commit();
} }
public boolean hasSeenChangeLog(String version) { public boolean hasSeenChangeLog(String version) {
return mSharedPreferences.getBoolean(Constants.pref.has_seen_change_log + version, false); return mSharedPreferences.getBoolean(Constants.pref.HAS_SEEN_CHANGE_LOG + version, false);
} }
public void setHasSeenChangeLog(String version, boolean value) { public void setHasSeenChangeLog(String version, boolean value) {
SharedPreferences.Editor editor = mSharedPreferences.edit(); SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putBoolean(Constants.pref.has_seen_change_log + version, value); editor.putBoolean(Constants.pref.HAS_SEEN_CHANGE_LOG + version, value);
editor.commit(); editor.commit();
} }
public boolean hasSeenHelp() { public boolean hasSeenHelp() {
return mSharedPreferences.getBoolean(Constants.pref.has_seen_help, false); return mSharedPreferences.getBoolean(Constants.pref.HAS_SEEN_HELP, false);
} }
public void setHasSeenHelp(boolean value) { public void setHasSeenHelp(boolean value) {
SharedPreferences.Editor editor = mSharedPreferences.edit(); SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putBoolean(Constants.pref.has_seen_help, value); editor.putBoolean(Constants.pref.HAS_SEEN_HELP, value);
editor.commit(); editor.commit();
} }
public String[] getKeyServers() { public String[] getKeyServers() {
String rawData = mSharedPreferences.getString(Constants.pref.key_servers, String rawData = mSharedPreferences.getString(Constants.pref.KEY_SERVERS,
Constants.defaults.key_servers); Constants.defaults.KEY_SERVERS);
Vector<String> servers = new Vector<String>(); Vector<String> servers = new Vector<String>();
String chunks[] = rawData.split(","); String chunks[] = rawData.split(",");
for (int i = 0; i < chunks.length; ++i) { for (int i = 0; i < chunks.length; ++i) {
@@ -164,7 +164,7 @@ public class Preferences {
} }
rawData += tmp; rawData += tmp;
} }
editor.putString(Constants.pref.key_servers, rawData); editor.putString(Constants.pref.KEY_SERVERS, rawData);
editor.commit(); editor.commit();
} }
} }
@@ -24,7 +24,7 @@ public class ApgServiceBlobProvider extends ContentProvider {
private static final String COLUMN_KEY = "key"; private static final String COLUMN_KEY = "key";
private static final String STORE_PATH = Constants.path.app_dir+"/ApgServiceBlobs"; private static final String STORE_PATH = Constants.path.APP_DIR+"/ApgServiceBlobs";
private ApgServiceBlobDatabase mDb = null; private ApgServiceBlobDatabase mDb = null;
+51
View File
@@ -0,0 +1,51 @@
package org.apg.ui;
import org.apg.Constants;
import org.apg.R;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class AboutActivity extends Activity {
Activity mActivity;
/**
* Instantiate View for this Activity
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about_activity);
mActivity = this;
TextView versionText = (TextView) findViewById(R.id.about_version);
versionText.setText(getString(R.string.about_version) + " " + getVersion());
}
/**
* Get the current package version.
*
* @return The current version.
*/
private String getVersion() {
String result = "";
try {
PackageManager manager = mActivity.getPackageManager();
PackageInfo info = manager.getPackageInfo(mActivity.getPackageName(), 0);
result = String.format("%s (%s)", info.versionName, info.versionCode);
} catch (NameNotFoundException e) {
Log.w(Constants.TAG, "Unable to get application version: " + e.getMessage());
result = "Unable to get application version.";
}
return result;
}
}
+14 -39
View File
@@ -79,7 +79,7 @@ public class BaseActivity extends Activity implements Runnable, ProgressDialogUp
Apg.initialize(this); Apg.initialize(this);
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File dir = new File(Constants.path.app_dir); File dir = new File(Constants.path.APP_DIR);
if (!dir.exists() && !dir.mkdirs()) { if (!dir.exists() && !dir.mkdirs()) {
// ignore this for now, it's not crucial // ignore this for now, it's not crucial
// that the directory doesn't exist at this point // that the directory doesn't exist at this point
@@ -108,7 +108,7 @@ public class BaseActivity extends Activity implements Runnable, ProgressDialogUp
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
case Id.menu.option.about: { case Id.menu.option.about: {
showDialog(Id.dialog.about); startActivity(new Intent(this, AboutActivity.class));
return true; return true;
} }
@@ -187,31 +187,6 @@ public class BaseActivity extends Activity implements Runnable, ProgressDialogUp
mProgressDialog = null; mProgressDialog = null;
switch (id) { switch (id) {
case Id.dialog.about: {
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("About " + Apg.getFullVersion(this));
LayoutInflater inflater = (LayoutInflater) this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.info, null);
TextView message = (TextView) layout.findViewById(R.id.message);
message.setText("This is an attempt to bring OpenPGP to Android. "
+ "It is far from complete, but more features are planned (see website).\n\n"
+ "Feel free to send bug reports, suggestions, feature requests, feedback, "
+ "photographs.\n\n" + "mail: thi@thialfihar.org\n"
+ "site: http://apg.thialfihar.org\n\n"
+ "This software is provided \"as is\", without warranty of any kind.");
alert.setView(layout);
alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
BaseActivity.this.removeDialog(Id.dialog.about);
}
});
return alert.create();
}
case Id.dialog.pass_phrase: { case Id.dialog.pass_phrase: {
return AskForSecretKeyPassPhrase.createDialog(this, getSecretKeyId(), this); return AskForSecretKeyPassPhrase.createDialog(this, getSecretKeyId(), this);
@@ -266,7 +241,7 @@ public class BaseActivity extends Activity implements Runnable, ProgressDialogUp
mDeletingThread = new Thread(new Runnable() { mDeletingThread = new Thread(new Runnable() {
public void run() { public void run() {
Bundle data = new Bundle(); Bundle data = new Bundle();
data.putInt(Constants.extras.status, Id.message.delete_done); data.putInt(Constants.extras.STATUS, Id.message.delete_done);
try { try {
Apg.deleteFileSecurely(BaseActivity.this, file, BaseActivity.this); Apg.deleteFileSecurely(BaseActivity.this, file, BaseActivity.this);
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
@@ -330,9 +305,9 @@ public class BaseActivity extends Activity implements Runnable, ProgressDialogUp
public void setProgress(int progress, int max) { public void setProgress(int progress, int max) {
Message msg = new Message(); Message msg = new Message();
Bundle data = new Bundle(); Bundle data = new Bundle();
data.putInt(Constants.extras.status, Id.message.progress_update); data.putInt(Constants.extras.STATUS, Id.message.progress_update);
data.putInt(Constants.extras.progress, progress); data.putInt(Constants.extras.PROGRESS, progress);
data.putInt(Constants.extras.progress_max, max); data.putInt(Constants.extras.PROGRESS_MAX, max);
msg.setData(data); msg.setData(data);
mHandler.sendMessage(msg); mHandler.sendMessage(msg);
} }
@@ -340,10 +315,10 @@ public class BaseActivity extends Activity implements Runnable, ProgressDialogUp
public void setProgress(String message, int progress, int max) { public void setProgress(String message, int progress, int max) {
Message msg = new Message(); Message msg = new Message();
Bundle data = new Bundle(); Bundle data = new Bundle();
data.putInt(Constants.extras.status, Id.message.progress_update); data.putInt(Constants.extras.STATUS, Id.message.progress_update);
data.putString(Constants.extras.message, message); data.putString(Constants.extras.MESSAGE, message);
data.putInt(Constants.extras.progress, progress); data.putInt(Constants.extras.PROGRESS, progress);
data.putInt(Constants.extras.progress_max, max); data.putInt(Constants.extras.PROGRESS_MAX, max);
msg.setData(data); msg.setData(data);
mHandler.sendMessage(msg); mHandler.sendMessage(msg);
} }
@@ -354,16 +329,16 @@ public class BaseActivity extends Activity implements Runnable, ProgressDialogUp
return; return;
} }
int type = data.getInt(Constants.extras.status); int type = data.getInt(Constants.extras.STATUS);
switch (type) { switch (type) {
case Id.message.progress_update: { case Id.message.progress_update: {
String message = data.getString(Constants.extras.message); String message = data.getString(Constants.extras.MESSAGE);
if (mProgressDialog != null) { if (mProgressDialog != null) {
if (message != null) { if (message != null) {
mProgressDialog.setMessage(message); mProgressDialog.setMessage(message);
} }
mProgressDialog.setMax(data.getInt(Constants.extras.progress_max)); mProgressDialog.setMax(data.getInt(Constants.extras.PROGRESS_MAX));
mProgressDialog.setProgress(data.getInt(Constants.extras.progress)); mProgressDialog.setProgress(data.getInt(Constants.extras.PROGRESS));
} }
break; break;
} }
+13 -13
View File
@@ -196,28 +196,28 @@ public class DecryptActivity extends BaseActivity {
// ignore, then // ignore, then
} }
} else if (Apg.Intent.DECRYPT.equals(mIntent.getAction())) { } else if (Apg.Intent.DECRYPT.equals(mIntent.getAction())) {
Log.d(Constants.tag, "Apg Intent DECRYPT startet"); Log.d(Constants.TAG, "Apg Intent DECRYPT startet");
Bundle extras = mIntent.getExtras(); Bundle extras = mIntent.getExtras();
if (extras == null) { if (extras == null) {
Log.d(Constants.tag, "extra bundle was null"); Log.d(Constants.TAG, "extra bundle was null");
extras = new Bundle(); extras = new Bundle();
} else { } else {
Log.d(Constants.tag, "got extras"); Log.d(Constants.TAG, "got extras");
} }
mData = extras.getByteArray(Apg.EXTRA_DATA); mData = extras.getByteArray(Apg.EXTRA_DATA);
String textData = null; String textData = null;
if (mData == null) { if (mData == null) {
Log.d(Constants.tag, "EXTRA_DATA was null"); Log.d(Constants.TAG, "EXTRA_DATA was null");
textData = extras.getString(Apg.EXTRA_TEXT); textData = extras.getString(Apg.EXTRA_TEXT);
} else { } else {
Log.d(Constants.tag, "Got data from EXTRA_DATA"); Log.d(Constants.TAG, "Got data from EXTRA_DATA");
} }
if (textData != null) { if (textData != null) {
Log.d(Constants.tag, "textData null, matching text ..."); Log.d(Constants.TAG, "textData null, matching text ...");
Matcher matcher = Apg.PGP_MESSAGE.matcher(textData); Matcher matcher = Apg.PGP_MESSAGE.matcher(textData);
if (matcher.matches()) { if (matcher.matches()) {
Log.d(Constants.tag, "PGP_MESSAGE matched"); Log.d(Constants.TAG, "PGP_MESSAGE matched");
textData = matcher.group(1); textData = matcher.group(1);
// replace non breakable spaces // replace non breakable spaces
textData = textData.replaceAll("\\xa0", " "); textData = textData.replaceAll("\\xa0", " ");
@@ -225,14 +225,14 @@ public class DecryptActivity extends BaseActivity {
} else { } else {
matcher = Apg.PGP_SIGNED_MESSAGE.matcher(textData); matcher = Apg.PGP_SIGNED_MESSAGE.matcher(textData);
if (matcher.matches()) { if (matcher.matches()) {
Log.d(Constants.tag, "PGP_SIGNED_MESSAGE matched"); Log.d(Constants.TAG, "PGP_SIGNED_MESSAGE matched");
textData = matcher.group(1); textData = matcher.group(1);
// replace non breakable spaces // replace non breakable spaces
textData = textData.replaceAll("\\xa0", " "); textData = textData.replaceAll("\\xa0", " ");
mMessage.setText(textData); mMessage.setText(textData);
mDecryptButton.setText(R.string.btn_verify); mDecryptButton.setText(R.string.btn_verify);
} else { } else {
Log.d(Constants.tag, "Nothing matched!"); Log.d(Constants.TAG, "Nothing matched!");
} }
} }
} }
@@ -377,7 +377,7 @@ public class DecryptActivity extends BaseActivity {
if (filename.endsWith(".asc") || filename.endsWith(".gpg") || filename.endsWith(".pgp")) { if (filename.endsWith(".asc") || filename.endsWith(".gpg") || filename.endsWith(".pgp")) {
filename = filename.substring(0, filename.length() - 4); filename = filename.substring(0, filename.length() - 4);
} }
mOutputFilename = Constants.path.app_dir + "/" + filename; mOutputFilename = Constants.path.APP_DIR + "/" + filename;
} }
private void updateSource() { private void updateSource() {
@@ -564,7 +564,7 @@ public class DecryptActivity extends BaseActivity {
error = "" + e; error = "" + e;
} }
data.putInt(Constants.extras.status, Id.message.done); data.putInt(Constants.extras.STATUS, Id.message.done);
if (error != null) { if (error != null) {
data.putString(Apg.EXTRA_ERROR, error); data.putString(Apg.EXTRA_ERROR, error);
@@ -581,8 +581,8 @@ public class DecryptActivity extends BaseActivity {
return; return;
} }
if (data.getInt(Constants.extras.status) == Id.message.unknown_signature_key) { if (data.getInt(Constants.extras.STATUS) == Id.message.unknown_signature_key) {
mUnknownSignatureKeyId = data.getLong(Constants.extras.key_id); mUnknownSignatureKeyId = data.getLong(Constants.extras.KEY_ID);
showDialog(Id.dialog.lookup_unknown_key); showDialog(Id.dialog.lookup_unknown_key);
return; return;
} }
+1 -1
View File
@@ -257,7 +257,7 @@ public class EditKeyActivity extends BaseActivity implements OnClickListener {
error = "" + e; error = "" + e;
} }
data.putInt(Constants.extras.status, Id.message.done); data.putInt(Constants.extras.STATUS, Id.message.done);
if (error != null) { if (error != null) {
data.putString(Apg.EXTRA_ERROR, error); data.putString(Apg.EXTRA_ERROR, error);
+2 -2
View File
@@ -421,7 +421,7 @@ public class EncryptActivity extends BaseActivity {
mInputFilename = mFilename.getText().toString(); mInputFilename = mFilename.getText().toString();
File file = new File(mInputFilename); File file = new File(mInputFilename);
String ending = (mAsciiArmour.isChecked() ? ".asc" : ".gpg"); String ending = (mAsciiArmour.isChecked() ? ".asc" : ".gpg");
mOutputFilename = Constants.path.app_dir + "/" + file.getName() + ending; mOutputFilename = Constants.path.APP_DIR + "/" + file.getName() + ending;
} }
private void updateSource() { private void updateSource() {
@@ -731,7 +731,7 @@ public class EncryptActivity extends BaseActivity {
error = "" + e; error = "" + e;
} }
data.putInt(Constants.extras.status, Id.message.done); data.putInt(Constants.extras.STATUS, Id.message.done);
if (error != null) { if (error != null) {
data.putString(Apg.EXTRA_ERROR, error); data.putString(Apg.EXTRA_ERROR, error);
+3 -3
View File
@@ -69,11 +69,11 @@ public class ImportFromQRCodeActivity extends BaseActivity {
} catch (QueryException e) { } catch (QueryException e) {
Log.e(TAG, "Failed to query KeyServer", e); Log.e(TAG, "Failed to query KeyServer", e);
status.putString(Apg.EXTRA_ERROR, "Failed to query KeyServer"); status.putString(Apg.EXTRA_ERROR, "Failed to query KeyServer");
status.putInt(Constants.extras.status, Id.message.done); status.putInt(Constants.extras.STATUS, Id.message.done);
} catch (IOException e) { } catch (IOException e) {
Log.e(TAG, "Failed to query KeyServer", e); Log.e(TAG, "Failed to query KeyServer", e);
status.putString(Apg.EXTRA_ERROR, "Failed to query KeyServer"); status.putString(Apg.EXTRA_ERROR, "Failed to query KeyServer");
status.putInt(Constants.extras.status, Id.message.done); status.putInt(Constants.extras.STATUS, Id.message.done);
} }
} }
}; };
@@ -107,7 +107,7 @@ public class ImportFromQRCodeActivity extends BaseActivity {
case Id.request.sign_key: { case Id.request.sign_key: {
// signals the end of processing. Signature was either applied, or it wasnt // signals the end of processing. Signature was either applied, or it wasnt
status.putInt(Constants.extras.status, Id.message.done); status.putInt(Constants.extras.STATUS, Id.message.done);
msg.setData(status); msg.setData(status);
sendMessage(msg); sendMessage(msg);
+5 -5
View File
@@ -74,8 +74,8 @@ public class KeyListActivity extends BaseActivity {
protected int mSelectedItem = -1; protected int mSelectedItem = -1;
protected int mTask = 0; protected int mTask = 0;
protected String mImportFilename = Constants.path.app_dir + "/"; protected String mImportFilename = Constants.path.APP_DIR + "/";
protected String mExportFilename = Constants.path.app_dir + "/"; protected String mExportFilename = Constants.path.APP_DIR + "/";
protected String mImportData; protected String mImportData;
protected boolean mDeleteAfterImport = false; protected boolean mDeleteAfterImport = false;
@@ -352,9 +352,9 @@ public class KeyListActivity extends BaseActivity {
mImportData = null; mImportData = null;
if (mTask == Id.task.import_keys) { if (mTask == Id.task.import_keys) {
data.putInt(Constants.extras.status, Id.message.import_done); data.putInt(Constants.extras.STATUS, Id.message.import_done);
} else { } else {
data.putInt(Constants.extras.status, Id.message.export_done); data.putInt(Constants.extras.STATUS, Id.message.export_done);
} }
if (error != null) { if (error != null) {
@@ -381,7 +381,7 @@ public class KeyListActivity extends BaseActivity {
Bundle data = msg.getData(); Bundle data = msg.getData();
if (data != null) { if (data != null) {
int type = data.getInt(Constants.extras.status); int type = data.getInt(Constants.extras.STATUS);
switch (type) { switch (type) {
case Id.message.import_done: { case Id.message.import_done: {
removeDialog(Id.dialog.importing); removeDialog(Id.dialog.importing);
+1 -1
View File
@@ -144,7 +144,7 @@ public class KeyServerQueryActivity extends BaseActivity {
error = "Too many responses."; error = "Too many responses.";
} }
data.putInt(Constants.extras.status, Id.message.done); data.putInt(Constants.extras.STATUS, Id.message.done);
if (error != null) { if (error != null) {
data.putString(Apg.EXTRA_ERROR, error); data.putString(Apg.EXTRA_ERROR, error);
+9 -9
View File
@@ -61,7 +61,7 @@ public class PreferencesActivity extends PreferenceActivity {
addPreferencesFromResource(R.xml.apg_preferences); addPreferencesFromResource(R.xml.apg_preferences);
mLanguage = (ListPreference) findPreference(Constants.pref.language); mLanguage = (ListPreference) findPreference(Constants.pref.LANGUAGE);
Vector<CharSequence> entryVector = new Vector<CharSequence>(Arrays.asList(mLanguage.getEntries())); Vector<CharSequence> entryVector = new Vector<CharSequence>(Arrays.asList(mLanguage.getEntries()));
Vector<CharSequence> entryValueVector = new Vector<CharSequence>(Arrays.asList(mLanguage.getEntryValues())); Vector<CharSequence> entryValueVector = new Vector<CharSequence>(Arrays.asList(mLanguage.getEntryValues()));
String supportedLanguages[] = getResources().getStringArray(R.array.supported_languages); String supportedLanguages[] = getResources().getStringArray(R.array.supported_languages);
@@ -90,7 +90,7 @@ public class PreferencesActivity extends PreferenceActivity {
} }
}); });
mPassPhraseCacheTtl = (IntegerListPreference) findPreference(Constants.pref.pass_phrase_cache_ttl); mPassPhraseCacheTtl = (IntegerListPreference) findPreference(Constants.pref.PASS_PHRASE_CACHE_TTL);
mPassPhraseCacheTtl.setValue("" + mPreferences.getPassPhraseCacheTtl()); mPassPhraseCacheTtl.setValue("" + mPreferences.getPassPhraseCacheTtl());
mPassPhraseCacheTtl.setSummary(mPassPhraseCacheTtl.getEntry()); mPassPhraseCacheTtl.setSummary(mPassPhraseCacheTtl.getEntry());
mPassPhraseCacheTtl.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() mPassPhraseCacheTtl.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener()
@@ -105,7 +105,7 @@ public class PreferencesActivity extends PreferenceActivity {
} }
}); });
mEncryptionAlgorithm = (IntegerListPreference) findPreference(Constants.pref.default_encryption_algorithm); mEncryptionAlgorithm = (IntegerListPreference) findPreference(Constants.pref.DEFAULT_ENCRYPTION_ALGORITHM);
int valueIds[] = { int valueIds[] = {
PGPEncryptedData.AES_128, PGPEncryptedData.AES_192, PGPEncryptedData.AES_256, PGPEncryptedData.AES_128, PGPEncryptedData.AES_192, PGPEncryptedData.AES_256,
PGPEncryptedData.BLOWFISH, PGPEncryptedData.TWOFISH, PGPEncryptedData.CAST5, PGPEncryptedData.BLOWFISH, PGPEncryptedData.TWOFISH, PGPEncryptedData.CAST5,
@@ -135,7 +135,7 @@ public class PreferencesActivity extends PreferenceActivity {
} }
}); });
mHashAlgorithm = (IntegerListPreference) findPreference(Constants.pref.default_hash_algorithm); mHashAlgorithm = (IntegerListPreference) findPreference(Constants.pref.DEFAULT_HASH_ALGORITHM);
valueIds = new int[] { valueIds = new int[] {
HashAlgorithmTags.MD5, HashAlgorithmTags.RIPEMD160, HashAlgorithmTags.SHA1, HashAlgorithmTags.MD5, HashAlgorithmTags.RIPEMD160, HashAlgorithmTags.SHA1,
HashAlgorithmTags.SHA224, HashAlgorithmTags.SHA256, HashAlgorithmTags.SHA384, HashAlgorithmTags.SHA224, HashAlgorithmTags.SHA256, HashAlgorithmTags.SHA384,
@@ -165,7 +165,7 @@ public class PreferencesActivity extends PreferenceActivity {
} }
}); });
mMessageCompression = (IntegerListPreference) findPreference(Constants.pref.default_message_compression); mMessageCompression = (IntegerListPreference) findPreference(Constants.pref.DEFAULT_MESSAGE_COMPRESSION);
valueIds = new int[] { valueIds = new int[] {
Id.choice.compression.none, Id.choice.compression.none,
Id.choice.compression.zip, Id.choice.compression.zip,
@@ -197,7 +197,7 @@ public class PreferencesActivity extends PreferenceActivity {
} }
}); });
mFileCompression = (IntegerListPreference) findPreference(Constants.pref.default_file_compression); mFileCompression = (IntegerListPreference) findPreference(Constants.pref.DEFAULT_FILE_COMPRESSION);
mFileCompression.setEntries(entries); mFileCompression.setEntries(entries);
mFileCompression.setEntryValues(values); mFileCompression.setEntryValues(values);
mFileCompression.setValue("" + mPreferences.getDefaultFileCompression()); mFileCompression.setValue("" + mPreferences.getDefaultFileCompression());
@@ -213,7 +213,7 @@ public class PreferencesActivity extends PreferenceActivity {
} }
}); });
mAsciiArmour = (CheckBoxPreference) findPreference(Constants.pref.default_ascii_armour); mAsciiArmour = (CheckBoxPreference) findPreference(Constants.pref.DEFAULT_ASCII_ARMOUR);
mAsciiArmour.setChecked(mPreferences.getDefaultAsciiArmour()); mAsciiArmour.setChecked(mPreferences.getDefaultAsciiArmour());
mAsciiArmour.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() mAsciiArmour.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener()
{ {
@@ -225,7 +225,7 @@ public class PreferencesActivity extends PreferenceActivity {
} }
}); });
mForceV3Signatures = (CheckBoxPreference) findPreference(Constants.pref.force_v3_signatures); mForceV3Signatures = (CheckBoxPreference) findPreference(Constants.pref.FORCE_V3_SIGNATURES);
mForceV3Signatures.setChecked(mPreferences.getForceV3Signatures()); mForceV3Signatures.setChecked(mPreferences.getForceV3Signatures());
mForceV3Signatures.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() mForceV3Signatures.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener()
{ {
@@ -237,7 +237,7 @@ public class PreferencesActivity extends PreferenceActivity {
} }
}); });
mKeyServerPreference = (PreferenceScreen) findPreference(Constants.pref.key_servers); mKeyServerPreference = (PreferenceScreen) findPreference(Constants.pref.KEY_SERVERS);
String servers[] = mPreferences.getKeyServers(); String servers[] = mPreferences.getKeyServers();
mKeyServerPreference.setSummary(getResources().getString(R.string.nKeyServers, servers.length)); mKeyServerPreference.setSummary(getResources().getString(R.string.nKeyServers, servers.length));
mKeyServerPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { mKeyServerPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+1 -1
View File
@@ -40,7 +40,7 @@ import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
public class PublicKeyListActivity extends KeyListActivity { public class PublicKeyListActivity extends KeyListActivity {
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
mExportFilename = Constants.path.app_dir + "/pubexport.asc"; mExportFilename = Constants.path.APP_DIR + "/pubexport.asc";
mKeyType = Id.type.public_key; mKeyType = Id.type.public_key;
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
} }
+1 -1
View File
@@ -45,7 +45,7 @@ import com.google.zxing.integration.android.IntentIntegrator;
public class SecretKeyListActivity extends KeyListActivity implements OnChildClickListener { public class SecretKeyListActivity extends KeyListActivity implements OnChildClickListener {
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
mExportFilename = Constants.path.app_dir + "/secexport.asc"; mExportFilename = Constants.path.APP_DIR + "/secexport.asc";
mKeyType = Id.type.secret_key; mKeyType = Id.type.secret_key;
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
mList.setOnChildClickListener(this); mList.setOnChildClickListener(this);
+1 -1
View File
@@ -73,7 +73,7 @@ public class SendKeyActivity extends BaseActivity {
} }
} }
data.putInt(Constants.extras.status, Id.message.export_done); data.putInt(Constants.extras.STATUS, Id.message.export_done);
if (error != null) { if (error != null) {
data.putString(Apg.EXTRA_ERROR, error); data.putString(Apg.EXTRA_ERROR, error);
+6 -6
View File
@@ -141,7 +141,7 @@ public class SignKeyActivity extends BaseActivity {
status.putString(Apg.EXTRA_ERROR, "Key has already been signed"); status.putString(Apg.EXTRA_ERROR, "Key has already been signed");
status.putInt(Constants.extras.status, Id.message.done); status.putInt(Constants.extras.STATUS, Id.message.done);
msg.setData(status); msg.setData(status);
sendMessage(msg); sendMessage(msg);
@@ -221,26 +221,26 @@ public class SignKeyActivity extends BaseActivity {
} catch (PGPException e) { } catch (PGPException e) {
Log.e(TAG, "Failed to sign key", e); Log.e(TAG, "Failed to sign key", e);
status.putString(Apg.EXTRA_ERROR, "Failed to sign key"); status.putString(Apg.EXTRA_ERROR, "Failed to sign key");
status.putInt(Constants.extras.status, Id.message.done); status.putInt(Constants.extras.STATUS, Id.message.done);
return; return;
} catch (NoSuchAlgorithmException e) { } catch (NoSuchAlgorithmException e) {
Log.e(TAG, "Failed to sign key", e); Log.e(TAG, "Failed to sign key", e);
status.putString(Apg.EXTRA_ERROR, "Failed to sign key"); status.putString(Apg.EXTRA_ERROR, "Failed to sign key");
status.putInt(Constants.extras.status, Id.message.done); status.putInt(Constants.extras.STATUS, Id.message.done);
return; return;
} catch (NoSuchProviderException e) { } catch (NoSuchProviderException e) {
Log.e(TAG, "Failed to sign key", e); Log.e(TAG, "Failed to sign key", e);
status.putString(Apg.EXTRA_ERROR, "Failed to sign key"); status.putString(Apg.EXTRA_ERROR, "Failed to sign key");
status.putInt(Constants.extras.status, Id.message.done); status.putInt(Constants.extras.STATUS, Id.message.done);
return; return;
} catch (SignatureException e) { } catch (SignatureException e) {
Log.e(TAG, "Failed to sign key", e); Log.e(TAG, "Failed to sign key", e);
status.putString(Apg.EXTRA_ERROR, "Failed to sign key"); status.putString(Apg.EXTRA_ERROR, "Failed to sign key");
status.putInt(Constants.extras.status, Id.message.done); status.putInt(Constants.extras.STATUS, Id.message.done);
return; return;
} }
status.putInt(Constants.extras.status, Id.message.done); status.putInt(Constants.extras.STATUS, Id.message.done);
msg.setData(status); msg.setData(status);
sendMessage(msg); sendMessage(msg);