Skip to content
Browse files

Merge branch 'master' of https://github.com/btelintelo/campjoy

  • Loading branch information...
2 parents 6927a60 + 6895bf0 commit 2259c14be12f97059215cfdabbf085ed6ffc0cd0 @samus samus committed Oct 20, 2013
Showing with 758 additions and 113 deletions.
  1. +6 −8 android/IdentitreeStarterKit/AndroidManifest.xml
  2. +1 −1 android/IdentitreeStarterKit/assets/questions.json
  3. +14 −0 android/IdentitreeStarterKit/res/anim/grow_from_bottom.xml
  4. +14 −0 android/IdentitreeStarterKit/res/anim/grow_from_bottomleft_to_topright.xml
  5. +14 −0 android/IdentitreeStarterKit/res/anim/grow_from_bottomright_to_topleft.xml
  6. +14 −0 android/IdentitreeStarterKit/res/anim/grow_from_top.xml
  7. +14 −0 android/IdentitreeStarterKit/res/anim/grow_from_topleft_to_bottomright.xml
  8. +14 −0 android/IdentitreeStarterKit/res/anim/grow_from_topright_to_bottomleft.xml
  9. +7 −0 android/IdentitreeStarterKit/res/anim/rail.xml
  10. +14 −0 android/IdentitreeStarterKit/res/anim/shrink_from_bottom.xml
  11. +14 −0 android/IdentitreeStarterKit/res/anim/shrink_from_bottomleft_to_topright.xml
  12. +14 −0 android/IdentitreeStarterKit/res/anim/shrink_from_bottomright_to_topleft.xml
  13. +14 −0 android/IdentitreeStarterKit/res/anim/shrink_from_top.xml
  14. +14 −0 android/IdentitreeStarterKit/res/anim/shrink_from_topleft_to_bottomright.xml
  15. +14 −0 android/IdentitreeStarterKit/res/anim/shrink_from_topright_to_bottomleft.xml
  16. BIN android/IdentitreeStarterKit/res/drawable-hdpi/quickaction_arrow_down.png
  17. BIN android/IdentitreeStarterKit/res/drawable-hdpi/quickaction_arrow_up.png
  18. BIN android/IdentitreeStarterKit/res/drawable-mdpi/quickaction_arrow_down.png
  19. BIN android/IdentitreeStarterKit/res/drawable-mdpi/quickaction_arrow_up.png
  20. +61 −0 android/IdentitreeStarterKit/res/layout/hot_tap_bubble.xml
  21. +38 −0 android/IdentitreeStarterKit/res/values/styles.xml
  22. +1 −1 android/IdentitreeStarterKit/src/org/campjoy/identitree/starter/activities/GlossaryActivity.java
  23. +6 −3 android/IdentitreeStarterKit/src/org/campjoy/identitree/starter/activities/SplashActivity.java
  24. +3 −0 android/IdentitreeStarterKit/src/org/campjoy/identitree/starter/fragments/QuestionFragment.java
  25. +2 −1 android/IdentitreeStarterKit/src/org/campjoy/identitree/starter/fragments/TreeInfoFragment.java
  26. +23 −2 android/IdentitreeStarterKit/src/org/campjoy/identitree/starter/model/GlossaryModel.java
  27. +21 −34 android/IdentitreeStarterKit/src/org/campjoy/identitree/starter/model/TreeModel.java
  28. +26 −34 android/IdentitreeStarterKit/src/org/campjoy/identitree/starter/popup/HotTap.java
  29. +233 −0 android/IdentitreeStarterKit/src/org/campjoy/identitree/starter/popup/HotTapBubble.java
  30. +128 −0 android/IdentitreeStarterKit/src/org/campjoy/identitree/starter/popup/PopupWindows.java
  31. BIN data/homescreenimages/images/indentitree_home.png
  32. +34 −29 ios/Camp Joy Outdoors/Base.lproj/Main_iPhone.storyboard
View
14 android/IdentitreeStarterKit/AndroidManifest.xml
@@ -14,18 +14,17 @@
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
- <activity android:name="org.campjoy.identitree.starter.activities.SplashActivity" >
+ <activity android:name=".activities.SplashActivity"
+ android:noHistory="true">
<intent-filter>
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.MAIN" />
</intent-filter>
- </activity><activity android:name="org.campjoy.identitree.starter.MainTabActivity" android:label="@string/title_activity_main_tab">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
-
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
+ </activity>
+ <activity
+ android:name="org.campjoy.identitree.starter.MainTabActivity"
+ android:label="@string/title_activity_main_tab" >
</activity>
<activity android:name="org.campjoy.identitree.starter.MainActivity" >
</activity>
@@ -43,7 +42,6 @@
</activity>
<activity android:name="org.campjoy.identitree.starter.activities.GlossaryActivity" >
</activity>
-
</application>
</manifest>
View
2 android/IdentitreeStarterKit/assets/questions.json
@@ -135,7 +135,7 @@
"choices":[{
"text": "Leaf scars below bud; buds are yellowish in color.",
"nextid": "",
- "treeid": "butternut_hickory"
+ "treeid": "bitternut_hickory"
},
{
"text": "Buds not yellowish in color.",
View
14 android/IdentitreeStarterKit/res/anim/grow_from_bottom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+ <scale
+ android:fromXScale="0.3" android:toXScale="1.0"
+ android:fromYScale="0.3" android:toYScale="1.0"
+ android:pivotX="50%" android:pivotY="100%"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+ <alpha
+ android:interpolator="@android:anim/decelerate_interpolator"
+ android:fromAlpha="0.0" android:toAlpha="1.0"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+</set>
View
14 android/IdentitreeStarterKit/res/anim/grow_from_bottomleft_to_topright.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+ <scale
+ android:fromXScale="0.3" android:toXScale="1.0"
+ android:fromYScale="0.3" android:toYScale="1.0"
+ android:pivotX="0%" android:pivotY="50%"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+ <alpha
+ android:interpolator="@android:anim/decelerate_interpolator"
+ android:fromAlpha="0.0" android:toAlpha="1.0"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+</set>
View
14 android/IdentitreeStarterKit/res/anim/grow_from_bottomright_to_topleft.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+ <scale
+ android:fromXScale="0.3" android:toXScale="1.0"
+ android:fromYScale="0.3" android:toYScale="1.0"
+ android:pivotX="100%" android:pivotY="50%"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+ <alpha
+ android:interpolator="@android:anim/decelerate_interpolator"
+ android:fromAlpha="0.0" android:toAlpha="1.0"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+</set>
View
14 android/IdentitreeStarterKit/res/anim/grow_from_top.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+ <scale
+ android:fromXScale="0.3" android:toXScale="1.0"
+ android:fromYScale="0.3" android:toYScale="1.0"
+ android:pivotX="50%" android:pivotY="0%"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+ <alpha
+ android:interpolator="@android:anim/decelerate_interpolator"
+ android:fromAlpha="0.0" android:toAlpha="1.0"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+</set>
View
14 android/IdentitreeStarterKit/res/anim/grow_from_topleft_to_bottomright.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+ <scale
+ android:fromXScale="0.3" android:toXScale="1.0"
+ android:fromYScale="0.3" android:toYScale="1.0"
+ android:pivotX="0%" android:pivotY="0%"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+ <alpha
+ android:interpolator="@android:anim/decelerate_interpolator"
+ android:fromAlpha="0.0" android:toAlpha="1.0"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+</set>
View
14 android/IdentitreeStarterKit/res/anim/grow_from_topright_to_bottomleft.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+ <scale
+ android:fromXScale="0.3" android:toXScale="1.0"
+ android:fromYScale="0.3" android:toYScale="1.0"
+ android:pivotX="100%" android:pivotY="0%"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+ <alpha
+ android:interpolator="@android:anim/decelerate_interpolator"
+ android:fromAlpha="0.0" android:toAlpha="1.0"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+</set>
View
7 android/IdentitreeStarterKit/res/anim/rail.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<translate
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:fromXDelta="100%p"
+ android:toXDelta="0"
+ android:duration="325" />
View
14 android/IdentitreeStarterKit/res/anim/shrink_from_bottom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+ <scale
+ android:fromXScale="1.0" android:toXScale="0.3"
+ android:fromYScale="1.0" android:toYScale="0.3"
+ android:pivotX="50%" android:pivotY="0%"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+ <alpha
+ android:interpolator="@android:anim/accelerate_interpolator"
+ android:fromAlpha="1.0" android:toAlpha="0.0"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+</set>
View
14 android/IdentitreeStarterKit/res/anim/shrink_from_bottomleft_to_topright.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+ <scale
+ android:fromXScale="1.0" android:toXScale="0.3"
+ android:fromYScale="1.0" android:toYScale="0.3"
+ android:pivotX="100%" android:pivotY="0%"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+ <alpha
+ android:interpolator="@android:anim/accelerate_interpolator"
+ android:fromAlpha="1.0" android:toAlpha="0.0"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+</set>
View
14 android/IdentitreeStarterKit/res/anim/shrink_from_bottomright_to_topleft.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+ <scale
+ android:fromXScale="1.0" android:toXScale="0.3"
+ android:fromYScale="1.0" android:toYScale="0.3"
+ android:pivotX="0%" android:pivotY="0%"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+ <alpha
+ android:interpolator="@android:anim/accelerate_interpolator"
+ android:fromAlpha="1.0" android:toAlpha="0.0"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+</set>
View
14 android/IdentitreeStarterKit/res/anim/shrink_from_top.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+ <scale
+ android:fromXScale="1.0" android:toXScale="0.3"
+ android:fromYScale="1.0" android:toYScale="0.3"
+ android:pivotX="50%" android:pivotY="100%"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+ <alpha
+ android:interpolator="@android:anim/accelerate_interpolator"
+ android:fromAlpha="1.0" android:toAlpha="0.0"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+</set>
View
14 android/IdentitreeStarterKit/res/anim/shrink_from_topleft_to_bottomright.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+ <scale
+ android:fromXScale="1.0" android:toXScale="0.3"
+ android:fromYScale="1.0" android:toYScale="0.3"
+ android:pivotX="100%" android:pivotY="100%"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+ <alpha
+ android:interpolator="@android:anim/accelerate_interpolator"
+ android:fromAlpha="1.0" android:toAlpha="0.0"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+</set>
View
14 android/IdentitreeStarterKit/res/anim/shrink_from_topright_to_bottomleft.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+ <scale
+ android:fromXScale="1.0" android:toXScale="0.3"
+ android:fromYScale="1.0" android:toYScale="0.3"
+ android:pivotX="0%" android:pivotY="100%"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+ <alpha
+ android:interpolator="@android:anim/accelerate_interpolator"
+ android:fromAlpha="1.0" android:toAlpha="0.0"
+ android:duration="@android:integer/config_shortAnimTime"
+ />
+</set>
View
BIN android/IdentitreeStarterKit/res/drawable-hdpi/quickaction_arrow_down.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN android/IdentitreeStarterKit/res/drawable-hdpi/quickaction_arrow_up.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN android/IdentitreeStarterKit/res/drawable-mdpi/quickaction_arrow_down.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN android/IdentitreeStarterKit/res/drawable-mdpi/quickaction_arrow_up.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
61 android/IdentitreeStarterKit/res/layout/hot_tap_bubble.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** /res/layout/quickaction.xml
+**
+** Author: Lorensius W. L. T <lorenz@londatiga.net>
+**
+*/
+-->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+
+ <FrameLayout
+ android:layout_marginTop="10dip"
+ android:id="@+id/header2"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"/>
+
+ <ImageView
+ android:id="@+id/arrow_up"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/quickaction_arrow_up" />
+
+ <LinearLayout
+ android:id="@+id/popuptext"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:background="@android:drawable/screen_background_light_transparent">
+
+ <TextView
+ android:id="@+id/bubbletitle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+
+ <TextView
+ android:id="@+id/bubbledescription"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+
+ </LinearLayout>
+
+ <FrameLayout
+ android:id="@+id/footer"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/popuptext" />
+
+ <ImageView
+ android:id="@+id/arrow_down"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="-1dip"
+ android:layout_below="@id/footer"
+ android:src="@drawable/quickaction_arrow_down" />
+
+</RelativeLayout>
View
38 android/IdentitreeStarterKit/res/values/styles.xml
@@ -35,5 +35,43 @@
</style>
<style name="ButtonBarButton" />
+
+ <style name="Animations" />
+
+ <!-- PopDownMenu -->
+ <style name="Animations.PopDownMenu" />
+
+ <style name="Animations.PopDownMenu.Left">
+ <item name="@android:windowEnterAnimation">@anim/grow_from_topleft_to_bottomright</item>
+ <item name="@android:windowExitAnimation">@anim/shrink_from_bottomright_to_topleft</item>
+ </style>
+
+ <style name="Animations.PopDownMenu.Right">
+ <item name="@android:windowEnterAnimation">@anim/grow_from_topright_to_bottomleft</item>
+ <item name="@android:windowExitAnimation">@anim/shrink_from_bottomleft_to_topright</item>
+ </style>
+
+ <style name="Animations.PopDownMenu.Center">
+ <item name="@android:windowEnterAnimation">@anim/grow_from_top</item>
+ <item name="@android:windowExitAnimation">@anim/shrink_from_bottom</item>
+ </style>
+
+ <!-- PopUpMenu -->
+ <style name="Animations.PopUpMenu" />
+
+ <style name="Animations.PopUpMenu.Left">
+ <item name="@android:windowEnterAnimation">@anim/grow_from_bottomleft_to_topright</item>
+ <item name="@android:windowExitAnimation">@anim/shrink_from_topright_to_bottomleft</item>
+ </style>
+
+ <style name="Animations.PopUpMenu.Right">
+ <item name="@android:windowEnterAnimation">@anim/grow_from_bottomright_to_topleft</item>
+ <item name="@android:windowExitAnimation">@anim/shrink_from_topleft_to_bottomright</item>
+ </style>
+
+ <style name="Animations.PopUpMenu.Center">
+ <item name="@android:windowEnterAnimation">@anim/grow_from_bottom</item>
+ <item name="@android:windowExitAnimation">@anim/shrink_from_top</item>
+ </style>
</resources>
View
2 .../IdentitreeStarterKit/src/org/campjoy/identitree/starter/activities/GlossaryActivity.java
@@ -16,7 +16,7 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_glossary);
- GlossaryModel glossary = new GlossaryModel(getApplicationContext());
+ GlossaryModel glossary = GlossaryModel.loadInstance(getApplicationContext());
GlossaryAdapter adapter = new GlossaryAdapter(getApplicationContext(), glossary);
ListView termListView = (ListView) findViewById(R.id.glossary_list);
View
9 ...id/IdentitreeStarterKit/src/org/campjoy/identitree/starter/activities/SplashActivity.java
@@ -6,6 +6,8 @@
import org.campjoy.identitree.starter.MainActivity;
import org.campjoy.identitree.starter.MainTabActivity;
import org.campjoy.identitree.starter.R;
+import org.campjoy.identitree.starter.model.GlossaryModel;
+import org.campjoy.identitree.starter.model.TreeModel;
import android.app.Activity;
import android.content.Intent;
@@ -36,7 +38,9 @@ protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_splash);
splashLayoutImg = (ImageView)findViewById(R.id.splash_activity_image);
-
+ TreeModel.loadInstance(getApplicationContext());
+ GlossaryModel.loadInstance(getApplicationContext());
+
try {
splashLayoutImg.setBackgroundDrawable(Drawable.createFromStream(getAssets().open("american_basswood_img_0107.jpg"), null));
} catch (IOException e) {
@@ -53,8 +57,7 @@ protected void onCreate(Bundle savedInstanceState) {
@Override
public void onAnimationEnd(Animation animation) {
- // TODO Auto-generated method stub
- startActivity(new Intent(SplashActivity.this, MainTabActivity.class));
+ startActivity(new Intent(this, MainTabActivity.class));
}
@Override
View
3 ...d/IdentitreeStarterKit/src/org/campjoy/identitree/starter/fragments/QuestionFragment.java
@@ -8,7 +8,9 @@
import org.campjoy.identitree.starter.FragmentActivityBase;
import org.campjoy.identitree.starter.FragmentBase;
import org.campjoy.identitree.starter.R;
+import org.campjoy.identitree.starter.model.GlossaryModel;
import org.campjoy.identitree.starter.model.QuestionModel;
+import org.campjoy.identitree.starter.popup.HotTap;
import android.content.res.AssetManager;
import android.graphics.drawable.Drawable;
@@ -65,6 +67,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
secondText = model.getQuestions().get(id).getChoice2().getText();
firstTextView.setText(firstText);
+ new HotTap(getActivity(), firstTextView);
secondTextView.setText(secondText);
pathTextView.setText(pathsTraversed);
View
3 ...d/IdentitreeStarterKit/src/org/campjoy/identitree/starter/fragments/TreeInfoFragment.java
@@ -52,7 +52,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle bundle = this.getArguments();
String id = bundle.getString("TreeId");
- tree = TreeModel.getInstance(getActivity().getApplicationContext()).getTreeById(id);
+ TreeModel model = TreeModel.getInstance();
+ tree = model.getTreeById(id);
if(tree !=null)
{
treeDescription = (TextView)v.findViewById(R.id.tree_description);
View
25 android/IdentitreeStarterKit/src/org/campjoy/identitree/starter/model/GlossaryModel.java
@@ -13,8 +13,29 @@
private HashMap<String, Term> termMap;
private String[] terms;
+
+ private static GlossaryModel instance = null;
- public GlossaryModel(final Context applicationContext) {
+ public static GlossaryModel loadInstance(Context applicationContext)
+ {
+ if (instance == null)
+ {
+ instance = new GlossaryModel(applicationContext);
+ }
+
+ return instance;
+ }
+
+ public static GlossaryModel getInstance()
+ {
+ if (instance == null)
+ {
+ throw new IllegalStateException("You must load the model before you call getInstance");
+ }
+ return instance;
+ }
+
+ private GlossaryModel(final Context applicationContext) {
super(applicationContext, "glossary.json");
}
@@ -28,7 +49,7 @@ protected void parseJson(String json) {
for (int i = 0; i < terms.length(); i++) {
JSONObject oneTerm = terms.getJSONObject(i);
Term t = new Term(oneTerm);
- this.termMap.put(t.getName(), t);
+ this.termMap.put(t.getName().toLowerCase(), t);
}
} catch (JSONException e) {
e.printStackTrace();
View
55 android/IdentitreeStarterKit/src/org/campjoy/identitree/starter/model/TreeModel.java
@@ -18,34 +18,36 @@
private static TreeModel instance;
private HashMap<String, Tree> trees;
- public TreeModel(Context applicationContext)
- {
+ private TreeModel(Context applicationContext) {
super(applicationContext, "trees.json");
}
-
- public static TreeModel getInstance(Context applicationContext) {
- if(instance ==null)
- {
+
+ public static TreeModel loadInstance(Context applicationContext) {
+ if (instance == null) {
instance = new TreeModel(applicationContext);
}
return instance;
}
-
-
+
+ public static TreeModel getInstance() {
+ if (instance == null) {
+ throw new IllegalStateException(
+ "You must call loadInstance before you can call getInstance");
+ }
+ return instance;
+ }
+
@Override
- protected void parseJson(String json)
- {
- if(trees ==null)
- {
+ protected void parseJson(String json) {
+ if (trees == null) {
trees = new HashMap<String, Tree>();
}
-
+
try {
JSONObject readableJson = new JSONObject(json);
JSONArray trees = readableJson.getJSONArray("trees");
-
- for(int i = 0; i < trees.length(); i++)
- {
+
+ for (int i = 0; i < trees.length(); i++) {
JSONObject oneTree = trees.getJSONObject(i);
Tree t = new Tree(oneTree);
this.trees.put(t.getId(), t);
@@ -54,23 +56,8 @@ protected void parseJson(String json)
Log.e(LOG_TAG, "Failed to load trees from json");
}
}
-
- public Tree getTreeById(String id)
- {
- Tree result = null;
-
- Iterator<Entry<String, Tree>> it = trees.entrySet().iterator();
- while (it.hasNext()) {
-
- Map.Entry<String, Tree> treePair = (Map.Entry<String, Tree>)it.next();
- if(treePair.getKey().equalsIgnoreCase(id))
- {
- return treePair.getValue();
- }
- it.remove(); // avoids a ConcurrentModificationException
- }
-
- return result;
-
+
+ public Tree getTreeById(String id) {
+ return trees.get(id);
}
}
View
60 android/IdentitreeStarterKit/src/org/campjoy/identitree/starter/popup/HotTap.java
@@ -5,6 +5,7 @@
import org.campjoy.identitree.starter.R;
import org.campjoy.identitree.starter.model.GlossaryModel;
+import org.campjoy.identitree.starter.model.Term;
import android.content.Context;
import android.graphics.drawable.Drawable;
@@ -22,21 +23,21 @@
import android.widget.PopupWindow.OnDismissListener;
import android.widget.TextView;
-public class HotTap implements OnTouchListener, OnDismissListener {
+public class HotTap implements OnTouchListener {
+ private static final String LOG_TAG = HotTap.class.getSimpleName();
+
private final LayoutInflater inflater;
private final GlossaryModel glossary;
- private PopupWindow popup = null;
- private boolean dismissFlag = false;
+ private HotTapBubble popup = null;
private float popupX = -1f;
private float popupY = -1f;
- public HotTap(Context activityContext, View v, GlossaryModel glossary) {
+ public HotTap(Context activityContext, View v) {
inflater = LayoutInflater.from(activityContext);
+ glossary = GlossaryModel.getInstance();
v.setOnTouchListener(this);
createSpans(v);
-
- this.glossary = glossary;
}
private void createSpans(View v) {
@@ -69,12 +70,19 @@ private ClickableSpan getClickableSpan() {
@Override
public void onClick(View widget) {
TextView tv = (TextView) widget;
- String s = tv
- .getText()
- .subSequence(tv.getSelectionStart(),
- tv.getSelectionEnd()).toString();
+ String s;
+ try {
+ s = tv.getText()
+ .subSequence(tv.getSelectionStart(),
+ tv.getSelectionEnd()).toString();
+ } catch (Exception ex) {
+ Log.e(LOG_TAG, "Error finding hot tap location");
+ return;
+ }
if (popup == null) {
- initializeAndShowPopup(tv);
+ initializeAndShowPopup(tv, s);
+ } else {
+ popup.show(tv, popupX, popupY);
}
Log.d("tapped on:", s);
}
@@ -84,23 +92,13 @@ public void updateDrawState(TextPaint ds) {
}
};
}
-
- private void initializeAndShowPopup(View parent)
- {
- if(dismissFlag)
- {
- dismissFlag = false;
- return;
- }
- View popupView = inflater.inflate(R.layout.glossary_popup, null);
- popup = new PopupWindow(popupView, 500, 0);
- popup.setOnDismissListener(HotTap.this);
- popup.setOutsideTouchable(true);
-
- Drawable bubbleBackground = inflater.getContext().getResources().getDrawable(R.drawable.bubble);
- popup.setBackgroundDrawable(bubbleBackground);
- popup.setWindowLayoutMode(0, LayoutParams.WRAP_CONTENT);
- popup.showAsDropDown(parent, (int) popupX, (int) popupY);
+
+ private void initializeAndShowPopup(View parent, String title) {
+ Term term = glossary.getTermById(title);
+ popup = new HotTapBubble(inflater.getContext(), term.getName(),
+ term.getDescription());
+
+ popup.show(parent, popupX, popupY);
}
public static Integer[] getIndices(String s, char c) {
@@ -120,10 +118,4 @@ public boolean onTouch(View v, MotionEvent event) {
System.out.println(event.getX() + " " + event.getY());
return false;
}
-
- @Override
- public void onDismiss() {
- dismissFlag = true;
- popup = null;
- }
}
View
233 android/IdentitreeStarterKit/src/org/campjoy/identitree/starter/popup/HotTapBubble.java
@@ -0,0 +1,233 @@
+package org.campjoy.identitree.starter.popup;
+
+import org.campjoy.identitree.starter.R;
+
+import android.content.Context;
+
+import android.graphics.Rect;
+
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.PopupWindow.OnDismissListener;
+
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
+import android.view.animation.Interpolator;
+
+public class HotTapBubble extends PopupWindows implements OnDismissListener {
+ private ImageView mArrowUp;
+ private ImageView mArrowDown;
+ private Animation mTrackAnim;
+ private LayoutInflater inflater;
+ private ViewGroup mTrack;
+ private OnDismissListener mDismissListener;
+
+ private TextView mTitle;
+ private TextView mDescription;
+
+ private int mChildPos;
+ private int mAnimStyle;
+
+ public static final int ANIM_GROW_FROM_LEFT = 1;
+ public static final int ANIM_GROW_FROM_RIGHT = 2;
+ public static final int ANIM_GROW_FROM_CENTER = 3;
+ public static final int ANIM_AUTO = 4;
+
+ /**
+ * Constructor.
+ *
+ * @param context Context
+ */
+ public HotTapBubble(Context context, String title, String description) {
+ super(context);
+
+ inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+ mTrackAnim = AnimationUtils.loadAnimation(context, R.anim.rail);
+
+ mTrackAnim.setInterpolator(new Interpolator() {
+ public float getInterpolation(float t) {
+ // Pushes past the target area, then snaps back into place.
+ // Equation for graphing: 1.2-((x*1.6)-1.1)^2
+ final float inner = (t * 1.55f) - 1.1f;
+
+ return 1.2f - inner * inner;
+ }
+ });
+
+ setRootViewId(R.layout.hot_tap_bubble);
+
+ mAnimStyle = ANIM_AUTO;
+ mChildPos = 0;
+
+ setTitle(title);
+ setDescription(description);
+ }
+
+ /**
+ * Set root view.
+ *
+ * @param id Layout resource id
+ */
+ public void setRootViewId(int id) {
+ mRootView = (ViewGroup) inflater.inflate(id, null);
+
+ mArrowDown = (ImageView) mRootView.findViewById(R.id.arrow_down);
+ mArrowUp = (ImageView) mRootView.findViewById(R.id.arrow_up);
+
+ //This was previously defined on show() method, moved here to prevent force close that occured
+ //when tapping fastly on a view to show quickaction dialog.
+ //Thanx to zammbi (github.com/zammbi)
+ mRootView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
+ mTitle = (TextView) mRootView.findViewById(R.id.bubbletitle);
+ mDescription = (TextView) mRootView.findViewById(R.id.bubbledescription);
+
+ setContentView(mRootView);
+ }
+
+ /**
+ * Set animation style.
+ *
+ * @param mAnimStyle animation style, default is set to ANIM_AUTO
+ */
+ public void setAnimStyle(int mAnimStyle) {
+ this.mAnimStyle = mAnimStyle;
+ }
+
+ public void setTitle(String title)
+ {
+ mTitle.setText(title);
+ }
+
+ public void setDescription(String description)
+ {
+ mDescription.setText(description);
+ }
+
+ /**
+ * Show popup mWindow
+ */
+ public void show (View anchor, float xOffset, float yOffset) {
+ preShow();
+
+ int[] location = new int[2];
+
+ anchor.getLocationOnScreen(location);
+
+ Rect anchorRect = new Rect(location[0], location[1], location[0] + anchor.getWidth(), location[1]
+ + anchor.getHeight());
+
+ //mRootView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
+ mRootView.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
+
+ int rootWidth = mRootView.getMeasuredWidth();
+ int rootHeight = mRootView.getMeasuredHeight();
+
+ int screenWidth = mWindowManager.getDefaultDisplay().getWidth();
+ //int screenHeight = mWindowManager.getDefaultDisplay().getHeight();
+
+ int xPos = (screenWidth - rootWidth) / 2;
+ int yPos = anchorRect.top - rootHeight;
+
+ boolean onTop = true;
+
+ // display on bottom
+ if (rootHeight > anchor.getTop()) {
+ yPos = anchorRect.bottom;
+ onTop = false;
+ }
+
+ showArrow(((onTop) ? R.id.arrow_down : R.id.arrow_up), (int)xOffset);
+
+ setAnimationStyle(screenWidth, anchorRect.centerX(), onTop);
+
+ mWindow.showAtLocation(anchor, Gravity.NO_GRAVITY, xPos, yPos);
+ }
+
+ /**
+ * Set animation style
+ *
+ * @param screenWidth Screen width
+ * @param requestedX distance from left screen
+ * @param onTop flag to indicate where the popup should be displayed. Set TRUE if displayed on top of anchor and vice versa
+ */
+ private void setAnimationStyle(int screenWidth, int requestedX, boolean onTop) {
+ int arrowPos = requestedX - mArrowUp.getMeasuredWidth()/2;
+
+ switch (mAnimStyle) {
+ case ANIM_GROW_FROM_LEFT:
+ mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Left : R.style.Animations_PopDownMenu_Left);
+ break;
+
+ case ANIM_GROW_FROM_RIGHT:
+ mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Right : R.style.Animations_PopDownMenu_Right);
+ break;
+
+ case ANIM_GROW_FROM_CENTER:
+ mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Center : R.style.Animations_PopDownMenu_Center);
+ break;
+
+ case ANIM_AUTO:
+ if (arrowPos <= screenWidth/4) {
+ mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Left : R.style.Animations_PopDownMenu_Left);
+ } else if (arrowPos > screenWidth/4 && arrowPos < 3 * (screenWidth/4)) {
+ mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Center : R.style.Animations_PopDownMenu_Center);
+ } else {
+ mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopDownMenu_Right : R.style.Animations_PopDownMenu_Right);
+ }
+
+ break;
+ }
+ }
+
+ /**
+ * Show arrow
+ *
+ * @param whichArrow arrow type resource id
+ * @param requestedX distance from left screen
+ */
+ private void showArrow(int whichArrow, int requestedX) {
+ final View showArrow = (whichArrow == R.id.arrow_up) ? mArrowUp : mArrowDown;
+ final View hideArrow = (whichArrow == R.id.arrow_up) ? mArrowDown : mArrowUp;
+
+ final int arrowWidth = mArrowUp.getMeasuredWidth();
+
+ showArrow.setVisibility(View.VISIBLE);
+
+ ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams)showArrow.getLayoutParams();
+
+ param.leftMargin = requestedX - arrowWidth / 2;
+
+ hideArrow.setVisibility(View.INVISIBLE);
+ }
+
+ /**
+ * Set listener for window dismissed. This listener will only be fired if the quicakction dialog is dismissed
+ * by clicking outside the dialog or clicking on sticky item.
+ */
+ public void setOnDismissListener(HotTapBubble.OnDismissListener listener) {
+ setOnDismissListener(this);
+
+ mDismissListener = listener;
+ }
+
+ @Override
+ public void onDismiss() {
+ if (mDismissListener != null) {
+ mDismissListener.onDismiss();
+ }
+ }
+ /**
+ * Listener for window dismiss
+ *
+ */
+ public interface OnDismissListener {
+ public abstract void onDismiss();
+ }
+}
View
128 android/IdentitreeStarterKit/src/org/campjoy/identitree/starter/popup/PopupWindows.java
@@ -0,0 +1,128 @@
+package org.campjoy.identitree.starter.popup;
+
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.WindowManager;
+import android.view.View.OnTouchListener;
+
+import android.widget.PopupWindow;
+import android.content.Context;
+
+public class PopupWindows {
+ protected Context mContext;
+ protected PopupWindow mWindow;
+ protected View mRootView;
+ protected Drawable mBackground = null;
+ protected WindowManager mWindowManager;
+
+ /**
+ * Constructor.
+ *
+ * @param context Context
+ */
+ public PopupWindows(Context context) {
+ mContext = context;
+ mWindow = new PopupWindow(context);
+
+ mWindow.setTouchInterceptor(new OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
+ mWindow.dismiss();
+
+ return true;
+ }
+
+ return false;
+ }
+ });
+
+ mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
+ }
+
+ /**
+ * On dismiss
+ */
+ protected void onDismiss() {
+ }
+
+ /**
+ * On show
+ */
+ protected void onShow() {
+ }
+
+ /**
+ * On pre show
+ */
+ protected void preShow() {
+ if (mRootView == null)
+ throw new IllegalStateException("setContentView was not called with a view to display.");
+
+ onShow();
+
+ if (mBackground == null)
+ mWindow.setBackgroundDrawable(new BitmapDrawable());
+ else
+ mWindow.setBackgroundDrawable(mBackground);
+
+ mWindow.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
+ mWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
+ mWindow.setTouchable(true);
+ mWindow.setFocusable(true);
+ mWindow.setOutsideTouchable(true);
+
+ mWindow.setContentView(mRootView);
+ }
+
+ /**
+ * Set background drawable.
+ *
+ * @param background Background drawable
+ */
+ public void setBackgroundDrawable(Drawable background) {
+ mBackground = background;
+ }
+
+ /**
+ * Set content view.
+ *
+ * @param root Root view
+ */
+ public void setContentView(View root) {
+ mRootView = root;
+
+ mWindow.setContentView(root);
+ }
+
+ /**
+ * Set content view.
+ *
+ * @param layoutResID Resource id
+ */
+ public void setContentView(int layoutResID) {
+ LayoutInflater inflator = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+ setContentView(inflator.inflate(layoutResID, null));
+ }
+
+ /**
+ * Set listener on window dismissed.
+ *
+ * @param listener
+ */
+ public void setOnDismissListener(PopupWindow.OnDismissListener listener) {
+ mWindow.setOnDismissListener(listener);
+ }
+
+ /**
+ * Dismiss the popup window.
+ */
+ public void dismiss() {
+ mWindow.dismiss();
+ }
+}
View
BIN data/homescreenimages/images/indentitree_home.png 100755 → 100644
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
63 ios/Camp Joy Outdoors/Base.lproj/Main_iPhone.storyboard
@@ -13,7 +13,7 @@
<viewControllerLayoutGuide type="bottom" id="Ked-8b-9Xk"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="2VE-Yg-loa">
- <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
+ <rect key="frame" x="0.0" y="0.0" width="320" height="480"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="homebackground.png" translatesAutoresizingMaskIntoConstraints="NO" id="LjX-QM-NiM">
@@ -24,10 +24,26 @@
<rect key="frame" x="0.0" y="0.0" width="320" height="520"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
- <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="identitreelogo.png" translatesAutoresizingMaskIntoConstraints="NO" id="ggJ-CN-vsx">
- <rect key="frame" x="35" y="44" width="250" height="375"/>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" image="indentitree_home.png" translatesAutoresizingMaskIntoConstraints="NO" id="ggJ-CN-vsx">
+ <rect key="frame" x="60" y="44" width="200" height="300"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="300" id="7jr-If-8hL"/>
+ <constraint firstAttribute="width" constant="200" id="QXA-NB-IUO"/>
+ </constraints>
</imageView>
+ <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pZU-bb-Y3N">
+ <rect key="frame" x="20" y="352" width="280" height="30"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
+ <state key="normal" title="START YOUR QUEST!">
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <connections>
+ <action selector="startButtonPressed:" destination="CZ4-MO-1fc" eventType="touchUpInside" id="4Mb-O7-U3g"/>
+ </connections>
+ </button>
</subviews>
<color key="backgroundColor" red="0.098039217289999994" green="0.098039217289999994" blue="0.098039217289999994" alpha="0.70000000000000007" colorSpace="calibratedRGB"/>
</view>
@@ -41,22 +57,8 @@
<segue destination="Z5J-3g-pgJ" kind="modal" id="5oQ-Ch-wOh"/>
</connections>
</button>
- <button opaque="NO" contentMode="scaleToFill" ambiguous="YES" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pZU-bb-Y3N">
- <rect key="frame" x="20" y="473" width="280" height="30"/>
- <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
- <state key="normal" title="START YOUR QUEST!">
- <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
- <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
- </state>
- <connections>
- <action selector="startButtonPressed:" destination="CZ4-MO-1fc" eventType="touchUpInside" id="4Mb-O7-U3g"/>
- </connections>
- </button>
</subviews>
<color key="backgroundColor" red="0.098039217289999994" green="0.098039217289999994" blue="0.098039217289999994" alpha="0.48999999999999999" colorSpace="calibratedRGB"/>
- <constraints>
- <constraint firstItem="Ked-8b-9Xk" firstAttribute="top" secondItem="pZU-bb-Y3N" secondAttribute="bottom" constant="16" id="Zni-ml-b09"/>
- </constraints>
</view>
<tabBarItem key="tabBarItem" title="Home" image="home" id="u1e-5L-l1D"/>
<simulatedOrientationMetrics key="simulatedOrientationMetrics"/>
@@ -77,41 +79,41 @@
<viewControllerLayoutGuide type="bottom" id="ZZ4-8F-eda"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="sAW-i4-lVT">
- <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
+ <rect key="frame" x="0.0" y="0.0" width="320" height="480"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" editable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ltS-bt-lSP">
- <rect key="frame" x="20" y="109" width="280" height="130"/>
+ <rect key="frame" x="20" y="49" width="280" height="130"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<string key="text">Since 1938, we have been focused on making a difference in people's lives. That's why even today our mission is to "Help people grow and succeed through life-long, experience-based learning." </string>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" editable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YDA-9a-cjl">
- <rect key="frame" x="20" y="276" width="280" height="165"/>
+ <rect key="frame" x="20" y="216" width="280" height="165"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<string key="text">The IdentiTree was developed for Camp Joy by volunteer software engineers at the 2013 Southwest Ohio Give Camp. Special thanks to Nate Hirt, Alex Argo, Jeremy Spitzig, Sam Corder, Brian Telintelo, Parag Joshi, Mark Mathis, Neil Giridharan</string>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Camp Joy" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xhf-1Z-PRV">
- <rect key="frame" x="20" y="80" width="180" height="21"/>
+ <rect key="frame" x="20" y="20" width="180" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="IdentiTree" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="g7T-U2-gZA">
- <rect key="frame" x="20" y="247" width="180" height="21"/>
+ <rect key="frame" x="20" y="187" width="180" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
- <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="913-T0-YKD">
- <rect key="frame" x="131" y="508" width="59" height="30"/>
+ <button opaque="NO" contentMode="scaleToFill" ambiguous="YES" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="913-T0-YKD">
+ <rect key="frame" x="131" y="389" width="59" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal" title="Close">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
@@ -122,6 +124,9 @@
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ <constraints>
+ <constraint firstItem="ZZ4-8F-eda" firstAttribute="top" secondItem="913-T0-YKD" secondAttribute="bottom" constant="20" id="5J5-Iq-UFa"/>
+ </constraints>
</view>
<navigationItem key="navigationItem" id="sVt-Rb-Jqd"/>
</viewController>
@@ -138,7 +143,7 @@
<viewControllerLayoutGuide type="bottom" id="osA-A4-e50"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="gMD-aP-Fq6">
- <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
+ <rect key="frame" x="0.0" y="0.0" width="320" height="480"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
@@ -158,7 +163,7 @@
<viewControllerLayoutGuide type="bottom" id="VME-cw-7WD"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="SY5-YH-vox">
- <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
+ <rect key="frame" x="0.0" y="0.0" width="320" height="480"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
@@ -173,7 +178,7 @@
<objects>
<tableViewController id="yrb-iD-uP3" customClass="CJOSpeciesTableViewController" sceneMemberID="viewController">
<tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="48" sectionHeaderHeight="22" sectionFooterHeight="22" id="ZWq-Ud-piz">
- <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
+ <rect key="frame" x="0.0" y="0.0" width="320" height="480"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<prototypes>
@@ -268,12 +273,12 @@
<image name="home" width="27" height="26"/>
<image name="homebackground.png" width="640" height="960"/>
<image name="identify" width="24" height="24"/>
- <image name="identitreelogo.png" width="500" height="700"/>
+ <image name="indentitree_home.png" width="500" height="700"/>
<image name="infobutton.png" width="50" height="50"/>
</resources>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>
- <simulatedScreenMetrics key="destination" type="retina4"/>
+ <simulatedScreenMetrics key="destination"/>
</simulatedMetricsContainer>
</document>

0 comments on commit 2259c14

Please sign in to comment.
Something went wrong with that request. Please try again.