OSDN Git Service

0bba16c2af0249613c499c3e7ff949178490d610
[android-x86/packages-apps-Taskbar.git] / app / src / main / java / com / farmerbb / taskbar / fragment / AdvancedFragment.java
1 /* Copyright 2016 Braden Farmer
2  *
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15
16 package com.farmerbb.taskbar.fragment;
17
18 import android.annotation.SuppressLint;
19 import android.app.Activity;
20 import android.content.ActivityNotFoundException;
21 import android.content.BroadcastReceiver;
22 import android.content.ComponentName;
23 import android.content.Context;
24 import android.content.Intent;
25 import android.content.IntentFilter;
26 import android.content.SharedPreferences;
27 import android.content.pm.PackageManager;
28 import android.content.res.Configuration;
29 import android.net.Uri;
30 import android.os.Bundle;
31 import android.os.Handler;
32 import android.preference.CheckBoxPreference;
33 import android.preference.Preference;
34 import android.support.v4.content.LocalBroadcastManager;
35 import android.support.v7.app.ActionBar;
36 import android.support.v7.app.AlertDialog;
37 import android.support.v7.app.AppCompatActivity;
38 import android.view.View;
39 import android.view.inputmethod.InputMethodManager;
40 import android.widget.EditText;
41 import android.widget.LinearLayout;
42
43 import com.farmerbb.taskbar.BuildConfig;
44 import com.farmerbb.taskbar.R;
45 import com.farmerbb.taskbar.activity.ClearDataActivity;
46 import com.farmerbb.taskbar.activity.NavigationBarButtonsActivity;
47 import com.farmerbb.taskbar.activity.dark.ClearDataActivityDark;
48 import com.farmerbb.taskbar.activity.HomeActivity;
49 import com.farmerbb.taskbar.activity.KeyboardShortcutActivity;
50 import com.farmerbb.taskbar.activity.dark.NavigationBarButtonsActivityDark;
51 import com.farmerbb.taskbar.util.DependencyUtils;
52 import com.farmerbb.taskbar.util.U;
53
54 public class AdvancedFragment extends SettingsFragment implements Preference.OnPreferenceClickListener {
55
56     boolean secondScreenPrefEnabled = false;
57
58     private BroadcastReceiver homeToggleReceiver = new BroadcastReceiver() {
59         @Override
60         public void onReceive(Context context, Intent intent) {
61             SharedPreferences pref = U.getSharedPreferences(getActivity());
62             CheckBoxPreference checkBox = (CheckBoxPreference) findPreference("launcher");
63             checkBox.setChecked(pref.getBoolean("launcher", false));
64         }
65     };
66
67     @Override
68     public void onCreate(Bundle savedInstanceState) {
69         finishedLoadingPrefs = false;
70
71         super.onCreate(savedInstanceState);
72
73         // Add preferences
74         addPreferencesFromResource(R.xml.pref_advanced);
75
76         // Set OnClickListeners for certain preferences
77         findPreference("clear_pinned_apps").setOnPreferenceClickListener(this);
78         findPreference("launcher").setOnPreferenceClickListener(this);
79         findPreference("keyboard_shortcut").setOnPreferenceClickListener(this);
80         findPreference("dashboard_grid_size").setOnPreferenceClickListener(this);
81         findPreference("navigation_bar_buttons").setOnPreferenceClickListener(this);
82         findPreference("keyboard_shortcut").setSummary(DependencyUtils.getKeyboardShortcutSummary(getActivity()));
83
84         boolean isAndroidx86 = BuildConfig.APPLICATION_ID.equals(BuildConfig.ANDROIDX86_APPLICATION_ID);
85
86         if(!isAndroidx86 && U.isPlayStoreInstalled(getActivity()) && U.isPlayStoreRelease(getActivity())) {
87             findPreference("secondscreen").setOnPreferenceClickListener(this);
88             secondScreenPrefEnabled = true;
89         } else
90             getPreferenceScreen().removePreference(findPreference("secondscreen"));
91
92         if(isAndroidx86)
93             getPreferenceScreen().removePreference(findPreference("tasker_enabled"));
94
95         bindPreferenceSummaryToValue(findPreference("dashboard"));
96
97         SharedPreferences pref = U.getSharedPreferences(getActivity());
98         boolean lockHomeToggle = pref.getBoolean("launcher", false)
99                 && U.isLauncherPermanentlyEnabled(getActivity());
100
101         findPreference("launcher").setEnabled(!lockHomeToggle);
102
103         finishedLoadingPrefs = true;
104     }
105
106     @Override
107     public void onActivityCreated(Bundle savedInstanceState) {
108         super.onActivityCreated(savedInstanceState);
109
110         AppCompatActivity activity = (AppCompatActivity) getActivity();
111         activity.setTitle(R.string.pref_header_advanced);
112         ActionBar actionBar = activity.getSupportActionBar();
113         if(actionBar != null)
114             actionBar.setDisplayHomeAsUpEnabled(true);
115     }
116
117     @Override
118     public void onResume() {
119         super.onResume();
120
121         if(secondScreenPrefEnabled) {
122             findPreference("secondscreen").setTitle(
123                     U.getSecondScreenPackageName(getActivity()) == null
124                             ? R.string.pref_secondscreen_title_install
125                             : R.string.pref_secondscreen_title_open);
126         }
127
128         updateDashboardGridSize(false);
129     }
130
131     @Override
132     public void onAttach(Activity activity) {
133         super.onAttach(activity);
134
135         LocalBroadcastManager.getInstance(getActivity()).registerReceiver(homeToggleReceiver,
136                 new IntentFilter("com.farmerbb.taskbar.LAUNCHER_PREF_CHANGED"));
137     }
138
139     @Override
140     public void onDetach() {
141         LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(homeToggleReceiver);
142
143         super.onDetach();
144     }
145
146     @SuppressLint("SetTextI18n")
147     @Override
148     public boolean onPreferenceClick(final Preference p) {
149         final SharedPreferences pref = U.getSharedPreferences(getActivity());
150
151         switch(p.getKey()) {
152             case "clear_pinned_apps":
153                 Intent clearIntent = null;
154
155                 switch(pref.getString("theme", "light")) {
156                     case "light":
157                         clearIntent = new Intent(getActivity(), ClearDataActivity.class);
158                         break;
159                     case "dark":
160                         clearIntent = new Intent(getActivity(), ClearDataActivityDark.class);
161                         break;
162                 }
163
164                 startActivity(clearIntent);
165                 break;
166             case "launcher":
167                 if(U.canDrawOverlays(getActivity())) {
168                     ComponentName component = new ComponentName(getActivity(), HomeActivity.class);
169                     getActivity().getPackageManager().setComponentEnabledSetting(component,
170                             ((CheckBoxPreference) p).isChecked() ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
171                             PackageManager.DONT_KILL_APP);
172                 } else {
173                     U.showPermissionDialog(getActivity());
174                     ((CheckBoxPreference) p).setChecked(false);
175                 }
176
177                 if(!((CheckBoxPreference) p).isChecked())
178                     LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(new Intent("com.farmerbb.taskbar.KILL_HOME_ACTIVITY"));
179                 break;
180             case "keyboard_shortcut":
181                 ComponentName component = new ComponentName(getActivity(), KeyboardShortcutActivity.class);
182                 getActivity().getPackageManager().setComponentEnabledSetting(component,
183                         ((CheckBoxPreference) p).isChecked() ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
184                         PackageManager.DONT_KILL_APP);
185                 break;
186             case "dashboard_grid_size":
187                 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
188                 LinearLayout dialogLayout = (LinearLayout) View.inflate(getActivity(), R.layout.dashboard_size_dialog, null);
189
190                 boolean isPortrait = getActivity().getApplicationContext().getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
191                 boolean isLandscape = getActivity().getApplicationContext().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
192
193                 int editTextId = -1;
194                 int editText2Id = -1;
195
196                 if(isPortrait) {
197                     editTextId = R.id.fragmentEditText2;
198                     editText2Id = R.id.fragmentEditText1;
199                 }
200
201                 if(isLandscape) {
202                     editTextId = R.id.fragmentEditText1;
203                     editText2Id = R.id.fragmentEditText2;
204                 }
205
206                 final EditText editText = U.findViewById(dialogLayout, editTextId);
207                 final EditText editText2 = U.findViewById(dialogLayout, editText2Id);
208
209                 builder.setView(dialogLayout)
210                         .setTitle(R.string.dashboard_grid_size)
211                         .setPositiveButton(R.string.action_ok, (dialog, id) -> {
212                             boolean successfullyUpdated = false;
213
214                             String widthString = editText.getText().toString();
215                             String heightString = editText2.getText().toString();
216
217                             if(widthString.length() > 0 && heightString.length() > 0) {
218                                 int width = Integer.parseInt(widthString);
219                                 int height = Integer.parseInt(heightString);
220
221                                 if(width > 0 && height > 0) {
222                                     SharedPreferences.Editor editor = pref.edit();
223                                     editor.putInt("dashboard_width", width);
224                                     editor.putInt("dashboard_height", height);
225                                     editor.apply();
226
227                                     updateDashboardGridSize(true);
228                                     successfullyUpdated = true;
229                                 }
230                             }
231
232                             if(!successfullyUpdated)
233                                 U.showToast(getActivity(), R.string.invalid_grid_size);
234                         })
235                         .setNegativeButton(R.string.action_cancel, null)
236                         .setNeutralButton(R.string.use_default, (dialog, id) -> {
237                             pref.edit().remove("dashboard_width").remove("dashboard_height").apply();
238                             updateDashboardGridSize(true);
239                         });
240
241                 editText.setText(Integer.toString(pref.getInt("dashboard_width", getActivity().getApplicationContext().getResources().getInteger(R.integer.dashboard_width))));
242                 editText2.setText(Integer.toString(pref.getInt("dashboard_height", getActivity().getApplicationContext().getResources().getInteger(R.integer.dashboard_height))));
243
244                 AlertDialog dialog = builder.create();
245                 dialog.show();
246
247                 new Handler().post(() -> {
248                     InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
249                     imm.showSoftInput(editText2, InputMethodManager.SHOW_IMPLICIT);
250                 });
251
252                 break;
253             case "navigation_bar_buttons":
254                 Intent intent = null;
255
256                 switch(pref.getString("theme", "light")) {
257                     case "light":
258                         intent = new Intent(getActivity(), NavigationBarButtonsActivity.class);
259                         break;
260                     case "dark":
261                         intent = new Intent(getActivity(), NavigationBarButtonsActivityDark.class);
262                         break;
263                 }
264
265                 startActivity(intent);
266                 break;
267             case "secondscreen":
268                 PackageManager packageManager = getActivity().getPackageManager();
269                 String packageName = U.getSecondScreenPackageName(getActivity());
270                 Intent intent2;
271
272                 if(packageName == null) {
273                     intent2 = new Intent(Intent.ACTION_VIEW);
274                     intent2.setData(Uri.parse("https://play.google.com/store/apps/details?id=com.farmerbb.secondscreen.free"));
275                 } else
276                     intent2 = packageManager.getLaunchIntentForPackage(packageName);
277
278                 if(intent2 != null) {
279                     intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
280
281                     try {
282                         startActivity(intent2);
283                     } catch (ActivityNotFoundException e) { /* Gracefully fail */ }
284                 }
285
286                 break;
287         }
288
289         return true;
290     }
291
292     private void updateDashboardGridSize(boolean restartTaskbar) {
293         SharedPreferences pref = U.getSharedPreferences(getActivity());
294         int width = pref.getInt("dashboard_width", getActivity().getApplicationContext().getResources().getInteger(R.integer.dashboard_width));
295         int height = pref.getInt("dashboard_height", getActivity().getApplicationContext().getResources().getInteger(R.integer.dashboard_height));
296
297         boolean isPortrait = getActivity().getApplicationContext().getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
298         boolean isLandscape = getActivity().getApplicationContext().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
299
300         int first = -1;
301         int second = -1;
302
303         if(isPortrait) {
304             first = height;
305             second = width;
306         }
307
308         if(isLandscape) {
309             first = width;
310             second = height;
311         }
312
313         findPreference("dashboard_grid_size").setSummary(getString(R.string.dashboard_grid_description, first, second));
314
315         if(restartTaskbar) U.restartTaskbar(getActivity());
316     }
317 }