From 0ff942e5de2ba788f7a8ed917e97e07bb5380e4b Mon Sep 17 00:00:00 2001 From: Andrew Sapperstein Date: Sun, 25 Feb 2018 17:02:38 -0800 Subject: [PATCH 01/12] Delete unused layout: preference_importance_slider. And its associated colors. Test: builds Change-Id: Ibe3f4399b15d97f976a598553b04d92296067a74 --- color-check-baseline.xml | 32 --------- res/layout/preference_importance_slider.xml | 78 --------------------- res/values/colors.xml | 3 - 3 files changed, 113 deletions(-) delete mode 100644 res/layout/preference_importance_slider.xml diff --git a/color-check-baseline.xml b/color-check-baseline.xml index 21b9a09a212..1cf6b20077c 100644 --- a/color-check-baseline.xml +++ b/color-check-baseline.xml @@ -2113,38 +2113,6 @@ column="17"/> - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/res/values/colors.xml b/res/values/colors.xml index 3d86208c583..38ab8939b84 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -94,9 +94,6 @@ #4285f4 #ffffffff - @*android:color/material_grey_300 - #858383 - #B0BEC5 From 8558b593ddd95ede6538482da24ac5df04a20b8f Mon Sep 17 00:00:00 2001 From: Yueming Wang Date: Mon, 26 Feb 2018 14:58:41 +0000 Subject: [PATCH 02/12] Revert "Fix the crash when editing or deleting APN." This reverts commit db9a9bb0b0438816909e002156cb7322c66a0d28. Reason for revert: As per discussion in b/72484718, we are going to block Access Point Name entry point in Network&Settings, so we no longer need the change in ApnSettings fragment itself. Bug: 72484718 Change-Id: Ia84f129b86fe72b3b2dc9699d5893ced7c65e1c3 --- src/com/android/settings/ApnPreference.java | 9 +-------- src/com/android/settings/ApnSettings.java | 5 +---- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/src/com/android/settings/ApnPreference.java b/src/com/android/settings/ApnPreference.java index 9a6eeaf46da..4e89efc781c 100755 --- a/src/com/android/settings/ApnPreference.java +++ b/src/com/android/settings/ApnPreference.java @@ -16,7 +16,6 @@ package com.android.settings; -import static android.provider.Telephony.Carriers.CONTENT_URI; import static android.provider.Telephony.Carriers.FILTERED_URI; import android.content.ContentUris; @@ -37,7 +36,6 @@ import android.widget.RelativeLayout; public class ApnPreference extends Preference implements CompoundButton.OnCheckedChangeListener, OnClickListener { final static String TAG = "ApnPreference"; - private boolean mDpcEnforced = false; private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; @@ -121,8 +119,7 @@ public class ApnPreference extends Preference implements Context context = getContext(); if (context != null) { int pos = Integer.parseInt(getKey()); - Uri url = ContentUris.withAppendedId( - mDpcEnforced ? FILTERED_URI : CONTENT_URI, pos); + Uri url = ContentUris.withAppendedId(FILTERED_URI, pos); Intent editIntent = new Intent(Intent.ACTION_EDIT, url); editIntent.putExtra(ApnSettings.SUB_ID, mSubId); context.startActivity(editIntent); @@ -141,8 +138,4 @@ public class ApnPreference extends Preference implements public void setSubId(int subId) { mSubId = subId; } - - public void setDpcEnforced(boolean enforced) { - mDpcEnforced = enforced; - } } diff --git a/src/com/android/settings/ApnSettings.java b/src/com/android/settings/ApnSettings.java index 2c22a790e8d..3628121808e 100755 --- a/src/com/android/settings/ApnSettings.java +++ b/src/com/android/settings/ApnSettings.java @@ -16,7 +16,6 @@ package com.android.settings; -import static android.provider.Telephony.Carriers.CONTENT_URI; import static android.provider.Telephony.Carriers.ENFORCE_MANAGED_URI; import static android.provider.Telephony.Carriers.FILTERED_URI; @@ -292,7 +291,6 @@ public class ApnSettings extends RestrictedSettingsFragment implements mSelectedKey = getSelectedApnKey(); cursor.moveToFirst(); - boolean enforced = isDpcApnEnforced(); while (!cursor.isAfterLast()) { String name = cursor.getString(NAME_INDEX); String apn = cursor.getString(APN_INDEX); @@ -309,7 +307,6 @@ public class ApnSettings extends RestrictedSettingsFragment implements pref.setPersistent(false); pref.setOnPreferenceChangeListener(this); pref.setSubId(subId); - pref.setDpcEnforced(enforced); boolean selectable = ((type == null) || !type.equals("mms")); pref.setSelectable(selectable); @@ -401,7 +398,7 @@ public class ApnSettings extends RestrictedSettingsFragment implements @Override public boolean onPreferenceTreeClick(Preference preference) { int pos = Integer.parseInt(preference.getKey()); - Uri url = ContentUris.withAppendedId(isDpcApnEnforced() ? FILTERED_URI : CONTENT_URI, pos); + Uri url = ContentUris.withAppendedId(FILTERED_URI, pos); startActivity(new Intent(Intent.ACTION_EDIT, url)); return true; } From 333f794b4f5253e98b48a9833613b42beba5991f Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Mon, 26 Feb 2018 14:46:49 -0800 Subject: [PATCH 03/12] Add metric for BatteryTipDialogFragmnt Bug: 73888115 Test: Build Change-Id: I234865f31658d3a44df4aa9521b6b2ea0f26f287 --- .../fuelgauge/batterytip/BatteryTipDialogFragment.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java index 0c9c8a960b9..9e172de102c 100644 --- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java +++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipDialogFragment.java @@ -26,6 +26,7 @@ import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; +import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.Utils; @@ -131,8 +132,7 @@ public class BatteryTipDialogFragment extends InstrumentedDialogFragment impleme @Override public int getMetricsCategory() { - //TODO(b/70570352): add correct metric id - return 0; + return MetricsProto.MetricsEvent.FUELGAUGE_BATTERY_TIP_DIALOG; } @Override From 0e06b4e2a183fa6c58f57799e4443f9335f62334 Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Mon, 26 Feb 2018 17:20:19 -0800 Subject: [PATCH 04/12] Add logging for battery tip When it is triggered, we log the type of battery tip. Bug: 3662211 Test: RunSettingsRoboTests Change-Id: Iab1034008796b6b21eee53297b2e574199693f7e --- .../BatteryTipPreferenceController.java | 8 ++++++++ .../BatteryTipPreferenceControllerTest.java | 16 +++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java index db273c0fde0..2702bb6cb32 100644 --- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java +++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java @@ -23,12 +23,15 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceGroup; import android.support.v7.preference.PreferenceScreen; +import com.android.internal.logging.nano.MetricsProto; import com.android.settings.SettingsActivity; import com.android.settings.core.BasePreferenceController; import com.android.settings.core.InstrumentedPreferenceFragment; import com.android.settings.fuelgauge.batterytip.actions.BatteryTipAction; import com.android.settings.fuelgauge.batterytip.tips.BatteryTip; import com.android.settings.fuelgauge.batterytip.tips.SummaryTip; +import com.android.settings.overlay.FeatureFactory; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import java.util.HashMap; import java.util.List; @@ -45,6 +48,7 @@ public class BatteryTipPreferenceController extends BasePreferenceController { private List mBatteryTips; private Map mBatteryTipMap; private SettingsActivity mSettingsActivity; + private MetricsFeatureProvider mMetricsFeatureProvider; @VisibleForTesting PreferenceGroup mPreferenceGroup; @VisibleForTesting @@ -63,6 +67,7 @@ public class BatteryTipPreferenceController extends BasePreferenceController { mBatteryTipMap = new HashMap<>(); mFragment = fragment; mSettingsActivity = settingsActivity; + mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); } @Override @@ -99,6 +104,9 @@ public class BatteryTipPreferenceController extends BasePreferenceController { final Preference preference = batteryTip.buildPreference(mPrefContext); mBatteryTipMap.put(preference.getKey(), batteryTip); mPreferenceGroup.addPreference(preference); + mMetricsFeatureProvider.action(mContext, + MetricsProto.MetricsEvent.ACTION_BATTERY_TIP_SHOWN, + batteryTip.getType()); break; } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java index b4149c11e07..66be3e2a943 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceControllerTest.java @@ -21,6 +21,7 @@ import static com.android.settings.fuelgauge.batterytip.tips.BatteryTip.TipType import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; @@ -32,10 +33,12 @@ import android.support.v7.preference.PreferenceGroup; import android.support.v7.preference.PreferenceManager; import android.support.v7.preference.PreferenceScreen; +import com.android.internal.logging.nano.MetricsProto; import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; import com.android.settings.fuelgauge.batterytip.tips.BatteryTip; import com.android.settings.fuelgauge.batterytip.tips.SummaryTip; +import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; @@ -72,6 +75,7 @@ public class BatteryTipPreferenceControllerTest { private List mOldBatteryTips; private List mNewBatteryTips; private Preference mPreference; + private FakeFeatureFactory mFeatureFactory; @Before public void setUp() { @@ -84,6 +88,7 @@ public class BatteryTipPreferenceControllerTest { doReturn(mPreferenceGroup).when(mPreferenceScreen).findPreference(KEY_PREF); mPreference = new Preference(mContext); mPreference.setKey(KEY_TIP); + mFeatureFactory = FakeFeatureFactory.setupForTest(); mOldBatteryTips = new ArrayList<>(); mOldBatteryTips.add(new SummaryTip(BatteryTip.StateType.NEW)); @@ -104,7 +109,7 @@ public class BatteryTipPreferenceControllerTest { } @Test - public void updateBatteryTips_updateTwice_firstShowSummaryTipThenRemoveIt() { + public void testUpdateBatteryTips_updateTwice_firstShowSummaryTipThenRemoveIt() { // Display summary tip because its state is new mBatteryTipPreferenceController.updateBatteryTips(mOldBatteryTips); assertOnlyContainsSummaryTip(mPreferenceGroup); @@ -114,6 +119,15 @@ public class BatteryTipPreferenceControllerTest { assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(0); } + @Test + public void testUpdateBatteryTips_logBatteryTip() { + mBatteryTipPreferenceController.updateBatteryTips(mOldBatteryTips); + + verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class), + eq(MetricsProto.MetricsEvent.ACTION_BATTERY_TIP_SHOWN), + eq(BatteryTip.TipType.SUMMARY)); + } + @Test public void testHandlePreferenceTreeClick_noDialog_invokeCallback() { doReturn(SMART_BATTERY_MANAGER).when(mBatteryTip).getType(); From 3fc11a6db40d4345bdf0c641f59420964448a52f Mon Sep 17 00:00:00 2001 From: Yueming Wang Date: Mon, 26 Feb 2018 14:46:21 +0000 Subject: [PATCH 05/12] Revert "Change Settings to use URL_FILTERED and blocks menu options when DPC Apns are enforced." This reverts commit ab1f251defe8ee327917b1788f5702ae2c231a47. Reason for revert: As per discussion in b/72484718, we are going to block Access Point Name entry point in Network&Settings, so we no longer need the change in ApnSettings fragment itself. Bug: 72484718 Change-Id: I337a03e8baebaedb9e9ab83ccc4f7cf2f9c562c8 --- src/com/android/settings/ApnPreference.java | 5 ++-- src/com/android/settings/ApnSettings.java | 29 +++++++-------------- 2 files changed, 11 insertions(+), 23 deletions(-) diff --git a/src/com/android/settings/ApnPreference.java b/src/com/android/settings/ApnPreference.java index 4e89efc781c..0111b26194c 100755 --- a/src/com/android/settings/ApnPreference.java +++ b/src/com/android/settings/ApnPreference.java @@ -16,12 +16,11 @@ package com.android.settings; -import static android.provider.Telephony.Carriers.FILTERED_URI; - import android.content.ContentUris; import android.content.Context; import android.content.Intent; import android.net.Uri; +import android.provider.Telephony; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceViewHolder; import android.telephony.SubscriptionManager; @@ -119,7 +118,7 @@ public class ApnPreference extends Preference implements Context context = getContext(); if (context != null) { int pos = Integer.parseInt(getKey()); - Uri url = ContentUris.withAppendedId(FILTERED_URI, pos); + Uri url = ContentUris.withAppendedId(Telephony.Carriers.CONTENT_URI, pos); Intent editIntent = new Intent(Intent.ACTION_EDIT, url); editIntent.putExtra(ApnSettings.SUB_ID, mSubId); context.startActivity(editIntent); diff --git a/src/com/android/settings/ApnSettings.java b/src/com/android/settings/ApnSettings.java index 3628121808e..d554301063c 100755 --- a/src/com/android/settings/ApnSettings.java +++ b/src/com/android/settings/ApnSettings.java @@ -16,9 +16,6 @@ package com.android.settings; -import static android.provider.Telephony.Carriers.ENFORCE_MANAGED_URI; -import static android.provider.Telephony.Carriers.FILTERED_URI; - import android.app.Activity; import android.app.Dialog; import android.app.ProgressDialog; @@ -42,6 +39,7 @@ import android.os.UserManager; import android.provider.Telephony; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceGroup; +import android.support.v7.preference.PreferenceScreen; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; @@ -52,6 +50,7 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.MotionEvent; +import android.widget.TextView; import android.widget.Toast; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; @@ -247,17 +246,6 @@ public class ApnSettings extends RestrictedSettingsFragment implements return null; } - private boolean isDpcApnEnforced() { - try (Cursor enforceCursor = getContentResolver().query(ENFORCE_MANAGED_URI, - null, null, null, null)) { - if (enforceCursor == null || enforceCursor.getCount() != 1) { - return false; - } - enforceCursor.moveToFirst(); - return enforceCursor.getInt(0) > 0; - } - } - private void fillList() { final TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); final int subId = mSubscriptionInfo != null ? mSubscriptionInfo.getSubscriptionId() @@ -271,9 +259,9 @@ public class ApnSettings extends RestrictedSettingsFragment implements where.append(" AND NOT (type='ims')"); } - Cursor cursor = getContentResolver().query(FILTERED_URI, - new String[] {"_id", "name", "apn", "type", "mvno_type", "mvno_match_data"}, - where.toString(), null, Telephony.Carriers.DEFAULT_SORT_ORDER); + Cursor cursor = getContentResolver().query(Telephony.Carriers.CONTENT_URI, new String[] { + "_id", "name", "apn", "type", "mvno_type", "mvno_match_data"}, where.toString(), + null, Telephony.Carriers.DEFAULT_SORT_ORDER); if (cursor != null) { IccRecords r = null; @@ -355,14 +343,15 @@ public class ApnSettings extends RestrictedSettingsFragment implements @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - if (!mUnavailable && !isDpcApnEnforced()) { + if (!mUnavailable) { if (mAllowAddingApns) { menu.add(0, MENU_NEW, 0, getResources().getString(R.string.menu_new)) .setIcon(R.drawable.ic_menu_add_white) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); } - menu.add(0, MENU_RESTORE, 0, getResources().getString(R.string.menu_restore)) + menu.add(0, MENU_RESTORE, 0, + getResources().getString(R.string.menu_restore)) .setIcon(android.R.drawable.ic_menu_upload); } @@ -398,7 +387,7 @@ public class ApnSettings extends RestrictedSettingsFragment implements @Override public boolean onPreferenceTreeClick(Preference preference) { int pos = Integer.parseInt(preference.getKey()); - Uri url = ContentUris.withAppendedId(FILTERED_URI, pos); + Uri url = ContentUris.withAppendedId(Telephony.Carriers.CONTENT_URI, pos); startActivity(new Intent(Intent.ACTION_EDIT, url)); return true; } From 0fa413e314a2057738b185b127b907b761a4424c Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Fri, 23 Feb 2018 10:59:27 -0800 Subject: [PATCH 06/12] Fix the AnomalyCleanUpJobService 1. Invoke it in BOOT_COMPLETED 2. Set it periodic 3. Change the anomaly history from 3 days to 30 days Bug: 72385333 Test: RunSettingsRoboTests Change-Id: Ib59a85f3dffd6c094ff400a75bec44d4c65bce44 --- AndroidManifest.xml | 2 +- ...ervice.java => AnomalyCleanupJobService.java} | 16 ++++++++-------- .../batterytip/AnomalyConfigReceiver.java | 4 ++++ .../batterytip/AnomalyDetectionReceiver.java | 1 - .../fuelgauge/batterytip/BatteryTipPolicy.java | 12 +++++++----- ...st.java => AnomalyCleanupJobServiceTest.java} | 7 ++++--- .../batterytip/BatteryTipPolicyTest.java | 6 +++--- 7 files changed, 27 insertions(+), 21 deletions(-) rename src/com/android/settings/fuelgauge/batterytip/{AnomalyCleanUpJobService.java => AnomalyCleanupJobService.java} (86%) rename tests/robotests/src/com/android/settings/fuelgauge/batterytip/{AnomalyCleanUpJobServiceTest.java => AnomalyCleanupJobServiceTest.java} (88%) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 78c3a732a47..2ddccbadcf2 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -3296,7 +3296,7 @@ - { batteryDatabaseManager.deleteAllAnomaliesBeforeTimeStamp( System.currentTimeMillis() - TimeUnit.HOURS.toMillis( - policy.dataHistoryRetainHour)); + policy.dataHistoryRetainDay)); jobFinished(params, false /* wantsReschedule */); }); @@ -70,6 +70,6 @@ public class AnomalyCleanUpJobService extends JobService { @Override public boolean onStopJob(JobParameters jobParameters) { - return true; + return false; } } diff --git a/src/com/android/settings/fuelgauge/batterytip/AnomalyConfigReceiver.java b/src/com/android/settings/fuelgauge/batterytip/AnomalyConfigReceiver.java index f658627b547..d81dc34efcd 100644 --- a/src/com/android/settings/fuelgauge/batterytip/AnomalyConfigReceiver.java +++ b/src/com/android/settings/fuelgauge/batterytip/AnomalyConfigReceiver.java @@ -54,6 +54,10 @@ public class AnomalyConfigReceiver extends BroadcastReceiver { extraIntent, PendingIntent.FLAG_UPDATE_CURRENT); uploadPendingIntent(statsManager, pendingIntent); + + if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { + AnomalyCleanupJobService.scheduleCleanUp(context); + } } } diff --git a/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionReceiver.java b/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionReceiver.java index 0a24b001c40..4f21e115c8a 100644 --- a/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionReceiver.java +++ b/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionReceiver.java @@ -44,6 +44,5 @@ public class AnomalyDetectionReceiver extends BroadcastReceiver { bundle.putLong(KEY_ANOMALY_TIMESTAMP, System.currentTimeMillis()); AnomalyDetectionJobService.scheduleAnomalyDetection(context, intent); - AnomalyCleanUpJobService.scheduleCleanUp(context); } } diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java index fcdbb3a345f..17284a0de26 100644 --- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java +++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicy.java @@ -23,6 +23,7 @@ import android.util.KeyValueListParser; import android.util.Log; import java.time.Duration; +import java.util.concurrent.TimeUnit; /** * Class to store the policy for battery tips, which comes from @@ -43,7 +44,7 @@ public class BatteryTipPolicy { private static final String KEY_REDUCED_BATTERY_PERCENT = "reduced_battery_percent"; private static final String KEY_LOW_BATTERY_ENABLED = "low_battery_enabled"; private static final String KEY_LOW_BATTERY_HOUR = "low_battery_hour"; - private static final String KEY_DATA_HISTORY_RETAIN_HOUR = "data_history_retain_hour"; + private static final String KEY_DATA_HISTORY_RETAIN_DAY = "data_history_retain_day"; private static final String KEY_EXCESSIVE_BG_DRAIN_PERCENTAGE = "excessive_bg_drain_percentage"; /** @@ -145,18 +146,19 @@ public class BatteryTipPolicy { public final int lowBatteryHour; /** - * TTL hour for anomaly data stored in database + * TTL day for anomaly data stored in database * * @see Settings.Global#BATTERY_TIP_CONSTANTS - * @see #KEY_DATA_HISTORY_RETAIN_HOUR + * @see #KEY_DATA_HISTORY_RETAIN_DAY */ - public final int dataHistoryRetainHour; + public final int dataHistoryRetainDay; /** * Battery drain percentage threshold for excessive background anomaly(i.e. 10%) * * This is an additional check for excessive background, to check whether battery drain * for an app is larger than x% + * * @see Settings.Global#BATTERY_TIP_CONSTANTS * @see #KEY_EXCESSIVE_BG_DRAIN_PERCENTAGE */ @@ -193,7 +195,7 @@ public class BatteryTipPolicy { reducedBatteryPercent = mParser.getInt(KEY_REDUCED_BATTERY_PERCENT, 50); lowBatteryEnabled = mParser.getBoolean(KEY_LOW_BATTERY_ENABLED, false); lowBatteryHour = mParser.getInt(KEY_LOW_BATTERY_HOUR, 16); - dataHistoryRetainHour = mParser.getInt(KEY_DATA_HISTORY_RETAIN_HOUR, 72); + dataHistoryRetainDay = mParser.getInt(KEY_DATA_HISTORY_RETAIN_DAY, 30); excessiveBgDrainPercentage = mParser.getInt(KEY_EXCESSIVE_BG_DRAIN_PERCENTAGE, 10); } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanUpJobServiceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanupJobServiceTest.java similarity index 88% rename from tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanUpJobServiceTest.java rename to tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanupJobServiceTest.java index 3da7bbd7be3..4682d15a71f 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanUpJobServiceTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanupJobServiceTest.java @@ -41,7 +41,7 @@ import java.util.concurrent.TimeUnit; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) -public class AnomalyCleanUpJobServiceTest { +public class AnomalyCleanupJobServiceTest { @Before public void setUp() { MockitoAnnotations.initMocks(this); @@ -49,7 +49,7 @@ public class AnomalyCleanUpJobServiceTest { @Test public void testScheduleCleanUp() { - AnomalyCleanUpJobService.scheduleCleanUp(application); + AnomalyCleanupJobService.scheduleCleanUp(application); ShadowJobScheduler shadowJobScheduler = Shadows.shadowOf( application.getSystemService(JobScheduler.class)); @@ -57,7 +57,8 @@ public class AnomalyCleanUpJobServiceTest { assertEquals(1, pendingJobs.size()); JobInfo pendingJob = pendingJobs.get(0); assertThat(pendingJob.getId()).isEqualTo(R.id.job_anomaly_clean_up); - assertThat(pendingJob.getMinLatencyMillis()).isEqualTo(TimeUnit.DAYS.toMillis(1)); + assertThat(pendingJob.getIntervalMillis()).isEqualTo(TimeUnit.DAYS.toMillis(1)); assertThat(pendingJob.isRequireDeviceIdle()).isTrue(); + assertThat(pendingJob.isRequireCharging()).isTrue(); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java index abf04cd1440..188fe77b117 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/BatteryTipPolicyTest.java @@ -50,7 +50,7 @@ public class BatteryTipPolicyTest { + ",reduced_battery_percent=30" + ",low_battery_enabled=false" + ",low_battery_hour=10" - + ",data_history_retain_hour=24" + + ",data_history_retain_day=24" + ",excessive_bg_drain_percentage=25"; private Context mContext; @@ -78,7 +78,7 @@ public class BatteryTipPolicyTest { assertThat(batteryTipPolicy.reducedBatteryPercent).isEqualTo(30); assertThat(batteryTipPolicy.lowBatteryEnabled).isFalse(); assertThat(batteryTipPolicy.lowBatteryHour).isEqualTo(10); - assertThat(batteryTipPolicy.dataHistoryRetainHour).isEqualTo(24); + assertThat(batteryTipPolicy.dataHistoryRetainDay).isEqualTo(24); assertThat(batteryTipPolicy.excessiveBgDrainPercentage).isEqualTo(25); } @@ -101,7 +101,7 @@ public class BatteryTipPolicyTest { assertThat(batteryTipPolicy.reducedBatteryPercent).isEqualTo(50); assertThat(batteryTipPolicy.lowBatteryEnabled).isFalse(); assertThat(batteryTipPolicy.lowBatteryHour).isEqualTo(16); - assertThat(batteryTipPolicy.dataHistoryRetainHour).isEqualTo(72); + assertThat(batteryTipPolicy.dataHistoryRetainDay).isEqualTo(30); assertThat(batteryTipPolicy.excessiveBgDrainPercentage).isEqualTo(10); } } From 40bd570352690750d2944c90ff99f83915f41d1e Mon Sep 17 00:00:00 2001 From: Jerry Zhang Date: Fri, 23 Feb 2018 14:43:58 -0800 Subject: [PATCH 07/12] Remove unused classes and tests. Old usb pages have been replaced by UsbDetailsFragment and UsbDefaultFragment. Old connected devices has been replaced by new connected devices. Bug: 70848054 Test: Passes Change-Id: I538cbb88d4f878449a83da9a4a0381e74e840c6a --- AndroidManifest.xml | 27 -- res/xml/connected_devices_old.xml | 56 ---- res/xml/usb_settings.xml | 41 --- src/com/android/settings/Settings.java | 15 +- .../android/settings/SettingsActivity.java | 11 +- ...ancedConnectedDeviceDashboardFragment.java | 4 - .../ConnectedDeviceDashboardFragmentOld.java | 155 ----------- .../usb/ConnectedUsbDeviceUpdater.java | 30 ++- .../usb/UsbDetailsHeaderController.java | 2 +- .../usb/UsbModeChooserActivity.java | 204 --------------- .../usb/UsbModePreferenceController.java | 122 --------- .../android/settings/core/FeatureFlags.java | 1 - .../core/gateway/SettingsGateway.java | 4 - .../SelectUsbConfigPreferenceController.java | 156 ----------- .../search/SearchIndexableResourcesImpl.java | 5 +- .../usb/UsbModeChooserActivityTest.java | 95 ------- .../usb/UsbModePreferenceControllerTest.java | 105 -------- ...lectUsbConfigPreferenceControllerTest.java | 244 ------------------ 18 files changed, 33 insertions(+), 1244 deletions(-) delete mode 100644 res/xml/connected_devices_old.xml delete mode 100644 res/xml/usb_settings.xml delete mode 100644 src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java delete mode 100644 src/com/android/settings/connecteddevice/usb/UsbModeChooserActivity.java delete mode 100644 src/com/android/settings/connecteddevice/usb/UsbModePreferenceController.java delete mode 100644 src/com/android/settings/development/SelectUsbConfigPreferenceController.java delete mode 100644 tests/robotests/src/com/android/settings/connecteddevice/usb/UsbModeChooserActivityTest.java delete mode 100644 tests/robotests/src/com/android/settings/connecteddevice/usb/UsbModePreferenceControllerTest.java delete mode 100644 tests/robotests/src/com/android/settings/development/SelectUsbConfigPreferenceControllerTest.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 78c3a732a47..394afe415ab 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -212,33 +212,6 @@ android:value="true" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/res/xml/usb_settings.xml b/res/xml/usb_settings.xml deleted file mode 100644 index 611a1b4db11..00000000000 --- a/res/xml/usb_settings.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 599d6fbe762..b5435812b93 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -16,10 +16,7 @@ package com.android.settings; -import static com.android.settings.core.FeatureFlags.CONNECTED_DEVICE_V2; - import android.os.Bundle; -import android.util.FeatureFlagUtils; import com.android.settings.enterprise.EnterprisePrivacySettings; @@ -157,11 +154,7 @@ public class Settings extends SettingsActivity { // Top level categories for new IA public static class NetworkDashboardActivity extends SettingsActivity {} - public static class ConnectedDeviceDashboardActivity extends SettingsActivity { - public static final boolean isEnabled() { - return FeatureFlagUtils.isEnabled(null /* context */, CONNECTED_DEVICE_V2); - } - } + public static class ConnectedDeviceDashboardActivity extends SettingsActivity {} public static class ConnectedDeviceDashboardActivityOld extends SettingsActivity {} public static class PowerUsageSummaryActivity extends SettingsActivity { /* empty */ } public static class PowerUsageSummaryLegacyActivity extends SettingsActivity { /* empty */ } @@ -169,10 +162,6 @@ public class Settings extends SettingsActivity { public static class StorageDashboardActivity extends SettingsActivity {} public static class AccountDashboardActivity extends SettingsActivity {} public static class SystemDashboardActivity extends SettingsActivity {} - public static class AdvancedConnectedDeviceActivity extends SettingsActivity { - public static final boolean isEnabled() { - return FeatureFlagUtils.isEnabled(null /* context */, CONNECTED_DEVICE_V2); - } - } + public static class AdvancedConnectedDeviceActivity extends SettingsActivity {} } diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 3144ae24440..63214d5e1e1 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -631,19 +631,10 @@ public class SettingsActivity extends SettingsDrawerActivity Utils.isBandwidthControlEnabled() /* enabled */, isAdmin) || somethingChanged; - final boolean isConnectedDeviceV2Enabled = - Settings.ConnectedDeviceDashboardActivity.isEnabled(); - // Enable new connected page if v2 enabled somethingChanged = setTileEnabled( new ComponentName(packageName, Settings.ConnectedDeviceDashboardActivity.class.getName()), - isConnectedDeviceV2Enabled && !UserManager.isDeviceInDemoMode(this) /* enabled */, - isAdmin) || somethingChanged; - // Enable old connected page if v2 disabled - somethingChanged = setTileEnabled( - new ComponentName(packageName, - Settings.ConnectedDeviceDashboardActivityOld.class.getName()), - !isConnectedDeviceV2Enabled && !UserManager.isDeviceInDemoMode(this) /* enabled */, + !UserManager.isDeviceInDemoMode(this) /* enabled */, isAdmin) || somethingChanged; somethingChanged = setTileEnabled(new ComponentName(packageName, diff --git a/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java index 6a1568dfc10..f06b35a1209 100644 --- a/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java +++ b/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java @@ -24,8 +24,6 @@ import com.android.settings.R; import com.android.settings.bluetooth.BluetoothFilesPreferenceController; import com.android.settings.bluetooth.BluetoothMasterSwitchPreferenceController; import com.android.settings.bluetooth.BluetoothSwitchPreferenceController; -import com.android.settings.connecteddevice.usb.UsbBackend; -import com.android.settings.connecteddevice.usb.UsbModePreferenceController; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.nfc.NfcPreferenceController; import com.android.settings.print.PrintSettingPreferenceController; @@ -75,8 +73,6 @@ public class AdvancedConnectedDeviceDashboardFragment extends DashboardFragment final NfcPreferenceController nfcPreferenceController = new NfcPreferenceController(context); controllers.add(nfcPreferenceController); - controllers.add(new UsbModePreferenceController( - context, new UsbBackend(context), lifecycle)); final BluetoothSwitchPreferenceController bluetoothPreferenceController = new BluetoothSwitchPreferenceController(context); controllers.add(bluetoothPreferenceController); diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java deleted file mode 100644 index 304a369db4d..00000000000 --- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (C) 2016 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.settings.connecteddevice; - -import android.app.Activity; -import android.content.Context; -import android.content.pm.PackageManager; -import android.provider.SearchIndexableResource; -import android.support.annotation.VisibleForTesting; - -import com.android.internal.logging.nano.MetricsProto; -import com.android.settings.R; -import com.android.settings.bluetooth.BluetoothMasterSwitchPreferenceController; -import com.android.settings.bluetooth.Utils; -import com.android.settings.connecteddevice.usb.UsbBackend; -import com.android.settings.connecteddevice.usb.UsbModePreferenceController; -import com.android.settings.dashboard.DashboardFragment; -import com.android.settings.dashboard.SummaryLoader; -import com.android.settings.nfc.NfcPreferenceController; -import com.android.settings.search.BaseSearchIndexProvider; -import com.android.settingslib.core.AbstractPreferenceController; -import com.android.settingslib.core.lifecycle.Lifecycle; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * This is the previous {@link ConnectedDeviceDashboardFragment} in Android O, in Android P the - * main entry will be {@link ConnectedDeviceDashboardFragment} - * - * @deprecated - */ -@Deprecated -public class ConnectedDeviceDashboardFragmentOld extends DashboardFragment { - - private static final String TAG = "ConnectedDeviceFrag2"; - private UsbModePreferenceController mUsbPrefController; - - @Override - public int getMetricsCategory() { - return MetricsProto.MetricsEvent.SETTINGS_CONNECTED_DEVICE_CATEGORY; - } - - @Override - protected String getLogTag() { - return TAG; - } - - @Override - public int getHelpResource() { - return R.string.help_url_connected_devices; - } - - @Override - protected int getPreferenceScreenResId() { - return R.xml.connected_devices_old; - } - - @Override - protected List createPreferenceControllers(Context context) { - final List controllers = new ArrayList<>(); - final Lifecycle lifecycle = getLifecycle(); - final NfcPreferenceController nfcPreferenceController = - new NfcPreferenceController(context); - lifecycle.addObserver(nfcPreferenceController); - controllers.add(nfcPreferenceController); - mUsbPrefController = new UsbModePreferenceController(context, new UsbBackend(context), - lifecycle); - controllers.add(mUsbPrefController); - final BluetoothMasterSwitchPreferenceController bluetoothPreferenceController = - new BluetoothMasterSwitchPreferenceController( - context, Utils.getLocalBtManager(context), this); - lifecycle.addObserver(bluetoothPreferenceController); - controllers.add(bluetoothPreferenceController); - - return controllers; - } - - @VisibleForTesting - static class SummaryProvider implements SummaryLoader.SummaryProvider { - - private final Context mContext; - private final SummaryLoader mSummaryLoader; - private final NfcPreferenceController mNfcPreferenceController; - - public SummaryProvider(Context context, SummaryLoader summaryLoader) { - mContext = context; - mSummaryLoader = summaryLoader; - mNfcPreferenceController = new NfcPreferenceController(context); - } - - @Override - public void setListening(boolean listening) { - if (listening) { - if (mNfcPreferenceController.isAvailable()) { - mSummaryLoader.setSummary(this, - mContext.getString(R.string.connected_devices_dashboard_summary)); - } else { - mSummaryLoader.setSummary(this, mContext.getString( - R.string.connected_devices_dashboard_no_nfc_summary)); - } - } - } - } - - public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY - = new SummaryLoader.SummaryProviderFactory() { - @Override - public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity, - SummaryLoader summaryLoader) { - return new SummaryProvider(activity, summaryLoader); - } - }; - - /** - * For Search. - */ - public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = - new BaseSearchIndexProvider() { - @Override - public List getXmlResourcesToIndex( - Context context, boolean enabled) { - final SearchIndexableResource sir = new SearchIndexableResource(context); - sir.xmlResId = R.xml.connected_devices_old; - return Arrays.asList(sir); - } - - @Override - public List getNonIndexableKeys(Context context) { - final List keys = super.getNonIndexableKeys(context); - PackageManager pm = context.getPackageManager(); - if (!pm.hasSystemFeature(PackageManager.FEATURE_NFC)) { - keys.add(NfcPreferenceController.KEY_TOGGLE_NFC); - keys.add(NfcPreferenceController.KEY_ANDROID_BEAM_SETTINGS); - } - keys.add(BluetoothMasterSwitchPreferenceController.KEY_TOGGLE_BLUETOOTH); - - return keys; - } - }; -} diff --git a/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java b/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java index b637e35a98a..1201b85f84f 100644 --- a/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java +++ b/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java @@ -40,8 +40,7 @@ public class ConnectedUsbDeviceUpdater { UsbConnectionBroadcastReceiver.UsbConnectionListener mUsbConnectionListener = (connected, newMode) -> { if (connected) { - mUsbPreference.setSummary( - UsbModePreferenceController.getSummary(mUsbBackend.getCurrentMode())); + mUsbPreference.setSummary(getSummary(mUsbBackend.getCurrentMode())); mDevicePreferenceCallback.onDeviceAdded(mUsbPreference); } else { mDevicePreferenceCallback.onDeviceRemoved(mUsbPreference); @@ -94,4 +93,31 @@ public class ConnectedUsbDeviceUpdater { //TODO(b/70336520): Use an API to get data instead of sticky intent mUsbReceiver.register(); } + + public static int getSummary(int mode) { + switch (mode) { + case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_NONE: + return R.string.usb_summary_charging_only; + case UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_NONE: + return R.string.usb_summary_power_only; + case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MTP: + return R.string.usb_summary_file_transfers; + case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_PTP: + return R.string.usb_summary_photo_transfers; + case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MIDI: + return R.string.usb_summary_MIDI; + case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_TETHER: + return R.string.usb_summary_tether; + case UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_MTP: + return R.string.usb_summary_file_transfers_power; + case UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_PTP: + return R.string.usb_summary_photo_transfers_power; + case UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_MIDI: + return R.string.usb_summary_MIDI_power; + case UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_TETHER: + return R.string.usb_summary_tether_power; + default: + return R.string.usb_summary_charging_only; + } + } } diff --git a/src/com/android/settings/connecteddevice/usb/UsbDetailsHeaderController.java b/src/com/android/settings/connecteddevice/usb/UsbDetailsHeaderController.java index 7ac02350fe7..6605be84040 100644 --- a/src/com/android/settings/connecteddevice/usb/UsbDetailsHeaderController.java +++ b/src/com/android/settings/connecteddevice/usb/UsbDetailsHeaderController.java @@ -53,7 +53,7 @@ public class UsbDetailsHeaderController extends UsbDetailsController { mHeaderController.setLabel(mContext.getString(R.string.usb_pref)); mHeaderController.setIcon(mContext.getDrawable(R.drawable.ic_usb)); mHeaderController.setSummary( - mContext.getString(UsbModePreferenceController.getSummary(newMode))); + mContext.getString(ConnectedUsbDeviceUpdater.getSummary(newMode))); mHeaderController.done(mFragment.getActivity(), true /* rebindActions */); } diff --git a/src/com/android/settings/connecteddevice/usb/UsbModeChooserActivity.java b/src/com/android/settings/connecteddevice/usb/UsbModeChooserActivity.java deleted file mode 100644 index b3b0718a1d3..00000000000 --- a/src/com/android/settings/connecteddevice/usb/UsbModeChooserActivity.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (C) 2015 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.settings.connecteddevice.usb; - -import android.annotation.Nullable; -import android.app.Activity; -import android.app.ActivityManager; -import android.app.AlertDialog; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.IntentFilter; -import android.graphics.drawable.Drawable; -import android.graphics.PorterDuff; -import android.hardware.usb.UsbManager; -import android.os.Bundle; -import android.os.UserHandle; -import android.os.UserManager; -import android.support.annotation.VisibleForTesting; -import android.view.LayoutInflater; -import android.view.View; -import android.view.View.OnClickListener; -import android.widget.Checkable; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.android.settings.R; -import com.android.settingslib.RestrictedLockUtils; - -import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; - -/** - * UI for the USB chooser dialog. - * - */ -public class UsbModeChooserActivity extends Activity { - - public static final int[] DEFAULT_MODES = { - UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_NONE, - UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_NONE, - UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MTP, - UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_PTP, - UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MIDI - }; - - private UsbBackend mBackend; - private AlertDialog mDialog; - private LayoutInflater mLayoutInflater; - private EnforcedAdmin mEnforcedAdmin; - - private BroadcastReceiver mDisconnectedReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (UsbManager.ACTION_USB_STATE.equals(action)) { - boolean connected = intent.getBooleanExtra(UsbManager.USB_CONNECTED, false); - boolean hostConnected = - intent.getBooleanExtra(UsbManager.USB_HOST_CONNECTED, false); - if (!connected && !hostConnected) { - mDialog.dismiss(); - } - } - } - }; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - - super.onCreate(savedInstanceState); - - mLayoutInflater = LayoutInflater.from(this); - - mDialog = new AlertDialog.Builder(this) - .setTitle(R.string.usb_use) - .setView(R.layout.usb_dialog_container) - .setOnDismissListener(new DialogInterface.OnDismissListener() { - @Override - public void onDismiss(DialogInterface dialog) { - finish(); - } - }) - .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - finish(); - } - }).create(); - mDialog.show(); - - LinearLayout container = (LinearLayout) mDialog.findViewById(R.id.container); - - mEnforcedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced(this, - UserManager.DISALLOW_USB_FILE_TRANSFER, UserHandle.myUserId()); - mBackend = new UsbBackend(this); - int current = mBackend.getCurrentMode(); - for (int i = 0; i < DEFAULT_MODES.length; i++) { - if (mBackend.isModeSupported(DEFAULT_MODES[i]) - && !mBackend.isModeDisallowedBySystem(DEFAULT_MODES[i])) { - inflateOption(DEFAULT_MODES[i], current == DEFAULT_MODES[i], container, - mBackend.isModeDisallowed(DEFAULT_MODES[i])); - } - } - } - - @Override - public void onStart() { - super.onStart(); - - IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_STATE); - registerReceiver(mDisconnectedReceiver, filter); - } - - @Override - protected void onStop() { - unregisterReceiver(mDisconnectedReceiver); - super.onStop(); - } - - private void inflateOption(final int mode, boolean selected, LinearLayout container, - final boolean disallowedByAdmin) { - View v = mLayoutInflater.inflate(R.layout.restricted_radio_with_summary, container, false); - - TextView titleView = (TextView) v.findViewById(android.R.id.title); - titleView.setText(getTitle(mode)); - TextView summaryView = (TextView) v.findViewById(android.R.id.summary); - updateSummary(summaryView, mode); - - if (disallowedByAdmin) { - if (mEnforcedAdmin != null) { - setDisabledByAdmin(v, titleView, summaryView); - } else { - return; - } - } - - v.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - if (disallowedByAdmin && mEnforcedAdmin != null) { - RestrictedLockUtils.sendShowAdminSupportDetailsIntent( - UsbModeChooserActivity.this, mEnforcedAdmin); - return; - } - if (!ActivityManager.isUserAMonkey()) { - mBackend.setMode(mode); - } - mDialog.dismiss(); - finish(); - } - }); - ((Checkable) v).setChecked(selected); - container.addView(v); - } - - private void setDisabledByAdmin(View rootView, TextView titleView, TextView summaryView) { - if (mEnforcedAdmin != null) { - titleView.setEnabled(false); - summaryView.setEnabled(false); - rootView.findViewById(R.id.restricted_icon).setVisibility(View.VISIBLE); - Drawable[] compoundDrawables = titleView.getCompoundDrawablesRelative(); - compoundDrawables[0 /* start */].mutate().setColorFilter( - getColor(R.color.disabled_text_color), PorterDuff.Mode.MULTIPLY); - } - } - - @VisibleForTesting - static void updateSummary(TextView summaryView, int mode) { - if (mode == (UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_NONE)) { - summaryView.setText(R.string.usb_use_power_only_desc); - } - } - - @VisibleForTesting - static int getTitle(int mode) { - switch (mode) { - case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_NONE: - return R.string.usb_use_charging_only; - case UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_NONE: - return R.string.usb_use_power_only; - case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MTP: - return R.string.usb_use_file_transfers; - case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_PTP: - return R.string.usb_use_photo_transfers; - case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MIDI: - return R.string.usb_use_MIDI; - } - return 0; - } -} diff --git a/src/com/android/settings/connecteddevice/usb/UsbModePreferenceController.java b/src/com/android/settings/connecteddevice/usb/UsbModePreferenceController.java deleted file mode 100644 index d7624f00823..00000000000 --- a/src/com/android/settings/connecteddevice/usb/UsbModePreferenceController.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2016 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.settings.connecteddevice.usb; - -import android.content.Context; -import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceScreen; - -import com.android.internal.annotations.VisibleForTesting; -import com.android.settings.R; -import com.android.settings.core.PreferenceControllerMixin; -import com.android.settingslib.core.AbstractPreferenceController; -import com.android.settingslib.core.lifecycle.Lifecycle; -import com.android.settingslib.core.lifecycle.LifecycleObserver; -import com.android.settingslib.core.lifecycle.events.OnPause; -import com.android.settingslib.core.lifecycle.events.OnResume; - -public class UsbModePreferenceController extends AbstractPreferenceController - implements PreferenceControllerMixin, LifecycleObserver, OnResume, OnPause { - - private static final String KEY_USB_MODE = "usb_mode"; - - private UsbBackend mUsbBackend; - @VisibleForTesting - UsbConnectionBroadcastReceiver mUsbReceiver; - private Preference mUsbPreference; - - public UsbModePreferenceController(Context context, UsbBackend usbBackend, - Lifecycle lifecycle) { - super(context); - mUsbBackend = usbBackend; - mUsbReceiver = new UsbConnectionBroadcastReceiver(mContext, (connected, newMode) -> { - updateSummary(mUsbPreference, connected, newMode); - }, mUsbBackend); - if (lifecycle != null) { - lifecycle.addObserver(this); - } - } - - @Override - public void displayPreference(PreferenceScreen screen) { - super.displayPreference(screen); - mUsbPreference = screen.findPreference(KEY_USB_MODE); - } - - @Override - public void updateState(Preference preference) { - updateSummary(preference, mUsbReceiver.isConnected(), mUsbBackend.getCurrentMode()); - } - - @Override - public boolean isAvailable() { - return true; - } - - @Override - public String getPreferenceKey() { - return KEY_USB_MODE; - } - - @Override - public void onPause() { - mUsbReceiver.unregister(); - } - - @Override - public void onResume() { - mUsbReceiver.register(); - } - - public static int getSummary(int mode) { - switch (mode) { - case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_NONE: - return R.string.usb_summary_charging_only; - case UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_NONE: - return R.string.usb_summary_power_only; - case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MTP: - return R.string.usb_summary_file_transfers; - case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_PTP: - return R.string.usb_summary_photo_transfers; - case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_MIDI: - return R.string.usb_summary_MIDI; - case UsbBackend.MODE_POWER_SINK | UsbBackend.MODE_DATA_TETHER: - return R.string.usb_summary_tether; - case UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_MTP: - return R.string.usb_summary_file_transfers_power; - case UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_PTP: - return R.string.usb_summary_photo_transfers_power; - case UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_MIDI: - return R.string.usb_summary_MIDI_power; - case UsbBackend.MODE_POWER_SOURCE | UsbBackend.MODE_DATA_TETHER: - return R.string.usb_summary_tether_power; - default: - return R.string.usb_summary_charging_only; - } - } - - private void updateSummary(Preference preference, boolean connected, int mode) { - if (preference != null) { - if (connected) { - preference.setEnabled(true); - preference.setSummary(getSummary(mode)); - } else { - preference.setSummary(R.string.disconnected); - preference.setEnabled(false); - } - } - } -} diff --git a/src/com/android/settings/core/FeatureFlags.java b/src/com/android/settings/core/FeatureFlags.java index fd756dfd40e..a5edf3c7a52 100644 --- a/src/com/android/settings/core/FeatureFlags.java +++ b/src/com/android/settings/core/FeatureFlags.java @@ -20,7 +20,6 @@ package com.android.settings.core; * This class keeps track of all feature flags in Settings. */ public class FeatureFlags { - public static final String CONNECTED_DEVICE_V2 = "settings_connected_device_v2"; public static final String BATTERY_SETTINGS_V2 = "settings_battery_v2"; public static final String BATTERY_DISPLAY_APP_LIST = "settings_battery_display_app_list"; public static final String ZONE_PICKER_V2 = "settings_zone_picker_v2"; diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java index c75b0c60cde..468bd3d31df 100644 --- a/src/com/android/settings/core/gateway/SettingsGateway.java +++ b/src/com/android/settings/core/gateway/SettingsGateway.java @@ -55,9 +55,7 @@ import com.android.settings.applications.assist.ManageAssist; import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment; import com.android.settings.bluetooth.BluetoothSettings; -import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment; import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment; -import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragmentOld; import com.android.settings.connecteddevice.usb.UsbDetailsFragment; import com.android.settings.datausage.DataUsageList; import com.android.settings.datausage.DataUsageSummary; @@ -242,7 +240,6 @@ public class SettingsGateway { SystemDashboardFragment.class.getName(), NetworkDashboardFragment.class.getName(), ConnectedDeviceDashboardFragment.class.getName(), - ConnectedDeviceDashboardFragmentOld.class.getName(), UsbDetailsFragment.class.getName(), AppAndNotificationDashboardFragment.class.getName(), AccountDashboardFragment.class.getName(), @@ -252,7 +249,6 @@ public class SettingsGateway { BluetoothDeviceDetailsFragment.class.getName(), DataUsageList.class.getName(), DirectoryAccessDetails.class.getName(), - AdvancedConnectedDeviceDashboardFragment.class.getName() }; public static final String[] SETTINGS_FOR_RESTRICTED = { diff --git a/src/com/android/settings/development/SelectUsbConfigPreferenceController.java b/src/com/android/settings/development/SelectUsbConfigPreferenceController.java deleted file mode 100644 index 5f9fcca697b..00000000000 --- a/src/com/android/settings/development/SelectUsbConfigPreferenceController.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.development; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.PackageManager; -import android.hardware.usb.UsbManager; -import android.os.Bundle; -import android.support.annotation.VisibleForTesting; -import android.support.v7.preference.ListPreference; -import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceScreen; - -import com.android.settings.R; -import com.android.settings.Utils; -import com.android.settings.wrapper.UsbManagerWrapper; -import com.android.settings.core.PreferenceControllerMixin; -import com.android.settingslib.core.lifecycle.Lifecycle; -import com.android.settingslib.core.lifecycle.LifecycleObserver; -import com.android.settingslib.core.lifecycle.events.OnCreate; -import com.android.settingslib.core.lifecycle.events.OnDestroy; -import com.android.settingslib.development.DeveloperOptionsPreferenceController; - -public class SelectUsbConfigPreferenceController extends - DeveloperOptionsPreferenceController implements - Preference.OnPreferenceChangeListener, LifecycleObserver, OnCreate, OnDestroy, - PreferenceControllerMixin { - - private static final String USB_CONFIGURATION_KEY = "select_usb_configuration"; - - private final String[] mListValues; - private final String[] mListSummaries; - private final UsbManager mUsbManager; - @VisibleForTesting - UsbManagerWrapper mUsbManagerWrapper; - private BroadcastReceiver mUsbReceiver; - private ListPreference mPreference; - - public SelectUsbConfigPreferenceController(Context context, Lifecycle lifecycle) { - super(context); - - mListValues = context.getResources().getStringArray(R.array.usb_configuration_values); - mListSummaries = context.getResources().getStringArray(R.array.usb_configuration_titles); - mUsbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE); - mUsbManagerWrapper = new UsbManagerWrapper(mUsbManager); - mUsbReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (mPreference != null) { - updateUsbConfigurationValues(); - } - } - }; - if (lifecycle != null) { - lifecycle.addObserver(this); - } - } - - @Override - public void onCreate(Bundle savedInstanceState) { - IntentFilter filter = new IntentFilter(); - filter.addAction(UsbManager.ACTION_USB_STATE); - mContext.registerReceiver(mUsbReceiver, filter); - } - - @Override - public String getPreferenceKey() { - return USB_CONFIGURATION_KEY; - } - - @Override - public void displayPreference(PreferenceScreen screen) { - super.displayPreference(screen); - - mPreference = (ListPreference) screen.findPreference(getPreferenceKey()); - } - - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - if (Utils.isMonkeyRunning()) { - return false; - } - - writeUsbConfigurationOption(mUsbManagerWrapper - .usbFunctionsFromString(newValue.toString())); - updateUsbConfigurationValues(); - return true; - } - - @Override - public void updateState(Preference preference) { - updateUsbConfigurationValues(); - } - - @Override - public void onDestroy() { - mContext.unregisterReceiver(mUsbReceiver); - } - - @Override - public boolean isAvailable() { - final PackageManager packageManager = mContext.getPackageManager(); - - return packageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST) - || packageManager.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY); - } - - @Override - protected void onDeveloperOptionsSwitchEnabled() { - mPreference.setEnabled(true); - } - - @Override - protected void onDeveloperOptionsSwitchDisabled() { - mPreference.setEnabled(false); - } - - @VisibleForTesting - void setCurrentFunctions(long functions) { - mUsbManager.setCurrentFunctions(functions); - } - - private void updateUsbConfigurationValues() { - long functions = mUsbManagerWrapper.getCurrentFunctions(); - int index = 0; - for (int i = 0; i < mListValues.length; i++) { - if (functions == mUsbManagerWrapper.usbFunctionsFromString(mListValues[i])) { - index = i; - break; - } - } - mPreference.setValue(mListValues[index]); - mPreference.setSummary(mListSummaries[index]); - } - - private void writeUsbConfigurationOption(long newValue) { - setCurrentFunctions(newValue); - } -} diff --git a/src/com/android/settings/search/SearchIndexableResourcesImpl.java b/src/com/android/settings/search/SearchIndexableResourcesImpl.java index 55235a48595..f8da560eb4d 100644 --- a/src/com/android/settings/search/SearchIndexableResourcesImpl.java +++ b/src/com/android/settings/search/SearchIndexableResourcesImpl.java @@ -21,7 +21,7 @@ import android.support.annotation.VisibleForTesting; import com.android.settings.DateTimeSettings; import com.android.settings.DisplaySettings; import com.android.settings.LegalSettings; -import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragmentOld; +import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment; import com.android.settings.datausage.DataUsageSummaryLegacy; import com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment; import com.android.settings.accessibility.AccessibilitySettings; @@ -36,7 +36,6 @@ import com.android.settings.applications.assist.ManageAssist; import com.android.settings.backup.BackupSettingsActivity; import com.android.settings.backup.BackupSettingsFragment; import com.android.settings.bluetooth.BluetoothSettings; -import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment; import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment; import com.android.settings.connecteddevice.usb.UsbDetailsFragment; import com.android.settings.datausage.DataUsageSummary; @@ -45,7 +44,6 @@ import com.android.settings.development.DevelopmentSettingsDashboardFragment; import com.android.settings.deviceinfo.DeviceInfoSettings; import com.android.settings.deviceinfo.StorageDashboardFragment; import com.android.settings.deviceinfo.StorageSettings; -import com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment; import com.android.settings.display.AmbientDisplaySettings; import com.android.settings.display.NightDisplaySettings; import com.android.settings.display.ScreenZoomSettings; @@ -157,7 +155,6 @@ public class SearchIndexableResourcesImpl implements SearchIndexableResources { addIndex(ResetDashboardFragment.class); addIndex(StorageDashboardFragment.class); addIndex(ConnectedDeviceDashboardFragment.class); - addIndex(ConnectedDeviceDashboardFragmentOld.class); addIndex(AdvancedConnectedDeviceDashboardFragment.class); addIndex(EnterprisePrivacySettings.class); addIndex(PaymentSettings.class); diff --git a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbModeChooserActivityTest.java b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbModeChooserActivityTest.java deleted file mode 100644 index c02212b8911..00000000000 --- a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbModeChooserActivityTest.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.connecteddevice.usb; - -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; - -import android.widget.TextView; -import com.android.settings.R; -import com.android.settings.connecteddevice.usb.UsbModeChooserActivity; -import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.TestConfig; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; - -@RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) -public class UsbModeChooserActivityTest { - - @Mock - private TextView mTextView; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - } - - @Test - public void updateSummary_chargeDevice_shouldNotSetSummary() { - UsbModeChooserActivity.updateSummary(mTextView, UsbModeChooserActivity.DEFAULT_MODES[0]); - verify(mTextView, never()).setText(anyInt()); - } - - @Test - public void updateSummary_supplyPower_shouldSetSummary() { - UsbModeChooserActivity.updateSummary(mTextView, UsbModeChooserActivity.DEFAULT_MODES[1]); - verify(mTextView).setText(R.string.usb_use_power_only_desc); - } - - @Test - public void updateSummary_transferFiles_shouldNotSetSummary() { - UsbModeChooserActivity.updateSummary(mTextView, UsbModeChooserActivity.DEFAULT_MODES[2]); - verify(mTextView, never()).setText(anyInt()); - } - - @Test - public void updateSummary_transferPhoto_shouldNotSetSummary() { - UsbModeChooserActivity.updateSummary(mTextView, UsbModeChooserActivity.DEFAULT_MODES[3]); - verify(mTextView, never()).setText(anyInt()); - } - - @Test - public void updateSummary_MIDI_shouldNotSetSummary() { - UsbModeChooserActivity.updateSummary(mTextView, UsbModeChooserActivity.DEFAULT_MODES[4]); - verify(mTextView, never()).setText(anyInt()); - } - - @Test - public void getTitle_shouldReturnCorrectTitle() { - assertThat(UsbModeChooserActivity.getTitle(UsbModeChooserActivity.DEFAULT_MODES[0])) - .isEqualTo(R.string.usb_use_charging_only); - - assertThat(UsbModeChooserActivity.getTitle(UsbModeChooserActivity.DEFAULT_MODES[1])) - .isEqualTo(R.string.usb_use_power_only); - - assertThat(UsbModeChooserActivity.getTitle(UsbModeChooserActivity.DEFAULT_MODES[2])) - .isEqualTo(R.string.usb_use_file_transfers); - - assertThat(UsbModeChooserActivity.getTitle(UsbModeChooserActivity.DEFAULT_MODES[3])) - .isEqualTo(R.string.usb_use_photo_transfers); - - assertThat(UsbModeChooserActivity.getTitle(UsbModeChooserActivity.DEFAULT_MODES[4])) - .isEqualTo(R.string.usb_use_MIDI); - } - -} \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbModePreferenceControllerTest.java deleted file mode 100644 index a1c599ffdf7..00000000000 --- a/tests/robotests/src/com/android/settings/connecteddevice/usb/UsbModePreferenceControllerTest.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.android.settings.connecteddevice.usb; - -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Answers.RETURNS_DEEP_STUBS; -import static org.mockito.Mockito.when; - -import android.content.Context; -import android.support.v7.preference.Preference; - -import com.android.settings.R; -import com.android.settings.TestConfig; -import com.android.settings.testutils.SettingsRobolectricTestRunner; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.Config; -import org.robolectric.shadows.ShadowApplication; - -@RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) -public class UsbModePreferenceControllerTest { - - @Mock(answer = RETURNS_DEEP_STUBS) - private UsbBackend mUsbBackend; - @Mock - private UsbConnectionBroadcastReceiver mUsbConnectionBroadcastReceiver; - - private Context mContext; - private UsbModePreferenceController mController; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mContext = ShadowApplication.getInstance().getApplicationContext(); - mController = new UsbModePreferenceController(mContext, mUsbBackend, null /* lifecycle */); - mController.mUsbReceiver = mUsbConnectionBroadcastReceiver; - } - - @Test - public void testGetSummary_chargeDevice() { - assertThat(mController.getSummary(0)) - .isEqualTo(R.string.usb_summary_charging_only); - } - - @Test - public void testGetSummary_supplyPower() { - assertThat(mController.getSummary(UsbBackend.MODE_POWER_SOURCE)) - .isEqualTo(R.string.usb_summary_power_only); - } - - @Test - public void testGetSummary_TransferFiles() { - assertThat(mController.getSummary(UsbBackend.MODE_DATA_MTP)) - .isEqualTo(R.string.usb_summary_file_transfers); - } - - @Test - public void testGetSummary_TransferPhoto() { - assertThat(mController.getSummary(UsbBackend.MODE_DATA_PTP)) - .isEqualTo(R.string.usb_summary_photo_transfers); - } - - @Test - public void testGetSummary_MIDI() { - assertThat(mController.getSummary(UsbBackend.MODE_DATA_MIDI)) - .isEqualTo(R.string.usb_summary_MIDI); - } - - @Test - public void testGetSummary_Tethering() { - assertThat(mController.getSummary(UsbBackend.MODE_DATA_TETHER)) - .isEqualTo(R.string.usb_summary_tether); - } - - @Test - public void testPreferenceSummary_usbDisconnected() { - final Preference preference = new Preference(mContext); - preference.setKey("usb_mode"); - preference.setEnabled(true); - when(mUsbBackend.getCurrentMode()).thenReturn(UsbBackend.MODE_POWER_SINK); - when(mUsbConnectionBroadcastReceiver.isConnected()).thenReturn(false); - mController.updateState(preference); - - assertThat(preference.getKey()).isEqualTo("usb_mode"); - assertThat(preference.getSummary()).isEqualTo( - mContext.getString(R.string.disconnected)); - } - - @Test - public void testUsbBroadcastReceiver_usbConnected_shouldUpdateSummary() { - final Preference preference = new Preference(mContext); - preference.setKey("usb_mode"); - preference.setEnabled(true); - when(mUsbBackend.getCurrentMode()).thenReturn(UsbBackend.MODE_POWER_SINK); - when(mUsbConnectionBroadcastReceiver.isConnected()).thenReturn(true); - mController.updateState(preference); - - assertThat(preference.getSummary()).isEqualTo( - mContext.getString(R.string.usb_summary_charging_only)); - } - -} \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/development/SelectUsbConfigPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/SelectUsbConfigPreferenceControllerTest.java deleted file mode 100644 index c0200c3bed3..00000000000 --- a/tests/robotests/src/com/android/settings/development/SelectUsbConfigPreferenceControllerTest.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright (C) 2017 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.settings.development; - -import static android.arch.lifecycle.Lifecycle.Event.ON_CREATE; -import static android.arch.lifecycle.Lifecycle.Event.ON_DESTROY; -import static com.google.common.truth.Truth.assertThat; - -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyBoolean; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.arch.lifecycle.LifecycleOwner; -import android.content.Context; -import android.content.pm.PackageManager; -import android.hardware.usb.UsbManager; -import android.hardware.usb.UsbManagerExtras; -import android.support.v7.preference.ListPreference; -import android.support.v7.preference.PreferenceScreen; - -import com.android.settings.R; -import com.android.settings.TestConfig; -import com.android.settings.wrapper.UsbManagerWrapper; -import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.testutils.shadow.ShadowUtils; -import com.android.settingslib.core.lifecycle.Lifecycle; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; - -@RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, - sdk = TestConfig.SDK_VERSION, - shadows = {ShadowUtils.class}) -public class SelectUsbConfigPreferenceControllerTest { - - @Mock - private ListPreference mPreference; - @Mock - private PreferenceScreen mScreen; - @Mock - private UsbManager mUsbManager; - @Mock - private PackageManager mPackageManager; - @Mock - private UsbManagerWrapper mUsbManagerWrapper; - - private Context mContext; - private LifecycleOwner mLifecycleOwner; - private Lifecycle mLifecycle; - private SelectUsbConfigPreferenceController mController; - - /** - * Array Values Key - * - * 0: Charging - * 1: MTP - * 2: PTP - * 3: RNDIS - * 4: Audio Source - * 5: MIDI - */ - private String[] mValues; - private String[] mSummaries; - - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - mLifecycleOwner = () -> mLifecycle; - mLifecycle = new Lifecycle(mLifecycleOwner); - mContext = spy(RuntimeEnvironment.application); - doReturn(mUsbManager).when(mContext).getSystemService(Context.USB_SERVICE); - doReturn(mPackageManager).when(mContext).getPackageManager(); - mValues = mContext.getResources().getStringArray(R.array.usb_configuration_values); - mSummaries = mContext.getResources().getStringArray(R.array.usb_configuration_titles); - mController = spy(new SelectUsbConfigPreferenceController(mContext, mLifecycle)); - when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); - mController.displayPreference(mScreen); - mController.mUsbManagerWrapper = mUsbManagerWrapper; - - when(mUsbManagerWrapper.usbFunctionsFromString("mtp")).thenReturn(UsbManagerExtras.MTP); - when(mUsbManagerWrapper.usbFunctionsFromString("rndis")) - .thenReturn(UsbManagerExtras.RNDIS); - when(mUsbManagerWrapper.usbFunctionsFromString("none")) - .thenReturn(UsbManagerExtras.NONE); - - } - - @After - public void teardown() { - ShadowUtils.reset(); - } - - @Test - public void onPreferenceChange_setCharging_shouldEnableCharging() { - when(mUsbManagerWrapper.getCurrentFunctions()).thenReturn( - UsbManagerExtras.usbFunctionsFromString(mValues[0])); - doNothing().when(mController).setCurrentFunctions(anyLong()); - mController.onPreferenceChange(mPreference, mValues[0]); - - verify(mController).setCurrentFunctions( - UsbManagerExtras.usbFunctionsFromString(mValues[0])); - } - - @Test - public void onUsbAccessoryAndHostDisabled_shouldNotBeAvailable() { - when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)).thenReturn(false); - when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY)).thenReturn( - false); - assertFalse(mController.isAvailable()); - } - - @Test - public void onUsbHostEnabled_shouldBeAvailable() { - when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)).thenReturn(true); - when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY)).thenReturn( - false); - assertTrue(mController.isAvailable()); - } - - @Test - public void onUsbAccessoryEnabled_shouldBeAvailable() { - when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)).thenReturn(false); - when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY)).thenReturn( - true); - assertTrue(mController.isAvailable()); - } - - @Test - public void onPreferenceChange_setMtp_shouldEnableMtp() { - when(mUsbManagerWrapper.getCurrentFunctions()) - .thenReturn(UsbManagerExtras.usbFunctionsFromString(mValues[1])); - doNothing().when(mController).setCurrentFunctions(anyLong()); - mController.onPreferenceChange(mPreference, mValues[1]); - - verify(mController).setCurrentFunctions( - UsbManagerExtras.usbFunctionsFromString(mValues[1])); - } - - @Test - public void onPreferenceChange_monkeyUser_shouldReturnFalse() { - when(mUsbManagerWrapper.getCurrentFunctions()) - .thenReturn(UsbManagerExtras.usbFunctionsFromString(mValues[1])); - ShadowUtils.setIsUserAMonkey(true); - doNothing().when(mController).setCurrentFunctions(anyLong()); - - final boolean isHandled = mController.onPreferenceChange(mPreference, mValues[1]); - - assertThat(isHandled).isFalse(); - verify(mController, never()).setCurrentFunctions(anyLong()); - } - - @Test - public void updateState_chargingEnabled_shouldSetPreferenceToCharging() { - when(mUsbManagerWrapper.getCurrentFunctions()) - .thenReturn(UsbManagerExtras.usbFunctionsFromString(mValues[0])); - - mController.updateState(mPreference); - - verify(mPreference).setValue(mValues[0]); - verify(mPreference).setSummary(mSummaries[0]); - } - - @Test - public void updateState_RndisEnabled_shouldEnableRndis() { - when(mUsbManagerWrapper.getCurrentFunctions()) - .thenReturn(UsbManagerExtras.usbFunctionsFromString(mValues[3])); - - mController.updateState(mPreference); - - verify(mPreference).setValue(mValues[3]); - verify(mPreference).setSummary(mSummaries[3]); - } - - @Test - public void updateState_noValueSet_shouldEnableChargingAsDefault() { - when(mUsbManagerWrapper.getCurrentFunctions()).thenReturn(UsbManagerExtras.NONE); - mController.updateState(mPreference); - - verify(mPreference).setValue(mValues[0]); - verify(mPreference).setSummary(mSummaries[0]); - } - - @Test - public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() { - mController.onDeveloperOptionsSwitchDisabled(); - - verify(mPreference).setEnabled(false); - } - - @Test - public void onDeveloperOptionsSwitchEnabled_shouldEnablePreference() { - mController.onDeveloperOptionsSwitchEnabled(); - - verify(mPreference).setEnabled(true); - } - - @Test - public void onCreate_shouldRegisterReceiver() { - mLifecycle.onCreate(null /* bundle */); - mLifecycle.handleLifecycleEvent(ON_CREATE); - - verify(mContext).registerReceiver(any(), any()); - } - - @Test - public void onDestroy_shouldUnregisterReceiver() { - doNothing().when(mContext).unregisterReceiver(any()); - mLifecycle.handleLifecycleEvent(ON_CREATE); - mLifecycle.handleLifecycleEvent(ON_DESTROY); - - verify(mContext).unregisterReceiver(any()); - } -} From 80c806abd60f8d8381f6654fd2f708f5d915f0bf Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Tue, 27 Feb 2018 20:12:57 +0000 Subject: [PATCH 08/12] Revert "Update to match now slice APIs" This reverts commit 2d96005aba3a509fc801f9a05d61786d8ad78218. Reason for revert: prebuilt revert Bug: 73903252 Bug: 73876473 Bug: 73875529 Bug: 73866916 Change-Id: I5d47a7c5ddebc16c1c508f5bb48ace809cbaf273 --- src/com/android/settings/slices/SettingsSliceProvider.java | 6 ++---- src/com/android/settings/slices/SliceBuilderUtils.java | 5 ++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/com/android/settings/slices/SettingsSliceProvider.java b/src/com/android/settings/slices/SettingsSliceProvider.java index d8ba991a145..433bdf368bd 100644 --- a/src/com/android/settings/slices/SettingsSliceProvider.java +++ b/src/com/android/settings/slices/SettingsSliceProvider.java @@ -35,7 +35,6 @@ import java.util.WeakHashMap; import androidx.app.slice.Slice; import androidx.app.slice.SliceProvider; -import androidx.app.slice.builders.SliceAction; import androidx.app.slice.builders.ListBuilder; /** @@ -174,9 +173,8 @@ public class SettingsSliceProvider extends SliceProvider { .setTitle(getContext().getString(R.string.wifi_settings)) .setTitleItem(Icon.createWithResource(getContext(), R.drawable.wifi_signal)) .setSubtitle(state) - .addEndItem(new SliceAction(getBroadcastIntent(ACTION_WIFI_CHANGED), - null, finalWifiEnabled)) - .setPrimaryAction(new SliceAction(getIntent(Intent.ACTION_MAIN), null, null))) + .addToggle(getBroadcastIntent(ACTION_WIFI_CHANGED), finalWifiEnabled) + .setContentIntent(getIntent(Intent.ACTION_MAIN))) .build(); } diff --git a/src/com/android/settings/slices/SliceBuilderUtils.java b/src/com/android/settings/slices/SliceBuilderUtils.java index 3df24edbeb1..a01ea1bd0ed 100644 --- a/src/com/android/settings/slices/SliceBuilderUtils.java +++ b/src/com/android/settings/slices/SliceBuilderUtils.java @@ -34,7 +34,6 @@ import com.android.settings.search.DatabaseIndexingUtils; import com.android.settingslib.core.AbstractPreferenceController; import androidx.app.slice.Slice; -import androidx.app.slice.builders.SliceAction; import androidx.app.slice.builders.ListBuilder; import androidx.app.slice.builders.ListBuilder.RowBuilder; @@ -64,7 +63,7 @@ public class SliceBuilderUtils { .setTitle(sliceData.getTitle()) .setTitleItem(icon) .setSubtitle(subtitleText) - .setPrimaryAction(new SliceAction(contentIntent, null, null)); + .setContentIntent(contentIntent); // TODO (b/71640747) Respect setting availability. @@ -101,7 +100,7 @@ public class SliceBuilderUtils { String key) { PendingIntent actionIntent = getActionIntent(context, SettingsSliceProvider.ACTION_TOGGLE_CHANGED, key); - builder.addEndItem(new SliceAction(actionIntent, null, isChecked)); + builder.addToggle(actionIntent, isChecked); } private static PendingIntent getActionIntent(Context context, String action, String key) { From 192f75c3b22524134414c19df922e4854c237e31 Mon Sep 17 00:00:00 2001 From: fionaxu Date: Tue, 27 Feb 2018 15:14:57 -0800 Subject: [PATCH 09/12] rename emergency tone settings Bug: 67470733 Test: Manual Change-Id: I67e223c2db662f518fa306221190d4646668c4d3 --- res/values/strings.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 0b50241f87c..f037eb17715 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -5240,7 +5240,7 @@ The variable will be replaced with a number. --> Apps with usage access - Emergency tone + Emergency dialing signal Set behavior when an emergency call is placed @@ -6692,14 +6692,14 @@ The variable will be replaced with a number. --> Media audio only - - Silent + + Silence - - Alert + + Tones - - Vibrate + + Vibrations Power on sounds From f609cad6f020f22cf64d2df369e7cc90b290d634 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Tue, 27 Feb 2018 16:05:02 -0800 Subject: [PATCH 10/12] Fix search non-indexable update - When creating preference conotrollers, if one fail, skip that one instead of giving up entire operation. - Fix BatterySaverController by providing a existing looper. Change-Id: Iefe443b7fa91e51515c5c247fab4d9588867baef Fixes: 73903739 Test: robotest --- .../core/PreferenceControllerListHelper.java | 10 ++++-- .../fuelgauge/BatterySaverController.java | 4 ++- .../settings/fuelgauge/PowerUsageSummary.java | 9 ------ .../search/BaseSearchIndexProvider.java | 6 ++-- .../res/xml-mcc998/location_settings.xml | 31 ++++++++++++++++++ .../core/BadPreferenceController.java | 32 +++++++++++++++++++ .../PreferenceControllerListHelperTest.java | 11 +++++++ 7 files changed, 89 insertions(+), 14 deletions(-) create mode 100644 tests/robotests/res/xml-mcc998/location_settings.xml create mode 100644 tests/robotests/src/com/android/settings/core/BadPreferenceController.java diff --git a/src/com/android/settings/core/PreferenceControllerListHelper.java b/src/com/android/settings/core/PreferenceControllerListHelper.java index 220bd88149d..d955301d175 100644 --- a/src/com/android/settings/core/PreferenceControllerListHelper.java +++ b/src/com/android/settings/core/PreferenceControllerListHelper.java @@ -67,14 +67,20 @@ public class PreferenceControllerListHelper { try { controller = BasePreferenceController.createInstance(context, controllerName); } catch (IllegalStateException e) { + Log.d(TAG, "Could not find Context-only controller for pref: " + controllerName); final String key = metadata.getString(METADATA_KEY); if (TextUtils.isEmpty(key)) { Log.w(TAG, "Controller requires key but it's not defined in xml: " + controllerName); continue; } - Log.d(TAG, "Could not find Context-only controller for pref: " + key); - controller = BasePreferenceController.createInstance(context, controllerName, key); + try { + controller = BasePreferenceController.createInstance(context, controllerName, + key); + } catch (IllegalStateException e2) { + Log.w(TAG, "Cannot instantiate controller from reflection: " + controllerName); + continue; + } } controllers.add(controller); } diff --git a/src/com/android/settings/fuelgauge/BatterySaverController.java b/src/com/android/settings/fuelgauge/BatterySaverController.java index 58b7d13289a..83efefd84f9 100644 --- a/src/com/android/settings/fuelgauge/BatterySaverController.java +++ b/src/com/android/settings/fuelgauge/BatterySaverController.java @@ -18,6 +18,7 @@ package com.android.settings.fuelgauge; import android.content.Context; import android.database.ContentObserver; import android.os.Handler; +import android.os.Looper; import android.os.PowerManager; import android.provider.Settings; import android.support.annotation.VisibleForTesting; @@ -119,7 +120,8 @@ public class BatterySaverController extends TogglePreferenceController mBatterySaverPref.setSummary(getSummary()); } - private final ContentObserver mObserver = new ContentObserver(new Handler()) { + private final ContentObserver mObserver = new ContentObserver( + new Handler(Looper.getMainLooper())) { @Override public void onChange(boolean selfChange) { updateSummary(); diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index e6fd4492c45..5520141c55d 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -25,7 +25,6 @@ import android.os.BatteryStats; import android.os.Bundle; import android.provider.SearchIndexableResource; import android.support.annotation.VisibleForTesting; -import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceGroup; import android.text.format.Formatter; import android.util.SparseArray; @@ -33,17 +32,14 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; -import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.widget.TextView; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; -import com.android.settings.Settings.HighPowerApplicationsActivity; import com.android.settings.SettingsActivity; import com.android.settings.Utils; import com.android.settings.applications.LayoutPreference; -import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.dashboard.SummaryLoader; import com.android.settings.display.BatteryPercentagePreferenceController; import com.android.settings.fuelgauge.anomaly.Anomaly; @@ -56,7 +52,6 @@ import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.lifecycle.Lifecycle; - import com.android.settingslib.utils.PowerUtil; import com.android.settingslib.utils.StringUtil; @@ -242,11 +237,7 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList KEY_BATTERY_TIP, (SettingsActivity) getActivity(), this /* fragment */, this /* BatteryTipListener */); controllers.add(mBatteryTipPreferenceController); - BatterySaverController batterySaverController = new BatterySaverController(context); - controllers.add(batterySaverController); controllers.add(new BatteryPercentagePreferenceController(context)); - - lifecycle.addObserver(batterySaverController); return controllers; } diff --git a/src/com/android/settings/search/BaseSearchIndexProvider.java b/src/com/android/settings/search/BaseSearchIndexProvider.java index d7577b5fc37..828c7eb9ce0 100644 --- a/src/com/android/settings/search/BaseSearchIndexProvider.java +++ b/src/com/android/settings/search/BaseSearchIndexProvider.java @@ -78,8 +78,10 @@ public class BaseSearchIndexProvider implements Indexable.SearchIndexProvider { ((BasePreferenceController) controller).updateNonIndexableKeys( nonIndexableKeys); } else { - throw new IllegalStateException(controller.getClass().getName() - + " must implement " + PreferenceControllerMixin.class.getName()); + Log.e(TAG, controller.getClass().getName() + + " must implement " + PreferenceControllerMixin.class.getName() + + " treating the key non-indexable"); + nonIndexableKeys.add(controller.getPreferenceKey()); } } return nonIndexableKeys; diff --git a/tests/robotests/res/xml-mcc998/location_settings.xml b/tests/robotests/res/xml-mcc998/location_settings.xml new file mode 100644 index 00000000000..993af8676d9 --- /dev/null +++ b/tests/robotests/res/xml-mcc998/location_settings.xml @@ -0,0 +1,31 @@ + + + + + + + + \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/core/BadPreferenceController.java b/tests/robotests/src/com/android/settings/core/BadPreferenceController.java new file mode 100644 index 00000000000..e6367233499 --- /dev/null +++ b/tests/robotests/src/com/android/settings/core/BadPreferenceController.java @@ -0,0 +1,32 @@ +/* + * 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.settings.core; + +import android.content.Context; + +public class BadPreferenceController extends BasePreferenceController { + + public BadPreferenceController(Context context, String preferenceKey) { + super(context, preferenceKey); + throw new IllegalArgumentException("error"); + } + + @Override + public int getAvailabilityStatus() { + return AVAILABLE; + } +} diff --git a/tests/robotests/src/com/android/settings/core/PreferenceControllerListHelperTest.java b/tests/robotests/src/com/android/settings/core/PreferenceControllerListHelperTest.java index c0bc3ef295e..4361f78f214 100644 --- a/tests/robotests/src/com/android/settings/core/PreferenceControllerListHelperTest.java +++ b/tests/robotests/src/com/android/settings/core/PreferenceControllerListHelperTest.java @@ -59,6 +59,17 @@ public class PreferenceControllerListHelperTest { } } + @Test + @Config(qualifiers = "mcc998") + public void getControllers_partialFailure_shouldReturnTheRest() { + final List controllers = + PreferenceControllerListHelper.getPreferenceControllersFromXml(mContext, + R.xml.location_settings); + + assertThat(controllers).hasSize(1); + assertThat(controllers.get(0)).isInstanceOf(FakePreferenceController.class); + } + @Test public void filterControllers_noFilter_shouldReturnSameList() { final List controllers = new ArrayList<>(); From d70c4a00361b87ad001d9322bc0a49b199c046df Mon Sep 17 00:00:00 2001 From: Andreas Gampe Date: Mon, 26 Feb 2018 11:28:21 -0800 Subject: [PATCH 11/12] Settings: Fix assertThat in tests Truth.assertThat is a fluent-style API. Fix the tests to actually do something. Found by errorprone. (cherry picked from commit 22bad556a1863bff80c4ec517ada315f7b01890e) Bug: 73513670 Test: m RunSettingsRoboTests Test: m javac-check RUN_ERROR_PRONE=true Exempt-From-Owner-Approval: Cherrypick Merged-In: Ib923de28ce5dcf79b9dec718306877e31e58e024 Change-Id: Ib923de28ce5dcf79b9dec718306877e31e58e024 --- .../com/android/settings/fuelgauge/PowerUsageSummaryTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java index 48a48b1abce..4cda7fe5bdf 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java @@ -495,8 +495,8 @@ public class PowerUsageSummaryTest { TextView summary1 = mFragment.mBatteryLayoutPref.findViewById(R.id.summary1); TextView summary2 = mFragment.mBatteryLayoutPref.findViewById(R.id.summary2); Robolectric.flushBackgroundThreadScheduler(); - assertThat(summary2.getText().toString().contains(NEW_ML_EST_SUFFIX)); - assertThat(summary1.getText().toString().contains(OLD_EST_SUFFIX)); + assertThat(summary2.getText().toString()).contains(NEW_ML_EST_SUFFIX); + assertThat(summary1.getText().toString()).contains(OLD_EST_SUFFIX); } @Test From 20146916e2833a5cfa69bd94473a8df65e3f9446 Mon Sep 17 00:00:00 2001 From: Andreas Gampe Date: Mon, 26 Feb 2018 12:22:29 -0800 Subject: [PATCH 12/12] Settings: Disable failing tests. Temporarily disable. (cherry picked from commit b506fb9b1918fe4b2144339567862ff03b3942cc) Bug: 73892008 Test: m RunSettingsRoboTests Exempt-From-Owner-Approval: Cherrypick Merged-In: I06df032d4a4de84c2f9f46e5086d97f688b0c989 Change-Id: I06df032d4a4de84c2f9f46e5086d97f688b0c989 --- .../com/android/settings/fuelgauge/PowerUsageSummaryTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java index 4cda7fe5bdf..8b1da1bb41c 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java @@ -67,6 +67,7 @@ import com.android.settings.testutils.shadow.SettingsShadowResources; import com.android.settingslib.core.AbstractPreferenceController; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Answers; @@ -487,6 +488,7 @@ public class PowerUsageSummaryTest { any()); } + @Ignore("b/73892008") @Test public void testShowBothEstimates_summariesAreBothModified() { doReturn(new TextView(mRealContext)).when(mBatteryLayoutPref).findViewById(R.id.summary2);