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.annotation.ApiRequirements; 24 import android.car.builtin.app.ActivityManagerHelper; 25 import android.os.Bundle; 26 27 /** 28 * A factory to create instances of the {@link CarTaskViewControllerHostLifecycle}. 29 * 30 * @hide 31 */ 32 public final class CarTaskViewControllerHostLifecycleFactory { CarTaskViewControllerHostLifecycleFactory()33 private CarTaskViewControllerHostLifecycleFactory() { 34 } 35 36 /** 37 * Creates an instance of {@link CarTaskViewControllerHostLifecycle} which adapts to the 38 * activity lifecycle. 39 * 40 * @param activity the activity which the {@link CarTaskViewControllerHostLifecycle} needs to 41 * be created for. 42 */ 43 @ApiRequirements(minCarVersion = ApiRequirements.CarVersion.UPSIDE_DOWN_CAKE_1, 44 minPlatformVersion = ApiRequirements.PlatformVersion.UPSIDE_DOWN_CAKE_1) 45 @NonNull forActivity(@onNull Activity activity)46 public static CarTaskViewControllerHostLifecycle forActivity(@NonNull Activity activity) { 47 return new CarTaskViewControllerHostActivityLifecycleAdapter(activity).getLifecycle(); 48 } 49 50 private static class CarTaskViewControllerHostActivityLifecycleAdapter 51 implements Application.ActivityLifecycleCallbacks { 52 53 CarTaskViewControllerHostLifecycle mCarTaskViewControllerHostLifecycle; 54 CarTaskViewControllerHostActivityLifecycleAdapter(Activity activity)55 CarTaskViewControllerHostActivityLifecycleAdapter(Activity activity) { 56 mCarTaskViewControllerHostLifecycle = new CarTaskViewControllerHostLifecycle(); 57 activity.registerActivityLifecycleCallbacks(this); 58 // If the activity is already in resumed state, trigger the host appeared callback 59 // so that the visibility information is latest. 60 if (ActivityManagerHelper.isVisible(activity)) { 61 mCarTaskViewControllerHostLifecycle.hostAppeared(); 62 } 63 } 64 65 @Override onActivityCreated(@onNull Activity activity, @Nullable Bundle savedInstanceState)66 public void onActivityCreated(@NonNull Activity activity, 67 @Nullable Bundle savedInstanceState) { 68 } 69 70 @Override onActivityStarted(@onNull Activity activity)71 public void onActivityStarted(@NonNull Activity activity) { 72 // Don't invoke hostAppeared() in onStart(), which breaks the CTS 73 // ActivityLifecycleTests#testFinishBelowDialogActivity. 74 } 75 76 @Override onActivityResumed(@onNull Activity activity)77 public void onActivityResumed(@NonNull Activity activity) { 78 mCarTaskViewControllerHostLifecycle.hostAppeared(); 79 } 80 81 @Override onActivityPaused(@onNull Activity activity)82 public void onActivityPaused(@NonNull Activity activity) { 83 } 84 85 @Override onActivityStopped(@onNull Activity activity)86 public void onActivityStopped(@NonNull Activity activity) { 87 mCarTaskViewControllerHostLifecycle.hostDisappeared(); 88 } 89 90 @Override onActivitySaveInstanceState(@onNull Activity activity, @NonNull Bundle outState)91 public void onActivitySaveInstanceState(@NonNull Activity activity, 92 @NonNull Bundle outState) { 93 } 94 95 @Override onActivityDestroyed(@onNull Activity activity)96 public void onActivityDestroyed(@NonNull Activity activity) { 97 mCarTaskViewControllerHostLifecycle.hostDestroyed(); 98 } 99 getLifecycle()100 public CarTaskViewControllerHostLifecycle getLifecycle() { 101 return mCarTaskViewControllerHostLifecycle; 102 } 103 } 104 } 105