diff options
author | Adora Zhang <qiaozhang@google.com> | 2018-03-02 18:29:41 -0800 |
---|---|---|
committer | Qiao (Adora) Zhang <qiaozhang@google.com> | 2018-03-15 02:44:08 +0000 |
commit | 6ce058961ba1eb9263151ec2cdf809413f1e6f4f (patch) | |
tree | 7b45ee19ed36c5c623d52a1a3f928a0face4135a /tests/EmbeddedKitchenSinkApp | |
parent | 20aaa2f51cd42834a894822f0abec377d122639e (diff) | |
download | Car-6ce058961ba1eb9263151ec2cdf809413f1e6f4f.tar.gz |
Add kitchen sink test fragment for notifications.
Bug: 74862300
Test: N/A
Change-Id: Iedc605c4d62820abc97e4cf88b7d4b03d4b91c98
(cherry picked from commit 406a205467dac3c0e5ce99befba31b38d035548d)
Diffstat (limited to 'tests/EmbeddedKitchenSinkApp')
4 files changed, 258 insertions, 0 deletions
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/notification_fragment.xml b/tests/EmbeddedKitchenSinkApp/res/layout/notification_fragment.xml new file mode 100644 index 0000000000..b9b8e8b524 --- /dev/null +++ b/tests/EmbeddedKitchenSinkApp/res/layout/notification_fragment.xml @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2018 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. +--> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" > + <Button + android:id="@+id/cancel_all_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Cancel All" + android:textSize="35sp"/> + <Button + android:id="@+id/importance_high_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Importance: HIGH (Shows heads-up)" + android:textSize="35sp"/> + <Button + android:id="@+id/importance_high_button_2" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Importance: HIGH (Shows heads-up) 2" + android:textSize="35sp"/> + <Button + android:id="@+id/importance_default_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Importance: DEFAULT" + android:textSize="35sp"/> + <Button + android:id="@+id/importance_low_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Importance: LOW" + android:textSize="35sp"/> + <Button + android:id="@+id/importance_min_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Importance: MIN" + android:textSize="35sp"/> + <Button + android:id="@+id/ongoing_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Ongoing" + android:textSize="35sp"/> + <Button + android:id="@+id/category_message_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Category: CATEGORY_MESSAGE" + android:textSize="35sp"/> +</LinearLayout> diff --git a/tests/EmbeddedKitchenSinkApp/res/xml/automotive_app_desc.xml b/tests/EmbeddedKitchenSinkApp/res/xml/automotive_app_desc.xml index 20d5d818ac..a78e62dc14 100644 --- a/tests/EmbeddedKitchenSinkApp/res/xml/automotive_app_desc.xml +++ b/tests/EmbeddedKitchenSinkApp/res/xml/automotive_app_desc.xml @@ -16,5 +16,6 @@ <automotiveApp> <uses name="service" /> <uses name="projection" /> + <uses name="notification"/> <uses name="activity" class="com.google.android.car.kitchensink.KitchenSinkActivity" /> </automotiveApp> diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java index bfc90d1be6..32e0349d44 100644 --- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java +++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java @@ -31,6 +31,7 @@ import com.google.android.car.kitchensink.displayinfo.DisplayInfoFragment; import com.google.android.car.kitchensink.hvac.HvacTestFragment; import com.google.android.car.kitchensink.input.InputTestFragment; import com.google.android.car.kitchensink.job.JobSchedulerFragment; +import com.google.android.car.kitchensink.notification.NotificationFragment; import com.google.android.car.kitchensink.orientation.OrientationTestFragment; import com.google.android.car.kitchensink.power.PowerTestFragment; import com.google.android.car.kitchensink.radio.RadioTestFragment; @@ -148,6 +149,7 @@ public class KitchenSinkActivity extends CarDrawerActivity { add("inst cluster", InstrumentClusterFragment.class); add("input test", InputTestFragment.class); add("job scheduler", JobSchedulerFragment.class); + add("notification", NotificationFragment.class); add("orientation test", OrientationTestFragment.class); add("power test", PowerTestFragment.class); add("radio", RadioTestFragment.class); diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/notification/NotificationFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/notification/NotificationFragment.java new file mode 100644 index 0000000000..ab171f9993 --- /dev/null +++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/notification/NotificationFragment.java @@ -0,0 +1,187 @@ +package com.google.android.car.kitchensink.notification; + +import static android.security.KeyStore.getApplicationContext; + +import android.annotation.Nullable; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.app.RemoteInput; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; + +import com.google.android.car.kitchensink.KitchenSinkActivity; +import com.google.android.car.kitchensink.R; + +/** + * Test fragment that can send all sorts of notifications. + */ +public class NotificationFragment extends Fragment { + private static final String CHANNEL_ID_1 = "kitchensink.channel1"; + private static final String CHANNEL_ID_2 = "kitchensink.channel2"; + private static final String CHANNEL_ID_3 = "kitchensink.channel3"; + private static final String CHANNEL_ID_4 = "kitchensink.channel4"; + private static final String CHANNEL_ID_5 = "kitchensink.channel5"; + private static final String CHANNEL_ID_6 = "kitchensink.channel6"; + + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.notification_fragment, container, false); + Button cancelAllButton = view.findViewById(R.id.cancel_all_button); + Button importanceHighButton = view.findViewById(R.id.importance_high_button); + Button importanceHighButton2 = view.findViewById(R.id.importance_high_button_2); + Button importanceLowButton = view.findViewById(R.id.importance_low_button); + Button importanceMinButton = view.findViewById(R.id.importance_min_button); + Button importanceDefaultButton = view.findViewById(R.id.importance_default_button); + Button ongoingButton = view.findViewById(R.id.ongoing_button); + Button messageButton = view.findViewById(R.id.category_message_button); + + NotificationManager manager = + (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE); + + // cancel all button + cancelAllButton.setOnClickListener(v -> manager.cancelAll()); + + // importance high notifications + NotificationChannel highImportanceChannel = + new NotificationChannel( + CHANNEL_ID_1, "Importance High", NotificationManager.IMPORTANCE_HIGH); + manager.createNotificationChannel(highImportanceChannel); + + importanceHighButton.setOnClickListener(v -> { + + Notification notification = new Notification.Builder(getActivity(), CHANNEL_ID_1) + .setContentTitle("Importance High") + .setContentText("blah") + .setSmallIcon(R.drawable.car_ic_mode) + .build(); + manager.notify(1, notification); + }); + + importanceHighButton2.setOnClickListener(v -> { + Notification notification = new Notification.Builder(getActivity(), CHANNEL_ID_1) + .setContentTitle("Importance High 2") + .setContentText("blah blah blah") + .setSmallIcon(R.drawable.car_ic_mode) + .build(); + manager.notify(2, notification); + }); + + // importance default + importanceDefaultButton.setOnClickListener(v -> { + NotificationChannel channel = + new NotificationChannel( + CHANNEL_ID_3, + "Importance Default", + NotificationManager.IMPORTANCE_DEFAULT); + manager.createNotificationChannel(channel); + + Notification notification = new Notification.Builder(getActivity(), CHANNEL_ID_3) + .setContentTitle("Importance Default") + .setSmallIcon(R.drawable.car_ic_mode) + .build(); + manager.notify(4, notification); + }); + + // importance low + importanceLowButton.setOnClickListener(v -> { + NotificationChannel channel = + new NotificationChannel( + CHANNEL_ID_4, "Importance Low", NotificationManager.IMPORTANCE_LOW); + manager.createNotificationChannel(channel); + + Notification notification = new Notification.Builder(getActivity(), CHANNEL_ID_4) + .setContentTitle("Importance Low") + .setContentText("low low low") + .setSmallIcon(R.drawable.car_ic_mode) + .build(); + manager.notify(5, notification); + }); + + // importance min + importanceMinButton.setOnClickListener(v -> { + NotificationChannel channel = + new NotificationChannel( + CHANNEL_ID_5, "Importance Min", NotificationManager.IMPORTANCE_MIN); + manager.createNotificationChannel(channel); + + Notification notification = new Notification.Builder(getActivity(), CHANNEL_ID_5) + .setContentTitle("Importance Min") + .setContentText("min min min") + .setSmallIcon(R.drawable.car_ic_mode) + .build(); + manager.notify(6, notification); + }); + + // ongoing + ongoingButton.setOnClickListener(v -> { + NotificationChannel channel = + new NotificationChannel( + CHANNEL_ID_6, "Ongoing", NotificationManager.IMPORTANCE_DEFAULT); + manager.createNotificationChannel(channel); + + Notification notification = new Notification.Builder(getActivity(), CHANNEL_ID_6) + .setContentTitle("Playing music or something") + .setSmallIcon(R.drawable.car_ic_mode) + .setOngoing(true) + .build(); + manager.notify(7, notification); + }); + + // category message + messageButton.setOnClickListener(v -> { + NotificationChannel channel = + new NotificationChannel( + CHANNEL_ID_2, "Message", NotificationManager.IMPORTANCE_HIGH); + manager.createNotificationChannel(channel); + + Intent intent = new Intent(getActivity(), KitchenSinkActivity.class); + PendingIntent readIntent = PendingIntent.getActivity(getActivity(), 0, intent, 0); + + RemoteInput remoteInput = new RemoteInput.Builder("voice reply").build(); + PendingIntent replyIntent = PendingIntent.getBroadcast(getApplicationContext(), + 12345, + intent, + PendingIntent.FLAG_UPDATE_CURRENT); + + Notification.Person personJohn = new Notification.Person().setName("John Doe"); + Notification.Person personJane = new Notification.Person().setName("Jane Roe"); + Notification.MessagingStyle messagingStyle = + new Notification.MessagingStyle(personJohn) + .setConversationTitle("Whassup") + .addHistoricMessage( + new Notification.MessagingStyle.Message( + "historic message", + System.currentTimeMillis() - 3600, + personJohn)) + .addMessage(new Notification.MessagingStyle.Message( + "message", System.currentTimeMillis(), personJane)); + + Notification notification = new Notification.Builder(getActivity(), CHANNEL_ID_2) + .setContentTitle("Message from someone") + .setContentText("hi") + .setCategory(Notification.CATEGORY_MESSAGE) + .setSmallIcon(R.drawable.car_ic_mode) + .setStyle(messagingStyle) + .setAutoCancel(true) + .addAction( + new Notification.Action.Builder(null, "read", readIntent).build()) + .addAction( + new Notification.Action.Builder(null, "reply", replyIntent) + .addRemoteInput(remoteInput).build()) + .extend(new Notification.CarExtender().setColor(R.color.car_red_500)) + .build(); + manager.notify(3, notification); + }); + + return view; + } +} |