1/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.example.notificationshowcase;
18
19import android.app.IntentService;
20import android.app.NotificationManager;
21import android.app.Service;
22import android.content.Context;
23import android.content.Intent;
24import android.os.Handler;
25import android.os.IBinder;
26import android.util.Log;
27
28public class ProgressService extends IntentService {
29
30    private static final String TAG = "ProgressService";
31
32    private static final String ACTION_PROGRESS = "progress";
33
34    private Handler handler;
35
36    public ProgressService() {
37        super(TAG);
38    }
39    public ProgressService(String name) {
40        super(name);
41    }
42
43    class UpdateRunnable implements Runnable {
44
45        private final int mId;
46        private final long mWhen;
47        private int mProgress;
48
49        UpdateRunnable(int id, long when, int progress) {
50            mId = id;
51            mWhen = when;
52            mProgress = progress;
53        }
54
55        @Override
56        public void run() {            NotificationManager noMa = (NotificationManager)
57                getSystemService(Context.NOTIFICATION_SERVICE);
58                Log.v(TAG, "id: " + mId + " when: " + mWhen + " progress: " + mProgress);
59                noMa.notify(NotificationService.NOTIFICATION_ID + mId,
60                        NotificationService.makeUploadNotification(
61                                ProgressService.this, mProgress, mWhen));
62                mProgress += 10;
63            if (mProgress <= 100) {
64                handler.postDelayed(this, 1000);
65            }
66        }
67    }
68
69    @Override
70    public int onStartCommand(Intent intent, int flags, int startId) {
71        handler = new Handler();
72        return super.onStartCommand(intent, flags, startId);
73    }
74
75
76    @Override
77    protected void onHandleIntent(Intent intent) {
78        final int id = intent.getIntExtra("id", 0);
79        final long when = intent.getLongExtra("when", 0L);
80        int progress = intent.getIntExtra("progress", 0);
81        handler.postDelayed(new UpdateRunnable(id, when, progress), 1000);
82    }
83
84    public static void startProgressUpdater(Context context, int id, long when, int progress) {
85        Intent progressIntent = new Intent(context, ProgressService.class);
86        progressIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
87        progressIntent.setAction(ACTION_PROGRESS);
88        progressIntent.putExtra("id", id);
89        progressIntent.putExtra("when", when);
90        progressIntent.putExtra("progress", progress);
91        context.startService(progressIntent);
92    }
93}
94