diff options
| author | 2017-04-11 17:09:51 +0000 | |
|---|---|---|
| committer | 2017-04-11 17:09:55 +0000 | |
| commit | d24ecd9b5c93a62e1bf82786b9648bc496c0a076 (patch) | |
| tree | b6057e606402b88e1bf332b7aa7b7bb54f622135 | |
| parent | 5094caafc245aac78a746384cec7b6fbb05e232a (diff) | |
| parent | e763a26c11a3f9d80023f8dd77e4e2d802623fec (diff) | |
Merge "Fix screen pinning in seascape" into oc-dev
4 files changed, 215 insertions, 14 deletions
diff --git a/packages/SystemUI/res/layout/screen_pinning_request_buttons_sea.xml b/packages/SystemUI/res/layout/screen_pinning_request_buttons_sea.xml new file mode 100644 index 000000000000..f3a6d44f5ec7 --- /dev/null +++ b/packages/SystemUI/res/layout/screen_pinning_request_buttons_sea.xml @@ -0,0 +1,143 @@ +<?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. + */ +--> +<!-- Note all width/height dimensions are switched here to handle landspace + rather than duplicating them all. + This layout matches the structure of navigation_bar.xml (rot90) and + will need to be kept up to sync with changes there. +--> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/screen_pinning_buttons" + android:layout_height="match_parent" + android:layout_width="@dimen/screen_pinning_request_button_height" + android:background="?android:attr/colorAccent" + android:orientation="vertical"> + + <View + android:layout_height="@dimen/screen_pinning_request_side_width" + android:layout_width="match_parent" + android:layout_weight="0" + android:visibility="invisible" /> + + <FrameLayout + android:id="@+id/screen_pinning_back_group" + android:layout_height="@dimen/screen_pinning_request_button_width" + android:layout_width="@dimen/screen_pinning_request_button_height" + android:layout_weight="0" + android:theme="@*android:style/ThemeOverlay.DeviceDefault.Accent"> + + <ImageView + android:id="@+id/screen_pinning_back_bg_light" + android:layout_height="match_parent" + android:layout_width="match_parent" + android:scaleType="matrix" + android:layout_marginLeft="@dimen/screen_pinning_request_seascape_padding_negative" + android:src="@drawable/screen_pinning_light_bg_circ" /> + + <ImageView + android:id="@+id/screen_pinning_back_bg" + android:layout_height="match_parent" + android:layout_width="match_parent" + android:scaleType="matrix" + android:layout_marginLeft="@dimen/screen_pinning_request_seascape_button_offset" + android:paddingRight="@dimen/screen_pinning_request_inner_padding" + android:paddingTop="@dimen/screen_pinning_request_inner_padding" + android:paddingBottom="@dimen/screen_pinning_request_inner_padding" + android:src="@drawable/screen_pinning_bg_circ" /> + + <ImageView + android:layout_height="match_parent" + android:layout_width="match_parent" + android:scaleType="center" + android:paddingRight="@dimen/screen_pinning_request_nav_icon_padding" + android:paddingTop="@dimen/screen_pinning_request_nav_side_padding" + android:paddingBottom="@dimen/screen_pinning_request_nav_side_padding" + android:src="@drawable/ic_sysbar_back" /> + </FrameLayout> + + <View + android:layout_height="match_parent" + android:layout_width="match_parent" + android:layout_weight="1" + android:visibility="invisible" /> + + <FrameLayout + android:id="@+id/screen_pinning_home_group" + android:layout_height="@dimen/screen_pinning_request_button_width" + android:layout_width="@dimen/screen_pinning_request_button_height" + android:layout_weight="0" > + + <ImageView + android:layout_height="match_parent" + android:layout_width="match_parent" + android:scaleType="center" + android:paddingRight="@dimen/screen_pinning_request_nav_icon_padding" + android:paddingTop="@dimen/screen_pinning_request_nav_side_padding" + android:paddingBottom="@dimen/screen_pinning_request_nav_side_padding" + android:src="@drawable/ic_sysbar_home" /> + </FrameLayout> + + <View + android:layout_height="match_parent" + android:layout_width="match_parent" + android:layout_weight="1" + android:visibility="invisible" /> + + <FrameLayout + android:id="@+id/screen_pinning_recents_group" + android:layout_height="@dimen/screen_pinning_request_button_width" + android:layout_width="@dimen/screen_pinning_request_button_height" + android:layout_weight="0" + android:theme="@*android:style/ThemeOverlay.DeviceDefault.Accent"> + + <ImageView + android:id="@+id/screen_pinning_recents_bg_light" + android:layout_height="match_parent" + android:layout_width="match_parent" + android:scaleType="matrix" + android:layout_marginLeft="@dimen/screen_pinning_request_seascape_padding_negative" + android:src="@drawable/screen_pinning_light_bg_circ" /> + + <ImageView + android:id="@+id/screen_pinning_recents_bg" + android:layout_height="match_parent" + android:layout_width="match_parent" + android:scaleType="matrix" + android:layout_marginLeft="@dimen/screen_pinning_request_seascape_button_offset" + android:paddingRight="@dimen/screen_pinning_request_inner_padding" + android:paddingTop="@dimen/screen_pinning_request_inner_padding" + android:paddingBottom="@dimen/screen_pinning_request_inner_padding" + android:src="@drawable/screen_pinning_bg_circ" /> + + <ImageView + android:layout_height="match_parent" + android:layout_width="match_parent" + android:scaleType="center" + android:paddingRight="@dimen/screen_pinning_request_nav_icon_padding" + android:paddingTop="@dimen/screen_pinning_request_nav_side_padding" + android:paddingBottom="@dimen/screen_pinning_request_nav_side_padding" + android:src="@drawable/ic_sysbar_recent" /> + </FrameLayout> + + <View + android:layout_height="@dimen/screen_pinning_request_side_width" + android:layout_width="match_parent" + android:layout_weight="0" + android:visibility="invisible" /> + +</LinearLayout> diff --git a/packages/SystemUI/res/layout/screen_pinning_request_sea_phone.xml b/packages/SystemUI/res/layout/screen_pinning_request_sea_phone.xml new file mode 100644 index 000000000000..770cead87ac0 --- /dev/null +++ b/packages/SystemUI/res/layout/screen_pinning_request_sea_phone.xml @@ -0,0 +1,36 @@ +<?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. + */ +--> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_height="@dimen/screen_pinning_request_width" + android:layout_width="wrap_content" + android:gravity="left|center_vertical" + android:orientation="horizontal" + android:theme="@android:style/Theme.DeviceDefault.Light"> + + <include + android:layout_width="wrap_content" + android:layout_height="@dimen/screen_pinning_request_width" + layout="@layout/screen_pinning_request_buttons_sea" /> + + <include + android:layout_width="360dp" + android:layout_height="@dimen/screen_pinning_request_width" + layout="@layout/screen_pinning_request_text_area" /> + +</LinearLayout> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index ac4bdfc113f1..809648aba65b 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -563,6 +563,10 @@ <dimen name="screen_pinning_request_button_width">84dp</dimen> <!-- Screen pinning request padding on top of inner circle --> <dimen name="screen_pinning_request_inner_padding">14dp</dimen> + <!-- Screen pinning request seascape negative padding --> + <dimen name="screen_pinning_request_seascape_padding_negative">-18dp</dimen> + <!-- Screen pinning request seascape button offset --> + <dimen name="screen_pinning_request_seascape_button_offset">-4dp</dimen> <!-- Screen pinning request padding on top of icons --> <dimen name="screen_pinning_request_nav_icon_padding">18dp</dimen> <!-- Screen pinning request padding on side of icons diff --git a/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java b/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java index 0336905cd855..521157dc5991 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java +++ b/packages/SystemUI/src/com/android/systemui/recents/ScreenPinningRequest.java @@ -31,6 +31,7 @@ import android.os.Binder; import android.os.RemoteException; import android.util.DisplayMetrics; import android.view.Gravity; +import android.view.Surface; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; @@ -46,6 +47,11 @@ import com.android.systemui.R; import java.util.ArrayList; public class ScreenPinningRequest implements View.OnClickListener { + + private static final int ROTATION_NONE = 0; + private static final int ROTATION_LANDSCAPE = 1; + private static final int ROTATION_SEASCAPE = 2; + private final Context mContext; private final AccessibilityManager mAccessibilityService; @@ -124,11 +130,12 @@ public class ScreenPinningRequest implements View.OnClickListener { clearPrompt(); } - public FrameLayout.LayoutParams getRequestLayoutParams(boolean isLandscape) { + public FrameLayout.LayoutParams getRequestLayoutParams(int rotation) { return new FrameLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, - isLandscape ? (Gravity.CENTER_VERTICAL | Gravity.RIGHT) + rotation == ROTATION_SEASCAPE ? (Gravity.CENTER_VERTICAL | Gravity.LEFT) : + rotation == ROTATION_LANDSCAPE ? (Gravity.CENTER_VERTICAL | Gravity.RIGHT) : (Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM)); } @@ -153,14 +160,16 @@ public class ScreenPinningRequest implements View.OnClickListener { DisplayMetrics metrics = new DisplayMetrics(); mWindowManager.getDefaultDisplay().getMetrics(metrics); float density = metrics.density; - boolean isLandscape = isLandscapePhone(mContext); + int rotation = getRotation(mContext); - inflateView(isLandscape); + inflateView(rotation); int bgColor = mContext.getColor( R.color.screen_pinning_request_window_bg); if (ActivityManager.isHighEndGfx()) { mLayout.setAlpha(0f); - if (isLandscape) { + if (rotation == ROTATION_SEASCAPE) { + mLayout.setTranslationX(-OFFSET_DP * density); + } else if (rotation == ROTATION_LANDSCAPE) { mLayout.setTranslationX(OFFSET_DP * density); } else { mLayout.setTranslationY(OFFSET_DP * density); @@ -193,18 +202,27 @@ public class ScreenPinningRequest implements View.OnClickListener { mContext.registerReceiver(mReceiver, filter); } - private boolean isLandscapePhone(Context context) { + private int getRotation(Context context) { Configuration config = mContext.getResources().getConfiguration(); - return config.orientation == Configuration.ORIENTATION_LANDSCAPE - && config.smallestScreenWidthDp < 600; + int rot = context.getDisplay().getRotation(); + if (config.smallestScreenWidthDp < 600) { + if (rot == Surface.ROTATION_90) { + return ROTATION_LANDSCAPE; + } else if (rot == Surface.ROTATION_270) { + return ROTATION_SEASCAPE; + } + } + return ROTATION_NONE; } - private void inflateView(boolean isLandscape) { + private void inflateView(int rotation) { // We only want this landscape orientation on <600dp, so rather than handle // resource overlay for -land and -sw600dp-land, just inflate this // other view for this single case. - mLayout = (ViewGroup) View.inflate(getContext(), isLandscape - ? R.layout.screen_pinning_request_land_phone : R.layout.screen_pinning_request, + mLayout = (ViewGroup) View.inflate(getContext(), + rotation == ROTATION_SEASCAPE ? R.layout.screen_pinning_request_sea_phone : + rotation == ROTATION_LANDSCAPE ? R.layout.screen_pinning_request_land_phone + : R.layout.screen_pinning_request, null); // Catch touches so they don't trigger cancel/activate, like outside does. mLayout.setClickable(true); @@ -240,7 +258,7 @@ public class ScreenPinningRequest implements View.OnClickListener { mLayout.findViewById(R.id.screen_pinning_back_bg).setVisibility(backBgVisibility); mLayout.findViewById(R.id.screen_pinning_back_bg_light).setVisibility(backBgVisibility); - addView(mLayout, getRequestLayoutParams(isLandscape)); + addView(mLayout, getRequestLayoutParams(rotation)); } private void swapChildrenIfRtlAndVertical(View group) { @@ -269,14 +287,14 @@ public class ScreenPinningRequest implements View.OnClickListener { protected void onConfigurationChanged() { removeAllViews(); - inflateView(isLandscapePhone(mContext)); + inflateView(getRotation(mContext)); } private final Runnable mUpdateLayoutRunnable = new Runnable() { @Override public void run() { if (mLayout != null && mLayout.getParent() != null) { - mLayout.setLayoutParams(getRequestLayoutParams(isLandscapePhone(mContext))); + mLayout.setLayoutParams(getRequestLayoutParams(getRotation(mContext))); } } }; |