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

Commit 2fb5976c authored by Jason Chang's avatar Jason Chang Committed by Android (Google) Code Review
Browse files

Merge "Implement Tutorial messages only need to be shown twice instead of always shown"

parents cd561cbf b7a3c294
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -7911,6 +7911,13 @@ public final class Settings {
         */
        public static final String TAPS_APP_TO_EXIT = "taps_app_to_exit";
        /**
         * Internal use, one handed mode tutorial showed times.
         * @hide
         */
        public static final String ONE_HANDED_TUTORIAL_SHOW_COUNT =
                "one_handed_tutorial_show_count";
        /**
         * The current night mode that has been selected by the user.  Owned
         * and controlled by UiModeManagerService.  Constants are as per
+41 −2
Original line number Diff line number Diff line
@@ -16,11 +16,13 @@

package com.android.systemui.onehanded;

import android.content.ContentResolver;
import android.content.Context;
import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.Rect;
import android.os.Handler;
import android.provider.Settings;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
@@ -48,12 +50,15 @@ import javax.inject.Singleton;
@Singleton
public class OneHandedTutorialHandler implements OneHandedTransitionCallback, Dumpable {
    private static final String TAG = "OneHandedTutorialHandler";
    private static final int MAX_TUTORIAL_SHOW_COUNT = 2;
    private final Rect mLastUpdatedBounds = new Rect();
    private final WindowManager mWindowManager;

    private View mTutorialView;
    private Point mDisplaySize = new Point();
    private Handler mUpdateHandler;
    private ContentResolver mContentResolver;
    private boolean mCanShowTutorial;

    /**
     * Container of the tutorial panel showing at outside region when one handed starting
@@ -71,6 +76,7 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback, Du
    @Inject
    public OneHandedTutorialHandler(Context context) {
        context.getDisplay().getRealSize(mDisplaySize);
        mContentResolver = context.getContentResolver();
        mUpdateHandler = new Handler();
        mWindowManager = context.getSystemService(WindowManager.class);
        mTargetViewContainer = new FrameLayout(context);
@@ -79,12 +85,20 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback, Du
                R.fraction.config_one_handed_offset, 1, 1));
        mTutorialView = LayoutInflater.from(context).inflate(R.xml.one_handed_tutorial, null);
        mTargetViewContainer.addView(mTutorialView);
        mCanShowTutorial = (Settings.Secure.getInt(mContentResolver,
                Settings.Secure.ONE_HANDED_TUTORIAL_SHOW_COUNT, 0) >= MAX_TUTORIAL_SHOW_COUNT)
                ? false : true;
        if (mCanShowTutorial) {
            createOrUpdateTutorialTarget();
        }
    }

    @Override
    public void onStartFinished(Rect bounds) {
        mUpdateHandler.post(() -> updateFinished(View.VISIBLE, 0f));
        mUpdateHandler.post(() -> {
            updateFinished(View.VISIBLE, 0f);
            updateTutorialCount();
        });
    }

    @Override
@@ -94,10 +108,23 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback, Du
    }

    private void updateFinished(int visible, float finalPosition) {
        if (!canShowTutorial()) {
            return;
        }

        mTargetViewContainer.setVisibility(visible);
        mTargetViewContainer.setTranslationY(finalPosition);
    }

    private void updateTutorialCount() {
        int showCount = Settings.Secure.getInt(mContentResolver,
                Settings.Secure.ONE_HANDED_TUTORIAL_SHOW_COUNT, 0);
        showCount = Math.min(MAX_TUTORIAL_SHOW_COUNT, showCount + 1);
        mCanShowTutorial = showCount < MAX_TUTORIAL_SHOW_COUNT;
        Settings.Secure.putInt(mContentResolver,
                Settings.Secure.ONE_HANDED_TUTORIAL_SHOW_COUNT, showCount);
    }

    /**
     * Adds the tutorial target view to the WindowManager and update its layout, so it's ready
     * to be animated in.
@@ -153,7 +180,19 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback, Du
        pw.println(mLastUpdatedBounds);
    }

    private boolean canShowTutorial() {
        if (!mCanShowTutorial) {
            mTargetViewContainer.setVisibility(View.GONE);
            return false;
        }

        return true;
    }

    private void onAnimationUpdate(float value) {
        if (!canShowTutorial()) {
            return;
        }
        mTargetViewContainer.setVisibility(View.VISIBLE);
        mTargetViewContainer.setTransitionGroup(true);
        mTargetViewContainer.setTranslationY(value - mTargetViewContainer.getHeight());