156e1b4d8207e9ae177111bc824877a780723287bChris Wren/* 256e1b4d8207e9ae177111bc824877a780723287bChris Wren * Copyright (C) 2013 The Android Open Source Project 356e1b4d8207e9ae177111bc824877a780723287bChris Wren * 456e1b4d8207e9ae177111bc824877a780723287bChris Wren * Licensed under the Apache License, Version 2.0 (the "License"); 556e1b4d8207e9ae177111bc824877a780723287bChris Wren * you may not use this file except in compliance with the License. 656e1b4d8207e9ae177111bc824877a780723287bChris Wren * You may obtain a copy of the License at 756e1b4d8207e9ae177111bc824877a780723287bChris Wren * 856e1b4d8207e9ae177111bc824877a780723287bChris Wren * http://www.apache.org/licenses/LICENSE-2.0 956e1b4d8207e9ae177111bc824877a780723287bChris Wren * 1056e1b4d8207e9ae177111bc824877a780723287bChris Wren * Unless required by applicable law or agreed to in writing, software 1156e1b4d8207e9ae177111bc824877a780723287bChris Wren * distributed under the License is distributed on an "AS IS" BASIS, 1256e1b4d8207e9ae177111bc824877a780723287bChris Wren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1356e1b4d8207e9ae177111bc824877a780723287bChris Wren * See the License for the specific language governing permissions and 1456e1b4d8207e9ae177111bc824877a780723287bChris Wren * limitations under the License. 1556e1b4d8207e9ae177111bc824877a780723287bChris Wren */ 1656e1b4d8207e9ae177111bc824877a780723287bChris Wren 1756e1b4d8207e9ae177111bc824877a780723287bChris Wrenpackage com.android.example.notificationshowcase; 1856e1b4d8207e9ae177111bc824877a780723287bChris Wren 1956e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.app.IntentService; 2056e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.app.NotificationManager; 2156e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.app.Service; 2256e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.content.Context; 2356e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.content.Intent; 2456e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.os.Handler; 2556e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.os.IBinder; 2656e1b4d8207e9ae177111bc824877a780723287bChris Wrenimport android.util.Log; 2756e1b4d8207e9ae177111bc824877a780723287bChris Wren 2856e1b4d8207e9ae177111bc824877a780723287bChris Wrenpublic class ProgressService extends IntentService { 2956e1b4d8207e9ae177111bc824877a780723287bChris Wren 3056e1b4d8207e9ae177111bc824877a780723287bChris Wren private static final String TAG = "ProgressService"; 3156e1b4d8207e9ae177111bc824877a780723287bChris Wren 3256e1b4d8207e9ae177111bc824877a780723287bChris Wren private static final String ACTION_PROGRESS = "progress"; 3356e1b4d8207e9ae177111bc824877a780723287bChris Wren 3456e1b4d8207e9ae177111bc824877a780723287bChris Wren private Handler handler; 3556e1b4d8207e9ae177111bc824877a780723287bChris Wren 3656e1b4d8207e9ae177111bc824877a780723287bChris Wren public ProgressService() { 3756e1b4d8207e9ae177111bc824877a780723287bChris Wren super(TAG); 3856e1b4d8207e9ae177111bc824877a780723287bChris Wren } 3956e1b4d8207e9ae177111bc824877a780723287bChris Wren public ProgressService(String name) { 4056e1b4d8207e9ae177111bc824877a780723287bChris Wren super(name); 4156e1b4d8207e9ae177111bc824877a780723287bChris Wren } 4256e1b4d8207e9ae177111bc824877a780723287bChris Wren 4356e1b4d8207e9ae177111bc824877a780723287bChris Wren class UpdateRunnable implements Runnable { 4456e1b4d8207e9ae177111bc824877a780723287bChris Wren 4556e1b4d8207e9ae177111bc824877a780723287bChris Wren private final int mId; 4656e1b4d8207e9ae177111bc824877a780723287bChris Wren private final long mWhen; 4756e1b4d8207e9ae177111bc824877a780723287bChris Wren private int mProgress; 4856e1b4d8207e9ae177111bc824877a780723287bChris Wren 4956e1b4d8207e9ae177111bc824877a780723287bChris Wren UpdateRunnable(int id, long when, int progress) { 5056e1b4d8207e9ae177111bc824877a780723287bChris Wren mId = id; 5156e1b4d8207e9ae177111bc824877a780723287bChris Wren mWhen = when; 5256e1b4d8207e9ae177111bc824877a780723287bChris Wren mProgress = progress; 5356e1b4d8207e9ae177111bc824877a780723287bChris Wren } 5456e1b4d8207e9ae177111bc824877a780723287bChris Wren 5556e1b4d8207e9ae177111bc824877a780723287bChris Wren @Override 5656e1b4d8207e9ae177111bc824877a780723287bChris Wren public void run() { NotificationManager noMa = (NotificationManager) 5756e1b4d8207e9ae177111bc824877a780723287bChris Wren getSystemService(Context.NOTIFICATION_SERVICE); 5856e1b4d8207e9ae177111bc824877a780723287bChris Wren Log.v(TAG, "id: " + mId + " when: " + mWhen + " progress: " + mProgress); 5956e1b4d8207e9ae177111bc824877a780723287bChris Wren noMa.notify(NotificationService.NOTIFICATION_ID + mId, 6056e1b4d8207e9ae177111bc824877a780723287bChris Wren NotificationService.makeUploadNotification( 6156e1b4d8207e9ae177111bc824877a780723287bChris Wren ProgressService.this, mProgress, mWhen)); 627e3e666f243586c0dc97853ce92bee9e4f4d1d3bChris Wren mProgress += 2; 6356e1b4d8207e9ae177111bc824877a780723287bChris Wren if (mProgress <= 100) { 6456e1b4d8207e9ae177111bc824877a780723287bChris Wren handler.postDelayed(this, 1000); 6556e1b4d8207e9ae177111bc824877a780723287bChris Wren } 6656e1b4d8207e9ae177111bc824877a780723287bChris Wren } 6756e1b4d8207e9ae177111bc824877a780723287bChris Wren } 6856e1b4d8207e9ae177111bc824877a780723287bChris Wren 6956e1b4d8207e9ae177111bc824877a780723287bChris Wren @Override 7056e1b4d8207e9ae177111bc824877a780723287bChris Wren public int onStartCommand(Intent intent, int flags, int startId) { 7156e1b4d8207e9ae177111bc824877a780723287bChris Wren handler = new Handler(); 7256e1b4d8207e9ae177111bc824877a780723287bChris Wren return super.onStartCommand(intent, flags, startId); 7356e1b4d8207e9ae177111bc824877a780723287bChris Wren } 7456e1b4d8207e9ae177111bc824877a780723287bChris Wren 7556e1b4d8207e9ae177111bc824877a780723287bChris Wren 7656e1b4d8207e9ae177111bc824877a780723287bChris Wren @Override 7756e1b4d8207e9ae177111bc824877a780723287bChris Wren protected void onHandleIntent(Intent intent) { 7856e1b4d8207e9ae177111bc824877a780723287bChris Wren final int id = intent.getIntExtra("id", 0); 7956e1b4d8207e9ae177111bc824877a780723287bChris Wren final long when = intent.getLongExtra("when", 0L); 8056e1b4d8207e9ae177111bc824877a780723287bChris Wren int progress = intent.getIntExtra("progress", 0); 8156e1b4d8207e9ae177111bc824877a780723287bChris Wren handler.postDelayed(new UpdateRunnable(id, when, progress), 1000); 8256e1b4d8207e9ae177111bc824877a780723287bChris Wren } 8356e1b4d8207e9ae177111bc824877a780723287bChris Wren 8456e1b4d8207e9ae177111bc824877a780723287bChris Wren public static void startProgressUpdater(Context context, int id, long when, int progress) { 8556e1b4d8207e9ae177111bc824877a780723287bChris Wren Intent progressIntent = new Intent(context, ProgressService.class); 8656e1b4d8207e9ae177111bc824877a780723287bChris Wren progressIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 8756e1b4d8207e9ae177111bc824877a780723287bChris Wren progressIntent.setAction(ACTION_PROGRESS); 8856e1b4d8207e9ae177111bc824877a780723287bChris Wren progressIntent.putExtra("id", id); 8956e1b4d8207e9ae177111bc824877a780723287bChris Wren progressIntent.putExtra("when", when); 9056e1b4d8207e9ae177111bc824877a780723287bChris Wren progressIntent.putExtra("progress", progress); 9156e1b4d8207e9ae177111bc824877a780723287bChris Wren context.startService(progressIntent); 9256e1b4d8207e9ae177111bc824877a780723287bChris Wren } 9356e1b4d8207e9ae177111bc824877a780723287bChris Wren} 94