summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/QuickSettingsActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/QuickSettingsActivity.java')
-rw-r--r--src/com/android/launcher3/QuickSettingsActivity.java202
1 files changed, 202 insertions, 0 deletions
diff --git a/src/com/android/launcher3/QuickSettingsActivity.java b/src/com/android/launcher3/QuickSettingsActivity.java
new file mode 100644
index 000000000..0304ccb05
--- /dev/null
+++ b/src/com/android/launcher3/QuickSettingsActivity.java
@@ -0,0 +1,202 @@
+package com.android.launcher3;
+
+import android.app.AlarmManager;
+import android.app.AlertDialog;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.PreferenceFragment;
+import android.support.v7.app.AppCompatActivity;
+import android.util.Pair;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.NumberPicker;
+
+import com.android.launcher3.icons.IconsHandler;
+
+public class QuickSettingsActivity extends AppCompatActivity {
+ private static final String KEY_GRID_SIZE = "pref_grid_size";
+ public static final String KEY_ICON_PACK = "pref_icon_pack";
+
+ @Override
+ protected void onCreate(Bundle savedInstance) {
+ super.onCreate(savedInstance);
+
+ setContentView(R.layout.activity_quick_settings);
+
+ View touchOutSide = findViewById(R.id.quick_settings_touch_outside);
+ touchOutSide.setOnClickListener(v -> onBackPressed());
+
+ getFragmentManager().beginTransaction()
+ .replace(R.id.quick_settings_content, new QuickSettingsFragment())
+ .commit();
+ }
+
+
+ public static class QuickSettingsFragment extends PreferenceFragment
+ implements SharedPreferences.OnSharedPreferenceChangeListener {
+ private Preference mGridPref;
+ private Preference mIconPackPref;
+
+ private SharedPreferences mPrefs;
+ private IconsHandler mIconsHandler;
+ private PackageManager mPackageManager;
+
+ private String mDefaultIconPack;
+ private boolean mShouldRestart = false;
+
+ @Override
+ public void onCreate(Bundle savedInstance) {
+ super.onCreate(savedInstance);
+ getPreferenceManager().setSharedPreferencesName(LauncherFiles.SHARED_PREFERENCES_KEY);
+ addPreferencesFromResource(R.xml.launcher_quick_preferences);
+
+ mPrefs = Utilities.getPrefs(getActivity().getApplicationContext());
+ mPrefs.registerOnSharedPreferenceChangeListener(this);
+
+ mIconPackPref = findPreference(KEY_ICON_PACK);
+ mIconPackPref.setOnPreferenceClickListener(preference -> {
+ mIconsHandler.showDialog(getActivity());
+ return true;
+ });
+
+ mPackageManager = getActivity().getPackageManager();
+ mDefaultIconPack = mPrefs.getString(KEY_ICON_PACK, getString(R.string.icon_pack_default));
+ mIconsHandler = IconCache.getIconsHandler(getActivity().getApplicationContext());
+ updateIconPackEntry();
+
+ mGridPref = findPreference(KEY_GRID_SIZE);
+ if (mGridPref != null) {
+ mGridPref.setOnPreferenceClickListener(preference -> {
+ setCustomGridSize();
+ return true;
+ });
+
+ mGridPref.setSummary(mPrefs.getString(KEY_GRID_SIZE, getDefaulGridSize()));
+ }
+
+ Preference more = findPreference("pref_more");
+ if (more != null) {
+ more.setOnPreferenceClickListener(preference -> {
+ Intent intent = new Intent(getActivity(), SettingsActivity.class);
+ getActivity().startActivity(intent);
+ // Don't kill the upcoming settings activity
+ mShouldRestart = false;
+ getActivity().finish();
+ return true;
+ });
+ }
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ mIconsHandler.hideDialog();
+ }
+
+ @Override
+ public void onDestroy() {
+ mPrefs.unregisterOnSharedPreferenceChangeListener(this);
+
+ if (mShouldRestart) {
+ triggerRestart();
+ }
+ super.onDestroy();
+ }
+
+
+ @Override
+ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
+ switch (key) {
+ case KEY_GRID_SIZE:
+ mGridPref.setSummary(mPrefs.getString(KEY_GRID_SIZE, getDefaulGridSize()));
+ mShouldRestart = true;
+ break;
+ case KEY_ICON_PACK:
+ updateIconPackEntry();
+ break;
+ }
+ }
+
+ private void setCustomGridSize() {
+ int minValue = 3;
+ int maxValue = 9;
+
+ String storedValue = mPrefs.getString(KEY_GRID_SIZE, "4x5");
+ Pair<Integer, Integer> currentValues = Utilities.extractCustomGrid(storedValue);
+
+ LayoutInflater inflater = (LayoutInflater)
+ getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ if (inflater == null) {
+ return;
+ }
+ View contentView = inflater.inflate(R.layout.dialog_custom_grid, null);
+ NumberPicker columnPicker = (NumberPicker)
+ contentView.findViewById(R.id.dialog_grid_column);
+ NumberPicker rowPicker = (NumberPicker)
+ contentView.findViewById(R.id.dialog_grid_row);
+
+ columnPicker.setMinValue(minValue);
+ rowPicker.setMinValue(minValue);
+ columnPicker.setMaxValue(maxValue);
+ rowPicker.setMaxValue(maxValue);
+ columnPicker.setValue(currentValues.first);
+ rowPicker.setValue(currentValues.second);
+
+ new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.grid_size_text)
+ .setView(contentView)
+ .setPositiveButton(R.string.grid_size_custom_positive, (dialog, i) -> {
+ String newValues = Utilities.getGridValue(columnPicker.getValue(),
+ rowPicker.getValue());
+ mPrefs.edit().putString(KEY_GRID_SIZE, newValues).apply();
+ })
+ .setNegativeButton(android.R.string.cancel, null)
+ .show();
+ }
+
+ private String getDefaulGridSize() {
+ InvariantDeviceProfile profile = new InvariantDeviceProfile(getActivity());
+ return Utilities.getGridValue(profile.numColumns, profile.numRows);
+ }
+
+ private void updateIconPackEntry() {
+ ApplicationInfo info = null;
+ String iconPack = mPrefs.getString(KEY_ICON_PACK, mDefaultIconPack);
+ String summary = getString(R.string.icon_pack_system);
+ Drawable icon = getResources().getDrawable(android.R.mipmap.sym_def_app_icon);
+
+ if (!mIconsHandler.isDefaultIconPack()) {
+ try {
+ info = mPackageManager.getApplicationInfo(iconPack, PackageManager.GET_META_DATA);
+ } catch (PackageManager.NameNotFoundException ignored) {
+ }
+ if (info != null) {
+ summary = mPackageManager.getApplicationLabel(info).toString();
+ icon = mPackageManager.getApplicationIcon(info);
+ }
+ }
+
+ mIconPackPref.setSummary(summary);
+ mIconPackPref.setIcon(icon);
+ }
+
+ private void triggerRestart() {
+ Context context = getActivity().getApplicationContext();
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.addCategory(Intent.CATEGORY_HOME);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ PendingIntent pi = PendingIntent.getActivity(context, 41, intent,
+ PendingIntent.FLAG_CANCEL_CURRENT);
+ AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+ manager.set(AlarmManager.RTC, java.lang.System.currentTimeMillis() + 1, pi);
+ java.lang.System.exit(0);
+ }
+ }
+} \ No newline at end of file