From 9f16e171d04fbafe042d83b6bfaf5309f886f0e1 Mon Sep 17 00:00:00 2001 From: calderwoodra Date: Mon, 29 Jan 2018 19:18:14 -0800 Subject: Added a hack for NUI because of a dependency cycle. In order for NUI to include the old fragments, it needs a dependency on dialer/app. In order for Dialtacts to show the NUI shortcut, it needs a dependency on dialer/main. This change removes the requirement for Dialtacts by copying some of the code from dialer/main into dialer/app. Bug: 72525324 Test: existing PiperOrigin-RevId: 183769521 Change-Id: I29d00f22efecee35ca25f0b4172413c370f2506b --- java/com/android/dialer/app/DialtactsActivity.java | 7 +- java/com/android/dialer/app/MainComponent.java | 95 +++++++++++++++++++++ .../app/res/drawable-xxxhdpi/nui_launcher_icon.png | Bin 0 -> 5554 bytes java/com/android/dialer/app/res/values/strings.xml | 4 + 4 files changed, 101 insertions(+), 5 deletions(-) create mode 100644 java/com/android/dialer/app/MainComponent.java create mode 100644 java/com/android/dialer/app/res/drawable-xxxhdpi/nui_launcher_icon.png (limited to 'java/com/android/dialer') diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java index 4b0384ea5..23f4d403c 100644 --- a/java/com/android/dialer/app/DialtactsActivity.java +++ b/java/com/android/dialer/app/DialtactsActivity.java @@ -119,8 +119,6 @@ import com.android.dialer.logging.Logger; import com.android.dialer.logging.LoggingBindings; import com.android.dialer.logging.ScreenEvent; import com.android.dialer.logging.UiAction; -import com.android.dialer.main.Main; -import com.android.dialer.main.MainComponent; import com.android.dialer.p13n.inference.P13nRanking; import com.android.dialer.p13n.inference.protocol.P13nRanker; import com.android.dialer.p13n.inference.protocol.P13nRanker.P13nRefreshCompleteListener; @@ -798,7 +796,7 @@ public class DialtactsActivity extends TransactionSafeActivity Logger.get(this).logScreenView(ScreenEvent.Type.SETTINGS, this); return true; } else if (resId == R.id.menu_new_ui_launcher_shortcut) { - MainComponent.get(this).getMain().createNewUiLauncherShortcut(this); + MainComponent.createNewUiLauncherShortcut(this); return true; } return false; @@ -1752,9 +1750,8 @@ public class DialtactsActivity extends TransactionSafeActivity simulatorMenuItem.setVisible(false); } - Main dialtacts = MainComponent.get(context).getMain(); menu.findItem(R.id.menu_new_ui_launcher_shortcut) - .setVisible(dialtacts.isNewUiEnabled(context)); + .setVisible(MainComponent.isNewUiEnabled(context)); super.show(); } diff --git a/java/com/android/dialer/app/MainComponent.java b/java/com/android/dialer/app/MainComponent.java new file mode 100644 index 000000000..b19ad908e --- /dev/null +++ b/java/com/android/dialer/app/MainComponent.java @@ -0,0 +1,95 @@ +/* + * 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.dialer.app; + +import android.annotation.TargetApi; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Build; +import android.os.Build.VERSION_CODES; +import android.support.v4.content.pm.ShortcutInfoCompat; +import android.support.v4.content.pm.ShortcutManagerCompat; +import android.support.v4.graphics.drawable.IconCompat; +import com.android.dialer.configprovider.ConfigProviderBindings; + +/** This class is a copy of dialer.main.impl.MainImpl to get around a dependency issue. */ +public class MainComponent { + + private static final String SHORTCUT_KEY = "nui_launcher_shortcut"; + + public static boolean isNewUiEnabled(Context context) { + return ConfigProviderBindings.get(context).getBoolean("is_nui_shortcut_enabled", false); + } + + public static void createNewUiLauncherShortcut(Context context) { + enableComponent(context); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + createLauncherShortcutO(context); + } else { + createLauncherShortcutPreO(context); + } + } + + /** + * Enables the NUI activity component. By default the component is disabled and can't be accessed. + * Once the component has been enabled the user will get an option to use the new UI to handle + * DIAL (and other) intents. + */ + private static void enableComponent(Context context) { + context + .getPackageManager() + .setComponentEnabledSetting( + new ComponentName(context, "com.android.dialer.main.impl.MainActivity"), + PackageManager.COMPONENT_ENABLED_STATE_ENABLED, + PackageManager.DONT_KILL_APP); + } + + @TargetApi(VERSION_CODES.O) + private static void createLauncherShortcutO(Context context) { + ShortcutInfoCompat shortcutInfo = + new ShortcutInfoCompat.Builder(context, SHORTCUT_KEY) + .setIcon(IconCompat.createWithResource(context, R.drawable.nui_launcher_icon)) + .setIntent(getIntent(context)) + .setShortLabel(context.getString(R.string.nui_shortcut_name)) + .build(); + ShortcutManagerCompat.requestPinShortcut(context, shortcutInfo, null); + } + + private static void createLauncherShortcutPreO(Context context) { + Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); + intent.putExtra( + Intent.EXTRA_SHORTCUT_ICON, + Intent.ShortcutIconResource.fromContext(context, R.drawable.nui_launcher_icon)); + intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, context.getString(R.string.nui_shortcut_name)); + intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, getIntent(context)); + context.sendBroadcast(intent); + } + + /** + * @param context Context of the application package implementing MainActivity class. + * @return intent for MainActivity.class + */ + public static Intent getIntent(Context context) { + Intent intent = new Intent(); + intent.setComponent(new ComponentName(context, "com.android.dialer.main.impl.MainActivity")); + intent.setAction(Intent.ACTION_VIEW); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + return intent; + } +} diff --git a/java/com/android/dialer/app/res/drawable-xxxhdpi/nui_launcher_icon.png b/java/com/android/dialer/app/res/drawable-xxxhdpi/nui_launcher_icon.png new file mode 100644 index 000000000..7845ebca4 Binary files /dev/null and b/java/com/android/dialer/app/res/drawable-xxxhdpi/nui_launcher_icon.png differ diff --git a/java/com/android/dialer/app/res/values/strings.xml b/java/com/android/dialer/app/res/values/strings.xml index 5554059fd..d4f3f8180 100644 --- a/java/com/android/dialer/app/res/values/strings.xml +++ b/java/com/android/dialer/app/res/values/strings.xml @@ -716,4 +716,8 @@ Calls deleted. View and delete attachments shared during calls in Messages. + + + Phone NUI -- cgit v1.2.3