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.hardware.display.DisplayManager;
34 import android.media.AudioManager;
35 import android.net.Uri;
36 import android.os.Build;
37 import android.os.Bundle;
38 import android.os.UserManager;
39 import android.preference.Preference;
40 import android.preference.PreferenceActivity;
41 import android.provider.Settings;
42 import android.support.v4.content.LocalBroadcastManager;
43 import android.view.Display;
44 import android.view.Gravity;
45 import android.view.View;
46 import android.view.WindowManager;
48 import com.farmerbb.taskbar.BuildConfig;
49 import com.farmerbb.taskbar.MainActivity;
50 import com.farmerbb.taskbar.R;
51 import com.farmerbb.taskbar.activity.dark.SelectAppActivityDark;
52 import com.farmerbb.taskbar.util.AppEntry;
53 import com.farmerbb.taskbar.util.FreeformHackHelper;
54 import com.farmerbb.taskbar.util.IconCache;
55 import com.farmerbb.taskbar.util.PinnedBlockedApps;
56 import com.farmerbb.taskbar.util.SavedWindowSizes;
57 import com.farmerbb.taskbar.util.U;
59 import java.util.List;
61 public class ContextMenuActivity extends PreferenceActivity implements Preference.OnPreferenceClickListener {
68 boolean showStartMenu = false;
69 boolean shouldHideTaskbar = false;
70 boolean isStartButton = false;
71 boolean isOverflowMenu = false;
72 boolean secondaryMenu = false;
73 boolean dashboardOrStartMenuAppearing = false;
74 boolean contextMenuFix = false;
76 List<ShortcutInfo> shortcuts;
78 private BroadcastReceiver finishReceiver = new BroadcastReceiver() {
80 public void onReceive(Context context, Intent intent) {
81 dashboardOrStartMenuAppearing = true;
86 @SuppressLint("RtlHardcoded")
87 @SuppressWarnings("deprecation")
89 protected void onPostCreate(Bundle savedInstanceState) {
90 super.onPostCreate(savedInstanceState);
92 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.CONTEXT_MENU_APPEARING"));
94 boolean isNonAppMenu = !getIntent().hasExtra("package_name") && !getIntent().hasExtra("app_name");
95 showStartMenu = getIntent().getBooleanExtra("launched_from_start_menu", false);
96 isStartButton = isNonAppMenu && getIntent().getBooleanExtra("is_start_button", false);
97 isOverflowMenu = isNonAppMenu && getIntent().getBooleanExtra("is_overflow_menu", false);
98 contextMenuFix = getIntent().hasExtra("context_menu_fix");
100 // Determine where to position the dialog on screen
101 WindowManager.LayoutParams params = getWindow().getAttributes();
102 DisplayManager dm = (DisplayManager) getSystemService(DISPLAY_SERVICE);
103 Display display = dm.getDisplay(Display.DEFAULT_DISPLAY);
105 int statusBarHeight = 0;
106 int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
108 statusBarHeight = getResources().getDimensionPixelSize(resourceId);
111 int x = getIntent().getIntExtra("x", 0);
112 int y = getIntent().getIntExtra("y", 0);
113 int offset = getResources().getDimensionPixelSize(isOverflowMenu ? R.dimen.context_menu_offset_overflow : R.dimen.context_menu_offset);
115 switch(U.getTaskbarPosition(this)) {
117 case "bottom_vertical_left":
118 params.gravity = Gravity.BOTTOM | Gravity.LEFT;
120 params.y = display.getHeight() - y - offset;
123 case "bottom_vertical_right":
124 params.gravity = Gravity.BOTTOM | Gravity.LEFT;
125 params.x = x - getResources().getDimensionPixelSize(R.dimen.context_menu_width) + offset + offset;
126 params.y = display.getHeight() - y - offset;
129 case "top_vertical_left":
130 params.gravity = Gravity.TOP | Gravity.LEFT;
132 params.y = y - offset + statusBarHeight;
135 case "top_vertical_right":
136 params.gravity = Gravity.TOP | Gravity.LEFT;
137 params.x = x - getResources().getDimensionPixelSize(R.dimen.context_menu_width) + offset + offset;
138 params.y = y - offset + statusBarHeight;
142 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_START_MENU"));
144 int x = getIntent().getIntExtra("x", display.getWidth());
145 int y = getIntent().getIntExtra("y", display.getHeight());
146 int offset = getResources().getDimensionPixelSize(R.dimen.icon_size);
148 switch(U.getTaskbarPosition(this)) {
150 params.gravity = Gravity.BOTTOM | Gravity.LEFT;
151 params.x = isStartButton ? 0 : x;
154 case "bottom_vertical_left":
155 params.gravity = Gravity.BOTTOM | Gravity.LEFT;
157 params.y = display.getHeight() - y - (isStartButton ? 0 : offset);
160 params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
161 params.x = display.getWidth() - x;
164 case "bottom_vertical_right":
165 params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
167 params.y = display.getHeight() - y - (isStartButton ? 0 : offset);
170 params.gravity = Gravity.TOP | Gravity.LEFT;
171 params.x = isStartButton ? 0 : x;
174 case "top_vertical_left":
175 params.gravity = Gravity.TOP | Gravity.LEFT;
177 params.y = isStartButton ? 0 : y - statusBarHeight;
180 params.gravity = Gravity.TOP | Gravity.RIGHT;
181 params.x = display.getWidth() - x;
184 case "top_vertical_right":
185 params.gravity = Gravity.TOP | Gravity.RIGHT;
187 params.y = isStartButton ? 0 : y - statusBarHeight;
192 params.width = getResources().getDimensionPixelSize(R.dimen.context_menu_width);
193 params.dimAmount = 0;
195 getWindow().setAttributes(params);
197 View view = findViewById(android.R.id.list);
198 if(view != null) view.setPadding(0, 0, 0, 0);
202 IntentFilter intentFilter = new IntentFilter();
203 intentFilter.addAction("com.farmerbb.taskbar.START_MENU_APPEARING");
204 intentFilter.addAction("com.farmerbb.taskbar.DASHBOARD_APPEARING");
206 LocalBroadcastManager.getInstance(this).registerReceiver(finishReceiver, intentFilter);
209 @SuppressWarnings("deprecation")
210 private void generateMenu() {
212 addPreferencesFromResource(R.xml.pref_context_menu_open_settings);
213 findPreference("open_taskbar_settings").setOnPreferenceClickListener(this);
214 findPreference("start_menu_apps").setOnPreferenceClickListener(this);
216 if(U.launcherIsDefault(this) && FreeformHackHelper.getInstance().isInFreeformWorkspace()) {
217 addPreferencesFromResource(R.xml.pref_context_menu_change_wallpaper);
218 findPreference("change_wallpaper").setOnPreferenceClickListener(this);
221 if(!getIntent().getBooleanExtra("dont_show_quit", false)) {
222 addPreferencesFromResource(R.xml.pref_context_menu_quit);
223 findPreference("quit_taskbar").setOnPreferenceClickListener(this);
225 } else if(isOverflowMenu) {
226 if(getResources().getConfiguration().screenWidthDp >= 600
227 && Build.VERSION.SDK_INT <= Build.VERSION_CODES.M)
228 setTitle(R.string.tools);
230 addPreferencesFromResource(R.xml.pref_context_menu_header);
231 findPreference("header").setTitle(R.string.tools);
234 addPreferencesFromResource(R.xml.pref_context_menu_overflow);
235 findPreference("volume").setOnPreferenceClickListener(this);
236 findPreference("system_settings").setOnPreferenceClickListener(this);
237 findPreference("lock_device").setOnPreferenceClickListener(this);
238 findPreference("power_menu").setOnPreferenceClickListener(this);
240 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
241 findPreference("file_manager").setOnPreferenceClickListener(this);
243 getPreferenceScreen().removePreference(findPreference("file_manager"));
245 appName = getIntent().getStringExtra("app_name");
246 packageName = getIntent().getStringExtra("package_name");
247 componentName = getIntent().getStringExtra("component_name");
248 userId = getIntent().getLongExtra("user_id", 0);
250 if(getResources().getConfiguration().screenWidthDp >= 600
251 && Build.VERSION.SDK_INT <= Build.VERSION_CODES.M)
254 addPreferencesFromResource(R.xml.pref_context_menu_header);
255 findPreference("header").setTitle(appName);
258 SharedPreferences pref = U.getSharedPreferences(this);
259 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
260 && pref.getBoolean("freeform_hack", false)
261 && !U.isGame(this, packageName)) {
262 addPreferencesFromResource(R.xml.pref_context_menu_show_window_sizes);
263 findPreference("show_window_sizes").setOnPreferenceClickListener(this);
266 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
267 int shortcutCount = getLauncherShortcuts();
269 if(shortcutCount > 1) {
270 addPreferencesFromResource(R.xml.pref_context_menu_shortcuts);
271 findPreference("app_shortcuts").setOnPreferenceClickListener(this);
272 } else if(shortcutCount == 1)
276 final PackageManager pm = getPackageManager();
277 Intent homeIntent = new Intent(Intent.ACTION_MAIN);
278 homeIntent.addCategory(Intent.CATEGORY_HOME);
279 ResolveInfo defaultLauncher = pm.resolveActivity(homeIntent, PackageManager.MATCH_DEFAULT_ONLY);
281 if(!packageName.contains(BuildConfig.BASE_APPLICATION_ID)
282 && !packageName.equals(defaultLauncher.activityInfo.packageName)) {
283 PinnedBlockedApps pba = PinnedBlockedApps.getInstance(this);
285 if(pba.isPinned(componentName)) {
286 addPreferencesFromResource(R.xml.pref_context_menu_pin);
287 findPreference("pin_app").setOnPreferenceClickListener(this);
288 findPreference("pin_app").setTitle(R.string.unpin_app);
289 } else if(pba.isBlocked(componentName)) {
290 addPreferencesFromResource(R.xml.pref_context_menu_block);
291 findPreference("block_app").setOnPreferenceClickListener(this);
292 findPreference("block_app").setTitle(R.string.unblock_app);
294 final int MAX_NUM_OF_COLUMNS = U.getMaxNumOfEntries(this);
296 if(pba.getPinnedApps().size() < MAX_NUM_OF_COLUMNS) {
297 addPreferencesFromResource(R.xml.pref_context_menu_pin);
298 findPreference("pin_app").setOnPreferenceClickListener(this);
299 findPreference("pin_app").setTitle(R.string.pin_app);
302 addPreferencesFromResource(R.xml.pref_context_menu_block);
303 findPreference("block_app").setOnPreferenceClickListener(this);
304 findPreference("block_app").setTitle(R.string.block_app);
308 addPreferencesFromResource(R.xml.pref_context_menu);
310 findPreference("app_info").setOnPreferenceClickListener(this);
311 findPreference("uninstall").setOnPreferenceClickListener(this);
315 @SuppressWarnings("deprecation")
316 private void generateShortcuts() {
317 addPreferencesFromResource(R.xml.pref_context_menu_shortcut_list);
318 switch(shortcuts.size()) {
320 findPreference("shortcut_5").setTitle(getShortcutTitle(shortcuts.get(4)));
321 findPreference("shortcut_5").setOnPreferenceClickListener(this);
323 findPreference("shortcut_4").setTitle(getShortcutTitle(shortcuts.get(3)));
324 findPreference("shortcut_4").setOnPreferenceClickListener(this);
326 findPreference("shortcut_3").setTitle(getShortcutTitle(shortcuts.get(2)));
327 findPreference("shortcut_3").setOnPreferenceClickListener(this);
329 findPreference("shortcut_2").setTitle(getShortcutTitle(shortcuts.get(1)));
330 findPreference("shortcut_2").setOnPreferenceClickListener(this);
332 findPreference("shortcut_1").setTitle(getShortcutTitle(shortcuts.get(0)));
333 findPreference("shortcut_1").setOnPreferenceClickListener(this);
337 switch(shortcuts.size()) {
339 getPreferenceScreen().removePreference(findPreference("shortcut_2"));
341 getPreferenceScreen().removePreference(findPreference("shortcut_3"));
343 getPreferenceScreen().removePreference(findPreference("shortcut_4"));
345 getPreferenceScreen().removePreference(findPreference("shortcut_5"));
350 @SuppressWarnings("deprecation")
351 @TargetApi(Build.VERSION_CODES.N_MR1)
353 public boolean onPreferenceClick(Preference p) {
354 UserManager userManager = (UserManager) getSystemService(USER_SERVICE);
355 LauncherApps launcherApps = (LauncherApps) getSystemService(LAUNCHER_APPS_SERVICE);
356 boolean appIsValid = isStartButton || isOverflowMenu ||
357 !launcherApps.getActivityList(getIntent().getStringExtra("package_name"),
358 userManager.getUserForSerialNumber(userId)).isEmpty();
360 if(appIsValid) switch(p.getKey()) {
362 startFreeformActivity();
363 launcherApps.startAppDetailsActivity(ComponentName.unflattenFromString(componentName), userManager.getUserForSerialNumber(userId), null, null);
365 showStartMenu = false;
366 shouldHideTaskbar = true;
367 contextMenuFix = false;
370 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && isInMultiWindowMode()) {
371 Intent intent2 = new Intent(ContextMenuActivity.this, DummyActivity.class);
372 intent2.putExtra("uninstall", packageName);
373 intent2.putExtra("user_id", userId);
375 startFreeformActivity();
376 startActivity(intent2);
378 startFreeformActivity();
380 Intent intent2 = new Intent(Intent.ACTION_DELETE, Uri.parse("package:" + packageName));
381 intent2.putExtra(Intent.EXTRA_USER, userManager.getUserForSerialNumber(userId));
384 startActivity(intent2);
385 } catch (ActivityNotFoundException e) { /* Gracefully fail */ }
388 showStartMenu = false;
389 shouldHideTaskbar = true;
390 contextMenuFix = false;
392 case "open_taskbar_settings":
393 startFreeformActivity();
395 Intent intent2 = new Intent(this, MainActivity.class);
396 intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
397 startActivity(intent2);
399 showStartMenu = false;
400 shouldHideTaskbar = true;
401 contextMenuFix = false;
404 Intent quitIntent = new Intent("com.farmerbb.taskbar.QUIT");
405 quitIntent.setPackage(BuildConfig.APPLICATION_ID);
406 sendBroadcast(quitIntent);
408 showStartMenu = false;
409 shouldHideTaskbar = true;
410 contextMenuFix = false;
413 PinnedBlockedApps pba = PinnedBlockedApps.getInstance(this);
414 if(pba.isPinned(componentName))
415 pba.removePinnedApp(this, componentName);
417 Intent intent = new Intent();
418 intent.setComponent(ComponentName.unflattenFromString(componentName));
420 LauncherActivityInfo appInfo = launcherApps.resolveActivity(intent, userManager.getUserForSerialNumber(userId));
421 if(appInfo != null) {
422 AppEntry newEntry = new AppEntry(
426 IconCache.getInstance(this).getIcon(this, getPackageManager(), appInfo),
429 newEntry.setUserId(userId);
430 pba.addPinnedApp(this, newEntry);
435 PinnedBlockedApps pba2 = PinnedBlockedApps.getInstance(this);
436 if(pba2.isBlocked(componentName))
437 pba2.removeBlockedApp(this, componentName);
439 pba2.addBlockedApp(this, new AppEntry(
447 case "show_window_sizes":
448 getPreferenceScreen().removeAll();
450 addPreferencesFromResource(R.xml.pref_context_menu_window_size_list);
451 findPreference("window_size_standard").setOnPreferenceClickListener(this);
452 findPreference("window_size_large").setOnPreferenceClickListener(this);
453 findPreference("window_size_fullscreen").setOnPreferenceClickListener(this);
454 findPreference("window_size_half_left").setOnPreferenceClickListener(this);
455 findPreference("window_size_half_right").setOnPreferenceClickListener(this);
456 findPreference("window_size_phone_size").setOnPreferenceClickListener(this);
458 SharedPreferences pref = U.getSharedPreferences(this);
459 if(pref.getBoolean("save_window_sizes", true)) {
460 String windowSizePref = SavedWindowSizes.getInstance(this).getWindowSize(this, packageName);
461 CharSequence title = findPreference("window_size_" + windowSizePref).getTitle();
462 findPreference("window_size_" + windowSizePref).setTitle('\u2713' + " " + title);
466 U.showToast(this, R.string.window_sizes_not_available);
469 secondaryMenu = true;
471 case "window_size_standard":
472 case "window_size_large":
473 case "window_size_fullscreen":
474 case "window_size_half_left":
475 case "window_size_half_right":
476 case "window_size_phone_size":
477 String windowSize = p.getKey().replace("window_size_", "");
479 SharedPreferences pref2 = U.getSharedPreferences(this);
480 if(pref2.getBoolean("save_window_sizes", true)) {
481 SavedWindowSizes.getInstance(this).setWindowSize(this, packageName, windowSize);
484 startFreeformActivity();
485 U.launchApp(getApplicationContext(), packageName, componentName, userId, windowSize, false, true);
487 showStartMenu = false;
488 shouldHideTaskbar = true;
489 contextMenuFix = false;
491 case "app_shortcuts":
492 getPreferenceScreen().removeAll();
495 secondaryMenu = true;
502 U.startShortcut(getApplicationContext(), packageName, componentName, shortcuts.get(Integer.parseInt(p.getKey().replace("shortcut_", "")) - 1));
504 showStartMenu = false;
505 shouldHideTaskbar = true;
506 contextMenuFix = false;
508 case "start_menu_apps":
509 startFreeformActivity();
511 Intent intent = null;
513 SharedPreferences pref3 = U.getSharedPreferences(this);
514 switch(pref3.getString("theme", "light")) {
516 intent = new Intent(this, SelectAppActivity.class);
519 intent = new Intent(this, SelectAppActivityDark.class);
523 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
524 && pref3.getBoolean("freeform_hack", false)
525 && intent != null && isInMultiWindowMode()) {
526 intent.putExtra("no_shadow", true);
527 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
529 U.launchAppMaximized(getApplicationContext(), intent);
531 startActivity(intent);
533 showStartMenu = false;
534 shouldHideTaskbar = true;
535 contextMenuFix = false;
538 AudioManager audio = (AudioManager) getSystemService(AUDIO_SERVICE);
539 audio.adjustSuggestedStreamVolume(AudioManager.ADJUST_SAME, AudioManager.USE_DEFAULT_STREAM_TYPE, AudioManager.FLAG_SHOW_UI);
541 showStartMenu = false;
542 shouldHideTaskbar = true;
543 contextMenuFix = false;
546 Intent fileManagerIntent;
548 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
549 startFreeformActivity();
550 fileManagerIntent = new Intent("android.provider.action.BROWSE");
552 fileManagerIntent = new Intent("android.provider.action.BROWSE_DOCUMENT_ROOT");
553 fileManagerIntent.setComponent(ComponentName.unflattenFromString("com.android.documentsui/.DocumentsActivity"));
556 fileManagerIntent.addCategory(Intent.CATEGORY_DEFAULT);
557 fileManagerIntent.setData(Uri.parse("content://com.android.externalstorage.documents/root/primary"));
560 startActivity(fileManagerIntent);
561 } catch (ActivityNotFoundException e) {
562 U.showToast(this, R.string.lock_device_not_supported);
565 showStartMenu = false;
566 shouldHideTaskbar = true;
567 contextMenuFix = false;
569 case "system_settings":
570 startFreeformActivity();
572 Intent settingsIntent = new Intent(Settings.ACTION_SETTINGS);
575 startActivity(settingsIntent);
576 } catch (ActivityNotFoundException e) {
577 U.showToast(this, R.string.lock_device_not_supported);
580 showStartMenu = false;
581 shouldHideTaskbar = true;
582 contextMenuFix = false;
587 showStartMenu = false;
588 shouldHideTaskbar = true;
589 contextMenuFix = false;
592 U.sendAccessibilityAction(this, AccessibilityService.GLOBAL_ACTION_POWER_DIALOG);
594 showStartMenu = false;
595 shouldHideTaskbar = true;
596 contextMenuFix = false;
598 case "change_wallpaper":
599 Intent intent3 = Intent.createChooser(new Intent(Intent.ACTION_SET_WALLPAPER), getString(R.string.set_wallpaper));
600 intent3.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
601 U.launchAppMaximized(getApplicationContext(), intent3);
603 showStartMenu = false;
604 shouldHideTaskbar = true;
605 contextMenuFix = false;
609 if(!secondaryMenu) finish();
614 protected void onPause() {
616 if(!isFinishing()) finish();
620 public void finish() {
621 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.CONTEXT_MENU_DISAPPEARING"));
623 if(!dashboardOrStartMenuAppearing) {
625 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.TOGGLE_START_MENU_ALT"));
626 else if(shouldHideTaskbar) {
627 SharedPreferences pref = U.getSharedPreferences(this);
628 if(pref.getBoolean("hide_taskbar", true) && !FreeformHackHelper.getInstance().isInFreeformWorkspace())
629 LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_TASKBAR"));
635 overridePendingTransition(0, 0);
638 @SuppressWarnings("deprecation")
639 private void startFreeformActivity() {
640 SharedPreferences pref = U.getSharedPreferences(this);
641 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
642 && pref.getBoolean("taskbar_active", false)
643 && pref.getBoolean("freeform_hack", false)
644 && isInMultiWindowMode()
645 && !FreeformHackHelper.getInstance().isFreeformHackActive()) {
646 U.startFreeformHack(this, false, false);
650 @TargetApi(Build.VERSION_CODES.N_MR1)
651 private int getLauncherShortcuts() {
652 LauncherApps launcherApps = (LauncherApps) getSystemService(LAUNCHER_APPS_SERVICE);
653 if(launcherApps.hasShortcutHostPermission()) {
654 UserManager userManager = (UserManager) getSystemService(USER_SERVICE);
656 LauncherApps.ShortcutQuery query = new LauncherApps.ShortcutQuery();
657 query.setActivity(ComponentName.unflattenFromString(componentName));
658 query.setQueryFlags(LauncherApps.ShortcutQuery.FLAG_MATCH_DYNAMIC
659 | LauncherApps.ShortcutQuery.FLAG_MATCH_MANIFEST
660 | LauncherApps.ShortcutQuery.FLAG_MATCH_PINNED);
662 shortcuts = launcherApps.getShortcuts(query, userManager.getUserForSerialNumber(userId));
663 if(shortcuts != null)
664 return shortcuts.size();
670 @TargetApi(Build.VERSION_CODES.N_MR1)
671 private CharSequence getShortcutTitle(ShortcutInfo shortcut) {
672 CharSequence longLabel = shortcut.getLongLabel();
673 if(longLabel != null && longLabel.length() > 0 && longLabel.length() <= 20)
676 return shortcut.getShortLabel();
679 @SuppressWarnings("deprecation")
681 public void onBackPressed() {
683 secondaryMenu = false;
685 getPreferenceScreen().removeAll();
688 if(contextMenuFix && !showStartMenu)
689 U.startFreeformHack(this, false, false);
691 super.onBackPressed();
692 if(FreeformHackHelper.getInstance().isInFreeformWorkspace())
693 overridePendingTransition(0, 0);
698 protected void onDestroy() {
701 LocalBroadcastManager.getInstance(this).unregisterReceiver(finishReceiver);