diff --git a/res/values/strings.xml b/res/values/strings.xml
index afa207b8f0f..3bd969112fe 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -43,6 +43,9 @@
No need, you are already a developer.
+
+ Please enable developer options first.
+
Wireless & networks
@@ -6737,12 +6740,6 @@
Allow this app to create a picture-in-picture window while the app is open or after you leave it (for example, to continue watching a video). This window displays on top of other apps you're using.
-
- Yes
-
-
- No
-
Do Not Disturb access
@@ -7703,10 +7700,12 @@
Apps with permission
-
- Yes
-
- No
+
+
+ Allowed
+
+
+ Not allowed
Install unknown apps
@@ -7735,14 +7734,6 @@
Allow modify system settings
This permission allows an app to modify system settings.
-
- Yes
-
- No
-
- Allowed
-
- Not allowed
Allow from this source
diff --git a/src/com/android/settings/applications/DrawOverlayDetails.java b/src/com/android/settings/applications/DrawOverlayDetails.java
index 72564bc3f8e..c6f3cc0c1e6 100644
--- a/src/com/android/settings/applications/DrawOverlayDetails.java
+++ b/src/com/android/settings/applications/DrawOverlayDetails.java
@@ -20,8 +20,6 @@ import android.app.AppOpsManager;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.UserHandle;
import android.provider.Settings;
@@ -206,33 +204,6 @@ public class DrawOverlayDetails extends AppInfoWithHeader implements OnPreferenc
public static CharSequence getSummary(Context context, OverlayState overlayState) {
return context.getString(overlayState.isPermissible() ?
- R.string.system_alert_window_on : R.string.system_alert_window_off);
- }
-
- public static CharSequence getSummary(Context context, String pkg) {
- // first check if pkg is a system pkg
- PackageManager packageManager = context.getPackageManager();
- int uid = -1;
- try {
- ApplicationInfo appInfo = packageManager.getApplicationInfo(pkg, 0);
- uid = appInfo.uid;
- if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
- return context.getString(R.string.system_alert_window_on);
- }
- } catch (PackageManager.NameNotFoundException e) {
- // pkg doesn't even exist?
- Log.w(LOG_TAG, "Package " + pkg + " not found", e);
- return context.getString(R.string.system_alert_window_off);
- }
-
- AppOpsManager appOpsManager = (AppOpsManager) context.getSystemService(Context
- .APP_OPS_SERVICE);
- if (uid == -1) {
- return context.getString(R.string.system_alert_window_off);
- }
-
- int mode = appOpsManager.noteOpNoThrow(AppOpsManager.OP_SYSTEM_ALERT_WINDOW, uid, pkg);
- return context.getString((mode == AppOpsManager.MODE_ALLOWED) ?
- R.string.system_alert_window_on : R.string.system_alert_window_off);
+ R.string.app_permission_summary_allowed : R.string.app_permission_summary_not_allowed);
}
}
diff --git a/src/com/android/settings/applications/ExternalSourcesDetails.java b/src/com/android/settings/applications/ExternalSourcesDetails.java
index fe51a87ab77..7158900398a 100644
--- a/src/com/android/settings/applications/ExternalSourcesDetails.java
+++ b/src/com/android/settings/applications/ExternalSourcesDetails.java
@@ -15,11 +15,6 @@
*/
package com.android.settings.applications;
-import static android.app.Activity.RESULT_CANCELED;
-import static android.app.Activity.RESULT_OK;
-
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-
import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.content.Context;
@@ -29,12 +24,16 @@ import android.os.UserManager;
import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceChangeListener;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.applications.AppStateInstallAppsBridge.InstallAppsState;
import com.android.settingslib.RestrictedSwitchPreference;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
+import static android.app.Activity.RESULT_CANCELED;
+import static android.app.Activity.RESULT_OK;
+
public class ExternalSourcesDetails extends AppInfoWithHeader
implements OnPreferenceChangeListener {
@@ -97,8 +96,9 @@ public class ExternalSourcesDetails extends AppInfoWithHeader
appsState = new AppStateInstallAppsBridge(context, null, null)
.createInstallAppsStateFor(entry.info.packageName, entry.info.uid);
}
- return context.getString(appsState.canInstallApps() ? R.string.external_source_trusted
- : R.string.external_source_untrusted);
+ return context.getString(appsState.canInstallApps()
+ ? R.string.app_permission_summary_allowed
+ : R.string.app_permission_summary_not_allowed);
}
private void setCanInstallApps(boolean newState) {
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index cfa60420a41..b6b58616d91 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -1367,8 +1367,9 @@ public class ManageApplications extends InstrumentedPreferenceFragment
case LIST_TYPE_USAGE_ACCESS:
if (holder.entry.extraInfo != null) {
holder.summary.setText((new UsageState((PermissionState) holder.entry
- .extraInfo)).isPermissible() ? R.string.switch_on_text :
- R.string.switch_off_text);
+ .extraInfo)).isPermissible()
+ ? R.string.app_permission_summary_allowed
+ : R.string.app_permission_summary_not_allowed);
} else {
holder.summary.setText(null);
}
diff --git a/src/com/android/settings/applications/PictureInPictureDetails.java b/src/com/android/settings/applications/PictureInPictureDetails.java
index 41f006acb51..a886a3df554 100644
--- a/src/com/android/settings/applications/PictureInPictureDetails.java
+++ b/src/com/android/settings/applications/PictureInPictureDetails.java
@@ -15,10 +15,6 @@
*/
package com.android.settings.applications;
-import static android.app.AppOpsManager.MODE_ALLOWED;
-import static android.app.AppOpsManager.MODE_ERRORED;
-import static android.app.AppOpsManager.OP_PICTURE_IN_PICTURE;
-
import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.content.Context;
@@ -34,6 +30,10 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.overlay.FeatureFactory;
+import static android.app.AppOpsManager.MODE_ALLOWED;
+import static android.app.AppOpsManager.MODE_ERRORED;
+import static android.app.AppOpsManager.OP_PICTURE_IN_PICTURE;
+
public class PictureInPictureDetails extends AppInfoWithHeader
implements OnPreferenceChangeListener {
@@ -124,7 +124,8 @@ public class PictureInPictureDetails extends AppInfoWithHeader
static int getPreferenceSummary(Context context, int uid, String packageName) {
final boolean enabled = PictureInPictureDetails.getEnterPipStateForPackage(context, uid,
packageName);
- return enabled ? R.string.picture_in_picture_on : R.string.picture_in_picture_off;
+ return enabled ? R.string.app_permission_summary_allowed
+ : R.string.app_permission_summary_not_allowed;
}
@VisibleForTesting
diff --git a/src/com/android/settings/applications/SpecialAccessSettings.java b/src/com/android/settings/applications/SpecialAccessSettings.java
index 31f461c7e18..069db76de1c 100644
--- a/src/com/android/settings/applications/SpecialAccessSettings.java
+++ b/src/com/android/settings/applications/SpecialAccessSettings.java
@@ -14,20 +14,54 @@
package com.android.settings.applications;
-import android.os.Bundle;
+import android.content.Context;
+import android.provider.SearchIndexableResource;
+
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.core.PreferenceController;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
-public class SpecialAccessSettings extends SettingsPreferenceFragment {
+import java.util.ArrayList;
+import java.util.List;
+
+public class SpecialAccessSettings extends DashboardFragment {
+
+ private static final String TAG = "SpecialAccessSettings";
@Override
- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- addPreferencesFromResource(R.xml.special_access);
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.special_access;
+ }
+
+ @Override
+ protected List getPreferenceControllers(Context context) {
+ return null;
}
@Override
public int getMetricsCategory() {
return MetricsEvent.SPECIAL_ACCESS;
}
+
+ public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider() {
+ @Override
+ public List getXmlResourcesToIndex(Context context,
+ boolean enabled) {
+ final ArrayList result = new ArrayList<>();
+
+ final SearchIndexableResource sir = new SearchIndexableResource(context);
+ sir.xmlResId = R.xml.special_access;
+ result.add(sir);
+ return result;
+ }
+ };
}
diff --git a/src/com/android/settings/applications/WriteSettingsDetails.java b/src/com/android/settings/applications/WriteSettingsDetails.java
index aea05b3bbb0..50e6948bbf1 100644
--- a/src/com/android/settings/applications/WriteSettingsDetails.java
+++ b/src/com/android/settings/applications/WriteSettingsDetails.java
@@ -20,8 +20,6 @@ import android.app.AppOpsManager;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.UserHandle;
import android.provider.Settings;
@@ -38,8 +36,6 @@ import com.android.settings.applications.AppStateWriteSettingsBridge.WriteSettin
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
-import java.util.List;
-
public class WriteSettingsDetails extends AppInfoWithHeader implements OnPreferenceChangeListener,
OnPreferenceClickListener {
@@ -182,47 +178,8 @@ public class WriteSettingsDetails extends AppInfoWithHeader implements OnPrefere
}
public static CharSequence getSummary(Context context, WriteSettingsState writeSettingsState) {
- return context.getString(writeSettingsState.isPermissible() ? R.string.write_settings_on :
- R.string.write_settings_off);
- }
-
- public static CharSequence getSummary(Context context, String pkg) {
- // first check if pkg is a system pkg
- boolean isSystem = false;
- PackageManager packageManager = context.getPackageManager();
- try {
- ApplicationInfo appInfo = packageManager.getApplicationInfo(pkg, 0);
- if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
- isSystem = true;
- }
- } catch (PackageManager.NameNotFoundException e) {
- // pkg doesn't even exist?
- Log.w(LOG_TAG, "Package " + pkg + " not found", e);
- return context.getString(R.string.write_settings_off);
- }
-
- AppOpsManager appOpsManager = (AppOpsManager) context.getSystemService(Context
- .APP_OPS_SERVICE);
- List packageOps = appOpsManager.getPackagesForOps(
- APP_OPS_OP_CODE);
- if (packageOps == null) {
- return context.getString(R.string.write_settings_off);
- }
-
- int uid = isSystem ? 0 : -1;
- for (AppOpsManager.PackageOps packageOp : packageOps) {
- if (pkg.equals(packageOp.getPackageName())) {
- uid = packageOp.getUid();
- break;
- }
- }
-
- if (uid == -1) {
- return context.getString(R.string.write_settings_off);
- }
-
- int mode = appOpsManager.noteOpNoThrow(AppOpsManager.OP_WRITE_SETTINGS, uid, pkg);
- return context.getString((mode == AppOpsManager.MODE_ALLOWED) ?
- R.string.write_settings_on : R.string.write_settings_off);
+ return context.getString(writeSettingsState.isPermissible()
+ ? R.string.app_permission_summary_allowed
+ : R.string.app_permission_summary_not_allowed);
}
}
diff --git a/src/com/android/settings/datausage/BillingCyclePreference.java b/src/com/android/settings/datausage/BillingCyclePreference.java
deleted file mode 100644
index beb0ba14530..00000000000
--- a/src/com/android/settings/datausage/BillingCyclePreference.java
+++ /dev/null
@@ -1,91 +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.datausage;
-
-import android.content.Context;
-import android.content.Intent;
-import android.net.NetworkPolicy;
-import android.net.NetworkTemplate;
-import android.os.Bundle;
-import android.os.RemoteException;
-import android.support.v7.preference.Preference;
-import android.util.AttributeSet;
-
-import com.android.internal.logging.nano.MetricsProto;
-import com.android.settings.R;
-import com.android.settings.Utils;
-import com.android.settings.datausage.CellDataPreference.DataStateListener;
-
-public class BillingCyclePreference extends Preference implements TemplatePreference {
-
- private NetworkTemplate mTemplate;
- private NetworkServices mServices;
- private NetworkPolicy mPolicy;
- private int mSubId;
-
- public BillingCyclePreference(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- public void onAttached() {
- super.onAttached();
- mListener.setListener(true, mSubId, getContext());
- }
-
- @Override
- public void onDetached() {
- mListener.setListener(false, mSubId, getContext());
- super.onDetached();
- }
-
- @Override
- public void setTemplate(NetworkTemplate template, int subId,
- NetworkServices services) {
- mTemplate = template;
- mSubId = subId;
- mServices = services;
- mPolicy = services.mPolicyEditor.getPolicy(mTemplate);
- setSummary(getContext().getString(R.string.billing_cycle_fragment_summary, mPolicy != null
- ? mPolicy.cycleDay
- : "1"));
- setIntent(getIntent());
- }
-
- private void updateEnabled() {
- try {
- setEnabled(mPolicy != null && mServices.mNetworkService.isBandwidthControlEnabled()
- && mServices.mTelephonyManager.getDataEnabled(mSubId)
- && mServices.mUserManager.isAdminUser());
- } catch (RemoteException e) {
- setEnabled(false);
- }
- }
-
- @Override
- public Intent getIntent() {
- Bundle args = new Bundle();
- args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mTemplate);
- return Utils.onBuildStartFragmentIntent(getContext(), BillingCycleSettings.class.getName(),
- args, null, 0, getTitle(), false, MetricsProto.MetricsEvent.VIEW_UNKNOWN);
- }
-
- private final DataStateListener mListener = new DataStateListener() {
- @Override
- public void onChange(boolean selfChange) {
- updateEnabled();
- }
- };
-}
diff --git a/src/com/android/settings/development/DevelopmentSettingsDisabledActivity.java b/src/com/android/settings/development/DevelopmentSettingsDisabledActivity.java
index 31f7a2018e1..9ea24da2ce9 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDisabledActivity.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDisabledActivity.java
@@ -18,11 +18,15 @@ package com.android.settings.development;
import android.app.Activity;
import android.os.Bundle;
+import android.widget.Toast;
+
+import com.android.settings.R;
public class DevelopmentSettingsDisabledActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ Toast.makeText(this, R.string.dev_settings_disabled_warning, Toast.LENGTH_SHORT).show();
finish();
}
}
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 75ac350129e..ce8135c33df 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -133,8 +133,7 @@ public final class SearchIndexableResources {
R.xml.battery_saver_settings, R.drawable.ic_settings_battery);
addIndex(AdvancedAppSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_applications);
addIndex(ManageAssist.class, NO_DATA_RES_ID, R.drawable.ic_settings_applications);
- addIndex(SpecialAccessSettings.class,
- R.xml.special_access, R.drawable.ic_settings_applications);
+ addIndex(SpecialAccessSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_applications);
addIndex(UserSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_multiuser);
addIndex(AssistGestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
addIndex(PickupGestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
diff --git a/tests/robotests/assets/grandfather_not_implementing_indexable b/tests/robotests/assets/grandfather_not_implementing_indexable
index 9ecc0b44888..544b2c7cbdd 100644
--- a/tests/robotests/assets/grandfather_not_implementing_indexable
+++ b/tests/robotests/assets/grandfather_not_implementing_indexable
@@ -47,7 +47,6 @@ com.android.settings.notification.ZenModeScheduleRuleSettings
com.android.settings.datausage.BillingCycleSettings
com.android.settings.notification.NotificationStation
com.android.settings.print.PrintJobSettingsFragment
-com.android.settings.applications.SpecialAccessSettings
com.android.settings.accessibility.ToggleScreenReaderPreferenceFragmentForSetupWizard
com.android.settings.accessibility.ToggleSelectToSpeakPreferenceFragmentForSetupWizard
com.android.settings.accounts.AccountSyncSettings
diff --git a/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDisabledActivityTest.java b/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDisabledActivityTest.java
new file mode 100644
index 00000000000..67733aa92c8
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDisabledActivityTest.java
@@ -0,0 +1,44 @@
+/*
+ * 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 com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.Robolectric;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowToast;
+
+import static com.google.common.truth.Truth.assertThat;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DevelopmentSettingsDisabledActivityTest {
+
+ @Test
+ public void launchActivity_shouldShowToast() {
+ Robolectric.setupActivity(DevelopmentSettingsDisabledActivity.class);
+
+ assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
+ RuntimeEnvironment.application.getString(R.string.dev_settings_disabled_warning));
+ }
+}