diff options
| -rw-r--r-- | core/java/android/app/IUiModeManager.aidl | 7 | ||||
| -rw-r--r-- | core/java/android/app/UiModeManager.java | 15 | ||||
| -rw-r--r-- | packages/SystemUI/res/xml/other_settings.xml | 5 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/tuner/ThemePreference.java | 78 | ||||
| -rw-r--r-- | proto/src/metrics_constants.proto | 3 | ||||
| -rw-r--r-- | services/core/java/com/android/server/UiModeManagerService.java | 26 |
6 files changed, 50 insertions, 84 deletions
diff --git a/core/java/android/app/IUiModeManager.aidl b/core/java/android/app/IUiModeManager.aidl index 848464cf3823..7f0b6fb61f05 100644 --- a/core/java/android/app/IUiModeManager.aidl +++ b/core/java/android/app/IUiModeManager.aidl @@ -58,11 +58,16 @@ interface IUiModeManager { void setTheme(String theme); /** - * Gets whith theme overlays to use within /vendor/overlay. + * Gets which theme overlays to use within /vendor/overlay. */ String getTheme(); /** + * Gets the themes available in /vendor/overlay. + */ + String[] getAvailableThemes(); + + /** * Tells if UI mode is locked or not. */ boolean isUiModeLocked(); diff --git a/core/java/android/app/UiModeManager.java b/core/java/android/app/UiModeManager.java index 2572a2021e24..af41a7d5ac5d 100644 --- a/core/java/android/app/UiModeManager.java +++ b/core/java/android/app/UiModeManager.java @@ -271,6 +271,21 @@ public class UiModeManager { } /** + * Gets the valid inputs to {@link #setTheme(String)}. + * @hide + */ + public String[] getAvailableThemes() { + if (mService != null) { + try { + return mService.getAvailableThemes(); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + return null; + } + + /** * Returns the currently configured night mode. * <p> * May be one of: diff --git a/packages/SystemUI/res/xml/other_settings.xml b/packages/SystemUI/res/xml/other_settings.xml index 18cb9306b1b6..7719d5e03df0 100644 --- a/packages/SystemUI/res/xml/other_settings.xml +++ b/packages/SystemUI/res/xml/other_settings.xml @@ -23,10 +23,5 @@ android:key="power_notification_controls" android:title="@string/tuner_full_importance_settings" android:fragment="com.android.systemui.tuner.PowerNotificationControlsFragment"/> -e - <com.android.systemui.tuner.ThemePreference - android:key="theme" - android:title="@string/theme" - android:summary="%s" /> </PreferenceScreen> diff --git a/packages/SystemUI/src/com/android/systemui/tuner/ThemePreference.java b/packages/SystemUI/src/com/android/systemui/tuner/ThemePreference.java deleted file mode 100644 index a068172a2dd3..000000000000 --- a/packages/SystemUI/src/com/android/systemui/tuner/ThemePreference.java +++ /dev/null @@ -1,78 +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.systemui.tuner; - -import android.app.AlertDialog; -import android.app.UiModeManager; -import android.content.Context; -import android.os.SystemProperties; -import android.support.v7.preference.ListPreference; -import android.text.TextUtils; -import android.util.AttributeSet; - -import com.android.systemui.R; - -import libcore.util.Objects; - -import com.google.android.collect.Lists; - -import java.io.File; -import java.util.ArrayList; - -public class ThemePreference extends ListPreference { - - public ThemePreference(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - public void onAttached() { - super.onAttached(); - String def = SystemProperties.get("ro.boot.vendor.overlay.theme"); - if (TextUtils.isEmpty(def)) { - def = getContext().getString(R.string.default_theme); - } - String[] fileList = new File("/vendor/overlay").list(); - ArrayList<String> options = fileList != null - ? Lists.newArrayList(fileList) : new ArrayList<>(); - if (!options.contains(def)) { - options.add(0, def); - } - String[] list = options.toArray(new String[options.size()]); - setVisible(options.size() > 1); - setEntries(list); - setEntryValues(list); - updateValue(); - } - - private void updateValue() { - setValue(getContext().getSystemService(UiModeManager.class).getTheme()); - } - - @Override - protected void notifyChanged() { - super.notifyChanged(); - if (!Objects.equal(getValue(), - getContext().getSystemService(UiModeManager.class).getTheme())) { - new AlertDialog.Builder(getContext()) - .setTitle(R.string.change_theme_reboot) - .setPositiveButton(com.android.internal.R.string.global_action_restart, (d, i) - -> getContext().getSystemService(UiModeManager.class) - .setTheme(getValue())) - .setNegativeButton(android.R.string.cancel, (d, i) -> updateValue()) - .show(); - } - } -} diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto index 036b6c2eacf0..a4747598f4c0 100644 --- a/proto/src/metrics_constants.proto +++ b/proto/src/metrics_constants.proto @@ -3336,6 +3336,9 @@ message MetricsEvent { // OS: 8.0 TTS_SLIDERS = 815; + // ACTION: Settings -> Display -> Theme + ACTION_THEME = 816; + // ---- End O Constants, all O constants go above this line ---- // Add new aosp constants above this line. diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java index 440ac90a99d8..8f991270c941 100644 --- a/services/core/java/com/android/server/UiModeManagerService.java +++ b/services/core/java/com/android/server/UiModeManagerService.java @@ -45,12 +45,16 @@ import android.provider.Settings; import android.service.dreams.Sandman; import android.service.vr.IVrManager; import android.service.vr.IVrStateCallbacks; +import android.text.TextUtils; import android.util.Slog; import android.view.WindowManagerInternal; import android.view.WindowManagerPolicy; +import java.io.File; import java.io.FileDescriptor; import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.Collections; import com.android.internal.R; import com.android.internal.app.DisableCarModeActivity; @@ -343,6 +347,28 @@ final class UiModeManagerService extends SystemService { } @Override + public String[] getAvailableThemes() { + if (getContext().checkCallingOrSelfPermission( + android.Manifest.permission.MODIFY_THEME_OVERLAY) + != PackageManager.PERMISSION_GRANTED) { + Slog.e(TAG, "getAvailableThemes requires MODIFY_THEME_OVERLAY permission"); + return null; + } + String def = SystemProperties.get("ro.boot.vendor.overlay.theme"); + if (TextUtils.isEmpty(def)) { + def = null; + } + String[] fileList = new File("/vendor/overlay").list(); + if (fileList == null) return new String[0]; + ArrayList<String> options = new ArrayList(fileList.length + 1); + Collections.addAll(options, fileList); + if (!options.contains(def)) { + options.add(0, def); + } + return options.toArray(new String[options.size()]); + } + + @Override public int getNightMode() { synchronized (mLock) { return mNightMode; |