diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 87d8cf851..ced498306 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -442,9 +442,6 @@ - diff --git a/app/src/main/java/org/fdroid/fdroid/net/DownloadCompleteService.java b/app/src/main/java/org/fdroid/fdroid/net/DownloadCompleteService.java deleted file mode 100644 index fa5029d94..000000000 --- a/app/src/main/java/org/fdroid/fdroid/net/DownloadCompleteService.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.fdroid.fdroid.net; - -import android.app.IntentService; -import android.app.NotificationManager; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.os.Process; -import android.support.v4.app.NotificationCompat; -import android.text.TextUtils; - -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.Utils; -import org.fdroid.fdroid.data.App; -import org.fdroid.fdroid.data.AppProvider; - -public class DownloadCompleteService extends IntentService { - private static final String TAG = "DownloadCompleteService"; - - private static final String ACTION_NOTIFY = "org.fdroid.fdroid.net.action.NOTIFY"; - private static final String EXTRA_PACKAGE_NAME = "org.fdroid.fdroid.net.extra.PACKAGE_NAME"; - - public DownloadCompleteService() { - super("DownloadCompleteService"); - } - - public static void notify(Context context, String packageName, String urlString) { - Intent intent = new Intent(context, DownloadCompleteService.class); - intent.setAction(ACTION_NOTIFY); - intent.setData(Uri.parse(urlString)); - intent.putExtra(EXTRA_PACKAGE_NAME, packageName); - context.startService(intent); - } - - @Override - protected void onHandleIntent(Intent intent) { - Process.setThreadPriority(Process.THREAD_PRIORITY_LOWEST); - if (intent != null) { - final String action = intent.getAction(); - if (!ACTION_NOTIFY.equals(action)) { - Utils.debugLog(TAG, "Intent action is not ACTION_NOTIFY"); - return; - } - String packageName = intent.getStringExtra(EXTRA_PACKAGE_NAME); - if (TextUtils.isEmpty(packageName)) { - Utils.debugLog(TAG, "Intent is missing EXTRA_PACKAGE_NAME"); - return; - } - - String title; - try { - PackageManager pm = getPackageManager(); - title = String.format(getString(R.string.tap_to_update_format), - pm.getApplicationLabel(pm.getApplicationInfo(packageName, 0))); - } catch (PackageManager.NameNotFoundException e) { - App app = AppProvider.Helper.findByPackageName(getContentResolver(), packageName, - new String[]{ - AppProvider.DataColumns.NAME, - }); - title = String.format(getString(R.string.tap_to_install_format), app.name); - } - - int requestCode = Utils.getApkUrlNotificationId(intent.getDataString()); - NotificationCompat.Builder builder = - new NotificationCompat.Builder(this) - .setAutoCancel(true) - .setContentTitle(title) - .setSmallIcon(android.R.drawable.stat_sys_download_done) - .setContentIntent(DownloaderService.createAppDetailsIntent(this, requestCode, packageName)) - .setContentText(getString(R.string.tap_to_install)); - NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); - nm.notify(Utils.getApkUrlNotificationId(intent.getDataString()), builder.build()); - } - } -} diff --git a/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java b/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java index b8d93c0d0..ade4f30de 100644 --- a/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java +++ b/app/src/main/java/org/fdroid/fdroid/net/DownloaderService.java @@ -24,6 +24,7 @@ import android.app.Service; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.PackageManager; import android.net.Uri; import android.os.Handler; import android.os.HandlerThread; @@ -166,7 +167,7 @@ public class DownloaderService extends Service { private NotificationCompat.Builder createNotification(String urlString, @Nullable String packageName) { return new NotificationCompat.Builder(this) .setAutoCancel(true) - .setContentIntent(createAppDetailsIntent(this, 0, packageName)) + .setContentIntent(createAppDetailsIntent(0, packageName)) .setContentTitle(getNotificationTitle(packageName)) .addAction(R.drawable.ic_cancel_black_24dp, getString(R.string.cancel), createCancelDownloadIntent(this, 0, urlString)) @@ -191,20 +192,20 @@ public class DownloaderService extends Service { return getString(R.string.downloading); } - public static PendingIntent createAppDetailsIntent(@NonNull Context context, int requestCode, @Nullable String packageName) { + private PendingIntent createAppDetailsIntent(int requestCode, String packageName) { TaskStackBuilder stackBuilder; if (packageName != null) { - Intent notifyIntent = new Intent(context.getApplicationContext(), AppDetails.class) + Intent notifyIntent = new Intent(getApplicationContext(), AppDetails.class) .putExtra(AppDetails.EXTRA_APPID, packageName); stackBuilder = TaskStackBuilder - .create(context.getApplicationContext()) + .create(getApplicationContext()) .addParentStack(AppDetails.class) .addNextIntent(notifyIntent); } else { - Intent notifyIntent = new Intent(context.getApplicationContext(), FDroid.class); + Intent notifyIntent = new Intent(getApplicationContext(), FDroid.class); stackBuilder = TaskStackBuilder - .create(context.getApplicationContext()) + .create(getApplicationContext()) .addParentStack(FDroid.class) .addNextIntent(notifyIntent); } @@ -298,7 +299,7 @@ public class DownloaderService extends Service { }); downloader.download(); sendBroadcast(uri, Downloader.ACTION_COMPLETE, localFile); - DownloadCompleteService.notify(this, packageName, intent.getDataString()); + notifyDownloadComplete(packageName, intent.getDataString()); } catch (InterruptedException e) { sendBroadcast(uri, Downloader.ACTION_INTERRUPTED, localFile); } catch (IOException e) { @@ -317,6 +318,32 @@ public class DownloaderService extends Service { downloader = null; } + private void notifyDownloadComplete(String packageName, String urlString) { + String title; + try { + PackageManager pm = getPackageManager(); + title = String.format(getString(R.string.tap_to_update_format), + pm.getApplicationLabel(pm.getApplicationInfo(packageName, 0))); + } catch (PackageManager.NameNotFoundException e) { + App app = AppProvider.Helper.findByPackageName(getContentResolver(), packageName, + new String[]{ + AppProvider.DataColumns.NAME, + }); + title = String.format(getString(R.string.tap_to_install_format), app.name); + } + + int requestCode = Utils.getApkUrlNotificationId(urlString); + NotificationCompat.Builder builder = + new NotificationCompat.Builder(this) + .setAutoCancel(true) + .setContentTitle(title) + .setSmallIcon(android.R.drawable.stat_sys_download_done) + .setContentIntent(createAppDetailsIntent(requestCode, packageName)) + .setContentText(getString(R.string.tap_to_install)); + NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); + nm.notify(Utils.getApkUrlNotificationId(urlString), builder.build()); + } + private void sendBroadcast(Uri uri, String action, File file) { sendBroadcast(uri, action, file, null); }