FillCallLogTestActivity.java revision 87ba489564b25d4a64c9faaeafea46e2f72d8933
194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng/* 294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Copyright (C) 2011 The Android Open Source Project 394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License"); 594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * you may not use this file except in compliance with the License. 694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * You may obtain a copy of the License at 794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * http://www.apache.org/licenses/LICENSE-2.0 994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 1094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Unless required by applicable law or agreed to in writing, software 1194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS, 1294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * See the License for the specific language governing permissions and 1494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * limitations under the License. 1594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 1694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 1794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengpackage com.android.dialer.tests.calllog; 1894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 1994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.app.Activity; 20ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunnimport android.app.DatePickerDialog; 21ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunnimport android.app.Dialog; 22ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunnimport android.app.DialogFragment; 2394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.app.LoaderManager; 24ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunnimport android.app.TimePickerDialog; 2594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.content.ContentProviderClient; 2694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.content.ContentValues; 2794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.content.CursorLoader; 2894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.content.Loader; 2994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.database.Cursor; 3094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.os.AsyncTask; 3194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.os.Bundle; 3294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.os.RemoteException; 3394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.provider.CallLog.Calls; 3487ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chenimport android.telecomm.Subscription; 3587ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chenimport android.telephony.TelephonyManager; 36ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunnimport android.text.format.DateFormat; 3794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.util.Log; 3894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.view.View; 3994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.widget.Button; 4094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.widget.CheckBox; 41ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunnimport android.widget.DatePicker; 42838fe3f3dee69db20a978f43f2b3bec987527664Tyler Gunnimport android.widget.EditText; 4394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.widget.ProgressBar; 44ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunnimport android.widget.RadioButton; 4594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.widget.TextView; 46ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunnimport android.widget.TimePicker; 4794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.widget.Toast; 4894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 4994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport com.android.dialer.tests.R; 5094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 51ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunnimport java.util.Calendar; 5287ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chenimport java.util.List; 5394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport java.util.Random; 5494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 5594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng/** 5694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Activity to add entries to the call log for testing. 5794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 5894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengpublic class FillCallLogTestActivity extends Activity { 5994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final String TAG = "FillCallLogTestActivity"; 6094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** Identifier of the loader for querying the call log. */ 6194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final int CALLLOG_LOADER_ID = 1; 6294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 6394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final Random RNG = new Random(); 6494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final int[] CALL_TYPES = new int[] { 6594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE, Calls.MISSED_TYPE, 6694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng }; 6794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 6894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private TextView mNumberTextView; 6994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private Button mAddButton; 7094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private ProgressBar mProgressBar; 7194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private CheckBox mUseRandomNumbers; 72ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private RadioButton mCallTypeIncoming; 73ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private RadioButton mCallTypeMissed; 74ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private RadioButton mCallTypeOutgoing; 75ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private RadioButton mPresentationAllowed; 76ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private RadioButton mPresentationRestricted; 77ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private RadioButton mPresentationUnknown; 78ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private RadioButton mPresentationPayphone; 79ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private TextView mCallDate; 80ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private TextView mCallTime; 81ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private TextView mPhoneNumber; 82838fe3f3dee69db20a978f43f2b3bec987527664Tyler Gunn private EditText mOffset; 83ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 84ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private int mCallTimeHour; 85ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private int mCallTimeMinute; 86ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private int mCallDateYear; 87ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private int mCallDateMonth; 88ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private int mCallDateDay; 8987ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen private RadioButton mSubscription0; 9087ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen private RadioButton mSubscription1; 9194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 9294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 9394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng protected void onCreate(Bundle savedInstanceState) { 9494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng super.onCreate(savedInstanceState); 9594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng setContentView(R.layout.fill_call_log_test); 9694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mNumberTextView = (TextView) findViewById(R.id.number); 9794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mAddButton = (Button) findViewById(R.id.add); 9894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mProgressBar = (ProgressBar) findViewById(R.id.progress); 9994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mUseRandomNumbers = (CheckBox) findViewById(R.id.use_random_numbers); 10094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 10194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mAddButton.setOnClickListener(new View.OnClickListener(){ 10294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 10394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void onClick(View v) { 10494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng int count; 10594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng try { 10694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng count = Integer.parseInt(mNumberTextView.getText().toString()); 10794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (count > 100) { 10894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng throw new RuntimeException("Number too large. Max=100"); 10994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 11094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } catch (RuntimeException e) { 11194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Toast.makeText(FillCallLogTestActivity.this, e.toString(), Toast.LENGTH_LONG) 11294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng .show(); 11394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return; 11494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 11594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng addEntriesToCallLog(count, mUseRandomNumbers.isChecked()); 11694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mNumberTextView.setEnabled(false); 11794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mAddButton.setEnabled(false); 11894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mProgressBar.setProgress(0); 11994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mProgressBar.setMax(count); 12094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mProgressBar.setVisibility(View.VISIBLE); 12194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 12294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng }); 123ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 124ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallTypeIncoming = (RadioButton) findViewById(R.id.call_type_incoming); 125ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallTypeMissed = (RadioButton) findViewById(R.id.call_type_missed); 126ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallTypeOutgoing = (RadioButton) findViewById(R.id.call_type_outgoing); 127ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mPresentationAllowed = (RadioButton) findViewById(R.id.presentation_allowed); 128ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mPresentationPayphone = (RadioButton) findViewById(R.id.presentation_payphone); 129ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mPresentationUnknown = (RadioButton) findViewById(R.id.presentation_unknown); 130ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mPresentationRestricted = (RadioButton) findViewById(R.id.presentation_restricted); 131ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallTime = (TextView) findViewById(R.id.call_time); 132ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallDate = (TextView) findViewById(R.id.call_date); 133ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mPhoneNumber = (TextView) findViewById(R.id.phone_number); 134838fe3f3dee69db20a978f43f2b3bec987527664Tyler Gunn mOffset = (EditText) findViewById(R.id.delta_after_add); 13587ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen mSubscription0 = (RadioButton) findViewById(R.id.subscription0); 13687ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen mSubscription1 = (RadioButton) findViewById(R.id.subscription1); 137ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 138ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn // Use the current time as the default values for the picker 139ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn final Calendar c = Calendar.getInstance(); 140ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallTimeHour = c.get(Calendar.HOUR_OF_DAY); 141ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallTimeMinute = c.get(Calendar.MINUTE); 142ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallDateYear = c.get(Calendar.YEAR); 143ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallDateMonth = c.get(Calendar.MONTH); 144ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallDateDay = c.get(Calendar.DAY_OF_MONTH); 145ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn setDisplayDate(); 146ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn setDisplayTime(); 14794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 14894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 14994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 15094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Adds a number of entries to the call log. The content of the entries is based on existing 15194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * entries. 15294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 15394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @param count the number of entries to add 15494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 15594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void addEntriesToCallLog(final int count, boolean useRandomNumbers) { 15694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (useRandomNumbers) { 15794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng addRandomNumbers(count); 15894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } else { 15994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng getLoaderManager().initLoader(CALLLOG_LOADER_ID, null, 16094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng new CallLogLoaderListener(count)); 16194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 16294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 16394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 16494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 16594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Calls when the insertion has completed. 16694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 16794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @param message the message to show in a toast to the user 16894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 16994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void insertCompleted(String message) { 17094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Hide the progress bar. 17194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mProgressBar.setVisibility(View.GONE); 17294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Re-enable the add button. 17394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mNumberTextView.setEnabled(true); 17494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mAddButton.setEnabled(true); 17594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mNumberTextView.setText(""); 17694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Toast.makeText(this, message, Toast.LENGTH_LONG).show(); 17794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 17894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 17994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 18094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 18194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Creates a {@link ContentValues} object containing values corresponding to the given cursor. 18294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 18394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @param cursor the cursor from which to get the values 18494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @return a newly created content values object 18594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 18694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private ContentValues createContentValuesFromCursor(Cursor cursor) { 18794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ContentValues values = new ContentValues(); 18894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng for (int column = 0; column < cursor.getColumnCount(); 18994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ++column) { 19094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng String name = cursor.getColumnName(column); 19194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng switch (cursor.getType(column)) { 19294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng case Cursor.FIELD_TYPE_STRING: 19394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(name, cursor.getString(column)); 19494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng break; 19594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng case Cursor.FIELD_TYPE_INTEGER: 19694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(name, cursor.getLong(column)); 19794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng break; 19894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng case Cursor.FIELD_TYPE_FLOAT: 19994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(name, cursor.getDouble(column)); 20094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng break; 20194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng case Cursor.FIELD_TYPE_BLOB: 20294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(name, cursor.getBlob(column)); 20394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng break; 20494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng case Cursor.FIELD_TYPE_NULL: 20594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(name); 20694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng break; 20794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng default: 20894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.d(TAG, "Invalid value in cursor: " + cursor.getType(column)); 20994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng break; 21094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 21194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 21294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return values; 21394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 21494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 21594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void addRandomNumbers(int count) { 21694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ContentValues[] values = new ContentValues[count]; 21794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng for (int i = 0; i < count; i++) { 21894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values[i] = new ContentValues(); 21994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values[i].put(Calls.NUMBER, generateRandomNumber()); 220719a7adde25e0a717816b00668c16c3a1e3c5518Jay Shrauner values[i].put(Calls.NUMBER_PRESENTATION, Calls.PRESENTATION_ALLOWED); 22194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values[i].put(Calls.DATE, System.currentTimeMillis()); // Will be randomized later 22294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values[i].put(Calls.DURATION, 1); // Will be overwritten later 22394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 22494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng new AsyncCallLogInserter(values).execute(new Void[0]); 22594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 22694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 22794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static String generateRandomNumber() { 22894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return String.format("5%09d", RNG.nextInt(1000000000)); 22994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 23094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 23194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** Invokes {@link AsyncCallLogInserter} when the call log has loaded. */ 23294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private final class CallLogLoaderListener implements LoaderManager.LoaderCallbacks<Cursor> { 23394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** The number of items to insert when done. */ 23494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private final int mCount; 23594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 23694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private CallLogLoaderListener(int count) { 23794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mCount = count; 23894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 23994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 24094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 24194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public Loader<Cursor> onCreateLoader(int id, Bundle args) { 24294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.d(TAG, "onCreateLoader"); 24394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return new CursorLoader(FillCallLogTestActivity.this, Calls.CONTENT_URI, 24494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng null, null, null, null); 24594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 24694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 24794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 24894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 24994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng try { 25094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.d(TAG, "onLoadFinished"); 25194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 25294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (data.getCount() == 0) { 25394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // If there are no entries in the call log, we cannot generate new ones. 25494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng insertCompleted(getString(R.string.noLogEntriesToast)); 25594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return; 25694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 25794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 25894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng data.moveToPosition(-1); 25994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 26094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ContentValues[] values = new ContentValues[mCount]; 26194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng for (int index = 0; index < mCount; ++index) { 26294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (!data.moveToNext()) { 26394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng data.moveToFirst(); 26494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 26594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values[index] = createContentValuesFromCursor(data); 26694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 26794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng new AsyncCallLogInserter(values).execute(new Void[0]); 26894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } finally { 26994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // This is a one shot loader. 27094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng getLoaderManager().destroyLoader(CALLLOG_LOADER_ID); 27194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 27294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 27394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 27494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 27594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void onLoaderReset(Loader<Cursor> loader) {} 27694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 27794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 27894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** Inserts a given number of entries in the call log based on the values given. */ 27994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private final class AsyncCallLogInserter extends AsyncTask<Void, Integer, Integer> { 28094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** The number of items to insert. */ 28194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private final ContentValues[] mValues; 28294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 28394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public AsyncCallLogInserter(ContentValues[] values) { 28494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mValues = values; 28594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 28694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 28794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 28894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng protected Integer doInBackground(Void... params) { 28994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.d(TAG, "doInBackground"); 29094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return insertIntoCallLog(); 29194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 29294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 29394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 29494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng protected void onProgressUpdate(Integer... values) { 29594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.d(TAG, "onProgressUpdate"); 29694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng updateCount(values[0]); 29794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 29894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 29994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 30094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng protected void onPostExecute(Integer count) { 30194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.d(TAG, "onPostExecute"); 30294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng insertCompleted(getString(R.string.addedLogEntriesToast, count)); 30394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 30494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 30594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 30694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Inserts a number of entries in the call log based on the given templates. 30794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 30894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @return the number of inserted entries 30994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 31094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private Integer insertIntoCallLog() { 31194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng int inserted = 0; 31294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 31394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng for (int index = 0; index < mValues.length; ++index) { 31494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ContentValues values = mValues[index]; 31594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // These should not be set. 31694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls._ID); 31794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Add some randomness to the date. For each new entry being added, add an extra 31894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // day to the maximum possible offset from the original. 31994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(Calls.DATE, 32094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.getAsLong(Calls.DATE) 32194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng - RNG.nextInt(24 * 60 * 60 * (index + 1)) * 1000L); 32294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Add some randomness to the duration. 32394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (values.getAsLong(Calls.DURATION) > 0) { 32494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(Calls.DURATION, RNG.nextInt(30 * 60 * 60 * 1000)); 32594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 32694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 32794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Overwrite type. 32894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(Calls.TYPE, CALL_TYPES[RNG.nextInt(CALL_TYPES.length)]); 32994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 33094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Clear cached columns. 33194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls.CACHED_FORMATTED_NUMBER); 33294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls.CACHED_LOOKUP_URI); 33394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls.CACHED_MATCHED_NUMBER); 33494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls.CACHED_NAME); 33594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls.CACHED_NORMALIZED_NUMBER); 33694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls.CACHED_NUMBER_LABEL); 33794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls.CACHED_NUMBER_TYPE); 33894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls.CACHED_PHOTO_ID); 33994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 34094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Insert into the call log the newly generated entry. 34194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ContentProviderClient contentProvider = 34294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng getContentResolver().acquireContentProviderClient( 34394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Calls.CONTENT_URI); 34494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng try { 34594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.d(TAG, "adding entry to call log"); 34694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng contentProvider.insert(Calls.CONTENT_URI, values); 34794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ++inserted; 34894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng this.publishProgress(inserted); 34994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } catch (RemoteException e) { 35094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.d(TAG, "insert failed", e); 35194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 35294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 35394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return inserted; 35494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 35594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 35694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 35794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 35894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Updates the count shown to the user corresponding to the number of entries added. 35994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 36094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @param count the number of entries inserted so far 36194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 36294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void updateCount(Integer count) { 36394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mProgressBar.setProgress(count); 36494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 365ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 366ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn /** 367ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn * Determines the call type for a manually entered call. 368ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn * 369ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn * @return Call type. 370ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn */ 371ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private int getManualCallType() { 372ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn if (mCallTypeIncoming.isChecked()) { 373ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn return Calls.INCOMING_TYPE; 374ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } else if (mCallTypeOutgoing.isChecked()) { 375ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn return Calls.OUTGOING_TYPE; 376ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } else { 377ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn return Calls.MISSED_TYPE; 378ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } 379ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } 380ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 381ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn /** 382ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn * Determines the presentation for a manually entered call. 383ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn * 384ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn * @return Presentation. 385ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn */ 386ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private int getManualPresentation() { 387ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn if (mPresentationAllowed.isChecked()) { 388ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn return Calls.PRESENTATION_ALLOWED; 389ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } else if (mPresentationPayphone.isChecked()) { 390ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn return Calls.PRESENTATION_PAYPHONE; 391ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } else if (mPresentationRestricted.isChecked()) { 392ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn return Calls.PRESENTATION_RESTRICTED; 393ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } else { 394ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn return Calls.PRESENTATION_UNKNOWN; 395ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } 396ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } 397ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 39887ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen private Subscription getManualSubscription() { 39987ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen TelephonyManager telephonyManager = new TelephonyManager(this); 40087ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen List <Subscription> subscriptions = telephonyManager.getSubscriptions(); 40187ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen if (mSubscription0.isChecked()) { 40287ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen return subscriptions.get(0); 40387ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen } else if (mSubscription1.isChecked()){ 40487ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen return subscriptions.get(1); 40587ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen } else { 40687ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen return null; 40787ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen } 40887ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen } 40987ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen 410ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn /** 411ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn * Shows a time picker dialog, storing the results in the time field. 412ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn */ 413ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn public void showTimePickerDialog(View v) { 414ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn DialogFragment newFragment = new TimePickerFragment(); 415ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn newFragment.show(getFragmentManager(),"timePicker"); 416ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } 417ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 418ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn /** 419ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn * Helper class to display time picker and store the hour/minute. 420ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn */ 421ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn public class TimePickerFragment extends DialogFragment 422ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn implements TimePickerDialog.OnTimeSetListener { 423ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 424ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn @Override 425ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn public Dialog onCreateDialog(Bundle savedInstanceState) { 426ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn // Create a new instance of TimePickerDialog and return it 427ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn return new TimePickerDialog(getActivity(), this, mCallTimeHour, mCallTimeMinute, 428ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn DateFormat.is24HourFormat(getActivity())); 429ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } 430ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 431ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 432ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallTimeHour = hourOfDay; 433ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallTimeMinute = minute; 434ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn setDisplayTime(); 435ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } 436ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } 437ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 438ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn /** 439ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn * Sets the call time TextView to the current selected time. 440ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn */ 441ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private void setDisplayTime() { 442ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallTime.setText(String.format("%02d:%02d", mCallTimeHour, mCallTimeMinute)); 443ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } 444ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 445ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn /** 446ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn * Sets the call date Textview to the current selected date 447ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn */ 448ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn private void setDisplayDate() { 449ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallDate.setText(String.format("%04d-%02d-%02d", mCallDateYear, mCallDateMonth, 450ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallDateDay)); 451ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } 452ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 453ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn /** 454ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn * Shows a date picker dialog. 455ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn */ 456ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn public void showDatePickerDialog(View v) { 457ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn DialogFragment newFragment = new DatePickerFragment(); 458ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn newFragment.show(getFragmentManager(),"datePicker"); 459ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } 460ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 461ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn /** 462ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn * Helper class to show a date picker. 463ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn */ 464ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn public class DatePickerFragment extends DialogFragment 465ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn implements DatePickerDialog.OnDateSetListener { 466ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 467ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn @Override 468ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn public Dialog onCreateDialog(Bundle savedInstanceState) { 469ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn // Create a new instance of DatePickerDialog and return it 470ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn return new DatePickerDialog(getActivity(), this, mCallDateYear, mCallDateMonth, 471ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallDateDay); 472ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } 473ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 474ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn public void onDateSet(DatePicker view, int year, int month, int day) { 475ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallDateYear = year; 476ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallDateMonth = month; 477ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn mCallDateDay = day; 478ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn setDisplayDate(); 479ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } 480ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } 481ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 482ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn /** 483ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn * OnClick handler for the button that adds a manual call log entry to the call log. 484ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn * 485ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn * @param v Calling view. 486ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn */ 487ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn public void addManualEntry(View v) { 488ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn Calendar dateTime = Calendar.getInstance(); 489ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn dateTime.set(mCallDateYear, mCallDateMonth, mCallDateDay, mCallTimeHour, mCallTimeMinute); 490ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 491ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn Calls.addCall(null, this, mPhoneNumber.getText().toString(), getManualPresentation(), 49287ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen getManualCallType(), getManualSubscription(), dateTime.getTimeInMillis(), 49387ba489564b25d4a64c9faaeafea46e2f72d8933Nancy Chen RNG.nextInt(60 * 60)); 494ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn 495838fe3f3dee69db20a978f43f2b3bec987527664Tyler Gunn // Subtract offset from the call date/time and store as new date/time 496838fe3f3dee69db20a978f43f2b3bec987527664Tyler Gunn int offset = Integer.parseInt(mOffset.getText().toString()); 497838fe3f3dee69db20a978f43f2b3bec987527664Tyler Gunn 498838fe3f3dee69db20a978f43f2b3bec987527664Tyler Gunn dateTime.add(Calendar.MINUTE, offset); 499838fe3f3dee69db20a978f43f2b3bec987527664Tyler Gunn mCallDateYear = dateTime.get(Calendar.YEAR); 500838fe3f3dee69db20a978f43f2b3bec987527664Tyler Gunn mCallDateMonth = dateTime.get(Calendar.MONTH); 501838fe3f3dee69db20a978f43f2b3bec987527664Tyler Gunn mCallDateDay = dateTime.get(Calendar.DAY_OF_MONTH); 502838fe3f3dee69db20a978f43f2b3bec987527664Tyler Gunn mCallTimeHour = dateTime.get(Calendar.HOUR_OF_DAY); 503838fe3f3dee69db20a978f43f2b3bec987527664Tyler Gunn mCallTimeMinute = dateTime.get(Calendar.MINUTE); 504838fe3f3dee69db20a978f43f2b3bec987527664Tyler Gunn setDisplayDate(); 505838fe3f3dee69db20a978f43f2b3bec987527664Tyler Gunn setDisplayTime(); 506ebba68a0da51fa58c93e12df8557b65a2fb37f24Tyler Gunn } 50794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng} 508