Merge "Fix screen pinning in seascape" into oc-dev
This commit is contained in:
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user