17edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock/* 27edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock * Copyright (C) 2013 The Android Open Source Project 37edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock * 47edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock * Licensed under the Apache License, Version 2.0 (the "License"); 57edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock * you may not use this file except in compliance with the License. 67edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock * You may obtain a copy of the License at 77edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock * 87edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock * http://www.apache.org/licenses/LICENSE-2.0 97edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock * 107edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock * Unless required by applicable law or agreed to in writing, software 117edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock * distributed under the License is distributed on an "AS IS" BASIS, 127edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock * See the License for the specific language governing permissions and 147edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock * limitations under the License. 157edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock */ 167edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 177edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlockpackage com.android.systemui.statusbar.phone; 187edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 197edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlockimport android.animation.Animator; 207edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlockimport android.animation.AnimatorSet; 217edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlockimport android.animation.ObjectAnimator; 227edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlockimport android.content.res.Resources; 237edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlockimport android.view.View; 247edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 257edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlockimport com.android.systemui.R; 267edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 277edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlockpublic final class PhoneStatusBarTransitions extends BarTransitions { 28bd95740648372449a4d5c164d7050eee352d4c24John Spurlock private static final float ICON_ALPHA_WHEN_NOT_OPAQUE = 1; 29e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock private static final float ICON_ALPHA_WHEN_LIGHTS_OUT_BATTERY_CLOCK = 0.5f; 30e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock private static final float ICON_ALPHA_WHEN_LIGHTS_OUT_NON_BATTERY_CLOCK = 0; 317edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 327edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock private final PhoneStatusBarView mView; 33e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock private final float mIconAlphaWhenOpaque; 347edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 357edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock private View mLeftSide, mStatusIcons, mSignalCluster, mBattery, mClock; 367edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock private Animator mCurrentAnimation; 377edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 387edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock public PhoneStatusBarTransitions(PhoneStatusBarView view) { 397057d2c3a9a88f1d221bc69780385bd20c5b4999John Spurlock super(view, R.drawable.status_background); 407edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock mView = view; 417edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock final Resources res = mView.getContext().getResources(); 42e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock mIconAlphaWhenOpaque = res.getFraction(R.dimen.status_bar_icon_drawing_alpha, 1, 1); 437edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 447edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 457edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock public void init() { 467edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock mLeftSide = mView.findViewById(R.id.notification_icon_area); 477edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock mStatusIcons = mView.findViewById(R.id.statusIcons); 487edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock mSignalCluster = mView.findViewById(R.id.signal_cluster); 497edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock mBattery = mView.findViewById(R.id.battery); 507edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock mClock = mView.findViewById(R.id.clock); 51acea100015dffbb77d137b0681d6c34992e72ae9Jorim Jaggi applyModeBackground(-1, getMode(), false /*animate*/); 52acea100015dffbb77d137b0681d6c34992e72ae9Jorim Jaggi applyMode(getMode(), false /*animate*/); 537edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 547edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 557edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock public ObjectAnimator animateTransitionTo(View v, float toAlpha) { 567edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock return ObjectAnimator.ofFloat(v, "alpha", v.getAlpha(), toAlpha); 577edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 587edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 597edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock private float getNonBatteryClockAlphaFor(int mode) { 60c0f0a74762f7b3651d0fcd8371e9eb0c84779b1aAdrian Roos return isLightsOut(mode) ? ICON_ALPHA_WHEN_LIGHTS_OUT_NON_BATTERY_CLOCK 61bd95740648372449a4d5c164d7050eee352d4c24John Spurlock : !isOpaque(mode) ? ICON_ALPHA_WHEN_NOT_OPAQUE 62e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock : mIconAlphaWhenOpaque; 637edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 647edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 657edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock private float getBatteryClockAlpha(int mode) { 66c0f0a74762f7b3651d0fcd8371e9eb0c84779b1aAdrian Roos return isLightsOut(mode) ? ICON_ALPHA_WHEN_LIGHTS_OUT_BATTERY_CLOCK 677edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock : getNonBatteryClockAlphaFor(mode); 687edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 697edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 70bd95740648372449a4d5c164d7050eee352d4c24John Spurlock private boolean isOpaque(int mode) { 71ea56251d92050e9a672d1f66d0d4621e4dd4136eAdrian Roos return !(mode == MODE_SEMI_TRANSPARENT || mode == MODE_TRANSLUCENT 72c0f0a74762f7b3651d0fcd8371e9eb0c84779b1aAdrian Roos || mode == MODE_TRANSPARENT || mode == MODE_LIGHTS_OUT_TRANSPARENT); 737edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 747edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 757edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock @Override 767edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock protected void onTransition(int oldMode, int newMode, boolean animate) { 777edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock super.onTransition(oldMode, newMode, animate); 787edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock applyMode(newMode, animate); 797edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 807edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 817edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock private void applyMode(int mode, boolean animate) { 827edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock if (mLeftSide == null) return; // pre-init 837edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock float newAlpha = getNonBatteryClockAlphaFor(mode); 847edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock float newAlphaBC = getBatteryClockAlpha(mode); 857edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock if (mCurrentAnimation != null) { 867edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock mCurrentAnimation.cancel(); 877edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 887edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock if (animate) { 897edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock AnimatorSet anims = new AnimatorSet(); 907edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock anims.playTogether( 917edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock animateTransitionTo(mLeftSide, newAlpha), 927edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock animateTransitionTo(mStatusIcons, newAlpha), 937edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock animateTransitionTo(mSignalCluster, newAlpha), 947edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock animateTransitionTo(mBattery, newAlphaBC), 957edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock animateTransitionTo(mClock, newAlphaBC) 967edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock ); 97c0f0a74762f7b3651d0fcd8371e9eb0c84779b1aAdrian Roos if (isLightsOut(mode)) { 987edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock anims.setDuration(LIGHTS_OUT_DURATION); 997edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 1007edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock anims.start(); 1017edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock mCurrentAnimation = anims; 1027edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } else { 1037edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock mLeftSide.setAlpha(newAlpha); 1047edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock mStatusIcons.setAlpha(newAlpha); 1057edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock mSignalCluster.setAlpha(newAlpha); 1067edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock mBattery.setAlpha(newAlphaBC); 1077edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock mClock.setAlpha(newAlphaBC); 1087edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 1097edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 1107edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock}