1 /* 2 * Copyright (C) 2023 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.car.app; 18 19 import android.annotation.NonNull; 20 import android.annotation.Nullable; 21 import android.app.Activity; 22 import android.app.Application; 23 import android.car.builtin.app.ActivityManagerHelper; 24 import android.os.Bundle; 25 26 /** 27 * A factory to create instances of the {@link CarTaskViewControllerHostLifecycle}. 28 * 29 * @hide 30 */ 31 public final class CarTaskViewControllerHostLifecycleFactory { CarTaskViewControllerHostLifecycleFactory()32 private CarTaskViewControllerHostLifecycleFactory() { 33 } 34 35 /** 36 * Creates an instance of {@link CarTaskViewControllerHostLifecycle} which adapts to the 37 * activity lifecycle. 38 * 39 * @param activity the activity which the {@link CarTaskViewControllerHostLifecycle} needs to 40 * be created for. 41 */ 42 @NonNull forActivity(@onNull Activity activity)43 public static CarTaskViewControllerHostLifecycle forActivity(@NonNull Activity activity) { 44 return new CarTaskViewControllerHostActivityLifecycleAdapter(activity).getLifecycle(); 45 } 46 47 private static class CarTaskViewControllerHostActivityLifecycleAdapter 48 implements Application.ActivityLifecycleCallbacks { 49 50 CarTaskViewControllerHostLifecycle mCarTaskViewControllerHostLifecycle; 51 CarTaskViewControllerHostActivityLifecycleAdapter(Activity activity)52 CarTaskViewControllerHostActivityLifecycleAdapter(Activity activity) { 53 mCarTaskViewControllerHostLifecycle = new CarTaskViewControllerHostLifecycle(); 54 activity.registerActivityLifecycleCallbacks(this); 55 // If the activity is already in resumed state, trigger the host appeared callback 56 // so that the visibility information is latest. 57 if (ActivityManagerHelper.isVisible(activity)) { 58 mCarTaskViewControllerHostLifecycle.hostAppeared(); 59 } 60 } 61 62 @Override onActivityCreated(@onNull Activity activity, @Nullable Bundle savedInstanceState)63 public void onActivityCreated(@NonNull Activity activity, 64 @Nullable Bundle savedInstanceState) { 65 } 66 67 @Override onActivityStarted(@onNull Activity activity)68 public void onActivityStarted(@NonNull Activity activity) { 69 // Don't invoke hostAppeared() in onStart(), which breaks the CTS 70 // ActivityLifecycleTests#testFinishBelowDialogActivity. 71 } 72 73 @Override onActivityResumed(@onNull Activity activity)74 public void onActivityResumed(@NonNull Activity activity) { 75 mCarTaskViewControllerHostLifecycle.hostAppeared(); 76 } 77 78 @Override onActivityPaused(@onNull Activity activity)79 public void onActivityPaused(@NonNull Activity activity) { 80 } 81 82 @Override onActivityStopped(@onNull Activity activity)83 public void onActivityStopped(@NonNull Activity activity) { 84 mCarTaskViewControllerHostLifecycle.hostDisappeared(); 85 } 86 87 @Override onActivitySaveInstanceState(@onNull Activity activity, @NonNull Bundle outState)88 public void onActivitySaveInstanceState(@NonNull Activity activity, 89 @NonNull Bundle outState) { 90 } 91 92 @Override onActivityDestroyed(@onNull Activity activity)93 public void onActivityDestroyed(@NonNull Activity activity) { 94 mCarTaskViewControllerHostLifecycle.hostDestroyed(); 95 } 96 getLifecycle()97 public CarTaskViewControllerHostLifecycle getLifecycle() { 98 return mCarTaskViewControllerHostLifecycle; 99 } 100 } 101 } 102