/* * 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.car.carlauncher; import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY; import android.content.res.Configuration; import android.os.Bundle; import android.util.Log; import android.view.WindowManager; import androidx.collection.ArraySet; import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.ViewModelProvider; import com.android.car.carlauncher.homescreen.HomeCardModule; import java.util.Set; /** * Launcher activity that shows only the control bar fragment. */ public class ControlBarActivity extends FragmentActivity { private static final String TAG = "CarLauncher"; private static final boolean DEBUG = false; private Set mHomeCardModules; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Setting as trusted overlay to let touches pass through. getWindow().addPrivateFlags(PRIVATE_FLAG_TRUSTED_OVERLAY); // To pass touches to the underneath task. getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); setContentView(R.layout.control_bar_container); initializeCards(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); initializeCards(); } private void initializeCards() { if (mHomeCardModules == null) { mHomeCardModules = new ArraySet<>(); for (String providerClassName : getResources().getStringArray( R.array.config_homeCardModuleClasses)) { try { long reflectionStartTime = System.currentTimeMillis(); HomeCardModule cardModule = (HomeCardModule) Class.forName( providerClassName).newInstance(); cardModule.setViewModelProvider(new ViewModelProvider(/* owner= */this)); mHomeCardModules.add(cardModule); if (DEBUG) { long reflectionTime = System.currentTimeMillis() - reflectionStartTime; Log.d(TAG, "Initialization of HomeCardModule class " + providerClassName + " took " + reflectionTime + " ms"); } } catch (IllegalAccessException | InstantiationException | ClassNotFoundException e) { Log.w(TAG, "Unable to create HomeCardProvider class " + providerClassName, e); } } } FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); for (HomeCardModule cardModule : mHomeCardModules) { transaction.replace(cardModule.getCardResId(), cardModule.getCardView().getFragment()); } transaction.commitNow(); } }