diff options
-rw-r--r-- | res/layout/call_detail.xml | 29 | ||||
-rw-r--r-- | res/layout/call_details_voicemail_header.xml | 47 | ||||
-rw-r--r-- | src/com/android/dialer/CallDetailActivity.java | 52 |
3 files changed, 76 insertions, 52 deletions
diff --git a/res/layout/call_detail.xml b/res/layout/call_detail.xml index 2e38e2d99..35c41c0b3 100644 --- a/res/layout/call_detail.xml +++ b/res/layout/call_detail.xml @@ -87,35 +87,6 @@ </LinearLayout> </LinearLayout> - <FrameLayout - android:id="@+id/voicemail_status" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_alignParentStart="true" - android:layout_alignParentTop="true" - android:visibility="gone" - > - <include layout="@layout/call_log_voicemail_status"/> - </FrameLayout> - <TextView - android:id="@+id/voicemail_transcription" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingStart="@dimen/call_detail_horizontal_margin" - android:paddingEnd="@dimen/call_detail_horizontal_margin" - android:paddingTop="@dimen/transcription_top_margin" - android:paddingBottom="@dimen/transcription_bottom_margin" /> - <LinearLayout - android:id="@+id/voicemail_container" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical" - android:paddingBottom="@dimen/call_detail_button_spacing" - android:visibility="gone" - > - <!-- The voicemail fragment will be put here. --> - </LinearLayout> - <!-- The list view is under everything. It contains a first header element which is hidden under the controls UI. diff --git a/res/layout/call_details_voicemail_header.xml b/res/layout/call_details_voicemail_header.xml new file mode 100644 index 000000000..f2a016b22 --- /dev/null +++ b/res/layout/call_details_voicemail_header.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2009 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. +--> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" > + + <FrameLayout + android:id="@+id/voicemail_status" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:visibility="gone" + > + <include layout="@layout/call_log_voicemail_status"/> + </FrameLayout> + <TextView + android:id="@+id/voicemail_transcription" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingStart="@dimen/call_detail_horizontal_margin" + android:paddingEnd="@dimen/call_detail_horizontal_margin" + android:paddingTop="@dimen/transcription_top_margin" + android:paddingBottom="@dimen/transcription_bottom_margin" /> + <LinearLayout + android:id="@+id/voicemail_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:paddingBottom="@dimen/call_detail_button_spacing" + android:visibility="gone" + > + <!-- The voicemail fragment will be put here. --> + </LinearLayout> +</LinearLayout>
\ No newline at end of file diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java index e716719f4..5ef75dbea 100644 --- a/src/com/android/dialer/CallDetailActivity.java +++ b/src/com/android/dialer/CallDetailActivity.java @@ -43,6 +43,7 @@ import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.widget.LinearLayout; import android.widget.ListView; import android.widget.QuickContactBadge; import android.widget.TextView; @@ -135,6 +136,9 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe private TextView mStatusMessageText; private TextView mStatusMessageAction; private TextView mVoicemailTranscription; + private LinearLayout mVoicemailHeader; + + private Uri mVoicemailUri; /** Whether we should show "edit number before call" in the options menu. */ private boolean mHasEditNumberBeforeCallOption; @@ -239,10 +243,9 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe mPhoneNumberHelper = new PhoneNumberDisplayHelper(mResources); mVoicemailStatusHelper = new VoicemailStatusHelperImpl(); mAsyncQueryHandler = new CallDetailActivityQueryHandler(this); - mStatusMessageView = findViewById(R.id.voicemail_status); - mStatusMessageText = (TextView) findViewById(R.id.voicemail_status_message); - mStatusMessageAction = (TextView) findViewById(R.id.voicemail_status_action); - mVoicemailTranscription = (TextView) findViewById(R.id.voicemail_transcription); + + mVoicemailUri = getIntent().getParcelableExtra(EXTRA_VOICEMAIL_URI); + mQuickContactBadge = (QuickContactBadge) findViewById(R.id.quick_contact_photo); mQuickContactBadge.setOverlay(null); mCallerName = (TextView) findViewById(R.id.caller_name); @@ -253,6 +256,7 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe mProximitySensorManager = new ProximitySensorManager(this, mProximitySensorListener); mContactInfoHelper = new ContactInfoHelper(this, GeoUtil.getCurrentCountryIso(this)); getActionBar().setDisplayHomeAsUpEnabled(true); + optionallyHandleVoicemail(); if (getIntent().getBooleanExtra(EXTRA_FROM_NOTIFICATION, false)) { closeSystemDialogs(); @@ -269,11 +273,25 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe * Handle voicemail playback or hide voicemail ui. * <p> * If the Intent used to start this Activity contains the suitable extras, then start voicemail - * playback. If it doesn't, then hide the voicemail ui. + * playback. If it doesn't, then don't inflate the voicemail ui. */ private void optionallyHandleVoicemail() { - View voicemailContainer = findViewById(R.id.voicemail_container); + if (hasVoicemail()) { + LayoutInflater inflater = + (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); + mVoicemailHeader = + (LinearLayout) inflater.inflate(R.layout.call_details_voicemail_header, null); + View voicemailContainer = mVoicemailHeader.findViewById(R.id.voicemail_container); + mStatusMessageView = mVoicemailHeader.findViewById(R.id.voicemail_status); + mStatusMessageText = + (TextView) mVoicemailHeader.findViewById(R.id.voicemail_status_message); + mStatusMessageAction = + (TextView) mVoicemailHeader.findViewById(R.id.voicemail_status_action); + mVoicemailTranscription = ( + TextView) mVoicemailHeader.findViewById(R.id.voicemail_transcription); + ListView historyList = (ListView) findViewById(R.id.history); + historyList.addHeaderView(mVoicemailHeader); // Has voicemail: add the voicemail fragment. Add suitable arguments to set the uri // to play and optionally start the playback. // Do a query to fetch the voicemail status messages. @@ -285,7 +303,7 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe if (playbackFragment == null) { playbackFragment = new VoicemailPlaybackFragment(); Bundle fragmentArguments = new Bundle(); - fragmentArguments.putParcelable(EXTRA_VOICEMAIL_URI, getVoicemailUri()); + fragmentArguments.putParcelable(EXTRA_VOICEMAIL_URI, mVoicemailUri); if (getIntent().getBooleanExtra(EXTRA_VOICEMAIL_START_PLAYBACK, false)) { fragmentArguments.putBoolean(EXTRA_VOICEMAIL_START_PLAYBACK, true); } @@ -296,21 +314,13 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe } voicemailContainer.setVisibility(View.VISIBLE); - mAsyncQueryHandler.startVoicemailStatusQuery(getVoicemailUri()); - markVoicemailAsRead(getVoicemailUri()); - } else { - // No voicemail uri: hide the status view. - mStatusMessageView.setVisibility(View.GONE); - voicemailContainer.setVisibility(View.GONE); + mAsyncQueryHandler.startVoicemailStatusQuery(mVoicemailUri); + markVoicemailAsRead(mVoicemailUri); } } private boolean hasVoicemail() { - return getVoicemailUri() != null; - } - - private Uri getVoicemailUri() { - return getIntent().getParcelableExtra(EXTRA_VOICEMAIL_URI); + return mVoicemailUri != null; } private void markVoicemailAsRead(final Uri voicemailUri) { @@ -480,9 +490,6 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe if (hasVoicemail() && !TextUtils.isEmpty(firstDetails.transcription)) { mVoicemailTranscription.setText(firstDetails.transcription); mVoicemailTranscription.setVisibility(View.VISIBLE); - } else { - mVoicemailTranscription.setText(null); - mVoicemailTranscription.setVisibility(View.GONE); } loadContactPhotos( @@ -720,12 +727,11 @@ public class CallDetailActivity extends AnalyticsActivity implements ProximitySe } public void onMenuTrashVoicemail(MenuItem menuItem) { - final Uri voicemailUri = getVoicemailUri(); mAsyncTaskExecutor.submit(Tasks.DELETE_VOICEMAIL_AND_FINISH, new AsyncTask<Void, Void, Void>() { @Override public Void doInBackground(Void... params) { - getContentResolver().delete(voicemailUri, null, null); + getContentResolver().delete(mVoicemailUri, null, null); return null; } |