From: masensio Date: Fri, 21 Mar 2014 09:37:50 +0000 (+0100) Subject: Merge pull request #444 from owncloud/improve_notifications_pr_400_with_develop X-Git-Tag: oc-android-1.5.5~5^2~4 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/ea3cf3434904c0ba4b938f918dc13c47ce624207?hp=2d6826fe8b060e2bf4573e909e917af4741c9f14 Merge pull request #444 from owncloud/improve_notifications_pr_400_with_develop Fix several problems about notifications in Android 2.x and 3.x after upgrade to newest Android notifications API --- diff --git a/res/drawable-hdpi-v11/notification_icon.png b/res/drawable-hdpi-v11/notification_icon.png new file mode 100644 index 00000000..9e634a8c Binary files /dev/null and b/res/drawable-hdpi-v11/notification_icon.png differ diff --git a/res/drawable-hdpi/notification_icon.png b/res/drawable-hdpi/notification_icon.png index 9e634a8c..9872053a 100644 Binary files a/res/drawable-hdpi/notification_icon.png and b/res/drawable-hdpi/notification_icon.png differ diff --git a/res/drawable-mdpi-v11/notification_icon.png b/res/drawable-mdpi-v11/notification_icon.png new file mode 100644 index 00000000..e33e6535 Binary files /dev/null and b/res/drawable-mdpi-v11/notification_icon.png differ diff --git a/res/drawable-mdpi/notification_icon.png b/res/drawable-mdpi/notification_icon.png index e33e6535..79bcf2ae 100644 Binary files a/res/drawable-mdpi/notification_icon.png and b/res/drawable-mdpi/notification_icon.png differ diff --git a/res/drawable-xhdpi-v11/notification_icon.png b/res/drawable-xhdpi-v11/notification_icon.png new file mode 100644 index 00000000..1ad49714 Binary files /dev/null and b/res/drawable-xhdpi-v11/notification_icon.png differ diff --git a/res/drawable-xhdpi/notification_icon.png b/res/drawable-xhdpi/notification_icon.png index 1ad49714..656977dd 100644 Binary files a/res/drawable-xhdpi/notification_icon.png and b/res/drawable-xhdpi/notification_icon.png differ diff --git a/res/layout-v11/notification_with_progress_bar.xml b/res/layout-v11/notification_with_progress_bar.xml new file mode 100644 index 00000000..f4d4fab3 --- /dev/null +++ b/res/layout-v11/notification_with_progress_bar.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/notification_with_progress_bar.xml b/res/layout/notification_with_progress_bar.xml new file mode 100644 index 00000000..1df31dc5 --- /dev/null +++ b/res/layout/notification_with_progress_bar.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + diff --git a/res/values-v11/versioned_styles.xml b/res/values-v11/versioned_styles.xml index 75cfb9b7..ab237e84 100644 --- a/res/values-v11/versioned_styles.xml +++ b/res/values-v11/versioned_styles.xml @@ -6,4 +6,17 @@ @color/button_text_color + + + + + + diff --git a/res/values-v9/versioned_styles.xml b/res/values-v9/versioned_styles.xml new file mode 100644 index 00000000..57bb396f --- /dev/null +++ b/res/values-v9/versioned_styles.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/src/com/owncloud/android/files/services/FileDownloader.java b/src/com/owncloud/android/files/services/FileDownloader.java index c05f7a52..2645511b 100644 --- a/src/com/owncloud/android/files/services/FileDownloader.java +++ b/src/com/owncloud/android/files/services/FileDownloader.java @@ -44,12 +44,11 @@ import com.owncloud.android.ui.activity.FileActivity; import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.preview.PreviewImageActivity; import com.owncloud.android.ui.preview.PreviewImageFragment; -import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.Log_OC; +import com.owncloud.android.utils.NotificationBuilderWithProgressBar; import android.accounts.Account; import android.accounts.AccountsException; -import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; @@ -62,7 +61,6 @@ import android.os.Looper; import android.os.Message; import android.os.Process; import android.support.v4.app.NotificationCompat; -import android.widget.RemoteViews; public class FileDownloader extends Service implements OnDatatransferProgressListener { @@ -405,7 +403,8 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis private void notifyDownloadStart(DownloadFileOperation download) { /// create status notification with a progress bar mLastPercent = 0; - mNotificationBuilder = new NotificationCompat.Builder(this); + mNotificationBuilder = + NotificationBuilderWithProgressBar.newNotificationBuilderWithProgressBar(this); mNotificationBuilder .setSmallIcon(R.drawable.notification_icon) .setTicker(getString(R.string.downloader_download_in_progress_ticker)) @@ -467,7 +466,9 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis mNotificationBuilder .setTicker(getString(tickerId)) .setContentTitle(getString(tickerId)) - .setAutoCancel(true); + .setAutoCancel(true) + .setOngoing(false) + .setProgress(0, 0, false); boolean needsToUpdateCredentials = (downloadResult.getCode() == ResultCode.UNAUTHORIZED || // (downloadResult.isTemporalRedirection() && downloadResult.isIdPRedirection() (downloadResult.isIdPRedirection() diff --git a/src/com/owncloud/android/files/services/FileUploader.java b/src/com/owncloud/android/files/services/FileUploader.java index 722b0655..b5470669 100644 --- a/src/com/owncloud/android/files/services/FileUploader.java +++ b/src/com/owncloud/android/files/services/FileUploader.java @@ -53,13 +53,12 @@ import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.activity.InstantUploadActivity; import com.owncloud.android.ui.preview.PreviewImageActivity; import com.owncloud.android.ui.preview.PreviewImageFragment; -import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.Log_OC; +import com.owncloud.android.utils.NotificationBuilderWithProgressBar; import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.AccountsException; -import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; @@ -73,7 +72,6 @@ import android.os.Message; import android.os.Process; import android.support.v4.app.NotificationCompat; import android.webkit.MimeTypeMap; -import android.widget.RemoteViews; @@ -120,7 +118,6 @@ public class FileUploader extends Service implements OnDatatransferProgressListe private NotificationManager mNotificationManager; private NotificationCompat.Builder mNotificationBuilder; private int mLastPercent; - private RemoteViews mDefaultNotificationContentView; public static String getUploadFinishMessage() { @@ -679,11 +676,11 @@ public class FileUploader extends Service implements OnDatatransferProgressListe * * @param upload Upload operation starting. */ - @SuppressWarnings("deprecation") private void notifyUploadStart(UploadFileOperation upload) { // / create status notification with a progress bar mLastPercent = 0; - mNotificationBuilder = new NotificationCompat.Builder(this); + mNotificationBuilder = + NotificationBuilderWithProgressBar.newNotificationBuilderWithProgressBar(this); mNotificationBuilder .setOngoing(true) .setSmallIcon(R.drawable.notification_icon) @@ -736,7 +733,10 @@ public class FileUploader extends Service implements OnDatatransferProgressListe } else if (uploadResult.isSuccess()) { // / success -> silent update of progress notification to success // message - mNotificationBuilder.setOngoing(false).setAutoCancel(true); + mNotificationBuilder + .setOngoing(false) + .setAutoCancel(true) + .setProgress(0, 0, false); /// includes a pending intent in the notification showing the details view of the file Intent showDetailsIntent = null; diff --git a/src/com/owncloud/android/utils/NotificationBuilderWithProgressBar.java b/src/com/owncloud/android/utils/NotificationBuilderWithProgressBar.java new file mode 100644 index 00000000..c47e469e --- /dev/null +++ b/src/com/owncloud/android/utils/NotificationBuilderWithProgressBar.java @@ -0,0 +1,131 @@ +/* ownCloud Android client application + * Copyright (C) 2014 ownCloud Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +package com.owncloud.android.utils; + +import com.owncloud.android.R; + +import android.app.Notification; +import android.content.Context; +import android.os.Build; +import android.support.v4.app.NotificationCompat; +import android.view.View; +import android.widget.RemoteViews; + +/** + * Extends the support class {@link NotificationCompat.Builder} to grant that + * a progress bar is available in every Android version, because + * {@link NotificationCompat.Builder#setProgress(int, int, boolean)} has no + * real effect for Android < 4.0 + * + * @author David A. Velasco + */ +public class NotificationBuilderWithProgressBar extends NotificationCompat.Builder { + + /** + * Custom view to replace the original layout of the notifications + */ + private RemoteViews mContentView = null; + + /** + * Fatory method. + * + * Instances of this class will be only returned in Android versions needing it. + * + * @param context Context that will use the builder to create notifications + * @return An instance of this class, or of the regular + * {@link NotificationCompat.Builder}, when it is good enough. + */ + public static NotificationCompat.Builder newNotificationBuilderWithProgressBar(Context context) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + return new NotificationBuilderWithProgressBar(context); + } else { + return new NotificationCompat.Builder(context); + } + } + + /** + * Constructor. + * + * @param context Context that will use the builder to create notifications. + */ + private NotificationBuilderWithProgressBar(Context context) { + super(context); + mContentView = new RemoteViews(context.getPackageName(), R.layout.notification_with_progress_bar); + setContent(mContentView); + } + + /** + * {@inheritDoc} + */ + @Override + public NotificationCompat.Builder setProgress(int max, int progress, boolean indeterminate) { + mContentView.setProgressBar(R.id.progress, max, progress, indeterminate); + if (max > 0) { + mContentView.setViewVisibility(R.id.progressHolder, View.VISIBLE); + } else { + mContentView.setViewVisibility(R.id.progressHolder, View.GONE); + } + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public NotificationCompat.Builder setSmallIcon(int icon) { + super.setSmallIcon(icon); // necessary + mContentView.setImageViewResource(R.id.icon, icon); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public NotificationCompat.Builder setContentTitle(CharSequence title) { + super.setContentTitle(title); + mContentView.setTextViewText(R.id.title, title); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public NotificationCompat.Builder setContentText(CharSequence text) { + super.setContentText(text); + mContentView.setTextViewText(R.id.text, text); + if (text != null && text.length() > 0) { + mContentView.setViewVisibility(R.id.text, View.VISIBLE); + } else { + mContentView.setViewVisibility(R.id.text, View.GONE); + } + return this; + } + + @Override + public Notification build() { + Notification result = super.build(); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { + // super.build() in Android 2.x totally ruins whatever was made #setContent + result.contentView = mContentView; + } + return result; + } + +} diff --git a/third_party/android-support-library/android-support-v4.jar b/third_party/android-support-library/android-support-v4.jar index feaf44f8..96644edb 100644 Binary files a/third_party/android-support-library/android-support-v4.jar and b/third_party/android-support-library/android-support-v4.jar differ