summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntoine Cellerier <dionoea@videolan.org>2011-03-09 18:04:05 +0000
committerAntoine Cellerier <dionoea@videolan.org>2011-03-09 18:04:05 +0000
commit64cf0dd765dc11058a02024032784a9f2eb494b5 (patch)
tree436e067a43af43a1444763b9fde915213a6051e6
parentc9190dc188edb3dbea89e7ef1be7bc0dd33eba19 (diff)
downloadrockbox-64cf0dd765dc11058a02024032784a9f2eb494b5.tar.gz
rockbox-64cf0dd765dc11058a02024032784a9f2eb494b5.zip
Looks like Android 2.3 is more strict when enforcing permissions. Explicitly declare allowed intents under the Service tag in AndroidManifest.xml.
Remove useless rockbox intent class. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29552 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--android/AndroidManifest.xml7
-rw-r--r--android/src/org/rockbox/widgets/RockboxWidgetProvider.java44
2 files changed, 25 insertions, 26 deletions
diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index d8264da142..faf404fb14 100644
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -19,7 +19,12 @@
19 </intent-filter> 19 </intent-filter>
20 </activity> 20 </activity>
21 21
22 <service android:name=".RockboxService"/> 22 <service android:name=".RockboxService">
23 <intent-filter>
24 <action android:name="android.intent.action.MAIN" />
25 <action android:name="android.intent.action.MEDIA_BUTTON" />
26 </intent-filter>
27 </service>
23 28
24 <receiver android:name=".Helper.MediaButtonReceiver$MediaReceiver" 29 <receiver android:name=".Helper.MediaButtonReceiver$MediaReceiver"
25 android:enabled="true" 30 android:enabled="true"
diff --git a/android/src/org/rockbox/widgets/RockboxWidgetProvider.java b/android/src/org/rockbox/widgets/RockboxWidgetProvider.java
index c6f3baf76c..4a012c7124 100644
--- a/android/src/org/rockbox/widgets/RockboxWidgetProvider.java
+++ b/android/src/org/rockbox/widgets/RockboxWidgetProvider.java
@@ -117,8 +117,8 @@ public class RockboxWidgetProvider extends AppWidgetProvider
117 if (state.enablePrev) 117 if (state.enablePrev)
118 { 118 {
119 views.setOnClickPendingIntent(R.id.prev, 119 views.setOnClickPendingIntent(R.id.prev,
120 RockboxMediaIntent.newPendingIntent(context, 120 newPendingIntent(context,
121 KeyEvent.KEYCODE_MEDIA_PREVIOUS)); 121 KeyEvent.KEYCODE_MEDIA_PREVIOUS));
122 } 122 }
123 else 123 else
124 views.setViewVisibility(R.id.prev, View.GONE); 124 views.setViewVisibility(R.id.prev, View.GONE);
@@ -127,8 +127,8 @@ public class RockboxWidgetProvider extends AppWidgetProvider
127 if (state.enablePlayPause) 127 if (state.enablePlayPause)
128 { 128 {
129 views.setOnClickPendingIntent(R.id.playPause, 129 views.setOnClickPendingIntent(R.id.playPause,
130 RockboxMediaIntent.newPendingIntent(context, 130 newPendingIntent(context,
131 KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE)); 131 KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE));
132 } 132 }
133 else 133 else
134 views.setViewVisibility(R.id.playPause, View.GONE); 134 views.setViewVisibility(R.id.playPause, View.GONE);
@@ -137,8 +137,8 @@ public class RockboxWidgetProvider extends AppWidgetProvider
137 if (state.enableNext) 137 if (state.enableNext)
138 { 138 {
139 views.setOnClickPendingIntent(R.id.next, 139 views.setOnClickPendingIntent(R.id.next,
140 RockboxMediaIntent.newPendingIntent(context, 140 newPendingIntent(context,
141 KeyEvent.KEYCODE_MEDIA_NEXT)); 141 KeyEvent.KEYCODE_MEDIA_NEXT));
142 } 142 }
143 else 143 else
144 views.setViewVisibility(R.id.next, View.GONE); 144 views.setViewVisibility(R.id.next, View.GONE);
@@ -147,8 +147,8 @@ public class RockboxWidgetProvider extends AppWidgetProvider
147 if (state.enableStop) 147 if (state.enableStop)
148 { 148 {
149 views.setOnClickPendingIntent(R.id.stop, 149 views.setOnClickPendingIntent(R.id.stop,
150 RockboxMediaIntent.newPendingIntent(context, 150 newPendingIntent(context,
151 KeyEvent.KEYCODE_MEDIA_STOP)); 151 KeyEvent.KEYCODE_MEDIA_STOP));
152 } 152 }
153 else 153 else
154 views.setViewVisibility(R.id.stop, View.GONE); 154 views.setViewVisibility(R.id.stop, View.GONE);
@@ -190,24 +190,18 @@ public class RockboxWidgetProvider extends AppWidgetProvider
190 appWidgetManager.updateAppWidget(appWidgetId, views); 190 appWidgetManager.updateAppWidget(appWidgetId, views);
191 } 191 }
192 192
193 private static class RockboxMediaIntent extends Intent 193 public static PendingIntent newPendingIntent(Context context, int keycode)
194 { 194 {
195 private RockboxMediaIntent(Context c, int keycode) 195 /* Use keycode as request to code to prevent successive
196 { 196 * PendingIntents from overwritting one another.
197 super(ACTION_MEDIA_BUTTON, Uri.EMPTY, c, RockboxService.class); 197 * This seems hackish but at least it works.
198 putExtra(EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, 198 * see: http://code.google.com/p/android/issues/detail?id=863
199 keycode)); 199 */
200 } 200 Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON, Uri.EMPTY,
201 201 context, RockboxService.class);
202 public static PendingIntent newPendingIntent(Context c, int keycode) 202 intent.putExtra(Intent.EXTRA_KEY_EVENT,
203 { 203 new KeyEvent(KeyEvent.ACTION_UP, keycode));
204 /* Use keycode as request to code to prevent successive 204 return PendingIntent.getService(context, keycode, intent, 0);
205 * PendingIntents from overwritting one another.
206 * This seems hackish but at least it works.
207 * see: http://code.google.com/p/android/issues/detail?id=863
208 */
209 return PendingIntent.getService(c, keycode, new RockboxMediaIntent(c, keycode), 0);
210 }
211 } 205 }
212} 206}
213 207