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>
|
<dimen name="screen_pinning_request_button_width">84dp</dimen>
|
||||||
<!-- Screen pinning request padding on top of inner circle -->
|
<!-- Screen pinning request padding on top of inner circle -->
|
||||||
<dimen name="screen_pinning_request_inner_padding">14dp</dimen>
|
<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 -->
|
<!-- Screen pinning request padding on top of icons -->
|
||||||
<dimen name="screen_pinning_request_nav_icon_padding">18dp</dimen>
|
<dimen name="screen_pinning_request_nav_icon_padding">18dp</dimen>
|
||||||
<!-- Screen pinning request padding on side of icons
|
<!-- Screen pinning request padding on side of icons
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import android.os.Binder;
|
|||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
|
import android.view.Surface;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
@@ -46,6 +47,11 @@ import com.android.systemui.R;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class ScreenPinningRequest implements View.OnClickListener {
|
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 Context mContext;
|
||||||
|
|
||||||
private final AccessibilityManager mAccessibilityService;
|
private final AccessibilityManager mAccessibilityService;
|
||||||
@@ -124,11 +130,12 @@ public class ScreenPinningRequest implements View.OnClickListener {
|
|||||||
clearPrompt();
|
clearPrompt();
|
||||||
}
|
}
|
||||||
|
|
||||||
public FrameLayout.LayoutParams getRequestLayoutParams(boolean isLandscape) {
|
public FrameLayout.LayoutParams getRequestLayoutParams(int rotation) {
|
||||||
return new FrameLayout.LayoutParams(
|
return new FrameLayout.LayoutParams(
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT,
|
ViewGroup.LayoutParams.WRAP_CONTENT,
|
||||||
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));
|
: (Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,14 +160,16 @@ public class ScreenPinningRequest implements View.OnClickListener {
|
|||||||
DisplayMetrics metrics = new DisplayMetrics();
|
DisplayMetrics metrics = new DisplayMetrics();
|
||||||
mWindowManager.getDefaultDisplay().getMetrics(metrics);
|
mWindowManager.getDefaultDisplay().getMetrics(metrics);
|
||||||
float density = metrics.density;
|
float density = metrics.density;
|
||||||
boolean isLandscape = isLandscapePhone(mContext);
|
int rotation = getRotation(mContext);
|
||||||
|
|
||||||
inflateView(isLandscape);
|
inflateView(rotation);
|
||||||
int bgColor = mContext.getColor(
|
int bgColor = mContext.getColor(
|
||||||
R.color.screen_pinning_request_window_bg);
|
R.color.screen_pinning_request_window_bg);
|
||||||
if (ActivityManager.isHighEndGfx()) {
|
if (ActivityManager.isHighEndGfx()) {
|
||||||
mLayout.setAlpha(0f);
|
mLayout.setAlpha(0f);
|
||||||
if (isLandscape) {
|
if (rotation == ROTATION_SEASCAPE) {
|
||||||
|
mLayout.setTranslationX(-OFFSET_DP * density);
|
||||||
|
} else if (rotation == ROTATION_LANDSCAPE) {
|
||||||
mLayout.setTranslationX(OFFSET_DP * density);
|
mLayout.setTranslationX(OFFSET_DP * density);
|
||||||
} else {
|
} else {
|
||||||
mLayout.setTranslationY(OFFSET_DP * density);
|
mLayout.setTranslationY(OFFSET_DP * density);
|
||||||
@@ -193,18 +202,27 @@ public class ScreenPinningRequest implements View.OnClickListener {
|
|||||||
mContext.registerReceiver(mReceiver, filter);
|
mContext.registerReceiver(mReceiver, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isLandscapePhone(Context context) {
|
private int getRotation(Context context) {
|
||||||
Configuration config = mContext.getResources().getConfiguration();
|
Configuration config = mContext.getResources().getConfiguration();
|
||||||
return config.orientation == Configuration.ORIENTATION_LANDSCAPE
|
int rot = context.getDisplay().getRotation();
|
||||||
&& config.smallestScreenWidthDp < 600;
|
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
|
// We only want this landscape orientation on <600dp, so rather than handle
|
||||||
// resource overlay for -land and -sw600dp-land, just inflate this
|
// resource overlay for -land and -sw600dp-land, just inflate this
|
||||||
// other view for this single case.
|
// other view for this single case.
|
||||||
mLayout = (ViewGroup) View.inflate(getContext(), isLandscape
|
mLayout = (ViewGroup) View.inflate(getContext(),
|
||||||
? R.layout.screen_pinning_request_land_phone : R.layout.screen_pinning_request,
|
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);
|
null);
|
||||||
// Catch touches so they don't trigger cancel/activate, like outside does.
|
// Catch touches so they don't trigger cancel/activate, like outside does.
|
||||||
mLayout.setClickable(true);
|
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).setVisibility(backBgVisibility);
|
||||||
mLayout.findViewById(R.id.screen_pinning_back_bg_light).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) {
|
private void swapChildrenIfRtlAndVertical(View group) {
|
||||||
@@ -269,14 +287,14 @@ public class ScreenPinningRequest implements View.OnClickListener {
|
|||||||
|
|
||||||
protected void onConfigurationChanged() {
|
protected void onConfigurationChanged() {
|
||||||
removeAllViews();
|
removeAllViews();
|
||||||
inflateView(isLandscapePhone(mContext));
|
inflateView(getRotation(mContext));
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Runnable mUpdateLayoutRunnable = new Runnable() {
|
private final Runnable mUpdateLayoutRunnable = new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (mLayout != null && mLayout.getParent() != null) {
|
if (mLayout != null && mLayout.getParent() != null) {
|
||||||
mLayout.setLayoutParams(getRequestLayoutParams(isLandscapePhone(mContext)));
|
mLayout.setLayoutParams(getRequestLayoutParams(getRotation(mContext)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user