From e0c5340d8b6ba0e8a44e35a1fb74326a0de776ed Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 30 Aug 2017 13:25:18 +1200 Subject: [PATCH] Modernize and fix compilation --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 4 +- .../v4/content/WakefulBroadcastReceiver.java | 134 ------------------ .../org/traccar/client/AboutActivity.java | 10 +- .../org/traccar/client/AutostartReceiver.java | 2 +- .../traccar/client/DialLaunchReceiver.java | 2 +- .../{MainActivity.java => MainFragment.java} | 66 +++++---- .../java/org/traccar/client/Position.java | 92 +++++++++--- .../org/traccar/client/PositionProvider.java | 25 ++-- .../org/traccar/client/RequestManager.java | 3 +- .../org/traccar/client/ShortcutActivity.java | 12 +- .../org/traccar/client/StatusActivity.java | 16 ++- .../traccar/client/TrackingController.java | 13 +- .../org/traccar/client/TrackingService.java | 25 +--- app/src/main/res/drawable-hdpi/logo.png | Bin 3679 -> 0 bytes app/src/main/res/drawable-mdpi/logo.png | Bin 2475 -> 0 bytes app/src/main/res/drawable-xhdpi/logo.png | Bin 4911 -> 0 bytes app/src/main/res/drawable-xxhdpi/logo.png | Bin 7364 -> 0 bytes app/src/main/res/layout/about.xml | 78 ++++------ app/src/main/res/layout/status.xml | 7 +- build.gradle | 4 +- 21 files changed, 192 insertions(+), 302 deletions(-) delete mode 100644 app/src/main/java/android/support/v4/content/WakefulBroadcastReceiver.java rename app/src/main/java/org/traccar/client/{MainActivity.java => MainFragment.java} (83%) delete mode 100644 app/src/main/res/drawable-hdpi/logo.png delete mode 100644 app/src/main/res/drawable-mdpi/logo.png delete mode 100644 app/src/main/res/drawable-xhdpi/logo.png delete mode 100644 app/src/main/res/drawable-xxhdpi/logo.png diff --git a/app/build.gradle b/app/build.gradle index e54f3cd..54bc665 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -35,6 +35,7 @@ android { } dependencies { + compile 'com.android.support:design:26.0.1' testCompile 'junit:junit:4.12' testCompile 'org.robolectric:robolectric:3.4.2' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 69a0dfb..35911e1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,11 +17,11 @@ android:theme="@style/TraccarTheme" android:name=".MainApplication"> - + + android:targetActivity=".MainFragment"> diff --git a/app/src/main/java/android/support/v4/content/WakefulBroadcastReceiver.java b/app/src/main/java/android/support/v4/content/WakefulBroadcastReceiver.java deleted file mode 100644 index 137e5fa..0000000 --- a/app/src/main/java/android/support/v4/content/WakefulBroadcastReceiver.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.support.v4.content; - -import android.content.BroadcastReceiver; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.os.PowerManager; -import android.util.Log; -import android.util.SparseArray; - -/** - * Helper for the common pattern of implementing a {@link BroadcastReceiver} - * that receives a device wakeup event and then passes the work off - * to a {@link android.app.Service}, while ensuring that the - * device does not go back to sleep during the transition. - * - *

This class takes care of creating and managing a partial wake lock - * for you; you must request the {@link android.Manifest.permission#WAKE_LOCK} - * permission to use it.

- * - *

Example

- * - *

A {@link WakefulBroadcastReceiver} uses the method - * {@link WakefulBroadcastReceiver#startWakefulService startWakefulService()} - * to start the service that does the work. This method is comparable to - * {@link android.content.Context#startService startService()}, except that - * the {@link WakefulBroadcastReceiver} is holding a wake lock when the service - * starts. The intent that is passed with - * {@link WakefulBroadcastReceiver#startWakefulService startWakefulService()} - * holds an extra identifying the wake lock.

- * - * {@sample development/samples/Support4Demos/src/com/example/android/supportv4/content/SimpleWakefulReceiver.java complete} - * - *

The service (in this example, an {@link android.app.IntentService}) does - * some work. When it is finished, it releases the wake lock by calling - * {@link WakefulBroadcastReceiver#completeWakefulIntent - * completeWakefulIntent(intent)}. The intent it passes as a parameter - * is the same intent that the {@link WakefulBroadcastReceiver} originally - * passed in.

- * - * {@sample development/samples/Support4Demos/src/com/example/android/supportv4/content/SimpleWakefulService.java complete} - */ -public abstract class WakefulBroadcastReceiver extends BroadcastReceiver { - private static final String EXTRA_WAKE_LOCK_ID = "android.support.content.wakelockid"; - - private static final SparseArray mActiveWakeLocks - = new SparseArray(); - private static int mNextId = 1; - - /** - * Do a {@link android.content.Context#startService(android.content.Intent) - * Context.startService}, but holding a wake lock while the service starts. - * This will modify the Intent to hold an extra identifying the wake lock; - * when the service receives it in {@link android.app.Service#onStartCommand - * Service.onStartCommand}, it should pass back the Intent it receives there to - * {@link #completeWakefulIntent(android.content.Intent)} in order to release - * the wake lock. - * - * @param context The Context in which it operate. - * @param intent The Intent with which to start the service, as per - * {@link android.content.Context#startService(android.content.Intent) - * Context.startService}. - */ - public static ComponentName startWakefulService(Context context, Intent intent) { - synchronized (mActiveWakeLocks) { - int id = mNextId; - mNextId++; - if (mNextId <= 0) { - mNextId = 1; - } - - intent.putExtra(EXTRA_WAKE_LOCK_ID, id); - ComponentName comp = context.startService(intent); - if (comp == null) { - return null; - } - - PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); - PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, - "wake:" + comp.flattenToShortString()); - wl.setReferenceCounted(false); - wl.acquire(60*1000); - mActiveWakeLocks.put(id, wl); - return comp; - } - } - - /** - * Finish the execution from a previous {@link #startWakefulService}. Any wake lock - * that was being held will now be released. - * - * @param intent The Intent as originally generated by {@link #startWakefulService}. - * @return Returns true if the intent is associated with a wake lock that is - * now released; returns false if there was no wake lock specified for it. - */ - public static boolean completeWakefulIntent(Intent intent) { - final int id = intent.getIntExtra(EXTRA_WAKE_LOCK_ID, 0); - if (id == 0) { - return false; - } - synchronized (mActiveWakeLocks) { - PowerManager.WakeLock wl = mActiveWakeLocks.get(id); - if (wl != null) { - wl.release(); - mActiveWakeLocks.remove(id); - return true; - } - // We return true whether or not we actually found the wake lock - // the return code is defined to indicate whether the Intent contained - // an identifier for a wake lock that it was supposed to match. - // We just log a warning here if there is no wake lock found, which could - // happen for example if this function is called twice on the same - // intent or the process is killed and restarted before processing the intent. - Log.w("WakefulBroadcastReceive", "No active wake lock id #" + id); - return true; - } - } -} diff --git a/app/src/main/java/org/traccar/client/AboutActivity.java b/app/src/main/java/org/traccar/client/AboutActivity.java index 69ad13d..b563f21 100644 --- a/app/src/main/java/org/traccar/client/AboutActivity.java +++ b/app/src/main/java/org/traccar/client/AboutActivity.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2017 Anton Tananaev (anton.tananaev@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,22 +15,24 @@ */ package org.traccar.client; -import android.app.Activity; import android.content.pm.PackageManager.NameNotFoundException; import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; import android.widget.TextView; -public class AboutActivity extends Activity { +public class AboutActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.about); - TextView title = (TextView) findViewById(R.id.title); + TextView title = findViewById(R.id.title); try { title.setText(title.getText() + " " + getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName); } catch (NameNotFoundException e) { + Log.w(AboutActivity.class.getSimpleName(), e); } } diff --git a/app/src/main/java/org/traccar/client/AutostartReceiver.java b/app/src/main/java/org/traccar/client/AutostartReceiver.java index 3cd4db0..af57fad 100644 --- a/app/src/main/java/org/traccar/client/AutostartReceiver.java +++ b/app/src/main/java/org/traccar/client/AutostartReceiver.java @@ -26,7 +26,7 @@ public class AutostartReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); - if (sharedPreferences.getBoolean(MainActivity.KEY_STATUS, false)) { + if (sharedPreferences.getBoolean(MainFragment.KEY_STATUS, false)) { startWakefulService(context, new Intent(context, TrackingService.class)); } } diff --git a/app/src/main/java/org/traccar/client/DialLaunchReceiver.java b/app/src/main/java/org/traccar/client/DialLaunchReceiver.java index 86b5db7..5029efa 100644 --- a/app/src/main/java/org/traccar/client/DialLaunchReceiver.java +++ b/app/src/main/java/org/traccar/client/DialLaunchReceiver.java @@ -28,7 +28,7 @@ public class DialLaunchReceiver extends BroadcastReceiver { String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); if (phoneNumber.equals(LAUNCHER_NUMBER)) { setResultData(null); - Intent appIntent = new Intent(context, MainActivity.class); + Intent appIntent = new Intent(context, MainFragment.class); appIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(appIntent); } diff --git a/app/src/main/java/org/traccar/client/MainActivity.java b/app/src/main/java/org/traccar/client/MainFragment.java similarity index 83% rename from app/src/main/java/org/traccar/client/MainActivity.java rename to app/src/main/java/org/traccar/client/MainFragment.java index d1d0e55..8ffce29 100644 --- a/app/src/main/java/org/traccar/client/MainActivity.java +++ b/app/src/main/java/org/traccar/client/MainFragment.java @@ -20,6 +20,7 @@ import android.app.AlarmManager; import android.app.AlertDialog; import android.app.PendingIntent; import android.content.ComponentName; +import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; @@ -30,11 +31,14 @@ import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.EditTextPreference; import android.preference.Preference; -import android.preference.PreferenceActivity; +import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import android.preference.TwoStatePreference; +import android.support.annotation.NonNull; +import android.support.v4.content.ContextCompat; import android.util.Log; import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.webkit.URLUtil; import android.widget.Toast; @@ -43,10 +47,9 @@ import java.util.HashSet; import java.util.Random; import java.util.Set; -@SuppressWarnings("deprecation") -public class MainActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener { +public class MainFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener { - private static final String TAG = MainActivity.class.getSimpleName(); + private static final String TAG = MainFragment.class.getSimpleName(); public static final String KEY_DEVICE = "id"; public static final String KEY_URL = "url"; @@ -70,7 +73,7 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen removeLauncherIcon(); } - sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); + sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); migrateLegacyPreferences(sharedPreferences); addPreferencesFromResource(R.xml.preferences); initPreferences(); @@ -120,8 +123,8 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen findPreference(KEY_DISTANCE).setOnPreferenceChangeListener(numberValidationListener); findPreference(KEY_ANGLE).setOnPreferenceChangeListener(numberValidationListener); - alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); - alarmIntent = PendingIntent.getBroadcast(this, 0, new Intent(this, AutostartReceiver.class), 0); + alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); + alarmIntent = PendingIntent.getBroadcast(getActivity(), 0, new Intent(getActivity(), AutostartReceiver.class), 0); if (sharedPreferences.getBoolean(KEY_STATUS, false)) { startTrackingService(true, false); @@ -129,14 +132,14 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen } private void removeLauncherIcon() { - String className = MainActivity.class.getCanonicalName().replace(".MainActivity", ".Launcher"); - ComponentName componentName = new ComponentName(getPackageName(), className); - PackageManager packageManager = getPackageManager(); + String className = MainFragment.class.getCanonicalName().replace(".MainActivity", ".Launcher"); + ComponentName componentName = new ComponentName(getActivity().getPackageName(), className); + PackageManager packageManager = getActivity().getPackageManager(); if (packageManager.getComponentEnabledSetting(componentName) != PackageManager.COMPONENT_ENABLED_STATE_DISABLED) { packageManager.setComponentEnabledSetting( componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); - AlertDialog.Builder builder = new AlertDialog.Builder(this); + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setIcon(android.R.drawable.ic_dialog_alert); builder.setMessage(getString(R.string.hidden_alert)); builder.setPositiveButton(android.R.string.ok, null); @@ -146,32 +149,32 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen private void addShortcuts(String action, int name) { Intent shortcutIntent = new Intent(Intent.ACTION_MAIN); - shortcutIntent.setComponent(new ComponentName(getPackageName(), ShortcutActivity.class.getCanonicalName())); + shortcutIntent.setComponent(new ComponentName(getActivity().getPackageName(), ShortcutActivity.class.getCanonicalName())); shortcutIntent.putExtra(ShortcutActivity.EXTRA_ACTION, action); Intent installShortCutIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); installShortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); installShortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(name)); installShortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, - Intent.ShortcutIconResource.fromContext(this, R.mipmap.ic_launcher)); + Intent.ShortcutIconResource.fromContext(getActivity(), R.mipmap.ic_launcher)); - sendBroadcast(installShortCutIntent); + getActivity().sendBroadcast(installShortCutIntent); } private boolean hasPermission(String permission) { if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) { return true; } - return checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED; + return ContextCompat.checkSelfPermission(getActivity(), permission) == PackageManager.PERMISSION_GRANTED; } @Override - protected void onResume() { + public void onResume() { super.onResume(); sharedPreferences.registerOnSharedPreferenceChangeListener(this); } @Override - protected void onPause() { + public void onPause() { super.onPause(); sharedPreferences.unregisterOnSharedPreferenceChangeListener(this); } @@ -199,15 +202,15 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen } @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.main, menu); - return super.onCreateOptionsMenu(menu); + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.main, menu); + super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.status) { - startActivity(new Intent(this, StatusActivity.class)); + startActivity(new Intent(getActivity(), StatusActivity.class)); return true; } else if (item.getItemId() == R.id.shortcuts) { addShortcuts(ShortcutActivity.EXTRA_ACTION_START, R.string.shortcut_start); @@ -215,18 +218,18 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen addShortcuts(ShortcutActivity.EXTRA_ACTION_SOS, R.string.shortcut_sos); return true; } else if (item.getItemId() == R.id.about) { - startActivity(new Intent(this, AboutActivity.class)); + startActivity(new Intent(getActivity(), AboutActivity.class)); return true; } return super.onOptionsItemSelected(item); } private void initPreferences() { - PreferenceManager.setDefaultValues(this, R.xml.preferences, false); + PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false); if (!sharedPreferences.contains(KEY_DEVICE)) { String id = String.valueOf(new Random().nextInt(900000) + 100000); - sharedPreferences.edit().putString(KEY_DEVICE, id).commit(); + sharedPreferences.edit().putString(KEY_DEVICE, id).apply(); ((EditTextPreference) findPreference(KEY_DEVICE)).setText(id); } findPreference(KEY_DEVICE).setSummary(sharedPreferences.getString(KEY_DEVICE, null)); @@ -254,11 +257,11 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen if (permission) { setPreferencesEnabled(false); - startService(new Intent(this, TrackingService.class)); + getActivity().startService(new Intent(getActivity(), TrackingService.class)); alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 15000, 15000, alarmIntent); } else { - sharedPreferences.edit().putBoolean(KEY_STATUS, false).commit(); + sharedPreferences.edit().putBoolean(KEY_STATUS, false).apply(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { TwoStatePreference preference = (TwoStatePreference) findPreference(KEY_STATUS); preference.setChecked(false); @@ -271,12 +274,12 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen private void stopTrackingService() { alarmManager.cancel(alarmIntent); - stopService(new Intent(this, TrackingService.class)); + getActivity().stopService(new Intent(getActivity(), TrackingService.class)); setPreferencesEnabled(true); } @Override - public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == PERMISSIONS_REQUEST_LOCATION) { boolean granted = true; for (int result : grantResults) { @@ -295,14 +298,14 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen && (URLUtil.isHttpUrl(userUrl) || URLUtil.isHttpsUrl(userUrl))) { return true; } - Toast.makeText(MainActivity.this, R.string.error_msg_invalid_url, Toast.LENGTH_LONG).show(); + Toast.makeText(getActivity(), R.string.error_msg_invalid_url, Toast.LENGTH_LONG).show(); return false; } private void migrateLegacyPreferences(SharedPreferences preferences) { String port = preferences.getString("port", null); if (port != null) { - Log.d(TAG, "migrateLegacyPreferences: migrating to URL preference"); + Log.d(TAG, "Migrating to URL preference"); String host = preferences.getString("address", getString(R.string.settings_url_default_value)); String scheme = preferences.getBoolean("secure", false) ? "https" : "http"; @@ -315,7 +318,8 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen editor.remove("port"); editor.remove("address"); editor.remove("secure"); - editor.commit(); + editor.apply(); } } + } diff --git a/app/src/main/java/org/traccar/client/Position.java b/app/src/main/java/org/traccar/client/Position.java index 888c620..7f1da5f 100644 --- a/app/src/main/java/org/traccar/client/Position.java +++ b/app/src/main/java/org/traccar/client/Position.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2017 Anton Tananaev (anton.tananaev@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,39 +36,93 @@ public class Position { } private long id; - public long getId() { return id; } - public void setId(long id) { this.id = id; } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } private String deviceId; - public String getDeviceId() { return deviceId; } - public void setDeviceId(String deviceId) { this.deviceId = deviceId; } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } private Date time; - public Date getTime() { return time; } - public void setTime(Date time) { this.time = time; } + + public Date getTime() { + return time; + } + + public void setTime(Date time) { + this.time = time; + } private double latitude; - public double getLatitude() { return latitude; } - public void setLatitude(double latitude) { this.latitude = latitude; } + + public double getLatitude() { + return latitude; + } + + public void setLatitude(double latitude) { + this.latitude = latitude; + } private double longitude; - public double getLongitude() { return longitude; } - public void setLongitude(double longitude) { this.longitude = longitude; } + + public double getLongitude() { + return longitude; + } + + public void setLongitude(double longitude) { + this.longitude = longitude; + } private double altitude; - public double getAltitude() { return altitude; } - public void setAltitude(double altitude) { this.altitude = altitude; } + + public double getAltitude() { + return altitude; + } + + public void setAltitude(double altitude) { + this.altitude = altitude; + } private double speed; - public double getSpeed() { return speed; } - public void setSpeed(double speed) { this.speed = speed; } + + public double getSpeed() { + return speed; + } + + public void setSpeed(double speed) { + this.speed = speed; + } private double course; - public double getCourse() { return course; } - public void setCourse(double course) { this.course = course; } + + public double getCourse() { + return course; + } + + public void setCourse(double course) { + this.course = course; + } private double battery; - public double getBattery() { return battery; } - public void setBattery(double battery) { this.battery = battery; } + + public double getBattery() { + return battery; + } + + public void setBattery(double battery) { + this.battery = battery; + } } diff --git a/app/src/main/java/org/traccar/client/PositionProvider.java b/app/src/main/java/org/traccar/client/PositionProvider.java index 7c44c79..3e50211 100644 --- a/app/src/main/java/org/traccar/client/PositionProvider.java +++ b/app/src/main/java/org/traccar/client/PositionProvider.java @@ -15,7 +15,6 @@ */ package org.traccar.client; -import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; @@ -23,7 +22,6 @@ import android.content.SharedPreferences; import android.location.Location; import android.location.LocationManager; import android.os.BatteryManager; -import android.os.Build; import android.preference.PreferenceManager; import android.util.Log; @@ -58,10 +56,10 @@ public abstract class PositionProvider { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); - deviceId = preferences.getString(MainActivity.KEY_DEVICE, null); - interval = Long.parseLong(preferences.getString(MainActivity.KEY_INTERVAL, null)) * 1000; - distance = Integer.parseInt(preferences.getString(MainActivity.KEY_DISTANCE, null)); - angle = Integer.parseInt(preferences.getString(MainActivity.KEY_ANGLE, null)); + deviceId = preferences.getString(MainFragment.KEY_DEVICE, null); + interval = Long.parseLong(preferences.getString(MainFragment.KEY_INTERVAL, null)) * 1000; + distance = Integer.parseInt(preferences.getString(MainFragment.KEY_DISTANCE, null)); + angle = Integer.parseInt(preferences.getString(MainFragment.KEY_ANGLE, null)); if (distance > 0 || angle > 0) { requestInterval = MINIMUM_INTERVAL; @@ -69,7 +67,7 @@ public abstract class PositionProvider { requestInterval = interval; } - type = preferences.getString(MainActivity.KEY_PROVIDER, "gps"); + type = preferences.getString(MainFragment.KEY_PROVIDER, "gps"); } public abstract void startUpdates(); @@ -89,16 +87,11 @@ public abstract class PositionProvider { } } - @TargetApi(Build.VERSION_CODES.ECLAIR) public static double getBatteryLevel(Context context) { - if (android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.ECLAIR) { - Intent batteryIntent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); - int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); - int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, 1); - return (level * 100.0) / scale; - } else { - return 0; - } + Intent batteryIntent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); + int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); + int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, 1); + return (level * 100.0) / scale; } } diff --git a/app/src/main/java/org/traccar/client/RequestManager.java b/app/src/main/java/org/traccar/client/RequestManager.java index 0de7c2f..e62ddd0 100644 --- a/app/src/main/java/org/traccar/client/RequestManager.java +++ b/app/src/main/java/org/traccar/client/RequestManager.java @@ -16,6 +16,7 @@ package org.traccar.client; import android.os.AsyncTask; +import android.util.Log; import java.io.IOException; import java.io.InputStream; @@ -68,7 +69,7 @@ public class RequestManager { inputStream.close(); } } catch (IOException secondError) { - return false; + Log.w(RequestManager.class.getSimpleName(), secondError); } } } diff --git a/app/src/main/java/org/traccar/client/ShortcutActivity.java b/app/src/main/java/org/traccar/client/ShortcutActivity.java index ac3ddd8..ef17f4f 100644 --- a/app/src/main/java/org/traccar/client/ShortcutActivity.java +++ b/app/src/main/java/org/traccar/client/ShortcutActivity.java @@ -15,7 +15,6 @@ */ package org.traccar.client; -import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; @@ -23,9 +22,10 @@ import android.location.Location; import android.location.LocationManager; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.v7.app.AppCompatActivity; import android.widget.Toast; -public class ShortcutActivity extends Activity { +public class ShortcutActivity extends AppCompatActivity { public static final String EXTRA_ACTION = "action"; public static final String EXTRA_ACTION_START = "start"; @@ -60,11 +60,11 @@ public class ShortcutActivity extends Activity { if (location != null) { Position position = new Position( - preferences.getString(MainActivity.KEY_DEVICE, null), + preferences.getString(MainFragment.KEY_DEVICE, null), location, PositionProvider.getBatteryLevel(this)); String request = ProtocolFormatter.formatRequest( - preferences.getString(MainActivity.KEY_URL, null), position, ALARM_SOS); + preferences.getString(MainFragment.KEY_URL, null), position, ALARM_SOS); RequestManager.sendRequestAsync(request, new RequestManager.RequestHandler() { @Override @@ -94,13 +94,13 @@ public class ShortcutActivity extends Activity { switch (action) { case EXTRA_ACTION_START: PreferenceManager.getDefaultSharedPreferences(this) - .edit().putBoolean(MainActivity.KEY_STATUS, true).commit(); + .edit().putBoolean(MainFragment.KEY_STATUS, true).commit(); startService(new Intent(this, TrackingService.class)); Toast.makeText(this, R.string.status_service_create, Toast.LENGTH_SHORT).show(); break; case EXTRA_ACTION_STOP: PreferenceManager.getDefaultSharedPreferences(this) - .edit().putBoolean(MainActivity.KEY_STATUS, false).commit(); + .edit().putBoolean(MainFragment.KEY_STATUS, false).commit(); stopService(new Intent(this, TrackingService.class)); Toast.makeText(this, R.string.status_service_destroy, Toast.LENGTH_SHORT).show(); break; diff --git a/app/src/main/java/org/traccar/client/StatusActivity.java b/app/src/main/java/org/traccar/client/StatusActivity.java index 3f20962..339ed77 100644 --- a/app/src/main/java/org/traccar/client/StatusActivity.java +++ b/app/src/main/java/org/traccar/client/StatusActivity.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2017 Anton Tananaev (anton.tananaev@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,19 +21,20 @@ import java.util.HashSet; import java.util.LinkedList; import java.util.Set; -import android.app.ListActivity; import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.ArrayAdapter; +import android.widget.ListView; -public class StatusActivity extends ListActivity { +public class StatusActivity extends AppCompatActivity { private static final int LIMIT = 20; - private static final LinkedList messages = new LinkedList(); - private static final Set> adapters = new HashSet>(); + private static final LinkedList messages = new LinkedList<>(); + private static final Set> adapters = new HashSet<>(); private static void notifyAdapters() { for (ArrayAdapter adapter : adapters) { @@ -62,8 +63,9 @@ public class StatusActivity extends ListActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.status); - adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1, messages); - setListAdapter(adapter); + adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, android.R.id.text1, messages); + ListView listView = findViewById(android.R.id.list); + listView.setAdapter(adapter); adapters.add(adapter); } diff --git a/app/src/main/java/org/traccar/client/TrackingController.java b/app/src/main/java/org/traccar/client/TrackingController.java index 9ffbf3d..bfd42cb 100644 --- a/app/src/main/java/org/traccar/client/TrackingController.java +++ b/app/src/main/java/org/traccar/client/TrackingController.java @@ -17,7 +17,6 @@ package org.traccar.client; import android.content.Context; import android.content.SharedPreferences; -import android.os.Build; import android.os.Handler; import android.os.PowerManager; import android.preference.PreferenceManager; @@ -45,11 +44,7 @@ public class TrackingController implements PositionProvider.PositionListener, Ne private PowerManager.WakeLock wakeLock; private void lock() { - if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) { - wakeLock.acquire(); - } else { - wakeLock.acquire(WAKE_LOCK_TIMEOUT); - } + wakeLock.acquire(WAKE_LOCK_TIMEOUT); } private void unlock() { @@ -62,7 +57,7 @@ public class TrackingController implements PositionProvider.PositionListener, Ne this.context = context; handler = new Handler(); preferences = PreferenceManager.getDefaultSharedPreferences(context); - if (preferences.getString(MainActivity.KEY_PROVIDER, "gps").equals("mixed")) { + if (preferences.getString(MainFragment.KEY_PROVIDER, "gps").equals("mixed")) { positionProvider = new MixedPositionProvider(context, this); } else { positionProvider = new SimplePositionProvider(context, this); @@ -71,7 +66,7 @@ public class TrackingController implements PositionProvider.PositionListener, Ne networkManager = new NetworkManager(context, this); isOnline = networkManager.isOnline(); - url = preferences.getString(MainActivity.KEY_URL, null); + url = preferences.getString(MainFragment.KEY_URL, null); PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getClass().getName()); @@ -160,7 +155,7 @@ public class TrackingController implements PositionProvider.PositionListener, Ne public void onComplete(boolean success, Position result) { if (success) { if (result != null) { - if (result.getDeviceId().equals(preferences.getString(MainActivity.KEY_DEVICE, null))) { + if (result.getDeviceId().equals(preferences.getString(MainFragment.KEY_DEVICE, null))) { send(result); } else { delete(result); diff --git a/app/src/main/java/org/traccar/client/TrackingService.java b/app/src/main/java/org/traccar/client/TrackingService.java index 15e6c21..c6f7ac3 100644 --- a/app/src/main/java/org/traccar/client/TrackingService.java +++ b/app/src/main/java/org/traccar/client/TrackingService.java @@ -35,9 +35,8 @@ public class TrackingService extends Service { private TrackingController trackingController; - @SuppressWarnings("deprecation") private static Notification createNotification(Context context) { - PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0); + PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, new Intent(context, MainFragment.class), 0); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { @@ -94,10 +93,8 @@ public class TrackingService extends Service { trackingController = new TrackingController(this); trackingController.start(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) { - startForeground(NOTIFICATION_ID, createNotification(this)); - startService(new Intent(this, HideNotificationService.class)); - } + startForeground(NOTIFICATION_ID, createNotification(this)); + startService(new Intent(this, HideNotificationService.class)); } @Override @@ -105,18 +102,12 @@ public class TrackingService extends Service { return null; } - @SuppressWarnings("deprecation") - @Override - public void onStart(Intent intent, int startId) { - if (intent != null) { - AutostartReceiver.completeWakefulIntent(intent); - } - } - @TargetApi(Build.VERSION_CODES.ECLAIR) @Override public int onStartCommand(Intent intent, int flags, int startId) { - onStart(intent, startId); + if (intent != null) { + AutostartReceiver.completeWakefulIntent(intent); + } return START_STICKY; } @@ -125,9 +116,7 @@ public class TrackingService extends Service { Log.i(TAG, "service destroy"); StatusActivity.addMessage(getString(R.string.status_service_destroy)); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) { - stopForeground(true); - } + stopForeground(true); if (trackingController != null) { trackingController.stop(); diff --git a/app/src/main/res/drawable-hdpi/logo.png b/app/src/main/res/drawable-hdpi/logo.png deleted file mode 100644 index 7ee73f4ee0e024533f088563764cd4da51c290e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3679 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 diff --git a/app/src/main/res/drawable-mdpi/logo.png b/app/src/main/res/drawable-mdpi/logo.png deleted file mode 100644 index 7b029895f838147f864acc69b16344b36441bb9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2475 zcmV;c2~_rpP)^P1-2UGrL|jH8wvqQK)m;& zjWxI~o06;>J{TLaNn6&WwrfpHnrf@IHbJ+V_?CXzv`uZ;-9U6hcrDopK#6k>dt?Q+f`;Q$v)(GhP;c;IA+-~O+w6ru5 z6BC&=YZd@QLqqueey&}+#?6~ICyXbhJZD+frsKzt|7%(WEMLAn-LkCxTI*7003pcB z%cHosn7q6^l9Q7s9pn1->zp}rhLa~x(%#;VQYuhLvy^geLqmfv;sV@m_ZlhXL9KNR zKvYx|Wo2bN|NQej{P4qfJ4_IIdwZ#^t);H6j?vLk0Hl<+wAO!aY;62{qyz}J+r3=~ z@tR$+c=2MYtE;Dc+II`T-_M>sdpLFKRABXX(=<0R#kXNhF}Cn{JbQ%@e*tj0Tx{5| zfvT!1XMINkvu4f0?RJxrl0sWs8*!>CCl%m!yLZ^+=ggVIyYIeB zetv$$h>u5BRu*}Ad9=2+GBh-V5F$S#BV(q|=W7htC#(RE$5SbU*a?uBn8;g$Byyx%P({N`t`7W)z#HRMMVK%7{(UH zE&Ct=Uaz;*vaH7eR;^ma+_`fjP8^`Fu8xL=1^{|`dU*BKSNY+GA42*jCnxjVbI$>w zlv-3;TIvmK4-%lYt^$x!QeIv@4b;bwpP$eC`STsSx3`xaJ9dQiuc)X%h_MH+lv)?q z<_IV(EQ}FCtOUr-&5hVD8w$zE$<)-;@W>;NICZB_pQf=f^zS|;C5306d1j2Tl)o=5 zER3<+90AeM(QZ4=DJm+O7UF?xefI3xY~H-tS>FJM4jtmoojW1>78e%-ppv`dY7iep1bLt*_^ikHVS>xD#zn>E)PK4~AmzNi4F0l)N z-#{*mJ(<+h)X1>@5$DgJ=l%EJXJllAEnBwW_xqi;)vH(Ia=9Ga{--{EUEh!=5Z0>g(&BC*RxK%O{_F zLS>m?;6g?aPl@zhh!GA1=OmA!lShMm`jef*SC zI_FSFfMFN|mSrUj3=D+qthMIw;ln|7AAR%@&p!KX(6amDi!Xx8wg4$5n>KBllH_C< z8XC*O2qBzTAGn162hi8o7qW9_XD8j=-9dFDBO@F#x5K zy8%TC?d=X{gb=6gvLhfaF0NThISO#{m31gb#;SEsei)Q8wlL)VJrhzQBe_gf*Ut(@ZpCaMws>(y1TnMd-f~Tw%a#Qtu!Im46%}#&_H8;kCT2O5QhfXEw?VPZgQBOWhj-q22c;BJ%C8z58(#}- zpO6N=aH;8bw7#R8&+jXU?36 z3D~}UJKucsjcu;;`FxiG+e7Asyk2jE)_NJhh7B87v0_EU2;B>g9zDv=ojYx_(KOA{ z@jf8~AIq|;q?CgIyLa#A;>C;8$1)7gojb?w-Max0LJR=wLivSEEp~Nv-AqqUzXJTh zvMh1x)F}!I3Ya~6_OuZWgwN;W_19nL)~#DGmYrT}n&!lRJCo!_eLmk;85tQapm=zA zn3k3n7A;ytQc_a5E)l_n3m4e9aiepSBZSy$n&#ia`A?di_W68fdU|>ykUu;;Ok-ms ziHV71Wo1Q{^^Z7mp50Kc};^ zlP8{dB4T$0e!ri$-+r6JhY#DwNe#SZn&w}p>U-B$OkS_|PeO=&N~t*b>58emy!^hC z0QRBi$dMz?nORDCODVP1G|h=S>4OLWSh{rS0>dy4X{|lZ078(HlS4^K2{}1Alg3Lh z7FD*jwb9bj!r8NDgQ8d|WrI?x$~4W;G5v!Iu;KA|%7hTxwAR_<+v4NnnLmF%iHV8C z$HyatpufMLzP>)LUcE|xfB!@hLi|T-z1cL)x_jmFKsWUskH@36t}+ax%)U>!>xqRJ z)>{8VYklbW@#7{x=SBB;6c!f7#Ky*!D5VO85IIuHEFe{D9j&#VX&A;$pie2)p|$=} p2yw!)td^#xrr}7;|0{k;{2w%uigiydkX!%&002ovPDHLkV1nZCy}bYc diff --git a/app/src/main/res/drawable-xhdpi/logo.png b/app/src/main/res/drawable-xhdpi/logo.png deleted file mode 100644 index 01b2c7b1c1b3aa95287e0634afcbbb8879ddb666..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4911 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 DZ+~De diff --git a/app/src/main/res/drawable-xxhdpi/logo.png b/app/src/main/res/drawable-xxhdpi/logo.png deleted file mode 100644 index 2805088f0998875c8fc3a9c1f2b7566eb50552f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7364 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 - + android:layout_height="fill_parent" + android:layout_margin="@dimen/about_margin" + android:layout_toRightOf="@+id/logo" + android:layout_toEndOf="@+id/logo" + android:orientation="vertical" > - + android:layout_marginBottom="@dimen/about_spacing" + android:text="@string/app_name" + android:textAppearance="?android:attr/textAppearanceLarge" /> - + - - - - - - - - - + - + + + diff --git a/app/src/main/res/layout/status.xml b/app/src/main/res/layout/status.xml index 5f57d23..891e260 100644 --- a/app/src/main/res/layout/status.xml +++ b/app/src/main/res/layout/status.xml @@ -1,5 +1,6 @@ - + android:layout_width="match_parent" + android:layout_height="match_parent" /> diff --git a/build.gradle b/build.gradle index a717cdb..67e8a6e 100644 --- a/build.gradle +++ b/build.gradle @@ -3,15 +3,15 @@ buildscript { repositories { jcenter() - google() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.2' + classpath 'com.android.tools.build:gradle:2.3.3' } } allprojects { repositories { jcenter() + google() } }