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 17package com.android.settings.dashboard.suggestions; 18 19import android.app.ActivityManager; 20import android.content.ComponentName; 21import android.content.Context; 22import android.content.SharedPreferences; 23import android.service.settings.suggestions.Suggestion; 24import android.support.annotation.NonNull; 25import android.util.Log; 26import android.util.Pair; 27 28import com.android.internal.logging.nano.MetricsProto; 29import com.android.internal.logging.nano.MetricsProto.MetricsEvent; 30import com.android.settings.Settings.NightDisplaySuggestionActivity; 31import com.android.settings.display.NightDisplayPreferenceController; 32import com.android.settings.fingerprint.FingerprintEnrollSuggestionActivity; 33import com.android.settings.fingerprint.FingerprintSuggestionActivity; 34import com.android.settings.notification.ZenOnboardingActivity; 35import com.android.settings.notification.ZenSuggestionActivity; 36import com.android.settings.overlay.FeatureFactory; 37import com.android.settings.password.ScreenLockSuggestionActivity; 38import com.android.settings.support.NewDeviceIntroSuggestionActivity; 39import com.android.settings.wallpaper.WallpaperSuggestionActivity; 40import com.android.settings.wifi.calling.WifiCallingSuggestionActivity; 41import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; 42import com.android.settingslib.drawer.Tile; 43import com.android.settingslib.suggestions.SuggestionControllerMixin; 44 45import java.util.List; 46 47public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider { 48 49 private static final String TAG = "SuggestionFeature"; 50 private static final int EXCLUSIVE_SUGGESTION_MAX_COUNT = 3; 51 52 private static final String SHARED_PREF_FILENAME = "suggestions"; 53 54 private final MetricsFeatureProvider mMetricsFeatureProvider; 55 56 @Override 57 public boolean isSuggestionEnabled(Context context) { 58 final ActivityManager am = 59 (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 60 return !am.isLowRamDevice(); 61 } 62 63 @Override 64 public ComponentName getSuggestionServiceComponent() { 65 return new ComponentName( 66 "com.android.settings.intelligence", 67 "com.android.settings.intelligence.suggestions.SuggestionService"); 68 } 69 70 @Override 71 public boolean isSmartSuggestionEnabled(Context context) { 72 return false; 73 } 74 75 @Override 76 public boolean isSuggestionComplete(Context context, @NonNull ComponentName component) { 77 final String className = component.getClassName(); 78 if (className.equals(WallpaperSuggestionActivity.class.getName())) { 79 return WallpaperSuggestionActivity.isSuggestionComplete(context); 80 } else if (className.equals(FingerprintSuggestionActivity.class.getName())) { 81 return FingerprintSuggestionActivity.isSuggestionComplete(context); 82 } else if (className.equals(FingerprintEnrollSuggestionActivity.class.getName())) { 83 return FingerprintEnrollSuggestionActivity.isSuggestionComplete(context); 84 } else if (className.equals(ScreenLockSuggestionActivity.class.getName())) { 85 return ScreenLockSuggestionActivity.isSuggestionComplete(context); 86 } else if (className.equals(WifiCallingSuggestionActivity.class.getName())) { 87 return WifiCallingSuggestionActivity.isSuggestionComplete(context); 88 } else if (className.equals(NightDisplaySuggestionActivity.class.getName())) { 89 return NightDisplayPreferenceController.isSuggestionComplete(context); 90 } else if (className.equals(NewDeviceIntroSuggestionActivity.class.getName())) { 91 return NewDeviceIntroSuggestionActivity.isSuggestionComplete(context); 92 } else if (className.equals(ZenSuggestionActivity.class.getName())) { 93 return ZenOnboardingActivity.isSuggestionComplete(context); 94 } 95 return false; 96 } 97 98 @Override 99 public SharedPreferences getSharedPrefs(Context context) { 100 return context.getSharedPreferences(SHARED_PREF_FILENAME, Context.MODE_PRIVATE); 101 } 102 103 public SuggestionFeatureProviderImpl(Context context) { 104 final Context appContext = context.getApplicationContext(); 105 mMetricsFeatureProvider = FeatureFactory.getFactory(appContext) 106 .getMetricsFeatureProvider(); 107 } 108 109 @Override 110 public void filterExclusiveSuggestions(List<Tile> suggestions) { 111 if (suggestions == null) { 112 return; 113 } 114 for (int i = suggestions.size() - 1; i >= EXCLUSIVE_SUGGESTION_MAX_COUNT; i--) { 115 Log.d(TAG, "Removing exclusive suggestion"); 116 suggestions.remove(i); 117 } 118 } 119 120 @Override 121 public void dismissSuggestion(Context context, SuggestionControllerMixin mixin, 122 Suggestion suggestion) { 123 if (mixin == null || suggestion == null || context == null) { 124 return; 125 } 126 mMetricsFeatureProvider.action( 127 context, MetricsProto.MetricsEvent.ACTION_SETTINGS_DISMISS_SUGGESTION, 128 suggestion.getId()); 129 mixin.dismissSuggestion(suggestion); 130 } 131 132 @Override 133 public Pair<Integer, Object>[] getLoggingTaggedData(Context context) { 134 final boolean isSmartSuggestionEnabled = isSmartSuggestionEnabled(context); 135 return new Pair[] {Pair.create( 136 MetricsEvent.FIELD_SETTINGS_SMART_SUGGESTIONS_ENABLED, 137 isSmartSuggestionEnabled ? 1 : 0)}; 138 } 139} 140