Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5dadf838 authored by Michael Jurka's avatar Michael Jurka Committed by Android (Google) Code Review
Browse files

Merge "Fix crash in built-in wallpaper cropper" into klp-dev

parents b729e995 e72aa7f0
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -19,7 +19,7 @@
-->
-->


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/wallpaper_cropper"
    android:id="@+id/wallpaper_root"
    android:layout_width="match_parent"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    android:layout_height="match_parent">
    <com.android.wallpapercropper.CropView
    <com.android.wallpapercropper.CropView
+18 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2013 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.
-->
<resources>
    <bool name="allow_rotation">true</bool>
</resources>
+18 −0
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2013 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.
-->
<resources>
    <bool name="allow_rotation">false</bool>
</resources>
+10 −8
Original line number Original line Diff line number Diff line
@@ -22,8 +22,8 @@ import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.ScaleGestureDetector;
import android.view.ViewConfiguration;
import android.view.ScaleGestureDetector.OnScaleGestureListener;
import android.view.ScaleGestureDetector.OnScaleGestureListener;
import android.view.ViewConfiguration;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;


@@ -44,6 +44,7 @@ public class CropView extends TiledImageView implements OnScaleGestureListener {
    public interface TouchCallback {
    public interface TouchCallback {
        void onTouchDown();
        void onTouchDown();
        void onTap();
        void onTap();
        void onTouchUp();
    }
    }


    public CropView(Context context) {
    public CropView(Context context) {
@@ -140,12 +141,12 @@ public class CropView extends TiledImageView implements OnScaleGestureListener {
    public void onScaleEnd(ScaleGestureDetector detector) {
    public void onScaleEnd(ScaleGestureDetector detector) {
    }
    }


    public void moveToUpperLeft() {
    public void moveToLeft() {
        if (getWidth() == 0 || getHeight() == 0) {
        if (getWidth() == 0 || getHeight() == 0) {
            final ViewTreeObserver observer = getViewTreeObserver();
            final ViewTreeObserver observer = getViewTreeObserver();
            observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
                    public void onGlobalLayout() {
                    public void onGlobalLayout() {
                        moveToUpperLeft();
                        moveToLeft();
                        getViewTreeObserver().removeOnGlobalLayoutListener(this);
                        getViewTreeObserver().removeOnGlobalLayoutListener(this);
                    }
                    }
                });
                });
@@ -154,7 +155,6 @@ public class CropView extends TiledImageView implements OnScaleGestureListener {
        getEdgesHelper(edges);
        getEdgesHelper(edges);
        final float scale = mRenderer.scale;
        final float scale = mRenderer.scale;
        mRenderer.centerX += Math.ceil(edges.left / scale);
        mRenderer.centerX += Math.ceil(edges.left / scale);
        mRenderer.centerY += Math.ceil(edges.top / scale);
    }
    }


    public void setTouchEnabled(boolean enabled) {
    public void setTouchEnabled(boolean enabled) {
@@ -197,12 +197,14 @@ public class CropView extends TiledImageView implements OnScaleGestureListener {
            float squaredDist = (mFirstX - x) * (mFirstX - x) + (mFirstY - y) * (mFirstY - y);
            float squaredDist = (mFirstX - x) * (mFirstX - x) + (mFirstY - y) * (mFirstY - y);
            float slop = config.getScaledTouchSlop() * config.getScaledTouchSlop();
            float slop = config.getScaledTouchSlop() * config.getScaledTouchSlop();
            long now = System.currentTimeMillis();
            long now = System.currentTimeMillis();
            if (mTouchCallback != null) {
                // only do this if it's a small movement
                // only do this if it's a small movement
            if (mTouchCallback != null &&
                if (squaredDist < slop &&
                    squaredDist < slop &&
                    now < mTouchDownTime + ViewConfiguration.getTapTimeout()) {
                    now < mTouchDownTime + ViewConfiguration.getTapTimeout()) {
                    mTouchCallback.onTap();
                    mTouchCallback.onTap();
                }
                }
                mTouchCallback.onTouchUp();
            }
        }
        }


        if (!mTouchEnabled) {
        if (!mTouchEnabled) {
+82 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2013 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.
 */
/* Copied from Launcher3 */
package com.android.wallpapercropper;

import android.app.Activity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class TranslucentDecor {
    private static final int SYSTEM_UI_FLAG_TRANSPARENT_STATUS = 0x00001000;
    private static final int SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION = 0x00002000;

    // Replace with SDK constants when available.
    public static final int FLAG_TRANSLUCENT_STATUS = 0x04000000;
    public static final int FLAG_TRANSLUCENT_NAVIGATION = 0x08000000;

    // Behave properly on early K builds.
    public static final boolean SYSUI_SUPPORTED = !hasSystemUiFlag("ALLOW_TRANSIENT") &&
            hasSystemUiFlag("TRANSPARENT_STATUS") &&
            hasSystemUiFlag("TRANSPARENT_NAVIGATION");

    public static final boolean WM_SUPPORTED =
            hasWindowManagerFlag("TRANSLUCENT_STATUS") &&
            hasWindowManagerFlag("TRANSLUCENT_NAVIGATION");

    private final View mTarget;

    public TranslucentDecor(View target) {
        mTarget = target;
    }

    public void requestTranslucentDecor(boolean translucent) {
        int sysui = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
        if (WM_SUPPORTED && mTarget.getContext() instanceof Activity) {
            Window w = ((Activity) mTarget.getContext()).getWindow();
            int wmFlags = FLAG_TRANSLUCENT_STATUS | FLAG_TRANSLUCENT_NAVIGATION;
            if (translucent) {
                w.addFlags(wmFlags);
            } else {
               w.clearFlags(wmFlags);
            }
        } else if (SYSUI_SUPPORTED) {  // Remove when droidfood platform is updated
            if (translucent) {
                sysui |= SYSTEM_UI_FLAG_TRANSPARENT_STATUS | SYSTEM_UI_FLAG_TRANSPARENT_NAVIGATION;
            }
        }
        mTarget.setSystemUiVisibility(sysui);
    }

    private static boolean hasWindowManagerFlag(String name) {
        try {
            return WindowManager.LayoutParams.class.getField("FLAG_" + name) != null;
        } catch (NoSuchFieldException e) {
            return false;
        }
    }

    private static boolean hasSystemUiFlag(String name) {
        try {
            return View.class.getField("SYSTEM_UI_FLAG_" + name) != null;
        } catch (NoSuchFieldException e) {
            return false;
        }
    }
}
Loading