From c170e2df0230f46e06ed066becc0001f5b8eb44e Mon Sep 17 00:00:00 2001 From: twyen Date: Fri, 17 Nov 2017 10:43:38 -0800 Subject: Implement suggested SIM This CL adds a module that can query providers to aid users choosing which SIM to call with. Bug: 64214592 Test: MotoSuggestionProviderTest PiperOrigin-RevId: 176129303 Change-Id: Idb6314ad7f5a1bcd20b5b9173d3bfd873383cc84 --- .../suggestion/SimSuggestionComponent.java | 41 +++++++++++++++ .../suggestion/SuggestionProvider.java | 58 ++++++++++++++++++++++ .../suggestion/stub/StubSimSuggestionModule.java | 32 ++++++++++++ .../suggestion/stub/StubSuggestionProvider.java | 44 ++++++++++++++++ 4 files changed, 175 insertions(+) create mode 100644 java/com/android/dialer/preferredsim/suggestion/SimSuggestionComponent.java create mode 100644 java/com/android/dialer/preferredsim/suggestion/SuggestionProvider.java create mode 100644 java/com/android/dialer/preferredsim/suggestion/stub/StubSimSuggestionModule.java create mode 100644 java/com/android/dialer/preferredsim/suggestion/stub/StubSuggestionProvider.java (limited to 'java/com/android/dialer/preferredsim') diff --git a/java/com/android/dialer/preferredsim/suggestion/SimSuggestionComponent.java b/java/com/android/dialer/preferredsim/suggestion/SimSuggestionComponent.java new file mode 100644 index 000000000..4b3f7b26f --- /dev/null +++ b/java/com/android/dialer/preferredsim/suggestion/SimSuggestionComponent.java @@ -0,0 +1,41 @@ +/* + * 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.preferredsim.suggestion; + +import android.content.Context; +import android.support.annotation.WorkerThread; +import com.android.dialer.common.Assert; +import com.android.dialer.inject.HasRootComponent; +import dagger.Subcomponent; + +/** Dagger component for {@link SuggestionProvider} */ +@Subcomponent +public abstract class SimSuggestionComponent { + public abstract SuggestionProvider getSuggestionProvider(); + + @WorkerThread + public static SimSuggestionComponent get(Context context) { + Assert.isWorkerThread(); + return ((HasComponent) ((HasRootComponent) context.getApplicationContext()).component()) + .simSuggestionComponent(); + } + + /** Used to refer to the root application component. */ + public interface HasComponent { + SimSuggestionComponent simSuggestionComponent(); + } +} diff --git a/java/com/android/dialer/preferredsim/suggestion/SuggestionProvider.java b/java/com/android/dialer/preferredsim/suggestion/SuggestionProvider.java new file mode 100644 index 000000000..61a831b5e --- /dev/null +++ b/java/com/android/dialer/preferredsim/suggestion/SuggestionProvider.java @@ -0,0 +1,58 @@ +/* + * 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.preferredsim.suggestion; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.annotation.WorkerThread; +import android.telecom.PhoneAccountHandle; +import com.android.dialer.common.Assert; +import com.google.common.base.Optional; + +/** Provides hints to the user when selecting a SIM to make a call. */ +public interface SuggestionProvider { + + /** The reason the suggestion is made. */ + enum Reason { + UNKNOWN, + // The SIM has the same carrier as the callee. + INTRA_CARRIER, + // The user has selected the SIM for the callee multiple times. + FREQUENT + } + + /** The suggestion. */ + class Suggestion { + @NonNull public final PhoneAccountHandle phoneAccountHandle; + @NonNull public final Reason reason; + + public Suggestion(@NonNull PhoneAccountHandle phoneAccountHandle, @NonNull Reason reason) { + this.phoneAccountHandle = Assert.isNotNull(phoneAccountHandle); + this.reason = Assert.isNotNull(reason); + } + } + + @WorkerThread + @NonNull + Optional getSuggestion(@NonNull Context context, @NonNull String number); + + @WorkerThread + void reportUserSelection( + @NonNull Context context, + @NonNull String number, + @NonNull PhoneAccountHandle phoneAccountHandle); +} diff --git a/java/com/android/dialer/preferredsim/suggestion/stub/StubSimSuggestionModule.java b/java/com/android/dialer/preferredsim/suggestion/stub/StubSimSuggestionModule.java new file mode 100644 index 000000000..2f0e9b238 --- /dev/null +++ b/java/com/android/dialer/preferredsim/suggestion/stub/StubSimSuggestionModule.java @@ -0,0 +1,32 @@ +/* + * 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.preferredsim.suggestion.stub; + +import com.android.dialer.preferredsim.suggestion.SuggestionProvider; +import dagger.Binds; +import dagger.Module; +import javax.inject.Singleton; + +/** Stub module for {@link com.android.dialer.preferredsim.suggestion.SimSuggestionComponent} */ +@Module +public abstract class StubSimSuggestionModule { + + @Binds + @Singleton + public abstract SuggestionProvider bindSuggestionProvider( + StubSuggestionProvider suggestionProvider); +} diff --git a/java/com/android/dialer/preferredsim/suggestion/stub/StubSuggestionProvider.java b/java/com/android/dialer/preferredsim/suggestion/stub/StubSuggestionProvider.java new file mode 100644 index 000000000..e3240448d --- /dev/null +++ b/java/com/android/dialer/preferredsim/suggestion/stub/StubSuggestionProvider.java @@ -0,0 +1,44 @@ +/* + * 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.preferredsim.suggestion.stub; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.annotation.WorkerThread; +import android.telecom.PhoneAccountHandle; +import com.android.dialer.preferredsim.suggestion.SuggestionProvider; +import com.google.common.base.Optional; +import javax.inject.Inject; + +/** {@link SuggestionProvider} that does nothing. */ +public class StubSuggestionProvider implements SuggestionProvider { + + @Inject + public StubSuggestionProvider() {} + + @WorkerThread + @Override + public Optional getSuggestion(Context context, String number) { + return Optional.absent(); + } + + @Override + public void reportUserSelection( + @NonNull Context context, + @NonNull String number, + @NonNull PhoneAccountHandle phoneAccountHandle) {} +} -- cgit v1.2.3