blob: 4b8844d9b290ab91bfdc37bbef87f9b3f1c90c50 [file] [log] [blame]
/*
* Copyright (C) 2020 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.rotaryplayground;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
/**
* Fragment for the menu.
*
* On focus of a menu item, the associated fragment will start in the R.id.rotary_content container.
*/
public class RotaryMenu extends Fragment {
private Fragment mRotaryCards;
private Fragment mRotaryGrid;
private Fragment mDirectManipulation;
private Fragment mSysUiDirectManipulation;
private Fragment mNotificationFragment;
private Fragment mScrollFragment;
private Fragment mWebViewFragment;
private Fragment mCustomFocusAreasFragment;
private Fragment mSurfaceViewFragment;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.rotary_menu, container, false);
Button cardButton = view.findViewById(R.id.cards);
cardButton.setOnClickListener(v -> {
selectTab(v);
showRotaryCards();
});
Button gridButton = view.findViewById(R.id.grid);
gridButton.setOnClickListener(v -> {
selectTab(v);
showGridExample();
});
Button directManipulationButton = view.findViewById(R.id.direct_manipulation);
directManipulationButton.setOnClickListener(v -> {
selectTab(v);
showDirectManipulationExamples();
});
Button sysUiDirectManipulationButton = view.findViewById(R.id.sys_ui_direct_manipulation);
sysUiDirectManipulationButton.setOnClickListener(v -> {
selectTab(v);
showSysUiDirectManipulationExamples();
});
Button notificationButton = view.findViewById(R.id.notification);
notificationButton.setOnClickListener(v -> {
selectTab(v);
showNotificationExample();
});
Button scrollButton = view.findViewById(R.id.scroll);
scrollButton.setOnClickListener(v -> {
selectTab(v);
showScrollFragment();
});
Button webViewButton = view.findViewById(R.id.web_view);
webViewButton.setOnClickListener(v -> {
selectTab(v);
showWebViewFragment();
});
Button customFocusAreasButton = view.findViewById(R.id.custom_focus_areas);
customFocusAreasButton.setOnClickListener(v -> {
selectTab(v);
showCustomFocusAreasFragment();
});
Button surfaceViewButton = view.findViewById(R.id.surface_view);
surfaceViewButton.setOnClickListener(v -> {
selectTab(v);
showSurfaceViewFragment();
});
return view;
}
private void selectTab(View view) {
ViewGroup container = (ViewGroup) view.getParent();
for (int i = 0; i < container.getChildCount(); i++) {
container.getChildAt(i).setSelected(false);
}
view.setSelected(true);
}
private void showRotaryCards() {
if (mRotaryCards == null) {
mRotaryCards = new RotaryCards();
}
showFragment(mRotaryCards);
}
private void showGridExample() {
if (mRotaryGrid == null) {
mRotaryGrid = new RotaryGrid();
}
showFragment(mRotaryGrid);
}
// TODO(agathaman): refactor this and the showRotaryCards above into a
// showFragment(Fragment fragment, boolean hasFocus); method.
private void showDirectManipulationExamples() {
if (mDirectManipulation == null) {
mDirectManipulation = new RotaryDirectManipulationWidgets();
}
showFragment(mDirectManipulation);
}
private void showSysUiDirectManipulationExamples() {
if (mSysUiDirectManipulation == null) {
mSysUiDirectManipulation = new RotarySysUiDirectManipulationWidgets();
}
showFragment(mSysUiDirectManipulation);
}
private void showNotificationExample() {
if (mNotificationFragment == null) {
mNotificationFragment = new HeadsUpNotificationFragment();
}
showFragment(mNotificationFragment);
}
private void showScrollFragment() {
if (mScrollFragment == null) {
mScrollFragment = new ScrollFragment();
}
showFragment(mScrollFragment);
}
private void showWebViewFragment() {
if (mWebViewFragment == null) {
mWebViewFragment = new WebViewFragment();
}
showFragment(mWebViewFragment);
}
private void showCustomFocusAreasFragment() {
if (mCustomFocusAreasFragment == null) {
mCustomFocusAreasFragment = new CustomFocusAreasFragment();
}
showFragment(mCustomFocusAreasFragment);
}
private void showSurfaceViewFragment() {
if (mSurfaceViewFragment == null) {
mSurfaceViewFragment = new SurfaceViewFragment();
}
showFragment(mSurfaceViewFragment);
}
private void showFragment(Fragment fragment) {
getFragmentManager().beginTransaction()
.replace(R.id.rotary_content, fragment)
.commit();
}
}