diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index 1e8b33366f..bc5626328c 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -147,8 +147,7 @@ public class MapActivity extends AccessibleActivity { // notification.setLatestEventInfo(this, Version.getAppName(app), getString(R.string.go_back_to_osmand), // pi); int smallIcon = app.getSettings().getApplicationMode().getSmallIconDark(); - final Builder noti = new NotificationCompat.Builder( - this).setContentTitle(Version.getAppName(app)) + final Builder noti = new NotificationCompat.Builder(this).setContentTitle(Version.getAppName(app)) .setContentText(getString(R.string.go_back_to_osmand)) .setSmallIcon(smallIcon) // .setLargeIcon(Helpers.getBitmap(R.drawable.mirakel, getBaseContext())) diff --git a/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java b/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java index 33ebff637c..27d5c9796d 100644 --- a/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java +++ b/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java @@ -1,6 +1,10 @@ package net.osmand.plus.download; +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; import android.content.ActivityNotFoundException; +import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; @@ -11,13 +15,14 @@ import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.view.ViewPager; +import android.support.v7.app.NotificationCompat; +import android.support.v7.app.NotificationCompat.Builder; import android.text.method.LinkMovementMethod; import android.view.MenuItem; import android.view.View; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; - import net.osmand.IProgress; import net.osmand.access.AccessibleToast; import net.osmand.plus.OsmandApplication; @@ -25,6 +30,7 @@ import net.osmand.plus.OsmandSettings; import net.osmand.plus.R; import net.osmand.plus.Version; import net.osmand.plus.activities.LocalIndexInfo; +import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.TabActivity; import net.osmand.plus.base.BasicProgressAsyncTask; import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents; @@ -190,6 +196,7 @@ public class DownloadActivity extends BaseDownloadActivity { } } + @Override @UiThread diff --git a/OsmAnd/src/net/osmand/plus/download/DownloadIndexesThread.java b/OsmAnd/src/net/osmand/plus/download/DownloadIndexesThread.java index 8cc537665d..0b7e1bfc9e 100644 --- a/OsmAnd/src/net/osmand/plus/download/DownloadIndexesThread.java +++ b/OsmAnd/src/net/osmand/plus/download/DownloadIndexesThread.java @@ -26,6 +26,9 @@ import org.apache.commons.logging.Log; import android.annotation.SuppressLint; import android.app.AlertDialog; +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.DialogInterface; @@ -36,12 +39,15 @@ import android.os.AsyncTask.Status; import android.os.Build; import android.os.StatFs; import android.support.annotation.UiThread; +import android.support.v7.app.NotificationCompat; +import android.support.v7.app.NotificationCompat.Builder; import android.view.View; import android.widget.Toast; @SuppressLint({ "NewApi", "DefaultLocale" }) public class DownloadIndexesThread { private final static Log LOG = PlatformUtil.getLog(DownloadIndexesThread.class); + private static final int NOTIFICATION_ID = 45; private final Context ctx; private OsmandApplication app; @@ -54,6 +60,7 @@ public class DownloadIndexesThread { private int currentDownloadingItemProgress = 0; private DownloadResources indexes; + private Notification notification; public interface DownloadEvents { @@ -88,6 +95,45 @@ public class DownloadIndexesThread { if (uiActivity != null) { uiActivity.downloadInProgress(); } + updateNotification(); + } + + private void updateNotification() { + if(getCurrentDownloadingItem() != null) { + BasicProgressAsyncTask task = getCurrentRunningTask(); + final boolean isFinished = task == null + || task.getStatus() == AsyncTask.Status.FINISHED; + Intent contentIntent = new Intent(app, DownloadActivity.class); + PendingIntent contentPendingIntent = PendingIntent.getActivity(app, 0, contentIntent, + PendingIntent.FLAG_UPDATE_CURRENT); + Builder bld = new NotificationCompat.Builder(app); + String msg = Version.getAppName(app); + if(!isFinished) { + msg = task.getDescription(); + } + StringBuilder contentText = new StringBuilder(); + List ii = getCurrentDownloadingItems(); + for(IndexItem i : ii) { + if(contentText.length() > 0) { + contentText.append(", "); + } + contentText.append(i.getVisibleName(app, app.getRegions())); + } + bld.setContentTitle(msg).setSmallIcon(R.drawable.ic_action_import). + setContentIntent(contentPendingIntent).setOngoing(true); + int progress = getCurrentDownloadingItemProgress(); + bld.setProgress(100, Math.max(progress, 0), progress < 0); + notification = bld.build(); + NotificationManager mNotificationManager = (NotificationManager) app.getSystemService(Context.NOTIFICATION_SERVICE); + mNotificationManager.notify(NOTIFICATION_ID, notification); + } else { + if(notification != null) { + NotificationManager mNotificationManager = (NotificationManager) app.getSystemService(Context.NOTIFICATION_SERVICE); + mNotificationManager.cancel(NOTIFICATION_ID); + notification = null; + } + } + } @@ -96,6 +142,7 @@ public class DownloadIndexesThread { if (uiActivity != null) { uiActivity.downloadHasFinished(); } + updateNotification(); } @UiThread