summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/enrichedcall
diff options
context:
space:
mode:
authorEric Erfanian <erfanian@google.com>2017-06-19 17:28:33 -0700
committerEric Erfanian <erfanian@google.com>2017-06-19 17:28:33 -0700
commit2d6bc36921c4a41b17bc1870c133ee42f1388b51 (patch)
treeccf7310c8466dbc94a5646969613db81833c1ddd /java/com/android/dialer/enrichedcall
parentecc0957193e971e8f94f39efdbb37b0e4ed4f988 (diff)
Add "Simulator" for Enriched Calling
An annoying part of development on enriched calling is that it was difficult to determine what sessions were in memory. We have a number of bugs related to incorrect sessions being shown, and knowing exactly what sessions are available in memory can help debug them. This CL adds a "Simulator" for enriched calling. This is more of a debug tool than a simulator since it doesn't yet support adding a new enriched calling session. To allow the simulator to view all of the sessions in memory, a new EnrichedCallManager API was introduced: getAllSessionsView. This API was designed in a way to prevent abuse, so it returns a list of string representations of the sessions. Just returning the full list of sessions would have allowed clients to bypass the getSession logic and examine sessions that shouldn't be available. Also in this change: * Integrate changes to form a base for future copybara imports. Test: TH PiperOrigin-RevId: 159445010 Change-Id: Ie8fc35d817a4e3b0eac37e0c34a6592060c43b23
Diffstat (limited to 'java/com/android/dialer/enrichedcall')
-rw-r--r--java/com/android/dialer/enrichedcall/EnrichedCallManager.java9
-rw-r--r--java/com/android/dialer/enrichedcall/simulator/AndroidManifest.xml26
-rw-r--r--java/com/android/dialer/enrichedcall/simulator/EnrichedCallSimulatorActivity.java110
-rw-r--r--java/com/android/dialer/enrichedcall/simulator/SessionViewHolder.java37
-rw-r--r--java/com/android/dialer/enrichedcall/simulator/SessionsAdapter.java51
-rw-r--r--java/com/android/dialer/enrichedcall/simulator/res/layout/enriched_call_simulator_activity.xml38
-rw-r--r--java/com/android/dialer/enrichedcall/simulator/res/layout/session_view_holder.xml23
-rw-r--r--java/com/android/dialer/enrichedcall/simulator/res/values/strings.xml24
-rw-r--r--java/com/android/dialer/enrichedcall/stub/EnrichedCallManagerStub.java9
9 files changed, 327 insertions, 0 deletions
diff --git a/java/com/android/dialer/enrichedcall/EnrichedCallManager.java b/java/com/android/dialer/enrichedcall/EnrichedCallManager.java
index 0d3ed9e43..b97e6adaf 100644
--- a/java/com/android/dialer/enrichedcall/EnrichedCallManager.java
+++ b/java/com/android/dialer/enrichedcall/EnrichedCallManager.java
@@ -185,6 +185,15 @@ public interface EnrichedCallManager {
@Nullable
Session getSession(long sessionId);
+ /**
+ * Returns a list containing viewable string representations of all existing sessions.
+ *
+ * <p>Intended for debug display purposes only.
+ */
+ @MainThread
+ @NonNull
+ List<String> getAllSessionsForDisplay();
+
@NonNull
Filter createIncomingCallComposerFilter();
diff --git a/java/com/android/dialer/enrichedcall/simulator/AndroidManifest.xml b/java/com/android/dialer/enrichedcall/simulator/AndroidManifest.xml
new file mode 100644
index 000000000..003ff19d5
--- /dev/null
+++ b/java/com/android/dialer/enrichedcall/simulator/AndroidManifest.xml
@@ -0,0 +1,26 @@
+<!--
+ ~ Copyright (C) 2017 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
+ -->
+<manifest
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.dialer.calldetails">
+ <application android:theme="@style/Theme.AppCompat">
+ <activity
+ android:label="@string/enriched_call_simulator_activity"
+ android:name="com.android.dialer.enrichedcall.simulator.EnrichedCallSimulatorActivity"
+ android:theme="@style/DialerThemeBase.NoActionBar">
+ </activity>
+ </application>
+</manifest>
diff --git a/java/com/android/dialer/enrichedcall/simulator/EnrichedCallSimulatorActivity.java b/java/com/android/dialer/enrichedcall/simulator/EnrichedCallSimulatorActivity.java
new file mode 100644
index 000000000..bbc1ada6f
--- /dev/null
+++ b/java/com/android/dialer/enrichedcall/simulator/EnrichedCallSimulatorActivity.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2017 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.dialer.enrichedcall.simulator;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.Toolbar;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import com.android.dialer.common.Assert;
+import com.android.dialer.common.LogUtil;
+import com.android.dialer.enrichedcall.EnrichedCallComponent;
+import com.android.dialer.enrichedcall.EnrichedCallManager;
+import com.android.dialer.enrichedcall.EnrichedCallManager.StateChangedListener;
+
+/**
+ * Activity used to display Enriched call sessions that are currently in memory, and create new
+ * outgoing sessions with various bits of data.
+ *
+ * <p>This activity will dynamically refresh as new sessions are added or updated, but there's no
+ * update when sessions are deleted from memory. Use the refresh button to update the view.
+ */
+public class EnrichedCallSimulatorActivity extends AppCompatActivity
+ implements StateChangedListener, OnClickListener {
+
+ public static Intent newIntent(@NonNull Context context) {
+ return new Intent(Assert.isNotNull(context), EnrichedCallSimulatorActivity.class);
+ }
+
+ private Button refreshButton;
+
+ private SessionsAdapter sessionsAdapter;
+
+ @Override
+ protected void onCreate(@Nullable Bundle bundle) {
+ LogUtil.enterBlock("EnrichedCallSimulatorActivity.onCreate");
+ super.onCreate(bundle);
+ setContentView(R.layout.enriched_call_simulator_activity);
+ Toolbar toolbar = findViewById(R.id.toolbar);
+ toolbar.setTitle(R.string.enriched_call_simulator_activity);
+
+ refreshButton = findViewById(R.id.refresh);
+ refreshButton.setOnClickListener(this);
+
+ RecyclerView recyclerView = findViewById(R.id.sessions_recycler_view);
+ recyclerView.setLayoutManager(new LinearLayoutManager(this));
+
+ sessionsAdapter = new SessionsAdapter();
+ sessionsAdapter.setSessionStrings(getEnrichedCallManager().getAllSessionsForDisplay());
+ recyclerView.setAdapter(sessionsAdapter);
+ }
+
+ @Override
+ protected void onResume() {
+ LogUtil.enterBlock("EnrichedCallSimulatorActivity.onResume");
+ super.onResume();
+ getEnrichedCallManager().registerStateChangedListener(this);
+ }
+
+ @Override
+ protected void onPause() {
+ LogUtil.enterBlock("EnrichedCallSimulatorActivity.onPause");
+ super.onPause();
+ getEnrichedCallManager().unregisterStateChangedListener(this);
+ }
+
+ @Override
+ public void onEnrichedCallStateChanged() {
+ LogUtil.enterBlock("EnrichedCallSimulatorActivity.onEnrichedCallStateChanged");
+ refreshSessions();
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (v == refreshButton) {
+ LogUtil.i("EnrichedCallSimulatorActivity.onClick", "refreshing sessions");
+ refreshSessions();
+ }
+ }
+
+ private void refreshSessions() {
+ sessionsAdapter.setSessionStrings(getEnrichedCallManager().getAllSessionsForDisplay());
+ sessionsAdapter.notifyDataSetChanged();
+ }
+
+ private EnrichedCallManager getEnrichedCallManager() {
+ return EnrichedCallComponent.get(this).getEnrichedCallManager();
+ }
+}
diff --git a/java/com/android/dialer/enrichedcall/simulator/SessionViewHolder.java b/java/com/android/dialer/enrichedcall/simulator/SessionViewHolder.java
new file mode 100644
index 000000000..44431253d
--- /dev/null
+++ b/java/com/android/dialer/enrichedcall/simulator/SessionViewHolder.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2017 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.dialer.enrichedcall.simulator;
+
+import android.support.annotation.NonNull;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.TextView;
+
+/** ViewHolder for an Enriched call session. */
+class SessionViewHolder extends RecyclerView.ViewHolder {
+
+ private final TextView sessionStringView;
+
+ SessionViewHolder(View view) {
+ super(view);
+ sessionStringView = view.findViewById(R.id.session_string);
+ }
+
+ void updateSession(@NonNull String sessionString) {
+ sessionStringView.setText(sessionString);
+ }
+}
diff --git a/java/com/android/dialer/enrichedcall/simulator/SessionsAdapter.java b/java/com/android/dialer/enrichedcall/simulator/SessionsAdapter.java
new file mode 100644
index 000000000..25edfc7dd
--- /dev/null
+++ b/java/com/android/dialer/enrichedcall/simulator/SessionsAdapter.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2017 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.dialer.enrichedcall.simulator;
+
+import android.support.annotation.NonNull;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+import com.android.dialer.common.Assert;
+import java.util.List;
+
+/** Adapter for the RecyclerView in {@link EnrichedCallSimulatorActivity}. */
+class SessionsAdapter extends RecyclerView.Adapter<SessionViewHolder> {
+
+ /** List of the string representation of all in-memory sessions */
+ private List<String> sessionStrings;
+
+ void setSessionStrings(@NonNull List<String> sessionStrings) {
+ this.sessionStrings = Assert.isNotNull(sessionStrings);
+ }
+
+ @Override
+ public SessionViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
+ LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
+ return new SessionViewHolder(inflater.inflate(R.layout.session_view_holder, viewGroup, false));
+ }
+
+ @Override
+ public void onBindViewHolder(SessionViewHolder viewHolder, int i) {
+ viewHolder.updateSession(sessionStrings.get(i));
+ }
+
+ @Override
+ public int getItemCount() {
+ return sessionStrings.size();
+ }
+}
diff --git a/java/com/android/dialer/enrichedcall/simulator/res/layout/enriched_call_simulator_activity.xml b/java/com/android/dialer/enrichedcall/simulator/res/layout/enriched_call_simulator_activity.xml
new file mode 100644
index 000000000..be9aa7dea
--- /dev/null
+++ b/java/com/android/dialer/enrichedcall/simulator/res/layout/enriched_call_simulator_activity.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 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">
+
+ <com.android.dialer.widget.DialerToolbar
+ android:id="@+id/toolbar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+
+ <android.support.v7.widget.RecyclerView
+ android:id="@+id/sessions_recycler_view"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"/>
+
+ <Button
+ android:id="@+id/refresh"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/refresh"/>
+</LinearLayout> \ No newline at end of file
diff --git a/java/com/android/dialer/enrichedcall/simulator/res/layout/session_view_holder.xml b/java/com/android/dialer/enrichedcall/simulator/res/layout/session_view_holder.xml
new file mode 100644
index 000000000..65543bd0f
--- /dev/null
+++ b/java/com/android/dialer/enrichedcall/simulator/res/layout/session_view_holder.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 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
+ -->
+
+<TextView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/session_string"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="2dp"/>
diff --git a/java/com/android/dialer/enrichedcall/simulator/res/values/strings.xml b/java/com/android/dialer/enrichedcall/simulator/res/values/strings.xml
new file mode 100644
index 000000000..5cc252761
--- /dev/null
+++ b/java/com/android/dialer/enrichedcall/simulator/res/values/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2017 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
+ -->
+<resources>
+ <string name="enriched_call_simulator_activity" translatable="false">Enriched Call Simulator Activity</string>
+
+ <string name="important" translatable="false">important</string>
+ <string name="not_important" translatable="false">not important</string>
+
+ <string name="refresh" translatable="false">refresh</string>
+</resources> \ No newline at end of file
diff --git a/java/com/android/dialer/enrichedcall/stub/EnrichedCallManagerStub.java b/java/com/android/dialer/enrichedcall/stub/EnrichedCallManagerStub.java
index 0540d912e..65d440cb8 100644
--- a/java/com/android/dialer/enrichedcall/stub/EnrichedCallManagerStub.java
+++ b/java/com/android/dialer/enrichedcall/stub/EnrichedCallManagerStub.java
@@ -28,6 +28,7 @@ import com.android.dialer.enrichedcall.Session;
import com.android.dialer.enrichedcall.historyquery.proto.HistoryResult;
import com.android.dialer.enrichedcall.videoshare.VideoShareListener;
import com.android.dialer.multimedia.MultimediaData;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -85,6 +86,14 @@ public final class EnrichedCallManagerStub implements EnrichedCallManager {
return null;
}
+ @MainThread
+ @NonNull
+ @Override
+ public List<String> getAllSessionsForDisplay() {
+ Assert.isMainThread();
+ return Collections.emptyList();
+ }
+
@NonNull
@Override
public Filter createIncomingCallComposerFilter() {