ssseasonnn / RxDownload

A multi-threaded download tool written with RxJava and Kotlin
Apache License 2.0
4.14k stars 612 forks source link

notification appear #118

Closed DeevD closed 6 years ago

DeevD commented 6 years ago

bro when i delete download mission notification is appear .. How to handle bro

ssseasonnn commented 6 years ago

I just publish new version 1.1.2, this version add Deleted status, when you call delete() api, you will received that. You can see : https://github.com/ssseasonnn/RxDownload/blob/master/rxdownload3/src/main/java/zlc/season/rxdownload3/notification/NotificationFactoryImpl.kt

DeevD commented 6 years ago

awww bro i see thank you i miss that update notification

DeevD commented 6 years ago

bro when i add deleted fun from your simple class but it not work please check bro when i wrong sorry because i not good in kotlin language bro

import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.os.Build; import android.support.v4.app.NotificationCompat;

import org.jetbrains.annotations.NotNull;

import java.util.HashMap;

import timber.log.Timber; import zlc.season.rxdownload3.core.Deleted; import zlc.season.rxdownload3.core.Downloading; import zlc.season.rxdownload3.core.Failed; import zlc.season.rxdownload3.core.Mission; import zlc.season.rxdownload3.core.RealMission; import zlc.season.rxdownload3.core.Status; import zlc.season.rxdownload3.core.Succeed; import zlc.season.rxdownload3.core.Suspend; import zlc.season.rxdownload3.core.Waiting; import zlc.season.rxdownload3.notification.NotificationFactory;

import static android.content.Context.NOTIFICATION_SERVICE;

/**

public class CustomNotifications implements NotificationFactory {

private String channelId = "rxDownalod";
private String channelName = "rxDownalod";

public HashMap<RealMission, NotificationCompat.Builder> map = new HashMap<>();

@NotNull
@Override
public Notification build(Context context, RealMission realMission, Status status) {

    createChannelForOreo(context, channelId, channelName);

    NotificationCompat.Builder builder = get(realMission, context);

    if (status instanceof Suspend) {
        suspend(builder);
    } else if (status instanceof Waiting) {
        waiting(builder);
    } else if (status instanceof Downloading) {
        downloading(builder, status);
    } else if (status instanceof Failed) {
        fail(builder);
    } else if (status instanceof Succeed) {
        succeed(builder, context);
    } else if (status instanceof Deleted) {
        deleted(realMission, context);
    } else {
        new Notification();
    }
    return builder.build();
}

private Notification deleted(RealMission realMission, Context context) {
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
    if (notificationManager != null) {
        notificationManager.cancel(realMission.hashCode());
    }
    return null;
}

private Notification succeed(NotificationCompat.Builder builder, Context context) {
    Intent intent = new Intent(context, DownloadListActivity.class);
    PendingIntent pIntent = PendingIntent.getActivity(context, (int) System.currentTimeMillis(), intent, 0);
    builder.setContentText("download successful");
    builder.setVibrate(new long[]{1000, 1000, 1000, 1000, 1000});
    builder.setLights(Color.GREEN, 3000, 3000);
    //Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    //builder.setSound(alarmSound);
    dismissProgress(builder);
    return builder.build();
}

private Notification suspend(NotificationCompat.Builder builder) {
    builder.setContentText("download paused");
    dismissProgress(builder);
    return builder.build();
}

public Notification waiting(NotificationCompat.Builder builder) {
    builder.setContentText("download waiting");
    dismissProgress(builder);
    return builder.build();
}

private Notification downloading(NotificationCompat.Builder builder, Status statuas) {
    builder.setContentText("downloading");
    if (statuas.getChunkFlag()) {
        builder.setProgress(0, 0, true);
    } else {
        builder.setProgress((int) statuas.getTotalSize(), (int) statuas.getDownloadSize(), false);
    }
    return builder.build();
}

public Notification fail(NotificationCompat.Builder builder) {
    builder.setContentTitle("mahar videos");
    builder.setContentText("download fail!");
    dismissProgress(builder);
    return builder.build();
}

private void dismissProgress(NotificationCompat.Builder builder) {
    builder.setProgress(0, 0, false);
}

private NotificationCompat.Builder get(RealMission mission, Context context) {
    NotificationCompat.Builder builder = map.get(mission);
    if (builder == null) {
        builder = createNotificationBuilder(mission, context);
        map.put(mission, builder);
    }

    return builder.setContentTitle(mission.getActual().getSaveName());
}

private NotificationCompat.Builder createNotificationBuilder(RealMission mission, Context context) {
    return new NotificationCompat.Builder(context, channelId)
            .setSmallIcon(R.drawable.ic_download)
            .setContentTitle("mahar videos")
            .setContentTitle(mission.getActual().getSaveName());
}

private void createChannelForOreo(Context context, String channelId, String channelName) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
        NotificationChannel channel = new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_LOW);
        channel.enableLights(true);
        channel.setShowBadge(true);
        channel.setLightColor(Color.GREEN);
        channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
        notificationManager.createNotificationChannel(channel);
    }
}

}

ssseasonnn commented 6 years ago

your code is wrong, fix it:

if (status instanceof Suspend) {
       return  suspend(builder);
    } else if (status instanceof Waiting) {
       return         waiting(builder);
    } else if (status instanceof Downloading) {
       return         downloading(builder, status);
    } else if (status instanceof Failed) {
       return         fail(builder);
    } else if (status instanceof Succeed) {
       return         succeed(builder, context);
    } else if (status instanceof Deleted) {
       return         deleted(realMission, context);
    } else {
        new Notification();
    }
DeevD commented 6 years ago

heee i wrong thank you bro :D