blob: 97507900e26987ccfced86d61c7988f33bda67de [file] [log] [blame]
Jason Monk295a3372015-05-11 16:57:15 -04001/*
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 */
16package com.android.systemui.tuner;
17
Fan Zhang7d0d54e2018-07-19 16:59:33 -070018import android.app.Activity;
Jason Monk87ccd552015-12-11 21:39:54 -050019import android.app.Fragment;
20import android.app.FragmentTransaction;
Jason Monk295a3372015-05-11 16:57:15 -040021import android.os.Bundle;
Jason Monk87ccd552015-12-11 21:39:54 -050022import android.util.Log;
Jason Monk790442e2017-02-13 17:49:39 -050023import android.view.MenuItem;
Fan Zhang7d0d54e2018-07-19 16:59:33 -070024import android.view.Window;
25import android.view.WindowManager;
26import android.widget.Toolbar;
Jason Monk295a3372015-05-11 16:57:15 -040027
Fan Zhang7d0d54e2018-07-19 16:59:33 -070028import androidx.preference.Preference;
29import androidx.preference.PreferenceFragment;
30import androidx.preference.PreferenceScreen;
31
Jason Monkde850bb2017-02-01 19:26:30 -050032import com.android.systemui.Dependency;
Jason Monk87ccd552015-12-11 21:39:54 -050033import com.android.systemui.R;
Dave Mankoff037d9fc2019-08-09 11:08:52 -040034import com.android.systemui.SystemUIFactory;
Jason Monk790442e2017-02-13 17:49:39 -050035import com.android.systemui.fragments.FragmentService;
Jason Monk87ccd552015-12-11 21:39:54 -050036
Fan Zhang7d0d54e2018-07-19 16:59:33 -070037public class TunerActivity extends Activity implements
Jason Monk87ccd552015-12-11 21:39:54 -050038 PreferenceFragment.OnPreferenceStartFragmentCallback,
39 PreferenceFragment.OnPreferenceStartScreenCallback {
Jason Monk295a3372015-05-11 16:57:15 -040040
Jason Monka9f12882016-01-24 12:03:19 -050041 private static final String TAG_TUNER = "tuner";
42
Jason Monk295a3372015-05-11 16:57:15 -040043 protected void onCreate(Bundle savedInstanceState) {
44 super.onCreate(savedInstanceState);
Fan Zhang7d0d54e2018-07-19 16:59:33 -070045
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 Mankoff037d9fc2019-08-09 11:08:52 -040054 Dependency.initDependencies(SystemUIFactory.getInstance().getRootComponent());
Jason Monk295a3372015-05-11 16:57:15 -040055
Jason Monka9f12882016-01-24 12:03:19 -050056 if (getFragmentManager().findFragmentByTag(TAG_TUNER) == null) {
Jason Monk52c66d72016-04-13 11:01:19 -040057 final String action = getIntent().getAction();
58 boolean showDemoMode = action != null && action.equals(
Jason Monk98d7c7a2016-04-12 13:08:31 -040059 "com.android.settings.action.DEMO_MODE");
Justin Klaassene81fa852016-06-21 08:55:55 -070060 final PreferenceFragment fragment = showDemoMode ? new DemoModeFragment()
Jason Monk98d7c7a2016-04-12 13:08:31 -040061 : new TunerFragment();
Jason Monk76c67aa2016-02-19 14:49:42 -050062 getFragmentManager().beginTransaction().replace(R.id.content_frame,
Jason Monk98d7c7a2016-04-12 13:08:31 -040063 fragment, TAG_TUNER).commit();
Jason Monka9f12882016-01-24 12:03:19 -050064 }
Jason Monk295a3372015-05-11 16:57:15 -040065 }
66
Jason Monk87ccd552015-12-11 21:39:54 -050067 @Override
Jason Monk790442e2017-02-13 17:49:39 -050068 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 Monk5732df42016-02-24 16:24:55 -050084 public void onBackPressed() {
85 if (!getFragmentManager().popBackStackImmediate()) {
86 super.onBackPressed();
87 }
88 }
89
90 @Override
Jason Monk87ccd552015-12-11 21:39:54 -050091 public boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref) {
92 try {
93 Class<?> cls = Class.forName(pref.getFragment());
94 Fragment fragment = (Fragment) cls.newInstance();
Jason Monk790442e2017-02-13 17:49:39 -050095 final Bundle b = new Bundle(1);
96 b.putString(PreferenceFragment.ARG_PREFERENCE_ROOT, pref.getKey());
97 fragment.setArguments(b);
Jason Monk87ccd552015-12-11 21:39:54 -050098 FragmentTransaction transaction = getFragmentManager().beginTransaction();
Jason Monkf0c6f642016-01-20 22:24:50 -050099 setTitle(pref.getTitle());
Jason Monk87ccd552015-12-11 21:39:54 -0500100 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 Monkae39cb92017-03-31 11:30:14 -0400125 private PreferenceScreen mParentScreen;
126
Jason Monk87ccd552015-12-11 21:39:54 -0500127 @Override
128 public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
Jason Monkae39cb92017-03-31 11:30:14 -0400129 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 Monk87ccd552015-12-11 21:39:54 -0500154 }
155 }
156
Jason Monk295a3372015-05-11 16:57:15 -0400157}