summaryrefslogtreecommitdiff
path: root/InCallUI
diff options
context:
space:
mode:
authorTyler Gunn <tgunn@google.com>2015-05-19 09:06:20 -0700
committerTyler Gunn <tgunn@google.com>2015-05-19 09:06:20 -0700
commit784d83e1e74a6640e6d57e23c378dbecce5530ff (patch)
treeeb451b96406534945b1cb8613a539c0ec174483e /InCallUI
parent45a8175f3cf779ffbe8cde2018aee4d97748206d (diff)
Fix presentation of "held" banner in landscape mode, plus more!
1. Removed landscape video_call_views.xml file; it was identical to the portrait version but missing some recent changes. This corrected an issue I observed with the preview surface not rotating properly. 2. Changed layout of landscape call_card_fragment so that the secondary call info box is a banner along the bottom of the screen and the call card adjusts to fit above it. The trick is to put that view before the primary call card in the relative layout and mark the primary call card to "layout_above" the secondary call info. 3. Fixed issue observed when transitioning from portrait to landscape where the secondary call card OnPreDrawListener would keep firing. Changed the way the OnPreDrawListener is removed per Yorke. 4. Corrected issue where the preview surface would not change to a landscape orientation when the device is rotated. Ensured when starting up the VideoCallPresenter to adjust the orientation of the surface. Bug: 21076775 Change-Id: I7bf1f3b0385b016a6ee2312df0d41be89cd2540e
Diffstat (limited to 'InCallUI')
-rw-r--r--InCallUI/res/layout-land/call_card_fragment.xml28
-rw-r--r--InCallUI/res/layout-land/video_call_views.xml35
-rw-r--r--InCallUI/src/com/android/incallui/CallCardFragment.java8
-rw-r--r--InCallUI/src/com/android/incallui/InCallActivity.java5
-rw-r--r--InCallUI/src/com/android/incallui/VideoCallPresenter.java2
5 files changed, 25 insertions, 53 deletions
diff --git a/InCallUI/res/layout-land/call_card_fragment.xml b/InCallUI/res/layout-land/call_card_fragment.xml
index edce7b233..97c7e1d07 100644
--- a/InCallUI/res/layout-land/call_card_fragment.xml
+++ b/InCallUI/res/layout-land/call_card_fragment.xml
@@ -20,12 +20,28 @@
android:layout_width="match_parent"
android:layout_height="match_parent" >
+ <fragment android:name="com.android.incallui.VideoCallFragment"
+ android:layout_alignParentStart="true"
+ android:layout_gravity="start|center_vertical"
+ android:id="@+id/videoCallFragment"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_alignParentBottom="true" />
+
+ <!-- Secondary "Call info" block, for the background ("on hold") call. -->
+ <include layout="@layout/secondary_call_info"
+ android:id="@+id/secondary_call_info"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true" />
+
<LinearLayout
android:id="@+id/primary_call_info_container"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:layout_height="match_parent"
+ android:layout_above="@id/secondary_call_info"
android:orientation="vertical"
android:elevation="@dimen/primary_call_elevation"
android:background="@drawable/rounded_call_card_background"
@@ -47,11 +63,6 @@
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="@dimen/call_buttons_bottom_margin" />
- <!-- Secondary "Call info" block, for the background ("on hold") call. -->
- <include layout="@layout/secondary_call_info"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom" />
</FrameLayout>
@@ -94,13 +105,6 @@
android:indeterminate="true" />
</FrameLayout>
- <fragment android:name="com.android.incallui.VideoCallFragment"
- android:layout_alignParentStart="true"
- android:layout_gravity="start|center_vertical"
- android:id="@+id/videoCallFragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
-
<!-- Placeholder for the dialpad which is replaced with the dialpad fragment when shown. -->
<FrameLayout
android:id="@+id/dialpadFragmentContainer"
diff --git a/InCallUI/res/layout-land/video_call_views.xml b/InCallUI/res/layout-land/video_call_views.xml
deleted file mode 100644
index 8961ea4bf..000000000
--- a/InCallUI/res/layout-land/video_call_views.xml
+++ /dev/null
@@ -1,35 +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
- -->
-
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
-
- <TextureView
- android:id="@+id/incomingVideo"
- android:layout_gravity="center"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
- <!-- The width and height are replaced at runtime based on the selected camera. -->
- <TextureView
- android:id="@+id/previewVideo"
- android:layout_gravity="bottom|right"
- android:layout_margin="@dimen/video_preview_margin"
- android:layout_width="70dp"
- android:layout_height="120dp" />
-</FrameLayout>
diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java
index 2b2e269e4..2895ca11e 100644
--- a/InCallUI/src/com/android/incallui/CallCardFragment.java
+++ b/InCallUI/src/com/android/incallui/CallCardFragment.java
@@ -573,18 +573,16 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
mSecondaryCallInfo.setVisibility(View.VISIBLE);
}
+ updateFabPositionForSecondaryCallInfo();
// We need to translate the secondary caller info, but we need to know its position after
// the layout has occurred so use a {@code ViewTreeObserver}.
final ViewTreeObserver observer = getView().getViewTreeObserver();
+
observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
// We don't want to continue getting called.
- if (observer.isAlive()) {
- observer.removeOnPreDrawListener(this);
- }
-
- updateFabPositionForSecondaryCallInfo();
+ getView().getViewTreeObserver().removeOnPreDrawListener(this);
// Get the height of the secondary call info now, and then re-hide the view prior
// to doing the actual animation.
diff --git a/InCallUI/src/com/android/incallui/InCallActivity.java b/InCallUI/src/com/android/incallui/InCallActivity.java
index ecca70f80..a3df12e0d 100644
--- a/InCallUI/src/com/android/incallui/InCallActivity.java
+++ b/InCallUI/src/com/android/incallui/InCallActivity.java
@@ -182,7 +182,7 @@ public class InCallActivity extends Activity {
return;
}
- int newRotation = Surface.ROTATION_0;
+ int newRotation;
// We only shift if we're within 22.5 (23) degrees of the target
// orientation. This avoids flopping back and forth when holding
// the device at 45 degrees or so.
@@ -196,6 +196,9 @@ public class InCallActivity extends Activity {
newRotation = Surface.ROTATION_180;
} else if (orientation >= 247 && orientation <= 293) {
newRotation = Surface.ROTATION_90;
+ } else {
+ // Device is between orientations, so leave orientation the same.
+ return;
}
// Orientation is the current device orientation in degrees. Ultimately we want
diff --git a/InCallUI/src/com/android/incallui/VideoCallPresenter.java b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
index db6ca2b2c..57c20e7c1 100644
--- a/InCallUI/src/com/android/incallui/VideoCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/VideoCallPresenter.java
@@ -239,6 +239,7 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi
InCallVideoCallCallbackNotifier.getInstance().addSessionModificationListener(this);
mCurrentVideoState = VideoProfile.STATE_AUDIO_ONLY;
mCurrentCallState = Call.State.INVALID;
+ mDeviceOrientation = ui.getCurrentRotation();
}
/**
@@ -682,6 +683,7 @@ public class VideoCallPresenter extends Presenter<VideoCallPresenter.VideoCallUi
final int rotation = ui.getCurrentRotation();
if (rotation != VideoCallFragment.ORIENTATION_UNKNOWN) {
videoCall.setDeviceOrientation(InCallPresenter.toRotationAngle(rotation));
+ onDeviceOrientationChanged(rotation);
}
enableCamera(videoCall, isCameraRequired(newVideoState));