OSDN Git Service

Add an interface that returns time spent text for app.
authorFan Zhang <zhfan@google.com>
Mon, 29 Apr 2019 17:21:18 +0000 (10:21 -0700)
committerFan Zhang <zhfan@google.com>
Mon, 29 Apr 2019 18:09:58 +0000 (11:09 -0700)
Bug: 129266977
Test: robotest
Change-Id: Iaa5b4c5504eccbe0290b1014bd8e25aa3d4c3dd8

src/com/android/settings/applications/ApplicationFeatureProvider.java
src/com/android/settings/applications/ApplicationFeatureProviderImpl.java
src/com/android/settings/applications/appinfo/TimeSpentInAppPreferenceController.java
tests/robotests/src/com/android/settings/applications/appinfo/TimeSpentInAppPreferenceControllerTest.java

index 3ffacb0..e9f877e 100644 (file)
@@ -82,6 +82,14 @@ public interface ApplicationFeatureProvider {
     Set<String> getKeepEnabledPackages();
 
     /**
+     * Returns a user readable text explaining how much time user has spent in an app at a
+     * pre-specified duration.
+     */
+    default CharSequence getTimeSpentInApp(String packageName) {
+        return null;
+    }
+
+    /**
      * Callback that receives the number of packages installed on the device.
      */
     interface NumberOfAppsCallback {
index 7027239..1fd7997 100644 (file)
@@ -41,7 +41,7 @@ import java.util.Set;
 
 public class ApplicationFeatureProviderImpl implements ApplicationFeatureProvider {
 
-    private final Context mContext;
+    protected final Context mContext;
     private final PackageManager mPm;
     private final IPackageManager mPms;
     private final DevicePolicyManager mDpm;
index 70ffcb3..b1bbd06 100644 (file)
@@ -28,7 +28,9 @@ import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.applications.ApplicationFeatureProvider;
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.overlay.FeatureFactory;
 
 import java.util.List;
 
@@ -38,13 +40,15 @@ public class TimeSpentInAppPreferenceController extends BasePreferenceController
     static final Intent SEE_TIME_IN_APP_TEMPLATE = new Intent(Settings.ACTION_APP_USAGE_SETTINGS);
 
     private final PackageManager mPackageManager;
-
+    private final ApplicationFeatureProvider mAppFeatureProvider;
     private Intent mIntent;
     private String mPackageName;
 
     public TimeSpentInAppPreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mPackageManager = context.getPackageManager();
+        mAppFeatureProvider = FeatureFactory.getFactory(context)
+                .getApplicationFeatureProvider(context);
     }
 
     public void setPackageName(String packageName) {
@@ -80,6 +84,11 @@ public class TimeSpentInAppPreferenceController extends BasePreferenceController
         }
     }
 
+    @Override
+    public CharSequence getSummary() {
+        return mAppFeatureProvider.getTimeSpentInApp(mPackageName);
+    }
+
     private boolean isSystemApp(ResolveInfo info) {
         return info != null
                 && info.activityInfo != null
index 94d1228..e1da707 100644 (file)
@@ -20,6 +20,8 @@ import static android.content.Intent.EXTRA_PACKAGE_NAME;
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
@@ -32,6 +34,7 @@ import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.testutils.FakeFeatureFactory;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -58,10 +61,12 @@ public class TimeSpentInAppPreferenceControllerTest {
     private ShadowPackageManager mPackageManager;
     private TimeSpentInAppPreferenceController mController;
     private Preference mPreference;
+    private FakeFeatureFactory mFeatureFactory;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
+        mFeatureFactory = FakeFeatureFactory.setupForTest();
         mContext = RuntimeEnvironment.application;
         mPackageManager = Shadows.shadowOf(mContext.getPackageManager());
         mController = new TimeSpentInAppPreferenceController(mContext, TEST_KEY);
@@ -112,4 +117,12 @@ public class TimeSpentInAppPreferenceControllerTest {
         assertThat(intent.getStringExtra(EXTRA_PACKAGE_NAME))
                 .isEqualTo(TEST_INTENT.getStringExtra(EXTRA_PACKAGE_NAME));
     }
+
+    @Test
+    public void getSummary_shouldQueryAppFeatureProvider() {
+        mController.getSummary();
+
+        verify(mFeatureFactory.applicationFeatureProvider).getTimeSpentInApp(
+                nullable(String.class));
+    }
 }