package com.thekirankumar.youtubeauto.activity; import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.KeyEvent; import android.view.Window; import com.google.android.apps.auto.sdk.CarActivity; import com.google.android.apps.auto.sdk.CarUiController; import com.thekirankumar.youtubeauto.R; import com.thekirankumar.youtubeauto.fragments.CarFragment; import com.thekirankumar.youtubeauto.fragments.WebViewCarFragment; import java.util.HashSet; public class MainCarActivity extends CarActivity { private static final String FRAGMENT_MAIN = "main"; private static final String CURRENT_FRAGMENT_KEY = "app_current_fragment"; private String mCurrentFragmentTag; private final FragmentManager.FragmentLifecycleCallbacks mFragmentLifecycleCallbacks = new FragmentManager.FragmentLifecycleCallbacks() { @Override public void onFragmentStarted(FragmentManager fm, Fragment f) { updateStatusBarTitle(); } }; private HashSet<ActivityCallbacks> activityCallbacks = new HashSet<>(0); @Override public void onWindowFocusChanged(boolean hasFocus, boolean b1) { super.onWindowFocusChanged(hasFocus, b1); for (ActivityCallbacks next : activityCallbacks) { next.onWindowFocusChanged(hasFocus); } } @Override public void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.activity_car_main); CarUiController carUiController = getCarUiController(); carUiController.getStatusBarController().hideAppHeader(); carUiController.getStatusBarController().hideConnectivityLevel(); FragmentManager fragmentManager = getSupportFragmentManager(); WebViewCarFragment webViewCarFragment = new WebViewCarFragment(); fragmentManager.beginTransaction() .add(R.id.fragment_container, webViewCarFragment, FRAGMENT_MAIN) .detach(webViewCarFragment) .commitNow(); String initialFragmentTag = FRAGMENT_MAIN; if (bundle != null && bundle.containsKey(CURRENT_FRAGMENT_KEY)) { initialFragmentTag = bundle.getString(CURRENT_FRAGMENT_KEY); } switchToFragment(initialFragmentTag); getSupportFragmentManager().registerFragmentLifecycleCallbacks(mFragmentLifecycleCallbacks, false); } @Override public void onNewIntent(Intent intent) { super.onNewIntent(intent); } @Override public void onSaveInstanceState(Bundle bundle) { bundle.putString(CURRENT_FRAGMENT_KEY, mCurrentFragmentTag); super.onSaveInstanceState(bundle); } @Override public void onStart() { super.onStart(); switchToFragment(mCurrentFragmentTag); } private void switchToFragment(String tag) { if (tag.equals(mCurrentFragmentTag)) { return; } FragmentManager manager = getSupportFragmentManager(); Fragment currentFragment = mCurrentFragmentTag == null ? null : manager.findFragmentByTag(mCurrentFragmentTag); Fragment newFragment = manager.findFragmentByTag(tag); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); if (currentFragment != null) { transaction.detach(currentFragment); } transaction.attach(newFragment); transaction.commit(); mCurrentFragmentTag = tag; } private void updateStatusBarTitle() { CarFragment fragment = (CarFragment) getSupportFragmentManager().findFragmentByTag(mCurrentFragmentTag); getCarUiController().getStatusBarController().setTitle(fragment.getTitle()); } public Window getWindow() { return super.c(); } @Override public void onConfigurationChanged(Configuration configuration) { super.onConfigurationChanged(configuration); for (ActivityCallbacks next : activityCallbacks) { next.onConfigChanged(); } } public void addActivityCallback(ActivityCallbacks listener) { this.activityCallbacks.add(listener); } public void removeActivityCallback(ActivityCallbacks listener) { this.activityCallbacks.remove(listener); } public interface ActivityCallbacks { void onConfigChanged(); void onWindowFocusChanged(boolean hasFocus); } }