Jason Monk | 295a337 | 2015-05-11 16:57:15 -0400 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2015 The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | package com.android.systemui.tuner; |
| 17 | |
Fan Zhang | 7d0d54e | 2018-07-19 16:59:33 -0700 | [diff] [blame] | 18 | import android.app.Activity; |
Jason Monk | 87ccd55 | 2015-12-11 21:39:54 -0500 | [diff] [blame] | 19 | import android.app.Fragment; |
| 20 | import android.app.FragmentTransaction; |
Jason Monk | 295a337 | 2015-05-11 16:57:15 -0400 | [diff] [blame] | 21 | import android.os.Bundle; |
Jason Monk | 87ccd55 | 2015-12-11 21:39:54 -0500 | [diff] [blame] | 22 | import android.util.Log; |
Jason Monk | 790442e | 2017-02-13 17:49:39 -0500 | [diff] [blame] | 23 | import android.view.MenuItem; |
Fan Zhang | 7d0d54e | 2018-07-19 16:59:33 -0700 | [diff] [blame] | 24 | import android.view.Window; |
| 25 | import android.view.WindowManager; |
| 26 | import android.widget.Toolbar; |
Jason Monk | 295a337 | 2015-05-11 16:57:15 -0400 | [diff] [blame] | 27 | |
Fan Zhang | 7d0d54e | 2018-07-19 16:59:33 -0700 | [diff] [blame] | 28 | import androidx.preference.Preference; |
| 29 | import androidx.preference.PreferenceFragment; |
| 30 | import androidx.preference.PreferenceScreen; |
| 31 | |
Jason Monk | de850bb | 2017-02-01 19:26:30 -0500 | [diff] [blame] | 32 | import com.android.systemui.Dependency; |
Jason Monk | 87ccd55 | 2015-12-11 21:39:54 -0500 | [diff] [blame] | 33 | import com.android.systemui.R; |
Dave Mankoff | 037d9fc | 2019-08-09 11:08:52 -0400 | [diff] [blame] | 34 | import com.android.systemui.SystemUIFactory; |
Jason Monk | 790442e | 2017-02-13 17:49:39 -0500 | [diff] [blame] | 35 | import com.android.systemui.fragments.FragmentService; |
Jason Monk | 87ccd55 | 2015-12-11 21:39:54 -0500 | [diff] [blame] | 36 | |
Fan Zhang | 7d0d54e | 2018-07-19 16:59:33 -0700 | [diff] [blame] | 37 | public class TunerActivity extends Activity implements |
Jason Monk | 87ccd55 | 2015-12-11 21:39:54 -0500 | [diff] [blame] | 38 | PreferenceFragment.OnPreferenceStartFragmentCallback, |
| 39 | PreferenceFragment.OnPreferenceStartScreenCallback { |
Jason Monk | 295a337 | 2015-05-11 16:57:15 -0400 | [diff] [blame] | 40 | |
Jason Monk | a9f1288 | 2016-01-24 12:03:19 -0500 | [diff] [blame] | 41 | private static final String TAG_TUNER = "tuner"; |
| 42 | |
Jason Monk | 295a337 | 2015-05-11 16:57:15 -0400 | [diff] [blame] | 43 | protected void onCreate(Bundle savedInstanceState) { |
| 44 | super.onCreate(savedInstanceState); |
Fan Zhang | 7d0d54e | 2018-07-19 16:59:33 -0700 | [diff] [blame] | 45 | |
| 46 | getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); |
| 47 | requestWindowFeature(Window.FEATURE_NO_TITLE); |
| 48 | setContentView(R.layout.tuner_activity); |
| 49 | Toolbar toolbar = findViewById(R.id.action_bar); |
| 50 | if (toolbar != null) { |
| 51 | setActionBar(toolbar); |
| 52 | } |
| 53 | |
Dave Mankoff | 037d9fc | 2019-08-09 11:08:52 -0400 | [diff] [blame] | 54 | Dependency.initDependencies(SystemUIFactory.getInstance().getRootComponent()); |
Jason Monk | 295a337 | 2015-05-11 16:57:15 -0400 | [diff] [blame] | 55 | |
Jason Monk | a9f1288 | 2016-01-24 12:03:19 -0500 | [diff] [blame] | 56 | if (getFragmentManager().findFragmentByTag(TAG_TUNER) == null) { |
Jason Monk | 52c66d7 | 2016-04-13 11:01:19 -0400 | [diff] [blame] | 57 | final String action = getIntent().getAction(); |
| 58 | boolean showDemoMode = action != null && action.equals( |
Jason Monk | 98d7c7a | 2016-04-12 13:08:31 -0400 | [diff] [blame] | 59 | "com.android.settings.action.DEMO_MODE"); |
Justin Klaassen | e81fa85 | 2016-06-21 08:55:55 -0700 | [diff] [blame] | 60 | final PreferenceFragment fragment = showDemoMode ? new DemoModeFragment() |
Jason Monk | 98d7c7a | 2016-04-12 13:08:31 -0400 | [diff] [blame] | 61 | : new TunerFragment(); |
Jason Monk | 76c67aa | 2016-02-19 14:49:42 -0500 | [diff] [blame] | 62 | getFragmentManager().beginTransaction().replace(R.id.content_frame, |
Jason Monk | 98d7c7a | 2016-04-12 13:08:31 -0400 | [diff] [blame] | 63 | fragment, TAG_TUNER).commit(); |
Jason Monk | a9f1288 | 2016-01-24 12:03:19 -0500 | [diff] [blame] | 64 | } |
Jason Monk | 295a337 | 2015-05-11 16:57:15 -0400 | [diff] [blame] | 65 | } |
| 66 | |
Jason Monk | 87ccd55 | 2015-12-11 21:39:54 -0500 | [diff] [blame] | 67 | @Override |
Jason Monk | 790442e | 2017-02-13 17:49:39 -0500 | [diff] [blame] | 68 | protected void onDestroy() { |
| 69 | super.onDestroy(); |
| 70 | Dependency.destroy(FragmentService.class, s -> s.destroyAll()); |
| 71 | Dependency.clearDependencies(); |
| 72 | } |
| 73 | |
| 74 | @Override |
| 75 | public boolean onMenuItemSelected(int featureId, MenuItem item) { |
| 76 | if (item.getItemId() == android.R.id.home) { |
| 77 | onBackPressed(); |
| 78 | return true; |
| 79 | } |
| 80 | return super.onMenuItemSelected(featureId, item); |
| 81 | } |
| 82 | |
| 83 | @Override |
Jason Monk | 5732df4 | 2016-02-24 16:24:55 -0500 | [diff] [blame] | 84 | public void onBackPressed() { |
| 85 | if (!getFragmentManager().popBackStackImmediate()) { |
| 86 | super.onBackPressed(); |
| 87 | } |
| 88 | } |
| 89 | |
| 90 | @Override |
Jason Monk | 87ccd55 | 2015-12-11 21:39:54 -0500 | [diff] [blame] | 91 | public boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref) { |
| 92 | try { |
| 93 | Class<?> cls = Class.forName(pref.getFragment()); |
| 94 | Fragment fragment = (Fragment) cls.newInstance(); |
Jason Monk | 790442e | 2017-02-13 17:49:39 -0500 | [diff] [blame] | 95 | final Bundle b = new Bundle(1); |
| 96 | b.putString(PreferenceFragment.ARG_PREFERENCE_ROOT, pref.getKey()); |
| 97 | fragment.setArguments(b); |
Jason Monk | 87ccd55 | 2015-12-11 21:39:54 -0500 | [diff] [blame] | 98 | FragmentTransaction transaction = getFragmentManager().beginTransaction(); |
Jason Monk | f0c6f64 | 2016-01-20 22:24:50 -0500 | [diff] [blame] | 99 | setTitle(pref.getTitle()); |
Jason Monk | 87ccd55 | 2015-12-11 21:39:54 -0500 | [diff] [blame] | 100 | transaction.replace(R.id.content_frame, fragment); |
| 101 | transaction.addToBackStack("PreferenceFragment"); |
| 102 | transaction.commit(); |
| 103 | return true; |
| 104 | } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { |
| 105 | Log.d("TunerActivity", "Problem launching fragment", e); |
| 106 | return false; |
| 107 | } |
| 108 | } |
| 109 | |
| 110 | @Override |
| 111 | public boolean onPreferenceStartScreen(PreferenceFragment caller, PreferenceScreen pref) { |
| 112 | FragmentTransaction transaction = getFragmentManager().beginTransaction(); |
| 113 | SubSettingsFragment fragment = new SubSettingsFragment(); |
| 114 | final Bundle b = new Bundle(1); |
| 115 | b.putString(PreferenceFragment.ARG_PREFERENCE_ROOT, pref.getKey()); |
| 116 | fragment.setArguments(b); |
| 117 | fragment.setTargetFragment(caller, 0); |
| 118 | transaction.replace(R.id.content_frame, fragment); |
| 119 | transaction.addToBackStack("PreferenceFragment"); |
| 120 | transaction.commit(); |
| 121 | return true; |
| 122 | } |
| 123 | |
| 124 | public static class SubSettingsFragment extends PreferenceFragment { |
Jason Monk | ae39cb9 | 2017-03-31 11:30:14 -0400 | [diff] [blame] | 125 | private PreferenceScreen mParentScreen; |
| 126 | |
Jason Monk | 87ccd55 | 2015-12-11 21:39:54 -0500 | [diff] [blame] | 127 | @Override |
| 128 | public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { |
Jason Monk | ae39cb9 | 2017-03-31 11:30:14 -0400 | [diff] [blame] | 129 | mParentScreen = |
| 130 | (PreferenceScreen) ((PreferenceFragment) getTargetFragment()) |
| 131 | .getPreferenceScreen().findPreference(rootKey); |
| 132 | PreferenceScreen screen = |
| 133 | getPreferenceManager().createPreferenceScreen( |
| 134 | getPreferenceManager().getContext()); |
| 135 | setPreferenceScreen(screen); |
| 136 | // Copy all the preferences over to this screen so they go into the attached state. |
| 137 | while (mParentScreen.getPreferenceCount() > 0) { |
| 138 | Preference p = mParentScreen.getPreference(0); |
| 139 | mParentScreen.removePreference(p); |
| 140 | screen.addPreference(p); |
| 141 | } |
| 142 | } |
| 143 | |
| 144 | @Override |
| 145 | public void onDestroy() { |
| 146 | super.onDestroy(); |
| 147 | // Copy all the preferences back so we don't lose them. |
| 148 | PreferenceScreen screen = getPreferenceScreen(); |
| 149 | while (screen.getPreferenceCount() > 0) { |
| 150 | Preference p = screen.getPreference(0); |
| 151 | screen.removePreference(p); |
| 152 | mParentScreen.addPreference(p); |
| 153 | } |
Jason Monk | 87ccd55 | 2015-12-11 21:39:54 -0500 | [diff] [blame] | 154 | } |
| 155 | } |
| 156 | |
Jason Monk | 295a337 | 2015-05-11 16:57:15 -0400 | [diff] [blame] | 157 | } |