15f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren/* 25f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren * Copyright (C) 2013 The Android Open Source Project 35f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren * 45f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren * Licensed under the Apache License, Version 2.0 (the "License"); 55f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren * you may not use this file except in compliance with the License. 65f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren * You may obtain a copy of the License at 75f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren * 85f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren * http://www.apache.org/licenses/LICENSE-2.0 95f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren * 105f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren * Unless required by applicable law or agreed to in writing, software 115f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren * distributed under the License is distributed on an "AS IS" BASIS, 125f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren * See the License for the specific language governing permissions and 145f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren * limitations under the License. 155f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren */ 165f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren 175f710dd7fd51308ca618a33f27e0119cbf23977dChris Wrenpackage com.android.example.notificationshowcase; 185f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren 195f710dd7fd51308ca618a33f27e0119cbf23977dChris Wrenimport android.app.IntentService; 205f710dd7fd51308ca618a33f27e0119cbf23977dChris Wrenimport android.app.NotificationManager; 215f710dd7fd51308ca618a33f27e0119cbf23977dChris Wrenimport android.app.Service; 225f710dd7fd51308ca618a33f27e0119cbf23977dChris Wrenimport android.content.Context; 235f710dd7fd51308ca618a33f27e0119cbf23977dChris Wrenimport android.content.Intent; 245f710dd7fd51308ca618a33f27e0119cbf23977dChris Wrenimport android.os.Handler; 255f710dd7fd51308ca618a33f27e0119cbf23977dChris Wrenimport android.os.IBinder; 265f710dd7fd51308ca618a33f27e0119cbf23977dChris Wrenimport android.util.Log; 275f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren 285f710dd7fd51308ca618a33f27e0119cbf23977dChris Wrenpublic class ProgressService extends IntentService { 295f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren 305f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren private static final String TAG = "ProgressService"; 315f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren 325f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren private static final String ACTION_PROGRESS = "progress"; 335f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren 345f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren private Handler handler; 355f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren 365f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren public ProgressService() { 375f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren super(TAG); 385f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren } 395f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren public ProgressService(String name) { 405f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren super(name); 415f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren } 425f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren 435f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren class UpdateRunnable implements Runnable { 445f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren 455f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren private final int mId; 465f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren private final long mWhen; 475f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren private int mProgress; 485f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren 495f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren UpdateRunnable(int id, long when, int progress) { 505f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren mId = id; 515f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren mWhen = when; 525f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren mProgress = progress; 535f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren } 545f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren 555f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren @Override 565f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren public void run() { NotificationManager noMa = (NotificationManager) 575f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren getSystemService(Context.NOTIFICATION_SERVICE); 585f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren Log.v(TAG, "id: " + mId + " when: " + mWhen + " progress: " + mProgress); 595f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren noMa.notify(NotificationService.NOTIFICATION_ID + mId, 605f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren NotificationService.makeUploadNotification( 615f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren ProgressService.this, mProgress, mWhen)); 625f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren mProgress += 10; 635f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren if (mProgress <= 100) { 645f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren handler.postDelayed(this, 1000); 655f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren } 665f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren } 675f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren } 685f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren 695f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren @Override 705f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren public int onStartCommand(Intent intent, int flags, int startId) { 715f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren handler = new Handler(); 725f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren return super.onStartCommand(intent, flags, startId); 735f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren } 745f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren 755f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren 765f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren @Override 775f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren protected void onHandleIntent(Intent intent) { 785f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren final int id = intent.getIntExtra("id", 0); 795f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren final long when = intent.getLongExtra("when", 0L); 805f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren int progress = intent.getIntExtra("progress", 0); 815f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren handler.postDelayed(new UpdateRunnable(id, when, progress), 1000); 825f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren } 835f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren 845f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren public static void startProgressUpdater(Context context, int id, long when, int progress) { 855f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren Intent progressIntent = new Intent(context, ProgressService.class); 865f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren progressIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 875f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren progressIntent.setAction(ACTION_PROGRESS); 885f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren progressIntent.putExtra("id", id); 895f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren progressIntent.putExtra("when", when); 905f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren progressIntent.putExtra("progress", progress); 915f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren context.startService(progressIntent); 925f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren } 935f710dd7fd51308ca618a33f27e0119cbf23977dChris Wren} 94