Skip to content

Commit

Permalink
v2.20.0(159) Android 34
Browse files Browse the repository at this point in the history
  • Loading branch information
dsame committed Jun 30, 2024
1 parent 8addb45 commit 32f937a
Show file tree
Hide file tree
Showing 20 changed files with 75 additions and 34 deletions.
5 changes: 5 additions & 0 deletions app/ic_launcher_round.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
4 changes: 2 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="s4y.itag"
android:versionCode="158"
android:versionName="2.19.4">
android:versionCode="159"
android:versionName="2.20.0">

<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Expand Down
7 changes: 3 additions & 4 deletions app/src/main/java/s4y/itag/BootReceiver.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@

import androidx.annotation.NonNull;

import s4y.gps.sdk.android.GPSPermissionManager;
import s4y.gps.sdk.android.GPSUpdatesForegroundService;
import s4y.itag.itag.ITagsStoreDefault;
import s4y.itag.itag.ITagsStoreInterface;
import s4y.itag.waytoday.WayToday;
import solutions.s4y.waytoday.sdk.AndroidWayTodayClient;

public class BootReceiver extends BroadcastReceiver {
Expand All @@ -26,9 +26,8 @@ public void onReceive(@NonNull Context context, @NonNull Intent intent) {
ITagsService.start(context);
// expected to create application and thus init waytooday
// and enter foreground
} else if (AndroidWayTodayClient.isTrackingOn(context)) {
// expected to create application and thus init waytooday
// and enter foreground
}
if (AndroidWayTodayClient.isTrackingOn(context) && !GPSPermissionManager.needPermissionRequest(context, true)) {
GPSUpdatesForegroundService.start(context);
}
}
Expand Down
6 changes: 0 additions & 6 deletions app/src/main/java/s4y/itag/ITagApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
import com.google.firebase.analytics.FirebaseAnalytics;
import com.google.firebase.crashlytics.FirebaseCrashlytics;

import s4y.gps.sdk.android.GPSPermissionManager;
import s4y.gps.sdk.android.GPSUpdatesForegroundService;
import s4y.itag.itag.ITag;
import s4y.itag.waytoday.WayToday;

Expand All @@ -24,7 +22,6 @@ public final class ITagApplication extends Application {
// context is not used outside Application so there's a hope there will be no memory leak
@SuppressLint("StaticFieldLeak")
public static Context context;
public static Application application;

static public void faWtOn5() {
fa("itag_wt_on5");
Expand Down Expand Up @@ -242,9 +239,6 @@ public void onCreate() {
ITag.initITag(context);

WayToday.init(context);
if (WayToday.getInstance().isTrackingOn() && !GPSPermissionManager.needPermissionRequest(this)) {
GPSUpdatesForegroundService.start(this);
}
}

static public void faWtNoTrackID() {
Expand Down
51 changes: 43 additions & 8 deletions app/src/main/java/s4y/itag/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
import solutions.s4y.rasat.DisposableBag;

public class MainActivity extends FragmentActivity {
private static final int REQUEST_CODE_NOTIFICATION_PERMISSION = 123;
static public final int REQUEST_ENABLE_BT = 1;
static public final int REQUEST_ONSCAN = 2;
public ITagsService iTagsService;
Expand All @@ -61,6 +62,9 @@ public class MainActivity extends FragmentActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (WayToday.getInstance().isTrackingOn() && !GPSPermissionManager.needPermissionRequest(this, true)) {
GPSUpdatesForegroundService.start(this);
}
}

@Override
Expand Down Expand Up @@ -153,9 +157,9 @@ protected void onResume() {
bindService(ITagsService.intentBind(this), mServiceConnection, 0);
// unconditionally stop background service
if (WayToday.getInstance().isTrackingOn()) {
if (GPSPermissionManager.needPermissionRequest(this)) {
if (GPSPermissionManager.needPermissionRequest(this, true)) {
new Handler(getMainLooper()).post(() ->
GPSPermissionManager.requestPermissions(this)
GPSPermissionManager.requestPermissions(this, true)
);
} else if (GPSPowerManager.needRequestIgnoreOptimization(this)) {
if (resumeCount++ > 1) {
Expand Down Expand Up @@ -183,7 +187,7 @@ protected void onPause() {
ITagsService.stop(this);
}

if (WayToday.getInstance().isTrackingOn() && !GPSPermissionManager.needPermissionRequest(this)) {
if (WayToday.getInstance().isTrackingOn() && !GPSPermissionManager.needPermissionRequest(this, true)) {
GPSUpdatesForegroundService.start(this);
}
}
Expand Down Expand Up @@ -473,7 +477,7 @@ public void onAppMenu(@NonNull View sender) {
public void onWaytoday(@NonNull View sender) {
boolean first = WayTodayFirstPreference.get(this);
String tid = WayToday.getInstance().wtClient.getCurrentTrackerId();
boolean on = WayToday.getInstance().isTrackingOn() && !GPSPermissionManager.needPermissionRequest(this);
boolean on = WayToday.getInstance().isTrackingOn() && !GPSPermissionManager.needPermissionRequest(this, true);
int freq = WayToday.getInstance().gpsUpdatesManager.getIntervalSec();
final PopupMenu popupMenu = new PopupMenu(this, sender);
popupMenu.inflate(R.menu.waytoday);
Expand Down Expand Up @@ -562,11 +566,12 @@ public void onWaytoday(@NonNull View sender) {
builder.create().show();
}
if (id == R.id.wt_sec_1 || id == R.id.wt_min_5 || id == R.id.wt_hour_1) {
if (GPSPermissionManager.needPermissionRequest(this)) {
if (GPSPermissionManager.needPermissionRequest(this, true)) {
WayToday.getInstance().enableTrackingOn();
GPSPermissionManager.requestPermissions(this);
GPSPermissionManager.requestPermissions(this, true);
} else {
WayToday.getInstance().turnTrackingOn();
checkNotificationPermission();
}
}
return true;
Expand Down Expand Up @@ -624,9 +629,13 @@ public void onDisconnectAlert(@NonNull View sender) {
if (itag.isAlertDisconnected()) {
Toast.makeText(this, R.string.mode_alertdisconnect, Toast.LENGTH_SHORT).show();
ITagApplication.faUnmuteTag();
if (GPSPermissionManager.needPermissionRequest(this)) {
GPSPermissionManager.requestPermissions(this, getString(R.string.gps_permission_request));
if (GPSPermissionManager.needPermissionRequest(this, true)) {
GPSPermissionManager.requestPermissions(this,
getString(R.string.gps_permission_request),
getString(R.string.gps_background_permission_request)
);
}
checkNotificationPermission();
} else {
Toast.makeText(this, R.string.mode_keyfinder, Toast.LENGTH_SHORT).show();
ITagApplication.faMuteTag();
Expand Down Expand Up @@ -675,6 +684,9 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
WayToday.getInstance().gpsUpdatesManager,
WayToday.getInstance().isTrackingOn());
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
checkNotificationPermission();
}
}

public void onOpenBTSettings(View ignored) {
Expand All @@ -684,6 +696,29 @@ public void onOpenBTSettings(View ignored) {
} catch (SecurityException e) {
Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}

private void checkNotificationPermission() {
if (Build.VERSION.SDK_INT > 32) {
if (checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
// Should we show rationale?
if (shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) {
new androidx.appcompat.app.AlertDialog.Builder(this)
.setTitle("Notification Permission Required")
.setMessage("The application will display an icon when running in the background so you can activate and stop it.")
.setPositiveButton(
"OK",
(dialog, which) -> requestPermissions(new String[]{Manifest.permission.POST_NOTIFICATIONS}, REQUEST_CODE_NOTIFICATION_PERMISSION))
.setNegativeButton(
"Cancel",
null)
.create()
.show();
} else {
// No explanation needed, request the permission directly
requestPermissions(new String[]{Manifest.permission.POST_NOTIFICATIONS}, REQUEST_CODE_NOTIFICATION_PERMISSION);
}
}
}
}
}
14 changes: 10 additions & 4 deletions app/src/main/java/s4y/itag/MediaPlayerUtils.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package s4y.itag;

import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.AssetFileDescriptor;
import android.media.AudioManager;
import android.media.MediaPlayer;
Expand All @@ -13,6 +14,7 @@

import java.io.IOException;

import static android.Manifest.permission.READ_PHONE_STATE;
import static android.content.Context.AUDIO_SERVICE;

public class MediaPlayerUtils implements MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener {
Expand Down Expand Up @@ -110,10 +112,14 @@ public boolean isSound() {

public void startSoundDisconnected(Context context) {
stopSound(context);
// return if we are in a call
TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
if(manager.getCallState() != TelephonyManager.CALL_STATE_IDLE){
return;
// check if we have permission get call state

if (context.checkSelfPermission(READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
// return if we are in a call
TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
if(manager.getCallState() != TelephonyManager.CALL_STATE_IDLE){
return;
}
}

AudioManager am = (AudioManager) context.getSystemService(AUDIO_SERVICE);
Expand Down
11 changes: 5 additions & 6 deletions app/src/main/java/s4y/itag/waytoday/WayToday.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,16 @@
import solutions.s4y.waytoday.sdk.AndroidWayTodayClient;
public class WayToday {
private static AndroidWayTodayClient instance;
private static Channel<String> trackIdChannel = new Channel<>();
private static Channel<IGPSUpdatesProvider.Status> gpsStatusChannel = new Channel();
private static final Channel<String> trackIdChannel = new Channel<>();
private static final Channel<IGPSUpdatesProvider.Status> gpsStatusChannel = new Channel<>();

public static void init(Context context) {
if (instance != null) {
throw new IllegalStateException("WayToday is already initialized");
}

instance = new AndroidWayTodayClient(context, "iTagAndroid", "secret", "iTagAndroid");
instance.wtClient.addTrackIdChangeListener(tid -> {
trackIdChannel.broadcast(tid);
});
instance.wtClient.addTrackIdChangeListener(trackIdChannel::broadcast);

instance.gpsUpdatesManager.getStatus().addListener(status -> {
gpsStatusChannel.broadcast(status);
Expand All @@ -34,8 +32,9 @@ public static void init(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
GPSUpdatesForegroundService.setNotificationChannelId("itag_gps_updates");
GPSUpdatesForegroundService.setNotificationChannelName("ITag GPS Updates");
GPSUpdatesForegroundService.setNotificationId(22);
// GPSUpdatesForegroundService.setNotificationId(22);
GPSUpdatesForegroundService.setNotificationContentTitle("Stop iTag WayToday tracking");
// GPSUpdatesForegroundService.setUseApplicationNotificationSmallIcon(true);
}
}
public static AndroidWayTodayClient getInstance() {
Expand Down
4 changes: 0 additions & 4 deletions app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml

This file was deleted.

Empty file modified app/src/main/res/mipmap-hdpi/ic_launcher_round.png
100755 → 100644
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file modified app/src/main/res/mipmap-mdpi/ic_launcher_round.png
100755 → 100644
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file modified app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
100755 → 100644
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file modified app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
100755 → 100644
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file modified app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
100755 → 100644
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions app/src/main/res/values-ar/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -95,4 +95,5 @@
<string name="wt_tracking_stopped">توقف تتبع WayToday</string>
<string name="gps_permissions_off">غير قادر على الحصول على الموقع الحالي بسبب عدم وجود أذونات الموقع</string>
<string name="gps_permission_request">مطلوب الإذن لتحديد الموقع الحالي في حالة فقدان الاتصال</string>
<string name="gps_background_permission_request">مطلوب الوصول إلى الموقع في الخلفية للحصول على تحديثات مستمرة والتتبع التلقائي عند التشغيل.</string>
</resources>
1 change: 1 addition & 0 deletions app/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,5 @@
<string name="wt_tracking_stopped">Seguimiento de WayToday detenido</string>
<string name="gps_permissions_off">Incapaz de obtener la posición actual debido a la falta de permisos de ubicación</string>
<string name="gps_permission_request">Se requiere permiso para determinar la ubicación actual en caso de pérdida de conexión</string>
<string name="gps_background_permission_request">Se necesita acceso a la ubicación en segundo plano para actualizaciones continuas y seguimiento automático al iniciar.</string>
</resources>
1 change: 1 addition & 0 deletions app/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,5 @@
<string name="wt_tracking_stopped">Arrêt du suivi WayToday</string>
<string name="gps_permissions_off">Impossible d\'obtenir la position actuelle en raison de l\'absence d\'autorisations de localisation</string>
<string name="gps_permission_request">Autorisation requise pour déterminer l\'emplacement actuel en cas de perte de connexion</string>
<string name="gps_background_permission_request">Il est nécessaire d\'accéder à votre position en arrière-plan pour des mises à jour continues et un suivi automatique au démarrage.</string>
</resources>
1 change: 1 addition & 0 deletions app/src/main/res/values-it/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,5 @@
<string name="wt_tracking_stopped">WayToday tracking fermato</string>
<string name="gps_permissions_off">Impossibile ottenere la posizione corrente a causa della mancanza di autorizzazioni per la localizzazione</string>
<string name="gps_permission_request">È richiesto il permesso per determinare la posizione attuale in caso di perdita di connessione</string>
<string name="gps_background_permission_request">L\'accesso alla posizione in background è necessario per aggiornamenti continui e monitoraggio automatico all\'avvio.</string>
</resources>
1 change: 1 addition & 0 deletions app/src/main/res/values-pt/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,5 @@
<string name="wt_tracking_stopped">Rastreamento WayToday parado</string>
<string name="gps_permissions_off">Incapaz de obter a posição atual devido à falta de permissões de localização</string>
<string name="gps_permission_request">É necessário permissão para determinar a localização atual em caso de perda de conexão</string>
<string name="gps_background_permission_request">É necessário acesso à localização em segundo plano para atualizações contínuas e rastreamento automático na inicialização.</string>
</resources>
1 change: 1 addition & 0 deletions app/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -95,4 +95,5 @@
<string name="wt_tracking_stopped">Отслеживание WayToday остановлено</string>
<string name="gps_permissions_off">Невозможно получить текущее положение из-за отсутствия разрешений на местоположение</string>
<string name="gps_permission_request">Требуется разрешение для определения текущего местоположения в случае потери связи</string>
<string name="gps_background_permission_request">Необходим доступ к фоновому местоположению для постоянного обновления данных и автоматического отслеживания при запуске.</string>
</resources>
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -117,4 +117,5 @@
<string name="wt_tracking_stopped">WayToday tracking stopped</string>
<string name="gps_permissions_off">Unable to get the current position due to lack of location permissions</string>
<string name="gps_permission_request">Permission required to determine current location in case of connection loss</string>
<string name="gps_background_permission_request">Background location is needed for continuous updates and automatic tracking on startup.</string>
</resources>

0 comments on commit 32f937a

Please sign in to comment.