Skip to content

Commit 255605c

Browse files
committed
Implement more TechStacks App features
1 parent ad3fdbf commit 255605c

File tree

15 files changed

+367
-90
lines changed

15 files changed

+367
-90
lines changed

src/AndroidClient/android/android.iml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="net.servicestack" external.system.module.version="0.0.1" type="JAVA_MODULE" version="4">
2+
<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="net.servicestack" external.system.module.version="0.0.2" type="JAVA_MODULE" version="4">
33
<component name="FacetManager">
44
<facet type="android-gradle" name="Android-Gradle">
55
<configuration>
@@ -62,6 +62,7 @@
6262
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
6363
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
6464
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
65+
<excludeFolder url="file://$MODULE_DIR$/build/docs" />
6566
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
6667
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
6768
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
@@ -81,7 +82,11 @@
8182
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
8283
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
8384
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
85+
<excludeFolder url="file://$MODULE_DIR$/build/libs" />
8486
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
87+
<excludeFolder url="file://$MODULE_DIR$/build/poms" />
88+
<excludeFolder url="file://$MODULE_DIR$/build/reports" />
89+
<excludeFolder url="file://$MODULE_DIR$/build/test-results" />
8590
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
8691
</content>
8792
<orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" />

src/AndroidClient/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apply plugin: 'com.android.library'
22
apply plugin: 'com.github.dcendents.android-maven'
33
apply plugin: 'com.jfrog.bintray'
44

5-
version = "0.0.1"
5+
version = "0.0.2"
66

77
android {
88
compileSdkVersion 21

src/AndroidClient/app/app.iml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@
8181
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
8282
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
8383
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
84-
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
8584
</content>
8685
<orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" />
8786
<orderEntry type="sourceFolder" forTests="false" />

src/AndroidClient/client/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apply plugin: 'com.android.library'
22
apply plugin: 'com.github.dcendents.android-maven'
33
apply plugin: 'com.jfrog.bintray'
44

5-
version = "0.0.1"
5+
version = "0.0.2"
66

77
android {
88
compileSdkVersion 21

src/AndroidClient/client/client.iml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="net.servicestack" external.system.module.version="0.0.1" type="JAVA_MODULE" version="4">
2+
<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="net.servicestack" external.system.module.version="0.0.2" type="JAVA_MODULE" version="4">
33
<component name="FacetManager">
44
<facet type="android-gradle" name="Android-Gradle">
55
<configuration>
@@ -82,6 +82,9 @@
8282
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
8383
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
8484
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
85+
<excludeFolder url="file://$MODULE_DIR$/build/poms" />
86+
<excludeFolder url="file://$MODULE_DIR$/build/reports" />
87+
<excludeFolder url="file://$MODULE_DIR$/build/test-results" />
8588
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
8689
</content>
8790
<orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" />

src/AndroidClient/client/src/main/java/net/servicestack/client/Utils.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import java.util.List;
2828
import java.util.UUID;
2929

30-
import static net.servicestack.client.Func.last;
30+
import static net.servicestack.client.Func.*;
3131

3232
// Generic Utils
3333
public class Utils {
@@ -611,4 +611,21 @@ public static String toHumanFriendlyUrl(String url){
611611
url = trimEnd(last(splitOnFirst(url, "://")), '/');
612612
return url;
613613
}
614+
615+
public static <K,V> HashMap<K,ArrayList<V>> createMap(ArrayList<V> xs, Function<V,K> f){
616+
HashMap<K,ArrayList<V>> to = new HashMap<>();
617+
if (xs == null) return to;
618+
619+
for (V val : xs){
620+
K key = f.apply(val);
621+
622+
ArrayList<V> list = to.get(key);
623+
if (list == null)
624+
to.put(key, list = new ArrayList<V>());
625+
626+
list.add(val);
627+
}
628+
629+
return to;
630+
}
614631
}

src/AndroidClient/techstacks/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,4 @@ dependencies {
2323
compile fileTree(dir: 'libs', include: ['*.jar'])
2424
compile 'com.android.support:appcompat-v7:21.0.3'
2525
compile project(':android')
26-
compile 'net.servicestack:android:0.0.1'
2726
}

src/AndroidClient/techstacks/src/main/AndroidManifest.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@
2323
<category android:name="android.intent.category.DEFAULT" />
2424
</intent-filter>
2525
</activity>
26+
<activity
27+
android:name=".TechStackActivity"
28+
android:label="TechStack" >
29+
<intent-filter>
30+
<action android:name="android.intent.action.VIEW" />
31+
<category android:name="android.intent.category.DEFAULT" />
32+
</intent-filter>
33+
</activity>
2634
</application>
2735

2836
</manifest>

src/AndroidClient/techstacks/src/main/java/servicestack/net/techstacks/App.java

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
package servicestack.net.techstacks;
22

3+
import android.app.Activity;
4+
import android.content.Intent;
35
import android.graphics.Bitmap;
6+
import android.net.Uri;
47

58
import net.servicestack.android.AndroidServiceClient;
69
import net.servicestack.android.AndroidUtils;
710
import net.servicestack.client.AsyncResult;
811
import net.servicestack.client.Utils;
912

10-
import servicestack.net.techstacks.dto.*;
11-
12-
import java.net.HttpURLConnection;
1313
import java.util.ArrayList;
1414
import java.util.HashMap;
1515

16+
import servicestack.net.techstacks.dto.*;
17+
1618
public class App {
1719

1820
public static App Instance = new App();
@@ -151,6 +153,26 @@ public void success(GetTechnologyResponse response) {
151153
});
152154
}
153155

156+
GetTechnologyStackResponse techStack = null;
157+
public GetTechnologyStackResponse getTechStack() {
158+
return techStack;
159+
}
160+
161+
public void loadTechStack(String slug) {
162+
if (techStack != null){
163+
onUpdate(DataType.TechStack);
164+
}
165+
166+
client.getAsync(new GetTechnologyStack().setSlug(slug),
167+
new AsyncResult<GetTechnologyStackResponse>() {
168+
@Override
169+
public void success(GetTechnologyStackResponse response) {
170+
techStack = response;
171+
onUpdate(DataType.TechStack);
172+
}
173+
});
174+
}
175+
154176
HashMap<String,Bitmap> imgCache = new HashMap<>();
155177
public void loadImage(final String imgUrl, final ImageResult callback) {
156178
Bitmap img = imgCache.get(imgUrl);
@@ -170,14 +192,33 @@ public void success(byte[] imgBytes) {
170192
}
171193
}
172194

195+
public static void openTechStack(Activity activity, String slug){
196+
if (slug == null) return;
197+
Intent openTechStack = new Intent(activity, TechStackActivity.class);
198+
openTechStack.putExtra("slug", slug);
199+
activity.startActivity(openTechStack);
200+
}
201+
202+
public static void openTechnology(Activity activity, String slug){
203+
if (slug == null) return;
204+
Intent openTechnology = new Intent(activity, TechnologyActivity.class);
205+
openTechnology.putExtra("slug", slug);
206+
activity.startActivity(openTechnology);
207+
}
208+
209+
public static void openUrl(Activity activity, String url){
210+
if (url == null) return;
211+
activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
212+
}
213+
173214
public static interface AppDataListener
174215
{
175216
public void onUpdate(AppData data, DataType dataType);
176217
}
177218

178-
public static class ImageResult
219+
public static interface ImageResult
179220
{
180-
public void success(Bitmap img){}
221+
public void success(Bitmap img);
181222
}
182223

183224
public static enum DataType
@@ -189,5 +230,4 @@ public static enum DataType
189230
TechStack,
190231
}
191232

192-
193233
}

src/AndroidClient/techstacks/src/main/java/servicestack/net/techstacks/MainActivity.java

Lines changed: 31 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
package servicestack.net.techstacks;
22

3-
import android.content.Intent;
4-
import android.graphics.Bitmap;
5-
import android.support.v7.app.ActionBarActivity;
6-
import android.support.v7.app.ActionBar;
3+
import android.os.Bundle;
74
import android.support.v4.app.Fragment;
85
import android.support.v4.app.FragmentManager;
9-
import android.support.v4.app.FragmentTransaction;
106
import android.support.v4.app.FragmentPagerAdapter;
11-
import android.os.Bundle;
7+
import android.support.v4.app.FragmentTransaction;
128
import android.support.v4.view.ViewPager;
9+
import android.support.v7.app.ActionBar;
10+
import android.support.v7.app.ActionBarActivity;
1311
import android.text.Editable;
1412
import android.text.TextWatcher;
1513
import android.view.LayoutInflater;
@@ -20,20 +18,21 @@
2018
import android.widget.AdapterView;
2119
import android.widget.ArrayAdapter;
2220
import android.widget.EditText;
23-
import android.widget.ImageView;
2421
import android.widget.ListView;
2522
import android.widget.Spinner;
26-
import android.widget.TextView;
2723

2824
import com.android.internal.util.Predicate;
2925

30-
import static net.servicestack.client.Func.*;
31-
3226
import java.util.ArrayList;
3327

34-
import static net.servicestack.client.Func.map;
28+
import servicestack.net.techstacks.dto.Option;
29+
import servicestack.net.techstacks.dto.Technology;
30+
import servicestack.net.techstacks.dto.TechnologyInfo;
31+
import servicestack.net.techstacks.dto.TechnologyStack;
3532

36-
import servicestack.net.techstacks.dto.*;
33+
import static net.servicestack.client.Func.Function;
34+
import static net.servicestack.client.Func.filter;
35+
import static net.servicestack.client.Func.map;
3736

3837
public class MainActivity extends ActionBarActivity implements ActionBar.TabListener {
3938

@@ -177,11 +176,7 @@ public static class TopRatedFragment extends Fragment implements App.AppDataList
177176
Option selectedCategory;
178177

179178
public static TopRatedFragment create(int sectionNumber) {
180-
TopRatedFragment fragment = new TopRatedFragment();
181-
Bundle args = new Bundle();
182-
args.putInt("sectionNumber", sectionNumber);
183-
fragment.setArguments(args);
184-
return fragment;
179+
return new TopRatedFragment();
185180
}
186181

187182
@Override
@@ -215,9 +210,7 @@ public void onNothingSelected(AdapterView<?> parent) {
215210
@Override
216211
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
217212
TechnologyInfo result = getTopTechnologies(App.getData()).get(position);
218-
Intent intent = new Intent(getActivity(), TechnologyActivity.class);
219-
intent.putExtra("slug", result.getSlug());
220-
startActivity(intent);
213+
App.openTechnology(getActivity(), result.getSlug());
221214
}
222215
});
223216

@@ -285,18 +278,15 @@ public boolean apply(TechnologyInfo tech) {
285278

286279
public static class TechStacksFragment extends Fragment implements App.AppDataListener {
287280
public static TechStacksFragment create(int sectionNumber) {
288-
TechStacksFragment fragment = new TechStacksFragment();
289-
Bundle args = new Bundle();
290-
args.putInt("sectionNumber", sectionNumber);
291-
fragment.setArguments(args);
292-
return fragment;
281+
return new TechStacksFragment();
293282
}
294283

295284
@Override
296285
public void onCreate(Bundle savedInstanceState) {
297286
super.onCreate(savedInstanceState);
298-
App.getData().addListener(this);
299-
App.getData().searchTechStacks("");
287+
App.getData()
288+
.addListener(this)
289+
.searchTechStacks("");
300290
}
301291

302292
@Override
@@ -315,6 +305,15 @@ public void onTextChanged(CharSequence s, int start, int before, int count) {
315305
@Override public void afterTextChanged(Editable s) {}
316306
});
317307

308+
ListView list = (ListView) rootView.findViewById(R.id.listTechStacks);
309+
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
310+
@Override
311+
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
312+
TechnologyStack result = App.getData().getSearchTechStacksResponse().getResults().get(position);
313+
App.openTechStack(getActivity(), result.getSlug());
314+
}
315+
});
316+
318317
return rootView;
319318
}
320319

@@ -345,18 +344,15 @@ public String apply(TechnologyStack o) {
345344

346345
public static class TechnologiesFragment extends Fragment implements App.AppDataListener {
347346
public static TechnologiesFragment create(int sectionNumber) {
348-
TechnologiesFragment fragment = new TechnologiesFragment();
349-
Bundle args = new Bundle();
350-
args.putInt("sectionNumber", sectionNumber);
351-
fragment.setArguments(args);
352-
return fragment;
347+
return new TechnologiesFragment();
353348
}
354349

355350
@Override
356351
public void onCreate(Bundle savedInstanceState) {
357352
super.onCreate(savedInstanceState);
358-
App.getData().addListener(this);
359-
App.getData().searchTechnologies("");
353+
App.getData()
354+
.addListener(this)
355+
.searchTechnologies("");
360356
}
361357

362358
@Override
@@ -380,9 +376,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) {
380376
@Override
381377
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
382378
Technology result = App.getData().getSearchTechnologiesResponse().getResults().get(position);
383-
Intent intent = new Intent(getActivity(), TechnologyActivity.class);
384-
intent.putExtra("slug", result.getSlug());
385-
startActivity(intent);
379+
App.openTechnology(getActivity(), result.getSlug());
386380
}
387381
});
388382

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy