diff --git a/.idea/misc.xml b/.idea/misc.xml
index a78c257..99202cc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,34 +1,34 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/de/overview/wg/its/mispauth/activity/SyncActivity.java b/app/src/main/java/de/overview/wg/its/mispauth/activity/SyncActivity.java
index 71e294a..72e7308 100644
--- a/app/src/main/java/de/overview/wg/its/mispauth/activity/SyncActivity.java
+++ b/app/src/main/java/de/overview/wg/its/mispauth/activity/SyncActivity.java
@@ -1,45 +1,136 @@
package de.overview.wg.its.mispauth.activity;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentStatePagerAdapter;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
+import android.view.View;
+import android.widget.Button;
+import android.widget.LinearLayout;
import com.android.volley.VolleyError;
import de.overview.wg.its.mispauth.R;
import de.overview.wg.its.mispauth.auxiliary.PreferenceManager;
+import de.overview.wg.its.mispauth.fragment.ScanQrFragment;
+import de.overview.wg.its.mispauth.fragment.ShowQrFragment;
+import de.overview.wg.its.mispauth.fragment.SyncStartFragment;
+import de.overview.wg.its.mispauth.fragment.UploadFragment;
import de.overview.wg.its.mispauth.model.Organisation;
import de.overview.wg.its.mispauth.network.MispRequest;
-import org.json.JSONObject;
+import de.overview.wg.its.mispauth.custom_viewpager.ExtendedViewPager;
+import org.json.JSONArray;
public class SyncActivity extends AppCompatActivity {
private PreferenceManager preferenceManager;
+ private static final int PAGE_COUNT = 3;
+ private ExtendedViewPager viewPager;
+ private PagerAdapter pagerAdapter;
+ private LinearLayout bottomLayout;
+
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sync);
preferenceManager = PreferenceManager.Instance(this);
- uploadOrganisation(preferenceManager.getMyOrganisation());
+
+ setupViewPager();
+ }
+
+ private void setupViewPager() {
+ bottomLayout = findViewById(R.id.linearLayout);
+
+ pagerAdapter = new SimplePagerAdapter(getSupportFragmentManager());
+
+ viewPager = findViewById(R.id.viewPager);
+ viewPager.setPagingEnabled(false);
+ viewPager.setAdapter(pagerAdapter);
+
+ viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+
+ @Override
+ public void onPageSelected(int position) {
+ if (position == 0) {
+ bottomLayout.setVisibility(View.GONE);
+ } else {
+ bottomLayout.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+
+ }
+
+ // SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
+ @Override
+ public void onPageScrollStateChanged(int state) {
+
+ }
+ });
+
+ Button next = findViewById(R.id.nextButton);
+ Button back = findViewById(R.id.backButton);
+
+ next.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ viewPager.setCurrentItem(viewPager.getCurrentItem() + 1, true);
+ }
+ });
+
+ back.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ viewPager.setCurrentItem(viewPager.getCurrentItem() - 1, true);
+ }
+ });
+ }
+
+ private class SimplePagerAdapter extends FragmentStatePagerAdapter {
+
+ public SimplePagerAdapter(FragmentManager fm) {
+ super(fm);
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+
+ switch (position) {
+ case 0:
+ return new SyncStartFragment(); // start fragment
+
+ case 1:
+ return new ScanQrFragment(); // scan fragment
+
+ case 2:
+ return new ShowQrFragment(); // show QR fragment
+
+ case 3:
+ return new UploadFragment(); // show upload fragment
+
+ default:
+ return null; // This should not be happening
+ }
+ }
+
+ @Override
+ public int getCount() {
+ return PAGE_COUNT;
+ }
}
private void uploadOrganisation(Organisation org) {
MispRequest mispRequest = MispRequest.Instance(this);
-// mispRequest.addOrganisation(org, new MispRequest.OrganisationCallback() {
-// @Override
-// public void onResult(JSONObject organisationInformation) {
-//
-// }
-//
-// @Override
-// public void onError(VolleyError volleyError) {
-//
-// }
-// });
-
- mispRequest.getServers(new MispRequest.ServerCallback() {
+ mispRequest.getOrganisations(new MispRequest.OrganisationsCallback() {
@Override
- public void onResult(JSONObject servers) {
+ public void onResult(JSONArray organisations) {
}
diff --git a/app/src/main/java/de/overview/wg/its/mispauth/custom_viewpager/ExtendedViewPager.java b/app/src/main/java/de/overview/wg/its/mispauth/custom_viewpager/ExtendedViewPager.java
new file mode 100644
index 0000000..4467f81
--- /dev/null
+++ b/app/src/main/java/de/overview/wg/its/mispauth/custom_viewpager/ExtendedViewPager.java
@@ -0,0 +1,38 @@
+package de.overview.wg.its.mispauth.custom_viewpager;
+
+import android.content.Context;
+import android.support.v4.view.ViewPager;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+public class ExtendedViewPager extends ViewPager {
+
+ private boolean enabled;
+
+ public ExtendedViewPager(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ this.enabled = true;
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ if (this.enabled) {
+ return super.onTouchEvent(event);
+ }
+
+ return false;
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent event) {
+ if (this.enabled) {
+ return super.onInterceptTouchEvent(event);
+ }
+
+ return false;
+ }
+
+ public void setPagingEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+}
diff --git a/app/src/main/java/de/overview/wg/its/mispauth/fragment/ScanQrFragment.java b/app/src/main/java/de/overview/wg/its/mispauth/fragment/ScanQrFragment.java
new file mode 100644
index 0000000..a4265ff
--- /dev/null
+++ b/app/src/main/java/de/overview/wg/its/mispauth/fragment/ScanQrFragment.java
@@ -0,0 +1,17 @@
+package de.overview.wg.its.mispauth.fragment;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import de.overview.wg.its.mispauth.R;
+
+public class ScanQrFragment extends Fragment {
+
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View v = inflater.inflate(R.layout.fragment_sync_scan, null);
+ return v;
+ }
+
+}
diff --git a/app/src/main/java/de/overview/wg/its/mispauth/fragment/ShowQrFragment.java b/app/src/main/java/de/overview/wg/its/mispauth/fragment/ShowQrFragment.java
new file mode 100644
index 0000000..d905921
--- /dev/null
+++ b/app/src/main/java/de/overview/wg/its/mispauth/fragment/ShowQrFragment.java
@@ -0,0 +1,27 @@
+package de.overview.wg.its.mispauth.fragment;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import de.overview.wg.its.mispauth.R;
+import net.glxn.qrgen.android.QRCode;
+
+public class ShowQrFragment extends Fragment {
+
+ private ImageView qrImageView;
+
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View v = inflater.inflate(R.layout.fragment_sync_show, null);
+
+ qrImageView = v.findViewById(R.id.image_view_qr);
+ setQr("Hallo hier steht leide nur scheiße, aber ansonsten hat alles geklappt! (Y)");
+ return v;
+ }
+
+ public void setQr(String msg) {
+ qrImageView.setImageBitmap(QRCode.from(msg).bitmap());
+ }
+}
diff --git a/app/src/main/java/de/overview/wg/its/mispauth/fragment/SyncStartFragment.java b/app/src/main/java/de/overview/wg/its/mispauth/fragment/SyncStartFragment.java
new file mode 100644
index 0000000..8a81c35
--- /dev/null
+++ b/app/src/main/java/de/overview/wg/its/mispauth/fragment/SyncStartFragment.java
@@ -0,0 +1,17 @@
+package de.overview.wg.its.mispauth.fragment;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import de.overview.wg.its.mispauth.R;
+
+public class SyncStartFragment extends Fragment {
+
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View v = inflater.inflate(R.layout.fragment_sync_start, null);
+ return v;
+ }
+
+}
diff --git a/app/src/main/java/de/overview/wg/its/mispauth/fragment/UploadFragment.java b/app/src/main/java/de/overview/wg/its/mispauth/fragment/UploadFragment.java
new file mode 100644
index 0000000..f30e64d
--- /dev/null
+++ b/app/src/main/java/de/overview/wg/its/mispauth/fragment/UploadFragment.java
@@ -0,0 +1,17 @@
+package de.overview.wg.its.mispauth.fragment;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import de.overview.wg.its.mispauth.R;
+
+public class UploadFragment extends Fragment {
+
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View v = inflater.inflate(R.layout.fragment_sync_upload, null);
+ return v;
+ }
+
+}
diff --git a/app/src/main/java/de/overview/wg/its/mispauth/network/JsonArrayRequestWithJsonObject.java b/app/src/main/java/de/overview/wg/its/mispauth/network/JsonArrayRequestWithJsonObject.java
new file mode 100644
index 0000000..0afaa09
--- /dev/null
+++ b/app/src/main/java/de/overview/wg/its/mispauth/network/JsonArrayRequestWithJsonObject.java
@@ -0,0 +1,42 @@
+package de.overview.wg.its.mispauth.network;
+
+import com.android.volley.NetworkResponse;
+import com.android.volley.ParseError;
+import com.android.volley.Response;
+import com.android.volley.toolbox.HttpHeaderParser;
+import com.android.volley.toolbox.JsonRequest;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.UnsupportedEncodingException;
+
+public class JsonArrayRequestWithJsonObject extends JsonRequest {
+ /**
+ * Creates a new request.
+ * @param method the HTTP method to use
+ * @param url URL to fetch the JSON from
+ * @param jsonRequest A {@link JSONObject} to post with the request. Null is allowed and
+ * indicates no parameters will be posted along with request.
+ * @param listener Listener to receive the JSON response
+ * @param errorListener Error listener, or null to ignore errors.
+ */
+
+ public JsonArrayRequestWithJsonObject(int method, String url, JSONObject jsonRequest, Response.Listener listener, Response.ErrorListener errorListener) {
+ super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener, errorListener);
+ }
+
+ @Override
+ protected Response parseNetworkResponse(NetworkResponse response) {
+ try {
+
+ String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET));
+ return Response.success(new JSONArray(jsonString), HttpHeaderParser.parseCacheHeaders(response));
+
+ } catch (UnsupportedEncodingException | JSONException e) {
+
+ return Response.error(new ParseError(e));
+
+ }
+ }
+}
diff --git a/app/src/main/java/de/overview/wg/its/mispauth/network/MispRequest.java b/app/src/main/java/de/overview/wg/its/mispauth/network/MispRequest.java
index 37551d1..81c4a5b 100644
--- a/app/src/main/java/de/overview/wg/its/mispauth/network/MispRequest.java
+++ b/app/src/main/java/de/overview/wg/its/mispauth/network/MispRequest.java
@@ -7,11 +7,13 @@ import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
+import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import de.overview.wg.its.mispauth.auxiliary.PreferenceManager;
import de.overview.wg.its.mispauth.auxiliary.ReadableError;
import de.overview.wg.its.mispauth.model.Organisation;
+import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -163,11 +165,25 @@ public class MispRequest {
requestQueue.add(r);
}
- public void getServers(ServerCallback callback) {
- Response.Listener listener = new Response.Listener() {
+ public void getOrganisations(final OrganisationsCallback callback) {
+ Response.Listener listener = new Response.Listener() {
@Override
- public void onResponse(JSONObject response) {
- Log.d(TAG, "onResponse: " + response.toString());
+ public void onResponse(JSONArray response) {
+
+ JSONArray resultArray = new JSONArray();
+
+ int orgCount = response.length();
+
+ for(int i = 0; i < orgCount; i++) {
+ try {
+ resultArray.put(response.getJSONObject(i).getJSONObject("Organisation"));
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ }
+
+ callback.onResult(resultArray);
+ Log.d(TAG, "onResponse: " + resultArray.toString());
}
};
@@ -178,9 +194,9 @@ public class MispRequest {
}
};
- Request r = objectRequest(
+ Request r = arrayRequestWithJsonObject(
Request.Method.GET,
- serverUrl + "/servers/view/",
+ serverUrl + "/organisations/index",
null,
listener,
errorListener);
@@ -188,15 +204,12 @@ public class MispRequest {
requestQueue.add(r);
}
+ private JsonArrayRequestWithJsonObject arrayRequestWithJsonObject(int method, String url,
+ @Nullable JSONObject body,
+ Response.Listener listener,
+ Response.ErrorListener errorListener) {
- private JsonObjectRequest objectRequest(int method,
- String url,
- @Nullable JSONObject body,
- Response.Listener listener,
- Response.ErrorListener errorListener) {
-
- return new JsonObjectRequest(method, url, body, listener, errorListener) {
-
+ return new JsonArrayRequestWithJsonObject(method, url, body, listener, errorListener) {
@Override
public Map getHeaders() {
Map params = new HashMap<>();
@@ -207,10 +220,27 @@ public class MispRequest {
return params;
}
-
};
}
+ private JsonObjectRequest objectRequest(int method, String url,
+ @Nullable JSONObject body,
+ Response.Listener listener,
+ Response.ErrorListener errorListener) {
+
+ return new JsonObjectRequest(method, url, body, listener, errorListener) {
+ @Override
+ public Map getHeaders() {
+ Map params = new HashMap<>();
+
+ params.put("Authorization", apiKey);
+ params.put("Accept", "application/json");
+ params.put("Content-Type", "application/json; utf-8");
+
+ return params;
+ }
+ };
+ }
public void setServerCredentials(String serverUrl, String apiKey) {
this.serverUrl = serverUrl;
@@ -225,15 +255,12 @@ public class MispRequest {
return instance;
}
-
- public interface IntegerCallback {
- void onResult(int result);
-
+ public interface OrganisationsCallback {
+ void onResult(JSONArray organisations);
void onError(VolleyError volleyError);
}
public interface OrganisationCallback {
void onResult(JSONObject organisationInformation);
-
void onError(VolleyError volleyError);
}
public interface UserCallback {
diff --git a/app/src/main/res/drawable/ic_sync_alpha.xml b/app/src/main/res/drawable/ic_sync_alpha.xml
new file mode 100644
index 0000000..65dac7d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_sync_alpha.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/test_image.jpg b/app/src/main/res/drawable/test_image.jpg
deleted file mode 100644
index 22c1196..0000000
Binary files a/app/src/main/res/drawable/test_image.jpg and /dev/null differ
diff --git a/app/src/main/res/drawable/test_image_1.jpg b/app/src/main/res/drawable/test_image_1.jpg
deleted file mode 100644
index 84f38c3..0000000
Binary files a/app/src/main/res/drawable/test_image_1.jpg and /dev/null differ
diff --git a/app/src/main/res/drawable/test_image_2.jpg b/app/src/main/res/drawable/test_image_2.jpg
deleted file mode 100755
index 7c91d8d..0000000
Binary files a/app/src/main/res/drawable/test_image_2.jpg and /dev/null differ
diff --git a/app/src/main/res/drawable/test_image_low_res.jpg b/app/src/main/res/drawable/test_image_low_res.jpg
deleted file mode 100644
index 4b7e275..0000000
Binary files a/app/src/main/res/drawable/test_image_low_res.jpg and /dev/null differ
diff --git a/app/src/main/res/drawable/test_image_no_meta.jpg b/app/src/main/res/drawable/test_image_no_meta.jpg
deleted file mode 100644
index a4e46d0..0000000
Binary files a/app/src/main/res/drawable/test_image_no_meta.jpg and /dev/null differ
diff --git a/app/src/main/res/layout/activity_sync.xml b/app/src/main/res/layout/activity_sync.xml
index 069dd4a..f54358c 100644
--- a/app/src/main/res/layout/activity_sync.xml
+++ b/app/src/main/res/layout/activity_sync.xml
@@ -1,270 +1,76 @@
+ tools:context=".activity.SyncActivity"
+ android:background="@color/colorPrimary">
-
+
-
+
-
+
-
+
-
+
-
-
+
-
-
+
-
+
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_sync_scan.xml b/app/src/main/res/layout/fragment_sync_scan.xml
new file mode 100644
index 0000000..f08b066
--- /dev/null
+++ b/app/src/main/res/layout/fragment_sync_scan.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_sync_show.xml b/app/src/main/res/layout/fragment_sync_show.xml
new file mode 100644
index 0000000..3d113eb
--- /dev/null
+++ b/app/src/main/res/layout/fragment_sync_show.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_sync_start.xml b/app/src/main/res/layout/fragment_sync_start.xml
new file mode 100644
index 0000000..fd9ffd0
--- /dev/null
+++ b/app/src/main/res/layout/fragment_sync_start.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_sync_upload.xml b/app/src/main/res/layout/fragment_sync_upload.xml
new file mode 100644
index 0000000..9d5bfad
--- /dev/null
+++ b/app/src/main/res/layout/fragment_sync_upload.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 78909eb..186447c 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -1,10 +1,10 @@
-
+