Home | History | Annotate | Download | only in impl
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License
     15  */
     16 
     17 package com.android.dialer.simulator.impl;
     18 
     19 import android.content.Context;
     20 import android.content.Intent;
     21 import android.provider.VoicemailContract;
     22 import android.support.annotation.NonNull;
     23 import android.support.annotation.Nullable;
     24 import android.support.v7.app.AppCompatActivity;
     25 import android.view.ActionProvider;
     26 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
     27 import com.android.dialer.common.concurrent.DialerExecutorComponent;
     28 import com.android.dialer.databasepopulator.BlockedBumberPopulator;
     29 import com.android.dialer.databasepopulator.CallLogPopulator;
     30 import com.android.dialer.databasepopulator.ContactsPopulator;
     31 import com.android.dialer.databasepopulator.VoicemailPopulator;
     32 import com.android.dialer.enrichedcall.simulator.EnrichedCallSimulatorActivity;
     33 import com.android.dialer.persistentlog.PersistentLogger;
     34 import com.android.dialer.preferredsim.PreferredSimFallbackContract;
     35 import com.android.dialer.simulator.SimulatorComponent;
     36 
     37 /** Implements the top level simulator menu. */
     38 final class SimulatorMainMenu {
     39 
     40   static ActionProvider getActionProvider(@NonNull AppCompatActivity activity) {
     41     SimulatorSubMenu simulatorSubMenu = new SimulatorSubMenu(activity.getApplicationContext());
     42     simulatorSubMenu
     43         .addItem("Voice call", SimulatorVoiceCall.getActionProvider(activity))
     44         .addItem("Rtt call", SimulatorRttCall.getActionProvider(activity.getApplicationContext()))
     45         .addItem(
     46             "IMS video", SimulatorVideoCall.getActionProvider(activity.getApplicationContext()))
     47         .addItem(
     48             "Notifications",
     49             SimulatorNotifications.getActionProvider(activity.getApplicationContext()))
     50         .addItem("Populate database", () -> populateDatabase(activity.getApplicationContext()))
     51         .addItem("Populate voicemail", () -> populateVoicemail(activity.getApplicationContext()))
     52         .addItem(
     53             "Fast populate database", () -> fastPopulateDatabase(activity.getApplicationContext()))
     54         .addItem(
     55             "Fast populate voicemail database",
     56             () -> populateVoicemailFast(activity.getApplicationContext()))
     57         .addItem("Clean database", () -> cleanDatabase(activity.getApplicationContext()))
     58         .addItem("clear preferred SIM", () -> clearPreferredSim(activity.getApplicationContext()))
     59         .addItem("Sync voicemail", () -> syncVoicemail(activity.getApplicationContext()))
     60         .addItem("Share persistent log", () -> sharePersistentLog(activity.getApplicationContext()))
     61         .addItem(
     62             "Enriched call simulator",
     63             () ->
     64                 activity.startActivity(
     65                     EnrichedCallSimulatorActivity.newIntent(activity.getApplicationContext())))
     66         .addItem(
     67             "Enable simulator mode",
     68             () -> {
     69               SimulatorComponent.get(activity.getApplicationContext())
     70                   .getSimulator()
     71                   .enableSimulatorMode();
     72               SimulatorSimCallManager.register(activity.getApplicationContext());
     73             })
     74         .addItem(
     75             "Disable simulator mode",
     76             () -> {
     77               SimulatorComponent.get(activity.getApplicationContext())
     78                   .getSimulator()
     79                   .disableSimulatorMode();
     80               SimulatorSimCallManager.unregister(activity.getApplicationContext());
     81             });
     82     return simulatorSubMenu;
     83   }
     84 
     85   private static void populateDatabase(@NonNull Context context) {
     86     DialerExecutorComponent.get(context)
     87         .dialerExecutorFactory()
     88         .createNonUiTaskBuilder(new PopulateDatabaseWorker())
     89         .build()
     90         .executeSerial(new PopulateDatabaseWorkerInput(context, false));
     91   }
     92 
     93   private static void populateVoicemail(@NonNull Context context) {
     94     DialerExecutorComponent.get(context)
     95         .dialerExecutorFactory()
     96         .createNonUiTaskBuilder(new PopulateVoicemailWorker())
     97         .build()
     98         .executeSerial(new PopulateDatabaseWorkerInput(context, false));
     99   }
    100 
    101   private static void populateVoicemailFast(@NonNull Context context) {
    102     DialerExecutorComponent.get(context)
    103         .dialerExecutorFactory()
    104         .createNonUiTaskBuilder(new PopulateVoicemailWorker())
    105         .build()
    106         .executeSerial(new PopulateDatabaseWorkerInput(context, true));
    107   }
    108 
    109   private static class PopulateVoicemailWorker
    110       implements Worker<PopulateDatabaseWorkerInput, Void> {
    111     @Nullable
    112     @Override
    113     public Void doInBackground(PopulateDatabaseWorkerInput input) {
    114       VoicemailPopulator.populateVoicemail(input.context, input.fastMode);
    115       return null;
    116     }
    117   }
    118 
    119   private static void fastPopulateDatabase(@NonNull Context context) {
    120     DialerExecutorComponent.get(context)
    121         .dialerExecutorFactory()
    122         .createNonUiTaskBuilder(new PopulateDatabaseWorker())
    123         .build()
    124         .executeSerial(new PopulateDatabaseWorkerInput(context, true));
    125   }
    126 
    127   private static void cleanDatabase(@NonNull Context context) {
    128     DialerExecutorComponent.get(context)
    129         .dialerExecutorFactory()
    130         .createNonUiTaskBuilder(new CleanDatabaseWorker())
    131         .build()
    132         .executeSerial(context);
    133   }
    134 
    135   private static void clearPreferredSim(Context context) {
    136     DialerExecutorComponent.get(context)
    137         .dialerExecutorFactory()
    138         .createNonUiTaskBuilder(new ClearPreferredSimWorker())
    139         .build()
    140         .executeSerial(context);
    141   }
    142 
    143   private static void syncVoicemail(@NonNull Context context) {
    144     Intent intent = new Intent(VoicemailContract.ACTION_SYNC_VOICEMAIL);
    145     context.sendBroadcast(intent);
    146   }
    147 
    148   private static void sharePersistentLog(@NonNull Context context) {
    149     DialerExecutorComponent.get(context)
    150         .dialerExecutorFactory()
    151         .createNonUiTaskBuilder(new ShareLogWorker())
    152         .onSuccess(
    153             (String log) -> {
    154               Intent intent = new Intent(Intent.ACTION_SEND);
    155               intent.setType("text/plain");
    156               intent.putExtra(Intent.EXTRA_TEXT, log);
    157               if (intent.resolveActivity(context.getPackageManager()) != null) {
    158                 context.startActivity(intent);
    159               }
    160             })
    161         .build()
    162         .executeSerial(null);
    163   }
    164 
    165   private SimulatorMainMenu() {}
    166 
    167   private static class PopulateDatabaseWorker implements Worker<PopulateDatabaseWorkerInput, Void> {
    168     @Nullable
    169     @Override
    170     public Void doInBackground(PopulateDatabaseWorkerInput input) {
    171       ContactsPopulator.populateContacts(input.context, input.fastMode);
    172       CallLogPopulator.populateCallLog(input.context, false, input.fastMode);
    173       VoicemailPopulator.populateVoicemail(input.context, input.fastMode);
    174       return null;
    175     }
    176   }
    177 
    178   private static class CleanDatabaseWorker implements Worker<Context, Void> {
    179     @Nullable
    180     @Override
    181     public Void doInBackground(Context context) {
    182       ContactsPopulator.deleteAllContacts(context);
    183       CallLogPopulator.deleteAllCallLog(context);
    184       VoicemailPopulator.deleteAllVoicemail(context);
    185       BlockedBumberPopulator.deleteBlockedNumbers(context);
    186       return null;
    187     }
    188   }
    189 
    190   private static class ClearPreferredSimWorker implements Worker<Context, Void> {
    191     @Nullable
    192     @Override
    193     public Void doInBackground(Context context) {
    194       context.getContentResolver().delete(PreferredSimFallbackContract.CONTENT_URI, null, null);
    195       return null;
    196     }
    197   }
    198 
    199   private static class ShareLogWorker implements Worker<Void, String> {
    200     @Nullable
    201     @Override
    202     public String doInBackground(Void unused) {
    203       return PersistentLogger.dumpLogToString();
    204     }
    205   }
    206 
    207   private static class PopulateDatabaseWorkerInput {
    208     Context context;
    209     boolean fastMode;
    210 
    211     PopulateDatabaseWorkerInput(Context context, boolean fastMode) {
    212       this.context = context;
    213       this.fastMode = fastMode;
    214     }
    215   }
    216 }
    217