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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +