Add developer options for grid change for Styles

Bug: 118758696

Change-Id: I66cd36cda495d339e0c2550f0957e3fbcddca477
This commit is contained in:
Hyunyoung Song 2019-05-15 14:01:30 -07:00
parent dedda05568
commit 58de5de42a
7 changed files with 65 additions and 17 deletions

View File

@ -154,13 +154,13 @@
<!--
The content provider for exposing various launcher grid options.
TODO: Enable when all apps columns are correct
TODO: Add proper permissions
-->
<provider
android:name="com.android.launcher3.graphics.GridOptionsProvider"
android:authorities="${packageName}.grid_control"
android:enabled="false"
android:exported="true" />
-->
<!--
The settings activity. To extend point settings_fragment_name to appropriate fragment class

View File

@ -44,6 +44,12 @@
android:defaultValue="@bool/allow_rotation"
android:persistent="true" />
<SwitchPreference
android:key="pref_grid_options"
android:title="Enable grid options"
android:defaultValue="false"
android:persistent="true" />
<androidx.preference.PreferenceScreen
android:key="pref_developer_options"
android:persistent="false"

View File

@ -50,6 +50,7 @@ import android.os.Handler;
import android.os.Message;
import android.os.PowerManager;
import android.os.TransactionTooLargeException;
import android.provider.Settings;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
@ -71,6 +72,7 @@ import com.android.launcher3.icons.LauncherIcons;
import com.android.launcher3.shortcuts.DeepShortcutManager;
import com.android.launcher3.shortcuts.ShortcutKey;
import com.android.launcher3.util.IntArray;
import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.views.Transposable;
import com.android.launcher3.widget.PendingAddShortcutInfo;
@ -133,6 +135,11 @@ public final class Utilities {
Build.TYPE.toLowerCase(Locale.ROOT).contains("debug") ||
Build.TYPE.toLowerCase(Locale.ROOT).equals("eng");
public static boolean isDevelopersOptionsEnabled(Context context) {
return Settings.Global.getInt(context.getApplicationContext().getContentResolver(),
Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
}
// An intent extra to indicate the horizontal scroll of the wallpaper.
public static final String EXTRA_WALLPAPER_OFFSET = "com.android.launcher3.WALLPAPER_OFFSET";
public static final String EXTRA_WALLPAPER_FLAVOR = "com.android.launcher3.WALLPAPER_FLAVOR";
@ -160,6 +167,12 @@ public final class Utilities {
return Log.isLoggable(propertyName, Log.VERBOSE);
}
public static boolean existsStyleWallpapers(Context context) {
ResolveInfo ri = context.getPackageManager().resolveActivity(
PackageManagerHelper.getStyleWallpapersIntent(context), 0);
return ri != null;
}
/**
* Given a coordinate relative to the descendant, find the coordinate in a parent view's
* coordinates.

View File

@ -58,9 +58,7 @@ abstract class BaseFlags {
}
public static boolean showFlagTogglerUi(Context context) {
return Utilities.IS_DEBUG_DEVICE &&
Settings.Global.getInt(context.getApplicationContext().getContentResolver(),
Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
return Utilities.IS_DEBUG_DEVICE && Utilities.isDevelopersOptionsEnabled(context);
}
public static final boolean IS_DOGFOOD_BUILD = false;

View File

@ -24,6 +24,10 @@ import static com.android.launcher3.util.SecureSettingsObserver.newNotificationS
import android.app.Activity;
import android.app.DialogFragment;
import android.app.Fragment;
import android.content.ComponentName;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
@ -32,6 +36,7 @@ import com.android.launcher3.LauncherFiles;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.graphics.GridOptionsProvider;
import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper;
import com.android.launcher3.util.SecureSettingsObserver;
@ -47,7 +52,8 @@ import androidx.recyclerview.widget.RecyclerView;
* Settings activity for Launcher. Currently implements the following setting: Allow rotation
*/
public class SettingsActivity extends Activity
implements OnPreferenceStartFragmentCallback, OnPreferenceStartScreenCallback {
implements OnPreferenceStartFragmentCallback, OnPreferenceStartScreenCallback,
SharedPreferences.OnSharedPreferenceChangeListener{
private static final String DEVELOPER_OPTIONS_KEY = "pref_developer_options";
private static final String FLAGS_PREFERENCE_KEY = "flag_toggler";
@ -61,6 +67,8 @@ public class SettingsActivity extends Activity
private static final int DELAY_HIGHLIGHT_DURATION_MILLIS = 600;
public static final String SAVE_HIGHLIGHTED_KEY = "android:preference_highlighted";
public static final String GRID_OPTIONS_PREFERENCE_KEY = "pref_grid_options";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -79,6 +87,28 @@ public class SettingsActivity extends Activity
.replace(android.R.id.content, f)
.commit();
}
Utilities.getPrefs(getApplicationContext()).registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (GRID_OPTIONS_PREFERENCE_KEY.equals(key)) {
final ComponentName cn = new ComponentName(getApplicationContext(),
GridOptionsProvider.class);
Context c = getApplicationContext();
int oldValue = c.getPackageManager().getComponentEnabledSetting(cn);
int newValue;
if (Utilities.getPrefs(c).getBoolean(GRID_OPTIONS_PREFERENCE_KEY, false)) {
newValue = PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
} else {
newValue = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
}
if (oldValue != newValue) {
c.getPackageManager().setComponentEnabledSetting(cn, newValue,
PackageManager.DONT_KILL_APP);
}
}
}
private boolean startFragment(String fragment, Bundle args, String key) {
@ -200,6 +230,10 @@ public class SettingsActivity extends Activity
// Show if plugins are enabled or flag UI is enabled.
return FeatureFlags.showFlagTogglerUi(getContext()) ||
PluginManagerWrapper.hasPlugins(getContext());
case GRID_OPTIONS_PREFERENCE_KEY:
return Utilities.isDevelopersOptionsEnabled(getContext()) &&
Utilities.IS_DEBUG_DEVICE &&
Utilities.existsStyleWallpapers(getContext());
}
return true;

View File

@ -172,6 +172,11 @@ public class PackageManagerHelper {
}
}
public static Intent getStyleWallpapersIntent(Context context) {
return new Intent(Intent.ACTION_SET_WALLPAPER).setComponent(
new ComponentName(context.getString(R.string.wallpaper_picker_package),
"com.android.customization.picker.CustomizationPickerActivity"));
}
/**
* Starts the details activity for {@code info}

View File

@ -152,9 +152,9 @@ public class OptionsPopupView extends ArrowPopup
RectF target = new RectF(x - halfSize, y - halfSize, x + halfSize, y + halfSize);
ArrayList<OptionItem> options = new ArrayList<>();
int resString = existsStyleWallpapers(launcher) ?
int resString = Utilities.existsStyleWallpapers(launcher) ?
R.string.styles_wallpaper_button_text : R.string.wallpaper_button_text;
int resDrawable = existsStyleWallpapers(launcher) ?
int resDrawable = Utilities.existsStyleWallpapers(launcher) ?
R.drawable.ic_palette : R.drawable.ic_wallpaper;
options.add(new OptionItem(resString, resDrawable,
ControlType.WALLPAPER_BUTTON, OptionsPopupView::startWallpaperPicker));
@ -168,14 +168,6 @@ public class OptionsPopupView extends ArrowPopup
show(launcher, target, options);
}
private static boolean existsStyleWallpapers(Launcher launcher) {
Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER);
intent.setComponent(new ComponentName(launcher.getString(R.string.wallpaper_picker_package),
"com.android.customization.picker.CustomizationPickerActivity"));
ResolveInfo ri = launcher.getPackageManager().resolveActivity(intent, 0);
return ri != null;
}
public static boolean onWidgetsClicked(View view) {
return openWidgets(Launcher.getLauncher(view.getContext()));
}
@ -212,7 +204,7 @@ public class OptionsPopupView extends ArrowPopup
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
.putExtra(EXTRA_WALLPAPER_OFFSET,
launcher.getWorkspace().getWallpaperOffsetForCenterPage());
if (!existsStyleWallpapers(launcher)) {
if (!Utilities.existsStyleWallpapers(launcher)) {
intent.putExtra(EXTRA_WALLPAPER_FLAVOR, "wallpaper_only");
} else {
intent.putExtra(EXTRA_WALLPAPER_FLAVOR, "focus_wallpaper");