From c377217d3ebd503fb91c55ac871c981f99ec649c Mon Sep 17 00:00:00 2001 From: zachh Date: Mon, 29 Jan 2018 15:35:05 -0800 Subject: Use application context when fetching shared prefs. Using non-application contexts incurs extra disk access because shared prefs are cached per context. Test: manually ejected sim and observed no strict mode violations PiperOrigin-RevId: 183739285 Change-Id: I9337e226ae1e060478219cf495752ceccf5a31e6 --- java/com/android/voicemail/impl/OmtpService.java | 4 ++-- java/com/android/voicemail/impl/VisualVoicemailPreferences.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/java/com/android/voicemail/impl/OmtpService.java b/java/com/android/voicemail/impl/OmtpService.java index 4e8860c02..e10a27571 100644 --- a/java/com/android/voicemail/impl/OmtpService.java +++ b/java/com/android/voicemail/impl/OmtpService.java @@ -197,14 +197,14 @@ public class OmtpService extends VisualVoicemailService { } private static void setShuttingDown(Context context, boolean value) { - PreferenceManager.getDefaultSharedPreferences(context) + PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()) .edit() .putBoolean(IS_SHUTTING_DOWN, value) .apply(); } private static boolean isShuttingDown(Context context) { - return PreferenceManager.getDefaultSharedPreferences(context) + return PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()) .getBoolean(IS_SHUTTING_DOWN, false); } } diff --git a/java/com/android/voicemail/impl/VisualVoicemailPreferences.java b/java/com/android/voicemail/impl/VisualVoicemailPreferences.java index 72506eb93..1d7204e94 100644 --- a/java/com/android/voicemail/impl/VisualVoicemailPreferences.java +++ b/java/com/android/voicemail/impl/VisualVoicemailPreferences.java @@ -31,7 +31,7 @@ public class VisualVoicemailPreferences extends PerAccountSharedPreferences { super( context, phoneAccountHandle, - PreferenceManager.getDefaultSharedPreferences(context), + PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()), "visual_voicemail_"); } } -- cgit v1.2.3 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 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