aboutsummaryrefslogtreecommitdiff
path: root/RotaryPlayground/src/com
diff options
context:
space:
mode:
Diffstat (limited to 'RotaryPlayground/src/com')
-rw-r--r--RotaryPlayground/src/com/android/car/rotaryplayground/CustomFocusAreasFragment.java35
-rw-r--r--RotaryPlayground/src/com/android/car/rotaryplayground/RotaryMenu.java134
-rw-r--r--RotaryPlayground/src/com/android/car/rotaryplayground/WebViewFragment.java69
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;
+ }
+}