diff options
Diffstat (limited to 'java/com/android')
7 files changed, 160 insertions, 2 deletions
diff --git a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java index 4ef579f06..450119086 100644 --- a/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java +++ b/java/com/android/dialer/simulator/impl/SimulatorMainMenu.java @@ -32,12 +32,16 @@ import com.android.dialer.enrichedcall.simulator.EnrichedCallSimulatorActivity; import com.android.dialer.persistentlog.PersistentLogger; import com.android.dialer.preferredsim.PreferredSimFallbackContract; import com.android.incallui.rtt.impl.RttChatActivity; +import com.android.incallui.speakeasy.SpeakEasy; +import com.android.incallui.speakeasy.SpeakEasyActivity; +import com.android.incallui.speakeasy.SpeakEasyComponent; /** Implements the top level simulator menu. */ final class SimulatorMainMenu { static ActionProvider getActionProvider(@NonNull AppCompatActivity activity) { - return new SimulatorSubMenu(activity.getApplicationContext()) + SimulatorSubMenu simulatorSubMenu = new SimulatorSubMenu(activity.getApplicationContext()); + simulatorSubMenu .addItem("Voice call", SimulatorVoiceCall.getActionProvider(activity)) .addItem( "IMS video", SimulatorVideoCall.getActionProvider(activity.getApplicationContext())) @@ -61,12 +65,23 @@ final class SimulatorMainMenu { () -> activity.startActivity( EnrichedCallSimulatorActivity.newIntent(activity.getApplicationContext()))); + SpeakEasy speakEasy = SpeakEasyComponent.get(activity.getApplicationContext()).speakEasy(); + if (speakEasy.isEnabled()) { + simulatorSubMenu.addItem( + "SpeakEasy call mock", () -> simulateSpeakEasyCallMock(activity.getApplicationContext())); + } + + return simulatorSubMenu; } private static void simulateRttCallMock(@NonNull Context context) { context.startActivity(new Intent(context, RttChatActivity.class)); } + private static void simulateSpeakEasyCallMock(@NonNull Context context) { + context.startActivity(new Intent(context, SpeakEasyActivity.class)); + } + private static void populateDatabase(@NonNull Context context) { DialerExecutorComponent.get(context) .dialerExecutorFactory() diff --git a/java/com/android/incallui/speakeasy/AndroidManifest.xml b/java/com/android/incallui/speakeasy/AndroidManifest.xml new file mode 100644 index 000000000..e56b2e744 --- /dev/null +++ b/java/com/android/incallui/speakeasy/AndroidManifest.xml @@ -0,0 +1,26 @@ +<!-- + ~ 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 + --> +<manifest + package="com.android.incallui.speakeasy" + xmlns:android="http://schemas.android.com/apk/res/android"> + <application android:theme="@style/Theme.AppCompat"> + <activity + android:name=".SpeakEasyActivity" + android:exported="false" + android:theme="@style/DialerThemeBase.NoActionBar" + android:windowSoftInputMode="adjustResize"/> + </application> +</manifest> diff --git a/java/com/android/incallui/speakeasy/SpeakEasy.java b/java/com/android/incallui/speakeasy/SpeakEasy.java index 393072c39..5621eed47 100644 --- a/java/com/android/incallui/speakeasy/SpeakEasy.java +++ b/java/com/android/incallui/speakeasy/SpeakEasy.java @@ -16,9 +16,24 @@ package com.android.incallui.speakeasy; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; + /** This interface provides a wrapper between callers and the Whisper client. */ public interface SpeakEasy { - /** Signals to the user interface that the feature is abailable for use. */ + /** Signals to the user interface that the feature is available for use. */ boolean isEnabled(); + + /** + * Create a new instance of SpeakEasy fragment. + * + * @param callId call id of the call. + * @param nameOrNumber name or number of the caller to be displayed + * @param sessionStartTimeMillis start time of the session in terms of {@link + * android.os.SystemClock#elapsedRealtime}. + * @return new SpeakEasy fragment. Null if the SpeakEasy feature is not available for use + */ + @Nullable + Fragment getSpeakEasyFragment(String callId, String nameOrNumber, long sessionStartTimeMillis); } diff --git a/java/com/android/incallui/speakeasy/SpeakEasyActivity.java b/java/com/android/incallui/speakeasy/SpeakEasyActivity.java new file mode 100644 index 000000000..46635265c --- /dev/null +++ b/java/com/android/incallui/speakeasy/SpeakEasyActivity.java @@ -0,0 +1,47 @@ +/* + * 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 + */ + +package com.android.incallui.speakeasy; + +import android.os.Bundle; +import android.os.SystemClock; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.view.View; + +/** Activity to for SpeakEasy component. */ +public class SpeakEasyActivity extends FragmentActivity { + + private SpeakEasy speakEasy; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + speakEasy = SpeakEasyComponent.get(this).speakEasy(); + setContentView(R.layout.activity_speakeasy); + Fragment speakEasyFragment = + speakEasy.getSpeakEasyFragment("", "John Snow", SystemClock.elapsedRealtime()); + if (speakEasyFragment != null) { + getSupportFragmentManager() + .beginTransaction() + .add(R.id.fragment_speakeasy, speakEasyFragment) + .commit(); + } + getWindow().setStatusBarColor(getColor(R.color.speakeasy_status_bar_color)); + getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } +} diff --git a/java/com/android/incallui/speakeasy/SpeakEasyStub.java b/java/com/android/incallui/speakeasy/SpeakEasyStub.java index 5e8a84ab8..8b6b562ad 100644 --- a/java/com/android/incallui/speakeasy/SpeakEasyStub.java +++ b/java/com/android/incallui/speakeasy/SpeakEasyStub.java @@ -16,6 +16,8 @@ package com.android.incallui.speakeasy; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; import javax.inject.Inject; /** Default implementation of SpeakEasy. */ @@ -28,4 +30,10 @@ public class SpeakEasyStub implements SpeakEasy { public boolean isEnabled() { return false; } + + @Override + public @Nullable Fragment getSpeakEasyFragment( + String callId, String nameOrNumber, long sessionStartTimeMillis) { + return null; + } } diff --git a/java/com/android/incallui/speakeasy/res/layout/activity_speakeasy.xml b/java/com/android/incallui/speakeasy/res/layout/activity_speakeasy.xml new file mode 100644 index 000000000..5271d629e --- /dev/null +++ b/java/com/android/incallui/speakeasy/res/layout/activity_speakeasy.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2016 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:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="match_parent"> + <FrameLayout + android:id="@+id/fragment_speakeasy" + android:layout_width="match_parent" + android:layout_height="match_parent"/> + +</LinearLayout> diff --git a/java/com/android/incallui/speakeasy/res/values/colors.xml b/java/com/android/incallui/speakeasy/res/values/colors.xml new file mode 100644 index 000000000..fc4790e70 --- /dev/null +++ b/java/com/android/incallui/speakeasy/res/values/colors.xml @@ -0,0 +1,20 @@ +<?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> + <color name="speakeasy_status_bar_color">#E0E0E0</color> +</resources> |