diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2017-08-31 16:17:04 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2017-08-31 16:17:04 +0000 |
commit | c39ea3c55fac807c0b98aabdf56c70dc8a49036c (patch) | |
tree | e282668a9587cf6c1ec7b604dea860400c75c6c7 /java/com/android/dialer/databasepopulator/VoicemailPopulator.java | |
parent | 68038172793ee0e2ab3e2e56ddfbeb82879d1f58 (diff) | |
parent | 2ca4318cc1ee57dda907ba2069bd61d162b1baef (diff) |
Merge "Update Dialer source to latest internal Google revision."
Diffstat (limited to 'java/com/android/dialer/databasepopulator/VoicemailPopulator.java')
-rw-r--r-- | java/com/android/dialer/databasepopulator/VoicemailPopulator.java | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/java/com/android/dialer/databasepopulator/VoicemailPopulator.java b/java/com/android/dialer/databasepopulator/VoicemailPopulator.java new file mode 100644 index 000000000..e99f7c7d4 --- /dev/null +++ b/java/com/android/dialer/databasepopulator/VoicemailPopulator.java @@ -0,0 +1,164 @@ +/* + * 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.databasepopulator; + +import android.content.ComponentName; +import android.content.ContentValues; +import android.content.Context; +import android.provider.VoicemailContract.Status; +import android.provider.VoicemailContract.Voicemails; +import android.support.annotation.NonNull; +import android.support.annotation.WorkerThread; +import android.telecom.PhoneAccountHandle; +import android.telephony.TelephonyManager; +import com.android.dialer.common.Assert; +import com.google.auto.value.AutoValue; +import java.util.concurrent.TimeUnit; + +/** Populates the device database with voicemail entries. */ +public final class VoicemailPopulator { + private static final String ACCOUNT_ID = "ACCOUNT_ID"; + + private static final Voicemail.Builder[] SIMPLE_VOICEMAILS = { + // Long transcription with an embedded phone number. + Voicemail.builder() + .setPhoneNumber("+1-302-6365454") + .setTranscription( + "Hi, this is a very long voicemail. Please call me back at 650 253 0000. " + + "I hope you listen to all of it. This is very important. " + + "Hi, this is a very long voicemail. " + + "I hope you listen to all of it. It's very important.") + .setDurationSeconds(10) + .setIsRead(false), + // RTL transcription. + Voicemail.builder() + .setPhoneNumber("+1-302-6365454") + .setTranscription("هزاران دوست کم اند و یک دشمن زیاد") + .setDurationSeconds(60) + .setIsRead(true), + // Empty number. + Voicemail.builder() + .setPhoneNumber("") + .setTranscription("") + .setDurationSeconds(60) + .setIsRead(true), + // No duration. + Voicemail.builder() + .setPhoneNumber("+1-302-6365454") + .setTranscription("") + .setDurationSeconds(0) + .setIsRead(true), + // Short number. + Voicemail.builder() + .setPhoneNumber("711") + .setTranscription("This is a short voicemail.") + .setDurationSeconds(12) + .setIsRead(true), + }; + + @WorkerThread + public static void populateVoicemail(@NonNull Context context) { + Assert.isWorkerThread(); + enableVoicemail(context); + + // Do this 4 times to make the voicemail database 4 times bigger. + long timeMillis = System.currentTimeMillis(); + for (int i = 0; i < 4; i++) { + for (Voicemail.Builder builder : SIMPLE_VOICEMAILS) { + Voicemail voicemail = builder.setTimeMillis(timeMillis).build(); + context + .getContentResolver() + .insert( + Voicemails.buildSourceUri(context.getPackageName()), + voicemail.getAsContentValues(context)); + timeMillis -= TimeUnit.HOURS.toMillis(2); + } + } + } + + @WorkerThread + public static void deleteAllVoicemail(@NonNull Context context) { + Assert.isWorkerThread(); + context + .getContentResolver() + .delete(Voicemails.buildSourceUri(context.getPackageName()), "", new String[] {}); + } + + private static void enableVoicemail(@NonNull Context context) { + PhoneAccountHandle handle = + new PhoneAccountHandle(new ComponentName(context, VoicemailPopulator.class), ACCOUNT_ID); + + ContentValues values = new ContentValues(); + values.put(Status.SOURCE_PACKAGE, handle.getComponentName().getPackageName()); + values.put(Status.SOURCE_TYPE, TelephonyManager.VVM_TYPE_OMTP); + values.put(Status.PHONE_ACCOUNT_COMPONENT_NAME, handle.getComponentName().flattenToString()); + values.put(Status.PHONE_ACCOUNT_ID, handle.getId()); + values.put(Status.CONFIGURATION_STATE, Status.CONFIGURATION_STATE_OK); + values.put(Status.DATA_CHANNEL_STATE, Status.DATA_CHANNEL_STATE_OK); + values.put(Status.NOTIFICATION_CHANNEL_STATE, Status.NOTIFICATION_CHANNEL_STATE_OK); + context.getContentResolver().insert(Status.buildSourceUri(context.getPackageName()), values); + } + + /** Data for a single voicemail entry. */ + @AutoValue + public abstract static class Voicemail { + @NonNull + public abstract String getPhoneNumber(); + + @NonNull + public abstract String getTranscription(); + + public abstract long getDurationSeconds(); + + public abstract long getTimeMillis(); + + public abstract boolean getIsRead(); + + public static Builder builder() { + return new AutoValue_VoicemailPopulator_Voicemail.Builder(); + } + + public ContentValues getAsContentValues(Context context) { + ContentValues values = new ContentValues(); + values.put(Voicemails.DATE, getTimeMillis()); + values.put(Voicemails.NUMBER, getPhoneNumber()); + values.put(Voicemails.DURATION, getDurationSeconds()); + values.put(Voicemails.SOURCE_PACKAGE, context.getPackageName()); + values.put(Voicemails.IS_READ, getIsRead() ? 1 : 0); + values.put(Voicemails.TRANSCRIPTION, getTranscription()); + return values; + } + + /** Builder for a single voicemail entry. */ + @AutoValue.Builder + public abstract static class Builder { + public abstract Builder setPhoneNumber(@NonNull String phoneNumber); + + public abstract Builder setTranscription(@NonNull String transcription); + + public abstract Builder setDurationSeconds(long durationSeconds); + + public abstract Builder setTimeMillis(long timeMillis); + + public abstract Builder setIsRead(boolean isRead); + + public abstract Voicemail build(); + } + } + + private VoicemailPopulator() {} +} |