Skip to content

Commit

Permalink
Added a compass image to hunt mode
Browse files Browse the repository at this point in the history
  • Loading branch information
petermcneil committed May 9, 2019
1 parent d1e8470 commit 589568e
Show file tree
Hide file tree
Showing 5 changed files with 115 additions and 62 deletions.
2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ android {
minSdkVersion 23
targetSdkVersion 28
versionCode 1
versionName "1.2.3"
versionName "1.2.5"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@ package mcneil.peter.drop.activities
import android.Manifest
import android.app.ProgressDialog
import android.content.pm.PackageManager
import android.graphics.Matrix
import android.location.Criteria
import android.location.Location
import android.location.LocationListener
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.ImageView
import android.widget.SeekBar
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
Expand Down Expand Up @@ -56,6 +58,7 @@ class FindHuntActivity : AppCompatActivity(), View.OnClickListener, ACallback<Pa

private var distance = 0
private var callbackDisabled = false
private var cancelTimeout = false

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand All @@ -65,17 +68,17 @@ class FindHuntActivity : AppCompatActivity(), View.OnClickListener, ACallback<Pa
pd.setCancelable(false)

fm = supportFragmentManager
cancelDropDialog = AlertDialog.Builder(this).setMessage(R.string.cancel_drop_dialog)
.setPositiveButton(R.string.are_you_sure) { _, _ ->
removeSearchUI()
}.create()
cancelDropDialog = AlertDialog.Builder(this)
.setMessage(R.string.cancel_drop_dialog)
.setPositiveButton(R.string.are_you_sure) { _, _ -> removeSearchUI() }
.create()

find_a_drop_btn.setOnClickListener(this)
cancel_this_drop.setOnClickListener(this)
show_drop.setOnClickListener(this)
radius_text.text = getString(R.string.radius_text, progressToRadius(1))
radius_seekbar.setOnSeekBarChangeListener(this)

needle.setImageDrawable(resources.getDrawable(R.drawable.compass, null))
snackbar = Snackbar.make(findViewById(android.R.id.content), "Couldn't find a drop, try increasing the radius", Snackbar.LENGTH_LONG)
}

Expand All @@ -94,8 +97,11 @@ class FindHuntActivity : AppCompatActivity(), View.OnClickListener, ACallback<Pa

override fun callback(ret: Pair<String, Drop>) {
if (::timeout.isInitialized && !timeout.isDone) {
Log.d(TAG, "callback: Interrupting timeout")
timeout.cancel(true)
} else if (callbackDisabled) {
cancelTimeout = true
}
if (callbackDisabled) {
Log.d(TAG, "callback: Disabled because timeout has been reached")
} else {
Log.d(TAG, "callback: Found a drop")
Expand Down Expand Up @@ -157,15 +163,20 @@ class FindHuntActivity : AppCompatActivity(), View.OnClickListener, ACallback<Pa
firebaseUtil.findNewDrop(currentLocation, this@FindHuntActivity, radius)

//Start a timeout for finding a drop
//If the
timeout = doAsync {
var timeNow = System.currentTimeMillis()
while ((timeNow - timeBefore) < TIMEOUT_MILLISECONDS) {
timeNow = System.currentTimeMillis()
}
callbackDisabled = true
pd.cancel()
snackbar.show()
if(cancelTimeout) {
Log.d(TAG, "timeout: Cancelled and resetting")
cancelTimeout = false
} else {
callbackDisabled = true
pd.cancel()
Log.d(TAG, "timeout: Showing snackbar")
snackbar.show()
}
}
}
}
Expand All @@ -188,12 +199,14 @@ class FindHuntActivity : AppCompatActivity(), View.OnClickListener, ACallback<Pa
find_a_drop_btn.visibility = View.GONE
radius_seekbar.visibility = View.GONE
radius_text.visibility = View.GONE
find_hunt_heading.visibility = View.GONE

find_hunt_explanation.text = getString(R.string.searching_drop)

find_hunt_distance.visibility = View.VISIBLE
find_hunt_bearing.visibility = View.VISIBLE
cancel_this_drop.visibility = View.VISIBLE
needle.visibility = View.VISIBLE

updateSearchUI()
pd.dismiss()
Expand All @@ -203,7 +216,9 @@ class FindHuntActivity : AppCompatActivity(), View.OnClickListener, ACallback<Pa
find_hunt_distance.visibility = View.GONE
find_hunt_bearing.visibility = View.GONE
cancel_this_drop.visibility = View.GONE
needle.visibility = View.GONE

find_hunt_heading.visibility = View.VISIBLE
find_a_drop_btn.visibility = View.VISIBLE
radius_seekbar.visibility = View.VISIBLE
radius_text.visibility = View.VISIBLE
Expand All @@ -215,11 +230,12 @@ class FindHuntActivity : AppCompatActivity(), View.OnClickListener, ACallback<Pa
private fun updateSearchUI() {
if (::foundDrop.isInitialized && ::currentLocation.isInitialized) {
distance = Math.round(currentLocation.distanceTo(foundDropLoc))
val bearing = currentLocation.bearingTo(foundDropLoc)
val bearing = bearing()

find_hunt_distance.text = getString(R.string.f_dm_hunt_distance, distance)
find_hunt_bearing.text = getString(R.string.f_dm_hunt_bearing, bearing)

rotateImage(bearing )
//If the distance is under 10m, show the drop
if (distance < DISTANCE_TO_DROP) {
Log.d(TAG, "updateSearchUI: User found the drop!")
Expand All @@ -234,6 +250,22 @@ class FindHuntActivity : AppCompatActivity(), View.OnClickListener, ACallback<Pa
}
}

private fun bearing(): Float {
val b = currentLocation.bearingTo(foundDropLoc) % 360
return if (b < 0) {
b + 360
} else {
b
}
}

private fun rotateImage(angle: Float) {
val matrix = Matrix()
needle.scaleType =ImageView.ScaleType.MATRIX
matrix.postRotate(angle, (needle.drawable.intrinsicWidth / 2).toFloat(), (needle.drawable.intrinsicHeight / 2).toFloat())
needle.imageMatrix = matrix
}

private fun startLocationUpdates() {
startedUpdates = true
val coarse = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
Expand Down
Binary file added app/src/main/res/drawable/compass.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
119 changes: 70 additions & 49 deletions app/src/main/res/layout/activity_find_hunt.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="@dimen/fragment_container">
android:layout_height="match_parent"
android:orientation="vertical">

<androidx.appcompat.widget.AppCompatTextView
android:text="@string/f_dm_compass"
Expand All @@ -13,6 +14,27 @@
android:textSize="30sp"
android:layout_marginTop="50dp"/>

<androidx.appcompat.widget.AppCompatTextView
android:text="@string/f_dm_compass_explanation"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/find_hunt_explanation"
android:textSize="20sp"
android:layout_marginTop="50dp"
android:textAlignment="center"/>

<androidx.appcompat.widget.AppCompatImageView
android:layout_width="200dp"
android:layout_height="200dp"
tools:srcCompat="@drawable/compass"
android:layout_gravity="center"
android:id="@+id/needle"
android:visibility="gone"
android:padding="10dp"
android:layout_marginTop="50dp"
android:background="#77FFFFFF"/>

<androidx.appcompat.widget.AppCompatTextView
android:text="@string/f_dm_hunt_distance"
android:layout_width="wrap_content"
Expand All @@ -30,69 +52,68 @@
android:layout_gravity="center"
android:id="@+id/find_hunt_bearing"
android:textSize="25sp"
android:layout_marginTop="50dp"
android:layout_marginTop="25dp"
android:visibility="gone"/>


<androidx.appcompat.widget.AppCompatTextView
android:text="@string/f_dm_compass_explanation"
android:text="@string/safety_message_short"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/find_hunt_explanation"
android:id="@+id/find_hunt_saftey"
android:textSize="20sp"
android:layout_marginTop="50dp" android:textAlignment="center"/>
android:layout_marginTop="25dp"
android:textAlignment="center"/>

<androidx.appcompat.widget.AppCompatTextView
android:text="@string/safety_message_short"
android:layout_width="300dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radius_text"
android:layout_gravity="center"
android:id="@+id/find_hunt_saftey"
android:textSize="20sp"
android:layout_marginTop="50dp"
android:textAlignment="center"/>
android:text="@string/radius_text"
android:textSize="20sp"/>

<androidx.appcompat.widget.AppCompatTextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radius_text"
android:layout_gravity="center"
android:layout_marginTop="50dp"
android:text="@string/radius_text"
android:textSize="20sp"/>
<androidx.appcompat.widget.AppCompatSeekBar
android:layout_width="350dp"
android:layout_gravity="center"
android:layout_marginTop="50dp"
android:layout_height="wrap_content"
android:progressTint="#FF9800"
android:max="150"
android:progress="1"
android:id="@+id/radius_seekbar"/>

<androidx.appcompat.widget.AppCompatSeekBar android:layout_width="350dp"
android:layout_gravity="center"
android:layout_marginTop="50dp"
android:layout_height="wrap_content"
android:progressTint="#FF9800"
android:max="150"
android:progress="1"
android:id="@+id/radius_seekbar"/>
<androidx.appcompat.widget.AppCompatButton
android:layout_width="350dp"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:id="@+id/find_a_drop_btn"
android:layout_marginTop="50dp"
android:text="@string/find_a_drop_btn"
android:background="#2196F3"
android:textAllCaps="true"/>

<androidx.appcompat.widget.AppCompatButton android:layout_width="350dp"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:id="@+id/find_a_drop_btn"
android:layout_marginTop="50dp"
android:text="@string/find_a_drop_btn" android:background="#2196F3"
android:textAllCaps="true"/>
<androidx.appcompat.widget.AppCompatButton
android:layout_width="350dp"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:id="@+id/show_drop"
android:layout_marginTop="10dp"
android:text="@string/show_drop"
android:background="#4CAF50"
android:visibility="gone"/>

<androidx.appcompat.widget.AppCompatButton android:layout_width="350dp"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:id="@+id/show_drop"
android:layout_marginTop="50dp"
android:text="@string/show_drop"
android:background="#4CAF50"
android:visibility="gone"/>
<androidx.appcompat.widget.AppCompatButton
android:layout_width="350dp"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:id="@+id/cancel_this_drop"
android:layout_marginTop="40dp"
android:text="@string/cancel_this_drop"
android:background="#F44336"
android:visibility="gone"/>

<androidx.appcompat.widget.AppCompatButton android:layout_width="350dp"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:id="@+id/cancel_this_drop"
android:layout_marginTop="50dp"
android:text="@string/cancel_this_drop"
android:background="#F44336"
android:visibility="gone"/>

</androidx.appcompat.widget.LinearLayoutCompat>

0 comments on commit 589568e

Please sign in to comment.