1 /* Copyright 2016 Braden Farmer
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
7 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package com.farmerbb.taskbar.activity;
18 import android.accessibilityservice.AccessibilityService;
19 import android.annotation.SuppressLint;
20 import android.annotation.TargetApi;
21 import android.content.ActivityNotFoundException;
22 import android.content.BroadcastReceiver;
23 import android.content.ComponentName;
24 import android.content.Context;
25 import android.content.Intent;
26 import android.content.IntentFilter;
27 import android.content.SharedPreferences;
28 import android.content.pm.LauncherActivityInfo;
29 import android.content.pm.LauncherApps;
30 import android.content.pm.PackageManager;
31 import android.content.pm.ResolveInfo;
32 import android.content.pm.ShortcutInfo;
33 import android.media.AudioManager;
34 import android.net.Uri;
35 import android.os.Build;
36 import android.os.Bundle;
37 import android.os.UserManager;
38 import android.preference.Preference;
39 import android.preference.PreferenceActivity;
40 import android.provider.Settings;
41 import android.support.v4.content.LocalBroadcastManager;
42 import android.view.Gravity;
43 import android.view.View;
44 import android.view.WindowManager;
46 import com.farmerbb.taskbar.BuildConfig;
47 import com.farmerbb.taskbar.R;
48 import com.farmerbb.taskbar.activity.dark.SelectAppActivityDark;
49 import com.farmerbb.taskbar.util.AppEntry;
50 import com.farmerbb.taskbar.util.ApplicationType;
51 import com.farmerbb.taskbar.util.DisplayInfo;
52 import com.farmerbb.taskbar.util.FreeformHackHelper;
53 import com.farmerbb.taskbar.util.IconCache;
54 import com.farmerbb.taskbar.util.LauncherHelper;
55 import com.farmerbb.taskbar.util.MenuHelper;
56 import com.farmerbb.taskbar.util.PinnedBlockedApps;
57 import com.farmerbb.taskbar.util.SavedWindowSizes;
58 import com.farmerbb.taskbar.util.U;
60 import java.util.List;
62 public class ContextMenuActivity extends PreferenceActivity implements Preference.OnPreferenceClickListener {
71 boolean showStartMenu = false;
72 boolean shouldHideTaskbar = false;
73 boolean isStartButton = false;
74 boolean isOverflowMenu = false;
75 boolean secondaryMenu = false;
76 boolean dashboardOrStartMenuAppearing = false;
77 boolean contextMenuFix = false;
79 List<ShortcutInfo> shortcuts;
81 private BroadcastReceiver finishReceiver = new BroadcastReceiver() {
83 public void onReceive(Context context, Intent intent) {
84 dashboardOrStartMenuAppearing = true;
89 @SuppressLint("RtlHardcoded")
90 @SuppressWarnings("deprecation")
92 protected void onPostCreate(Bundle savedInstanceState) {
93 super.onPostCreate(savedInstanceState);
95 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.CONTEXT_MENU_APPEARING"));
96 MenuHelper.getInstance().setContextMenuOpen(true);
98 args = getIntent().getBundleExtra("args");
100 boolean isNonAppMenu = !args.containsKey("package_name") && !args.containsKey("app_name");
101 showStartMenu = args.getBoolean("launched_from_start_menu", false);
102 isStartButton = isNonAppMenu && args.getBoolean("is_start_button", false);
103 isOverflowMenu = isNonAppMenu && args.getBoolean("is_overflow_menu", false);
104 contextMenuFix = args.containsKey("context_menu_fix");
106 // Determine where to position the dialog on screen
107 WindowManager.LayoutParams params = getWindow().getAttributes();
108 DisplayInfo display = U.getDisplayInfo(this);
110 int statusBarHeight = 0;
111 int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
113 statusBarHeight = getResources().getDimensionPixelSize(resourceId);
116 int x = args.getInt("x", 0);
117 int y = args.getInt("y", 0);
118 int offset = getResources().getDimensionPixelSize(isOverflowMenu ? R.dimen.context_menu_offset_overflow : R.dimen.context_menu_offset);
120 switch(U.getTaskbarPosition(this)) {
122 case "bottom_vertical_left":
123 params.gravity = Gravity.BOTTOM | Gravity.LEFT;
125 params.y = display.height - y - offset;
128 case "bottom_vertical_right":
129 params.gravity = Gravity.BOTTOM | Gravity.LEFT;
130 params.x = x - getResources().getDimensionPixelSize(R.dimen.context_menu_width) + offset + offset;
131 params.y = display.height - y - offset;
134 case "top_vertical_left":
135 params.gravity = Gravity.TOP | Gravity.LEFT;
137 params.y = y - offset + statusBarHeight;
140 case "top_vertical_right":
141 params.gravity = Gravity.TOP | Gravity.LEFT;
142 params.x = x - getResources().getDimensionPixelSize(R.dimen.context_menu_width) + offset + offset;
143 params.y = y - offset + statusBarHeight;
147 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_START_MENU"));
149 int x = args.getInt("x", display.width);
150 int y = args.getInt("y", display.height);
151 int offset = getResources().getDimensionPixelSize(R.dimen.icon_size);
153 switch(U.getTaskbarPosition(this)) {
155 params.gravity = Gravity.BOTTOM | Gravity.LEFT;
156 params.x = isStartButton ? 0 : x;
159 case "bottom_vertical_left":
160 params.gravity = Gravity.BOTTOM | Gravity.LEFT;
162 params.y = display.height - y - (isStartButton ? 0 : offset);
165 params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
166 params.x = display.width - x;
169 case "bottom_vertical_right":
170 params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
172 params.y = display.height - y - (isStartButton ? 0 : offset);
175 params.gravity = Gravity.TOP | Gravity.LEFT;
176 params.x = isStartButton ? 0 : x;
179 case "top_vertical_left":
180 params.gravity = Gravity.TOP | Gravity.LEFT;
182 params.y = isStartButton ? 0 : y - statusBarHeight;
185 params.gravity = Gravity.TOP | Gravity.RIGHT;
186 params.x = display.width - x;
189 case "top_vertical_right":
190 params.gravity = Gravity.TOP | Gravity.RIGHT;
192 params.y = isStartButton ? 0 : y - statusBarHeight;
196 if(!U.getTaskbarPosition(this).contains("vertical") && (params.x > display.width / 2))
197 params.x = params.x - getResources().getDimensionPixelSize(R.dimen.context_menu_width) + offset;
200 params.width = getResources().getDimensionPixelSize(R.dimen.context_menu_width);
201 params.dimAmount = 0;
203 if(U.isChromeOs(this) && U.getTaskbarPosition(this).contains("bottom")) {
204 SharedPreferences pref = U.getSharedPreferences(this);
206 if(pref.getBoolean("chrome_os_context_menu_fix", true)
207 && !pref.getBoolean("has_caption", false))
208 params.y = params.y - getResources().getDimensionPixelSize(R.dimen.caption_offset);
211 getWindow().setAttributes(params);
213 if(U.isChromeOs(this) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
214 getWindow().setElevation(0);
216 View view = findViewById(android.R.id.list);
217 if(view != null) view.setPadding(0, 0, 0, 0);
221 IntentFilter intentFilter = new IntentFilter();
222 intentFilter.addAction("com.farmerbb.taskbar.START_MENU_APPEARING");
223 intentFilter.addAction("com.farmerbb.taskbar.DASHBOARD_APPEARING");
225 LocalBroadcastManager.getInstance(this).registerReceiver(finishReceiver, intentFilter);
228 @SuppressWarnings("deprecation")
229 private void generateMenu() {
231 addPreferencesFromResource(R.xml.pref_context_menu_open_settings);
232 findPreference("open_taskbar_settings").setOnPreferenceClickListener(this);
233 findPreference("start_menu_apps").setOnPreferenceClickListener(this);
235 if((U.launcherIsDefault(this)
236 && FreeformHackHelper.getInstance().isInFreeformWorkspace())
237 || (U.isOverridingFreeformHack(this)
238 && LauncherHelper.getInstance().isOnHomeScreen())) {
239 addPreferencesFromResource(R.xml.pref_context_menu_change_wallpaper);
240 findPreference("change_wallpaper").setOnPreferenceClickListener(this);
243 if(!args.getBoolean("dont_show_quit", false)) {
244 addPreferencesFromResource(R.xml.pref_context_menu_quit);
245 findPreference("quit_taskbar").setOnPreferenceClickListener(this);
247 } else if(isOverflowMenu) {
248 if(getResources().getConfiguration().screenWidthDp >= 600
249 && Build.VERSION.SDK_INT <= Build.VERSION_CODES.M)
250 setTitle(R.string.tools);
252 addPreferencesFromResource(R.xml.pref_context_menu_header);
253 findPreference("header").setTitle(R.string.tools);
256 addPreferencesFromResource(R.xml.pref_context_menu_overflow);
257 findPreference("volume").setOnPreferenceClickListener(this);
258 findPreference("system_settings").setOnPreferenceClickListener(this);
259 findPreference("lock_device").setOnPreferenceClickListener(this);
260 findPreference("power_menu").setOnPreferenceClickListener(this);
262 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
263 findPreference("file_manager").setOnPreferenceClickListener(this);
265 getPreferenceScreen().removePreference(findPreference("file_manager"));
267 appName = args.getString("app_name");
268 packageName = args.getString("package_name");
269 componentName = args.getString("component_name");
270 userId = args.getLong("user_id", 0);
272 if(getResources().getConfiguration().screenWidthDp >= 600
273 && Build.VERSION.SDK_INT <= Build.VERSION_CODES.M)
276 addPreferencesFromResource(R.xml.pref_context_menu_header);
277 findPreference("header").setTitle(appName);
280 SharedPreferences pref = U.getSharedPreferences(this);
281 if(U.hasFreeformSupport(this)
282 && pref.getBoolean("freeform_hack", false)
283 && !U.isGame(this, packageName)) {
284 addPreferencesFromResource(R.xml.pref_context_menu_show_window_sizes);
285 findPreference("show_window_sizes").setOnPreferenceClickListener(this);
288 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
289 int shortcutCount = getLauncherShortcuts();
291 if(shortcutCount > 1) {
292 addPreferencesFromResource(R.xml.pref_context_menu_shortcuts);
293 findPreference("app_shortcuts").setOnPreferenceClickListener(this);
294 } else if(shortcutCount == 1)
298 final PackageManager pm = getPackageManager();
299 Intent homeIntent = new Intent(Intent.ACTION_MAIN);
300 homeIntent.addCategory(Intent.CATEGORY_HOME);
301 ResolveInfo defaultLauncher = pm.resolveActivity(homeIntent, PackageManager.MATCH_DEFAULT_ONLY);
303 if(!packageName.contains(BuildConfig.BASE_APPLICATION_ID)
304 && !packageName.equals(defaultLauncher.activityInfo.packageName)) {
305 PinnedBlockedApps pba = PinnedBlockedApps.getInstance(this);
307 if(pba.isPinned(componentName)) {
308 addPreferencesFromResource(R.xml.pref_context_menu_pin);
309 findPreference("pin_app").setOnPreferenceClickListener(this);
310 findPreference("pin_app").setTitle(R.string.unpin_app);
311 } else if(pba.isBlocked(componentName)) {
312 addPreferencesFromResource(R.xml.pref_context_menu_block);
313 findPreference("block_app").setOnPreferenceClickListener(this);
314 findPreference("block_app").setTitle(R.string.unblock_app);
316 final int MAX_NUM_OF_COLUMNS = U.getMaxNumOfEntries(this);
318 if(pba.getPinnedApps().size() < MAX_NUM_OF_COLUMNS) {
319 addPreferencesFromResource(R.xml.pref_context_menu_pin);
320 findPreference("pin_app").setOnPreferenceClickListener(this);
321 findPreference("pin_app").setTitle(R.string.pin_app);
324 addPreferencesFromResource(R.xml.pref_context_menu_block);
325 findPreference("block_app").setOnPreferenceClickListener(this);
326 findPreference("block_app").setTitle(R.string.block_app);
330 addPreferencesFromResource(R.xml.pref_context_menu);
332 findPreference("app_info").setOnPreferenceClickListener(this);
333 findPreference("uninstall").setOnPreferenceClickListener(this);
337 @SuppressWarnings("deprecation")
338 private void generateShortcuts() {
339 addPreferencesFromResource(R.xml.pref_context_menu_shortcut_list);
340 switch(shortcuts.size()) {
342 findPreference("shortcut_5").setTitle(getShortcutTitle(shortcuts.get(4)));
343 findPreference("shortcut_5").setOnPreferenceClickListener(this);
345 findPreference("shortcut_4").setTitle(getShortcutTitle(shortcuts.get(3)));
346 findPreference("shortcut_4").setOnPreferenceClickListener(this);
348 findPreference("shortcut_3").setTitle(getShortcutTitle(shortcuts.get(2)));
349 findPreference("shortcut_3").setOnPreferenceClickListener(this);
351 findPreference("shortcut_2").setTitle(getShortcutTitle(shortcuts.get(1)));
352 findPreference("shortcut_2").setOnPreferenceClickListener(this);
354 findPreference("shortcut_1").setTitle(getShortcutTitle(shortcuts.get(0)));
355 findPreference("shortcut_1").setOnPreferenceClickListener(this);
359 switch(shortcuts.size()) {
361 getPreferenceScreen().removePreference(findPreference("shortcut_2"));
363 getPreferenceScreen().removePreference(findPreference("shortcut_3"));
365 getPreferenceScreen().removePreference(findPreference("shortcut_4"));
367 getPreferenceScreen().removePreference(findPreference("shortcut_5"));
372 @SuppressWarnings("deprecation")
373 private void generateWindowSizes() {
374 getPreferenceScreen().removeAll();
376 addPreferencesFromResource(R.xml.pref_context_menu_window_size_list);
377 findPreference("window_size_standard").setOnPreferenceClickListener(this);
378 findPreference("window_size_large").setOnPreferenceClickListener(this);
379 findPreference("window_size_fullscreen").setOnPreferenceClickListener(this);
380 findPreference("window_size_half_left").setOnPreferenceClickListener(this);
381 findPreference("window_size_half_right").setOnPreferenceClickListener(this);
382 findPreference("window_size_phone_size").setOnPreferenceClickListener(this);
384 String windowSizePref = SavedWindowSizes.getInstance(this).getWindowSize(this, packageName);
385 CharSequence title = findPreference("window_size_" + windowSizePref).getTitle();
386 findPreference("window_size_" + windowSizePref).setTitle('\u2713' + " " + title);
389 @SuppressWarnings("deprecation")
390 @TargetApi(Build.VERSION_CODES.N_MR1)
392 public boolean onPreferenceClick(Preference p) {
393 UserManager userManager = (UserManager) getSystemService(USER_SERVICE);
394 LauncherApps launcherApps = (LauncherApps) getSystemService(LAUNCHER_APPS_SERVICE);
395 boolean appIsValid = isStartButton || isOverflowMenu ||
396 !launcherApps.getActivityList(args.getString("package_name"),
397 userManager.getUserForSerialNumber(userId)).isEmpty();
399 if(appIsValid) switch(p.getKey()) {
401 U.launchApp(this, () ->
402 launcherApps.startAppDetailsActivity(
403 ComponentName.unflattenFromString(componentName),
404 userManager.getUserForSerialNumber(userId),
406 U.getActivityOptionsBundle(this, ApplicationType.APPLICATION)));
408 showStartMenu = false;
409 shouldHideTaskbar = true;
410 contextMenuFix = false;
413 if(U.hasFreeformSupport(this) && isInMultiWindowMode() && !U.isChromeOs(this)) {
414 Intent intent2 = new Intent(this, DummyActivity.class);
415 intent2.putExtra("uninstall", packageName);
416 intent2.putExtra("user_id", userId);
419 startActivity(intent2);
420 } catch (IllegalArgumentException e) { /* Gracefully fail */ }
422 Intent intent2 = new Intent(Intent.ACTION_DELETE, Uri.parse("package:" + packageName));
423 intent2.putExtra(Intent.EXTRA_USER, userManager.getUserForSerialNumber(userId));
426 startActivity(intent2);
427 } catch (ActivityNotFoundException | IllegalArgumentException e) { /* Gracefully fail */ }
430 showStartMenu = false;
431 shouldHideTaskbar = true;
432 contextMenuFix = false;
434 case "open_taskbar_settings":
435 U.launchApp(this, () -> {
436 Intent intent2 = new Intent(this, MainActivity.class);
437 intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
440 startActivity(intent2, U.getActivityOptionsBundle(this, ApplicationType.APPLICATION));
441 } catch (IllegalArgumentException e) { /* Gracefully fail */ }
444 showStartMenu = false;
445 shouldHideTaskbar = true;
446 contextMenuFix = false;
449 Intent quitIntent = new Intent("com.farmerbb.taskbar.QUIT");
450 quitIntent.setPackage(BuildConfig.APPLICATION_ID);
451 sendBroadcast(quitIntent);
453 showStartMenu = false;
454 shouldHideTaskbar = true;
455 contextMenuFix = false;
458 PinnedBlockedApps pba = PinnedBlockedApps.getInstance(this);
459 if(pba.isPinned(componentName))
460 pba.removePinnedApp(this, componentName);
462 Intent intent = new Intent();
463 intent.setComponent(ComponentName.unflattenFromString(componentName));
465 LauncherActivityInfo appInfo = launcherApps.resolveActivity(intent, userManager.getUserForSerialNumber(userId));
466 if(appInfo != null) {
467 AppEntry newEntry = new AppEntry(
471 IconCache.getInstance(this).getIcon(this, getPackageManager(), appInfo),
474 newEntry.setUserId(userId);
475 pba.addPinnedApp(this, newEntry);
480 PinnedBlockedApps pba2 = PinnedBlockedApps.getInstance(this);
481 if(pba2.isBlocked(componentName))
482 pba2.removeBlockedApp(this, componentName);
484 pba2.addBlockedApp(this, new AppEntry(
492 case "show_window_sizes":
493 generateWindowSizes();
495 if(U.hasBrokenSetLaunchBoundsApi())
496 U.showToastLong(this, R.string.window_sizes_not_available);
498 getListView().setOnItemLongClickListener((parent, view, position, id) -> {
499 String[] windowSizes = { "standard", "large", "fullscreen", "half_left", "half_right", "phone_size" };
501 SavedWindowSizes.getInstance(this).setWindowSize(this, packageName, windowSizes[position]);
503 generateWindowSizes();
507 secondaryMenu = true;
509 case "window_size_standard":
510 case "window_size_large":
511 case "window_size_fullscreen":
512 case "window_size_half_left":
513 case "window_size_half_right":
514 case "window_size_phone_size":
515 String windowSize = p.getKey().replace("window_size_", "");
517 SharedPreferences pref2 = U.getSharedPreferences(this);
518 if(pref2.getBoolean("save_window_sizes", true)) {
519 SavedWindowSizes.getInstance(this).setWindowSize(this, packageName, windowSize);
522 U.launchApp(getApplicationContext(), packageName, componentName, userId, windowSize, false, true);
524 if(U.hasBrokenSetLaunchBoundsApi())
527 showStartMenu = false;
528 shouldHideTaskbar = true;
529 contextMenuFix = false;
531 case "app_shortcuts":
532 getPreferenceScreen().removeAll();
535 secondaryMenu = true;
542 U.startShortcut(getApplicationContext(), packageName, componentName, shortcuts.get(Integer.parseInt(p.getKey().replace("shortcut_", "")) - 1));
544 showStartMenu = false;
545 shouldHideTaskbar = true;
546 contextMenuFix = false;
548 case "start_menu_apps":
549 Intent intent = null;
551 SharedPreferences pref3 = U.getSharedPreferences(this);
552 switch(pref3.getString("theme", "light")) {
554 intent = new Intent(this, SelectAppActivity.class);
557 intent = new Intent(this, SelectAppActivityDark.class);
561 if(U.hasFreeformSupport(this)
562 && pref3.getBoolean("freeform_hack", false)
563 && intent != null && isInMultiWindowMode()) {
564 intent.putExtra("no_shadow", true);
565 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
567 U.startActivityMaximized(getApplicationContext(), intent);
570 startActivity(intent);
571 } catch (IllegalArgumentException e) { /* Gracefully fail */ }
574 showStartMenu = false;
575 shouldHideTaskbar = true;
576 contextMenuFix = false;
579 AudioManager audio = (AudioManager) getSystemService(AUDIO_SERVICE);
580 audio.adjustSuggestedStreamVolume(AudioManager.ADJUST_SAME, AudioManager.USE_DEFAULT_STREAM_TYPE, AudioManager.FLAG_SHOW_UI);
582 showStartMenu = false;
583 shouldHideTaskbar = true;
584 contextMenuFix = false;
587 U.launchApp(this, () -> {
588 Intent fileManagerIntent;
590 if(Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1)
591 fileManagerIntent = new Intent(Intent.ACTION_VIEW);
592 else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
593 fileManagerIntent = new Intent("android.provider.action.BROWSE");
595 fileManagerIntent = new Intent("android.provider.action.BROWSE_DOCUMENT_ROOT");
596 fileManagerIntent.setComponent(ComponentName.unflattenFromString("com.android.documentsui/.DocumentsActivity"));
599 fileManagerIntent.addCategory(Intent.CATEGORY_DEFAULT);
600 fileManagerIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
601 fileManagerIntent.setData(Uri.parse("content://com.android.externalstorage.documents/root/primary"));
604 startActivity(fileManagerIntent, U.getActivityOptionsBundle(this, ApplicationType.APPLICATION));
605 } catch (ActivityNotFoundException e) {
606 U.showToast(this, R.string.lock_device_not_supported);
607 } catch (IllegalArgumentException e) { /* Gracefully fail */ }
610 showStartMenu = false;
611 shouldHideTaskbar = true;
612 contextMenuFix = false;
614 case "system_settings":
615 U.launchApp(this, () -> {
616 Intent settingsIntent = new Intent(Settings.ACTION_SETTINGS);
617 settingsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
620 startActivity(settingsIntent, U.getActivityOptionsBundle(this, ApplicationType.APPLICATION));
621 } catch (ActivityNotFoundException e) {
622 U.showToast(this, R.string.lock_device_not_supported);
623 } catch (IllegalArgumentException e) { /* Gracefully fail */ }
626 showStartMenu = false;
627 shouldHideTaskbar = true;
628 contextMenuFix = false;
633 showStartMenu = false;
634 shouldHideTaskbar = true;
635 contextMenuFix = false;
638 U.sendAccessibilityAction(this, AccessibilityService.GLOBAL_ACTION_POWER_DIALOG);
640 showStartMenu = false;
641 shouldHideTaskbar = true;
642 contextMenuFix = false;
644 case "change_wallpaper":
645 Intent intent3 = Intent.createChooser(new Intent(Intent.ACTION_SET_WALLPAPER), getString(R.string.set_wallpaper));
646 intent3.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
647 U.startActivityMaximized(getApplicationContext(), intent3);
649 showStartMenu = false;
650 shouldHideTaskbar = true;
651 contextMenuFix = false;
655 if(!secondaryMenu) finish();
660 protected void onPause() {
662 if(!isFinishing()) finish();
666 public void finish() {
667 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.CONTEXT_MENU_DISAPPEARING"));
668 MenuHelper.getInstance().setContextMenuOpen(false);
670 if(!dashboardOrStartMenuAppearing) {
672 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.TOGGLE_START_MENU"));
674 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.RESET_START_MENU"));
676 if(shouldHideTaskbar && U.shouldCollapse(this, true))
677 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_TASKBAR"));
681 SharedPreferences pref = U.getSharedPreferences(this);
684 if(showStartMenu || pref.getBoolean("disable_animations", false))
685 overridePendingTransition(0, 0);
688 @TargetApi(Build.VERSION_CODES.N_MR1)
689 private int getLauncherShortcuts() {
690 LauncherApps launcherApps = (LauncherApps) getSystemService(LAUNCHER_APPS_SERVICE);
691 if(launcherApps.hasShortcutHostPermission()) {
692 UserManager userManager = (UserManager) getSystemService(USER_SERVICE);
694 LauncherApps.ShortcutQuery query = new LauncherApps.ShortcutQuery();
695 query.setActivity(ComponentName.unflattenFromString(componentName));
696 query.setQueryFlags(LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC
697 | LauncherApps.ShortcutQuery.FLAG_MATCH_MANIFEST
698 | LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED);
700 shortcuts = launcherApps.getShortcuts(query, userManager.getUserForSerialNumber(userId));
701 if(shortcuts != null)
702 return shortcuts.size();
708 @TargetApi(Build.VERSION_CODES.N_MR1)
709 private CharSequence getShortcutTitle(ShortcutInfo shortcut) {
710 CharSequence longLabel = shortcut.getLongLabel();
711 if(longLabel != null && longLabel.length() > 0 && longLabel.length() <= 20)
714 return shortcut.getShortLabel();
717 @SuppressWarnings("deprecation")
719 public void onBackPressed() {
721 secondaryMenu = false;
723 getPreferenceScreen().removeAll();
726 getListView().setOnItemLongClickListener(null);
728 if(U.hasBrokenSetLaunchBoundsApi())
731 if(contextMenuFix && !showStartMenu)
732 U.startFreeformHack(this);
734 super.onBackPressed();
735 if(FreeformHackHelper.getInstance().isInFreeformWorkspace())
736 overridePendingTransition(0, 0);
741 protected void onDestroy() {
744 LocalBroadcastManager.getInstance(this).unregisterReceiver(finishReceiver);