Commit c006882ea496f23fbcdcd24513556a9c237f4e5f
1 parent
7a4f791c
Connection to server
Add URL helper & connect via setting hostname / port
Showing
13 changed files
with
156 additions
and
122 deletions
Show diff stats
.gitignore
.idea/compiler.xml deleted
1 | -<?xml version="1.0" encoding="UTF-8"?> | |
2 | -<project version="4"> | |
3 | - <component name="CompilerConfiguration"> | |
4 | - <resourceExtensions /> | |
5 | - <wildcardResourcePatterns> | |
6 | - <entry name="!?*.java" /> | |
7 | - <entry name="!?*.form" /> | |
8 | - <entry name="!?*.class" /> | |
9 | - <entry name="!?*.groovy" /> | |
10 | - <entry name="!?*.scala" /> | |
11 | - <entry name="!?*.flex" /> | |
12 | - <entry name="!?*.kt" /> | |
13 | - <entry name="!?*.clj" /> | |
14 | - <entry name="!?*.aj" /> | |
15 | - </wildcardResourcePatterns> | |
16 | - <annotationProcessing> | |
17 | - <profile default="true" name="Default" enabled="false"> | |
18 | - <processorPath useClasspath="true" /> | |
19 | - </profile> | |
20 | - </annotationProcessing> | |
21 | - </component> | |
22 | -</project> | |
23 | 0 | \ No newline at end of file |
.idea/copyright/profiles_settings.xml deleted
.idea/misc.xml deleted
1 | -<?xml version="1.0" encoding="UTF-8"?> | |
2 | -<project version="4"> | |
3 | - <component name="EntryPointsManager"> | |
4 | - <entry_points version="2.0" /> | |
5 | - </component> | |
6 | - <component name="NullableNotNullManager"> | |
7 | - <option name="myDefaultNullable" value="android.support.annotation.Nullable" /> | |
8 | - <option name="myDefaultNotNull" value="android.support.annotation.NonNull" /> | |
9 | - <option name="myNullables"> | |
10 | - <value> | |
11 | - <list size="4"> | |
12 | - <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" /> | |
13 | - <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" /> | |
14 | - <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" /> | |
15 | - <item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" /> | |
16 | - </list> | |
17 | - </value> | |
18 | - </option> | |
19 | - <option name="myNotNulls"> | |
20 | - <value> | |
21 | - <list size="4"> | |
22 | - <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" /> | |
23 | - <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" /> | |
24 | - <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" /> | |
25 | - <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" /> | |
26 | - </list> | |
27 | - </value> | |
28 | - </option> | |
29 | - </component> | |
30 | - <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> | |
31 | - <output url="file://$PROJECT_DIR$/build/classes" /> | |
32 | - </component> | |
33 | - <component name="ProjectType"> | |
34 | - <option name="id" value="Android" /> | |
35 | - </component> | |
36 | -</project> | |
37 | 0 | \ No newline at end of file |
.idea/modules.xml deleted
1 | -<?xml version="1.0" encoding="UTF-8"?> | |
2 | -<project version="4"> | |
3 | - <component name="ProjectModuleManager"> | |
4 | - <modules> | |
5 | - <module fileurl="file://$PROJECT_DIR$/PositionningApp.iml" filepath="$PROJECT_DIR$/PositionningApp.iml" /> | |
6 | - <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" /> | |
7 | - </modules> | |
8 | - </component> | |
9 | -</project> | |
10 | 0 | \ No newline at end of file |
.idea/runConfigurations.xml deleted
1 | -<?xml version="1.0" encoding="UTF-8"?> | |
2 | -<project version="4"> | |
3 | - <component name="RunConfigurationProducerService"> | |
4 | - <option name="ignoredProducers"> | |
5 | - <set> | |
6 | - <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" /> | |
7 | - <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" /> | |
8 | - <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" /> | |
9 | - </set> | |
10 | - </option> | |
11 | - </component> | |
12 | -</project> | |
13 | 0 | \ No newline at end of file |
.idea/vcs.xml deleted
app/src/main/java/fr/utbm/lo53/p2017/positionningapp/BaseActivity.java
1 | 1 | package fr.utbm.lo53.p2017.positionningapp; |
2 | 2 | |
3 | 3 | import android.content.Intent; |
4 | +import android.os.Bundle; | |
5 | +import android.preference.PreferenceManager; | |
6 | +import android.support.annotation.Nullable; | |
4 | 7 | import android.support.v7.app.AppCompatActivity; |
5 | 8 | import android.view.Menu; |
6 | 9 | import android.view.MenuItem; |
7 | 10 | |
8 | -public class BaseActivity extends AppCompatActivity { | |
11 | +import fr.utbm.lo53.p2017.positionningapp.network.URLSolver; | |
12 | + | |
13 | +public abstract class BaseActivity extends AppCompatActivity { | |
14 | + | |
15 | + private URLSolver urlSolver; | |
16 | + | |
17 | + @Override | |
18 | + protected void onCreate(@Nullable Bundle savedInstanceState) { | |
19 | + super.onCreate(savedInstanceState); | |
20 | + String defaultHostname = getString(R.string.pref_default_hostname); | |
21 | + String defaultPort = getString(R.string.pref_default_port); | |
22 | + urlSolver = new URLSolver(PreferenceManager.getDefaultSharedPreferences(this), defaultHostname, defaultPort); | |
23 | + } | |
24 | + | |
25 | + @Override | |
26 | + protected void onResume() { | |
27 | + super.onResume(); | |
28 | + PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(getURLSolver()); | |
29 | + } | |
30 | + | |
31 | + @Override | |
32 | + protected void onPause() { | |
33 | + super.onPause(); | |
34 | + PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(getURLSolver()); | |
35 | + } | |
9 | 36 | |
10 | 37 | @Override |
11 | 38 | public boolean onOptionsItemSelected(MenuItem item) { |
... | ... | @@ -40,4 +67,8 @@ public class BaseActivity extends AppCompatActivity { |
40 | 67 | return true; |
41 | 68 | } |
42 | 69 | |
70 | + public URLSolver getURLSolver() { | |
71 | + return urlSolver; | |
72 | + } | |
73 | + | |
43 | 74 | } | ... | ... |
app/src/main/java/fr/utbm/lo53/p2017/positionningapp/PositioningActivity.java
... | ... | @@ -18,9 +18,11 @@ import com.android.volley.Request; |
18 | 18 | import com.android.volley.RequestQueue; |
19 | 19 | import com.android.volley.Response; |
20 | 20 | import com.android.volley.VolleyError; |
21 | -import com.android.volley.toolbox.StringRequest; | |
21 | +import com.android.volley.toolbox.JsonObjectRequest; | |
22 | 22 | import com.android.volley.toolbox.Volley; |
23 | 23 | |
24 | +import org.json.JSONObject; | |
25 | + | |
24 | 26 | public class PositioningActivity extends BaseActivity { |
25 | 27 | |
26 | 28 | private static final String TAG = "PositioningActivity"; |
... | ... | @@ -33,31 +35,35 @@ public class PositioningActivity extends BaseActivity { |
33 | 35 | // Instantiate the RequestQueue. |
34 | 36 | private RequestQueue queue; |
35 | 37 | |
36 | - private String url = "http://www.google.com"; | |
38 | + private boolean isLocating = false; | |
37 | 39 | |
38 | 40 | // Request a string response from the provided URL. |
39 | - private StringRequest stringRequest = new StringRequest(Request.Method.GET, url, | |
40 | - new Response.Listener<String>() { | |
41 | - @Override | |
42 | - public void onResponse(String response) { | |
43 | - // Display the first 500 characters of the response string. | |
44 | - textView.setText("Response is: "+ response.substring(0,500)); | |
45 | - } | |
46 | - }, new Response.ErrorListener() { | |
47 | - @Override | |
48 | - public void onErrorResponse(VolleyError error) { | |
49 | - Log.d(TAG, error.getCause().toString()); | |
50 | - textView.clearComposingText(); | |
51 | - } | |
52 | - }); | |
41 | + private JsonObjectRequest stringRequest; | |
53 | 42 | |
54 | 43 | private final Handler handler = new Handler(); |
55 | 44 | private final Runnable runnable = new Runnable() { |
56 | 45 | @Override |
57 | 46 | public void run() { |
58 | - // Add the request to the RequestQueue. | |
47 | + // Create request | |
48 | + stringRequest = new JsonObjectRequest(Request.Method.GET, | |
49 | + getURLSolver().locateURL(), | |
50 | + null, | |
51 | + new Response.Listener<JSONObject>() { | |
52 | + @Override | |
53 | + public void onResponse(JSONObject response) { | |
54 | + textView.setText("Response is: "+ response.toString().substring(0,500)); | |
55 | + } | |
56 | + }, new Response.ErrorListener() { | |
57 | + @Override | |
58 | + public void onErrorResponse(VolleyError error) { | |
59 | + textView.setText("Error: " + error.getMessage()); | |
60 | + Log.i(TAG, "Error during location request"); | |
61 | + } | |
62 | + }); | |
63 | + Log.v(TAG, "" + stringRequest); | |
59 | 64 | queue.add(stringRequest); |
60 | - handler.postDelayed(this, 1000); | |
65 | + | |
66 | + handler.postDelayed(runnable, 1000); | |
61 | 67 | } |
62 | 68 | }; |
63 | 69 | |
... | ... | @@ -69,7 +75,7 @@ public class PositioningActivity extends BaseActivity { |
69 | 75 | setSupportActionBar(toolbar); |
70 | 76 | |
71 | 77 | start_layout = (ConstraintLayout) findViewById(R.id.start_layout); |
72 | - hideAnimation = createFadeOutAndHideAnimation(); | |
78 | + initFadeOutAndHideAnimation(); | |
73 | 79 | |
74 | 80 | textView = (TextView) findViewById(R.id.ID_yolo); |
75 | 81 | |
... | ... | @@ -77,9 +83,17 @@ public class PositioningActivity extends BaseActivity { |
77 | 83 | } |
78 | 84 | |
79 | 85 | @Override |
80 | - protected void onDestroy() { | |
86 | + protected void onPause() { | |
87 | + super.onPause(); | |
81 | 88 | handler.removeCallbacks(runnable); |
82 | - super.onDestroy(); | |
89 | + } | |
90 | + | |
91 | + @Override | |
92 | + protected void onResume() { | |
93 | + super.onResume(); | |
94 | + if (isLocating) { | |
95 | + handler.post(runnable); | |
96 | + } | |
83 | 97 | } |
84 | 98 | |
85 | 99 | @Override |
... | ... | @@ -91,11 +105,17 @@ public class PositioningActivity extends BaseActivity { |
91 | 105 | } |
92 | 106 | |
93 | 107 | public void startLocating(View v) { |
108 | + if (isLocating) { | |
109 | + return; | |
110 | + } | |
111 | + | |
112 | + isLocating = true; | |
94 | 113 | start_layout.startAnimation(hideAnimation); |
114 | + | |
95 | 115 | handler.post(runnable); |
96 | 116 | } |
97 | 117 | |
98 | - private Animation createFadeOutAndHideAnimation() { | |
118 | + private void initFadeOutAndHideAnimation() { | |
99 | 119 | ImageView hiding_image = (ImageView) findViewById(R.id.hiding_image); |
100 | 120 | final float initial_alpha = hiding_image.getImageAlpha() / 255; |
101 | 121 | Animation animation = new AlphaAnimation(initial_alpha, 0); |
... | ... | @@ -109,6 +129,6 @@ public class PositioningActivity extends BaseActivity { |
109 | 129 | public void onAnimationRepeat(Animation animation) {} |
110 | 130 | public void onAnimationStart(Animation animation) {} |
111 | 131 | }); |
112 | - return animation; | |
132 | + hideAnimation = animation; | |
113 | 133 | } |
114 | 134 | } | ... | ... |
app/src/main/java/fr/utbm/lo53/p2017/positionningapp/network/URLSolver.java
0 โ 100644
1 | +package fr.utbm.lo53.p2017.positionningapp.network; | |
2 | + | |
3 | + | |
4 | +import android.content.SharedPreferences; | |
5 | +import android.net.Uri; | |
6 | +import android.util.Log; | |
7 | + | |
8 | +public class URLSolver implements SharedPreferences.OnSharedPreferenceChangeListener { | |
9 | + | |
10 | + private static final String TAG = "URLSolver;"; | |
11 | + | |
12 | + private static final String HOSTNAME_KEY = "hostname"; | |
13 | + private static final String PORT_KEY = "port"; | |
14 | + | |
15 | + private final String defaultHostname; | |
16 | + private final String defaultPort; | |
17 | + | |
18 | + private String hostname; | |
19 | + private int port; | |
20 | + | |
21 | + public URLSolver(SharedPreferences sharedPref, String defaultHostname, String defaultPort) { | |
22 | + this.defaultHostname = defaultHostname; | |
23 | + this.defaultPort = defaultPort; | |
24 | + | |
25 | + updateHostname(sharedPref); | |
26 | + updatePort(sharedPref); | |
27 | + } | |
28 | + | |
29 | + private void updateHostname(SharedPreferences sharedPref) { | |
30 | + hostname = sharedPref.getString(HOSTNAME_KEY, defaultHostname); | |
31 | + Log.i(TAG, "Update host: " + hostname); | |
32 | + } | |
33 | + | |
34 | + private void updatePort(SharedPreferences sharedPref) { | |
35 | + port = Integer.valueOf(sharedPref.getString(PORT_KEY, defaultPort)); | |
36 | + Log.i(TAG, "Update port: " + port); | |
37 | + } | |
38 | + | |
39 | + @Override | |
40 | + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { | |
41 | + switch (key) { | |
42 | + case HOSTNAME_KEY: updateHostname(sharedPreferences); break; | |
43 | + case PORT_KEY: updateHostname(sharedPreferences); break; | |
44 | + } | |
45 | + } | |
46 | + | |
47 | + private Uri.Builder baseURL() { | |
48 | + Uri.Builder builder = new Uri.Builder(); | |
49 | + return builder.scheme("http").encodedAuthority(hostname + ":" + port); | |
50 | + } | |
51 | + | |
52 | + public String locateURL(/* TODO: mac ... */) { | |
53 | + Uri.Builder b = baseURL(); | |
54 | + b.appendPath("positioning") | |
55 | + .appendPath("request") | |
56 | + .appendQueryParameter("mac", "TODO"); // TODO | |
57 | + return b.build().toString(); | |
58 | + } | |
59 | + | |
60 | + public String calibrateURL() { | |
61 | + Uri.Builder b = baseURL(); | |
62 | + b.appendPath("calibration") | |
63 | + .appendPath("request"); | |
64 | + return b.build().toString(); | |
65 | + } | |
66 | +} | ... | ... |
app/src/main/res/layout/content_calibration.xml
... | ... | @@ -12,9 +12,12 @@ |
12 | 12 | android:id="@+id/Map" |
13 | 13 | android:layout_width="0dp" |
14 | 14 | android:layout_height="wrap_content" |
15 | + android:layout_marginEnd="8dp" | |
15 | 16 | android:layout_marginLeft="8dp" |
16 | 17 | android:layout_marginRight="8dp" |
18 | + android:layout_marginStart="8dp" | |
17 | 19 | android:layout_marginTop="50dp" |
20 | + android:adjustViewBounds="true" | |
18 | 21 | android:paddingLeft="0dp" |
19 | 22 | android:paddingTop="0dp" |
20 | 23 | android:scaleType="fitXY" |
... | ... | @@ -22,9 +25,7 @@ |
22 | 25 | app:layout_constraintLeft_toLeftOf="parent" |
23 | 26 | app:layout_constraintRight_toRightOf="parent" |
24 | 27 | app:layout_constraintTop_toTopOf="parent" |
25 | - app:srcCompat="@drawable/map" | |
26 | - android:layout_marginStart="8dp" | |
27 | - android:layout_marginEnd="8dp" /> | |
28 | + app:srcCompat="@drawable/map" /> | |
28 | 29 | |
29 | 30 | <ImageView |
30 | 31 | android:id="@+id/MapMarker" |
... | ... | @@ -45,7 +46,7 @@ |
45 | 46 | <Button |
46 | 47 | android:id="@+id/setPointButton" |
47 | 48 | style="@style/Widget.AppCompat.Button" |
48 | - android:layout_width="match_parent" | |
49 | + android:layout_width="0dp" | |
49 | 50 | android:layout_height="wrap_content" |
50 | 51 | android:layout_marginEnd="8dp" |
51 | 52 | android:layout_marginLeft="8dp" |
... | ... | @@ -60,7 +61,7 @@ |
60 | 61 | |
61 | 62 | <Button |
62 | 63 | android:id="@+id/cancelButton" |
63 | - android:layout_width="match_parent" | |
64 | + android:layout_width="0dp" | |
64 | 65 | android:layout_height="wrap_content" |
65 | 66 | android:layout_marginEnd="8dp" |
66 | 67 | android:layout_marginLeft="8dp" |
... | ... | @@ -74,7 +75,7 @@ |
74 | 75 | |
75 | 76 | <Button |
76 | 77 | android:id="@+id/measureButton" |
77 | - android:layout_width="match_parent" | |
78 | + android:layout_width="0dp" | |
78 | 79 | android:layout_height="wrap_content" |
79 | 80 | android:layout_marginEnd="8dp" |
80 | 81 | android:layout_marginLeft="8dp" | ... | ... |
app/src/main/res/values/strings.xml
app/src/main/res/xml/pref_general.xml
... | ... | @@ -35,14 +35,17 @@ |
35 | 35 | android:selectAllOnFocus="true" |
36 | 36 | android:singleLine="true" |
37 | 37 | android:title="@string/pref_title_hostname" /> |
38 | + | |
38 | 39 | <EditTextPreference |
39 | 40 | android:layout_width="wrap_content" |
40 | 41 | android:layout_height="wrap_content" |
41 | - android:defaultValue="@string/default_port" | |
42 | + android:defaultValue="@string/pref_default_port" | |
42 | 43 | android:key="port" |
43 | 44 | android:selectAllOnFocus="true" |
44 | 45 | android:singleLine="true" |
45 | - android:title="@string/pref_title_port" /> | |
46 | + android:title="@string/pref_title_port" | |
47 | + android:numeric="integer" | |
48 | + android:maxLength="5" /> | |
46 | 49 | |
47 | 50 | |
48 | 51 | </PreferenceScreen> | ... | ... |