1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
package cgeo.geocaching;
import cgeo.geocaching.activity.AbstractActionBarActivity;
import cgeo.geocaching.list.PseudoList;
import cgeo.geocaching.list.StoredList;
import cgeo.geocaching.maps.MapActivity;
import cgeo.geocaching.ui.dialog.Dialogs;
import cgeo.geocaching.ui.dialog.Dialogs.ItemWithIcon;
import cgeo.geocaching.utils.ImageUtils;
import rx.functions.Action1;
import android.content.Intent;
import android.content.Intent.ShortcutIconResource;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
public class CreateShortcutActivity extends AbstractActionBarActivity {
private static class Shortcut implements ItemWithIcon {
private final int titleResourceId;
private final int drawableResourceId;
private final Intent intent;
/**
* shortcut with a separate icon
*/
public Shortcut(final int titleResourceId, final int drawableResourceId, final Intent intent) {
this.titleResourceId = titleResourceId;
this.drawableResourceId = drawableResourceId;
this.intent = intent;
}
@Override
public int getIcon() {
return drawableResourceId;
}
@Override
public String toString() {
return CgeoApplication.getInstance().getString(titleResourceId);
}
}
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// init
setTheme();
promptForShortcut();
}
private void promptForShortcut() {
final List<Shortcut> shortcuts = new ArrayList<>();
shortcuts.add(new Shortcut(R.string.live_map_button, R.drawable.main_live, new Intent(this, MapActivity.class)));
shortcuts.add(new Shortcut(R.string.caches_nearby_button, R.drawable.main_nearby, CacheListActivity.getNearestIntent(this)));
// TODO: make logging activities ask for cache/trackable when being invoked externally
// shortcuts.add(new Shortcut(R.string.cache_menu_visit, new Intent(this, LogCacheActivity.class)));
// shortcuts.add(new Shortcut(R.string.trackable_log_touch, new Intent(this, LogTrackableActivity.class)));
final Shortcut offlineShortcut = new Shortcut(R.string.list_title, R.drawable.main_stored, null);
shortcuts.add(offlineShortcut);
final Intent allIntent = new Intent(this, CacheListActivity.class);
allIntent.putExtra(Intents.EXTRA_LIST_ID, PseudoList.ALL_LIST.id);
shortcuts.add(new Shortcut(R.string.list_all_lists, R.drawable.main_stored, allIntent));
shortcuts.add(new Shortcut(R.string.advanced_search_button, R.drawable.main_search, new Intent(this, SearchActivity.class)));
shortcuts.add(new Shortcut(R.string.any_button, R.drawable.main_any, new Intent(this, NavigateAnyPointActivity.class)));
shortcuts.add(new Shortcut(R.string.menu_history, R.drawable.main_stored, CacheListActivity.getHistoryIntent(this)));
Dialogs.select(this, getString(R.string.create_shortcut), shortcuts, new Action1<Shortcut>() {
@Override
public void call(final Shortcut shortcut) {
if (shortcut == offlineShortcut) {
promptForListShortcut();
}
else {
createShortcutAndFinish(shortcut.toString(), shortcut.intent, shortcut.drawableResourceId);
}
}
});
}
protected void promptForListShortcut() {
new StoredList.UserInterface(this).promptForListSelection(R.string.create_shortcut, new Action1<Integer>() {
@Override
public void call(final Integer listId) {
createOfflineListShortcut(listId);
}
}, true, PseudoList.NEW_LIST.id);
}
protected void createOfflineListShortcut(final int listId) {
final StoredList list = DataStore.getList(listId);
// target to be executed by the shortcut
final Intent targetIntent = new Intent(this, CacheListActivity.class);
targetIntent.putExtra(Intents.EXTRA_LIST_ID, list.id);
// shortcut to be returned
createShortcutAndFinish(list.title, targetIntent, R.drawable.main_stored);
}
private void createShortcutAndFinish(final String title, final Intent targetIntent, final int iconResourceId) {
final Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, targetIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);
if (iconResourceId == R.drawable.cgeo) {
final ShortcutIconResource iconResource = Intent.ShortcutIconResource.fromContext(this, iconResourceId);
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
}
else {
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, createOverlay(iconResourceId));
}
setResult(RESULT_OK, intent);
// finish activity to return the shortcut
finish();
}
private Bitmap createOverlay(final int drawableResourceId) {
final LayerDrawable layerDrawable = new LayerDrawable(new Drawable[] {
res.getDrawable(drawableResourceId), res.getDrawable(R.drawable.cgeo) });
layerDrawable.setLayerInset(0, 0, 0, 10, 10);
layerDrawable.setLayerInset(1, 50, 50, 0, 0);
return ImageUtils.convertToBitmap(layerDrawable);
}
}
|