FillCallLogTestActivity.java revision 719a7adde25e0a717816b00668c16c3a1e3c5518
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; 2094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.app.LoaderManager; 2194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.content.ContentProviderClient; 2294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.content.ContentValues; 2394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.content.CursorLoader; 2494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.content.Loader; 2594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.database.Cursor; 2694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.os.AsyncTask; 2794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.os.Bundle; 2894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.os.RemoteException; 2994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.provider.CallLog.Calls; 3094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.util.Log; 3194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.view.View; 3294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.widget.Button; 3394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.widget.CheckBox; 3494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.widget.ProgressBar; 3594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.widget.TextView; 3694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport android.widget.Toast; 3794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 3894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport com.android.dialer.tests.R; 3994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 4094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengimport java.util.Random; 4194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 4294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng/** 4394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Activity to add entries to the call log for testing. 4494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 4594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Chengpublic class FillCallLogTestActivity extends Activity { 4694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final String TAG = "FillCallLogTestActivity"; 4794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** Identifier of the loader for querying the call log. */ 4894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final int CALLLOG_LOADER_ID = 1; 4994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 5094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final Random RNG = new Random(); 5194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static final int[] CALL_TYPES = new int[] { 5294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE, Calls.MISSED_TYPE, 5394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng }; 5494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 5594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private TextView mNumberTextView; 5694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private Button mAddButton; 5794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private ProgressBar mProgressBar; 5894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private CheckBox mUseRandomNumbers; 5994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 6094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 6194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng protected void onCreate(Bundle savedInstanceState) { 6294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng super.onCreate(savedInstanceState); 6394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng setContentView(R.layout.fill_call_log_test); 6494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mNumberTextView = (TextView) findViewById(R.id.number); 6594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mAddButton = (Button) findViewById(R.id.add); 6694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mProgressBar = (ProgressBar) findViewById(R.id.progress); 6794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mUseRandomNumbers = (CheckBox) findViewById(R.id.use_random_numbers); 6894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 6994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mAddButton.setOnClickListener(new View.OnClickListener(){ 7094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 7194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void onClick(View v) { 7294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng int count; 7394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng try { 7494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng count = Integer.parseInt(mNumberTextView.getText().toString()); 7594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (count > 100) { 7694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng throw new RuntimeException("Number too large. Max=100"); 7794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 7894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } catch (RuntimeException e) { 7994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Toast.makeText(FillCallLogTestActivity.this, e.toString(), Toast.LENGTH_LONG) 8094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng .show(); 8194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return; 8294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 8394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng addEntriesToCallLog(count, mUseRandomNumbers.isChecked()); 8494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mNumberTextView.setEnabled(false); 8594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mAddButton.setEnabled(false); 8694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mProgressBar.setProgress(0); 8794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mProgressBar.setMax(count); 8894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mProgressBar.setVisibility(View.VISIBLE); 8994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 9094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng }); 9194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 9294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 9394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 9494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Adds a number of entries to the call log. The content of the entries is based on existing 9594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * entries. 9694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 9794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @param count the number of entries to add 9894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 9994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void addEntriesToCallLog(final int count, boolean useRandomNumbers) { 10094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (useRandomNumbers) { 10194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng addRandomNumbers(count); 10294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } else { 10394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng getLoaderManager().initLoader(CALLLOG_LOADER_ID, null, 10494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng new CallLogLoaderListener(count)); 10594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 10694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 10794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 10894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 10994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Calls when the insertion has completed. 11094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 11194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @param message the message to show in a toast to the user 11294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 11394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void insertCompleted(String message) { 11494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Hide the progress bar. 11594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mProgressBar.setVisibility(View.GONE); 11694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Re-enable the add button. 11794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mNumberTextView.setEnabled(true); 11894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mAddButton.setEnabled(true); 11994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mNumberTextView.setText(""); 12094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Toast.makeText(this, message, Toast.LENGTH_LONG).show(); 12194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 12294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 12394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 12494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 12594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Creates a {@link ContentValues} object containing values corresponding to the given cursor. 12694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 12794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @param cursor the cursor from which to get the values 12894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @return a newly created content values object 12994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 13094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private ContentValues createContentValuesFromCursor(Cursor cursor) { 13194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ContentValues values = new ContentValues(); 13294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng for (int column = 0; column < cursor.getColumnCount(); 13394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ++column) { 13494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng String name = cursor.getColumnName(column); 13594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng switch (cursor.getType(column)) { 13694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng case Cursor.FIELD_TYPE_STRING: 13794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(name, cursor.getString(column)); 13894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng break; 13994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng case Cursor.FIELD_TYPE_INTEGER: 14094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(name, cursor.getLong(column)); 14194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng break; 14294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng case Cursor.FIELD_TYPE_FLOAT: 14394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(name, cursor.getDouble(column)); 14494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng break; 14594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng case Cursor.FIELD_TYPE_BLOB: 14694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(name, cursor.getBlob(column)); 14794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng break; 14894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng case Cursor.FIELD_TYPE_NULL: 14994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(name); 15094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng break; 15194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng default: 15294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.d(TAG, "Invalid value in cursor: " + cursor.getType(column)); 15394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng break; 15494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 15594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 15694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return values; 15794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 15894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 15994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private void addRandomNumbers(int count) { 16094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ContentValues[] values = new ContentValues[count]; 16194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng for (int i = 0; i < count; i++) { 16294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values[i] = new ContentValues(); 16394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values[i].put(Calls.NUMBER, generateRandomNumber()); 164719a7adde25e0a717816b00668c16c3a1e3c5518Jay Shrauner values[i].put(Calls.NUMBER_PRESENTATION, Calls.PRESENTATION_ALLOWED); 16594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values[i].put(Calls.DATE, System.currentTimeMillis()); // Will be randomized later 16694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values[i].put(Calls.DURATION, 1); // Will be overwritten later 16794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 16894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng new AsyncCallLogInserter(values).execute(new Void[0]); 16994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 17094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 17194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private static String generateRandomNumber() { 17294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return String.format("5%09d", RNG.nextInt(1000000000)); 17394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 17494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 17594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** Invokes {@link AsyncCallLogInserter} when the call log has loaded. */ 17694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private final class CallLogLoaderListener implements LoaderManager.LoaderCallbacks<Cursor> { 17794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** The number of items to insert when done. */ 17894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private final int mCount; 17994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 18094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private CallLogLoaderListener(int count) { 18194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mCount = count; 18294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 18394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 18494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 18594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public Loader<Cursor> onCreateLoader(int id, Bundle args) { 18694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.d(TAG, "onCreateLoader"); 18794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return new CursorLoader(FillCallLogTestActivity.this, Calls.CONTENT_URI, 18894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng null, null, null, null); 18994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 19094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 19194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 19294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 19394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng try { 19494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.d(TAG, "onLoadFinished"); 19594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 19694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (data.getCount() == 0) { 19794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // If there are no entries in the call log, we cannot generate new ones. 19894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng insertCompleted(getString(R.string.noLogEntriesToast)); 19994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return; 20094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 20194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 20294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng data.moveToPosition(-1); 20394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 20494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ContentValues[] values = new ContentValues[mCount]; 20594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng for (int index = 0; index < mCount; ++index) { 20694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (!data.moveToNext()) { 20794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng data.moveToFirst(); 20894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 20994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values[index] = createContentValuesFromCursor(data); 21094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 21194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng new AsyncCallLogInserter(values).execute(new Void[0]); 21294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } finally { 21394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // This is a one shot loader. 21494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng getLoaderManager().destroyLoader(CALLLOG_LOADER_ID); 21594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 21694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 21794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 21894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 21994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void onLoaderReset(Loader<Cursor> loader) {} 22094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 22194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 22294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** Inserts a given number of entries in the call log based on the values given. */ 22394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private final class AsyncCallLogInserter extends AsyncTask<Void, Integer, Integer> { 22494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** The number of items to insert. */ 22594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private final ContentValues[] mValues; 22694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 22794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public AsyncCallLogInserter(ContentValues[] values) { 22894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mValues = values; 22994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 23094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 23194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 23294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng protected Integer doInBackground(Void... params) { 23394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.d(TAG, "doInBackground"); 23494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return insertIntoCallLog(); 23594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 23694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 23794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 23894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng protected void onProgressUpdate(Integer... values) { 23994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.d(TAG, "onProgressUpdate"); 24094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng updateCount(values[0]); 24194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 24294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 24394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng @Override 24494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng protected void onPostExecute(Integer count) { 24594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.d(TAG, "onPostExecute"); 24694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng insertCompleted(getString(R.string.addedLogEntriesToast, count)); 24794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 24894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 24994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 25094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Inserts a number of entries in the call log based on the given templates. 25194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 25294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @return the number of inserted entries 25394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 25494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng private Integer insertIntoCallLog() { 25594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng int inserted = 0; 25694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 25794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng for (int index = 0; index < mValues.length; ++index) { 25894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ContentValues values = mValues[index]; 25994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // These should not be set. 26094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls._ID); 26194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Add some randomness to the date. For each new entry being added, add an extra 26294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // day to the maximum possible offset from the original. 26394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(Calls.DATE, 26494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.getAsLong(Calls.DATE) 26594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng - RNG.nextInt(24 * 60 * 60 * (index + 1)) * 1000L); 26694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Add some randomness to the duration. 26794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng if (values.getAsLong(Calls.DURATION) > 0) { 26894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(Calls.DURATION, RNG.nextInt(30 * 60 * 60 * 1000)); 26994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 27094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 27194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Overwrite type. 27294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.put(Calls.TYPE, CALL_TYPES[RNG.nextInt(CALL_TYPES.length)]); 27394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 27494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Clear cached columns. 27594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls.CACHED_FORMATTED_NUMBER); 27694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls.CACHED_LOOKUP_URI); 27794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls.CACHED_MATCHED_NUMBER); 27894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls.CACHED_NAME); 27994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls.CACHED_NORMALIZED_NUMBER); 28094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls.CACHED_NUMBER_LABEL); 28194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls.CACHED_NUMBER_TYPE); 28294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng values.putNull(Calls.CACHED_PHOTO_ID); 28394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 28494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng // Insert into the call log the newly generated entry. 28594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ContentProviderClient contentProvider = 28694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng getContentResolver().acquireContentProviderClient( 28794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Calls.CONTENT_URI); 28894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng try { 28994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.d(TAG, "adding entry to call log"); 29094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng contentProvider.insert(Calls.CONTENT_URI, values); 29194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng ++inserted; 29294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng this.publishProgress(inserted); 29394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } catch (RemoteException e) { 29494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng Log.d(TAG, "insert failed", e); 29594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 29694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 29794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng return inserted; 29894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 29994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 30094b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng 30194b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng /** 30294b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * Updates the count shown to the user corresponding to the number of entries added. 30394b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * 30494b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng * @param count the number of entries inserted so far 30594b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng */ 30694b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng public void updateCount(Integer count) { 30794b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng mProgressBar.setProgress(count); 30894b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng } 30994b10b530c0fc297e2974e57e094c500d3ee6003Chiao Cheng} 310