diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c283f9f..bb17cdb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -34,6 +34,7 @@
+
diff --git a/app/src/main/java/org/traccar/client/MainFragment.java b/app/src/main/java/org/traccar/client/MainFragment.java
index 317b649..d3eb0c4 100644
--- a/app/src/main/java/org/traccar/client/MainFragment.java
+++ b/app/src/main/java/org/traccar/client/MainFragment.java
@@ -151,19 +151,6 @@ public class MainFragment extends PreferenceFragment implements OnSharedPreferen
}
}
- private void addShortcuts(String action, int name) {
- Intent shortcutIntent = new Intent(Intent.ACTION_MAIN);
- 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(getActivity(), R.mipmap.ic_launcher));
-
- getActivity().sendBroadcast(installShortCutIntent);
- }
-
private boolean hasPermission(String permission) {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
return true;
@@ -216,11 +203,6 @@ public class MainFragment extends PreferenceFragment implements OnSharedPreferen
if (item.getItemId() == R.id.status) {
startActivity(new Intent(getActivity(), StatusActivity.class));
return true;
- } else if (item.getItemId() == R.id.shortcuts) {
- addShortcuts(ShortcutActivity.EXTRA_ACTION_START, R.string.shortcut_start);
- addShortcuts(ShortcutActivity.EXTRA_ACTION_STOP, R.string.shortcut_stop);
- addShortcuts(ShortcutActivity.EXTRA_ACTION_SOS, R.string.shortcut_sos);
- return true;
} else if (item.getItemId() == R.id.about) {
startActivity(new Intent(getActivity(), AboutActivity.class));
return true;
diff --git a/app/src/main/java/org/traccar/client/ShortcutActivity.java b/app/src/main/java/org/traccar/client/ShortcutActivity.java
index ec4fcf8..1f84c6a 100644
--- a/app/src/main/java/org/traccar/client/ShortcutActivity.java
+++ b/app/src/main/java/org/traccar/client/ShortcutActivity.java
@@ -22,29 +22,81 @@ import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import android.support.annotation.DrawableRes;
import android.support.v4.content.ContextCompat;
+import android.support.v4.content.pm.ShortcutInfoCompat;
+import android.support.v4.content.pm.ShortcutManagerCompat;
+import android.support.v4.graphics.drawable.IconCompat;
import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
import android.widget.Toast;
public class ShortcutActivity extends AppCompatActivity {
public static final String EXTRA_ACTION = "action";
- public static final String EXTRA_ACTION_START = "start";
- public static final String EXTRA_ACTION_STOP = "stop";
- public static final String EXTRA_ACTION_SOS = "sos";
+ public static final String ACTION_START = "start";
+ public static final String ACTION_STOP = "stop";
+ public static final String ACTION_SOS = "sos";
private static final String ALARM_SOS = "sos";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- checkShortcutAction(getIntent());
+ if (!executeAction(getIntent())) {
+ setContentView(R.layout.list);
+
+ final String[] items = new String[] {
+ getString(R.string.shortcut_start),
+ getString(R.string.shortcut_stop),
+ getString(R.string.shortcut_sos)
+ };
+
+ ListView listView = findViewById(android.R.id.list);
+
+ listView.setAdapter(new ArrayAdapter<>(
+ this, android.R.layout.simple_list_item_1, items));
+
+ listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ switch (position) {
+ case 0:
+ setShortcutResult(items[position], R.mipmap.ic_launcher, ACTION_START);
+ break;
+ case 1:
+ setShortcutResult(items[position], R.mipmap.ic_launcher, ACTION_STOP);
+ break;
+ case 2:
+ setShortcutResult(items[position], R.mipmap.ic_launcher, ACTION_SOS);
+ break;
+ }
+ finish();
+ }
+ });
+ }
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
- checkShortcutAction(intent);
+ executeAction(intent);
+ }
+
+ private void setShortcutResult(String label, @DrawableRes int iconResId, String action) {
+ Intent intent = new Intent(Intent.ACTION_MAIN, null, this, ShortcutActivity.class);
+ intent.putExtra(EXTRA_ACTION, action);
+
+ ShortcutInfoCompat shortcut = new ShortcutInfoCompat.Builder(this, action)
+ .setShortLabel(label)
+ .setIcon(IconCompat.createWithResource(this, iconResId))
+ .setIntent(intent)
+ .build();
+
+ setResult(RESULT_OK, ShortcutManagerCompat.createShortcutResultIntent(this, shortcut));
}
@SuppressWarnings("MissingPermission")
@@ -83,34 +135,35 @@ public class ShortcutActivity extends AppCompatActivity {
}
}
- private void checkShortcutAction(Intent intent) {
+ private boolean executeAction(Intent intent) {
String action;
if (intent.hasExtra("shortcutAction")) {
action = intent.getBooleanExtra("shortcutAction", false)
- ? EXTRA_ACTION_START : EXTRA_ACTION_STOP;
+ ? ACTION_START : ACTION_STOP;
} else {
action = intent.getStringExtra(EXTRA_ACTION);
}
if (action != null) {
switch (action) {
- case EXTRA_ACTION_START:
+ case ACTION_START:
PreferenceManager.getDefaultSharedPreferences(this)
.edit().putBoolean(MainFragment.KEY_STATUS, true).apply();
ContextCompat.startForegroundService(this, new Intent(this, TrackingService.class));
Toast.makeText(this, R.string.status_service_create, Toast.LENGTH_SHORT).show();
break;
- case EXTRA_ACTION_STOP:
+ case ACTION_STOP:
PreferenceManager.getDefaultSharedPreferences(this)
.edit().putBoolean(MainFragment.KEY_STATUS, false).apply();
stopService(new Intent(this, TrackingService.class));
Toast.makeText(this, R.string.status_service_destroy, Toast.LENGTH_SHORT).show();
break;
- case EXTRA_ACTION_SOS:
+ case ACTION_SOS:
sendAlarm();
break;
}
+ finish();
}
- finish();
+ return action != null;
}
}
diff --git a/app/src/main/java/org/traccar/client/StatusActivity.java b/app/src/main/java/org/traccar/client/StatusActivity.java
index 339ed77..5439054 100644
--- a/app/src/main/java/org/traccar/client/StatusActivity.java
+++ b/app/src/main/java/org/traccar/client/StatusActivity.java
@@ -62,7 +62,7 @@ public class StatusActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.status);
+ setContentView(R.layout.list);
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);
diff --git a/app/src/main/res/layout/status.xml b/app/src/main/res/layout/list.xml
similarity index 100%
rename from app/src/main/res/layout/status.xml
rename to app/src/main/res/layout/list.xml
diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml
index 87fa94e..01b4b67 100644
--- a/app/src/main/res/menu/main.xml
+++ b/app/src/main/res/menu/main.xml
@@ -6,12 +6,7 @@
-
-
+ app:showAsAction="ifRoom" />