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.AnimatorListenerAdapter; 217edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlockimport android.content.Context; 227edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlockimport android.os.ServiceManager; 237edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlockimport android.view.MotionEvent; 247edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlockimport android.view.View; 257edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlockimport android.view.animation.AccelerateInterpolator; 267edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 277edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlockimport com.android.internal.statusbar.IStatusBarService; 287edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlockimport com.android.systemui.R; 297edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 307edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlockpublic final class NavigationBarTransitions extends BarTransitions { 317edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 327edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock private final NavigationBarView mView; 337edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock private final IStatusBarService mBarService; 347edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 357edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock private boolean mLightsOut; 367edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 377edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock public NavigationBarTransitions(NavigationBarView view) { 387057d2c3a9a88f1d221bc69780385bd20c5b4999John Spurlock super(view, R.drawable.nav_background); 397edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock mView = view; 407edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock mBarService = IStatusBarService.Stub.asInterface( 417edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock ServiceManager.getService(Context.STATUS_BAR_SERVICE)); 427edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 437edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 448a8ffd4e9b15a04d2af0909205658f08c76bd6b2Adrian Roos public void init() { 45e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock applyModeBackground(-1, getMode(), false /*animate*/); 46e631b41d8be2952db48df5838c6fb5d8df4645d1John Spurlock applyMode(getMode(), false /*animate*/, true /*force*/); 477edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 487edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 497edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock @Override 507edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock protected void onTransition(int oldMode, int newMode, boolean animate) { 517edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock super.onTransition(oldMode, newMode, animate); 527edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock applyMode(newMode, animate, false /*force*/); 537edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 547edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 557edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock private void applyMode(int mode, boolean animate, boolean force) { 567edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 577edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock // apply to lights out 58c0f0a74762f7b3651d0fcd8371e9eb0c84779b1aAdrian Roos applyLightsOut(isLightsOut(mode), animate, force); 597edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 607edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 617edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock private void applyLightsOut(boolean lightsOut, boolean animate, boolean force) { 627edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock if (!force && lightsOut == mLightsOut) return; 637edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 647edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock mLightsOut = lightsOut; 657edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 667edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock final View navButtons = mView.getCurrentView().findViewById(R.id.nav_buttons); 677edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock final View lowLights = mView.getCurrentView().findViewById(R.id.lights_out); 687edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 697edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock // ok, everyone, stop it right there 707edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock navButtons.animate().cancel(); 717edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock lowLights.animate().cancel(); 727edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 737edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock final float navButtonsAlpha = lightsOut ? 0f : 1f; 747edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock final float lowLightsAlpha = lightsOut ? 1f : 0f; 757edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 767edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock if (!animate) { 777edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock navButtons.setAlpha(navButtonsAlpha); 787edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock lowLights.setAlpha(lowLightsAlpha); 797edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock lowLights.setVisibility(lightsOut ? View.VISIBLE : View.GONE); 807edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } else { 817edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock final int duration = lightsOut ? LIGHTS_OUT_DURATION : LIGHTS_IN_DURATION; 827edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock navButtons.animate() 837edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock .alpha(navButtonsAlpha) 847edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock .setDuration(duration) 857edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock .start(); 867edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 877edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock lowLights.setOnTouchListener(mLightsOutListener); 887edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock if (lowLights.getVisibility() == View.GONE) { 897edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock lowLights.setAlpha(0f); 907edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock lowLights.setVisibility(View.VISIBLE); 917edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 927edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock lowLights.animate() 937edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock .alpha(lowLightsAlpha) 947edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock .setDuration(duration) 957edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock .setInterpolator(new AccelerateInterpolator(2.0f)) 967edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock .setListener(lightsOut ? null : new AnimatorListenerAdapter() { 977edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock @Override 987edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock public void onAnimationEnd(Animator _a) { 997edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock lowLights.setVisibility(View.GONE); 1007edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 1017edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock }) 1027edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock .start(); 1037edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 1047edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 1057edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 1067edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock private final View.OnTouchListener mLightsOutListener = new View.OnTouchListener() { 1077edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock @Override 1087edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock public boolean onTouch(View v, MotionEvent ev) { 1097edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock if (ev.getAction() == MotionEvent.ACTION_DOWN) { 1107edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock // even though setting the systemUI visibility below will turn these views 1117edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock // on, we need them to come up faster so that they can catch this motion 1127edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock // event 1137edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock applyLightsOut(false, false, false); 1147edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock 1157edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock try { 11653f28eccc546504cb1e894c02176ecce3139264eAdrian Roos mBarService.setSystemUiVisibility(0, View.SYSTEM_UI_FLAG_LOW_PROFILE, 11753f28eccc546504cb1e894c02176ecce3139264eAdrian Roos "LightsOutListener"); 1187edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } catch (android.os.RemoteException ex) { 1197edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 1207edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 1217edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock return false; 1227edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock } 1237edfbca5d00cbc376fda790b50a3fedb9c6070abJohn Spurlock }; 124af638c4f9daa74b4c8e0905f07e11290f6845abeJim Miller} 125