diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 8220fc6..c4b541b 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -13,8 +13,8 @@ android {
applicationId = "io.github.iso53.nothingcompass"
minSdk = 27
targetSdk = 36
- versionCode = 3
- versionName = "1.3.0"
+ versionCode = 4
+ versionName = "1.3.1"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b0e18b6..f41fe4a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,6 +23,9 @@
+
diff --git a/app/src/main/java/io/github/iso53/nothingcompass/NorthTypeActivity.java b/app/src/main/java/io/github/iso53/nothingcompass/NorthTypeActivity.java
new file mode 100644
index 0000000..9a14605
--- /dev/null
+++ b/app/src/main/java/io/github/iso53/nothingcompass/NorthTypeActivity.java
@@ -0,0 +1,79 @@
+package io.github.iso53.nothingcompass;
+
+import android.content.SharedPreferences;
+import android.graphics.drawable.AnimatedVectorDrawable;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ImageView;
+
+import androidx.appcompat.app.AppCompatActivity;
+import com.google.android.material.materialswitch.MaterialSwitch;
+import androidx.appcompat.widget.Toolbar;
+import androidx.preference.PreferenceManager;
+
+import io.github.iso53.nothingcompass.preference.PreferenceConstants;
+
+public class NorthTypeActivity extends AppCompatActivity {
+
+ private ImageView northAnimation;
+ private MaterialSwitch switchTrueNorth;
+ private SharedPreferences prefs;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_north_type);
+
+ setupToolbar();
+
+ northAnimation = findViewById(R.id.north_animation);
+ switchTrueNorth = findViewById(R.id.switch_true_north);
+ prefs = PreferenceManager.getDefaultSharedPreferences(this);
+
+ boolean isTrueNorth = prefs.getBoolean(PreferenceConstants.TRUE_NORTH, false);
+ switchTrueNorth.setChecked(isTrueNorth);
+
+ switchTrueNorth.setOnCheckedChangeListener((buttonView, isChecked) -> {
+ prefs.edit().putBoolean(PreferenceConstants.TRUE_NORTH, isChecked).apply();
+ });
+ }
+
+ private void setupToolbar() {
+ Toolbar toolbar = findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
+ if (getSupportActionBar() != null) {
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ }
+ toolbar.setNavigationOnClickListener(v -> finish());
+
+ // Apply custom font to CollapsingToolbarLayout
+ com.google.android.material.appbar.CollapsingToolbarLayout collapsingToolbar = findViewById(R.id.collapseToolbar);
+ android.graphics.Typeface typeface = androidx.core.content.res.ResourcesCompat.getFont(this, R.font.ntype82headline);
+ if (typeface != null) {
+ collapsingToolbar.setExpandedTitleTypeface(typeface);
+ collapsingToolbar.setCollapsedTitleTypeface(typeface);
+ }
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ if (northAnimation.getDrawable() instanceof AnimatedVectorDrawable) {
+ ((AnimatedVectorDrawable) northAnimation.getDrawable()).start();
+ }
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ if (northAnimation.getDrawable() instanceof AnimatedVectorDrawable) {
+ ((AnimatedVectorDrawable) northAnimation.getDrawable()).stop();
+ }
+ }
+
+ @Override
+ public boolean onSupportNavigateUp() {
+ finish();
+ return true;
+ }
+}
diff --git a/app/src/main/java/io/github/iso53/nothingcompass/OptionsActivity.java b/app/src/main/java/io/github/iso53/nothingcompass/OptionsActivity.java
index 7e277e5..08f228c 100644
--- a/app/src/main/java/io/github/iso53/nothingcompass/OptionsActivity.java
+++ b/app/src/main/java/io/github/iso53/nothingcompass/OptionsActivity.java
@@ -1,9 +1,13 @@
package io.github.iso53.nothingcompass;
import android.content.ActivityNotFoundException;
+import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Typeface;
+import android.hardware.Sensor;
+import android.hardware.SensorManager;
+import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle;
@@ -72,7 +76,7 @@ private void setupRecyclerView() {
items.add(new OptionItem(getString(R.string.item_high_precision), null,
R.drawable.precision, v -> showHighPrecisionSelectionDialog()));
items.add(new OptionItem(getString(R.string.item_north_reference), null,
- R.drawable.ic_compass, v -> showNorthReferenceSelectionDialog()));
+ R.drawable.ic_compass, v -> startActivity(new Intent(this, NorthTypeActivity.class))));
// Category: App
items.add(new OptionItem(getString(R.string.category_app)));
@@ -206,7 +210,8 @@ private void sendFeedbackEmail() {
+ android.os.Build.VERSION.RELEASE + " (SDK " + android.os.Build.VERSION.SDK_INT + ")"
+ "\nManufacturer: " + android.os.Build.MANUFACTURER + "\nModel: "
+ android.os.Build.MODEL
- + "\nProduct: " + android.os.Build.PRODUCT;
+ + "\nProduct: " + android.os.Build.PRODUCT
+ + getSensorInfo();
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
@@ -222,6 +227,43 @@ private void sendFeedbackEmail() {
}
}
+ private String getSensorInfo() {
+ SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
+ StringBuilder sb = new StringBuilder();
+ sb.append("\n\n--- Sensor Information ---");
+
+ if (sensorManager != null) {
+ List sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
+ sb.append("\nTotal Sensors: ").append(sensors.size());
+
+ // Focus on key sensors for a compass app
+ int[] keyTypes = {Sensor.TYPE_MAGNETIC_FIELD, Sensor.TYPE_ACCELEROMETER,
+ Sensor.TYPE_GYROSCOPE, Sensor.TYPE_ROTATION_VECTOR};
+ String[] keyNames = {"Magnetometer", "Accelerometer", "Gyroscope", "Rotation Vector"};
+
+ for (int i = 0; i < keyTypes.length; i++) {
+ Sensor s = sensorManager.getDefaultSensor(keyTypes[i]);
+ sb.append("\n").append(keyNames[i]).append(": ");
+ if (s != null) {
+ sb.append(s.getName()).append(" (").append(s.getVendor()).append(")");
+ } else {
+ sb.append("Not Available");
+ }
+ }
+ }
+
+ LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
+ if (locationManager != null) {
+ sb.append("\n\n--- Location Status ---");
+ boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
+ boolean networkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
+ sb.append("\nGPS Provider: ").append(gpsEnabled ? "Enabled" : "Disabled");
+ sb.append("\nNetwork Provider: ").append(networkEnabled ? "Enabled" : "Disabled");
+ }
+
+ return sb.toString();
+ }
+
private final androidx.activity.result.ActivityResultLauncher requestPermissionLauncher = registerForActivityResult(
new androidx.activity.result.contract.ActivityResultContracts.RequestPermission(),
isGranted -> {
diff --git a/app/src/main/res/animator/anim_declination_rotation.xml b/app/src/main/res/animator/anim_declination_rotation.xml
new file mode 100644
index 0000000..49861b1
--- /dev/null
+++ b/app/src/main/res/animator/anim_declination_rotation.xml
@@ -0,0 +1,10 @@
+
diff --git a/app/src/main/res/color/switch_thumb_color.xml b/app/src/main/res/color/switch_thumb_color.xml
new file mode 100644
index 0000000..7b2907e
--- /dev/null
+++ b/app/src/main/res/color/switch_thumb_color.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/color/switch_track_color.xml b/app/src/main/res/color/switch_track_color.xml
new file mode 100644
index 0000000..f24b2bc
--- /dev/null
+++ b/app/src/main/res/color/switch_track_color.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/color/switch_track_decoration_color.xml b/app/src/main/res/color/switch_track_decoration_color.xml
new file mode 100644
index 0000000..0d0d9c2
--- /dev/null
+++ b/app/src/main/res/color/switch_track_decoration_color.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/avd_north_comparison.xml b/app/src/main/res/drawable/avd_north_comparison.xml
new file mode 100644
index 0000000..b12055b
--- /dev/null
+++ b/app/src/main/res/drawable/avd_north_comparison.xml
@@ -0,0 +1,6 @@
+
+
+
diff --git a/app/src/main/res/drawable/vd_compass_needles.xml b/app/src/main/res/drawable/vd_compass_needles.xml
new file mode 100644
index 0000000..09923f0
--- /dev/null
+++ b/app/src/main/res/drawable/vd_compass_needles.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_north_type.xml b/app/src/main/res/layout/activity_north_type.xml
new file mode 100644
index 0000000..f211486
--- /dev/null
+++ b/app/src/main/res/layout/activity_north_type.xml
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+