diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6cbe56 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..ad59d57 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +Tubes1-Android \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..96cc43e --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..d390b65 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..1a3eaff --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..b0ce46e --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..6564d52 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index 5ce4793..cde22c5 100644 --- a/README.md +++ b/README.md @@ -1 +1,33 @@ -# IF3111-2016-Tugas1-Android \ No newline at end of file +<<<<<<< HEAD +# Mappie +Tugas Besar I IF3111 +Android App mencari lokasi-lokasi di ITB dari lokasi yang diberikan oleh server. Pengguna dapat: +* melihat marker lokasi yang diberikan server +* mendapatkan reply dari server berbentuk Toast +* menggunakan intent kamera native dari aplikasi +* mengetahui arah utara dari kompas + +### Screenshots +#### Map +Memperlihatkan halaman utama yang berisi Google maps dan marker untuk lokasi pertama. + +![map](screenshots/map.png) +![map-land](screenshots/map-land.png) + + +#### Submit +Submit page untuk memberikan jawaban + +![submit](screenshots/submit.png) + +Toast akan diberikan setiap ada response dari server + +![toast](screenshots/toast.png) + +[src](http://gitlab.informatika.org/ariezanadya/Tubes1-Android/tree/master/app/src/main/java/com/example/atia/tubes1android) +[apk](http://gitlab.informatika.org/ariezanadya/Tubes1-Android/tree/master/apk-debug.apk) + +Arieza Nadya/13512017 +======= +# IF3111-2016-Tugas1-Android +>>>>>>> 099a80cba97c50ea788525b655f4ab9669133a24 diff --git a/app-debug.apk b/app-debug.apk new file mode 100644 index 0000000..18eefa7 Binary files /dev/null and b/app-debug.apk differ diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..32d595e --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,28 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 23 + buildToolsVersion "23.0.1" + + defaultConfig { + applicationId "com.example.atia.tubes1android" + minSdkVersion 12 + targetSdkVersion 23 + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + testCompile 'junit:junit:4.12' + compile 'com.android.support:appcompat-v7:23.2.0' + compile 'com.android.support:design:23.2.0' + compile 'com.google.android.gms:play-services-maps:8.4.0' +} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..dcaf84c --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\Users\User\AppData\Local\Android\android-sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/app/src/androidTest/java/com/example/atia/tubes1android/ApplicationTest.java b/app/src/androidTest/java/com/example/atia/tubes1android/ApplicationTest.java new file mode 100644 index 0000000..e637db4 --- /dev/null +++ b/app/src/androidTest/java/com/example/atia/tubes1android/ApplicationTest.java @@ -0,0 +1,13 @@ +package com.example.atia.tubes1android; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/app/src/debug/res/values/google_maps_api.xml b/app/src/debug/res/values/google_maps_api.xml new file mode 100644 index 0000000..0fffbcf --- /dev/null +++ b/app/src/debug/res/values/google_maps_api.xml @@ -0,0 +1,21 @@ + + + + AIzaSyAB1QP2XHGwyJvEksVGXI0_IjRAdfbls08 + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..1efa34e --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/example/atia/tubes1android/MapActivity.java b/app/src/main/java/com/example/atia/tubes1android/MapActivity.java new file mode 100644 index 0000000..59b0b80 --- /dev/null +++ b/app/src/main/java/com/example/atia/tubes1android/MapActivity.java @@ -0,0 +1,339 @@ +package com.example.atia.tubes1android; + +import android.Manifest; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; +import android.location.LocationManager; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.provider.MediaStore; +import android.provider.Settings; +import android.support.design.widget.Snackbar; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.View; +import android.view.Menu; +import android.view.MenuItem; +import android.view.WindowManager; +import android.view.animation.Animation; +import android.view.animation.RotateAnimation; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.Toast; + +import com.google.android.gms.maps.CameraUpdateFactory; +import com.google.android.gms.maps.GoogleMap; +import com.google.android.gms.maps.OnMapReadyCallback; +import com.google.android.gms.maps.SupportMapFragment; +import com.google.android.gms.maps.model.LatLng; +import com.google.android.gms.maps.model.Marker; +import com.google.android.gms.maps.model.MarkerOptions; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.BufferedReader; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.net.InetAddress; +import java.net.Socket; +import java.net.UnknownHostException; +import java.nio.charset.StandardCharsets; + +public class MapActivity extends AppCompatActivity implements OnMapReadyCallback, SensorEventListener +{ + + private Socket socket; + private static GoogleMap mMap; + static final boolean FIRST_VAL = true; + private boolean first; + public static final int SERVERPORT = 3111; + public static final String ServerIP = "89.36.220.146"; + private static String token; + private static double lat; + private static double lng; + private String response; + private static Marker marker; + + private ImageView compassImage; + + private SensorManager mSensorManager; + private float curDegree = 0f; + + static final int REQUEST_IMAGE_CAPTURE = 1; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_map); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + getSupportActionBar().setTitle("Map"); + + if (savedInstanceState != null) { + first = savedInstanceState.getBoolean("FIRST_VAL"); + } else { + first = true; + } + + Log.i("log", "First: " + first); + + // show map fragment + SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() + .findFragmentById(R.id.map); + mapFragment.getMapAsync(this); + mapFragment.setRetainInstance(true); + + final ImageButton ibCam = (ImageButton) findViewById(R.id.ibCamera); + ibCam.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { +// Snackbar.make(v, "Camera Snackbar", Snackbar.LENGTH_SHORT).setAction("Action", null).show(); + dispatchTakePictureIntent(); + } + }); + + final ImageButton ibMes = (ImageButton) findViewById(R.id.ibMessage); + ibMes.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + Intent subIntent = new Intent(MapActivity.this, SubmitActivity.class); + subIntent.putExtra("LAT_VALUE", lat); + subIntent.putExtra("LONG_VALUE", lng); + subIntent.putExtra("TOKEN", token); + MapActivity.this.startActivity(subIntent); + } + }); + + if (first) { + new FirstRequest().execute(); + first = false; + } + + compassImage = (ImageView) findViewById(R.id.compass); + + // initialize sensor + mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.menu_map, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + + //noinspection SimplifiableIfStatement + if (id == R.id.action_settings) { + return true; + } + + return super.onOptionsItemSelected(item); + } + + @Override + public void onMapReady(GoogleMap googleMap) { + mMap = googleMap; + + // check if GPS is enabled + checkGPSStatus(this); + + if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) + == PackageManager.PERMISSION_GRANTED) { + mMap.setMyLocationEnabled(true); + } else { + // Show rationale and request permission. + } + + // Add a marker +// LatLng itb = new LatLng(-6.891453, 107.610642); +// mMap.addMarker(new MarkerOptions().position(itb).title("Your school dumbass")); +// mMap.moveCamera(CameraUpdateFactory.newLatLng(itb)); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if(data!=null){ + // nothing happens? + // app will crash if data is null / user presses back key without taking anything... for some reason? + } + } + + @Override + protected void onResume() { + super.onResume(); + + mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME); + if (marker != null) { + mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(marker.getPosition(), 7)); + } + } + + @Override + protected void onPause() { + super.onPause(); + mSensorManager.unregisterListener(this); + } + + @Override + public void onSensorChanged(SensorEvent event) { + float degree = Math.round(event.values[0]); + curDegree = -degree; + compassImage.setRotation(curDegree); + } + + @Override + public void onAccuracyChanged(Sensor sensor, int accuracy) { + + } + + @Override + public void onSaveInstanceState(Bundle savedInstanceState) { + savedInstanceState.putBoolean("FIRST_VAL", first); + super.onSaveInstanceState(savedInstanceState); + } + + private void dispatchTakePictureIntent() { + Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + if (takePictureIntent.resolveActivity(getPackageManager()) != null) { + startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); + } + } + + private void checkGPSStatus(final Activity activity) { + + LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE); + boolean enabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER); + if (!enabled) { +// Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); +// startActivity(intent); + + final AlertDialog.Builder builder = new AlertDialog.Builder(this); + final String action = Settings.ACTION_LOCATION_SOURCE_SETTINGS; + final String message = "Please go to Settings to enable GPS"; + + builder.setMessage(message).setPositiveButton("Settings", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface d, int id) { + activity.startActivity(new Intent(action)); + d.dismiss(); + } + }) + .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface d, int id) { + d.cancel(); + } + }); + builder.create().show(); + } + } + + public static void setMarker(LatLng latlong) { + if (marker != null) { + marker.remove(); + } + marker = mMap.addMarker(new MarkerOptions().position(latlong).title("The Location")); + } + + public static void setParam(double newlat, double newlng, String newtoken) { + lat = newlat; + lng = newlng; + token = newtoken; + } + + private class FirstRequest extends AsyncTask { + + @Override + protected String doInBackground(Void... args) { + Socket socket = null; + response = null; + + try { + Log.i("log", "Connecting to " + ServerIP); + socket = new Socket(ServerIP, SERVERPORT); + + JSONObject obj = new JSONObject(); + obj.put("com", "req_loc"); + obj.put("nim", "13512017"); + + Log.i("log", "requesting first location"); + Log.i("log", obj.toString()); + + PrintWriter out = new PrintWriter(socket.getOutputStream(), true); + out.println(obj); + + Handler handler1 = new Handler(Looper.getMainLooper()); + handler1.post(new Runnable() { + public void run() { + Toast.makeText(MapActivity.this, "Requesting location", Toast.LENGTH_SHORT).show(); + } + }); + + + BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); + response = in.readLine(); + Log.i("log", response); + + Handler handler = new Handler(Looper.getMainLooper()); + handler.post(new Runnable() { + public void run() { + Toast.makeText(MapActivity.this, response, Toast.LENGTH_LONG).show(); + } + }); + + + socket.close(); + + return response; + + } catch (JSONException e) { + Log.e("log", "json exception occurred"); + e.printStackTrace(); + } catch (Exception e) { + Log.e("log", "exception occurred"); + e.printStackTrace(); + } + + return null; + } + + @Override + protected void onPostExecute(String response) { + try { + JSONObject jsonresponse = new JSONObject(response); + lat = jsonresponse.getDouble("latitude"); + lng = jsonresponse.getDouble("longitude"); + token = jsonresponse.getString("token"); + LatLng latlng = new LatLng(lat, lng); + + Log.i("log", "Location: " + lat + "," + lng); + setMarker(latlng); + } catch (JSONException e) { + Log.e("log", "JSONException occurred"); + e.printStackTrace(); + } + } + } + +} diff --git a/app/src/main/java/com/example/atia/tubes1android/SubmitActivity.java b/app/src/main/java/com/example/atia/tubes1android/SubmitActivity.java new file mode 100644 index 0000000..eaf08c2 --- /dev/null +++ b/app/src/main/java/com/example/atia/tubes1android/SubmitActivity.java @@ -0,0 +1,194 @@ +package com.example.atia.tubes1android; + +import android.content.Intent; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.Spinner; +import android.widget.Toast; + +import com.google.android.gms.maps.model.LatLng; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.BufferedReader; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.net.Socket; + +public class SubmitActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener { + + private double lat; + private double lng; + private String token; + private String response; + private String answerstr; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_submit); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + getSupportActionBar().setTitle("Submit Answer"); + + Bundle extras = getIntent().getExtras(); + if (extras != null) { + lat = extras.getDouble("LAT_VALUE"); + lng = extras.getDouble("LONG_VALUE"); + token = extras.getString("TOKEN"); + } + + Spinner spinner = (Spinner) findViewById(R.id.loc_spinner); + ArrayAdapter adapter = ArrayAdapter.createFromResource(this, + R.array.loc_array, android.R.layout.simple_spinner_item); + adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinner.setAdapter(adapter); + spinner.setOnItemSelectedListener(this); + + final Button submitButton = (Button) findViewById(R.id.submit_button); + submitButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + String answer = ((Spinner) findViewById(R.id.loc_spinner)).getSelectedItem().toString(); + new SubmitLocation().execute(answerstr); + } + }); + } + + @Override + public void onItemSelected(AdapterView parent, View view, int position, long id) { + switch (position) { + case 0: + answerstr = "gku_barat"; + break; + case 1: + answerstr = "gku_timur"; + break; + case 2: + answerstr = "intel"; + break; + case 3: + answerstr = "cc_barat"; + break; + case 4: + answerstr = "cc_timur"; + break; + case 5: + answerstr = "dpr"; + break; + case 6: + answerstr = "oktagon"; + break; + case 7: + answerstr = "perpustakaan"; + break; + case 8: + answerstr = "pau"; + break; + case 9: + answerstr = "kubus"; + break; + } + } + + @Override + public void onNothingSelected(AdapterView parent) { + + } + + private class SubmitLocation extends AsyncTask { + + @Override + protected String doInBackground(String... answer) { + + response = null; + + try { + + JSONObject obj = new JSONObject(); + obj.put("com", "answer"); + obj.put("nim", "13512017"); + obj.put("answer", answerstr); + obj.put("longitude", lng); + obj.put("latitude", lat); + obj.put("token", token); + + Log.i("log", "Submit Request: " + obj.toString()); + + Socket socket = new Socket(MapActivity.ServerIP, MapActivity.SERVERPORT); + + PrintWriter out = new PrintWriter(socket.getOutputStream(), true); + out.println(obj); + + BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); + response = in.readLine(); + + Log.i("log", "Server Response: " + response); + Handler handler = new Handler(Looper.getMainLooper()); + handler.post(new Runnable() { + public void run() { + Toast.makeText(SubmitActivity.this, response, Toast.LENGTH_SHORT).show(); + } + }); + + socket.close(); + + return response; + + } catch (JSONException e) { + Log.e("log", "jso"); + e.printStackTrace(); + } catch (IOException e) { + Log.e("log", "ioexception"); + e.printStackTrace(); + } + + return null; + } + + @Override + protected void onPostExecute(String response) { + try { + JSONObject jsonresponse = new JSONObject(response); + String status = jsonresponse.getString("status"); + + if (status.equals("ok")) { + lat = jsonresponse.getDouble("latitude"); + lng = jsonresponse.getDouble("longitude"); + token = jsonresponse.getString("token"); + + LatLng latlng = new LatLng(lat,lng); + + MapActivity.setParam(lat, lng, token); + MapActivity.setMarker(latlng); + + Toast.makeText(SubmitActivity.this, "Location marker set", Toast.LENGTH_SHORT).show(); + + } else if (status.equals("wrong_answer")) { + Toast.makeText(SubmitActivity.this, "Wrong answer", Toast.LENGTH_LONG).show(); + } else if (status.equals("err")) { + Toast.makeText(SubmitActivity.this, "No NIM or no com", Toast.LENGTH_LONG).show(); + } else if (status.equals("finish")) { + Toast.makeText(SubmitActivity.this, "Finish", Toast.LENGTH_LONG).show(); + } + + } catch (JSONException e) { + e.printStackTrace(); + } + } + } +} diff --git a/app/src/main/res/drawable/camera.png b/app/src/main/res/drawable/camera.png new file mode 100644 index 0000000..a070b0c Binary files /dev/null and b/app/src/main/res/drawable/camera.png differ diff --git a/app/src/main/res/drawable/camera20.png b/app/src/main/res/drawable/camera20.png new file mode 100644 index 0000000..3d45f08 Binary files /dev/null and b/app/src/main/res/drawable/camera20.png differ diff --git a/app/src/main/res/drawable/pointer.png b/app/src/main/res/drawable/pointer.png new file mode 100644 index 0000000..9ae6f47 Binary files /dev/null and b/app/src/main/res/drawable/pointer.png differ diff --git a/app/src/main/res/drawable/pointer20.png b/app/src/main/res/drawable/pointer20.png new file mode 100644 index 0000000..5ffdd7c Binary files /dev/null and b/app/src/main/res/drawable/pointer20.png differ diff --git a/app/src/main/res/drawable/social.png b/app/src/main/res/drawable/social.png new file mode 100644 index 0000000..2449057 Binary files /dev/null and b/app/src/main/res/drawable/social.png differ diff --git a/app/src/main/res/drawable/social20.png b/app/src/main/res/drawable/social20.png new file mode 100644 index 0000000..fb825e5 Binary files /dev/null and b/app/src/main/res/drawable/social20.png differ diff --git a/app/src/main/res/layout-land/activity_map.xml b/app/src/main/res/layout-land/activity_map.xml new file mode 100644 index 0000000..7fd11af --- /dev/null +++ b/app/src/main/res/layout-land/activity_map.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/layout-land/content_map.xml b/app/src/main/res/layout-land/content_map.xml new file mode 100644 index 0000000..1e63700 --- /dev/null +++ b/app/src/main/res/layout-land/content_map.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout-port/activity_map.xml b/app/src/main/res/layout-port/activity_map.xml new file mode 100644 index 0000000..7fd11af --- /dev/null +++ b/app/src/main/res/layout-port/activity_map.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/layout-port/content_map.xml b/app/src/main/res/layout-port/content_map.xml new file mode 100644 index 0000000..d018b77 --- /dev/null +++ b/app/src/main/res/layout-port/content_map.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_map.xml b/app/src/main/res/layout/activity_map.xml new file mode 100644 index 0000000..7fd11af --- /dev/null +++ b/app/src/main/res/layout/activity_map.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_submit.xml b/app/src/main/res/layout/activity_submit.xml new file mode 100644 index 0000000..2402644 --- /dev/null +++ b/app/src/main/res/layout/activity_submit.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + diff --git a/app/src/main/res/layout/content_map.xml b/app/src/main/res/layout/content_map.xml new file mode 100644 index 0000000..d018b77 --- /dev/null +++ b/app/src/main/res/layout/content_map.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/content_submit.xml b/app/src/main/res/layout/content_submit.xml new file mode 100644 index 0000000..57f5b15 --- /dev/null +++ b/app/src/main/res/layout/content_submit.xml @@ -0,0 +1,32 @@ + + + + + + + +