diff options
Diffstat (limited to 'RotaryPlayground/src/com')
3 files changed, 180 insertions, 58 deletions
diff --git a/RotaryPlayground/src/com/android/car/rotaryplayground/CustomFocusAreasFragment.java b/RotaryPlayground/src/com/android/car/rotaryplayground/CustomFocusAreasFragment.java new file mode 100644 index 0000000..b8b1c71 --- /dev/null +++ b/RotaryPlayground/src/com/android/car/rotaryplayground/CustomFocusAreasFragment.java @@ -0,0 +1,35 @@ +/* + * 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 androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +/** Fragment to demo custom attributes in {@link com.android.car.ui.FocusArea}. */ +public class CustomFocusAreasFragment extends Fragment { + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.custom_focus_areas_fragment, container, false); + } +} diff --git a/RotaryPlayground/src/com/android/car/rotaryplayground/RotaryMenu.java b/RotaryPlayground/src/com/android/car/rotaryplayground/RotaryMenu.java index c87fe1b..0e417b4 100644 --- a/RotaryPlayground/src/com/android/car/rotaryplayground/RotaryMenu.java +++ b/RotaryPlayground/src/com/android/car/rotaryplayground/RotaryMenu.java @@ -37,65 +37,81 @@ public class RotaryMenu extends Fragment { private Fragment mSysUiDirectManipulation = null; private Fragment mNotificationFragment = null; private Fragment mScrollFragment = null; - - private Button mCardButton; - private Button mGridButton; - private Button mDirectManipulationButton; - private Button mSysUiDirectManipulationButton; - private Button mNotificationButton; - private Button mScrollButton; + private Fragment mWebViewFragment = null; + private Fragment mCustomFocusAreasFragment = null; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.rotary_menu, container, false); - mCardButton = view.findViewById(R.id.cards); - mCardButton.setOnFocusChangeListener((v, hasFocus) -> showRotaryCards(hasFocus)); - mCardButton.setOnClickListener(v -> showRotaryCards(/* hasFocus= */ true)); - - mGridButton = view.findViewById(R.id.grid); - mGridButton.setOnFocusChangeListener((v, hasFocus) -> showGridExample(hasFocus)); - mGridButton.setOnClickListener(v -> showGridExample(/* hasFocus= */ true)); - - mDirectManipulationButton = view.findViewById(R.id.direct_manipulation); - mDirectManipulationButton.setOnFocusChangeListener( - (v, hasFocus) -> showDirectManipulationExamples(hasFocus)); - mDirectManipulationButton.setOnClickListener( - (v -> showDirectManipulationExamples(/* hasFocus= */ true))); - - mSysUiDirectManipulationButton = view.findViewById(R.id.sys_ui_direct_manipulation); - mSysUiDirectManipulationButton.setOnFocusChangeListener( - (v, hasFocus) -> showSysUiDirectManipulationExamples(hasFocus)); - mSysUiDirectManipulationButton.setOnClickListener( - (v -> showSysUiDirectManipulationExamples(/* hasFocus= */ true))); - - mNotificationButton = view.findViewById(R.id.notification); - mNotificationButton.setOnFocusChangeListener( - (v, hasFocus) -> showNotificationExample(hasFocus)); - mNotificationButton.setOnClickListener(v -> showNotificationExample(/* hasFocus= */ true)); - - mScrollButton = view.findViewById(R.id.scroll); - mScrollButton.setOnFocusChangeListener((v, hasFocus) -> showScrollFragment(hasFocus)); - mScrollButton.setOnClickListener(v -> showScrollFragment(/* hasFocus= */ true)); + 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(); + }); return view; } - private void showRotaryCards(boolean hasFocus) { - if (!hasFocus) { - return; // Do nothing if no focus. + 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(boolean hasFocus) { - if (!hasFocus) { - return; // do nothing if no focus. - } + private void showGridExample() { if (mRotaryGrid == null) { mRotaryGrid = new RotaryGrid(); } @@ -104,46 +120,48 @@ public class RotaryMenu extends Fragment { // TODO(agathaman): refactor this and the showRotaryCards above into a // showFragment(Fragment fragment, boolean hasFocus); method. - private void showDirectManipulationExamples(boolean hasFocus) { - if (!hasFocus) { - return; // Do nothing if no focus. - } + private void showDirectManipulationExamples() { if (mDirectManipulation == null) { mDirectManipulation = new RotaryDirectManipulationWidgets(); } showFragment(mDirectManipulation); } - private void showSysUiDirectManipulationExamples(boolean hasFocus) { - if (!hasFocus) { - return; // Do nothing if no focus. - } + private void showSysUiDirectManipulationExamples() { if (mSysUiDirectManipulation == null) { mSysUiDirectManipulation = new RotarySysUiDirectManipulationWidgets(); } showFragment(mSysUiDirectManipulation); } - private void showNotificationExample(boolean hasFocus) { - if (!hasFocus) { - return; // do nothing if no focus. - } + private void showNotificationExample() { if (mNotificationFragment == null) { mNotificationFragment = new HeadsUpNotificationFragment(); } showFragment(mNotificationFragment); } - private void showScrollFragment(boolean hasFocus) { - if (!hasFocus) { - return; // Do nothing if no focus. - } + 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 showFragment(Fragment fragment) { getFragmentManager().beginTransaction() .replace(R.id.rotary_content, fragment) diff --git a/RotaryPlayground/src/com/android/car/rotaryplayground/WebViewFragment.java b/RotaryPlayground/src/com/android/car/rotaryplayground/WebViewFragment.java new file mode 100644 index 0000000..033b6a8 --- /dev/null +++ b/RotaryPlayground/src/com/android/car/rotaryplayground/WebViewFragment.java @@ -0,0 +1,69 @@ +/* + * 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.content.res.Resources; +import android.os.Bundle; +import android.util.Base64; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebView; +import android.widget.Button; +import android.widget.CheckBox; + +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +import java.io.IOException; +import java.io.InputStream; + +/** Fragment to demo a layout with a {@link WebView}. */ +public class WebViewFragment extends Fragment { + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.rotary_web_view, container, false); + Button toggleButtonsButton = view.findViewById(R.id.toggle_buttons); + Button topButton = view.findViewById(R.id.top_button); + WebView webView = view.findViewById(R.id.web_view); + Button bottomButton = view.findViewById(R.id.bottom_button); + + toggleButtonsButton.setOnClickListener(v -> { + int buttonVisibility = + topButton.getVisibility() == View.GONE ? View.VISIBLE : View.GONE; + topButton.setVisibility(buttonVisibility); + bottomButton.setVisibility(buttonVisibility); + }); + + Resources res = getResources(); + InputStream inputStream = res.openRawResource(R.raw.web_view_html); + byte[] byteArray = new byte[0]; + try { + byteArray = new byte[inputStream.available()]; + inputStream.read(byteArray); + } catch (IOException e) { + Log.w("WebViewFragment", "Can't read HTML"); + } + String webViewHtml = new String(byteArray); + String encodedHtml = Base64.encodeToString(webViewHtml.getBytes(), Base64.NO_PADDING); + webView.loadData(encodedHtml, "text/html", "base64"); + return view; + } +} |