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.app.ActivityManager;
22 import android.content.ActivityNotFoundException;
23 import android.content.BroadcastReceiver;
24 import android.content.ComponentName;
25 import android.content.Context;
26 import android.content.Intent;
27 import android.content.IntentFilter;
28 import android.content.SharedPreferences;
29 import android.content.pm.LauncherActivityInfo;
30 import android.content.pm.LauncherApps;
31 import android.content.pm.PackageManager;
32 import android.content.pm.ResolveInfo;
33 import android.content.pm.ShortcutInfo;
34 import android.media.AudioManager;
35 import android.net.Uri;
36 import android.os.Build;
37 import android.os.Bundle;
38 import android.os.Handler;
39 import android.os.UserManager;
40 import android.preference.Preference;
41 import android.preference.PreferenceActivity;
42 import android.provider.Settings;
43 import android.support.v4.content.LocalBroadcastManager;
44 import android.util.DisplayMetrics;
45 import android.view.Gravity;
46 import android.view.View;
47 import android.view.WindowManager;
49 import com.farmerbb.taskbar.BuildConfig;
50 import com.farmerbb.taskbar.MainActivity;
51 import com.farmerbb.taskbar.R;
52 import com.farmerbb.taskbar.activity.dark.SelectAppActivityDark;
53 import com.farmerbb.taskbar.util.AppEntry;
54 import com.farmerbb.taskbar.util.ApplicationType;
55 import com.farmerbb.taskbar.util.FreeformHackHelper;
56 import com.farmerbb.taskbar.util.IconCache;
57 import com.farmerbb.taskbar.util.MenuHelper;
58 import com.farmerbb.taskbar.util.PinnedBlockedApps;
59 import com.farmerbb.taskbar.util.SavedWindowSizes;
60 import com.farmerbb.taskbar.util.U;
62 import java.util.List;
64 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;
78 boolean isRunningApp = false;
80 List<ShortcutInfo> shortcuts;
82 private BroadcastReceiver finishReceiver = new BroadcastReceiver() {
84 public void onReceive(Context context, Intent intent) {
85 dashboardOrStartMenuAppearing = true;
90 @SuppressLint("RtlHardcoded")
91 @SuppressWarnings("deprecation")
93 protected void onPostCreate(Bundle savedInstanceState) {
94 super.onPostCreate(savedInstanceState);
96 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.CONTEXT_MENU_APPEARING"));
97 MenuHelper.getInstance().setContextMenuOpen(true);
99 boolean isNonAppMenu = !getIntent().hasExtra("package_name") && !getIntent().hasExtra("app_name");
100 showStartMenu = getIntent().getBooleanExtra("launched_from_start_menu", false);
101 isStartButton = isNonAppMenu && getIntent().getBooleanExtra("is_start_button", false);
102 isOverflowMenu = isNonAppMenu && getIntent().getBooleanExtra("is_overflow_menu", false);
103 contextMenuFix = getIntent().hasExtra("context_menu_fix");
104 isRunningApp = getIntent().getBooleanExtra("is_running_app", false);
106 // Determine where to position the dialog on screen
107 WindowManager.LayoutParams params = getWindow().getAttributes();
108 DisplayMetrics metrics = U.getRealDisplayMetrics(this);
110 int statusBarHeight = 0;
111 int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
113 statusBarHeight = getResources().getDimensionPixelSize(resourceId);
116 int x = getIntent().getIntExtra("x", 0);
117 int y = getIntent().getIntExtra("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 = metrics.heightPixels - 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 = metrics.heightPixels - 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 = getIntent().getIntExtra("x", metrics.widthPixels);
150 int y = getIntent().getIntExtra("y", metrics.heightPixels);
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 = metrics.heightPixels - y - (isStartButton ? 0 : offset);
165 params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
166 params.x = metrics.widthPixels - x;
169 case "bottom_vertical_right":
170 params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
172 params.y = metrics.heightPixels - 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 = metrics.widthPixels - 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 > metrics.widthPixels / 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 getWindow().setAttributes(params);
205 if(U.isChromeOs(this) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
206 getWindow().setElevation(0);
208 View view = findViewById(android.R.id.list);
209 if(view != null) view.setPadding(0, 0, 0, 0);
213 IntentFilter intentFilter = new IntentFilter();
214 intentFilter.addAction("com.farmerbb.taskbar.START_MENU_APPEARING");
215 intentFilter.addAction("com.farmerbb.taskbar.DASHBOARD_APPEARING");
217 LocalBroadcastManager.getInstance(this).registerReceiver(finishReceiver, intentFilter);
220 @SuppressWarnings("deprecation")
221 private void generateMenu() {
223 addPreferencesFromResource(R.xml.pref_context_menu_open_settings);
224 findPreference("open_taskbar_settings").setOnPreferenceClickListener(this);
225 findPreference("start_menu_apps").setOnPreferenceClickListener(this);
227 if(U.launcherIsDefault(this) && FreeformHackHelper.getInstance().isInFreeformWorkspace()) {
228 addPreferencesFromResource(R.xml.pref_context_menu_change_wallpaper);
229 findPreference("change_wallpaper").setOnPreferenceClickListener(this);
232 if(!getIntent().getBooleanExtra("dont_show_quit", false)) {
233 addPreferencesFromResource(R.xml.pref_context_menu_quit);
234 findPreference("quit_taskbar").setOnPreferenceClickListener(this);
236 } else if(isOverflowMenu) {
237 if(getResources().getConfiguration().screenWidthDp >= 600
238 && Build.VERSION.SDK_INT <= Build.VERSION_CODES.M)
239 setTitle(R.string.tools);
241 addPreferencesFromResource(R.xml.pref_context_menu_header);
242 findPreference("header").setTitle(R.string.tools);
245 addPreferencesFromResource(R.xml.pref_context_menu_overflow);
246 findPreference("volume").setOnPreferenceClickListener(this);
247 findPreference("system_settings").setOnPreferenceClickListener(this);
248 findPreference("lock_device").setOnPreferenceClickListener(this);
249 findPreference("power_menu").setOnPreferenceClickListener(this);
251 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
252 findPreference("file_manager").setOnPreferenceClickListener(this);
254 getPreferenceScreen().removePreference(findPreference("file_manager"));
256 appName = getIntent().getStringExtra("app_name");
257 packageName = getIntent().getStringExtra("package_name");
258 componentName = getIntent().getStringExtra("component_name");
259 userId = getIntent().getLongExtra("user_id", 0);
261 if(getResources().getConfiguration().screenWidthDp >= 600
262 && Build.VERSION.SDK_INT <= Build.VERSION_CODES.M)
265 addPreferencesFromResource(R.xml.pref_context_menu_header);
266 findPreference("header").setTitle(appName);
269 SharedPreferences pref = U.getSharedPreferences(this);
270 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
271 && pref.getBoolean("freeform_hack", false)
272 && !U.isGame(this, packageName)) {
273 addPreferencesFromResource(R.xml.pref_context_menu_show_window_sizes);
274 findPreference("show_window_sizes").setOnPreferenceClickListener(this);
277 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
278 int shortcutCount = getLauncherShortcuts();
280 if(shortcutCount > 1) {
281 addPreferencesFromResource(R.xml.pref_context_menu_shortcuts);
282 findPreference("app_shortcuts").setOnPreferenceClickListener(this);
283 } else if(shortcutCount == 1)
287 final PackageManager pm = getPackageManager();
288 Intent homeIntent = new Intent(Intent.ACTION_MAIN);
289 homeIntent.addCategory(Intent.CATEGORY_HOME);
290 ResolveInfo defaultLauncher = pm.resolveActivity(homeIntent, PackageManager.MATCH_DEFAULT_ONLY);
292 if(!packageName.contains(BuildConfig.BASE_APPLICATION_ID)
293 && !packageName.equals(defaultLauncher.activityInfo.packageName)) {
294 PinnedBlockedApps pba = PinnedBlockedApps.getInstance(this);
296 if(pba.isPinned(componentName)) {
297 addPreferencesFromResource(R.xml.pref_context_menu_pin);
298 findPreference("pin_app").setOnPreferenceClickListener(this);
299 findPreference("pin_app").setTitle(R.string.unpin_app);
300 } else if(pba.isBlocked(componentName)) {
301 addPreferencesFromResource(R.xml.pref_context_menu_block);
302 findPreference("block_app").setOnPreferenceClickListener(this);
303 findPreference("block_app").setTitle(R.string.unblock_app);
305 final int MAX_NUM_OF_COLUMNS = U.getMaxNumOfEntries(this);
307 if(pba.getPinnedApps().size() < MAX_NUM_OF_COLUMNS) {
308 addPreferencesFromResource(R.xml.pref_context_menu_pin);
309 findPreference("pin_app").setOnPreferenceClickListener(this);
310 findPreference("pin_app").setTitle(R.string.pin_app);
313 addPreferencesFromResource(R.xml.pref_context_menu_block);
314 findPreference("block_app").setOnPreferenceClickListener(this);
315 findPreference("block_app").setTitle(R.string.block_app);
319 addPreferencesFromResource(R.xml.pref_context_menu);
321 findPreference("app_info").setOnPreferenceClickListener(this);
324 findPreference("close").setOnPreferenceClickListener(this);
325 getPreferenceScreen().removePreference(findPreference("uninstall"));
327 findPreference("uninstall").setOnPreferenceClickListener(this);
328 getPreferenceScreen().removePreference(findPreference("close"));
333 @SuppressWarnings("deprecation")
334 private void generateShortcuts() {
335 addPreferencesFromResource(R.xml.pref_context_menu_shortcut_list);
336 switch(shortcuts.size()) {
338 findPreference("shortcut_5").setTitle(getShortcutTitle(shortcuts.get(4)));
339 findPreference("shortcut_5").setOnPreferenceClickListener(this);
341 findPreference("shortcut_4").setTitle(getShortcutTitle(shortcuts.get(3)));
342 findPreference("shortcut_4").setOnPreferenceClickListener(this);
344 findPreference("shortcut_3").setTitle(getShortcutTitle(shortcuts.get(2)));
345 findPreference("shortcut_3").setOnPreferenceClickListener(this);
347 findPreference("shortcut_2").setTitle(getShortcutTitle(shortcuts.get(1)));
348 findPreference("shortcut_2").setOnPreferenceClickListener(this);
350 findPreference("shortcut_1").setTitle(getShortcutTitle(shortcuts.get(0)));
351 findPreference("shortcut_1").setOnPreferenceClickListener(this);
355 switch(shortcuts.size()) {
357 getPreferenceScreen().removePreference(findPreference("shortcut_2"));
359 getPreferenceScreen().removePreference(findPreference("shortcut_3"));
361 getPreferenceScreen().removePreference(findPreference("shortcut_4"));
363 getPreferenceScreen().removePreference(findPreference("shortcut_5"));
368 @SuppressWarnings("deprecation")
369 private void generateWindowSizes() {
370 getPreferenceScreen().removeAll();
372 addPreferencesFromResource(R.xml.pref_context_menu_window_size_list);
373 findPreference("window_size_standard").setOnPreferenceClickListener(this);
374 findPreference("window_size_large").setOnPreferenceClickListener(this);
375 findPreference("window_size_fullscreen").setOnPreferenceClickListener(this);
376 findPreference("window_size_half_left").setOnPreferenceClickListener(this);
377 findPreference("window_size_half_right").setOnPreferenceClickListener(this);
378 findPreference("window_size_phone_size").setOnPreferenceClickListener(this);
380 String windowSizePref = SavedWindowSizes.getInstance(this).getWindowSize(this, packageName);
381 CharSequence title = findPreference("window_size_" + windowSizePref).getTitle();
382 findPreference("window_size_" + windowSizePref).setTitle('\u2713' + " " + title);
385 @SuppressWarnings("deprecation")
386 @TargetApi(Build.VERSION_CODES.N_MR1)
388 public boolean onPreferenceClick(Preference p) {
389 UserManager userManager = (UserManager) getSystemService(USER_SERVICE);
390 LauncherApps launcherApps = (LauncherApps) getSystemService(LAUNCHER_APPS_SERVICE);
391 boolean appIsValid = isStartButton || isOverflowMenu ||
392 !launcherApps.getActivityList(getIntent().getStringExtra("package_name"),
393 userManager.getUserForSerialNumber(userId)).isEmpty();
395 if(appIsValid) switch(p.getKey()) {
397 U.launchApp(this, () ->
398 launcherApps.startAppDetailsActivity(
399 ComponentName.unflattenFromString(componentName),
400 userManager.getUserForSerialNumber(userId),
402 U.getActivityOptionsBundle(ApplicationType.APPLICATION)));
404 showStartMenu = false;
405 shouldHideTaskbar = true;
406 contextMenuFix = false;
409 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && isInMultiWindowMode() && !U.isChromeOs(this)) {
410 Intent intent2 = new Intent(ContextMenuActivity.this, DummyActivity.class);
411 intent2.putExtra("uninstall", packageName);
412 intent2.putExtra("user_id", userId);
414 startActivity(intent2);
416 Intent intent2 = new Intent(Intent.ACTION_DELETE, Uri.parse("package:" + packageName));
417 intent2.putExtra(Intent.EXTRA_USER, userManager.getUserForSerialNumber(userId));
419 new Handler().post(() -> {
421 startActivity(intent2);
422 } catch (ActivityNotFoundException e) { /* Gracefully fail */ }
426 showStartMenu = false;
427 shouldHideTaskbar = true;
428 contextMenuFix = false;
430 case "open_taskbar_settings":
431 U.launchApp(this, () -> {
432 Intent intent2 = new Intent(this, MainActivity.class);
433 intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
434 startActivity(intent2, U.getActivityOptionsBundle(ApplicationType.APPLICATION));
437 showStartMenu = false;
438 shouldHideTaskbar = true;
439 contextMenuFix = false;
442 Intent quitIntent = new Intent("com.farmerbb.taskbar.QUIT");
443 quitIntent.setPackage(BuildConfig.APPLICATION_ID);
444 sendBroadcast(quitIntent);
446 showStartMenu = false;
447 shouldHideTaskbar = true;
448 contextMenuFix = false;
451 PinnedBlockedApps pba = PinnedBlockedApps.getInstance(this);
452 if(pba.isPinned(componentName))
453 pba.removePinnedApp(this, componentName);
455 Intent intent = new Intent();
456 intent.setComponent(ComponentName.unflattenFromString(componentName));
458 LauncherActivityInfo appInfo = launcherApps.resolveActivity(intent, userManager.getUserForSerialNumber(userId));
459 if(appInfo != null) {
460 AppEntry newEntry = new AppEntry(
464 IconCache.getInstance(this).getIcon(this, getPackageManager(), appInfo),
467 newEntry.setUserId(userId);
468 pba.addPinnedApp(this, newEntry);
473 PinnedBlockedApps pba2 = PinnedBlockedApps.getInstance(this);
474 if(pba2.isBlocked(componentName))
475 pba2.removeBlockedApp(this, componentName);
477 pba2.addBlockedApp(this, new AppEntry(
485 case "show_window_sizes":
486 generateWindowSizes();
488 if(Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
489 U.showToastLong(this, R.string.window_sizes_not_available);
492 getListView().setOnItemLongClickListener((parent, view, position, id) -> {
493 String[] windowSizes = { "standard", "large", "fullscreen", "half_left", "half_right", "phone_size" };
495 SavedWindowSizes.getInstance(ContextMenuActivity.this).setWindowSize(ContextMenuActivity.this, packageName, windowSizes[position]);
497 generateWindowSizes();
501 secondaryMenu = true;
503 case "window_size_standard":
504 case "window_size_large":
505 case "window_size_fullscreen":
506 case "window_size_half_left":
507 case "window_size_half_right":
508 case "window_size_phone_size":
509 String windowSize = p.getKey().replace("window_size_", "");
511 SharedPreferences pref2 = U.getSharedPreferences(this);
512 if(pref2.getBoolean("save_window_sizes", true)) {
513 SavedWindowSizes.getInstance(this).setWindowSize(this, packageName, windowSize);
516 U.launchApp(getApplicationContext(), packageName, componentName, userId, windowSize, false, true);
518 if(Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1)
521 showStartMenu = false;
522 shouldHideTaskbar = true;
523 contextMenuFix = false;
525 case "app_shortcuts":
526 getPreferenceScreen().removeAll();
529 secondaryMenu = true;
536 U.startShortcut(getApplicationContext(), packageName, componentName, shortcuts.get(Integer.parseInt(p.getKey().replace("shortcut_", "")) - 1));
538 showStartMenu = false;
539 shouldHideTaskbar = true;
540 contextMenuFix = false;
542 case "start_menu_apps":
543 Intent intent = null;
545 SharedPreferences pref3 = U.getSharedPreferences(this);
546 switch(pref3.getString("theme", "light")) {
548 intent = new Intent(this, SelectAppActivity.class);
551 intent = new Intent(this, SelectAppActivityDark.class);
555 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
556 && pref3.getBoolean("freeform_hack", false)
557 && intent != null && isInMultiWindowMode()) {
558 intent.putExtra("no_shadow", true);
559 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
561 U.launchAppMaximized(getApplicationContext(), intent);
563 startActivity(intent);
565 showStartMenu = false;
566 shouldHideTaskbar = true;
567 contextMenuFix = false;
570 AudioManager audio = (AudioManager) getSystemService(AUDIO_SERVICE);
571 audio.adjustSuggestedStreamVolume(AudioManager.ADJUST_SAME, AudioManager.USE_DEFAULT_STREAM_TYPE, AudioManager.FLAG_SHOW_UI);
573 showStartMenu = false;
574 shouldHideTaskbar = true;
575 contextMenuFix = false;
578 U.launchApp(this, () -> {
579 Intent fileManagerIntent;
581 if(Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1)
582 fileManagerIntent = new Intent(Intent.ACTION_VIEW);
583 else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
584 fileManagerIntent = new Intent("android.provider.action.BROWSE");
586 fileManagerIntent = new Intent("android.provider.action.BROWSE_DOCUMENT_ROOT");
587 fileManagerIntent.setComponent(ComponentName.unflattenFromString("com.android.documentsui/.DocumentsActivity"));
590 fileManagerIntent.addCategory(Intent.CATEGORY_DEFAULT);
591 fileManagerIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
592 fileManagerIntent.setData(Uri.parse("content://com.android.externalstorage.documents/root/primary"));
595 startActivity(fileManagerIntent, U.getActivityOptionsBundle(ApplicationType.APPLICATION));
596 } catch (ActivityNotFoundException e) {
597 U.showToast(this, R.string.lock_device_not_supported);
601 showStartMenu = false;
602 shouldHideTaskbar = true;
603 contextMenuFix = false;
605 case "system_settings":
606 U.launchApp(this, () -> {
607 Intent settingsIntent = new Intent(Settings.ACTION_SETTINGS);
608 settingsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
611 startActivity(settingsIntent, U.getActivityOptionsBundle(ApplicationType.APPLICATION));
612 } catch (ActivityNotFoundException e) {
613 U.showToast(this, R.string.lock_device_not_supported);
617 showStartMenu = false;
618 shouldHideTaskbar = true;
619 contextMenuFix = false;
624 showStartMenu = false;
625 shouldHideTaskbar = true;
626 contextMenuFix = false;
629 U.sendAccessibilityAction(this, AccessibilityService.GLOBAL_ACTION_POWER_DIALOG);
631 showStartMenu = false;
632 shouldHideTaskbar = true;
633 contextMenuFix = false;
635 case "change_wallpaper":
636 Intent intent3 = Intent.createChooser(new Intent(Intent.ACTION_SET_WALLPAPER), getString(R.string.set_wallpaper));
637 intent3.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
638 U.launchAppMaximized(getApplicationContext(), intent3);
640 showStartMenu = false;
641 shouldHideTaskbar = true;
642 contextMenuFix = false;
645 ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
646 am.killBackgroundProcesses(packageName);
648 showStartMenu = false;
649 shouldHideTaskbar = true;
650 contextMenuFix = false;
654 if(!secondaryMenu) finish();
659 protected void onPause() {
661 if(!isFinishing()) finish();
665 public void finish() {
666 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.CONTEXT_MENU_DISAPPEARING"));
667 MenuHelper.getInstance().setContextMenuOpen(false);
669 if(!dashboardOrStartMenuAppearing) {
671 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.TOGGLE_START_MENU"));
673 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.RESET_START_MENU"));
675 if(shouldHideTaskbar && U.shouldCollapse(this, true))
676 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_TASKBAR"));
682 overridePendingTransition(0, 0);
685 @TargetApi(Build.VERSION_CODES.N_MR1)
686 private int getLauncherShortcuts() {
687 LauncherApps launcherApps = (LauncherApps) getSystemService(LAUNCHER_APPS_SERVICE);
688 if(launcherApps.hasShortcutHostPermission()) {
689 UserManager userManager = (UserManager) getSystemService(USER_SERVICE);
691 LauncherApps.ShortcutQuery query = new LauncherApps.ShortcutQuery();
692 query.setActivity(ComponentName.unflattenFromString(componentName));
693 query.setQueryFlags(LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC
694 | LauncherApps.ShortcutQuery.FLAG_MATCH_MANIFEST
695 | LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED);
697 shortcuts = launcherApps.getShortcuts(query, userManager.getUserForSerialNumber(userId));
698 if(shortcuts != null)
699 return shortcuts.size();
705 @TargetApi(Build.VERSION_CODES.N_MR1)
706 private CharSequence getShortcutTitle(ShortcutInfo shortcut) {
707 CharSequence longLabel = shortcut.getLongLabel();
708 if(longLabel != null && longLabel.length() > 0 && longLabel.length() <= 20)
711 return shortcut.getShortLabel();
714 @SuppressWarnings("deprecation")
716 public void onBackPressed() {
718 secondaryMenu = false;
720 getPreferenceScreen().removeAll();
723 getListView().setOnItemLongClickListener(null);
725 if(Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1)
728 if(contextMenuFix && !showStartMenu)
729 U.startFreeformHack(this, false, false);
731 super.onBackPressed();
732 if(FreeformHackHelper.getInstance().isInFreeformWorkspace())
733 overridePendingTransition(0, 0);
738 protected void onDestroy() {
741 LocalBroadcastManager.getInstance(this).unregisterReceiver(finishReceiver);