From 93f528aa49e978e20b2feb2a2bdd7c7e3db81a9a Mon Sep 17 00:00:00 2001
From: iso53 <102249575+ISO53@users.noreply.github.com>
Date: Sat, 14 Mar 2026 17:06:32 +0300
Subject: [PATCH 1/4] Add NorthType screen with animated demo
Introduce a new NorthTypeActivity and corresponding UI to let users choose True vs Magnetic north.
---
app/src/main/AndroidManifest.xml | 3 +
.../nothingcompass/NorthTypeActivity.java | 79 ++++++++++
.../iso53/nothingcompass/OptionsActivity.java | 2 +-
.../animator/anim_declination_rotation.xml | 10 ++
app/src/main/res/color/switch_thumb_color.xml | 7 +
app/src/main/res/color/switch_track_color.xml | 7 +
.../color/switch_track_decoration_color.xml | 6 +
.../res/drawable/avd_north_comparison.xml | 6 +
.../main/res/drawable/vd_compass_needles.xml | 54 +++++++
.../main/res/layout/activity_north_type.xml | 142 ++++++++++++++++++
10 files changed, 315 insertions(+), 1 deletion(-)
create mode 100644 app/src/main/java/io/github/iso53/nothingcompass/NorthTypeActivity.java
create mode 100644 app/src/main/res/animator/anim_declination_rotation.xml
create mode 100644 app/src/main/res/color/switch_thumb_color.xml
create mode 100644 app/src/main/res/color/switch_track_color.xml
create mode 100644 app/src/main/res/color/switch_track_decoration_color.xml
create mode 100644 app/src/main/res/drawable/avd_north_comparison.xml
create mode 100644 app/src/main/res/drawable/vd_compass_needles.xml
create mode 100644 app/src/main/res/layout/activity_north_type.xml
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..e91b294 100644
--- a/app/src/main/java/io/github/iso53/nothingcompass/OptionsActivity.java
+++ b/app/src/main/java/io/github/iso53/nothingcompass/OptionsActivity.java
@@ -72,7 +72,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)));
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..c1a4372
--- /dev/null
+++ b/app/src/main/res/color/switch_thumb_color.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ 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..94697b5
--- /dev/null
+++ b/app/src/main/res/color/switch_track_color.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ 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..36b34e8
--- /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..d325c16
--- /dev/null
+++ b/app/src/main/res/drawable/vd_compass_needles.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From 39c4655708727c79855871a47f2f4af73f654f21 Mon Sep 17 00:00:00 2001
From: iso53 <102249575+ISO53@users.noreply.github.com>
Date: Sat, 14 Mar 2026 17:11:37 +0300
Subject: [PATCH 2/4] Add sensor and location info to diagnostics
Append detailed sensor and location status to the device info used in OptionsActivity diagnostics.
---
.../iso53/nothingcompass/OptionsActivity.java | 44 ++++++++++++++++++-
1 file changed, 43 insertions(+), 1 deletion(-)
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 e91b294..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;
@@ -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 -> {
From a01fd76630594311355cf23acb2731a90bb9dba1 Mon Sep 17 00:00:00 2001
From: iso53 <102249575+ISO53@users.noreply.github.com>
Date: Sat, 14 Mar 2026 17:26:09 +0300
Subject: [PATCH 3/4] Use theme colors and update compass drawable
---
app/src/main/res/color/switch_thumb_color.xml | 7 +++---
app/src/main/res/color/switch_track_color.xml | 7 +++---
.../color/switch_track_decoration_color.xml | 6 ++---
.../main/res/drawable/vd_compass_needles.xml | 25 +++++++++++--------
4 files changed, 24 insertions(+), 21 deletions(-)
diff --git a/app/src/main/res/color/switch_thumb_color.xml b/app/src/main/res/color/switch_thumb_color.xml
index c1a4372..7b2907e 100644
--- a/app/src/main/res/color/switch_thumb_color.xml
+++ b/app/src/main/res/color/switch_thumb_color.xml
@@ -1,7 +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
index 94697b5..f24b2bc 100644
--- a/app/src/main/res/color/switch_track_color.xml
+++ b/app/src/main/res/color/switch_track_color.xml
@@ -1,7 +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
index 36b34e8..0d0d9c2 100644
--- a/app/src/main/res/color/switch_track_decoration_color.xml
+++ b/app/src/main/res/color/switch_track_decoration_color.xml
@@ -1,6 +1,6 @@
-
-
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/vd_compass_needles.xml b/app/src/main/res/drawable/vd_compass_needles.xml
index d325c16..09923f0 100644
--- a/app/src/main/res/drawable/vd_compass_needles.xml
+++ b/app/src/main/res/drawable/vd_compass_needles.xml
@@ -7,24 +7,24 @@
-
+
@@ -35,20 +35,25 @@
android:pivotY="100"
android:rotation="0">
+
+
+
From f0902cda4009ab2b6b84040d7672bad12a7fedca Mon Sep 17 00:00:00 2001
From: iso53 <102249575+ISO53@users.noreply.github.com>
Date: Sat, 14 Mar 2026 17:27:05 +0300
Subject: [PATCH 4/4] Bump app version to 1.3.1 (versionCode 4)
---
app/build.gradle.kts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
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"
}