Snap for 4869171 from 6acf0510fb to qt-release

Change-Id: I6e9e4fdaccd5e2dee8365056b5e4ae4f5b4fdb48
This commit is contained in:
android-build-team Robot
2018-06-29 03:19:17 +00:00
66 changed files with 578 additions and 127 deletions

View File

@@ -1562,11 +1562,11 @@
android:windowSoftInputMode="stateHidden|adjustResize"
android:theme="@style/GlifTheme.Light"/>
<activity android:name=".fingerprint.FingerprintSettings" android:exported="false"/>
<activity android:name=".fingerprint.FingerprintEnrollFindSensor" android:exported="false"/>
<activity android:name=".fingerprint.FingerprintEnrollEnrolling" android:exported="false"/>
<activity android:name=".fingerprint.FingerprintEnrollFinish" android:exported="false"/>
<activity android:name=".fingerprint.FingerprintEnrollIntroduction"
<activity android:name=".biometrics.fingerprint.FingerprintSettings" android:exported="false"/>
<activity android:name=".biometrics.fingerprint.FingerprintEnrollFindSensor" android:exported="false"/>
<activity android:name=".biometrics.fingerprint.FingerprintEnrollEnrolling" android:exported="false"/>
<activity android:name=".biometrics.fingerprint.FingerprintEnrollFinish" android:exported="false"/>
<activity android:name=".biometrics.fingerprint.FingerprintEnrollIntroduction"
android:exported="true"
android:theme="@style/GlifTheme.Light">
<intent-filter>
@@ -1575,10 +1575,10 @@
</intent-filter>
</activity>
<activity android:name=".fingerprint.SetupFingerprintEnrollFindSensor" android:exported="false"/>
<activity android:name=".fingerprint.SetupFingerprintEnrollEnrolling" android:exported="false"/>
<activity android:name=".fingerprint.SetupFingerprintEnrollFinish" android:exported="false"/>
<activity android:name=".fingerprint.SetupFingerprintEnrollIntroduction"
<activity android:name=".biometrics.fingerprint.SetupFingerprintEnrollFindSensor" android:exported="false"/>
<activity android:name=".biometrics.fingerprint.SetupFingerprintEnrollEnrolling" android:exported="false"/>
<activity android:name=".biometrics.fingerprint.SetupFingerprintEnrollFinish" android:exported="false"/>
<activity android:name=".biometrics.fingerprint.SetupFingerprintEnrollIntroduction"
android:exported="true"
android:permission="android.permission.MANAGE_FINGERPRINT"
android:theme="@style/GlifTheme.Light">
@@ -1588,7 +1588,7 @@
</intent-filter>
</activity>
<activity android:name=".fingerprint.FingerprintSuggestionActivity"
<activity android:name=".biometrics.fingerprint.FingerprintSuggestionActivity"
android:exported="true"
android:permission="android.permission.MANAGE_FINGERPRINT"
android:icon="@drawable/ic_suggestion_fingerprint"
@@ -1663,7 +1663,7 @@
<meta-data android:name="com.android.settings.icon_tintable" android:value="true" />
</activity>
<activity android:name=".fingerprint.FingerprintEnrollSuggestionActivity"
<activity android:name=".biometrics.fingerprint.FingerprintEnrollSuggestionActivity"
android:icon="@drawable/ic_suggestion_fingerprint">
<intent-filter android:priority="2">
<action android:name="android.intent.action.MAIN" />

View File

@@ -28,7 +28,7 @@
android:src="@drawable/fingerprint_sensor_location"
android:scaleType="centerInside"/>
<com.android.settings.fingerprint.FingerprintLocationAnimationView
<com.android.settings.biometrics.fingerprint.FingerprintLocationAnimationView
android:id="@+id/fingerprint_sensor_location_animation"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

View File

@@ -0,0 +1,35 @@
<!--
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.
-->
<!-- The main content view -->
<LinearLayout
android:id="@+id/content_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Toolbar
android:id="@+id/action_bar"
style="?android:attr/actionBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="?android:attr/actionBarTheme"
android:navigationContentDescription="@*android:string/action_bar_up_description" />
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:background="?android:attr/windowBackground" />
</LinearLayout>

View File

@@ -57,7 +57,7 @@
</com.android.settingslib.RestrictedPreference>
<!-- Cross-listed item, if you change this, also change it in power_usage_summary.xml -->
<com.android.settings.TimeoutListPreference
<com.android.settings.display.TimeoutListPreference
android:key="screen_timeout"
android:title="@string/screen_timeout"
android:summary="@string/summary_placeholder"

View File

@@ -26,7 +26,7 @@
android:title="@string/lockpattern_settings_enable_visible_pattern_title" />
<!-- available in pin/pattern/password -->
<com.android.settings.TimeoutListPreference
<com.android.settings.display.TimeoutListPreference
android:key="lock_after_timeout"
android:title="@string/lock_after_timeout"
android:summary="@string/summary_placeholder"

View File

@@ -52,6 +52,7 @@ import com.android.internal.util.ArrayUtils;
import com.android.settings.Settings.WifiSettingsActivity;
import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.backup.BackupSettingsActivity;
import com.android.settings.core.SettingsBaseActivity;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.core.gateway.SettingsGateway;
import com.android.settings.dashboard.DashboardFeatureProvider;
@@ -64,7 +65,6 @@ import com.android.settingslib.core.instrumentation.Instrumentable;
import com.android.settingslib.core.instrumentation.SharedPreferencesLogger;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.SettingsDrawerActivity;
import com.android.settingslib.utils.ThreadUtils;
import java.util.ArrayList;
@@ -76,7 +76,8 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceFragment;
import androidx.preference.PreferenceManager;
public class SettingsActivity extends SettingsDrawerActivity
public class SettingsActivity extends SettingsBaseActivity
implements PreferenceManager.OnPreferenceTreeClickListener,
PreferenceFragment.OnPreferenceStartFragmentCallback,
ButtonBarHandler, FragmentManager.OnBackStackChangedListener {
@@ -606,7 +607,7 @@ public class SettingsActivity extends SettingsDrawerActivity
private void updateTilesList() {
// Generally the items that are will be changing from these updates will
// not be in the top list of tiles, so run it in the background and the
// SettingsDrawerActivity will pick up on the updates automatically.
// SettingsBaseActivity will pick up on the updates automatically.
AsyncTask.execute(new Runnable() {
@Override
public void run() {

View File

@@ -152,7 +152,6 @@ public class BackupSettingsHelper {
}
private Intent getIntentForDefaultBackupSettings() {
// Extra needed by {@link SettingsDrawerActivity} to show the back button navigation.
return new Intent(mContext, PrivacySettingsActivity.class);
}

View File

@@ -1,5 +1,6 @@
# Default reviewers for this and subdirectories.
jaggies@google.com
kchyn@google.com
yukl@google.com
# Emergency approvers in case the above are not available

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintManager.AuthenticationResult;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.annotation.Nullable;
import android.content.Intent;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.animation.Animator;
import android.animation.ObjectAnimator;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
@@ -27,7 +27,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.fingerprint.FingerprintEnrollSidecar.Listener;
import com.android.settings.biometrics.fingerprint.FingerprintEnrollSidecar.Listener;
import com.android.settings.password.ChooseLockSettingsHelper;
import androidx.annotation.Nullable;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.app.admin.DevicePolicyManager;
import android.content.ActivityNotFoundException;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.annotation.Nullable;
import android.app.Activity;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.content.Context;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
/**
* An abstraction for a view that contains an animation that shows the user

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.content.ContentResolver;
import android.content.Context;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.content.Context;
import android.os.UserHandle;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.annotation.Nullable;
import android.hardware.fingerprint.Fingerprint;
@@ -121,7 +121,7 @@ public class FingerprintRemoveSidecar extends InstrumentedFragment {
}
final boolean isRemovingFingerprint(int fid) {
return inProgress() && mFingerprintRemoving.getFingerId() == fid;
return inProgress() && mFingerprintRemoving.getBiometricId() == fid;
}
final boolean inProgress() {

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.app.Activity;
@@ -161,7 +161,7 @@ public class FingerprintSettings extends SubSettings {
@Override
public void onAuthenticationSucceeded(
FingerprintManager.AuthenticationResult result) {
int fingerId = result.getFingerprint().getFingerId();
int fingerId = result.getFingerprint().getBiometricId();
mHandler.obtainMessage(MSG_FINGER_AUTH_SUCCESS, fingerId, 0).sendToTarget();
}
@@ -187,7 +187,7 @@ public class FingerprintSettings extends SubSettings {
new FingerprintRemoveSidecar.Listener() {
public void onRemovalSucceeded(Fingerprint fingerprint) {
mHandler.obtainMessage(MSG_REFRESH_FINGERPRINT_TEMPLATES,
fingerprint.getFingerId(), 0).sendToTarget();
fingerprint.getBiometricId(), 0).sendToTarget();
updateDialog();
}
@@ -393,16 +393,16 @@ public class FingerprintSettings extends SubSettings {
final Fingerprint item = items.get(i);
FingerprintPreference pref = new FingerprintPreference(root.getContext(),
this /* onDeleteClickListener */);
pref.setKey(genKey(item.getFingerId()));
pref.setKey(genKey(item.getBiometricId()));
pref.setTitle(item.getName());
pref.setFingerprint(item);
pref.setPersistent(false);
pref.setIcon(R.drawable.ic_fingerprint_24dp);
if (mRemovalSidecar.isRemovingFingerprint(item.getFingerId())) {
if (mRemovalSidecar.isRemovingFingerprint(item.getBiometricId())) {
pref.setEnabled(false);
}
if (mFingerprintsRenaming.containsKey(item.getFingerId())) {
pref.setTitle(mFingerprintsRenaming.get(item.getFingerId()));
if (mFingerprintsRenaming.containsKey(item.getBiometricId())) {
pref.setTitle(mFingerprintsRenaming.get(item.getBiometricId()));
}
root.addPreference(pref);
pref.setOnPreferenceChangeListener(this);
@@ -522,9 +522,9 @@ public class FingerprintSettings extends SubSettings {
private void showRenameDialog(final Fingerprint fp) {
RenameDialog renameDialog = new RenameDialog();
Bundle args = new Bundle();
if (mFingerprintsRenaming.containsKey(fp.getFingerId())) {
final Fingerprint f = new Fingerprint(mFingerprintsRenaming.get(fp.getFingerId()),
fp.getGroupId(), fp.getFingerId(), fp.getDeviceId());
if (mFingerprintsRenaming.containsKey(fp.getBiometricId())) {
final Fingerprint f = new Fingerprint(mFingerprintsRenaming.get(fp.getBiometricId()),
fp.getGroupId(), fp.getBiometricId(), fp.getDeviceId());
args.putParcelable("fingerprint", f);
} else {
args.putParcelable("fingerprint", fp);
@@ -648,7 +648,7 @@ public class FingerprintSettings extends SubSettings {
@VisibleForTesting
void deleteFingerPrint(Fingerprint fingerPrint) {
mRemovalSidecar.startRemove(fingerPrint, mUserId);
String name = genKey(fingerPrint.getFingerId());
String name = genKey(fingerPrint.getBiometricId());
Preference prefToRemove = findPreference(name);
prefToRemove.setEnabled(false);
updateAddPreference();
@@ -711,7 +711,7 @@ public class FingerprintSettings extends SubSettings {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
final int fingerprintId = mFp.getFingerId();
final int fingerprintId = mFp.getBiometricId();
Log.v(TAG, "Removing fpId=" + fingerprintId);
mMetricsFeatureProvider.action(getContext(),
MetricsEvent.ACTION_FINGERPRINT_DELETE,
@@ -760,11 +760,11 @@ public class FingerprintSettings extends SubSettings {
Log.d(TAG, "rename " + name + " to " + newName);
mMetricsFeatureProvider.action(getContext(),
MetricsEvent.ACTION_FINGERPRINT_RENAME,
mFp.getFingerId());
mFp.getBiometricId());
FingerprintSettingsFragment parent
= (FingerprintSettingsFragment)
getTargetFragment();
parent.renameFingerPrint(mFp.getFingerId(),
parent.renameFingerPrint(mFp.getBiometricId(),
newName);
}
dialog.dismiss();

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.content.Context;
import android.content.Intent;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.app.admin.DevicePolicyManager;
import android.content.Context;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.hardware.fingerprint.FingerprintManager;
import android.os.CancellationSignal;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.content.Intent;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.app.Activity;
import android.app.AlertDialog;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.content.Intent;
import android.os.UserHandle;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import android.app.Activity;
import android.app.KeyguardManager;

View File

@@ -35,7 +35,7 @@ public class AvailableMediaBluetoothDeviceUpdater extends BluetoothDeviceUpdater
implements Preference.OnPreferenceClickListener {
private static final String TAG = "AvailableMediaBluetoothDeviceUpdater";
private static final boolean DBG = false;
private static final boolean DBG = true;
private final AudioManager mAudioManager;

View File

@@ -19,6 +19,7 @@ import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.os.Bundle;
import android.os.SystemProperties;
import android.util.Log;
import com.android.settings.R;
import com.android.settings.connecteddevice.DevicePreferenceCallback;
@@ -49,6 +50,7 @@ import androidx.preference.Preference;
public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
LocalBluetoothProfileManager.ServiceListener {
private static final String TAG = "BluetoothDeviceUpdater";
private static final boolean DBG = true;
private static final String BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY =
"persist.bluetooth.showdeviceswithoutnames";
@@ -250,6 +252,10 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
return false;
}
final BluetoothDevice device = cachedDevice.getDevice();
if (DBG) {
Log.d(TAG, "isDeviceConnected() device name : " + cachedDevice.getName() +
", is connected : " + device.isConnected());
}
return device.getBondState() == BluetoothDevice.BOND_BONDED && device.isConnected();
}
}

View File

@@ -35,7 +35,7 @@ import androidx.preference.Preference;
public class ConnectedBluetoothDeviceUpdater extends BluetoothDeviceUpdater {
private static final String TAG = "ConnBluetoothDeviceUpdater";
private static final boolean DBG = false;
private static final boolean DBG = true;
private final AudioManager mAudioManager;

View File

@@ -19,6 +19,7 @@ import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.util.Log;
import com.android.settings.connecteddevice.DevicePreferenceCallback;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
@@ -33,6 +34,7 @@ import androidx.preference.Preference;
public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater
implements Preference.OnPreferenceClickListener {
private static final String TAG = "SavedBluetoothDeviceUpdater";
private static final boolean DBG = true;
public SavedBluetoothDeviceUpdater(Context context, DashboardFragment fragment,
DevicePreferenceCallback devicePreferenceCallback) {
@@ -59,6 +61,10 @@ public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater
@Override
public boolean isFilterMatched(CachedBluetoothDevice cachedDevice) {
final BluetoothDevice device = cachedDevice.getDevice();
if (DBG) {
Log.d(TAG, "isFilterMatched() device name : " + cachedDevice.getName() +
", is connected : " + device.isConnected());
}
return device.getBondState() == BluetoothDevice.BOND_BONDED && !device.isConnected();
}

View File

@@ -0,0 +1,211 @@
/**
* 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.annotation.LayoutRes;
import android.annotation.Nullable;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.res.TypedArray;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.ArraySet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager.LayoutParams;
import android.widget.Toolbar;
import com.android.settings.R;
import com.android.settingslib.drawer.CategoryManager;
import com.android.settingslib.drawer.TileUtils;
import java.util.ArrayList;
import java.util.List;
import androidx.fragment.app.FragmentActivity;
public class SettingsBaseActivity extends FragmentActivity {
protected static final boolean DEBUG_TIMING = false;
private static final String TAG = "SettingsBaseActivity";
private static final String DATA_SCHEME_PKG = "package";
// Serves as a temporary list of tiles to ignore until we heard back from the PM that they
// are disabled.
private static ArraySet<ComponentName> sTileBlacklist = new ArraySet<>();
private final PackageReceiver mPackageReceiver = new PackageReceiver();
private final List<CategoryListener> mCategoryListeners = new ArrayList<>();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final long startTime = System.currentTimeMillis();
final TypedArray theme = getTheme().obtainStyledAttributes(android.R.styleable.Theme);
if (!theme.getBoolean(android.R.styleable.Theme_windowNoTitle, false)) {
getWindow().addFlags(LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
requestWindowFeature(Window.FEATURE_NO_TITLE);
}
super.setContentView(R.layout.settings_base_layout);
final Toolbar toolbar = findViewById(R.id.action_bar);
if (theme.getBoolean(android.R.styleable.Theme_windowNoTitle, false)) {
toolbar.setVisibility(View.GONE);
return;
}
setActionBar(toolbar);
if (DEBUG_TIMING) {
Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime)
+ " ms");
}
}
@Override
public boolean onNavigateUp() {
if (!super.onNavigateUp()) {
finish();
}
return true;
}
@Override
protected void onResume() {
super.onResume();
final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
filter.addDataScheme(DATA_SCHEME_PKG);
registerReceiver(mPackageReceiver, filter);
new CategoriesUpdateTask().execute();
}
@Override
protected void onPause() {
unregisterReceiver(mPackageReceiver);
super.onPause();
}
public void addCategoryListener(CategoryListener listener) {
mCategoryListeners.add(listener);
}
public void remCategoryListener(CategoryListener listener) {
mCategoryListeners.remove(listener);
}
@Override
public void setContentView(@LayoutRes int layoutResID) {
final ViewGroup parent = findViewById(R.id.content_frame);
if (parent != null) {
parent.removeAllViews();
}
LayoutInflater.from(this).inflate(layoutResID, parent);
}
@Override
public void setContentView(View view) {
((ViewGroup) findViewById(R.id.content_frame)).addView(view);
}
@Override
public void setContentView(View view, ViewGroup.LayoutParams params) {
((ViewGroup) findViewById(R.id.content_frame)).addView(view, params);
}
private void onCategoriesChanged() {
final int N = mCategoryListeners.size();
for (int i = 0; i < N; i++) {
mCategoryListeners.get(i).onCategoriesChanged();
}
}
/**
* @return whether or not the enabled state actually changed.
*/
public boolean setTileEnabled(ComponentName component, boolean enabled) {
final PackageManager pm = getPackageManager();
int state = pm.getComponentEnabledSetting(component);
boolean isEnabled = state == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
if (isEnabled != enabled || state == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) {
if (enabled) {
sTileBlacklist.remove(component);
} else {
sTileBlacklist.add(component);
}
pm.setComponentEnabledSetting(component, enabled
? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
: PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
return true;
}
return false;
}
/**
* Updates dashboard categories. Only necessary to call this after setTileEnabled
*/
public void updateCategories() {
new CategoriesUpdateTask().execute();
}
public String getSettingPkg() {
return TileUtils.SETTING_PKG;
}
public interface CategoryListener {
void onCategoriesChanged();
}
private class CategoriesUpdateTask extends AsyncTask<Void, Void, Void> {
private final CategoryManager mCategoryManager;
public CategoriesUpdateTask() {
mCategoryManager = CategoryManager.get(SettingsBaseActivity.this);
}
@Override
protected Void doInBackground(Void... params) {
mCategoryManager.reloadAllCategories(SettingsBaseActivity.this, getSettingPkg());
return null;
}
@Override
protected void onPostExecute(Void result) {
mCategoryManager.updateCategoryFromBlacklist(sTileBlacklist);
onCategoriesChanged();
}
}
private class PackageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
new CategoriesUpdateTask().execute();
}
}
}

View File

@@ -27,13 +27,13 @@ import android.util.Log;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerListHelper;
import com.android.settings.core.SettingsBaseActivity;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.SettingsDrawerActivity;
import com.android.settingslib.drawer.Tile;
import com.android.settingslib.drawer.TileUtils;
@@ -52,7 +52,7 @@ import androidx.preference.PreferenceScreen;
* Base fragment for dashboard style UI containing a list of static and dynamic setting items.
*/
public abstract class DashboardFragment extends SettingsPreferenceFragment
implements SettingsDrawerActivity.CategoryListener, Indexable,
implements SettingsBaseActivity.CategoryListener, Indexable,
SummaryLoader.SummaryConsumer {
private static final String TAG = "DashboardFragment";
@@ -145,9 +145,9 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
mSummaryLoader.setListening(true);
}
final Activity activity = getActivity();
if (activity instanceof SettingsDrawerActivity) {
if (activity instanceof SettingsBaseActivity) {
mListeningToCategoryChange = true;
((SettingsDrawerActivity) activity).addCategoryListener(this);
((SettingsBaseActivity) activity).addCategoryListener(this);
}
}
@@ -197,8 +197,8 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
}
if (mListeningToCategoryChange) {
final Activity activity = getActivity();
if (activity instanceof SettingsDrawerActivity) {
((SettingsDrawerActivity) activity).remCategoryListener(this);
if (activity instanceof SettingsBaseActivity) {
((SettingsBaseActivity) activity).remCategoryListener(this);
}
mListeningToCategoryChange = false;
}

View File

@@ -30,6 +30,8 @@ import android.view.ViewGroup;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.core.InstrumentedFragment;
import com.android.settings.core.SettingsBaseActivity;
import com.android.settings.core.SettingsBaseActivity.CategoryListener;
import com.android.settings.dashboard.conditional.Condition;
import com.android.settings.dashboard.conditional.ConditionManager;
import com.android.settings.dashboard.conditional.ConditionManager.ConditionListener;
@@ -40,8 +42,6 @@ import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.ActionBarShadowController;
import com.android.settingslib.drawer.CategoryKey;
import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.SettingsDrawerActivity;
import com.android.settingslib.drawer.SettingsDrawerActivity.CategoryListener;
import com.android.settingslib.suggestions.SuggestionControllerMixin;
import com.android.settingslib.utils.ThreadUtils;
@@ -138,7 +138,7 @@ public class DashboardSummary extends InstrumentedFragment
long startTime = System.currentTimeMillis();
super.onResume();
((SettingsDrawerActivity) getActivity()).addCategoryListener(this);
((SettingsBaseActivity) getActivity()).addCategoryListener(this);
mSummaryLoader.setListening(true);
final int metricsCategory = getMetricsCategory();
for (Condition c : mConditionManager.getConditions()) {
@@ -156,7 +156,7 @@ public class DashboardSummary extends InstrumentedFragment
public void onPause() {
super.onPause();
((SettingsDrawerActivity) getActivity()).remCategoryListener(this);
((SettingsBaseActivity) getActivity()).remCategoryListener(this);
mSummaryLoader.setListening(false);
for (Condition c : mConditionManager.getConditions()) {
if (c.shouldShow()) {

View File

@@ -28,8 +28,8 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.Settings.NightDisplaySuggestionActivity;
import com.android.settings.display.NightDisplayPreferenceController;
import com.android.settings.fingerprint.FingerprintEnrollSuggestionActivity;
import com.android.settings.fingerprint.FingerprintSuggestionActivity;
import com.android.settings.biometrics.fingerprint.FingerprintEnrollSuggestionActivity;
import com.android.settings.biometrics.fingerprint.FingerprintSuggestionActivity;
import com.android.settings.notification.ZenOnboardingActivity;
import com.android.settings.notification.ZenSuggestionActivity;
import com.android.settings.overlay.FeatureFactory;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings;
package com.android.settings.display;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -24,13 +24,17 @@ import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.DialogInterface;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import com.android.settings.R;
import com.android.settings.RestrictedListPreference;
import com.android.settingslib.RestrictedLockUtils;
import java.util.ArrayList;
public class TimeoutListPreference extends RestrictedListPreference {
private static final String TAG = "TimeoutListPreference";
private EnforcedAdmin mAdmin;
private final CharSequence[] mInitialEntries;
private final CharSequence[] mInitialValues;
@@ -115,10 +119,11 @@ public class TimeoutListPreference extends RestrictedListPreference {
// If the last one happens to be the same as the max timeout, select that
setValue(String.valueOf(maxTimeout));
} else {
// There will be no highlighted selection since nothing in the list matches
// maxTimeout. The user can still select anything less than maxTimeout.
// TODO: maybe append maxTimeout to the list and mark selected.
// The selected time out value is longer than the max timeout allowed by the admin.
// Select the largest value from the list by default.
Log.w(TAG, "Default to longest timeout. Value disabled by admin:" + userPreference);
setValue(revisedValues.get(revisedValues.size() - 1).toString());
}
}
}
}
}

View File

@@ -23,7 +23,6 @@ import android.provider.Settings;
import android.util.Log;
import com.android.settings.R;
import com.android.settings.TimeoutListPreference;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -71,12 +70,13 @@ public class TimeoutPreferenceController extends AbstractPreferenceController im
dpm.getMaximumTimeToLock(null /* admin */, UserHandle.myUserId());
timeoutListPreference.removeUnusableTimeouts(maxTimeout, admin);
}
updateTimeoutPreferenceDescription(timeoutListPreference, currentTimeout);
updateTimeoutPreferenceDescription(timeoutListPreference,
Long.parseLong(timeoutListPreference.getValue()));
EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
mContext, UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT,
UserHandle.myUserId());
if(admin != null) {
final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
mContext, UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT,
UserHandle.myUserId());
if (admin != null) {
timeoutListPreference.removeUnusableTimeouts(0/* disable all*/, admin);
}
}

View File

@@ -53,8 +53,8 @@ import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.fingerprint.FingerprintEnrollBase;
import com.android.settings.fingerprint.FingerprintEnrollFindSensor;
import com.android.settings.biometrics.fingerprint.FingerprintEnrollBase;
import com.android.settings.biometrics.fingerprint.FingerprintEnrollFindSensor;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedPreference;
@@ -682,7 +682,7 @@ public class ChooseLockGeneric extends SettingsActivity {
CharSequence errString) {
Log.e(TAG, String.format(
"Can't remove fingerprint %d in group %d. Reason: %s",
fp.getFingerId(), fp.getGroupId(), errString));
fp.getBiometricId(), fp.getGroupId(), errString));
// TODO: need to proceed with the removal of managed profile
// fingerprints and finish() gracefully.
}

View File

@@ -53,7 +53,7 @@ import com.android.internal.widget.LockPatternUtils;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.InstrumentedFragment;
import com.android.settings.fingerprint.FingerprintUiHelper;
import com.android.settings.biometrics.fingerprint.FingerprintUiHelper;
/**
* Base fragment to be shared for PIN/Pattern/Password confirmation fragments.

View File

@@ -31,7 +31,7 @@ import com.android.internal.widget.LockPatternUtils;
import com.android.settings.R;
import com.android.settings.SetupEncryptionInterstitial;
import com.android.settings.SetupWizardUtils;
import com.android.settings.fingerprint.SetupFingerprintEnrollFindSensor;
import com.android.settings.biometrics.fingerprint.SetupFingerprintEnrollFindSensor;
import com.android.settings.utils.SettingsDividerItemDecoration;
import com.android.setupwizardlib.GlifPreferenceLayout;

View File

@@ -29,8 +29,8 @@ import com.android.settings.Utils;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.enterprise.EnterprisePrivacyPreferenceController;
import com.android.settings.fingerprint.FingerprintProfileStatusPreferenceController;
import com.android.settings.fingerprint.FingerprintStatusPreferenceController;
import com.android.settings.biometrics.fingerprint.FingerprintProfileStatusPreferenceController;
import com.android.settings.biometrics.fingerprint.FingerprintStatusPreferenceController;
import com.android.settings.location.LocationPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.security.trustagent.ManageTrustAgentsPreferenceController;

View File

@@ -27,7 +27,7 @@ import android.util.Log;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.R;
import com.android.settings.TimeoutListPreference;
import com.android.settings.display.TimeoutListPreference;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.security.trustagent.TrustAgentManager;

View File

@@ -102,11 +102,12 @@ public class WifiInfoPreferenceController extends AbstractPreferenceController
Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 0);
final String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress();
if (TextUtils.isEmpty(macAddress)) {
mWifiMacAddressPref.setSummary(R.string.status_unavailable);
} else if (macRandomizationMode == 1
if (macRandomizationMode == 1
&& WifiInfo.DEFAULT_MAC_ADDRESS.equals(macAddress)) {
mWifiMacAddressPref.setSummary(R.string.wifi_status_mac_randomized);
} else if (TextUtils.isEmpty(macAddress)
|| WifiInfo.DEFAULT_MAC_ADDRESS.equals(macAddress)) {
mWifiMacAddressPref.setSummary(R.string.status_unavailable);
} else {
mWifiMacAddressPref.setSummary(macAddress);
}

View File

@@ -6,7 +6,7 @@ com.android.settings.accessibility.AccessibilitySettingsForSetupWizard
com.android.settings.datausage.DataUsageList
com.android.settings.vpn2.AppManagementFragment
com.android.settings.vpn2.VpnSettings
com.android.settings.fingerprint.FingerprintSettings$FingerprintSettingsFragment
com.android.settings.biometrics.fingerprint.FingerprintSettings$FingerprintSettingsFragment
com.android.settings.applications.ProcessStatsDetail
com.android.settings.wifi.WifiInfo
com.android.settings.applications.VrListenerSettings

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
@@ -23,8 +23,8 @@ import static org.mockito.Mockito.verify;
import android.app.Dialog;
import android.hardware.fingerprint.Fingerprint;
import com.android.settings.fingerprint.FingerprintSettings.FingerprintSettingsFragment;
import com.android.settings.fingerprint.FingerprintSettings.FingerprintSettingsFragment.DeleteFingerprintDialog;
import com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment;
import com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.DeleteFingerprintDialog;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowFragment;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;

View File

@@ -14,7 +14,7 @@
* limitations under the License
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;

View File

@@ -15,7 +15,7 @@
*
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.verify;
@@ -25,7 +25,7 @@ import android.view.View;
import android.widget.FrameLayout;
import com.android.settings.R;
import com.android.settings.fingerprint.FingerprintSettings.FingerprintPreference;
import com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintPreference;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import static com.android.settings.core.BasePreferenceController.DISABLED_FOR_USER;
import static com.google.common.truth.Truth.assertThat;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import static com.google.common.truth.Truth.assertThat;
import static org.robolectric.RuntimeEnvironment.application;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import static com.google.common.truth.Truth.assertThat;
import static org.robolectric.RuntimeEnvironment.application;
@@ -27,7 +27,7 @@ import android.view.View;
import android.widget.Button;
import com.android.settings.R;
import com.android.settings.fingerprint.SetupFingerprintEnrollIntroductionTest.ShadowStorageManagerWrapper;
import com.android.settings.biometrics.fingerprint.SetupFingerprintEnrollIntroductionTest.ShadowStorageManagerWrapper;
import com.android.settings.password.SetupChooseLockGeneric.SetupChooseLockGenericFragment;
import com.android.settings.password.SetupSkipDialog;
import com.android.settings.password.StorageManagerWrapper;

View File

@@ -61,7 +61,7 @@ public class PreferenceXmlParserUtilsTest {
@Test
public void testDataTitleValid_ReturnsPreferenceTitle() {
XmlResourceParser parser = getChildByType(R.xml.display_settings,
"com.android.settings.TimeoutListPreference");
"com.android.settings.display.TimeoutListPreference");
final AttributeSet attrs = Xml.asAttributeSet(parser);
String title = PreferenceXmlParserUtils.getDataTitle(mContext, attrs);
String expTitle = mContext.getString(R.string.screen_timeout);
@@ -80,7 +80,7 @@ public class PreferenceXmlParserUtilsTest {
@Test
public void testDataKeyValid_ReturnsPreferenceKey() {
XmlResourceParser parser = getChildByType(R.xml.display_settings,
"com.android.settings.TimeoutListPreference");
"com.android.settings.display.TimeoutListPreference");
final AttributeSet attrs = Xml.asAttributeSet(parser);
String key = PreferenceXmlParserUtils.getDataKey(mContext, attrs);
String expKey = "screen_timeout";
@@ -90,7 +90,7 @@ public class PreferenceXmlParserUtilsTest {
@Test
public void testDataSummaryValid_ReturnsPreferenceSummary() {
XmlResourceParser parser = getChildByType(R.xml.display_settings,
"com.android.settings.TimeoutListPreference");
"com.android.settings.display.TimeoutListPreference");
final AttributeSet attrs = Xml.asAttributeSet(parser);
String summary = PreferenceXmlParserUtils.getDataSummary(mContext, attrs);
String expSummary = mContext.getString(R.string.summary_placeholder);

View File

@@ -0,0 +1,69 @@
/*
* 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.display;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
import static org.robolectric.RuntimeEnvironment.application;
import android.text.TextUtils;
import android.util.AttributeSet;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settingslib.RestrictedLockUtils;
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.util.ReflectionHelpers;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(shadows = ShadowUserManager.class)
public class TimeoutListPreferenceTest {
private static final CharSequence[] VALUES =
{"15000", "30000", "60000", "120000", "300000", "600000"};
private static final CharSequence[] ENTRIES = {"15s", "30s", "1m", "2m", "5m", "10m"};
@Mock
private RestrictedLockUtils.EnforcedAdmin mEnforcedAdmin;
private TimeoutListPreference mPreference;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mPreference = new TimeoutListPreference(application, mock(AttributeSet.class));
ReflectionHelpers.setField(mPreference, "mInitialValues", VALUES);
ReflectionHelpers.setField(mPreference, "mInitialEntries", ENTRIES);
ReflectionHelpers.setField(mPreference, "mEntries", ENTRIES);
ReflectionHelpers.setField(mPreference, "mEntryValues", VALUES);
ReflectionHelpers.setField(mPreference, "mAdmin", mEnforcedAdmin);
}
@Test
public void removeUnusableTimeouts_selectedValueRemoved_shouldSetValueToLargestAllowedValue() {
mPreference.setValue("600000"); // set to 10 minutes
mPreference.removeUnusableTimeouts(480000L, mEnforcedAdmin); // max allowed is 8 minutes
// should set to largest allowed value, which is 5 minute
assertThat(mPreference.getValue()).isEqualTo("300000");
}
}

View File

@@ -18,9 +18,8 @@ package com.android.settings.display;
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
import static com.google.common.truth.Truth.assertThat;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -31,11 +30,13 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import com.android.settings.TimeoutListPreference;
import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowDevicePolicyManager;
import com.android.settings.testutils.shadow.ShadowRestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -55,6 +56,7 @@ public class TimeoutPreferenceControllerTest {
private static final int TIMEOUT = 30;
private static final String KEY_SCREEN_TIMEOUT = "screen_timeout";
private static final String DEFAULT_TIMEOUT = "300000"; // 5 minutes
private Context mContext;
@Mock
@@ -69,9 +71,15 @@ public class TimeoutPreferenceControllerTest {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
when(mPreference.getValue()).thenReturn(DEFAULT_TIMEOUT);
mController = new TimeoutPreferenceController(mContext, KEY_SCREEN_TIMEOUT);
}
@After
public void tearDown() {
ShadowRestrictedLockUtils.reset();
}
@Test
public void testOnPreferenceChange_SetTimeout_ReturnCorrectTimeout() {
mController.onPreferenceChange(mPreference, Integer.toString(TIMEOUT));
@@ -125,7 +133,28 @@ public class TimeoutPreferenceControllerTest {
verify(mPreference, times(2))
.removeUnusableTimeouts(longCaptor.capture(), adminCaptor.capture());
assertEquals(0, (long) longCaptor.getValue());
assertTrue(adminCaptor.getValue() != null);
assertThat((long) longCaptor.getValue()).isEqualTo(0);
assertThat(adminCaptor.getValue()).isNotNull();
}
@Test
@Config(shadows = ShadowRestrictedLockUtils.class)
public void updateState_selectedTimeoutLargerThanAdminMax_shouldSetSummaryToUpdatedPrefValue() {
final int profileUserId = UserHandle.myUserId();
final long allowedTimeout = 480000L; // 8 minutes
when(mUserManager.getProfiles(profileUserId)).thenReturn(Collections.emptyList());
ShadowDevicePolicyManager.getShadow().setMaximumTimeToLock(profileUserId, allowedTimeout);
ShadowRestrictedLockUtils.setMaximumTimeToLockIsSet(true);
final CharSequence[] timeouts = {"15000", "30000", "60000", "120000", "300000", "600000"};
final CharSequence[] summaries = {"15s", "30s", "1m", "2m", "5m", "10m"};
// set current timeout to be 10 minutes, which is longer than the allowed 8 minutes
Settings.System.putLong(mContext.getContentResolver(), SCREEN_OFF_TIMEOUT, 600000L);
when(mPreference.getEntries()).thenReturn(summaries);
when(mPreference.getEntryValues()).thenReturn(timeouts);
when(mPreference.getValue()).thenReturn("300000");
mController.updateState(mPreference);
verify(mPreference).setSummary(mContext.getString(R.string.screen_timeout_summary, "5m"));
}
}

View File

@@ -30,7 +30,7 @@ import android.os.UserManager;
import android.provider.Settings;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.TimeoutListPreference;
import com.android.settings.display.TimeoutListPreference;
import com.android.settings.security.trustagent.TrustAgentManager;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;

View File

@@ -28,8 +28,8 @@ import android.content.res.Resources;
import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.fingerprint.FingerprintEnrollSuggestionActivity;
import com.android.settings.fingerprint.FingerprintSuggestionActivity;
import com.android.settings.biometrics.fingerprint.FingerprintEnrollSuggestionActivity;
import com.android.settings.biometrics.fingerprint.FingerprintSuggestionActivity;
import com.android.settings.notification.ZenSuggestionActivity;
import com.android.settings.support.NewDeviceIntroSuggestionActivity;
import com.android.settings.testutils.SettingsRobolectricTestRunner;

View File

@@ -33,6 +33,7 @@ public class ShadowRestrictedLockUtils {
private static boolean sIsRestricted;
private static boolean sAdminSupportDetailsIntentLaunched;
private static boolean sHasSystemFeature;
private static boolean sMaximumTimeToLockIsSet;
private static String[] sRestrictedPkgs;
private static DevicePolicyManager sDevicePolicyManager;
private static String[] sDisabledTypes;
@@ -45,6 +46,7 @@ public class ShadowRestrictedLockUtils {
sAdminSupportDetailsIntentLaunched = false;
sKeyguardDisabledFeatures = 0;
sDisabledTypes = new String[0];
sMaximumTimeToLockIsSet = false;
}
@Implementation
@@ -101,6 +103,11 @@ public class ShadowRestrictedLockUtils {
return sIsRestricted ? new EnforcedAdmin() : null;
}
@Implementation
public static EnforcedAdmin checkIfMaximumTimeToLockIsSet(Context context) {
return sMaximumTimeToLockIsSet ? new EnforcedAdmin() : null;
}
public static boolean hasAdminSupportDetailsIntentLaunched() {
return sAdminSupportDetailsIntentLaunched;
}
@@ -136,4 +143,9 @@ public class ShadowRestrictedLockUtils {
public static void setKeyguardDisabledFeatures(int features) {
sKeyguardDisabledFeatures = features;
}
public static void setMaximumTimeToLockIsSet(boolean isSet) {
sMaximumTimeToLockIsSet = isSet;
}
}

View File

@@ -79,6 +79,7 @@ public class WifiInfoPreferenceControllerTest {
.thenReturn(mMacPreference)
.thenReturn(mIpPreference);
when(mWifiManager.getConnectionInfo()).thenReturn(mWifiInfo);
when(mWifiManager.getCurrentNetwork()).thenReturn(null);
mController = new WifiInfoPreferenceController(mContext, mLifecycle, mWifiManager);
}
@@ -103,7 +104,6 @@ public class WifiInfoPreferenceControllerTest {
@Test
public void onResume_shouldUpdateWifiInfo() {
when(mWifiManager.getCurrentNetwork()).thenReturn(null);
when(mWifiInfo.getMacAddress()).thenReturn(TEST_MAC_ADDRESS);
mController.displayPreference(mScreen);
@@ -114,22 +114,98 @@ public class WifiInfoPreferenceControllerTest {
}
@Test
public void testUpdateMacAddress() {
when(mWifiManager.getCurrentNetwork()).thenReturn(null);
public void updateWifiInfo_nullWifiInfoWithMacRandomizationOff_setMacUnavailable() {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 0);
mController.displayPreference(mScreen);
when(mWifiManager.getConnectionInfo()).thenReturn(null);
mController.updateWifiInfo();
verify(mMacPreference).setSummary(R.string.status_unavailable);
}
@Test
public void updateWifiInfo_nullMacWithMacRandomizationOff_setMacUnavailable() {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 0);
mController.displayPreference(mScreen);
when(mWifiInfo.getMacAddress()).thenReturn(null);
mController.updateWifiInfo();
verify(mMacPreference).setSummary(R.string.status_unavailable);
}
@Test
public void updateWifiInfo_defaultMacWithMacRandomizationOff_setMacUnavailable() {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 0);
mController.displayPreference(mScreen);
when(mWifiInfo.getMacAddress()).thenReturn(WifiInfo.DEFAULT_MAC_ADDRESS);
mController.updateWifiInfo();
verify(mMacPreference).setSummary(R.string.status_unavailable);
}
@Test
public void updateWifiInfo_validMacWithMacRandomizationOff_setValidMac() {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 0);
mController.displayPreference(mScreen);
when(mWifiInfo.getMacAddress()).thenReturn(TEST_MAC_ADDRESS);
mController.updateWifiInfo();
verify(mMacPreference).setSummary(TEST_MAC_ADDRESS);
}
@Test
public void updateWifiInfo_nullWifiInfoWithMacRandomizationOn_setMacUnavailable() {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 1);
mController.displayPreference(mScreen);
when(mWifiManager.getConnectionInfo()).thenReturn(null);
when(mWifiInfo.getMacAddress()).thenReturn(null);
mController.updateWifiInfo();
verify(mMacPreference).setSummary(R.string.status_unavailable);
}
@Test
public void updateWifiInfo_nullMacWithMacRandomizationOn_setMacUnavailable() {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 1);
mController.displayPreference(mScreen);
when(mWifiInfo.getMacAddress()).thenReturn(null);
mController.updateWifiInfo();
verify(mMacPreference).setSummary(R.string.status_unavailable);
}
@Test
public void updateWifiInfo_defaultMacWithMacRandomizationOn_setMacRandomized() {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 1);
mController.displayPreference(mScreen);
when(mWifiInfo.getMacAddress()).thenReturn(WifiInfo.DEFAULT_MAC_ADDRESS);
mController.updateWifiInfo();
verify(mMacPreference).setSummary(R.string.wifi_status_mac_randomized);
when(mWifiInfo.getMacAddress()).thenReturn(TEST_MAC_ADDRESS);
mController.updateWifiInfo();
verify(mMacPreference).setSummary(R.string.wifi_status_mac_randomized);
}
@Test
public void updateWifiInfo_validMacWithMacRandomizationOn_setValidMac() {
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 1);
mController.displayPreference(mScreen);
when(mWifiInfo.getMacAddress()).thenReturn(TEST_MAC_ADDRESS);
mController.updateWifiInfo();
verify(mMacPreference).setSummary(TEST_MAC_ADDRESS);
}
}

View File

@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import static android.support.test.InstrumentationRegistry.getTargetContext;
import static android.support.test.espresso.Espresso.onView;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settings.fingerprint;
package com.android.settings.biometrics.fingerprint;
import static org.mockito.Matchers.anyInt;