diff options
-rw-r--r-- | res/anim/slide_in.xml | 20 | ||||
-rw-r--r-- | res/anim/slide_in_right.xml | 21 | ||||
-rw-r--r-- | res/anim/slide_out.xml | 20 | ||||
-rw-r--r-- | res/anim/slide_out_right.xml | 21 | ||||
-rw-r--r-- | res/values/animation_constants.xml | 2 | ||||
-rw-r--r-- | res/values/strings.xml | 10 | ||||
-rw-r--r-- | src/com/android/dialer/DialtactsActivity.java | 16 | ||||
-rw-r--r-- | src/com/android/dialer/calllog/CallLogAdapter.java | 10 | ||||
-rw-r--r-- | src/com/android/dialer/widget/SearchEditTextLayout.java | 4 | ||||
-rw-r--r-- | tests/res/layout/fill_call_log_test.xml | 132 | ||||
-rw-r--r-- | tests/res/values/donottranslate_strings.xml | 14 | ||||
-rw-r--r-- | tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java | 164 |
12 files changed, 332 insertions, 102 deletions
diff --git a/res/anim/slide_in.xml b/res/anim/slide_in.xml deleted file mode 100644 index fa0bda02a..000000000 --- a/res/anim/slide_in.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2013 The Android Open Source Project - - 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. ---> -<translate xmlns:android="http://schemas.android.com/apk/res/android" - android:interpolator="@interpolator/ease_in_interpolator" - android:duration="@integer/dialpad_slide_in_duration" - android:fromYDelta="67%p" - android:toYDelta="0" /> diff --git a/res/anim/slide_in_right.xml b/res/anim/slide_in_right.xml deleted file mode 100644 index 11b764a36..000000000 --- a/res/anim/slide_in_right.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (c) 2014, The Android Open Source Project - - 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. ---> - -<translate xmlns:android="http://schemas.android.com/apk/res/android" - android:fromXDelta="67%p" - android:toXDelta="0" - android:interpolator="@android:anim/decelerate_interpolator" - android:duration="@integer/dialpad_slide_in_duration"/> diff --git a/res/anim/slide_out.xml b/res/anim/slide_out.xml deleted file mode 100644 index e5d7ed4b9..000000000 --- a/res/anim/slide_out.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (C) 2013 The Android Open Source Project - - 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. ---> -<translate xmlns:android="http://schemas.android.com/apk/res/android" - android:interpolator="@interpolator/ease_out_interpolator" - android:duration="@integer/dialpad_slide_out_duration" - android:fromYDelta="0" - android:toYDelta="80%p" /> diff --git a/res/anim/slide_out_right.xml b/res/anim/slide_out_right.xml deleted file mode 100644 index 72304a4b2..000000000 --- a/res/anim/slide_out_right.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Copyright (c) 2014, The Android Open Source Project - - 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. ---> - -<translate xmlns:android="http://schemas.android.com/apk/res/android" - android:fromXDelta="0" - android:toXDelta="80%" - android:interpolator="@android:anim/decelerate_interpolator" - android:duration="@integer/dialpad_slide_out_duration"/> diff --git a/res/values/animation_constants.xml b/res/values/animation_constants.xml index 05b8e218d..786306092 100644 --- a/res/values/animation_constants.xml +++ b/res/values/animation_constants.xml @@ -16,8 +16,6 @@ --> <resources> <integer name="fade_duration">300</integer> - <integer name="dialpad_slide_in_duration">532</integer> - <integer name="dialpad_slide_out_duration">257</integer> <!-- Swipe constants --> <integer name="swipe_escape_velocity">100</integer> diff --git a/res/values/strings.xml b/res/values/strings.xml index 5c7eb68ee..6d9c77a86 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -687,11 +687,19 @@ [CHAR LIMIT=NONE] --> <string name="toast_entry_removed">Call log entry deleted.</string> + <!-- String used as a header in the call log above calls which occurred today. + [CHAR LIMIT=65] --> + <string name="call_log_header_today">Today</string> + + <!-- String used as a header in the call log above calls which occurred yesterday. + [CHAR LIMIT=65] --> + <string name="call_log_header_yesterday">Yesterday</string> + <!-- String used as a header in the call log above calls which occurred last week. [CHAR LIMIT=65] --> <string name="call_log_header_last_week">Last week</string> - <!-- String used as a header in the call log above calls which ocurred more than a week ago. + <!-- String used as a header in the call log above calls which occurred more than a week ago. [CHAR LIMIT=65] --> <string name="call_log_header_other">Other</string> diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java index 53e438d6d..baacc1567 100644 --- a/src/com/android/dialer/DialtactsActivity.java +++ b/src/com/android/dialer/DialtactsActivity.java @@ -427,9 +427,9 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O } mSlideIn = AnimationUtils.loadAnimation(this, - mIsLandscape ? R.anim.slide_in_right : R.anim.slide_in); + mIsLandscape ? R.anim.dialpad_slide_in_right : R.anim.dialpad_slide_in_bottom); mSlideOut = AnimationUtils.loadAnimation(this, - mIsLandscape ? R.anim.slide_out_right : R.anim.slide_out); + mIsLandscape ? R.anim.dialpad_slide_out_right : R.anim.dialpad_slide_out_bottom); mSlideOut.setAnimationListener(mSlideOutListener); @@ -1128,7 +1128,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O // Only scroll the button when the first tab is selected. The button should scroll from // the middle to right position only on the transition from the first tab to the second // tab. - if (position == ListsFragment.TAB_INDEX_SPEED_DIAL) { + if (position == ListsFragment.TAB_INDEX_SPEED_DIAL && !mIsLandscape) { mFloatingActionButtonController.onPageScrolled(positionOffset); } } @@ -1187,9 +1187,13 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O align = mIsLandscape ? FloatingActionButtonController.ALIGN_QUARTER_RIGHT : FloatingActionButtonController.ALIGN_MIDDLE; } else { - align = mCurrentTabPosition == ListsFragment.TAB_INDEX_SPEED_DIAL - ? FloatingActionButtonController.ALIGN_MIDDLE - : FloatingActionButtonController.ALIGN_RIGHT; + if (!mIsLandscape) { + align = mCurrentTabPosition == ListsFragment.TAB_INDEX_SPEED_DIAL + ? FloatingActionButtonController.ALIGN_MIDDLE + : FloatingActionButtonController.ALIGN_RIGHT; + } else { + align = FloatingActionButtonController.ALIGN_RIGHT; + } } mFloatingActionButtonController.align(align, 0 /* offsetX */, diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java index 924a17fc2..12edaa0f2 100644 --- a/src/com/android/dialer/calllog/CallLogAdapter.java +++ b/src/com/android/dialer/calllog/CallLogAdapter.java @@ -122,12 +122,6 @@ public class CallLogAdapter extends GroupingListAdapter /** The size of the cache of contact info. */ private static final int CONTACT_INFO_CACHE_SIZE = 100; - /** Localized string representing the word "Today". */ - private final CharSequence mTodayLabel = DateUtils.getTodayString(); - - /** Localized string representing the word "Yesterday". */ - private final CharSequence mYesterdayLabel = DateUtils.getYesterdayString(); - /** Constant used to indicate no row is expanded. */ private static final long NONE_EXPANDED = -1; @@ -1318,9 +1312,9 @@ public class CallLogAdapter extends GroupingListAdapter */ private CharSequence getGroupDescription(int group) { if (group == CallLogGroupBuilder.DAY_GROUP_TODAY) { - return mTodayLabel; + return mContext.getResources().getString(R.string.call_log_header_today); } else if (group == CallLogGroupBuilder.DAY_GROUP_YESTERDAY) { - return mYesterdayLabel; + return mContext.getResources().getString(R.string.call_log_header_yesterday); } else if (group == CallLogGroupBuilder.DAY_GROUP_LAST_WEEK) { return mContext.getResources().getString(R.string.call_log_header_last_week); } else { diff --git a/src/com/android/dialer/widget/SearchEditTextLayout.java b/src/com/android/dialer/widget/SearchEditTextLayout.java index f3e355d7c..3dcbc4bb1 100644 --- a/src/com/android/dialer/widget/SearchEditTextLayout.java +++ b/src/com/android/dialer/widget/SearchEditTextLayout.java @@ -230,7 +230,9 @@ public class SearchEditTextLayout extends FrameLayout { mVoiceSearchButtonView.setVisibility(collapsedViewVisibility); mOverflowButtonView.setVisibility(collapsedViewVisibility); mBackButtonView.setVisibility(expandedViewVisibility); - mExpandedSearchBox.setVisibility(expandedViewVisibility); + // TODO: Prevents keyboard from jumping up in landscape mode after exiting the + // SearchFragment when the query string is empty. More elegant fix? + //mExpandedSearchBox.setVisibility(expandedViewVisibility); mClearButtonView.setVisibility(expandedViewVisibility); } diff --git a/tests/res/layout/fill_call_log_test.xml b/tests/res/layout/fill_call_log_test.xml index 704b9c66e..6de9b9119 100644 --- a/tests/res/layout/fill_call_log_test.xml +++ b/tests/res/layout/fill_call_log_test.xml @@ -20,7 +20,7 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" - android:gravity="center_horizontal" + android:gravity="left" > <TextView android:layout_width="match_parent" @@ -53,4 +53,134 @@ android:indeterminate="false" android:visibility="gone" /> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/add_custom_entry" + /> + <RadioGroup + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal"> + <RadioButton + android:id="@+id/call_type_incoming" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/call_type_incoming" /> + <RadioButton + android:id="@+id/call_type_missed" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/call_type_missed" /> + <RadioButton + android:id="@+id/call_type_outgoing" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/call_type_outgoing" /> + </RadioGroup> + <LinearLayout + android:orientation="horizontal" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="left" + > + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/call_date" + /> + <TextView + android:id="@+id/call_date" + android:paddingStart="16dp" + android:layout_width="120dp" + android:layout_height="wrap_content" + /> + <Button + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/edit" + android:onClick="showDatePickerDialog" /> + </LinearLayout> + <LinearLayout + android:orientation="horizontal" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="left" + > + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/call_time" + /> + <TextView + android:id="@+id/call_time" + android:paddingStart="16dp" + android:layout_width="120dp" + android:layout_height="wrap_content" + /> + <Button + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/edit" + android:onClick="showTimePickerDialog" /> + </LinearLayout> + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/call_presentation" + /> + <RadioGroup + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal"> + <RadioButton + android:id="@+id/presentation_allowed" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/presentation_allowed" + android:textSize="9sp" /> + <RadioButton + android:id="@+id/presentation_restricted" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/presentation_restricted" + android:textSize="9sp" /> + <RadioButton + android:id="@+id/presentation_unknown" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/presentation_unknown" + android:textSize="9sp" /> + <RadioButton + android:id="@+id/presentation_payphone" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/presentation_payphone" + android:textSize="9sp" /> + </RadioGroup> + <LinearLayout + android:orientation="horizontal" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="left" + > + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/number" + /> + <EditText + android:id="@+id/phone_number" + android:layout_width="180dp" + android:layout_height="wrap_content" + android:inputType="phone" + /> + </LinearLayout> + <Button + android:id="@+id/add_custom" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/addToCallLogButton" + android:onClick="addManualEntry" + /> </LinearLayout> diff --git a/tests/res/values/donottranslate_strings.xml b/tests/res/values/donottranslate_strings.xml index ceba5ea96..bdeb3043d 100644 --- a/tests/res/values/donottranslate_strings.xml +++ b/tests/res/values/donottranslate_strings.xml @@ -37,5 +37,17 @@ <string name="numberOfCallLogEntries">Number of call log entries to add:</string> <string name="addedLogEntriesToast">Added %1$d call log entries.</string> <string name="noLogEntriesToast">No entries in the call log yet. Need at least one record for the template. Or use random numbers.</string> - + <string name="add_custom_entry">Add custom call log entry:</string> + <string name="call_type_incoming">Incoming</string> + <string name="call_type_missed">Missed</string> + <string name="call_type_outgoing">Outgoing</string> + <string name="call_date">Call date</string> + <string name="call_time">Call time</string> + <string name="edit">Edit</string> + <string name="number">Number</string> + <string name="call_presentation">Presentation</string> + <string name="presentation_allowed">Allowed</string> + <string name="presentation_restricted">Restricted</string> + <string name="presentation_unknown">Unknown</string> + <string name="presentation_payphone">Payphone</string> </resources> diff --git a/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java b/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java index b1b8e2f05..3a1682e79 100644 --- a/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java +++ b/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java @@ -17,7 +17,11 @@ package com.android.dialer.tests.calllog; import android.app.Activity; +import android.app.DatePickerDialog; +import android.app.Dialog; +import android.app.DialogFragment; import android.app.LoaderManager; +import android.app.TimePickerDialog; import android.content.ContentProviderClient; import android.content.ContentValues; import android.content.CursorLoader; @@ -27,16 +31,21 @@ import android.os.AsyncTask; import android.os.Bundle; import android.os.RemoteException; import android.provider.CallLog.Calls; +import android.text.format.DateFormat; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.CheckBox; +import android.widget.DatePicker; import android.widget.ProgressBar; +import android.widget.RadioButton; import android.widget.TextView; +import android.widget.TimePicker; import android.widget.Toast; import com.android.dialer.tests.R; +import java.util.Calendar; import java.util.Random; /** @@ -56,6 +65,22 @@ public class FillCallLogTestActivity extends Activity { private Button mAddButton; private ProgressBar mProgressBar; private CheckBox mUseRandomNumbers; + private RadioButton mCallTypeIncoming; + private RadioButton mCallTypeMissed; + private RadioButton mCallTypeOutgoing; + private RadioButton mPresentationAllowed; + private RadioButton mPresentationRestricted; + private RadioButton mPresentationUnknown; + private RadioButton mPresentationPayphone; + private TextView mCallDate; + private TextView mCallTime; + private TextView mPhoneNumber; + + private int mCallTimeHour; + private int mCallTimeMinute; + private int mCallDateYear; + private int mCallDateMonth; + private int mCallDateDay; @Override protected void onCreate(Bundle savedInstanceState) { @@ -88,6 +113,27 @@ public class FillCallLogTestActivity extends Activity { mProgressBar.setVisibility(View.VISIBLE); } }); + + mCallTypeIncoming = (RadioButton) findViewById(R.id.call_type_incoming); + mCallTypeMissed = (RadioButton) findViewById(R.id.call_type_missed); + mCallTypeOutgoing = (RadioButton) findViewById(R.id.call_type_outgoing); + mPresentationAllowed = (RadioButton) findViewById(R.id.presentation_allowed); + mPresentationPayphone = (RadioButton) findViewById(R.id.presentation_payphone); + mPresentationUnknown = (RadioButton) findViewById(R.id.presentation_unknown); + mPresentationRestricted = (RadioButton) findViewById(R.id.presentation_restricted); + mCallTime = (TextView) findViewById(R.id.call_time); + mCallDate = (TextView) findViewById(R.id.call_date); + mPhoneNumber = (TextView) findViewById(R.id.phone_number); + + // Use the current time as the default values for the picker + final Calendar c = Calendar.getInstance(); + mCallTimeHour = c.get(Calendar.HOUR_OF_DAY); + mCallTimeMinute = c.get(Calendar.MINUTE); + mCallDateYear = c.get(Calendar.YEAR); + mCallDateMonth = c.get(Calendar.MONTH); + mCallDateDay = c.get(Calendar.DAY_OF_MONTH); + setDisplayDate(); + setDisplayTime(); } /** @@ -306,4 +352,122 @@ public class FillCallLogTestActivity extends Activity { public void updateCount(Integer count) { mProgressBar.setProgress(count); } + + /** + * Determines the call type for a manually entered call. + * + * @return Call type. + */ + private int getManualCallType() { + if (mCallTypeIncoming.isChecked()) { + return Calls.INCOMING_TYPE; + } else if (mCallTypeOutgoing.isChecked()) { + return Calls.OUTGOING_TYPE; + } else { + return Calls.MISSED_TYPE; + } + } + + /** + * Determines the presentation for a manually entered call. + * + * @return Presentation. + */ + private int getManualPresentation() { + if (mPresentationAllowed.isChecked()) { + return Calls.PRESENTATION_ALLOWED; + } else if (mPresentationPayphone.isChecked()) { + return Calls.PRESENTATION_PAYPHONE; + } else if (mPresentationRestricted.isChecked()) { + return Calls.PRESENTATION_RESTRICTED; + } else { + return Calls.PRESENTATION_UNKNOWN; + } + } + + /** + * Shows a time picker dialog, storing the results in the time field. + */ + public void showTimePickerDialog(View v) { + DialogFragment newFragment = new TimePickerFragment(); + newFragment.show(getFragmentManager(),"timePicker"); + } + + /** + * Helper class to display time picker and store the hour/minute. + */ + public class TimePickerFragment extends DialogFragment + implements TimePickerDialog.OnTimeSetListener { + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + // Create a new instance of TimePickerDialog and return it + return new TimePickerDialog(getActivity(), this, mCallTimeHour, mCallTimeMinute, + DateFormat.is24HourFormat(getActivity())); + } + + public void onTimeSet(TimePicker view, int hourOfDay, int minute) { + mCallTimeHour = hourOfDay; + mCallTimeMinute = minute; + setDisplayTime(); + } + } + + /** + * Sets the call time TextView to the current selected time. + */ + private void setDisplayTime() { + mCallTime.setText(String.format("%02d:%02d", mCallTimeHour, mCallTimeMinute)); + } + + /** + * Sets the call date Textview to the current selected date + */ + private void setDisplayDate() { + mCallDate.setText(String.format("%04d-%02d-%02d", mCallDateYear, mCallDateMonth, + mCallDateDay)); + } + + /** + * Shows a date picker dialog. + */ + public void showDatePickerDialog(View v) { + DialogFragment newFragment = new DatePickerFragment(); + newFragment.show(getFragmentManager(),"datePicker"); + } + + /** + * Helper class to show a date picker. + */ + public class DatePickerFragment extends DialogFragment + implements DatePickerDialog.OnDateSetListener { + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + // Create a new instance of DatePickerDialog and return it + return new DatePickerDialog(getActivity(), this, mCallDateYear, mCallDateMonth, + mCallDateDay); + } + + public void onDateSet(DatePicker view, int year, int month, int day) { + mCallDateYear = year; + mCallDateMonth = month; + mCallDateDay = day; + setDisplayDate(); + } + } + + /** + * OnClick handler for the button that adds a manual call log entry to the call log. + * + * @param v Calling view. + */ + public void addManualEntry(View v) { + Calendar dateTime = Calendar.getInstance(); + dateTime.set(mCallDateYear, mCallDateMonth, mCallDateDay, mCallTimeHour, mCallTimeMinute); + + Calls.addCall(null, this, mPhoneNumber.getText().toString(), getManualPresentation(), + getManualCallType(), dateTime.getTimeInMillis(), RNG.nextInt(60 * 60)); + + } } |