summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Matt Casey <mrcasey@google.com> 2021-11-16 16:37:48 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2021-11-16 16:37:48 +0000
commit6e194cd39c32aa1789cb5e4fe8b0279d84b629f4 (patch)
tree0a8a7c3a854112cb6710ed0c1ca223441c2c8610
parent8aafc9d814511f8a3b26f8385094d3e023a5e036 (diff)
parent525dec66ccdcc8db658d2403c11a054c358c35df (diff)
Merge "Remove the unused assistant orb UI." into sc-v2-dev am: 525dec66cc
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16247451 Change-Id: I68660022a78c6372a2ddb8263b0fc00d64534fcd
-rw-r--r--packages/SystemUI/res/drawable/assist_orb_navbar_scrim.xml25
-rw-r--r--packages/SystemUI/res/drawable/assist_orb_scrim.xml25
-rw-r--r--packages/SystemUI/res/layout/assist_orb.xml53
-rw-r--r--packages/SystemUI/res/values/colors.xml2
-rw-r--r--packages/SystemUI/res/values/dimens.xml19
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistManager.java31
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistOrbContainer.java157
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistOrbController.java182
-rw-r--r--packages/SystemUI/src/com/android/systemui/assist/AssistOrbView.java279
9 files changed, 1 insertions, 772 deletions
diff --git a/packages/SystemUI/res/drawable/assist_orb_navbar_scrim.xml b/packages/SystemUI/res/drawable/assist_orb_navbar_scrim.xml
deleted file mode 100644
index 52ed76dd236f..000000000000
--- a/packages/SystemUI/res/drawable/assist_orb_navbar_scrim.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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
- -->
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
- <gradient
- android:type="linear"
- android:angle="90"
- android:startColor="#33000000"
- android:endColor="#00000000" />
-</shape> \ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/assist_orb_scrim.xml b/packages/SystemUI/res/drawable/assist_orb_scrim.xml
deleted file mode 100644
index bbb2617db4a0..000000000000
--- a/packages/SystemUI/res/drawable/assist_orb_scrim.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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
- -->
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
- <gradient
- android:type="linear"
- android:angle="90"
- android:startColor="#55000000"
- android:endColor="#00000000" />
-</shape> \ No newline at end of file
diff --git a/packages/SystemUI/res/layout/assist_orb.xml b/packages/SystemUI/res/layout/assist_orb.xml
deleted file mode 100644
index 0036ed6abaf1..000000000000
--- a/packages/SystemUI/res/layout/assist_orb.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2012, 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.
-*/
--->
-
-<!-- Extends FrameLayout -->
-<com.android.systemui.assist.AssistOrbContainer
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <com.android.systemui.statusbar.AlphaOptimizedView
- android:layout_width="match_parent"
- android:layout_height="@dimen/assist_orb_scrim_height"
- android:layout_gravity="bottom"
- android:id="@+id/assist_orb_scrim"
- android:background="@drawable/assist_orb_scrim"/>
-
- <com.android.systemui.assist.AssistOrbView
- android:id="@+id/assist_orb"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/search_logo"/>
- </com.android.systemui.assist.AssistOrbView>
-
- <com.android.systemui.statusbar.AlphaOptimizedView
- android:id="@+id/assist_orb_navbar_scrim"
- android:layout_height="@dimen/assist_orb_navbar_scrim_height"
- android:layout_width="match_parent"
- android:layout_gravity="bottom"
- android:elevation="50dp"
- android:outlineProvider="none"
- android:background="@drawable/assist_orb_navbar_scrim"/>
-
-</com.android.systemui.assist.AssistOrbContainer> \ No newline at end of file
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index 141b97977dab..8a3bacae9243 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -87,8 +87,6 @@
<color name="notification_section_clear_all_btn_color">@color/GM2_grey_700</color>
- <color name="assist_orb_color">#ffffff</color>
-
<color name="keyguard_user_switcher_background_gradient_color">#77000000</color>
<!-- The color of the navigation bar icons. Need to be in sync with ic_sysbar_* -->
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 38be0932070f..2afbe8c648be 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -678,25 +678,6 @@
from Keyguard. -->
<dimen name="go_to_full_shade_appearing_translation">200dp</dimen>
- <!-- The diameter of the search panel circle. -->
- <dimen name="assist_orb_size">144dp</dimen>
-
- <!-- The margin to the edge of the screen from where the orb starts to appear -->
- <dimen name="assist_orb_base_margin">22dp</dimen>
-
- <!-- The amount the orb translates when appearing -->
- <dimen name="assist_orb_travel_distance">26dp</dimen>
-
- <!-- The elevation of the orb -->
- <dimen name="assist_orb_elevation">12dp</dimen>
-
- <!-- The height of the scrim behind the orb. -->
- <dimen name="assist_orb_scrim_height">250dp</dimen>
-
- <!-- The height of the scrim behind the search panel circle. Should be navigation_bar_height
- + 8dp. -->
- <dimen name="assist_orb_navbar_scrim_height">56dp</dimen>
-
<!-- The width/height of the keyguard bottom area icon view on keyguard. -->
<dimen name="keyguard_affordance_height">48dp</dimen>
<dimen name="keyguard_affordance_width">48dp</dimen>
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
index b1197e6aa6f5..5e44c56d36c6 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
@@ -7,7 +7,6 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_A
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.app.ActivityManager;
import android.app.ActivityOptions;
import android.app.SearchManager;
import android.content.ActivityNotFoundException;
@@ -27,7 +26,6 @@ import android.util.Log;
import com.android.internal.app.AssistUtils;
import com.android.internal.app.IVoiceInteractionSessionListener;
-import com.android.internal.app.IVoiceInteractionSessionShowCallback;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.keyguard.KeyguardUpdateMonitor;
@@ -37,7 +35,6 @@ import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.model.SysUiState;
import com.android.systemui.recents.OverviewProxyService;
import com.android.systemui.statusbar.CommandQueue;
-import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import javax.inject.Inject;
@@ -124,23 +121,8 @@ public class AssistManager {
private final DeviceProvisionedController mDeviceProvisionedController;
private final CommandQueue mCommandQueue;
- private final AssistOrbController mOrbController;
protected final AssistUtils mAssistUtils;
- private IVoiceInteractionSessionShowCallback mShowCallback =
- new IVoiceInteractionSessionShowCallback.Stub() {
-
- @Override
- public void onFailed() throws RemoteException {
- mOrbController.postHide();
- }
-
- @Override
- public void onShown() throws RemoteException {
- mOrbController.postHide();
- }
- };
-
@Inject
public AssistManager(
DeviceProvisionedController controller,
@@ -149,7 +131,6 @@ public class AssistManager {
CommandQueue commandQueue,
PhoneStateMonitor phoneStateMonitor,
OverviewProxyService overviewProxyService,
- ConfigurationController configurationController,
Lazy<SysUiState> sysUiState,
DefaultUiController defaultUiController,
AssistLogger assistLogger) {
@@ -161,8 +142,6 @@ public class AssistManager {
mPhoneStateMonitor = phoneStateMonitor;
mAssistLogger = assistLogger;
- mOrbController = new AssistOrbController(configurationController, context);
-
registerVoiceInteractionSessionListener();
mUiController = defaultUiController;
@@ -223,10 +202,6 @@ public class AssistManager {
});
}
- protected boolean shouldShowOrb() {
- return !ActivityManager.isLowRamDeviceStatic();
- }
-
public void startAssist(Bundle args) {
final ComponentName assistComponent = getAssistInfo();
if (assistComponent == null) {
@@ -234,10 +209,6 @@ public class AssistManager {
}
final boolean isService = assistComponent.equals(getVoiceInteractorComponentName());
- if (!isService || (!isVoiceSessionRunning() && shouldShowOrb())) {
- mOrbController.showOrb(assistComponent, isService);
- mOrbController.postHideDelayed(isService ? TIMEOUT_SERVICE : TIMEOUT_ACTIVITY);
- }
if (args == null) {
args = new Bundle();
@@ -329,7 +300,7 @@ public class AssistManager {
private void startVoiceInteractor(Bundle args) {
mAssistUtils.showSessionForActiveService(args,
- VoiceInteractionSession.SHOW_SOURCE_ASSIST_GESTURE, mShowCallback, null);
+ VoiceInteractionSession.SHOW_SOURCE_ASSIST_GESTURE, null, null);
}
public void launchVoiceAssistFromKeyguard() {
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistOrbContainer.java b/packages/SystemUI/src/com/android/systemui/assist/AssistOrbContainer.java
deleted file mode 100644
index 95b9e81a0b14..000000000000
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistOrbContainer.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (C) 2015 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
- */
-
-package com.android.systemui.assist;
-
-import android.annotation.Nullable;
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.FrameLayout;
-
-import com.android.systemui.R;
-import com.android.systemui.animation.Interpolators;
-
-public class AssistOrbContainer extends FrameLayout {
-
- private static final long EXIT_START_DELAY = 150;
-
- private View mScrim;
- private View mNavbarScrim;
- private AssistOrbView mOrb;
-
- private boolean mAnimatingOut;
-
- public AssistOrbContainer(Context context) {
- this(context, null);
- }
-
- public AssistOrbContainer(Context context, @Nullable AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public AssistOrbContainer(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
- mScrim = findViewById(R.id.assist_orb_scrim);
- mNavbarScrim = findViewById(R.id.assist_orb_navbar_scrim);
- mOrb = (AssistOrbView) findViewById(R.id.assist_orb);
- }
-
- public void show(final boolean show, boolean animate, Runnable onDone) {
- if (show) {
- if (getVisibility() != View.VISIBLE) {
- setVisibility(View.VISIBLE);
- if (animate) {
- startEnterAnimation(onDone);
- } else {
- reset();
- if (onDone != null) {
- onDone.run();
- }
- }
- }
- } else {
- if (animate) {
- startExitAnimation(new Runnable() {
- @Override
- public void run() {
- mAnimatingOut = false;
- setVisibility(View.GONE);
- if (onDone != null) {
- onDone.run();
- }
- }
- });
- } else {
- setVisibility(View.GONE);
- if (onDone != null) {
- onDone.run();
- }
- }
- }
- }
-
- private void reset() {
- mAnimatingOut = false;
- mOrb.reset();
- mScrim.setAlpha(1f);
- mNavbarScrim.setAlpha(1f);
- }
-
- private void startEnterAnimation(Runnable onDone) {
- if (mAnimatingOut) {
- return;
- }
- mOrb.startEnterAnimation();
- mScrim.setAlpha(0f);
- mNavbarScrim.setAlpha(0f);
- post(new Runnable() {
- @Override
- public void run() {
- mScrim.animate()
- .alpha(1f)
- .setDuration(300)
- .setStartDelay(0)
- .setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN);
- mNavbarScrim.animate()
- .alpha(1f)
- .setDuration(300)
- .setStartDelay(0)
- .setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN)
- .withEndAction(onDone);
- }
- });
- }
-
- private void startExitAnimation(final Runnable endRunnable) {
- if (mAnimatingOut) {
- if (endRunnable != null) {
- endRunnable.run();
- }
- return;
- }
- mAnimatingOut = true;
- mOrb.startExitAnimation(EXIT_START_DELAY);
- mScrim.animate()
- .alpha(0f)
- .setDuration(250)
- .setStartDelay(EXIT_START_DELAY)
- .setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
- mNavbarScrim.animate()
- .alpha(0f)
- .setDuration(250)
- .setStartDelay(EXIT_START_DELAY)
- .setInterpolator(Interpolators.FAST_OUT_SLOW_IN)
- .withEndAction(endRunnable);
- }
-
- /**
- * Whether the panel is showing, or, if it's animating, whether it will be
- * when the animation is done.
- */
- public boolean isShowing() {
- return getVisibility() == View.VISIBLE && !mAnimatingOut;
- }
-
- public AssistOrbView getOrb() {
- return mOrb;
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistOrbController.java b/packages/SystemUI/src/com/android/systemui/assist/AssistOrbController.java
deleted file mode 100644
index 408201558a9b..000000000000
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistOrbController.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (C) 2021 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.
- */
-
-package com.android.systemui.assist;
-
-import android.annotation.NonNull;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.pm.ActivityInfo;
-import android.content.pm.PackageManager;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.graphics.PixelFormat;
-import android.os.Binder;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.Gravity;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.widget.ImageView;
-
-import com.android.settingslib.applications.InterestingConfigChanges;
-import com.android.systemui.R;
-import com.android.systemui.statusbar.policy.ConfigurationController;
-
-/**
- * AssistOrbController controls the showing and hiding of the assistant orb.
- */
-public class AssistOrbController {
- private static final String ASSIST_ICON_METADATA_NAME =
- "com.android.systemui.action_assist_icon";
- private static final String TAG = "AssistOrbController";
- private static final boolean VERBOSE = false;
-
- private final InterestingConfigChanges mInterestingConfigChanges;
- private AssistOrbContainer mView;
- private final Context mContext;
- private final WindowManager mWindowManager;
-
- private Runnable mHideRunnable = new Runnable() {
- @Override
- public void run() {
- mView.removeCallbacks(this);
- mView.show(false /* show */, true /* animate */, () -> {
- if (mView.isAttachedToWindow()) {
- mWindowManager.removeView(mView);
- }
- });
- }
- };
-
- private ConfigurationController.ConfigurationListener mConfigurationListener =
- new ConfigurationController.ConfigurationListener() {
- @Override
- public void onConfigChanged(Configuration newConfig) {
- if (!mInterestingConfigChanges.applyNewConfig(mContext.getResources())) {
- return;
- }
- boolean visible = false;
- if (mView != null) {
- visible = mView.isShowing();
- if (mView.isAttachedToWindow()) {
- mWindowManager.removeView(mView);
- }
- }
-
- if (visible) {
- showOrb(false);
- }
- }
- };
-
- AssistOrbController(ConfigurationController configurationController, Context context) {
- mContext = context;
- mWindowManager = mContext.getSystemService(WindowManager.class);
- mInterestingConfigChanges = new InterestingConfigChanges(ActivityInfo.CONFIG_ORIENTATION
- | ActivityInfo.CONFIG_LOCALE | ActivityInfo.CONFIG_UI_MODE
- | ActivityInfo.CONFIG_SCREEN_LAYOUT | ActivityInfo.CONFIG_ASSETS_PATHS);
-
- configurationController.addCallback(mConfigurationListener);
- mConfigurationListener.onConfigChanged(context.getResources().getConfiguration());
- }
-
- public void postHide() {
- mView.post(mHideRunnable);
- }
-
- public void postHideDelayed(long delayMs) {
- mView.postDelayed(mHideRunnable, delayMs);
- }
-
- private void showOrb(boolean animated) {
- if (mView == null) {
- mView = (AssistOrbContainer) LayoutInflater.from(mContext).inflate(
- R.layout.assist_orb, null);
- mView.setVisibility(View.GONE);
- mView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
- | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
- }
- if (!mView.isAttachedToWindow()) {
- WindowManager.LayoutParams params = getLayoutParams();
- mWindowManager.addView(mView, params);
- }
- mView.show(true, animated, null);
- }
-
- private WindowManager.LayoutParams getLayoutParams() {
- WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT,
- mContext.getResources().getDimensionPixelSize(R.dimen.assist_orb_scrim_height),
- WindowManager.LayoutParams.TYPE_VOICE_INTERACTION_STARTING,
- WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
- | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
- | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
- PixelFormat.TRANSLUCENT);
- lp.token = new Binder();
- lp.gravity = Gravity.BOTTOM | Gravity.START;
- lp.setTitle("AssistPreviewPanel");
- lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED
- | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING;
- return lp;
- }
-
- public void showOrb(@NonNull ComponentName assistComponent, boolean isService) {
- showOrb(true);
- maybeSwapSearchIcon(assistComponent, isService);
- }
-
- private void maybeSwapSearchIcon(@NonNull ComponentName assistComponent, boolean isService) {
- replaceDrawable(mView.getOrb().getLogo(), assistComponent, ASSIST_ICON_METADATA_NAME,
- isService);
- }
-
- public void replaceDrawable(ImageView v, ComponentName component, String name,
- boolean isService) {
- if (component != null) {
- try {
- PackageManager packageManager = mContext.getPackageManager();
- // Look for the search icon specified in the activity meta-data
- Bundle metaData = isService
- ? packageManager.getServiceInfo(
- component, PackageManager.GET_META_DATA).metaData
- : packageManager.getActivityInfo(
- component, PackageManager.GET_META_DATA).metaData;
- if (metaData != null) {
- int iconResId = metaData.getInt(name);
- if (iconResId != 0) {
- Resources res = packageManager.getResourcesForApplication(
- component.getPackageName());
- v.setImageDrawable(res.getDrawable(iconResId));
- return;
- }
- }
- } catch (PackageManager.NameNotFoundException e) {
- if (VERBOSE) {
- Log.v(TAG, "Assistant component "
- + component.flattenToShortString() + " not found");
- }
- } catch (Resources.NotFoundException nfe) {
- Log.w(TAG, "Failed to swap drawable from "
- + component.flattenToShortString(), nfe);
- }
- }
- v.setImageDrawable(null);
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistOrbView.java b/packages/SystemUI/src/com/android/systemui/assist/AssistOrbView.java
deleted file mode 100644
index 16d9c84c8734..000000000000
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistOrbView.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * 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
- */
-
-package com.android.systemui.assist;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Outline;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewOutlineProvider;
-import android.view.animation.Interpolator;
-import android.view.animation.OvershootInterpolator;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-
-import com.android.systemui.R;
-import com.android.systemui.animation.Interpolators;
-
-public class AssistOrbView extends FrameLayout {
-
- private final int mCircleMinSize;
- private final int mBaseMargin;
- private final int mStaticOffset;
- private final Paint mBackgroundPaint = new Paint();
- private final Rect mCircleRect = new Rect();
- private final Rect mStaticRect = new Rect();
- private final Interpolator mOvershootInterpolator = new OvershootInterpolator();
-
- private boolean mClipToOutline;
- private final int mMaxElevation;
- private float mOutlineAlpha;
- private float mOffset;
- private float mCircleSize;
- private ImageView mLogo;
- private float mCircleAnimationEndValue;
-
- private ValueAnimator mOffsetAnimator;
- private ValueAnimator mCircleAnimator;
-
- private ValueAnimator.AnimatorUpdateListener mCircleUpdateListener
- = new ValueAnimator.AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator animation) {
- applyCircleSize((float) animation.getAnimatedValue());
- updateElevation();
- }
- };
- private AnimatorListenerAdapter mClearAnimatorListener = new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- mCircleAnimator = null;
- }
- };
- private ValueAnimator.AnimatorUpdateListener mOffsetUpdateListener
- = new ValueAnimator.AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator animation) {
- mOffset = (float) animation.getAnimatedValue();
- updateLayout();
- }
- };
-
-
- public AssistOrbView(Context context) {
- this(context, null);
- }
-
- public AssistOrbView(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public AssistOrbView(Context context, AttributeSet attrs, int defStyleAttr) {
- this(context, attrs, defStyleAttr, 0);
- }
-
- public AssistOrbView(Context context, AttributeSet attrs, int defStyleAttr,
- int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- setOutlineProvider(new ViewOutlineProvider() {
- @Override
- public void getOutline(View view, Outline outline) {
- if (mCircleSize > 0.0f) {
- outline.setOval(mCircleRect);
- } else {
- outline.setEmpty();
- }
- outline.setAlpha(mOutlineAlpha);
- }
- });
- setWillNotDraw(false);
- mCircleMinSize = context.getResources().getDimensionPixelSize(
- R.dimen.assist_orb_size);
- mBaseMargin = context.getResources().getDimensionPixelSize(
- R.dimen.assist_orb_base_margin);
- mStaticOffset = context.getResources().getDimensionPixelSize(
- R.dimen.assist_orb_travel_distance);
- mMaxElevation = context.getResources().getDimensionPixelSize(
- R.dimen.assist_orb_elevation);
- mBackgroundPaint.setAntiAlias(true);
- mBackgroundPaint.setColor(getResources().getColor(R.color.assist_orb_color));
- }
-
- public ImageView getLogo() {
- return mLogo;
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
- super.onDraw(canvas);
- drawBackground(canvas);
- }
-
- private void drawBackground(Canvas canvas) {
- canvas.drawCircle(mCircleRect.centerX(), mCircleRect.centerY(), mCircleSize / 2,
- mBackgroundPaint);
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
- mLogo = findViewById(R.id.search_logo);
- }
-
- @Override
- protected void onLayout(boolean changed, int l, int t, int r, int b) {
- mLogo.layout(0, 0, mLogo.getMeasuredWidth(), mLogo.getMeasuredHeight());
- if (changed) {
- updateCircleRect(mStaticRect, mStaticOffset, true);
- }
- }
-
- public void animateCircleSize(float circleSize, long duration,
- long startDelay, Interpolator interpolator) {
- if (circleSize == mCircleAnimationEndValue) {
- return;
- }
- if (mCircleAnimator != null) {
- mCircleAnimator.cancel();
- }
- mCircleAnimator = ValueAnimator.ofFloat(mCircleSize, circleSize);
- mCircleAnimator.addUpdateListener(mCircleUpdateListener);
- mCircleAnimator.addListener(mClearAnimatorListener);
- mCircleAnimator.setInterpolator(interpolator);
- mCircleAnimator.setDuration(duration);
- mCircleAnimator.setStartDelay(startDelay);
- mCircleAnimator.start();
- mCircleAnimationEndValue = circleSize;
- }
-
- private void applyCircleSize(float circleSize) {
- mCircleSize = circleSize;
- updateLayout();
- }
-
- private void updateElevation() {
- float t = (mStaticOffset - mOffset) / (float) mStaticOffset;
- t = 1.0f - Math.max(t, 0.0f);
- float offset = t * mMaxElevation;
- setElevation(offset);
- }
-
- /**
- * Animates the offset to the edge of the screen.
- *
- * @param offset The offset to apply.
- * @param startDelay The desired start delay if animated.
- *
- * @param interpolator The desired interpolator if animated. If null,
- * a default interpolator will be taken designed for appearing or
- * disappearing.
- */
- private void animateOffset(float offset, long duration, long startDelay,
- Interpolator interpolator) {
- if (mOffsetAnimator != null) {
- mOffsetAnimator.removeAllListeners();
- mOffsetAnimator.cancel();
- }
- mOffsetAnimator = ValueAnimator.ofFloat(mOffset, offset);
- mOffsetAnimator.addUpdateListener(mOffsetUpdateListener);
- mOffsetAnimator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- mOffsetAnimator = null;
- }
- });
- mOffsetAnimator.setInterpolator(interpolator);
- mOffsetAnimator.setStartDelay(startDelay);
- mOffsetAnimator.setDuration(duration);
- mOffsetAnimator.start();
- }
-
- private void updateLayout() {
- updateCircleRect();
- updateLogo();
- invalidateOutline();
- invalidate();
- updateClipping();
- }
-
- private void updateClipping() {
- boolean clip = mCircleSize < mCircleMinSize;
- if (clip != mClipToOutline) {
- setClipToOutline(clip);
- mClipToOutline = clip;
- }
- }
-
- private void updateLogo() {
- float translationX = (mCircleRect.left + mCircleRect.right) / 2.0f - mLogo.getWidth() / 2.0f;
- float translationY = (mCircleRect.top + mCircleRect.bottom) / 2.0f
- - mLogo.getHeight() / 2.0f - mCircleMinSize / 7f;
- float t = (mStaticOffset - mOffset) / (float) mStaticOffset;
- translationY += t * mStaticOffset * 0.1f;
- float alpha = 1.0f-t;
- alpha = Math.max((alpha - 0.5f) * 2.0f, 0);
- mLogo.setImageAlpha((int) (alpha * 255));
- mLogo.setTranslationX(translationX);
- mLogo.setTranslationY(translationY);
- }
-
- private void updateCircleRect() {
- updateCircleRect(mCircleRect, mOffset, false);
- }
-
- private void updateCircleRect(Rect rect, float offset, boolean useStaticSize) {
- int left, top;
- float circleSize = useStaticSize ? mCircleMinSize : mCircleSize;
- left = (int) (getWidth() - circleSize) / 2;
- top = (int) (getHeight() - circleSize / 2 - mBaseMargin - offset);
- rect.set(left, top, (int) (left + circleSize), (int) (top + circleSize));
- }
-
- public void startExitAnimation(long delay) {
- animateCircleSize(0, 200, delay, Interpolators.FAST_OUT_LINEAR_IN);
- animateOffset(0, 200, delay, Interpolators.FAST_OUT_LINEAR_IN);
- }
-
- public void startEnterAnimation() {
- applyCircleSize(0);
- post(new Runnable() {
- @Override
- public void run() {
- animateCircleSize(mCircleMinSize, 300, 0 /* delay */, mOvershootInterpolator);
- animateOffset(mStaticOffset, 400, 0 /* delay */, Interpolators.LINEAR_OUT_SLOW_IN);
- }
- });
- }
-
- public void reset() {
- mClipToOutline = false;
- mBackgroundPaint.setAlpha(255);
- mOutlineAlpha = 1.0f;
- }
-
- @Override
- public boolean hasOverlappingRendering() {
- // not really true but it's ok during an animation, as it's never permanent
- return false;
- }
-}