package com.fastaccess.provider.tasks.git; import android.app.IntentService; import android.app.NotificationManager; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.NotificationCompat; import com.fastaccess.R; import com.fastaccess.data.dao.PostReactionModel; import com.fastaccess.data.dao.types.ReactionTypes; import com.fastaccess.helper.BundleConstant; import com.fastaccess.helper.Bundler; import com.fastaccess.helper.InputHelper; import com.fastaccess.helper.RxHelper; import com.fastaccess.provider.rest.RestProvider; /** * Created by Kosh on 29 Mar 2017, 9:59 PM */ public class ReactionService extends IntentService { private NotificationCompat.Builder notification; private NotificationManager notificationManager; public static void start(@NonNull Context context, @NonNull String login, @NonNull String repo, long commentId, ReactionTypes reactionType, boolean isCommit, boolean isDelete) { Intent intent = new Intent(context, ReactionService.class); intent.putExtras(Bundler.start() .put(BundleConstant.EXTRA, isCommit) .put(BundleConstant.EXTRA_TWO, login) .put(BundleConstant.EXTRA_THREE, repo) .put(BundleConstant.EXTRA_FOUR, isDelete) .put(BundleConstant.ID, commentId) .put(BundleConstant.EXTRA_TYPE, reactionType) .end()); context.startService(intent); } public ReactionService() { super(ReactionService.class.getSimpleName()); } @Override protected void onHandleIntent(@Nullable Intent intent) { if (intent != null && intent.getExtras() != null) { Bundle bundle = intent.getExtras(); ReactionTypes reactionType = (ReactionTypes) bundle.getSerializable(BundleConstant.EXTRA_TYPE); boolean isCommit = bundle.getBoolean(BundleConstant.EXTRA); String login = bundle.getString(BundleConstant.EXTRA_TWO); String repo = bundle.getString(BundleConstant.EXTRA_THREE); long commentId = bundle.getLong(BundleConstant.ID); if (InputHelper.isEmpty(login) || InputHelper.isEmpty(repo) || reactionType == null) { stopSelf(); return; } if (isCommit) { postCommit(reactionType, login, repo, commentId); } else { post(reactionType, login, repo, commentId); } } } private void post(@NonNull ReactionTypes reactionType, @NonNull String login, @NonNull String repo, long commentId) { RxHelper.safeObservable(RestProvider.getReactionsService() .postIssueCommentReaction(new PostReactionModel(reactionType.getContent()), login, repo, commentId)) .doOnSubscribe(() -> showNotificatin(getNotification(reactionType), (int) commentId)) .subscribe(response -> hideNotificat((int) commentId), throwable -> hideNotificat((int) commentId)); } private void postCommit(@NonNull ReactionTypes reactionType, @NonNull String login, @NonNull String repo, long commentId) { RxHelper.safeObservable(RestProvider.getReactionsService() .postCommitReaction(new PostReactionModel(reactionType.getContent()), login, repo, commentId)) .doOnSubscribe(() -> showNotificatin(getNotification(reactionType), (int) commentId)) .subscribe(response -> hideNotificat((int) commentId), throwable -> hideNotificat((int) commentId)); } public NotificationCompat.Builder getNotification(@NonNull ReactionTypes reactionTypes) { if (notification == null) { notification = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_sync) .setProgress(0, 100, true); } notification.setContentTitle(getString(R.string.posting_reaction, reactionTypes.getContent())); return notification; } public NotificationManager getNotificationManager() { if (notificationManager == null) { notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); } return notificationManager; } private void showNotificatin(@NonNull NotificationCompat.Builder builder, int id) { getNotificationManager().notify(id, builder.build()); } private void hideNotificat(int id) { getNotificationManager().cancel(id); } }