Fix issue #2: better notifications on ICS+ devices.
Shows an expandable notification on devices that support it (4.1+ I believe). The support library does most of the job of handling incompatibilities between platforms.
This commit is contained in:
parent
48c3e1f747
commit
f1655496d8
@ -1,8 +1,11 @@
|
|||||||
### Upcoming release
|
### Upcoming release
|
||||||
|
|
||||||
|
* Show list of apps to in the update notification (on devices with
|
||||||
|
Android 4.1 or higher)
|
||||||
|
|
||||||
* Fix an issue where xml files could pile up in the data directory
|
* Fix an issue where xml files could pile up in the data directory
|
||||||
|
|
||||||
* Add empty list views
|
* Show a message to the user when there is no apps to display
|
||||||
|
|
||||||
* Split up search terms when querying the app database - "fire fox" now
|
* Split up search terms when querying the app database - "fire fox" now
|
||||||
matches FireFox
|
matches FireFox
|
||||||
|
@ -80,6 +80,7 @@
|
|||||||
<string name="one_update_available">1 update is available.</string>
|
<string name="one_update_available">1 update is available.</string>
|
||||||
<string name="many_updates_available">%d updates are available.</string>
|
<string name="many_updates_available">%d updates are available.</string>
|
||||||
<string name="fdroid_updates_available">F-Droid Updates Available</string>
|
<string name="fdroid_updates_available">F-Droid Updates Available</string>
|
||||||
|
<string name="update_notification_more">+%1$d more…</string>
|
||||||
<string name="process_wait_title">Please Wait</string>
|
<string name="process_wait_title">Please Wait</string>
|
||||||
<string name="process_update_msg">Updating application list…</string>
|
<string name="process_update_msg">Updating application list…</string>
|
||||||
<string name="download_server">Getting application from</string>
|
<string name="download_server">Getting application from</string>
|
||||||
|
@ -424,7 +424,7 @@ public class UpdateService extends IntentService implements ProgressListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (prefs.getBoolean(Preferences.PREF_UPD_NOTIFY, true)) {
|
if (prefs.getBoolean(Preferences.PREF_UPD_NOTIFY, true)) {
|
||||||
performUpdateNotification(appsToUpdate.values());
|
performUpdateNotification();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -483,36 +483,67 @@ public class UpdateService extends IntentService implements ProgressListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void performUpdateNotification(Collection<App> apps) {
|
private void performUpdateNotification() {
|
||||||
int count = AppProvider.Helper.count(this, AppProvider.getCanUpdateUri());
|
Cursor cursor = getContentResolver().query(
|
||||||
if (count > 0) {
|
AppProvider.getCanUpdateUri(),
|
||||||
showAppUpdatesNotification(count);
|
AppProvider.DataColumns.ALL,
|
||||||
|
null, null, null);
|
||||||
|
if (cursor.getCount() > 0) {
|
||||||
|
showAppUpdatesNotification(cursor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showAppUpdatesNotification(int updates) {
|
private PendingIntent createNotificationIntent() {
|
||||||
Log.d(TAG, "Notifying " + updates + " updates.");
|
Intent notifyIntent = new Intent(this, FDroid.class).putExtra(FDroid.EXTRA_TAB_UPDATE, true);
|
||||||
NotificationCompat.Builder builder =
|
|
||||||
new NotificationCompat.Builder(this)
|
|
||||||
.setAutoCancel(true)
|
|
||||||
.setContentTitle(getString(R.string.fdroid_updates_available));
|
|
||||||
if (Build.VERSION.SDK_INT >= 11) {
|
|
||||||
builder.setSmallIcon(R.drawable.ic_stat_notify_updates);
|
|
||||||
} else {
|
|
||||||
builder.setSmallIcon(R.drawable.ic_launcher);
|
|
||||||
}
|
|
||||||
Intent notifyIntent = new Intent(this, FDroid.class)
|
|
||||||
.putExtra(FDroid.EXTRA_TAB_UPDATE, true);
|
|
||||||
if (updates > 1) {
|
|
||||||
builder.setContentText(getString(R.string.many_updates_available, updates));
|
|
||||||
} else {
|
|
||||||
builder.setContentText(getString(R.string.one_update_available));
|
|
||||||
}
|
|
||||||
TaskStackBuilder stackBuilder = TaskStackBuilder
|
TaskStackBuilder stackBuilder = TaskStackBuilder
|
||||||
.create(this).addParentStack(FDroid.class)
|
.create(this).addParentStack(FDroid.class)
|
||||||
.addNextIntent(notifyIntent);
|
.addNextIntent(notifyIntent);
|
||||||
PendingIntent pi = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
|
return stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||||
builder.setContentIntent(pi);
|
}
|
||||||
|
|
||||||
|
private NotificationCompat.Style createNotificationBigStyle(Cursor hasUpdates) {
|
||||||
|
|
||||||
|
final int MAX_UPDATES_TO_SHOW = 5;
|
||||||
|
|
||||||
|
final String contentText = hasUpdates.getCount() > 1
|
||||||
|
? getString(R.string.many_updates_available, hasUpdates.getCount())
|
||||||
|
: getString(R.string.one_update_available);
|
||||||
|
|
||||||
|
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
|
||||||
|
inboxStyle.setBigContentTitle(contentText);
|
||||||
|
hasUpdates.moveToFirst();
|
||||||
|
for (int i = 0; i < Math.min(hasUpdates.getCount(), MAX_UPDATES_TO_SHOW); i ++) {
|
||||||
|
App app = new App(hasUpdates);
|
||||||
|
hasUpdates.moveToNext();
|
||||||
|
inboxStyle.addLine(app.name + " (" + app.installedVersionName + " → " + app.getSuggestedVersion() + ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasUpdates.getCount() > MAX_UPDATES_TO_SHOW) {
|
||||||
|
int diff = hasUpdates.getCount() - MAX_UPDATES_TO_SHOW;
|
||||||
|
inboxStyle.setSummaryText(getString(R.string.update_notification_more, diff));
|
||||||
|
}
|
||||||
|
|
||||||
|
return inboxStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showAppUpdatesNotification(Cursor hasUpdates) {
|
||||||
|
Log.d(TAG, "Notifying " + hasUpdates.getCount() + " updates.");
|
||||||
|
|
||||||
|
final int icon = Build.VERSION.SDK_INT >= 11 ? R.drawable.ic_stat_notify_updates : R.drawable.ic_launcher;
|
||||||
|
|
||||||
|
final String contentText = hasUpdates.getCount() > 1
|
||||||
|
? getString(R.string.many_updates_available, hasUpdates.getCount())
|
||||||
|
: getString(R.string.one_update_available);
|
||||||
|
|
||||||
|
NotificationCompat.Builder builder =
|
||||||
|
new NotificationCompat.Builder(this)
|
||||||
|
.setAutoCancel(true)
|
||||||
|
.setContentTitle(getString(R.string.fdroid_updates_available))
|
||||||
|
.setSmallIcon(icon)
|
||||||
|
.setContentIntent(createNotificationIntent())
|
||||||
|
.setContentText(contentText)
|
||||||
|
.setStyle(createNotificationBigStyle(hasUpdates));
|
||||||
|
|
||||||
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
nm.notify(1, builder.build());
|
nm.notify(1, builder.build());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user