Skip to content

Commit

Permalink
Merge pull request #64 from CSE-110-Winter-2023/US-14
Browse files Browse the repository at this point in the history
Us 14
  • Loading branch information
philemonputra authored Mar 17, 2023
2 parents c50b95a + c26d0c2 commit 91905ab
Show file tree
Hide file tree
Showing 9 changed files with 503 additions and 562 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public class MainActivityTest {
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.ACCESS_COARSE_LOCATION");


@Test
public void mainActivityTest() {
assertEquals(1, 1, 0);
Expand Down
106 changes: 72 additions & 34 deletions app/src/main/java/com/example/demo5/Distance.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package com.example.demo5;

//import android.util.Pair;
import android.app.Activity;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.util.Pair;


public class Distance extends AppCompatActivity {

public Activity activity;


/**
* Declaring the longitude and lattitude
* TODO: Implement their distances based on the friend's location
Expand All @@ -18,24 +23,24 @@ public class Distance extends AppCompatActivity {
double longitude;
private LocationService locationService;

public Distance(double longitude, double latitude){
this.longitude = longitude;
this.latitude = latitude;
}
public Distance(Activity activity){
this.activity = activity;

public void reobserveLocation(LocationService locationService) {
var locationData = locationService.getLocation();
locationData.observe(this, this::onLocationChanged);
}

// public void reobserveLocation(LocationService locationService) {
// var locationData = locationService.getLocation();
// locationData.observe(this, this::onLocationChanged);
// }



private void onLocationChanged(Pair<Double, Double> latLong) {
updateCompassWhenLocationChanges(latLong.first, latLong.second);
}

public void settingCircleAngle(int ang) {
TextView friendtext = findViewById(R.id.best_friend);
TextView friendtext = this.activity.findViewById(R.id.best_friend);
ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) friendtext.getLayoutParams();

layoutParams.circleRadius = ang;
Expand All @@ -46,35 +51,58 @@ public void settingCircleAngle(int ang) {

public void updateCompassWhenLocationChanges(Double longitude, Double latitude) {
//Initializing the variables to find the miles
//Math.acos(Math.sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon2-lon1))*6371

//TODO: bro the calculations are a lil off...

double distance = distanceCalculation(longitude, latitude);

double mile_total = distance * 69.4;

//Initializing the variables to find the miles
double mile_total = distanceCalculation(longitude, latitude);
double circle_ang;

//Starting the placement of friend onto screen
if(mile_total < 1) {
if (mile_total < 1) {
//Place it onto disk 1
settingCircleAngle(45);
}
else if(mile_total >=1 && mile_total < 10) {
circle_ang = mile_total / 1.0;
circle_ang *= 50.0;
int ang = (int) Math.round(circle_ang);

settingCircleAngle(ang);
System.out.println("we out here: disk 1");
} else if (mile_total >= 1 && mile_total < 10) {
//Place it onto disk 2
settingCircleAngle(95);
}
else if(mile_total >= 10 && mile_total < 500) {
circle_ang = mile_total / 10.0;
//Space in between 50 - 100
circle_ang *= 50;

circle_ang = circle_ang + 65;

int ang = (int) Math.round(circle_ang);

settingCircleAngle(ang);
System.out.println("we out here: disk 2");
} else if (mile_total >= 10 && mile_total < 500) {
//Place it onto disk 3
settingCircleAngle(195);
}
else {
//490
circle_ang = mile_total / 490.0;
circle_ang *= 100;
circle_ang = circle_ang + 135;
int ang = (int) Math.round(circle_ang);

settingCircleAngle(ang);
System.out.println("The angle is " + ang);
System.out.println("we out here: disk 3");
} else {
//Placing it onto disk 4
settingCircleAngle(355);
}

}
circle_ang = mile_total / 12427.0;
circle_ang *= 200;

circle_ang = circle_ang + 275;

int ang = (int) Math.round(circle_ang);

settingCircleAngle(ang);
System.out.println("we out here: disk 4");

}
}
public double distanceCalculation(Double longitude, Double latitude) {
Pair<String, String> friendLocation = retrieveFriendLocation();
String parentLongText = friendLocation.first;
Expand All @@ -83,6 +111,11 @@ public double distanceCalculation(Double longitude, Double latitude) {
double friend_lat;
double friend_long;

double lat1;
double lon1;
double lat2;
double lon2;

try {
friend_lat = Double.parseDouble(parentLatText);
friend_long = Double.parseDouble(parentLongText);
Expand All @@ -92,10 +125,15 @@ public double distanceCalculation(Double longitude, Double latitude) {
}

//Calculating the distance
double x = (friend_long - longitude) * (friend_long - longitude);
double y = (friend_lat - latitude) * (friend_lat - latitude);
double distance = Math.sqrt(x+y);
lat1 = Math.toRadians(friend_lat);
lon1 = Math.toRadians(friend_long);
lat2 = Math.toRadians(latitude);
lon2 = Math.toRadians(longitude);

double distance = Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1)) * 6371 * 0.621371;

//Will return the distance in miles
System.out.println("Mile distance = " + distance);
return distance;
}

Expand All @@ -104,11 +142,11 @@ public double distanceCalculation(Double longitude, Double latitude) {
* Retrieving the location of the friend
* @return : long and lat as a pair of strings
*/
private Pair<String, String> retrieveFriendLocation() {
public Pair<String, String> retrieveFriendLocation() {
//TODO: Step 1: Retrieving their location based on their UID

String friendLatText = "90";
String friendLongText = "0";
String friendLongText = "33.804246573813415";
String friendLatText = "-117.9106578940017";

return new Pair<>(friendLongText, friendLatText);
}
Expand Down
100 changes: 100 additions & 0 deletions app/src/main/java/com/example/demo5/GpsSignal.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package com.example.demo5;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationManager;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class GpsSignal extends AppCompatActivity {
private ScheduledFuture<?> poller;
private ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
public Activity activity;

/**
* Creating the constructor for GpsSignal
* @param activity
*/
public GpsSignal(Activity activity){
this.activity = activity;
}

public void updateGPSLabel(LocationManager locationManager){
if (ActivityCompat.checkSelfPermission(this.activity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this.activity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
TextView gpsStatus = this.activity.findViewById(R.id.gpsStatus);
TextView gpsTime = this.activity.findViewById(R.id.timeSinceLastUpdated);

if (this.poller != null && !this.poller.isCancelled()) {
poller.cancel(true);
}
//ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
poller=executor.scheduleAtFixedRate(() -> {
Location lastLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (lastLocation != null) {
long lastUpdateTime = lastLocation.getTime();
long currentTime = System.currentTimeMillis();
long timeSinceLastUpdate = currentTime - lastUpdateTime;


System.out.println(timeSinceLastUpdate);
// Check if it's been more than a minute since the last GPS signal was received
if (timeSinceLastUpdate > 10000) {
//offline
runOnUiThread(()-> gpsStatus.setText("GPS Status: Offline"));
runOnUiThread(() -> gpsTime.setVisibility(TextView.VISIBLE));
runOnUiThread(() -> gpsTime.setText(timeSinceGPSLastUpdated(timeSinceLastUpdate)));
}
else{
//online
runOnUiThread(()-> gpsStatus.setText("GPS Status: Online"));
runOnUiThread(() -> gpsTime.setVisibility(TextView.INVISIBLE));
}
}
}, 0, 10, TimeUnit.SECONDS);
}

public String timeSinceGPSLastUpdated(long lastUpdateTime) {
System.out.println(Math.floor(lastUpdateTime));
TextView gpsTime = this.activity.findViewById(R.id.timeSinceLastUpdated);
String time = String.valueOf(lastUpdateTime);
double milli = Double.parseDouble(time);
double seconds = (int)(milli/1000);
double minutes = seconds/60;
seconds = seconds % 60;
double hours = minutes / 60;
minutes = minutes % 60;

Math.floor(seconds);
Math.floor(minutes);
Math.floor(hours);

String secondsString = String.valueOf((int) seconds);
String minutesString = String.valueOf((int) minutes);
String hoursString = String.valueOf((int) hours);

if(hours >= 1.0) {
return "Time since last updated: " +
hoursString + " hours";
}
if(minutes >= 1.0) {
return "Time since last updated: " +
minutesString + " minutes";
}
else {
return "Time since last updated: " +
secondsString + " seconds";
}
}
}
22 changes: 21 additions & 1 deletion app/src/main/java/com/example/demo5/LocationService.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.widget.TextView;

import androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions;
import androidx.annotation.NonNull;
Expand All @@ -18,6 +19,23 @@
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;

import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.util.Pair;


import java.util.Arrays;

public class LocationService implements LocationListener {
Expand Down Expand Up @@ -53,10 +71,12 @@ protected LocationService(AppCompatActivity activity) {
this.locationValue = new MutableLiveData<>();
this.activity = activity;
this.locationManager = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE);
// Register sensor listeners

//Register sensor listeners
withLocationPermissions(this::registerLocationListener);
}


/** This will only be called when we for sure have permissions. */
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
private void registerLocationListener() {
Expand Down
Loading

0 comments on commit 91905ab

Please sign in to comment.