Merge lp:~trb143/openlp/Android_Search into lp:openlp/android2
- Android_Search
- Merge into android2
Proposed by
Tim Bentley
Status: | Merged |
---|---|
Merged at revision: | 33 |
Proposed branch: | lp:~trb143/openlp/Android_Search |
Merge into: | lp:openlp/android2 |
Diff against target: |
1034 lines (+841/-15) 15 files modified
app/app.iml (+208/-10) app/src/main/java/org/openlp/android2/OpenLP.java (+19/-0) app/src/main/java/org/openlp/android2/common/NavigationOptions.java (+1/-0) app/src/main/java/org/openlp/android2/common/OpenLPDialog.java (+2/-1) app/src/main/java/org/openlp/android2/common/OpenLPHttpClient.java (+1/-1) app/src/main/java/org/openlp/android2/dialogs/SearchSelectionDialog.java (+135/-0) app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java (+5/-1) app/src/main/java/org/openlp/android2/fragments/SearchFragment.java (+283/-0) app/src/main/res/layout/fragment_search.xml (+90/-0) app/src/main/res/layout/search_action_dialog.xml (+40/-0) app/src/main/res/layout/search_result.xml (+11/-0) app/src/main/res/layout/search_result_row.xml (+18/-0) app/src/main/res/layout/spinner_dropdown_item.xml (+11/-0) app/src/main/res/layout/spinner_list_item.xml (+11/-0) app/src/main/res/values/strings.xml (+6/-2) |
To merge this branch: | bzr merge lp:~trb143/openlp/Android_Search |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Raoul Snyman | Approve | ||
Review via email: mp+282125@code.launchpad.net |
This proposal supersedes a proposal from 2016-01-10.
Commit message
Description of the change
Lets get search out the door then start to polish the UI,
To post a comment you must log in.
Revision history for this message
Raoul Snyman (raoul-snyman) : | # |
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'app/app.iml' | |||
2 | --- app/app.iml 2015-11-15 10:17:08 +0000 | |||
3 | +++ app/app.iml 2016-01-10 19:34:28 +0000 | |||
4 | @@ -1,5 +1,5 @@ | |||
5 | 1 | <?xml version="1.0" encoding="UTF-8"?> | 1 | <?xml version="1.0" encoding="UTF-8"?> |
7 | 2 | <module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="OpenLP2" external.system.module.version="unspecified" type="JAVA_MODULE" version="4"> | 2 | <module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="OpenLP2_search" external.system.module.version="unspecified" type="JAVA_MODULE" version="4"> |
8 | 3 | <component name="FacetManager"> | 3 | <component name="FacetManager"> |
9 | 4 | <facet type="android-gradle" name="Android-Gradle"> | 4 | <facet type="android-gradle" name="Android-Gradle"> |
10 | 5 | <configuration> | 5 | <configuration> |
11 | @@ -65,27 +65,20 @@ | |||
12 | 65 | <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" /> | 65 | <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" /> |
13 | 66 | <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> | 66 | <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> |
14 | 67 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" /> | 67 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" /> |
15 | 68 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" /> | ||
16 | 69 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" /> | 68 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" /> |
17 | 70 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" /> | ||
18 | 71 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" /> | 69 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" /> |
19 | 72 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" /> | 70 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" /> |
20 | 73 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" /> | ||
21 | 74 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/22.2.1/jars" /> | 71 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/22.2.1/jars" /> |
22 | 75 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/design/22.2.1/jars" /> | 72 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/design/22.2.1/jars" /> |
23 | 76 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/22.2.1/jars" /> | 73 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/22.2.1/jars" /> |
24 | 77 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> | 74 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> |
25 | 78 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" /> | ||
26 | 79 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" /> | ||
27 | 80 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" /> | ||
28 | 81 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" /> | ||
29 | 82 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" /> | 75 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" /> |
30 | 83 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" /> | ||
31 | 84 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" /> | 76 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" /> |
32 | 85 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" /> | ||
33 | 86 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> | 77 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> |
34 | 78 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/resources" /> | ||
35 | 87 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> | 79 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> |
36 | 88 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> | 80 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> |
37 | 81 | <excludeFolder url="file://$MODULE_DIR$/build/intermediates/tmp" /> | ||
38 | 89 | <excludeFolder url="file://$MODULE_DIR$/build/outputs" /> | 82 | <excludeFolder url="file://$MODULE_DIR$/build/outputs" /> |
39 | 90 | <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> | 83 | <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> |
40 | 91 | </content> | 84 | </content> |
41 | @@ -97,4 +90,209 @@ | |||
42 | 97 | <orderEntry type="library" exported="" name="design-22.2.1" level="project" /> | 90 | <orderEntry type="library" exported="" name="design-22.2.1" level="project" /> |
43 | 98 | <orderEntry type="library" exported="" name="appcompat-v7-22.2.1" level="project" /> | 91 | <orderEntry type="library" exported="" name="appcompat-v7-22.2.1" level="project" /> |
44 | 99 | </component> | 92 | </component> |
45 | 93 | <component name="org.twodividedbyzero.idea.findbugs"> | ||
46 | 94 | <option name="_basePreferences"> | ||
47 | 95 | <map> | ||
48 | 96 | <entry key="property.analysisEffortLevel" value="default" /> | ||
49 | 97 | <entry key="property.analyzeAfterAutoMake" value="false" /> | ||
50 | 98 | <entry key="property.analyzeAfterCompile" value="false" /> | ||
51 | 99 | <entry key="property.annotationGutterIconEnabled" value="true" /> | ||
52 | 100 | <entry key="property.annotationSuppressWarningsClass" value="edu.umd.cs.findbugs.annotations.SuppressFBWarnings" /> | ||
53 | 101 | <entry key="property.annotationTextRangeMarkupEnabled" value="true" /> | ||
54 | 102 | <entry key="property.exportAsHtml" value="true" /> | ||
55 | 103 | <entry key="property.exportAsXml" value="true" /> | ||
56 | 104 | <entry key="property.exportBaseDir" value="" /> | ||
57 | 105 | <entry key="property.exportCreateArchiveDir" value="false" /> | ||
58 | 106 | <entry key="property.exportOpenBrowser" value="true" /> | ||
59 | 107 | <entry key="property.minPriorityToReport" value="Medium" /> | ||
60 | 108 | <entry key="property.runAnalysisInBackground" value="false" /> | ||
61 | 109 | <entry key="property.showHiddenDetectors" value="false" /> | ||
62 | 110 | <entry key="property.toolWindowToFront" value="true" /> | ||
63 | 111 | </map> | ||
64 | 112 | </option> | ||
65 | 113 | <option name="_detectors"> | ||
66 | 114 | <map> | ||
67 | 115 | <entry key="AppendingToAnObjectOutputStream" value="true" /> | ||
68 | 116 | <entry key="AtomicityProblem" value="true" /> | ||
69 | 117 | <entry key="BadAppletConstructor" value="false" /> | ||
70 | 118 | <entry key="BadResultSetAccess" value="true" /> | ||
71 | 119 | <entry key="BadSyntaxForRegularExpression" value="true" /> | ||
72 | 120 | <entry key="BadUseOfReturnValue" value="true" /> | ||
73 | 121 | <entry key="BadlyOverriddenAdapter" value="true" /> | ||
74 | 122 | <entry key="BooleanReturnNull" value="true" /> | ||
75 | 123 | <entry key="BuildInterproceduralCallGraph" value="false" /> | ||
76 | 124 | <entry key="BuildObligationPolicyDatabase" value="true" /> | ||
77 | 125 | <entry key="BuildStringPassthruGraph" value="true" /> | ||
78 | 126 | <entry key="CallToUnsupportedMethod" value="false" /> | ||
79 | 127 | <entry key="CalledMethods" value="true" /> | ||
80 | 128 | <entry key="CheckCalls" value="false" /> | ||
81 | 129 | <entry key="CheckExpectedWarnings" value="false" /> | ||
82 | 130 | <entry key="CheckImmutableAnnotation" value="true" /> | ||
83 | 131 | <entry key="CheckRelaxingNullnessAnnotation" value="true" /> | ||
84 | 132 | <entry key="CheckTypeQualifiers" value="true" /> | ||
85 | 133 | <entry key="CloneIdiom" value="true" /> | ||
86 | 134 | <entry key="ComparatorIdiom" value="true" /> | ||
87 | 135 | <entry key="ConfusedInheritance" value="true" /> | ||
88 | 136 | <entry key="ConfusionBetweenInheritedAndOuterMethod" value="true" /> | ||
89 | 137 | <entry key="CovariantArrayAssignment" value="false" /> | ||
90 | 138 | <entry key="CrossSiteScripting" value="true" /> | ||
91 | 139 | <entry key="DefaultEncodingDetector" value="true" /> | ||
92 | 140 | <entry key="DoInsideDoPrivileged" value="true" /> | ||
93 | 141 | <entry key="DontCatchIllegalMonitorStateException" value="true" /> | ||
94 | 142 | <entry key="DontIgnoreResultOfPutIfAbsent" value="true" /> | ||
95 | 143 | <entry key="DontUseEnum" value="true" /> | ||
96 | 144 | <entry key="DroppedException" value="true" /> | ||
97 | 145 | <entry key="DumbMethodInvocations" value="true" /> | ||
98 | 146 | <entry key="DumbMethods" value="true" /> | ||
99 | 147 | <entry key="DuplicateBranches" value="true" /> | ||
100 | 148 | <entry key="EmptyZipFileEntry" value="false" /> | ||
101 | 149 | <entry key="EqualsOperandShouldHaveClassCompatibleWithThis" value="true" /> | ||
102 | 150 | <entry key="ExplicitSerialization" value="true" /> | ||
103 | 151 | <entry key="FieldItemSummary" value="true" /> | ||
104 | 152 | <entry key="FinalizerNullsFields" value="true" /> | ||
105 | 153 | <entry key="FindBadCast2" value="true" /> | ||
106 | 154 | <entry key="FindBadForLoop" value="true" /> | ||
107 | 155 | <entry key="FindBugsSummaryStats" value="true" /> | ||
108 | 156 | <entry key="FindCircularDependencies" value="false" /> | ||
109 | 157 | <entry key="FindComparatorProblems" value="true" /> | ||
110 | 158 | <entry key="FindDeadLocalStores" value="true" /> | ||
111 | 159 | <entry key="FindDoubleCheck" value="true" /> | ||
112 | 160 | <entry key="FindEmptySynchronizedBlock" value="true" /> | ||
113 | 161 | <entry key="FindFieldSelfAssignment" value="true" /> | ||
114 | 162 | <entry key="FindFinalizeInvocations" value="true" /> | ||
115 | 163 | <entry key="FindFloatEquality" value="true" /> | ||
116 | 164 | <entry key="FindFloatMath" value="false" /> | ||
117 | 165 | <entry key="FindHEmismatch" value="true" /> | ||
118 | 166 | <entry key="FindInconsistentSync2" value="true" /> | ||
119 | 167 | <entry key="FindJSR166LockMonitorenter" value="true" /> | ||
120 | 168 | <entry key="FindLocalSelfAssignment2" value="true" /> | ||
121 | 169 | <entry key="FindMaskedFields" value="true" /> | ||
122 | 170 | <entry key="FindMismatchedWaitOrNotify" value="true" /> | ||
123 | 171 | <entry key="FindNakedNotify" value="true" /> | ||
124 | 172 | <entry key="FindNoSideEffectMethods" value="true" /> | ||
125 | 173 | <entry key="FindNonSerializableStoreIntoSession" value="false" /> | ||
126 | 174 | <entry key="FindNonSerializableValuePassedToWriteObject" value="false" /> | ||
127 | 175 | <entry key="FindNonShortCircuit" value="true" /> | ||
128 | 176 | <entry key="FindNullDeref" value="true" /> | ||
129 | 177 | <entry key="FindNullDerefsInvolvingNonShortCircuitEvaluation" value="true" /> | ||
130 | 178 | <entry key="FindOpenStream" value="true" /> | ||
131 | 179 | <entry key="FindPuzzlers" value="true" /> | ||
132 | 180 | <entry key="FindRefComparison" value="true" /> | ||
133 | 181 | <entry key="FindReturnRef" value="true" /> | ||
134 | 182 | <entry key="FindRoughConstants" value="true" /> | ||
135 | 183 | <entry key="FindRunInvocations" value="true" /> | ||
136 | 184 | <entry key="FindSelfComparison" value="true" /> | ||
137 | 185 | <entry key="FindSelfComparison2" value="true" /> | ||
138 | 186 | <entry key="FindSleepWithLockHeld" value="true" /> | ||
139 | 187 | <entry key="FindSpinLoop" value="true" /> | ||
140 | 188 | <entry key="FindSqlInjection" value="true" /> | ||
141 | 189 | <entry key="FindTwoLockWait" value="true" /> | ||
142 | 190 | <entry key="FindUncalledPrivateMethods" value="true" /> | ||
143 | 191 | <entry key="FindUnconditionalWait" value="true" /> | ||
144 | 192 | <entry key="FindUninitializedGet" value="true" /> | ||
145 | 193 | <entry key="FindUnrelatedTypesInGenericContainer" value="true" /> | ||
146 | 194 | <entry key="FindUnreleasedLock" value="true" /> | ||
147 | 195 | <entry key="FindUnsatisfiedObligation" value="true" /> | ||
148 | 196 | <entry key="FindUnsyncGet" value="true" /> | ||
149 | 197 | <entry key="FindUseOfNonSerializableValue" value="true" /> | ||
150 | 198 | <entry key="FindUselessControlFlow" value="true" /> | ||
151 | 199 | <entry key="FindUselessObjects" value="true" /> | ||
152 | 200 | <entry key="FormatStringChecker" value="true" /> | ||
153 | 201 | <entry key="FunctionsThatMightBeMistakenForProcedures" value="true" /> | ||
154 | 202 | <entry key="HugeSharedStringConstants" value="true" /> | ||
155 | 203 | <entry key="IDivResultCastToDouble" value="true" /> | ||
156 | 204 | <entry key="IncompatMask" value="true" /> | ||
157 | 205 | <entry key="InconsistentAnnotations" value="true" /> | ||
158 | 206 | <entry key="InefficientIndexOf" value="false" /> | ||
159 | 207 | <entry key="InefficientInitializationInsideLoop" value="false" /> | ||
160 | 208 | <entry key="InefficientMemberAccess" value="false" /> | ||
161 | 209 | <entry key="InefficientToArray" value="false" /> | ||
162 | 210 | <entry key="InfiniteLoop" value="true" /> | ||
163 | 211 | <entry key="InfiniteRecursiveLoop" value="true" /> | ||
164 | 212 | <entry key="InheritanceUnsafeGetResource" value="true" /> | ||
165 | 213 | <entry key="InitializationChain" value="true" /> | ||
166 | 214 | <entry key="InitializeNonnullFieldsInConstructor" value="true" /> | ||
167 | 215 | <entry key="InstantiateStaticClass" value="true" /> | ||
168 | 216 | <entry key="IntCast2LongAsInstant" value="true" /> | ||
169 | 217 | <entry key="InvalidJUnitTest" value="true" /> | ||
170 | 218 | <entry key="IteratorIdioms" value="true" /> | ||
171 | 219 | <entry key="LazyInit" value="true" /> | ||
172 | 220 | <entry key="LoadOfKnownNullValue" value="true" /> | ||
173 | 221 | <entry key="LostLoggerDueToWeakReference" value="true" /> | ||
174 | 222 | <entry key="MethodReturnCheck" value="true" /> | ||
175 | 223 | <entry key="Methods" value="true" /> | ||
176 | 224 | <entry key="MultithreadedInstanceAccess" value="true" /> | ||
177 | 225 | <entry key="MutableEnum" value="true" /> | ||
178 | 226 | <entry key="MutableLock" value="true" /> | ||
179 | 227 | <entry key="MutableStaticFields" value="true" /> | ||
180 | 228 | <entry key="Naming" value="true" /> | ||
181 | 229 | <entry key="Noise" value="false" /> | ||
182 | 230 | <entry key="NoiseNullDeref" value="false" /> | ||
183 | 231 | <entry key="NoteAnnotationRetention" value="true" /> | ||
184 | 232 | <entry key="NoteCheckReturnValueAnnotations" value="true" /> | ||
185 | 233 | <entry key="NoteDirectlyRelevantTypeQualifiers" value="true" /> | ||
186 | 234 | <entry key="NoteJCIPAnnotation" value="true" /> | ||
187 | 235 | <entry key="NoteNonNullAnnotations" value="false" /> | ||
188 | 236 | <entry key="NoteNonnullReturnValues" value="false" /> | ||
189 | 237 | <entry key="NoteSuppressedWarnings" value="true" /> | ||
190 | 238 | <entry key="NoteUnconditionalParamDerefs" value="true" /> | ||
191 | 239 | <entry key="NumberConstructor" value="true" /> | ||
192 | 240 | <entry key="OptionalReturnNull" value="true" /> | ||
193 | 241 | <entry key="OverridingEqualsNotSymmetrical" value="true" /> | ||
194 | 242 | <entry key="PreferZeroLengthArrays" value="true" /> | ||
195 | 243 | <entry key="PublicSemaphores" value="false" /> | ||
196 | 244 | <entry key="QuestionableBooleanAssignment" value="true" /> | ||
197 | 245 | <entry key="ReadOfInstanceFieldInMethodInvokedByConstructorInSuperclass" value="true" /> | ||
198 | 246 | <entry key="ReadReturnShouldBeChecked" value="true" /> | ||
199 | 247 | <entry key="RedundantConditions" value="true" /> | ||
200 | 248 | <entry key="RedundantInterfaces" value="true" /> | ||
201 | 249 | <entry key="ReflectiveClasses" value="true" /> | ||
202 | 250 | <entry key="RepeatedConditionals" value="true" /> | ||
203 | 251 | <entry key="ResolveAllReferences" value="false" /> | ||
204 | 252 | <entry key="RuntimeExceptionCapture" value="true" /> | ||
205 | 253 | <entry key="SerializableIdiom" value="true" /> | ||
206 | 254 | <entry key="StartInConstructor" value="true" /> | ||
207 | 255 | <entry key="StaticCalendarDetector" value="true" /> | ||
208 | 256 | <entry key="StringConcatenation" value="true" /> | ||
209 | 257 | <entry key="SuperfluousInstanceOf" value="true" /> | ||
210 | 258 | <entry key="SuspiciousThreadInterrupted" value="true" /> | ||
211 | 259 | <entry key="SwitchFallthrough" value="true" /> | ||
212 | 260 | <entry key="SynchronizationOnSharedBuiltinConstant" value="true" /> | ||
213 | 261 | <entry key="SynchronizeAndNullCheckField" value="true" /> | ||
214 | 262 | <entry key="SynchronizeOnClassLiteralNotGetClass" value="true" /> | ||
215 | 263 | <entry key="SynchronizingOnContentsOfFieldToProtectField" value="true" /> | ||
216 | 264 | <entry key="TestASM" value="false" /> | ||
217 | 265 | <entry key="TestDataflowAnalysis" value="false" /> | ||
218 | 266 | <entry key="TestingGround" value="false" /> | ||
219 | 267 | <entry key="TestingGround2" value="false" /> | ||
220 | 268 | <entry key="TrainFieldStoreTypes" value="true" /> | ||
221 | 269 | <entry key="TrainLongInstantfParams" value="true" /> | ||
222 | 270 | <entry key="TrainNonNullAnnotations" value="true" /> | ||
223 | 271 | <entry key="TrainUnconditionalDerefParams" value="true" /> | ||
224 | 272 | <entry key="URLProblems" value="true" /> | ||
225 | 273 | <entry key="UncallableMethodOfAnonymousClass" value="true" /> | ||
226 | 274 | <entry key="UnnecessaryMath" value="true" /> | ||
227 | 275 | <entry key="UnreadFields" value="true" /> | ||
228 | 276 | <entry key="UselessSubclassMethod" value="false" /> | ||
229 | 277 | <entry key="VarArgsProblems" value="true" /> | ||
230 | 278 | <entry key="VolatileUsage" value="true" /> | ||
231 | 279 | <entry key="WaitInLoop" value="true" /> | ||
232 | 280 | <entry key="WrongMapIterator" value="true" /> | ||
233 | 281 | <entry key="XMLFactoryBypass" value="true" /> | ||
234 | 282 | </map> | ||
235 | 283 | </option> | ||
236 | 284 | <option name="_reportCategories"> | ||
237 | 285 | <map> | ||
238 | 286 | <entry key="BAD_PRACTICE" value="true" /> | ||
239 | 287 | <entry key="CORRECTNESS" value="true" /> | ||
240 | 288 | <entry key="EXPERIMENTAL" value="true" /> | ||
241 | 289 | <entry key="I18N" value="true" /> | ||
242 | 290 | <entry key="MALICIOUS_CODE" value="true" /> | ||
243 | 291 | <entry key="MT_CORRECTNESS" value="true" /> | ||
244 | 292 | <entry key="PERFORMANCE" value="true" /> | ||
245 | 293 | <entry key="SECURITY" value="true" /> | ||
246 | 294 | <entry key="STYLE" value="true" /> | ||
247 | 295 | </map> | ||
248 | 296 | </option> | ||
249 | 297 | </component> | ||
250 | 100 | </module> | 298 | </module> |
251 | 101 | \ No newline at end of file | 299 | \ No newline at end of file |
252 | 102 | 300 | ||
253 | === modified file 'app/src/main/java/org/openlp/android2/OpenLP.java' | |||
254 | --- app/src/main/java/org/openlp/android2/OpenLP.java 2015-10-06 22:40:40 +0000 | |||
255 | +++ app/src/main/java/org/openlp/android2/OpenLP.java 2016-01-10 19:34:28 +0000 | |||
256 | @@ -42,6 +42,7 @@ | |||
257 | 42 | import org.openlp.android2.fragments.LiveListFragment; | 42 | import org.openlp.android2.fragments.LiveListFragment; |
258 | 43 | import org.openlp.android2.fragments.LiveWebFragment; | 43 | import org.openlp.android2.fragments.LiveWebFragment; |
259 | 44 | import org.openlp.android2.fragments.NavigationDrawerFragment; | 44 | import org.openlp.android2.fragments.NavigationDrawerFragment; |
260 | 45 | import org.openlp.android2.fragments.SearchFragment; | ||
261 | 45 | import org.openlp.android2.fragments.ServiceListFragment; | 46 | import org.openlp.android2.fragments.ServiceListFragment; |
262 | 46 | import org.openlp.android2.fragments.StageWebFragment; | 47 | import org.openlp.android2.fragments.StageWebFragment; |
263 | 47 | 48 | ||
264 | @@ -163,6 +164,24 @@ | |||
265 | 163 | toggerContainer(R.id.next_button, View.GONE); | 164 | toggerContainer(R.id.next_button, View.GONE); |
266 | 164 | toggerContainer(R.id.prev_button, View.GONE); | 165 | toggerContainer(R.id.prev_button, View.GONE); |
267 | 165 | break; | 166 | break; |
268 | 167 | case NavigationOptions.Search: | ||
269 | 168 | singleTab(); | ||
270 | 169 | fragmentManager.beginTransaction() | ||
271 | 170 | .replace(R.id.container, SearchFragment.newInstance()) | ||
272 | 171 | .commit(); | ||
273 | 172 | mTitle = getString(R.string.action_search); | ||
274 | 173 | toggerContainer(R.id.next_button, View.GONE); | ||
275 | 174 | toggerContainer(R.id.prev_button, View.GONE); | ||
276 | 175 | break; | ||
277 | 176 | default: | ||
278 | 177 | singleTab(); | ||
279 | 178 | fragmentManager.beginTransaction() | ||
280 | 179 | .replace(R.id.container, HomeFragment.newInstance()) | ||
281 | 180 | .commit(); | ||
282 | 181 | mTitle = getString(R.string.home); | ||
283 | 182 | toggerContainer(R.id.next_button, View.GONE); | ||
284 | 183 | toggerContainer(R.id.prev_button, View.GONE); | ||
285 | 184 | break; | ||
286 | 166 | } | 185 | } |
287 | 167 | } | 186 | } |
288 | 168 | 187 | ||
289 | 169 | 188 | ||
290 | === modified file 'app/src/main/java/org/openlp/android2/common/NavigationOptions.java' | |||
291 | --- app/src/main/java/org/openlp/android2/common/NavigationOptions.java 2015-01-19 21:09:12 +0000 | |||
292 | +++ app/src/main/java/org/openlp/android2/common/NavigationOptions.java 2016-01-10 19:34:28 +0000 | |||
293 | @@ -24,4 +24,5 @@ | |||
294 | 24 | public final static int LiveList = 2; | 24 | public final static int LiveList = 2; |
295 | 25 | public final static int StageView = 3; | 25 | public final static int StageView = 3; |
296 | 26 | public final static int LiveView = 4; | 26 | public final static int LiveView = 4; |
297 | 27 | public final static int Search = 5; | ||
298 | 27 | } | 28 | } |
299 | 28 | 29 | ||
300 | === modified file 'app/src/main/java/org/openlp/android2/common/OpenLPDialog.java' | |||
301 | --- app/src/main/java/org/openlp/android2/common/OpenLPDialog.java 2015-01-19 21:09:12 +0000 | |||
302 | +++ app/src/main/java/org/openlp/android2/common/OpenLPDialog.java 2016-01-10 19:34:28 +0000 | |||
303 | @@ -45,7 +45,8 @@ | |||
304 | 45 | protected void triggerTextRequest(String url) { | 45 | protected void triggerTextRequest(String url) { |
305 | 46 | calledURL = url; | 46 | calledURL = url; |
306 | 47 | Log.d(LOG_TAG, "Trigger Request for url " + url); | 47 | Log.d(LOG_TAG, "Trigger Request for url " + url); |
308 | 48 | String callurl = String.format("%s%s", httpClient.getAbsoluteUrl(client), url ); | 48 | String callurl = String.format("%s%s", httpClient.getAbsoluteUrl(client), url); |
309 | 49 | |||
310 | 49 | client.get(callurl, null, new TextHttpResponseHandler() { | 50 | client.get(callurl, null, new TextHttpResponseHandler() { |
311 | 50 | @Override | 51 | @Override |
312 | 51 | public void onSuccess(int statusCode, Header[] headers, String responseString) { | 52 | public void onSuccess(int statusCode, Header[] headers, String responseString) { |
313 | 52 | 53 | ||
314 | === modified file 'app/src/main/java/org/openlp/android2/common/OpenLPHttpClient.java' | |||
315 | --- app/src/main/java/org/openlp/android2/common/OpenLPHttpClient.java 2015-10-04 21:02:13 +0000 | |||
316 | +++ app/src/main/java/org/openlp/android2/common/OpenLPHttpClient.java 2016-01-10 19:34:28 +0000 | |||
317 | @@ -76,7 +76,7 @@ | |||
318 | 76 | client.setSSLSocketFactory(sf); | 76 | client.setSSLSocketFactory(sf); |
319 | 77 | } | 77 | } |
320 | 78 | catch (Exception e){ | 78 | catch (Exception e){ |
322 | 79 | // | 79 | Log.d(LOG_TAG, "Unable to support SSL"); |
323 | 80 | } | 80 | } |
324 | 81 | } | 81 | } |
325 | 82 | return urlBase; | 82 | return urlBase; |
326 | 83 | 83 | ||
327 | === added file 'app/src/main/java/org/openlp/android2/dialogs/SearchSelectionDialog.java' | |||
328 | --- app/src/main/java/org/openlp/android2/dialogs/SearchSelectionDialog.java 1970-01-01 00:00:00 +0000 | |||
329 | +++ app/src/main/java/org/openlp/android2/dialogs/SearchSelectionDialog.java 2016-01-10 19:34:28 +0000 | |||
330 | @@ -0,0 +1,135 @@ | |||
331 | 1 | /****************************************************************************** | ||
332 | 2 | * OpenLP - Open Source Lyrics Projection * | ||
333 | 3 | * --------------------------------------------------------------------------- * | ||
334 | 4 | * Copyright (c) 2011-2015 OpenLP Android Developers * | ||
335 | 5 | * --------------------------------------------------------------------------- * | ||
336 | 6 | * This program is free software; you can redistribute it and/or modify it * | ||
337 | 7 | * under the terms of the GNU General Public License as published by the Free * | ||
338 | 8 | * Software Foundation; version 2 of the License. * | ||
339 | 9 | * * | ||
340 | 10 | * This program is distributed in the hope that it will be useful, but WITHOUT * | ||
341 | 11 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * | ||
342 | 12 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * | ||
343 | 13 | * more details. * | ||
344 | 14 | * * | ||
345 | 15 | * You should have received a copy of the GNU General Public License along * | ||
346 | 16 | * with this program; if not, write to the Free Software Foundation, Inc., 59 * | ||
347 | 17 | * Temple Place, Suite 330, Boston, MA 02111-1307 USA * | ||
348 | 18 | *******************************************************************************/ | ||
349 | 19 | package org.openlp.android2.dialogs; | ||
350 | 20 | |||
351 | 21 | import android.app.AlertDialog; | ||
352 | 22 | import android.app.Dialog; | ||
353 | 23 | import android.content.DialogInterface; | ||
354 | 24 | import android.os.Bundle; | ||
355 | 25 | import android.util.Log; | ||
356 | 26 | import android.view.LayoutInflater; | ||
357 | 27 | import android.view.View; | ||
358 | 28 | import android.widget.Button; | ||
359 | 29 | import android.widget.RadioButton; | ||
360 | 30 | import android.widget.Toast; | ||
361 | 31 | import org.openlp.android2.R; | ||
362 | 32 | import org.openlp.android2.api.Api; | ||
363 | 33 | import org.openlp.android2.common.JsonHelpers; | ||
364 | 34 | import org.openlp.android2.common.OpenLPDialog; | ||
365 | 35 | import org.openlp.android2.common.OpenLPHttpClient; | ||
366 | 36 | |||
367 | 37 | public class SearchSelectionDialog extends OpenLPDialog { | ||
368 | 38 | private final String LOG_TAG = SearchSelectionDialog.class.getName(); | ||
369 | 39 | public AlertDialog dialog; | ||
370 | 40 | private String key; | ||
371 | 41 | private String plugin; | ||
372 | 42 | private String text; | ||
373 | 43 | private RadioButton sendLive; | ||
374 | 44 | private RadioButton addToService; | ||
375 | 45 | |||
376 | 46 | /** | ||
377 | 47 | * The system calls this only when creating the layout in a dialog. | ||
378 | 48 | */ | ||
379 | 49 | @Override | ||
380 | 50 | public Dialog onCreateDialog(Bundle savedInstanceState) { | ||
381 | 51 | // The only reason you might override this method when using onCreateView() is | ||
382 | 52 | // to modify any dialog characteristics. For example, the dialog includes a | ||
383 | 53 | // title by default, but your custom layout might not need it. So here you can | ||
384 | 54 | // remove the dialog title, but you must call the superclass to get the Dialog. | ||
385 | 55 | |||
386 | 56 | key = getArguments().getString("key"); | ||
387 | 57 | plugin = getArguments().getString("plugin"); | ||
388 | 58 | text = getArguments().getString("text"); | ||
389 | 59 | |||
390 | 60 | context = getActivity(); | ||
391 | 61 | httpClient = new OpenLPHttpClient(context); | ||
392 | 62 | |||
393 | 63 | AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); | ||
394 | 64 | // Get the layout inflater | ||
395 | 65 | LayoutInflater inflater = getActivity().getLayoutInflater(); | ||
396 | 66 | |||
397 | 67 | // Inflate and set the layout for the dialog | ||
398 | 68 | // Pass null as the parent view because its going in the dialog layout | ||
399 | 69 | View view = inflater.inflate(R.layout.search_action_dialog, null); | ||
400 | 70 | builder.setView(view); | ||
401 | 71 | |||
402 | 72 | sendLive = (RadioButton) view.findViewById(R.id.buttonLive); | ||
403 | 73 | sendLive.setOnClickListener(new View.OnClickListener() { | ||
404 | 74 | @Override | ||
405 | 75 | public void onClick(View v) { | ||
406 | 76 | createLive(); | ||
407 | 77 | SearchSelectionDialog.this.getDialog().cancel(); | ||
408 | 78 | } | ||
409 | 79 | }); | ||
410 | 80 | |||
411 | 81 | addToService = (RadioButton) view.findViewById(R.id.buttonService); | ||
412 | 82 | addToService.setOnClickListener(new View.OnClickListener() { | ||
413 | 83 | @Override | ||
414 | 84 | public void onClick(View v) { | ||
415 | 85 | createService(); | ||
416 | 86 | SearchSelectionDialog.this.getDialog().cancel(); | ||
417 | 87 | } | ||
418 | 88 | }); | ||
419 | 89 | |||
420 | 90 | builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { | ||
421 | 91 | public void onClick(DialogInterface dialog, int id) { | ||
422 | 92 | SearchSelectionDialog.this.getDialog().cancel(); | ||
423 | 93 | } | ||
424 | 94 | }); | ||
425 | 95 | dialog = builder.create(); | ||
426 | 96 | dialog.setOnShowListener(new DialogInterface.OnShowListener() { | ||
427 | 97 | @Override | ||
428 | 98 | public void onShow(DialogInterface dialogI) { | ||
429 | 99 | Button btnNegative = dialog.getButton(Dialog.BUTTON_NEGATIVE); | ||
430 | 100 | btnNegative.setTextSize(20); | ||
431 | 101 | } | ||
432 | 102 | }); | ||
433 | 103 | return dialog; | ||
434 | 104 | } | ||
435 | 105 | |||
436 | 106 | @Override | ||
437 | 107 | public void onResume() { | ||
438 | 108 | super.onResume(); | ||
439 | 109 | Log.d(LOG_TAG, "Resuming..."); | ||
440 | 110 | } | ||
441 | 111 | |||
442 | 112 | public void createLive() { | ||
443 | 113 | try { | ||
444 | 114 | String request = JsonHelpers.createRequestJSON("id", key); | ||
445 | 115 | String url = String.format(Api.SEARCH_PLUGIN_LIVE, plugin.toLowerCase()); | ||
446 | 116 | triggerTextRequest(String.format("%s%s", url, request)); | ||
447 | 117 | Log.d(LOG_TAG, String.format("Setting list data. apiBase(%s), text(%s)", Api.SEARCH_PLUGIN_LIVE, text)); | ||
448 | 118 | } catch (JsonHelpers.JSONHandlerException e) { | ||
449 | 119 | e.printStackTrace(); | ||
450 | 120 | Toast.makeText(context, "Request Failed", Toast.LENGTH_SHORT).show(); | ||
451 | 121 | } | ||
452 | 122 | } | ||
453 | 123 | |||
454 | 124 | public void createService() { | ||
455 | 125 | try { | ||
456 | 126 | String request = JsonHelpers.createRequestJSON("id", key); | ||
457 | 127 | String url = String.format(Api.SEARCH_PLUGIN_ADD, plugin.toLowerCase()); | ||
458 | 128 | triggerTextRequest(String.format("%s%s", url, request)); | ||
459 | 129 | Log.d(LOG_TAG, String.format("Setting list data. apiBase(%s), text(%s)", Api.SEARCH_PLUGIN_ADD, text)); | ||
460 | 130 | } catch (JsonHelpers.JSONHandlerException e) { | ||
461 | 131 | e.printStackTrace(); | ||
462 | 132 | Toast.makeText(context, "Request Failed", Toast.LENGTH_SHORT).show(); | ||
463 | 133 | } | ||
464 | 134 | } | ||
465 | 135 | } | ||
466 | 0 | 136 | ||
467 | === modified file 'app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java' | |||
468 | --- app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java 2015-05-30 08:07:36 +0000 | |||
469 | +++ app/src/main/java/org/openlp/android2/fragments/NavigationDrawerFragment.java 2016-01-10 19:34:28 +0000 | |||
470 | @@ -42,7 +42,6 @@ | |||
471 | 42 | import android.widget.ListAdapter; | 42 | import android.widget.ListAdapter; |
472 | 43 | import android.widget.ListView; | 43 | import android.widget.ListView; |
473 | 44 | import android.widget.SimpleAdapter; | 44 | import android.widget.SimpleAdapter; |
474 | 45 | import android.widget.Toast; | ||
475 | 46 | 45 | ||
476 | 47 | import org.openlp.android2.R; | 46 | import org.openlp.android2.R; |
477 | 48 | 47 | ||
478 | @@ -152,6 +151,11 @@ | |||
479 | 152 | hm4.put("icon", Integer.toString(R.drawable.ic_ondemand_video_black)); | 151 | hm4.put("icon", Integer.toString(R.drawable.ic_ondemand_video_black)); |
480 | 153 | aList.add(hm4); | 152 | aList.add(hm4); |
481 | 154 | 153 | ||
482 | 154 | HashMap<String, String> hm5 = new HashMap<String, String>(); | ||
483 | 155 | hm5.put("title", getString(R.string.action_search)); | ||
484 | 156 | hm5.put("icon", Integer.toString(R.drawable.ic_search_black)); | ||
485 | 157 | aList.add(hm5); | ||
486 | 158 | |||
487 | 155 | // Keys used in Hashmap | 159 | // Keys used in Hashmap |
488 | 156 | String[] from = {"icon", "title"}; | 160 | String[] from = {"icon", "title"}; |
489 | 157 | 161 | ||
490 | 158 | 162 | ||
491 | === added file 'app/src/main/java/org/openlp/android2/fragments/SearchFragment.java' | |||
492 | --- app/src/main/java/org/openlp/android2/fragments/SearchFragment.java 1970-01-01 00:00:00 +0000 | |||
493 | +++ app/src/main/java/org/openlp/android2/fragments/SearchFragment.java 2016-01-10 19:34:28 +0000 | |||
494 | @@ -0,0 +1,283 @@ | |||
495 | 1 | package org.openlp.android2.fragments; | ||
496 | 2 | |||
497 | 3 | import android.app.DialogFragment; | ||
498 | 4 | import android.app.Fragment; | ||
499 | 5 | import android.content.Context; | ||
500 | 6 | import android.os.Bundle; | ||
501 | 7 | import android.util.Log; | ||
502 | 8 | import android.view.KeyEvent; | ||
503 | 9 | import android.view.LayoutInflater; | ||
504 | 10 | import android.view.View; | ||
505 | 11 | import android.view.ViewGroup; | ||
506 | 12 | import android.view.inputmethod.EditorInfo; | ||
507 | 13 | import android.view.inputmethod.InputMethodManager; | ||
508 | 14 | import android.widget.AdapterView; | ||
509 | 15 | import android.widget.ArrayAdapter; | ||
510 | 16 | import android.widget.EditText; | ||
511 | 17 | import android.widget.ListView; | ||
512 | 18 | import android.widget.Spinner; | ||
513 | 19 | import android.widget.TextView; | ||
514 | 20 | import android.widget.Toast; | ||
515 | 21 | |||
516 | 22 | import com.loopj.android.http.AsyncHttpClient; | ||
517 | 23 | import com.loopj.android.http.TextHttpResponseHandler; | ||
518 | 24 | |||
519 | 25 | import org.apache.http.Header; | ||
520 | 26 | import org.json.JSONArray; | ||
521 | 27 | import org.json.JSONException; | ||
522 | 28 | import org.json.JSONObject; | ||
523 | 29 | import org.openlp.android2.R; | ||
524 | 30 | import org.openlp.android2.api.Api; | ||
525 | 31 | import org.openlp.android2.common.JsonHelpers; | ||
526 | 32 | |||
527 | 33 | import org.openlp.android2.common.OpenLPHttpClient; | ||
528 | 34 | import org.openlp.android2.dialogs.SearchSelectionDialog; | ||
529 | 35 | |||
530 | 36 | import java.util.ArrayList; | ||
531 | 37 | import java.util.HashMap; | ||
532 | 38 | import java.util.List; | ||
533 | 39 | import java.util.Map; | ||
534 | 40 | |||
535 | 41 | /** | ||
536 | 42 | |||
537 | 43 | */ | ||
538 | 44 | public class SearchFragment extends Fragment { | ||
539 | 45 | |||
540 | 46 | private final String LOG_TAG = SearchFragment.class.getName(); | ||
541 | 47 | private Spinner spinner; | ||
542 | 48 | private static AsyncHttpClient client = new AsyncHttpClient(); | ||
543 | 49 | public Context context; | ||
544 | 50 | protected String calledURL; | ||
545 | 51 | protected OpenLPHttpClient httpClient; | ||
546 | 52 | protected String updateUrl; | ||
547 | 53 | protected String searchedPlugin; | ||
548 | 54 | protected Map<String, String> pluginMap = new HashMap<String, String>(); | ||
549 | 55 | |||
550 | 56 | public SearchFragment() { | ||
551 | 57 | Log.d(LOG_TAG, "Constructor"); | ||
552 | 58 | } | ||
553 | 59 | |||
554 | 60 | public static SearchFragment newInstance() { | ||
555 | 61 | SearchFragment fragment = new SearchFragment(); | ||
556 | 62 | return fragment; | ||
557 | 63 | } | ||
558 | 64 | |||
559 | 65 | @Override | ||
560 | 66 | public void onCreate(Bundle savedInstanceState) { | ||
561 | 67 | super.onCreate(savedInstanceState); | ||
562 | 68 | } | ||
563 | 69 | |||
564 | 70 | @Override | ||
565 | 71 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { | ||
566 | 72 | context = getActivity(); | ||
567 | 73 | updateUrl = Api.SEARCHABLE_PLUGINS; | ||
568 | 74 | httpClient = new OpenLPHttpClient(context); | ||
569 | 75 | View view = inflater.inflate(R.layout.fragment_search, container, false); | ||
570 | 76 | spinner = (Spinner)view.findViewById(R.id.search_spinner); | ||
571 | 77 | triggerTextRequest(Api.SEARCHABLE_PLUGINS); | ||
572 | 78 | |||
573 | 79 | // Add search listener to text field | ||
574 | 80 | EditText editText = (EditText)view.findViewById(R.id.search_text); | ||
575 | 81 | editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { | ||
576 | 82 | @Override | ||
577 | 83 | public boolean onEditorAction(TextView tv, int actionId, KeyEvent event) { | ||
578 | 84 | if (actionId == EditorInfo.IME_ACTION_SEARCH) { | ||
579 | 85 | // Now close the keyboard as finished with | ||
580 | 86 | View view = getActivity().getCurrentFocus(); | ||
581 | 87 | if (view != null) { | ||
582 | 88 | InputMethodManager imm = | ||
583 | 89 | (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); | ||
584 | 90 | imm.hideSoftInputFromWindow(view.getWindowToken(), 0); | ||
585 | 91 | } | ||
586 | 92 | searchedPlugin = pluginMap.get(spinner.getSelectedItem().toString()); | ||
587 | 93 | requestSearch(tv.getText().toString()); | ||
588 | 94 | return true; | ||
589 | 95 | } | ||
590 | 96 | return false; | ||
591 | 97 | } | ||
592 | 98 | }); | ||
593 | 99 | return view; | ||
594 | 100 | } | ||
595 | 101 | |||
596 | 102 | @Override | ||
597 | 103 | public void onDetach() { | ||
598 | 104 | super.onDetach(); | ||
599 | 105 | } | ||
600 | 106 | |||
601 | 107 | public void manageResponse(String response, boolean notInError) { | ||
602 | 108 | if (calledURL.equals(updateUrl)) { | ||
603 | 109 | populatePluginList(response, notInError); | ||
604 | 110 | } else { | ||
605 | 111 | populateListDisplay(response, notInError); | ||
606 | 112 | } | ||
607 | 113 | } | ||
608 | 114 | |||
609 | 115 | private void populatePluginList(String response, Boolean notInError) { | ||
610 | 116 | Log.i(LOG_TAG, "populatePluginList - entry"); | ||
611 | 117 | List<String> categories = new ArrayList<String>(); | ||
612 | 118 | pluginMap.clear(); | ||
613 | 119 | |||
614 | 120 | if (notInError) { | ||
615 | 121 | try { | ||
616 | 122 | JSONArray items = new JSONObject(response).getJSONObject("results").getJSONArray("items"); | ||
617 | 123 | for (int i = 0; i < items.length(); ++i) { | ||
618 | 124 | JSONArray item = items.getJSONArray(i); | ||
619 | 125 | categories.add(item.get(1).toString()); | ||
620 | 126 | pluginMap.put(item.get(1).toString(),item.get(0).toString()); | ||
621 | 127 | } | ||
622 | 128 | } catch (JSONException e) { | ||
623 | 129 | Log.e(LOG_TAG, response); | ||
624 | 130 | e.printStackTrace(); | ||
625 | 131 | } | ||
626 | 132 | ArrayAdapter<String> LTRadapter = new ArrayAdapter<String>(getActivity(), | ||
627 | 133 | R.layout.spinner_list_item, categories); | ||
628 | 134 | LTRadapter.setDropDownViewResource(R.layout.spinner_dropdown_item); | ||
629 | 135 | spinner.setAdapter(LTRadapter); | ||
630 | 136 | Log.i(LOG_TAG, "populatePluginList - exit"); | ||
631 | 137 | } | ||
632 | 138 | } | ||
633 | 139 | |||
634 | 140 | protected void triggerTextRequest(String url) { | ||
635 | 141 | calledURL = url; | ||
636 | 142 | Log.d(LOG_TAG, "Trigger Request for url " + url); | ||
637 | 143 | String callurl = String.format("%s%s", httpClient.getAbsoluteUrl(client), url ); | ||
638 | 144 | client.get(callurl, null, new TextHttpResponseHandler() { | ||
639 | 145 | @Override | ||
640 | 146 | public void onSuccess(int statusCode, Header[] headers, String responseString) { | ||
641 | 147 | // called when response HTTP status is "200 OK" | ||
642 | 148 | manageResponse(responseString, true); | ||
643 | 149 | } | ||
644 | 150 | |||
645 | 151 | @Override | ||
646 | 152 | public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { | ||
647 | 153 | // called when response HTTP status is "4XX" (eg. 401, 403, 404) | ||
648 | 154 | if (statusCode == 401) { | ||
649 | 155 | Toast.makeText(context, R.string.httpreturn_unauthorised, Toast.LENGTH_LONG).show(); | ||
650 | 156 | } else { | ||
651 | 157 | Toast.makeText(context, R.string.unable, Toast.LENGTH_LONG).show(); | ||
652 | 158 | } | ||
653 | 159 | manageResponse(responseString, false); | ||
654 | 160 | } | ||
655 | 161 | }); | ||
656 | 162 | } | ||
657 | 163 | |||
658 | 164 | public void requestSearch(String text) { | ||
659 | 165 | updateUrl = Api.SEARCH_PLUGIN_FORMATTED; | ||
660 | 166 | try { | ||
661 | 167 | String request = JsonHelpers.createRequestJSON("text", text); | ||
662 | 168 | String url = String.format(Api.SEARCH_PLUGIN_FORMATTED, searchedPlugin); | ||
663 | 169 | triggerTextRequest(String.format("%s%s", url, request)); | ||
664 | 170 | Log.d(LOG_TAG, String.format("Search request. apiBase(%s), text(%s)", searchedPlugin, text)); | ||
665 | 171 | } catch (JsonHelpers.JSONHandlerException e) { | ||
666 | 172 | e.printStackTrace(); | ||
667 | 173 | Toast.makeText(context, "Search Request Failed", Toast.LENGTH_SHORT).show(); | ||
668 | 174 | } | ||
669 | 175 | } | ||
670 | 176 | |||
671 | 177 | public void populateListDisplay(String json, boolean notInError) { | ||
672 | 178 | Log.i(LOG_TAG, "populateListDisplay - entry"); | ||
673 | 179 | ListView list = (ListView)getActivity().findViewById(R.id.searchlistView); | ||
674 | 180 | final ArrayList<JSONArray> listitems = new ArrayList<JSONArray>(); | ||
675 | 181 | if (notInError) { | ||
676 | 182 | try { | ||
677 | 183 | JSONArray items = new JSONObject(json).getJSONObject("results").getJSONArray("items"); | ||
678 | 184 | for (int i = 0; i < items.length(); ++i) { | ||
679 | 185 | JSONArray item = items.getJSONArray(i); | ||
680 | 186 | listitems.add(item); | ||
681 | 187 | } | ||
682 | 188 | } catch (JSONException e) { | ||
683 | 189 | Log.e(LOG_TAG,json); | ||
684 | 190 | e.printStackTrace(); | ||
685 | 191 | } | ||
686 | 192 | } | ||
687 | 193 | |||
688 | 194 | final StableArrayAdapter adapter = new StableArrayAdapter(context, | ||
689 | 195 | android.R.layout.simple_list_item_1, listitems); | ||
690 | 196 | |||
691 | 197 | list.setAdapter(adapter); | ||
692 | 198 | list.setOnItemClickListener(new AdapterView.OnItemClickListener() { | ||
693 | 199 | |||
694 | 200 | @Override | ||
695 | 201 | public void onItemClick(AdapterView<?> parent, final View view, | ||
696 | 202 | int position, long id) { | ||
697 | 203 | final JSONArray item = (JSONArray) parent.getItemAtPosition(position); | ||
698 | 204 | //Toast.makeText(context, "Item Pressed " + String.valueOf(position) + item, | ||
699 | 205 | // Toast.LENGTH_SHORT).show(); | ||
700 | 206 | String it = ""; | ||
701 | 207 | try { | ||
702 | 208 | it = (String)item.get(1); | ||
703 | 209 | } catch (JSONException e) { | ||
704 | 210 | e.printStackTrace(); | ||
705 | 211 | } | ||
706 | 212 | Bundle args = new Bundle(); | ||
707 | 213 | args.putString("plugin", searchedPlugin); | ||
708 | 214 | args.putString("text", it); | ||
709 | 215 | args.putString("key", Long.toString(id)); | ||
710 | 216 | DialogFragment newFragment = new SearchSelectionDialog(); | ||
711 | 217 | newFragment.setArguments(args); | ||
712 | 218 | newFragment.show(getFragmentManager(), "TAG"); | ||
713 | 219 | |||
714 | 220 | } | ||
715 | 221 | }); | ||
716 | 222 | Log.i(LOG_TAG, "populateListDisplay - exit"); | ||
717 | 223 | } | ||
718 | 224 | |||
719 | 225 | private class StableArrayAdapter extends ArrayAdapter<JSONArray> { | ||
720 | 226 | |||
721 | 227 | HashMap<String, Integer> mIdMap = new HashMap<String, Integer>(); | ||
722 | 228 | |||
723 | 229 | public StableArrayAdapter(Context context, int textViewResourceId, | ||
724 | 230 | List<JSONArray> objects) { | ||
725 | 231 | super(context, textViewResourceId, objects); | ||
726 | 232 | for (int i = 0; i < objects.size(); ++i) { | ||
727 | 233 | JSONArray item = objects.get(i); | ||
728 | 234 | try { | ||
729 | 235 | mIdMap.put(item.get(1).toString(), Integer.valueOf(item.get(0).toString())); | ||
730 | 236 | } catch (JSONException e) { | ||
731 | 237 | e.printStackTrace(); | ||
732 | 238 | } | ||
733 | 239 | } | ||
734 | 240 | } | ||
735 | 241 | |||
736 | 242 | @Override | ||
737 | 243 | public View getView(int position, View convertView, ViewGroup parent) { | ||
738 | 244 | // Get the data item for this position | ||
739 | 245 | //User user = getItem(position); | ||
740 | 246 | String item = null; | ||
741 | 247 | try { | ||
742 | 248 | item = getItem(position).get(1).toString(); | ||
743 | 249 | } catch (JSONException e) { | ||
744 | 250 | e.printStackTrace(); | ||
745 | 251 | } | ||
746 | 252 | // Check if an existing view is being reused, otherwise inflate the view | ||
747 | 253 | if (convertView == null) { | ||
748 | 254 | convertView = LayoutInflater.from(getContext()).inflate(R.layout.search_result_row, | ||
749 | 255 | parent, false); | ||
750 | 256 | } | ||
751 | 257 | // Lookup view for data population | ||
752 | 258 | TextView tvItem = (TextView) convertView.findViewById(R.id.searchListRow); | ||
753 | 259 | // Populate the data into the template view using the data object | ||
754 | 260 | tvItem.setText(item); | ||
755 | 261 | // Return the completed view to render on screen | ||
756 | 262 | return convertView; | ||
757 | 263 | } | ||
758 | 264 | |||
759 | 265 | @Override | ||
760 | 266 | public long getItemId(int position) { | ||
761 | 267 | String item = null; | ||
762 | 268 | try { | ||
763 | 269 | item = getItem(position).get(1).toString(); | ||
764 | 270 | } catch (JSONException e) { | ||
765 | 271 | e.printStackTrace(); | ||
766 | 272 | } | ||
767 | 273 | return mIdMap.get(item); | ||
768 | 274 | } | ||
769 | 275 | |||
770 | 276 | @Override | ||
771 | 277 | public boolean hasStableIds() { | ||
772 | 278 | return true; | ||
773 | 279 | } | ||
774 | 280 | |||
775 | 281 | } | ||
776 | 282 | |||
777 | 283 | } | ||
778 | 0 | 284 | ||
779 | === added file 'app/src/main/res/drawable-hdpi/ic_search_black.png' | |||
780 | 1 | Binary files app/src/main/res/drawable-hdpi/ic_search_black.png 1970-01-01 00:00:00 +0000 and app/src/main/res/drawable-hdpi/ic_search_black.png 2016-01-10 19:34:28 +0000 differ | 285 | Binary files app/src/main/res/drawable-hdpi/ic_search_black.png 1970-01-01 00:00:00 +0000 and app/src/main/res/drawable-hdpi/ic_search_black.png 2016-01-10 19:34:28 +0000 differ |
781 | === added file 'app/src/main/res/drawable-mdpi/ic_search_black.png' | |||
782 | 2 | Binary files app/src/main/res/drawable-mdpi/ic_search_black.png 1970-01-01 00:00:00 +0000 and app/src/main/res/drawable-mdpi/ic_search_black.png 2016-01-10 19:34:28 +0000 differ | 286 | Binary files app/src/main/res/drawable-mdpi/ic_search_black.png 1970-01-01 00:00:00 +0000 and app/src/main/res/drawable-mdpi/ic_search_black.png 2016-01-10 19:34:28 +0000 differ |
783 | === added file 'app/src/main/res/drawable-xhdpi/ic_search_black.png' | |||
784 | 3 | Binary files app/src/main/res/drawable-xhdpi/ic_search_black.png 1970-01-01 00:00:00 +0000 and app/src/main/res/drawable-xhdpi/ic_search_black.png 2016-01-10 19:34:28 +0000 differ | 287 | Binary files app/src/main/res/drawable-xhdpi/ic_search_black.png 1970-01-01 00:00:00 +0000 and app/src/main/res/drawable-xhdpi/ic_search_black.png 2016-01-10 19:34:28 +0000 differ |
785 | === added file 'app/src/main/res/drawable-xxhdpi/ic_search_black.png' | |||
786 | 4 | Binary files app/src/main/res/drawable-xxhdpi/ic_search_black.png 1970-01-01 00:00:00 +0000 and app/src/main/res/drawable-xxhdpi/ic_search_black.png 2016-01-10 19:34:28 +0000 differ | 288 | Binary files app/src/main/res/drawable-xxhdpi/ic_search_black.png 1970-01-01 00:00:00 +0000 and app/src/main/res/drawable-xxhdpi/ic_search_black.png 2016-01-10 19:34:28 +0000 differ |
787 | === added file 'app/src/main/res/layout/fragment_search.xml' | |||
788 | --- app/src/main/res/layout/fragment_search.xml 1970-01-01 00:00:00 +0000 | |||
789 | +++ app/src/main/res/layout/fragment_search.xml 2016-01-10 19:34:28 +0000 | |||
790 | @@ -0,0 +1,90 @@ | |||
791 | 1 | <?xml version="1.0" encoding="utf-8"?> | ||
792 | 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
793 | 3 | android:orientation="vertical" android:layout_width="match_parent" | ||
794 | 4 | android:layout_height="match_parent" | ||
795 | 5 | android:paddingLeft="15dp" | ||
796 | 6 | android:paddingTop="15dp" | ||
797 | 7 | android:paddingRight="15dp" | ||
798 | 8 | > | ||
799 | 9 | |||
800 | 10 | <LinearLayout | ||
801 | 11 | android:orientation="vertical" | ||
802 | 12 | android:layout_width="match_parent" | ||
803 | 13 | android:layout_height="wrap_content"> | ||
804 | 14 | |||
805 | 15 | <LinearLayout | ||
806 | 16 | android:orientation="horizontal" | ||
807 | 17 | android:layout_width="match_parent" | ||
808 | 18 | android:layout_height="match_parent"> | ||
809 | 19 | |||
810 | 20 | <TextView | ||
811 | 21 | android:layout_width="wrap_content" | ||
812 | 22 | android:layout_height="wrap_content" | ||
813 | 23 | android:text="Select Plugin" | ||
814 | 24 | android:id="@+id/search_title" | ||
815 | 25 | android:textAppearance="?android:attr/textAppearanceLarge" | ||
816 | 26 | android:textSize="40px" | ||
817 | 27 | android:height="70px" | ||
818 | 28 | android:paddingLeft="30dp" | ||
819 | 29 | android:paddingRight="30dp"/> | ||
820 | 30 | |||
821 | 31 | <Spinner | ||
822 | 32 | android:layout_width="0dp" | ||
823 | 33 | android:layout_height="wrap_content" | ||
824 | 34 | android:id="@+id/search_spinner" | ||
825 | 35 | android:layout_weight="0.4" | ||
826 | 36 | android:textAppearance="?android:attr/textAppearanceLarge"/> | ||
827 | 37 | |||
828 | 38 | </LinearLayout> | ||
829 | 39 | |||
830 | 40 | <LinearLayout | ||
831 | 41 | android:orientation="horizontal" | ||
832 | 42 | android:layout_width="match_parent" | ||
833 | 43 | android:layout_height="match_parent"> | ||
834 | 44 | |||
835 | 45 | <TextView | ||
836 | 46 | android:layout_width="wrap_content" | ||
837 | 47 | android:layout_height="wrap_content" | ||
838 | 48 | android:textAppearance="?android:attr/textAppearanceLarge" | ||
839 | 49 | android:text="Search Text" | ||
840 | 50 | android:textSize="40px" | ||
841 | 51 | android:height="70px" | ||
842 | 52 | android:id="@+id/search_value_desc" | ||
843 | 53 | android:paddingLeft="30dp" | ||
844 | 54 | android:paddingRight="30dp"/> | ||
845 | 55 | |||
846 | 56 | <EditText | ||
847 | 57 | android:imeOptions="actionSearch" | ||
848 | 58 | android:layout_width="wrap_content" | ||
849 | 59 | android:layout_height="wrap_content" | ||
850 | 60 | android:id="@+id/search_text" | ||
851 | 61 | style="@android:style/Animation.InputMethod" | ||
852 | 62 | android:layout_weight="0.87" | ||
853 | 63 | android:inputType="text" | ||
854 | 64 | android:textSize="40px" | ||
855 | 65 | android:height="70px" | ||
856 | 66 | /> | ||
857 | 67 | </LinearLayout> | ||
858 | 68 | |||
859 | 69 | <LinearLayout | ||
860 | 70 | android:orientation="horizontal" | ||
861 | 71 | android:layout_width="match_parent" | ||
862 | 72 | android:layout_height="match_parent" | ||
863 | 73 | android:weightSum="1"> | ||
864 | 74 | |||
865 | 75 | <ListView | ||
866 | 76 | android:layout_width="match_parent" | ||
867 | 77 | android:layout_height="fill_parent" | ||
868 | 78 | android:id="@+id/searchlistView" | ||
869 | 79 | android:textAppearance="?android:attr/textAppearanceLarge" | ||
870 | 80 | android:paddingLeft="30dp" | ||
871 | 81 | android:paddingRight="30dp" | ||
872 | 82 | android:layout_marginTop="20dp" | ||
873 | 83 | android:layout_marginBottom="20dp" | ||
874 | 84 | android:textSize="40px" | ||
875 | 85 | android:height="70px" | ||
876 | 86 | android:layout_weight="1"/> | ||
877 | 87 | </LinearLayout> | ||
878 | 88 | </LinearLayout> | ||
879 | 89 | |||
880 | 90 | </LinearLayout> | ||
881 | 0 | \ No newline at end of file | 91 | \ No newline at end of file |
882 | 1 | 92 | ||
883 | === added file 'app/src/main/res/layout/search_action_dialog.xml' | |||
884 | --- app/src/main/res/layout/search_action_dialog.xml 1970-01-01 00:00:00 +0000 | |||
885 | +++ app/src/main/res/layout/search_action_dialog.xml 2016-01-10 19:34:28 +0000 | |||
886 | @@ -0,0 +1,40 @@ | |||
887 | 1 | <?xml version="1.0" encoding="utf-8"?> | ||
888 | 2 | |||
889 | 3 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
890 | 4 | |||
891 | 5 | android:orientation="vertical" | ||
892 | 6 | android:layout_width="fill_parent" | ||
893 | 7 | android:layout_height="fill_parent" | ||
894 | 8 | android:weightSum="1"> | ||
895 | 9 | <TextView | ||
896 | 10 | android:layout_width="315dp" | ||
897 | 11 | android:layout_height="wrap_content" | ||
898 | 12 | android:textAppearance="?android:attr/textAppearanceMedium" | ||
899 | 13 | android:text="@string/searchResults" | ||
900 | 14 | android:id="@+id/textView" | ||
901 | 15 | android:textStyle="bold|italic" | ||
902 | 16 | android:textSize="40px" | ||
903 | 17 | android:height="70px" | ||
904 | 18 | android:layout_marginTop="10dp" | ||
905 | 19 | android:layout_marginBottom="10dp"/> | ||
906 | 20 | <RadioButton | ||
907 | 21 | android:layout_width="match_parent" | ||
908 | 22 | android:layout_height="wrap_content" | ||
909 | 23 | android:text="@string/searchSendLive" | ||
910 | 24 | android:id="@+id/buttonLive" | ||
911 | 25 | android:textSize="20sp" | ||
912 | 26 | android:height="30dp" | ||
913 | 27 | android:clickable="true" | ||
914 | 28 | android:layout_marginTop="20dp" | ||
915 | 29 | android:layout_marginBottom="20dp"/> | ||
916 | 30 | <RadioButton | ||
917 | 31 | android:layout_width="match_parent" | ||
918 | 32 | android:layout_height="wrap_content" | ||
919 | 33 | android:text="@string/searchAddToService" | ||
920 | 34 | android:id="@+id/buttonService" | ||
921 | 35 | android:textSize="20sp" | ||
922 | 36 | android:height="40dp" | ||
923 | 37 | android:clickable="true" | ||
924 | 38 | android:layout_marginTop="20dp" | ||
925 | 39 | android:layout_marginBottom="20dp"/> | ||
926 | 40 | </LinearLayout> | ||
927 | 0 | \ No newline at end of file | 41 | \ No newline at end of file |
928 | 1 | 42 | ||
929 | === added file 'app/src/main/res/layout/search_result.xml' | |||
930 | --- app/src/main/res/layout/search_result.xml 1970-01-01 00:00:00 +0000 | |||
931 | +++ app/src/main/res/layout/search_result.xml 2016-01-10 19:34:28 +0000 | |||
932 | @@ -0,0 +1,11 @@ | |||
933 | 1 | <?xml version="1.0" encoding="utf-8"?> | ||
934 | 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
935 | 3 | android:orientation="vertical" android:layout_width="match_parent" | ||
936 | 4 | android:layout_height="match_parent"> | ||
937 | 5 | <TextView | ||
938 | 6 | android:id="@+id/serachitem" | ||
939 | 7 | android:layout_width="wrap_content" | ||
940 | 8 | android:layout_height="wrap_content" | ||
941 | 9 | android:text="Name" /> | ||
942 | 10 | |||
943 | 11 | </LinearLayout> | ||
944 | 0 | \ No newline at end of file | 12 | \ No newline at end of file |
945 | 1 | 13 | ||
946 | === added file 'app/src/main/res/layout/search_result_row.xml' | |||
947 | --- app/src/main/res/layout/search_result_row.xml 1970-01-01 00:00:00 +0000 | |||
948 | +++ app/src/main/res/layout/search_result_row.xml 2016-01-10 19:34:28 +0000 | |||
949 | @@ -0,0 +1,18 @@ | |||
950 | 1 | <?xml version="1.0" encoding="utf-8"?> | ||
951 | 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
952 | 3 | android:layout_width="match_parent" | ||
953 | 4 | android:layout_height="match_parent" | ||
954 | 5 | android:orientation="vertical" > | ||
955 | 6 | |||
956 | 7 | <TextView android:layout_width="wrap_content" | ||
957 | 8 | android:layout_height="wrap_content" | ||
958 | 9 | android:textStyle="bold" | ||
959 | 10 | android:textColor="#000000" | ||
960 | 11 | android:textSize="40sp" | ||
961 | 12 | android:paddingTop="10dp" | ||
962 | 13 | android:paddingRight="5dp" | ||
963 | 14 | android:paddingLeft="5dp" | ||
964 | 15 | android:paddingEnd="5dp" | ||
965 | 16 | android:paddingBottom="10dp" | ||
966 | 17 | android:id="@+id/searchListRow"/> | ||
967 | 18 | </LinearLayout> | ||
968 | 0 | \ No newline at end of file | 19 | \ No newline at end of file |
969 | 1 | 20 | ||
970 | === added file 'app/src/main/res/layout/spinner_dropdown_item.xml' | |||
971 | --- app/src/main/res/layout/spinner_dropdown_item.xml 1970-01-01 00:00:00 +0000 | |||
972 | +++ app/src/main/res/layout/spinner_dropdown_item.xml 2016-01-10 19:34:28 +0000 | |||
973 | @@ -0,0 +1,11 @@ | |||
974 | 1 | <?xml version="1.0" encoding="utf-8"?> | ||
975 | 2 | <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" | ||
976 | 3 | android:id="@android:id/text1" | ||
977 | 4 | style="?android:attr/spinnerDropDownItemStyle" | ||
978 | 5 | android:singleLine="true" | ||
979 | 6 | android:layout_width="match_parent" | ||
980 | 7 | android:layout_height="?android:attr/listPreferredItemHeight" | ||
981 | 8 | android:ellipsize="marquee" | ||
982 | 9 | android:textColor="#000" | ||
983 | 10 | android:textStyle="bold|italic" | ||
984 | 11 | android:textAppearance="?android:attr/textAppearanceLarge"/> | ||
985 | 0 | \ No newline at end of file | 12 | \ No newline at end of file |
986 | 1 | 13 | ||
987 | === added file 'app/src/main/res/layout/spinner_list_item.xml' | |||
988 | --- app/src/main/res/layout/spinner_list_item.xml 1970-01-01 00:00:00 +0000 | |||
989 | +++ app/src/main/res/layout/spinner_list_item.xml 2016-01-10 19:34:28 +0000 | |||
990 | @@ -0,0 +1,11 @@ | |||
991 | 1 | <?xml version="1.0" encoding="utf-8"?> | ||
992 | 2 | <TextView xmlns:android="http://schemas.android.com/apk/res/android" | ||
993 | 3 | android:id="@android:id/text1" | ||
994 | 4 | style="?android:attr/spinnerItemStyle" | ||
995 | 5 | android:singleLine="true" | ||
996 | 6 | android:layout_width="match_parent" | ||
997 | 7 | android:layout_height="wrap_content" | ||
998 | 8 | android:textColor="#000" | ||
999 | 9 | android:textAppearance="?android:attr/textAppearanceLarge" | ||
1000 | 10 | android:ellipsize="marquee" | ||
1001 | 11 | android:textStyle="bold|italic" /> | ||
1002 | 0 | \ No newline at end of file | 12 | \ No newline at end of file |
1003 | 1 | 13 | ||
1004 | === modified file 'app/src/main/res/values/strings.xml' | |||
1005 | --- app/src/main/res/values/strings.xml 2015-10-08 15:30:54 +0000 | |||
1006 | +++ app/src/main/res/values/strings.xml 2016-01-10 19:34:28 +0000 | |||
1007 | @@ -29,14 +29,14 @@ | |||
1008 | 29 | <string name="display_blank_summary">Select the required display</string> | 29 | <string name="display_blank_summary">Select the required display</string> |
1009 | 30 | <string name="display_desktop">Display Desktop background</string> | 30 | <string name="display_desktop">Display Desktop background</string> |
1010 | 31 | <string name="display_list_autoscroll">Allow the selected item to scroll to the centre of the list</string> | 31 | <string name="display_list_autoscroll">Allow the selected item to scroll to the centre of the list</string> |
1012 | 32 | <string name="display_reset">Show Live display</string> | 32 | <string name="display_reset">Live display</string> |
1013 | 33 | <string name="display_settings">Display Setting</string> | 33 | <string name="display_settings">Display Setting</string> |
1014 | 34 | <string name="display_screen">Display Black only</string> | 34 | <string name="display_screen">Display Black only</string> |
1015 | 35 | <string name="display_theme">Display Theme only</string> | 35 | <string name="display_theme">Display Theme only</string> |
1016 | 36 | <string name="enable_custom_timeouts">Enable Custom Timeouts</string> | 36 | <string name="enable_custom_timeouts">Enable Custom Timeouts</string> |
1017 | 37 | <string name="enter_alert_text">Enter Alert Text</string> | 37 | <string name="enter_alert_text">Enter Alert Text</string> |
1018 | 38 | <string name="enable_autoscroll">Allow displays to auto center</string> | 38 | <string name="enable_autoscroll">Allow displays to auto center</string> |
1020 | 39 | <string name="home">Home</string> | 39 | <string name="home">Home</string> |
1021 | 40 | <string name="httpreturn_unauthorised">Unauthorised Access, please enter valid username and password</string> | 40 | <string name="httpreturn_unauthorised">Unauthorised Access, please enter valid username and password</string> |
1022 | 41 | <string name="live_list">Live List</string> | 41 | <string name="live_list">Live List</string> |
1023 | 42 | <string name="live_view">Live View</string> | 42 | <string name="live_view">Live View</string> |
1024 | @@ -48,6 +48,10 @@ | |||
1025 | 48 | <string name="previous">Previous</string> | 48 | <string name="previous">Previous</string> |
1026 | 49 | <string name="process">Process</string> | 49 | <string name="process">Process</string> |
1027 | 50 | <string name="service_list">Service List</string> | 50 | <string name="service_list">Service List</string> |
1028 | 51 | <string name="searchResults">Search Results</string> | ||
1029 | 52 | <string name="searchSendLive">Send Live</string> | ||
1030 | 53 | <string name="searchAddToService">Add to Service</string> | ||
1031 | 54 | <string name="showingResults">Showing Results for \'%s\'</string> | ||
1032 | 51 | <string name="stage_view">Stage View</string> | 55 | <string name="stage_view">Stage View</string> |
1033 | 52 | <string name="text_size">Select display text size</string> | 56 | <string name="text_size">Select display text size</string> |
1034 | 53 | <string name="text_size_summary">Change the Service text size</string> | 57 | <string name="text_size_summary">Change the Service text size</string> |