Back to project page SampleAndroidL.
The source code is released under:
GNU General Public License
If you think the Android project SampleAndroidL listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/* * Copyright 2013 The Android Open Source Project *//from ww w . j a v a 2 s. c om * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.fingerlinks.mobile.android.samplel; import android.app.Activity; import android.app.job.JobInfo; import android.app.job.JobParameters; import android.app.job.JobScheduler; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.Messenger; import android.text.TextUtils; import android.view.View; import android.widget.CheckBox; import android.widget.EditText; import android.widget.RadioButton; import android.widget.TextView; import android.widget.Toast; import org.fingerlinks.mobile.android.samplel.service.TestJobService; public class TestJobServiceActivity extends Activity { private static final String TAG = "MainActivity"; public static final int MSG_UNCOLOUR_START = 0; public static final int MSG_UNCOLOUR_STOP = 1; public static final int MSG_SERVICE_OBJ = 2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_job_service); Resources res = getResources(); defaultColor = res.getColor(R.color.none_received); startJobColor = res.getColor(R.color.start_received); stopJobColor = res.getColor(R.color.stop_received); // Set up UI. mShowStartView = (TextView) findViewById(R.id.onstart_textview); mShowStopView = (TextView) findViewById(R.id.onstop_textview); mParamsTextView = (TextView) findViewById(R.id.task_params); mDelayEditText = (EditText) findViewById(R.id.delay_time); mDeadlineEditText = (EditText) findViewById(R.id.deadline_time); mWiFiConnectivityRadioButton = (RadioButton) findViewById(R.id.checkbox_unmetered); mAnyConnectivityRadioButton = (RadioButton) findViewById(R.id.checkbox_any); mRequiresChargingCheckBox = (CheckBox) findViewById(R.id.checkbox_charging); mRequiresIdleCheckbox = (CheckBox) findViewById(R.id.checkbox_idle); mServiceComponent = new ComponentName(this, TestJobService.class); // Start service and provide it a way to communicate with us. Intent startServiceIntent = new Intent(this, TestJobService.class); startServiceIntent.putExtra("messenger", new Messenger(mHandler)); startService(startServiceIntent); } // UI fields. int defaultColor; int startJobColor; int stopJobColor; private TextView mShowStartView; private TextView mShowStopView; private TextView mParamsTextView; private EditText mDelayEditText; private EditText mDeadlineEditText; private RadioButton mWiFiConnectivityRadioButton; private RadioButton mAnyConnectivityRadioButton; private CheckBox mRequiresChargingCheckBox; private CheckBox mRequiresIdleCheckbox; ComponentName mServiceComponent; /** Service object to interact scheduled jobs. */ TestJobService mTestService; private static int kJobId = 0; Handler mHandler = new Handler(/* default looper */) { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_UNCOLOUR_START: mShowStartView.setBackgroundColor(defaultColor); break; case MSG_UNCOLOUR_STOP: mShowStopView.setBackgroundColor(defaultColor); break; case MSG_SERVICE_OBJ: mTestService = (TestJobService) msg.obj; mTestService.setUiCallback(TestJobServiceActivity.this); } } }; private boolean ensureTestService() { if (mTestService == null) { Toast.makeText(TestJobServiceActivity.this, "Service null, never got callback?", Toast.LENGTH_SHORT).show(); return false; } return true; } /** * UI onclick listener to schedule a job. What this job is is defined in * TestJobService#scheduleJob(). */ public void scheduleJob(View v) { if (!ensureTestService()) { return; } JobInfo.Builder builder = new JobInfo.Builder(kJobId++, mServiceComponent); String delay = mDelayEditText.getText().toString(); if (delay != null && !TextUtils.isEmpty(delay)) { builder.setMinimumLatency(Long.valueOf(delay) * 1000); } String deadline = mDeadlineEditText.getText().toString(); if (deadline != null && !TextUtils.isEmpty(deadline)) { builder.setOverrideDeadline(Long.valueOf(deadline) * 1000); } boolean requiresUnmetered = mWiFiConnectivityRadioButton.isChecked(); boolean requiresAnyConnectivity = mAnyConnectivityRadioButton.isChecked(); if (requiresUnmetered) { builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED); } else if (requiresAnyConnectivity) { builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); } builder.setRequiresDeviceIdle(mRequiresIdleCheckbox.isChecked()); builder.setRequiresCharging(mRequiresChargingCheckBox.isChecked()); mTestService.scheduleJob(builder.build()); } public void cancelAllJobs(View v) { /*JobScheduler tm = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE); tm.cancelAll();*/ } /** * UI onclick listener to call jobFinished() in our service. */ public void finishJob(View v) { if (!ensureTestService()) { return; } mTestService.callJobFinished(); mParamsTextView.setText(""); } /** * Receives callback from the service when a job has landed * on the app. Colours the UI and post a message to * uncolour it after a second. */ public void onReceivedStartJob(JobParameters params) { mShowStartView.setBackgroundColor(startJobColor); Message m = Message.obtain(mHandler, MSG_UNCOLOUR_START); mHandler.sendMessageDelayed(m, 1000L); // uncolour in 1 second. mParamsTextView.setText("Executing: " + params.getJobId() + " " + params.getExtras()); } /** * Receives callback from the service when a job that * previously landed on the app must stop executing. * Colours the UI and post a message to uncolour it after a * second. */ public void onReceivedStopJob() { mShowStopView.setBackgroundColor(stopJobColor); Message m = Message.obtain(mHandler, MSG_UNCOLOUR_STOP); mHandler.sendMessageDelayed(m, 2000L); // uncolour in 1 second. mParamsTextView.setText(""); } }