From 4f7d8cb097df6d397eba55b0f2416cb05b19f0ba Mon Sep 17 00:00:00 2001 From: DeliaOana Date: Thu, 11 Apr 2019 17:07:08 +0300 Subject: [PATCH] [CitiSimApp]: first version --- projects/CitiSimApp/.gitignore | 13 + .../CitiSimApp/.idea/codeStyles/Project.xml | 29 +++ projects/CitiSimApp/.idea/gradle.xml | 15 ++ projects/CitiSimApp/.idea/misc.xml | 14 ++ .../CitiSimApp/.idea/runConfigurations.xml | 12 + projects/CitiSimApp/app/.gitignore | 1 + projects/CitiSimApp/app/build.gradle | 34 +++ projects/CitiSimApp/app/proguard-rules.pro | 21 ++ .../main/citisim/ExampleInstrumentedTest.java | 26 ++ .../app/src/main/AndroidManifest.xml | 37 +++ .../java/com/main/citisim/MainActivity.java | 119 +++++++++ .../src/main/java/com/main/citisim/Map.java | 236 ++++++++++++++++++ .../java/com/main/citisim/MyVolleyQueue.java | 61 +++++ .../main/java/com/main/citisim/NewReport.java | 122 +++++++++ .../drawable-v24/ic_launcher_foreground.xml | 34 +++ .../res/drawable/ic_launcher_background.xml | 170 +++++++++++++ .../app/src/main/res/drawable/logo.png | Bin 0 -> 39992 bytes .../app/src/main/res/layout/activity_main.xml | 133 ++++++++++ .../app/src/main/res/layout/activity_map.xml | 28 +++ .../main/res/layout/activity_new_report.xml | 195 +++++++++++++++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2963 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 4905 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2060 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2783 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4490 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6895 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6387 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10413 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9128 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15132 bytes .../app/src/main/res/raw/reports.json | 3 + .../app/src/main/res/values/colors.xml | 6 + .../app/src/main/res/values/strings.xml | 5 + .../app/src/main/res/values/styles.xml | 11 + .../com/main/citisim/ExampleUnitTest.java | 17 ++ projects/CitiSimApp/build.gradle | 27 ++ projects/CitiSimApp/gradle.properties | 15 ++ .../gradle/wrapper/gradle-wrapper.properties | 6 + projects/CitiSimApp/gradlew | 172 +++++++++++++ projects/CitiSimApp/gradlew.bat | 84 +++++++ projects/CitiSimApp/settings.gradle | 1 + 43 files changed, 1657 insertions(+) create mode 100644 projects/CitiSimApp/.gitignore create mode 100644 projects/CitiSimApp/.idea/codeStyles/Project.xml create mode 100644 projects/CitiSimApp/.idea/gradle.xml create mode 100644 projects/CitiSimApp/.idea/misc.xml create mode 100644 projects/CitiSimApp/.idea/runConfigurations.xml create mode 100644 projects/CitiSimApp/app/.gitignore create mode 100644 projects/CitiSimApp/app/build.gradle create mode 100644 projects/CitiSimApp/app/proguard-rules.pro create mode 100644 projects/CitiSimApp/app/src/androidTest/java/com/main/citisim/ExampleInstrumentedTest.java create mode 100644 projects/CitiSimApp/app/src/main/AndroidManifest.xml create mode 100644 projects/CitiSimApp/app/src/main/java/com/main/citisim/MainActivity.java create mode 100644 projects/CitiSimApp/app/src/main/java/com/main/citisim/Map.java create mode 100644 projects/CitiSimApp/app/src/main/java/com/main/citisim/MyVolleyQueue.java create mode 100644 projects/CitiSimApp/app/src/main/java/com/main/citisim/NewReport.java create mode 100644 projects/CitiSimApp/app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 projects/CitiSimApp/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 projects/CitiSimApp/app/src/main/res/drawable/logo.png create mode 100644 projects/CitiSimApp/app/src/main/res/layout/activity_main.xml create mode 100644 projects/CitiSimApp/app/src/main/res/layout/activity_map.xml create mode 100644 projects/CitiSimApp/app/src/main/res/layout/activity_new_report.xml create mode 100644 projects/CitiSimApp/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 projects/CitiSimApp/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 projects/CitiSimApp/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 projects/CitiSimApp/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 projects/CitiSimApp/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 projects/CitiSimApp/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 projects/CitiSimApp/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 projects/CitiSimApp/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 projects/CitiSimApp/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 projects/CitiSimApp/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 projects/CitiSimApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 projects/CitiSimApp/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 projects/CitiSimApp/app/src/main/res/raw/reports.json create mode 100644 projects/CitiSimApp/app/src/main/res/values/colors.xml create mode 100644 projects/CitiSimApp/app/src/main/res/values/strings.xml create mode 100644 projects/CitiSimApp/app/src/main/res/values/styles.xml create mode 100644 projects/CitiSimApp/app/src/test/java/com/main/citisim/ExampleUnitTest.java create mode 100644 projects/CitiSimApp/build.gradle create mode 100644 projects/CitiSimApp/gradle.properties create mode 100644 projects/CitiSimApp/gradle/wrapper/gradle-wrapper.properties create mode 100644 projects/CitiSimApp/gradlew create mode 100644 projects/CitiSimApp/gradlew.bat create mode 100644 projects/CitiSimApp/settings.gradle diff --git a/projects/CitiSimApp/.gitignore b/projects/CitiSimApp/.gitignore new file mode 100644 index 00000000..2b75303a --- /dev/null +++ b/projects/CitiSimApp/.gitignore @@ -0,0 +1,13 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild diff --git a/projects/CitiSimApp/.idea/codeStyles/Project.xml b/projects/CitiSimApp/.idea/codeStyles/Project.xml new file mode 100644 index 00000000..30aa626c --- /dev/null +++ b/projects/CitiSimApp/.idea/codeStyles/Project.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/CitiSimApp/.idea/gradle.xml b/projects/CitiSimApp/.idea/gradle.xml new file mode 100644 index 00000000..2996d531 --- /dev/null +++ b/projects/CitiSimApp/.idea/gradle.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/projects/CitiSimApp/.idea/misc.xml b/projects/CitiSimApp/.idea/misc.xml new file mode 100644 index 00000000..af0bbdde --- /dev/null +++ b/projects/CitiSimApp/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/CitiSimApp/.idea/runConfigurations.xml b/projects/CitiSimApp/.idea/runConfigurations.xml new file mode 100644 index 00000000..7f68460d --- /dev/null +++ b/projects/CitiSimApp/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/projects/CitiSimApp/app/.gitignore b/projects/CitiSimApp/app/.gitignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/projects/CitiSimApp/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/projects/CitiSimApp/app/build.gradle b/projects/CitiSimApp/app/build.gradle new file mode 100644 index 00000000..fedd5b3b --- /dev/null +++ b/projects/CitiSimApp/app/build.gradle @@ -0,0 +1,34 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 28 + defaultConfig { + applicationId "com.main.citisim" + minSdkVersion 15 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.google.android.gms:play-services-location:15.0.1' + implementation 'com.google.maps.android:android-maps-utils:0.5+' ///////////////// + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + implementation 'com.google.android.gms:play-services-maps:16.1.0' + implementation 'com.google.android.gms:play-services-plus:16.0.0' + implementation 'com.android.volley:volley:1.1.1' + +} diff --git a/projects/CitiSimApp/app/proguard-rules.pro b/projects/CitiSimApp/app/proguard-rules.pro new file mode 100644 index 00000000..f1b42451 --- /dev/null +++ b/projects/CitiSimApp/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# 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 *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/projects/CitiSimApp/app/src/androidTest/java/com/main/citisim/ExampleInstrumentedTest.java b/projects/CitiSimApp/app/src/androidTest/java/com/main/citisim/ExampleInstrumentedTest.java new file mode 100644 index 00000000..e268ee1b --- /dev/null +++ b/projects/CitiSimApp/app/src/androidTest/java/com/main/citisim/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.main.citisim; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.main.citisim", appContext.getPackageName()); + } +} diff --git a/projects/CitiSimApp/app/src/main/AndroidManifest.xml b/projects/CitiSimApp/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..b134fe3c --- /dev/null +++ b/projects/CitiSimApp/app/src/main/AndroidManifest.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/CitiSimApp/app/src/main/java/com/main/citisim/MainActivity.java b/projects/CitiSimApp/app/src/main/java/com/main/citisim/MainActivity.java new file mode 100644 index 00000000..2bcf1236 --- /dev/null +++ b/projects/CitiSimApp/app/src/main/java/com/main/citisim/MainActivity.java @@ -0,0 +1,119 @@ +package com.main.citisim; + +import android.app.Dialog; +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.android.volley.AuthFailureError; +import com.android.volley.NoConnectionError; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.TimeoutError; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.GoogleApiAvailability; + +import org.json.JSONObject; + +import java.util.HashMap; + +public class MainActivity extends AppCompatActivity { + + private static final String TAG = "MainActivity"; + private static final int ERROR_DIALOG_REQUEST = 9001; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + Button addBtn = (Button) findViewById(R.id.addBtn); + addBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + EditText username = (EditText) findViewById(R.id.username); + EditText password = (EditText) findViewById(R.id.password); + final TextView okmsg = (TextView) findViewById(R.id.okmsg); + + + //------LOGARE------- + okmsg.setText(""); + HashMap data = new HashMap(); + data.put("username", username.getText().toString()); + data.put("password", password.getText().toString()); + data.put("rememberMe", true); + + String url =getResources().getString(R.string.api_server)+"/api/authenticate"; + + JsonObjectRequest jsonObjectRequest = new JsonObjectRequest + (Request.Method.POST, url, new JSONObject(data), new Response.Listener() { + + @Override + public void onResponse(JSONObject response) { + okmsg.setText("Response: " + response.toString()); + openMap(); + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + // TODO: Handle error + if(error instanceof TimeoutError || error instanceof NoConnectionError){ + Toast.makeText(getApplicationContext(),"no internet connection",Toast.LENGTH_SHORT).show(); + }else if(error instanceof AuthFailureError){ + Toast.makeText(getApplicationContext(),"wronguser/pass",Toast.LENGTH_SHORT).show(); + } + else{ + Toast.makeText(getApplicationContext(),"????",Toast.LENGTH_SHORT).show(); + } + } + }); + +// Access the RequestQueue through your singleton class. + MyVolleyQueue.getInstance(getApplicationContext()).addToRequestQueue(jsonObjectRequest); + + + //------LOGARE-------// + } + }); + } + + public void openMap(){ + Intent intent = new Intent(this, Map.class); + startActivity(intent); + } + + + public boolean isServicesOK(){ + Log.d(TAG,"isServicesOK: checking google services version"); + + int available = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(MainActivity.this); + + if(available == ConnectionResult.SUCCESS) { + Log.d(TAG,"isServicesOK: Google Play Services is working"); + return true; + } + else if(GoogleApiAvailability.getInstance().isUserResolvableError(available)) { + Log.d(TAG,"isServicesOK: a version error occured"); + Dialog dialog = GoogleApiAvailability.getInstance().getErrorDialog(MainActivity.this,available,ERROR_DIALOG_REQUEST); + dialog.show(); + }else { + Toast.makeText(this,"an error occured",Toast.LENGTH_SHORT).show(); + } + return false; + } + + + + + +} + diff --git a/projects/CitiSimApp/app/src/main/java/com/main/citisim/Map.java b/projects/CitiSimApp/app/src/main/java/com/main/citisim/Map.java new file mode 100644 index 00000000..e3622dda --- /dev/null +++ b/projects/CitiSimApp/app/src/main/java/com/main/citisim/Map.java @@ -0,0 +1,236 @@ +package com.main.citisim; + +import android.Manifest; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.location.Location; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.Toast; + +import com.google.android.gms.location.FusedLocationProviderClient; +import com.google.android.gms.location.LocationServices; +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.TileOverlay; +import com.google.android.gms.maps.model.TileOverlayOptions; +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.maps.android.heatmaps.HeatmapTileProvider; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class Map extends AppCompatActivity implements OnMapReadyCallback { + + @Override + public void onMapReady(GoogleMap googleMap) { + mMap = googleMap; + + if (mLocationPermissionsGranted) { + getDeviceLocation(); + if (ActivityCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, + Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + return; + } + mMap.setMyLocationEnabled(true); + //mMap.getUiSettings(). different settings + } + + } + + private static final String TAG = "Map"; + + private static final String FINE_LOCATION=Manifest.permission.ACCESS_FINE_LOCATION; + private static final String COURSE_LOCATION=Manifest.permission.ACCESS_COARSE_LOCATION; + private static final int LOCATION_PERMISSION_REQUEST_CODE = 1234; + private static final float DEFAULT_ZOOM=15f; + //vars + private Boolean mLocationPermissionsGranted=false; + private GoogleMap mMap; + private FusedLocationProviderClient mFusedLocationProviderClient; + private Button button2; + public static double latitude; + public static double longitude; + + private HeatmapTileProvider mProvider; + + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_map); + + getLocationPermission(); + + button2=(Button)findViewById(R.id.button2); + button2.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openNewReport(); + } + }); + + } + + + + /////////////////////////////////////////////////////// + + + + private void addHeatMap() { + List list = null; + + // Get the data: latitude/longitude positions of police stations. + try { + list = readItems(R.raw.reports); + } catch (JSONException e) { + Toast.makeText(this, "Problem reading list of locations.", Toast.LENGTH_LONG).show(); + } + + // Create a heat map tile provider, passing it the latlngs of the police stations. + mProvider = new HeatmapTileProvider.Builder() + .data(list) + .build(); + // Add a tile overlay to the map, using the heat map tile provider. + final TileOverlay mOverlay = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider)); + } + + + private ArrayList readItems(int resource) throws JSONException { + ArrayList list = new ArrayList(); + InputStream inputStream = getResources().openRawResource(resource); + String json = new Scanner(inputStream).useDelimiter("\\A").next(); + JSONArray array = new JSONArray(json); + for (int i = 0; i < array.length(); i++) { + JSONObject object = array.getJSONObject(i); + double lat = object.getDouble("lat"); + double lng = object.getDouble("lng"); + list.add(new LatLng(lat, lng)); + } + return list; + } + + +//////////////////////////////////////////////////////////// + + public void openNewReport(){ + Intent intent = new Intent(this,NewReport.class); + startActivity(intent); + } + + public void getDeviceLocation(){ + mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this); + try { + if(mLocationPermissionsGranted){ + Task location = mFusedLocationProviderClient.getLastLocation(); + location.addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if(task.isSuccessful()){ + + addHeatMap(); //////////// + Log.d(TAG, "onComplete: found location!"); + Location currentLocation = (Location) task.getResult(); + + moveCamera(new LatLng(currentLocation.getLatitude(),currentLocation.getLongitude()), + DEFAULT_ZOOM ); + + latitude=currentLocation.getLatitude(); + longitude=currentLocation.getLongitude(); + + + + }else{ + Log.d(TAG, "onComplete: current location is null"); + Toast.makeText(Map.this, "unable to get current location", Toast.LENGTH_SHORT).show(); + } + } + }); + } + }catch(SecurityException e){ + Log.e(TAG, "getDeviceLocation: SecurityException: " +e.getMessage() ); + } + } + + + + + private void moveCamera(LatLng latLng, float zoom){ + mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,zoom)); + } + + private void initMap(){ + SupportMapFragment mapFragment=(SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); + + mapFragment.getMapAsync(Map.this); + } + + private void getLocationPermission(){ + String[] permissions={Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_COARSE_LOCATION}; + + if(ContextCompat.checkSelfPermission(this.getApplicationContext(), + FINE_LOCATION)== PackageManager.PERMISSION_GRANTED) { + if(ContextCompat.checkSelfPermission(this.getApplicationContext(), + COURSE_LOCATION)== PackageManager.PERMISSION_GRANTED) { + mLocationPermissionsGranted = true; + initMap(); + }else{ + ActivityCompat.requestPermissions(this, + permissions, + LOCATION_PERMISSION_REQUEST_CODE); + + } + }else{ + ActivityCompat.requestPermissions(this, + permissions, + LOCATION_PERMISSION_REQUEST_CODE); + + } + + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + mLocationPermissionsGranted = false; + + switch(requestCode) { + case LOCATION_PERMISSION_REQUEST_CODE: { + if(grantResults.length>0) { + for(int i=0;i + cache = new LruCache(20); + + @Override + public Bitmap getBitmap(String url) { + return cache.get(url); + } + + @Override + public void putBitmap(String url, Bitmap bitmap) { + cache.put(url, bitmap); + } + }); + } + + public static synchronized MyVolleyQueue getInstance(Context context) { + if (instance == null) { + instance = new MyVolleyQueue(context); + } + return instance; + } + + public RequestQueue getRequestQueue() { + if (requestQueue == null) { + // getApplicationContext() is key, it keeps you from leaking the + // Activity or BroadcastReceiver if someone passes one in. + requestQueue = Volley.newRequestQueue(ctx.getApplicationContext()); + } + return requestQueue; + } + + public void addToRequestQueue(Request req) { + getRequestQueue().add(req); + } + + public ImageLoader getImageLoader() { + return imageLoader; + } +} \ No newline at end of file diff --git a/projects/CitiSimApp/app/src/main/java/com/main/citisim/NewReport.java b/projects/CitiSimApp/app/src/main/java/com/main/citisim/NewReport.java new file mode 100644 index 00000000..923a29bc --- /dev/null +++ b/projects/CitiSimApp/app/src/main/java/com/main/citisim/NewReport.java @@ -0,0 +1,122 @@ +package com.main.citisim; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.provider.MediaStore; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; + +import java.io.FileOutputStream; +import java.io.IOException; + +public class NewReport extends AppCompatActivity { + + //vars + private Button backToReports; + private Button addImage; + private Button submitImage; + ImageView image; + private static final int PICK_IMAGE=100; + Uri imageUri; + EditText latitude; + EditText longitude; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_new_report); + + latitude=(EditText)findViewById(R.id.latitudeView); + longitude=(EditText)findViewById(R.id.longitudeView); + + image=(ImageView)findViewById(R.id.image) ; + backToReports=(Button)findViewById(R.id.backToReports); + backToReports.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openMap2(); + } + }); + + addImage=(Button)findViewById(R.id.addImage); + addImage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openGallery(); + } + }); + + submitImage=(Button)findViewById(R.id. submitImage); + submitImage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + + latitude.setText(Double.toString(Map.latitude)); + longitude.setText(Double.toString(Map.longitude)); + //writeToFile(""); + //write to reports.json + + + } + }); + + + } + + + + ////////////////////////////........ + + + public static void writeToFile(Context context, String fileName, String str){ + try{ + FileOutputStream fos = context.openFileOutput(fileName,Context.MODE_PRIVATE); + fos.write(str.getBytes(),0,str.length()); + fos.close(); + }catch (IOException e){ + e.printStackTrace(); + } + } + +///////////////////////////////.......... + + + + + private void openGallery(){ + Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI); + startActivityForResult(gallery, PICK_IMAGE); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data){ + super.onActivityResult(requestCode,resultCode,data); + if(resultCode == RESULT_OK && requestCode == PICK_IMAGE) { + imageUri = data.getData(); + image.setImageURI(imageUri); + //aici imaginea trebuie rotita + //aici imaginea trebuie rotita + //aici imaginea trebuie rotita + //aici imaginea trebuie rotita + } + + + + } + + + + + + public void openMap2(){ + Intent intent = new Intent(this, Map.class); + startActivity(intent); + } + +} diff --git a/projects/CitiSimApp/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/projects/CitiSimApp/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 00000000..1f6bb290 --- /dev/null +++ b/projects/CitiSimApp/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/projects/CitiSimApp/app/src/main/res/drawable/ic_launcher_background.xml b/projects/CitiSimApp/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..0d025f9b --- /dev/null +++ b/projects/CitiSimApp/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/CitiSimApp/app/src/main/res/drawable/logo.png b/projects/CitiSimApp/app/src/main/res/drawable/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fd21090e347a0308134a33f5d20e3830df3092af GIT binary patch literal 39992 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 + + + + + + + + + + +