首页 > 其他分享 >Android14——Launcher3删除“对话”微件、删除“通讯录微件下面的直接拨打电话,直接发送短信两个子微件”

Android14——Launcher3删除“对话”微件、删除“通讯录微件下面的直接拨打电话,直接发送短信两个子微件”

时间:2024-11-09 09:19:42浏览次数:3  
标签:删除 widgetsAndShortcuts app launcherWidgetInfo add 通讯录 new 微件

删除“对话”微件

/packages/apps/Launcher3/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java

原始代码:

    public List<ComponentWithLabelAndIcon> update(
            LauncherAppState app, @Nullable PackageUserKey packageUser) {
        Preconditions.assertWorkerThread();

        Context context = app.getContext();
        final ArrayList<WidgetItem> widgetsAndShortcuts = new ArrayList<>();
        List<ComponentWithLabelAndIcon> updatedItems = new ArrayList<>();
        try {
            InvariantDeviceProfile idp = app.getInvariantDeviceProfile();
            PackageManager pm = app.getContext().getPackageManager();

            // Widgets
            WidgetManagerHelper widgetManager = new WidgetManagerHelper(context);
            for (AppWidgetProviderInfo widgetInfo : widgetManager.getAllProviders(packageUser)) {
                LauncherAppWidgetProviderInfo launcherWidgetInfo =
                        LauncherAppWidgetProviderInfo.fromProviderInfo(context, widgetInfo);

                widgetsAndShortcuts.add(new WidgetItem(
                        launcherWidgetInfo, idp, app.getIconCache(), app.getContext()));
                updatedItems.add(launcherWidgetInfo);
            }

            // Shortcuts
            for (ShortcutConfigActivityInfo info :
                    queryList(context, packageUser)) {
                widgetsAndShortcuts.add(new WidgetItem(info, app.getIconCache(), pm));
                updatedItems.add(info);
            }
            setWidgetsAndShortcuts(widgetsAndShortcuts, app, packageUser);
        } catch (Exception e) {
            if (!FeatureFlags.IS_STUDIO_BUILD && Utilities.isBinderSizeError(e)) {
                // the returned value may be incomplete and will not be refreshed until the next
                // time Launcher starts.
                // TODO: after figuring out a repro step, introduce a dirty bit to check when
                // onResume is called to refresh the widget provider list.
            } else {
                throw e;
            }
        }

        return updatedItems;
    }

代码修改:

    public List<ComponentWithLabelAndIcon> update(
            LauncherAppState app, @Nullable PackageUserKey packageUser) {
        Preconditions.assertWorkerThread();

        Context context = app.getContext();
        final ArrayList<WidgetItem> widgetsAndShortcuts = new ArrayList<>();
        List<ComponentWithLabelAndIcon> updatedItems = new ArrayList<>();
        try {
            InvariantDeviceProfile idp = app.getInvariantDeviceProfile();
            PackageManager pm = app.getContext().getPackageManager();

            // Widgets
            WidgetManagerHelper widgetManager = new WidgetManagerHelper(context);
            for (AppWidgetProviderInfo widgetInfo : widgetManager.getAllProviders(packageUser)) {
                LauncherAppWidgetProviderInfo launcherWidgetInfo =
                        LauncherAppWidgetProviderInfo.fromProviderInfo(context, widgetInfo);
				//MengLingbiao add it to remove some widget.[mc45][77391][2024_11_03]
				String packageName = launcherWidgetInfo.getComponent().getPackageName();
				Log.d("mlb","pName:"+packageName);
				if( !packageName.equals("com.android.systemui") ){
					widgetsAndShortcuts.add(new WidgetItem(launcherWidgetInfo, idp, app.getIconCache(), app.getContext()));
					updatedItems.add(launcherWidgetInfo);
				}
				//MengLingbiao add it to remove some widget.[mc45][77391][2024_11_03]
            }

            // Shortcuts
            for (ShortcutConfigActivityInfo info :
                    queryList(context, packageUser)) {
                widgetsAndShortcuts.add(new WidgetItem(info, app.getIconCache(), pm));
                updatedItems.add(info);
            }
            setWidgetsAndShortcuts(widgetsAndShortcuts, app, packageUser);
        } catch (Exception e) {
            if (!FeatureFlags.IS_STUDIO_BUILD && Utilities.isBinderSizeError(e)) {
                // the returned value may be incomplete and will not be refreshed until the next
                // time Launcher starts.
                // TODO: after figuring out a repro step, introduce a dirty bit to check when
                // onResume is called to refresh the widget provider list.
            } else {
                throw e;
            }
        }

        return updatedItems;
    }

我们看一下新增的代码:

				//MengLingbiao add it to remove some widget.[mc45][77391][2024_11_03]
				String packageName = launcherWidgetInfo.getComponent().getPackageName();
				Log.d("mlb","pName:"+packageName);
				if( !packageName.equals("com.android.systemui") ){
					widgetsAndShortcuts.add(new WidgetItem(launcherWidgetInfo, idp, app.getIconCache(), app.getContext()));
					updatedItems.add(launcherWidgetInfo);
				}
				//MengLingbiao add it to remove some widget.[mc45][77391][2024_11_03]

首先,我们获取应用微件的包名,然后通过包名进行过滤,就是找出来这个微件的包名,然后不让这个微件进行添加到集合中,这样也就显示不出来了。

说明:在Widgets这个代码下,显示的包名可能不能包含所有微件,这是因为有一部分是在Shortcuts下进行显示的,所以根据你的需要在上面代码的不同位置进行过滤哦。

删除“通讯录微件下面的直接拨打电话,直接发送短信两个子微件”

/packages/apps/Contacts/AndroidManifest.xml
        <activity-alias
            android:name="alias.DialShortcut"
            android:icon="@drawable/logo_quick_contacts_dialer_color_44in48dp"
            android:label="@string/shortcutDialContact"
            android:exported="true"
            android:targetActivity=".activities.ContactSelectionActivity">

            <intent-filter>
                <action android:name="android.intent.action.CREATE_SHORTCUT"/>

                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.CAR_MODE"/>
            </intent-filter>

        </activity-alias>

        <activity-alias
            android:name="alias.MessageShortcut"
            android:icon="@drawable/logo_quick_contacts_mail_color_44in48dp"
            android:label="@string/shortcutMessageContact"
            android:exported="true"
            android:targetActivity=".activities.ContactSelectionActivity">

            <intent-filter>
                <action android:name="android.intent.action.CREATE_SHORTCUT"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>

        </activity-alias>      

在该文件中找到上面这个代码,直接注释掉,就可以删除这两个子微件,删除子微件的方法是比较简单的,要删除哪个应用的子微件,就去哪个应用的根目录下找AndroidManifest.xml,在这里面找到你要注释掉的微件即可。

标签:删除,widgetsAndShortcuts,app,launcherWidgetInfo,add,通讯录,new,微件
From: https://blog.csdn.net/qq_45696288/article/details/143626292

相关文章

  • 在Git历史记录中删除大文件
    写在前面删除git历史文件能够有效减小git仓库尺寸,但是一定注意:删除历史记录也会导致当前目录文件丢失,请做好备份!!!如果不小心在git中提交了大文件,可以在历史记录中彻底删除,然后使用GitLFS存放大文件。三步搞定反复执行以下三步即可,直到查询出的文件无需删除。找到历史记录中......
  • 【QT项目】QT6项目之基于C++的通讯录管理系统(联系人/学生管理系统)
    目录一.项目背景二.创建工程工程创建添加文件 联系人类 功能类三.功能实现联系人类person.cppperson.h 查查询按钮槽函数返回按钮槽函数findperson.cpp:增addperson.cpp:删deleteperson.cpp:改changeperson.cpp:!!显示!!displayperson.cpp:清除clearp......
  • 代码随想录算法训练营第二十天|leetcode235. 二叉搜索树的最近公共祖先、leetcode701.
    1leetcode235.二叉搜索树的最近公共祖先题目链接:235.二叉搜索树的最近公共祖先-力扣(LeetCode)文章链接:代码随想录视频链接:二叉搜索树找祖先就有点不一样了!|235.二叉搜索树的最近公共祖先_哔哩哔哩_bilibili思路:用之前一样的方法,哈哈哈哈哈,好处就是做出来了,但是我觉得需......
  • 数据结构_链表_双向循环链表 & 栈 的初始化、插入、删除、修改、查询打印(基于C语言实
    一、双向循环链表的原理与应用双向循环链表与双向链表的区别:指的是双向循环链表的首结点中的prev指针成员指向链表的尾结点,并且双向循环链表的尾结点里的next指针成员指向链表的首结点,所以双向循环链表也属于环形结构。由于带头结点更加方便用户进行数据访问,所以本次创建一条带......
  • 数据结构_链表_单向循环链表 & 双向链表的初始化、插入、删除、修改、查询打印(基于C语
    一、单向循环链表的原理与应用思考:对于单向链表而言,想要遍历链表,则必须从链表的首结点开始进行遍历,请问有没有更简单的方案实现链表中的数据的增删改查?回答:是有的,可以使用单向循环的链表进行设计,单向循环的链表的使用规则和普通的单向链表没有较大的区别,需要注意:单向循环链表的......
  • 20. 使用MySQL之更新和删除数据
    1.更新数据为了更新(修改)表中的数据,可使用UPDATE语句。可采用两种方式使用UPDATE:更新表中特定行;更新表中所有行。注意:不要省略WHERE子句:在使用UPDATE时一定要注意细心。因为稍不注意,就会更新表中所有行。UPDATE与安全:可以限制和控制UPDATE语句的使用,更多内容请......
  • 【LeetCode】返回链表的中间结点、删除链表的倒数第 N 个结点
    主页:HABUO......
  • kubectl命令强制删除一直terminating的namespace(通过API直接修改Namespace的Finalizer
    要强制删除处于“Terminating”状态的ingress-nginx命名空间,您可以按照以下步骤操作:获取命名空间的JSON描述并保存到文件:kubectlgetnamespaceingress-nginx-ojson>ingress-nginx.json编辑保存的JSON文件:打开ingress-nginx.json文件,找到metadata.fina......
  • mysql如何批量删除海量数据
    一、删除大表的部分数据一个表有1亿6000万的数据,有一个自增ID。最大值就是1亿6000万,需要删除大于250万以后的数据,有什么办法可以快速删除?看到mysql文档有一种解决方案:http://dev.mysql.com/doc/refman/5.0/en/delete.htmlIfyouaredeletingmanyrowsfromalargetable,......
  • Python 中删除文件的几种方法
    传统的文件删除方法在开始介绍最Pythonic的删除文件方式之前,先来回顾一下传统的文件删除方法。通常,我们使用os模块提供的os.remove()函数来删除文件。但是,使用该函数时需要先判断文件是否存在,然后再进行删除操作。 下面是一个示例代码片段来展示传统的文件删除方法:importo......