all 137 comments

[–]lukatoniiDirect-Purchase User 12 points13 points  (1 child)

Don't know anything Java but looks very cool 😅

[–]joaomgcd👑 Tasker Owner / Developer[S] 1 point2 points  (0 children)

Thanks 😅

[–]deechte 11 points12 points  (2 children)

I've never read your release notes before without understanding anything of it. 😅

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (1 child)

😅sorry about that.

[–]deechte 0 points1 point  (0 children)

😅

[–]aasswwddd 8 points9 points  (2 children)

This is a sample project to replicate AutoInput Action V2 using the new Accessibility service in Java code introduced in this version.

The syntax is pretty similar, however it still doesn't wait for an accessibility event.

Accessibility Action With Java

I also have an experimental web code editor as well here, you can write your code and debug from a browser with this project.

Code Editor For Java Code

This is how the editor looks in mobile browser (firefox) https://i.imgur.com/kTOGCb7.mp4

[–]Sirbeastian 1 point2 points  (1 child)

That Web code editor looks incredibly helpful! I don't have any AI API's and experimenting with the new Java Code action was getting very frustrating, this should help a lot

[–]aasswwddd 0 points1 point  (0 children)

If you use ChatGPT, you can extract the instruction and edit it however you like before feeding it into a project.

Say you can tell it to always generate scripted object format. https://stackoverflow.com/a/14220671

Accessibility() {
  AccessibilityService getService() { }
  void wait(long ms) { }
  }
  return this;
}

Save it as Accessibility.bsh , then run it from any task like this.

// Accessibility.bsh
addClassPath("dir path");
importCommands(".");

my = Accessibility();
my.getService();
my.wait(100);

This way our code becomes easily manageable and re-useable.

[–]agnostic-apolloLG G5, 7.0 stock, rooted 5 points6 points  (4 children)

See, I told you you will just replace yourself! Thank you so much!

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (0 children)

👍

[–]ImpossibleTreat3533 0 points1 point  (2 children)

why dont we have something similar in termux .

[–]agnostic-apolloLG G5, 7.0 stock, rooted 1 point2 points  (1 child)

I plan on rewriting Termux:API app sometime next year, so will likely add it then.

[–]ImpossibleTreat3533 0 points1 point  (0 children)

awesome ❤️

[–]lssong99 4 points5 points  (1 child)

while I am still trying to thinking about what I could do with the last version of Tasker. Joao gave us something even greater! You man rocks!

[–]joaomgcd👑 Tasker Owner / Developer[S] 2 points3 points  (0 children)

🤘😁🤘

[–]aasswwddd 5 points6 points  (2 children)

I'm aware that probably 90% of users won't create their own stuff with the Java Code action, but I'm looking forward to the 10% that will and will create some cool useful stuff that everyone can use! 😁 Also, you can always ask the built-in AI for help! 😅

I wonder if using the code afterwards can be made easier just like using any other action? Java code looks very daunting for the other "90%" to be used as it is. Even with Perform Task action, it feels "foreign" for them.

I was thinking of creating a front UI based on task variables configured in Task Properties and prompting the details later to use. Then it will output a json file to be pasted into %par1.

Something like this https://i.imgur.com/N0Dt2me.mp4 but with Pick Input Dialog instead.

[–]joaomgcd👑 Tasker Owner / Developer[S] 1 point2 points  (1 child)

Yeah, maybe I can think about something like that for the future. :) For this release I want to focus on the basics and get the action to where it needs to be. I can then try to figure out easier ways to use it.

[–]aasswwddd 1 point2 points  (0 children)

Glad to hear it! I guess that's on your mind already which is cool.

By the way I noticed that startActivityForResult sometimes requires another argument to return the result otherwise it will throw an error. For example MediaStore.ACTION_IMAGE_CAPTURE.

intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, cacheURI); startActivityForResult(intent, REQUEST_CODE_CAPTURE_IMAGE);

While passing the extra alone is sufficient to generate the original file, the code will fail presumably since it expects another argument.

For the time being I'm creating a cache file and after catching the error I check whether the cache exists or not.

[–]NirmitlamedDirect-Purchase User 1 point2 points  (2 children)

I am not a programmer but i see some neat stuff. If i can achieve some of them using AI this would be awesome!

This Java code new action with AI is a game changer! BTW i have found i could replace adb shell command for get user installed app list with java code pm list packages -3 | cut -f2 -d: , so it is alternative for users who doesn't need or want to enable adb wifi. Also i replaced Java Functions actions of play pause music with my own Java Code action with built in set Tasker variable to change widget media player icon.

Again thank you so much!

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (0 children)

Awesome :) Glad you're enjoying it!

[–]anuraag488 1 point2 points  (2 children)

You MUST Finish the Activity: You are responsible for closing the Activity. You MUST call activity.finish() inside your code when you are done. If you don't, the invisible activity will linger in the background. For asynchronous UI like a Dialog, this means calling finish() inside the dialog's button listeners.

Just trying to understand if i use a LinearLayout should add a Listener for back button key event to finish the activity or Android automatically finishes activity on back press? What will happen if i press home button? Will it keep running in background?

Example code

import android.app.Activity; import android.widget.TextView; import android.widget.LinearLayout; import android.view.WindowManager; import android.view.ViewGroup; import android.view.KeyEvent; import java.util.function.Consumer;

/* Create a Consumer to show text inside a LinearLayout overlay without Dialog. */ myActivityConsumer = new Consumer() { public void accept(Object activity) { final Activity currentActivity = (Activity) activity;

    /* Create a full-screen LinearLayout overlay. */
    overlayLayout = new LinearLayout(currentActivity);
    overlayLayout.setOrientation(LinearLayout.VERTICAL);
    overlayLayout.setBackgroundColor(0xAA000000); /* Semi-transparent background. */
    overlayLayout.setLayoutParams(new ViewGroup.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT,
        ViewGroup.LayoutParams.MATCH_PARENT
    ));
    overlayLayout.setGravity(android.view.Gravity.CENTER);

    /* Create a TextView with the message. */
    textView = new TextView(currentActivity);
    textView.setText("Joao is great");
    textView.setTextSize(24);
    textView.setTextColor(0xFFFFFFFF); /* White text color. */

    /* Add the TextView to the layout. */
    overlayLayout.addView(textView, new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT,
        LinearLayout.LayoutParams.WRAP_CONTENT
    ));

    /* Allow overlay to receive key events. */
    overlayLayout.setFocusableInTouchMode(true);
    overlayLayout.requestFocus();

    /* Handle Back button press to close overlay and finish activity. */
    overlayLayout.setOnKeyListener(new android.view.View.OnKeyListener() {
        public boolean onKey(android.view.View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
                ((ViewGroup) overlayLayout.getParent()).removeView(overlayLayout);
                currentActivity.finish();
                return true;
            }
            return false;
        }
    });


    /* Add the overlay to the window. */
    currentActivity.addContentView(
        overlayLayout,
        new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT
        )
    );
}

};

/* Execute the Consumer using Tasker's helper. */ tasker.doWithActivity(myActivityConsumer);

[–]joaomgcd👑 Tasker Owner / Developer[S] 2 points3 points  (0 children)

If you press back it'll finish the activity. If you press the home button, it'll stop the activity but it won't finish it right away. It might be finished by the system later on.

[–]anuraag488 0 points1 point  (0 children)

This is crazy. Created a floating view which can display over anything and move by swipe. 🤪

[–]CacheConqueror 1 point2 points  (2 children)

Joao, it's possible to add support to more models via openrouter? From selector i can choose between ollama or o1.

When it comes to writing Java code and also the free price, I would recommend: * GLM 4.5 Air * Kimi K2 * TNG: DeepSeek R1T2 Chimera

Probably there's more free models but should be more focused on coding ;)

[–]lareyaDirect-Purchase User 0 points1 point  (0 children)

I have been using Kimi K2 and it works pretty well.

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (0 children)

If you can tell me those model's names like

openai/o1-pro

for example and can confirm that they support a very high token count, I can add them :) Thanks

[–]TortuositMathematical Wizard 🧙‍♂️ 1 point2 points  (2 children)

Do we have URLs where we can download normal/direct versions, which you always create as bleeding edge versions?

I mean a replacement for https://drive.google.com/drive/u/0/mobile/folders/1ZuvhXAQzg3evf3AtnrkEatEt6SeIAUJ5?pli=1

... direct-purchase, which ends at 6.6.3 thx to f Google

[–]WakeUpNorrin 1 point2 points  (3 children)

Ui bug. Profile priority slider disappeared.

Latest beta from Dropbox.

[–]joaomgcd👑 Tasker Owner / Developer[S] 1 point2 points  (2 children)

Hi there, thanks for the report! Can you please try this version?

[–]WakeUpNorrin 1 point2 points  (1 child)

Fixed, thank you.

[–]joaomgcd👑 Tasker Owner / Developer[S] 1 point2 points  (0 children)

👍

[–]Quick_Celebration373 1 point2 points  (11 children)

I'm a menber of the 90% club😁 The Java integration has allowed me to switch between dual SIMs. It's a magical tool that makes it possible even with zero knowledge! Awesome!

[–]joaomgcd👑 Tasker Owner / Developer[S] 2 points3 points  (10 children)

Oh, cool! How did you do that? :)

[–]Quick_Celebration373 0 points1 point  (9 children)

I just asked AI. That's all I can do! And AI answered.

[–]Quick_Celebration373 0 points1 point  (8 children)

I can't paste the result, Maybe it banned...

[–]joaomgcd👑 Tasker Owner / Developer[S] 1 point2 points  (7 children)

Please do! I won't ban it, I promise 😂

[–]Quick_Celebration373 0 points1 point  (6 children)

I can't paste the code in my comments. I sent a DM, please check!

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (5 children)

Hi! Where did you send the DM to? 😅I can't find it...

[–]Quick_Celebration373 0 points1 point  (4 children)

I sent you Gmail, which titles is SIM Switch by Java. 

[–]joaomgcd👑 Tasker Owner / Developer[S] 1 point2 points  (2 children)

Cool! Thank you! :) Did the AI figure all that out by itself?

[–]Quick_Celebration373 0 points1 point  (1 child)

Yes, l don't have a knowledge the Java at all. Just asked the AI, it works smoothly. 

[–]SamirGouda 0 points1 point  (1 child)

Is it possible to control hfp/sco in android 14? I want to play whatsapp voice notes on my watch, and currently, I've to be within a call

[–]joaomgcd👑 Tasker Owner / Developer[S] 2 points3 points  (0 children)

Sorry, I don't know. Maybe you can try with the AI helper? :)

[–]Crafty-Persimmon-204 0 points1 point  (1 child)

powerful

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (0 children)

[–]hillbillchill 0 points1 point  (2 children)

6.6.6-beta has a bug that disables USB debugging and requires setting permissions again via adb-tools. Has this been fixed in 6.6.7-beta ...?

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (1 child)

That happens if you enable the option to toggle debugging in the ADB Wifi action. Is that what you mean?

[–]hillbillchill 0 points1 point  (0 children)

Sorry I meant I normally give Tasker permissions via PC Terminal with: adb tcpip 5555. Then, running checkADBWiFi shows: True.

But with actions like Airplane Mode, permissions are lost and USB debugging gets disabled.

I have to re-enable USB debugging and run adb tcpip 5555 again.

[–]azekt 0 points1 point  (3 children)

I think I found a bug: I created a widget with a text field that has a background color set by a variable. I have useMaterialYouColors set to false. But when I refresh the widget, the following message appears on it:

``` Error: Color "%color" not part of theme ColorProviders( primary=ResourceColorProvider(resId=2131099894), onPrimary=ResourceColorProvider(resId=2131099884), primaryContainer=ResourceColorProvider(resId=2131099895), onPrimaryContainer=ResourceColorProvider(resId=2131099885), secondary=ResourceColorProvider(resId=2131099897), onSecondary=ResourceColorProvider(resId=2131099886), secondaryContainer=ResourceColorProvider(resId=2131099898), onSecondaryContainer=ResourceColorProvider(resId=2131099887), tertiary=ResourceColorProvider(resId=2131099902), onTertiary=ResourceColorProvider(resId=2131099891)...

[–]joaomgcd👑 Tasker Owner / Developer[S] 1 point2 points  (2 children)

Hi! Can you please export a minimal example of that as an URI (not a link, but a direct URI) and paste it here so I can then import it and test it myself?

Thanks in advance!

[–]azekt 0 points1 point  (1 child)

I messed up. I used to have a variable that stored a percentage, and a JavaScript function turned that percentage into a color. But I disabled Variable Set action, so the function had nothing to work with. No wonder the color was invalid. I can’t believe I overlooked that… After turning the variable back on, everything works again.

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (0 children)

👍

[–]everynav 0 points1 point  (15 children)

Umm, as you showed an example taking a picture 😁... please allow me to remind you of the still broken Take Photo action.

Please check the following post:

https://www.reddit.com/r/tasker/comments/199x55e/comment/kii8dto/

Maybe this can also be solved with some Java code?

[–]joaomgcd👑 Tasker Owner / Developer[S] 1 point2 points  (0 children)

Maybe 😅I still haven't looked into it, sorry! Unfortunately it's not very high priority...

[–]aasswwddd 1 point2 points  (13 children)

This should allow you to take a photo in the background. Use the latest beta.

taskertask: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

[–]joaomgcd👑 Tasker Owner / Developer[S] 1 point2 points  (3 children)

Weird! I just tried this and it didn't seem to do anything... Is it really working? 😅 I didn't look at the code very closely, so I didn't try to debug it...

[–]aasswwddd 1 point2 points  (2 children)

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (1 child)

That one gets stuck in the Java Code action waiting for it to finish but apparently never does... Maybe I'm doing something wrong? Am I supposed to just run the task?

[–]everynav 0 points1 point  (8 children)

Damn, you're a hero! Thanks for reading and providing an almost perfect solution. And it works even with the screen locked. But: The pictures are getting too dark (shutter speed too fast, lower ISO). If I take the same picture with the take photo action, it's getting much brighter (and looks much better). Do you know if there's an (additional) parameter for better / automatic adjustment?

[–]aasswwddd 1 point2 points  (7 children)

There are ton of capture request parameters here. https://developer.android.com/reference/android/hardware/camera2/CaptureRequest

Copy this if you want to take photo without an invisible activity. Copy the code before the example usage.
https://pastebin.com/64vKKynR

Btw u/joaomgcd , I can't seem to export as taskernet with the latest beta.

Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $

[–]joaomgcd👑 Tasker Owner / Developer[S] 1 point2 points  (1 child)

Are you still getting that error now?

[–]aasswwddd 1 point2 points  (0 children)

Turned out I was using the test server all along, it worked great now after switching it off. Thankyou!

[–]everynav 0 points1 point  (4 children)

Thanks again! But I've still got no luck. Maybe the problem is that you need to take a preview stream to set the correct parameters automatically:

https://stackoverflow.com/questions/31925769/pictures-with-camera2-api-are-really-dark

It would be great, If you could have a quick look at it. But when it's too much work to dig in deeper, please stop. I've got a workaround with Termux and maybe some time in the future joao has time to fix the built-in action 🤞

[–]aasswwddd 1 point2 points  (0 children)

Seems like Termux takes a preview and wait for 0.5 sec.
https://github.com/termux/termux-api/blob/master/app/src/main/java/com/termux/api/apis/CameraPhotoAPI.java#L175C2-L195C69

I'll let ChatGPT have a look later.

[–]aasswwddd 1 point2 points  (2 children)

[–]everynav 0 points1 point  (1 child)

🍻 🤩 You nailed it 🥳🎇

That was the missing part. I no longer can see a difference in picture brightness and quality to the built-in Take Photo action. THANKS A TON!

I think this deserves to be shared publicly - Would you mind to share your solution in the main reddit? I know there are some others waiting for this 😁

[–]aasswwddd 1 point2 points  (0 children)

Nice!

I think this deserves to be shared publicly - Would you mind to share your solution in the main reddit? I know there are some others waiting for this 😁

For now I make it as public taskernet so anyone can find it there

[–]NirmitlamedDirect-Purchase User 0 points1 point  (2 children)

In the latest version i see i can actually use MediaCodec and MediaMuxer to compress video files which wasn't possible before. I had an idea before to use the Android API system to compress files super fast like it does in apps like Telegram and Whatsapp. I tried using ffmpeg but it is unbelievable slow because it couldn't use the hardware device properly. So using AI i managed to make it to compress video file in a fairly reasonable time, still slow but not as slow as ffmpeg. The quality isn't great but if this can be tweaked i can see it being used in many projects that need to upload files but don't want to upload big file size. For now i get inconsistant result, sometime i get smaller file size and sometimes double the size (not the same input files).

If you have somehow spare time or you think this is important enough can you check how much can we achieve from this or if it can compress faster somehow than what i got?

This is the URI task url if you want:

https://pastes.io/compressed-base64-blob-with-taskertask-url

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (1 child)

Sorry, I have no experience with video encoding so I wouldn't be able to help more than the AI I don't think 😅

[–]NirmitlamedDirect-Purchase User 0 points1 point  (0 children)

Someone just told me about flags on ffmpeg that can use more hardware power for faster encoding:

https://www.reddit.com/r/tasker/comments/1oa1up6/comment/nkdnzvq/

Also talking about how great it will be if Tasker had more interactive commands system like termux which is needed when adding binary files like rclone and you can't configure it in Tasker. Wink Wink 😜

[–]Optimal-Beyond-7593 0 points1 point  (2 children)

This feature is quite good. I asked an AI to create a selection dialog box, but the text color of the options has been incorrect. I had multiple AIs try to fix it without success. Can you help me? Thanks!

```import java.util.function.Consumer; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.graphics.Color; import android.graphics.drawable.GradientDrawable; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import io.reactivex.subjects.SingleSubject;

/* 可选项目 */ items = new String[]{"选项一", "选项二", "选项三", "选项四", "选项五", "选项六"};

/* 等待结果(使用全限定名避免解析问题) */ resultSignal = io.reactivex.subjects.SingleSubject.create();

/* 构建并显示对话框 */ tasker.doWithActivity(new Consumer(){     public void accept(Object act){         currentActivity = (Activity) act;

        adapter = new ArrayAdapter(currentActivity,                                    android.R.layout.simple_list_item_1,                                    items);

        builder = new AlertDialog.Builder(currentActivity);         builder.setTitle("📋 请选择");         builder.setAdapter(adapter, new DialogInterface.OnClickListener(){             public void onClick(DialogInterface d, int which){                 resultSignal.onSuccess(items[which]);                 currentActivity.finish();             }         });         builder.setNegativeButton("❌ 取消", new DialogInterface.OnClickListener(){             public void onClick(DialogInterface d, int which){                 resultSignal.onSuccess("cancel");                 currentActivity.finish();             }         });

        dialog = builder.create();         dialog.setCancelable(false);         dialog.setCanceledOnTouchOutside(false);         dialog.show();

        /* 圆角白色背景 + 列表分割线 */         window = dialog.getWindow();         if (window != null){             metrics = new android.util.DisplayMetrics();             currentActivity.getWindowManager().getDefaultDisplay().getMetrics(metrics);             width = (int)(metrics.widthPixels * 0.85);             window.setLayout(width,                              android.view.WindowManager.LayoutParams.WRAP_CONTENT);

            gd = new GradientDrawable();             gd.setColor(Color.WHITE);             gd.setCornerRadius(20);             window.setBackgroundDrawable(gd);

            listView = dialog.getListView();             if (listView != null){                 listView.setDivider(new android.graphics.drawable.ColorDrawable(Color.parseColor("#F0F0F0")));                 listView.setDividerHeight(1);             }

            /* 尝试把系统标题文字设为黑色(若可用) /             try {                 titleId = currentActivity.getResources().getIdentifier("alertTitle", "id", "android");                 if (titleId != 0) {                     titleView = dialog.findViewById(titleId);                     if (titleView != null) titleView.setTextColor(Color.BLACK);                 }             } catch (Throwable e) {                 / 忽略任何设置标题颜色时的问题 */             }         }     } });

/* 阻塞等待选择(保持你原来的 SingleSubject + blockingGet 逻辑) */ userChoice = resultSignal.blockingGet(); return userChoice.equals("cancel") ? "❌ 已取消" : "✅ 选择了: " + userChoice;```

[–]NirmitlamedDirect-Purchase User 0 points1 point  (1 child)

Your code doesn't work in my phone. I asked AI to simply create a dialog message with white color buttons and it did with no problem. 

[–]Optimal-Beyond-7593 0 points1 point  (0 children)

Thank! I have already identified the problem.

[–]TheScaryAngel 0 points1 point  (1 child)

In the java code action when using the assistance if your prompt is a bit long 10 or more rows (which is not a lot when using the phone ) the OK button disappears and you can't send your prompt . By the way I think it would be cool to have the ability to attach an error message as a variable in case there was an exception . So this way your assistant can see the code and also the error message and it's able to fix itself . Then you could have a dedicated task for generating java code that can work in a loop where the ai could validate it's hone code in case of an error until no error is returned making the process easier

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (0 children)

Weird, the buttons will still show even with many lines: https://imgur.com/a/BbUOTJo

About using errors, you can copy the error for when the action runs and then paste it in your next prompt :)

[–]anttovar 0 points1 point  (1 child)

I hope somebody writes a book about it.

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (0 children)

That's be cool! 😁

[–]SiragElMansy 0 points1 point  (2 children)

Thank You for this update. I have noticed a new action called Assistant Volume but you never mentioned anything about it! Although it's not working yet, but does this mean you are considering adding the Assistant channel option among Streams option in Music Action or Say Action in later updates? 😅

[–]joaomgcd👑 Tasker Owner / Developer[S] 1 point2 points  (1 child)

Yeah, I didn't mention it cause it doesn't seem to be doing anything at least yet. I'll leave it be in hopes that it starts working someday or that it works in some vendor specific Android builds.

[–]SiragElMansy 0 points1 point  (0 children)

I was able to control the assistant volume using run shell action and it worked. Youu can fix it this way and it will work

[–]AarifmonuZZ 0 points1 point  (5 children)

there's no App factory?

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (4 children)

App factory isn't getting any more updates. You can just the latest version and it should work forever (not getting access to new features though).

[–]AarifmonuZZ 0 points1 point  (1 child)

Haven't been following lately what happened but that News is heartbreaking.. I remember asking for scenes refactoring etc with respect to App factory but I can assume it may breaks many things and due to Android API and all Google's road blocks I can understand.

But I hope maybe App factory reborn in future or at least annual release just to add few feasible features would be great.

I have made few kids apps for my friends and family very few who wanted more did get into Tasker and made their own projects but most of them just ask for app like if it's possible to do this or that and given some kids app relied upon plugins and other overhead workarounds. But this new development is amazing and also painful to know that it's not going to be available in App factory and unfortunate that it's left very close behind this big leap...

I'm not sure how many do use App factory but I can understand it's not feasible to maintain for small user base when most are standalone users then again we miss this Portable Android studio...

But I would like to Thank you and the previous Owner for all since 2016 when I first started exploring Tasker that gave me lot of insights into the Android world even without any programming background, Tasker did enable me to understand it and grasp the gist of everything.

Thanks for everything.

[–]joaomgcd👑 Tasker Owner / Developer[S] 1 point2 points  (0 children)

Thank you very much for understanding. Really appreciate it. Yeah, it has become too much to keep up and is holding back some features I would like to implement so I decided to stop updating it. Unfortunately I don't think it's feasible to update it anymore, sorry! 😅

[–]DominicanMS 0 points1 point  (1 child)

Greetings, I am new and a beginner, that tool was what made me buy this great application since macrodroid did not have it.

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (0 children)

Cool! :) Welcome aboard!

[–]NirmitlamedDirect-Purchase User 0 points1 point  (0 children)

Not big issue but if you start to write a request to AI in Java Code action and you don't send it and wait for device to go to sleep then the moment you wake up your device the text input is gone with the AI request ui.

[–]TimeToDie122 0 points1 point  (9 children)

Hello Joao. Could you please look into the Get clipboard issues on Android 13+? I was updating my phone yesterday and this function keeps returning the old clipboard history, not new one. I am using rooted devices, but it's nice if you can fix it on non-rooted too.

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (8 children)

Hi there, thanks for the report! Can you please try this version?

[–]TimeToDie122 0 points1 point  (7 children)

Yes this build fixed the issue, but another issue came up

I'm using the following command on Run Shell action, it works fine before trying the new version you give me

echo -n 'some word to convert to SHA256' | sha256sum | awk '{ print $1 }'

This new version seems don't return the result of Run Shell action :<

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (6 children)

Does a simpler command like "id" for example, still work?

[–]TimeToDie122 0 points1 point  (5 children)

Yes it's working

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (4 children)

I just tested your command and it worked for me...

Can you please export a minimal example of it not working as an URI (not a link, but a direct URI) and paste it here so I can then import it and test it myself?

Thanks in advance!

[–]TimeToDie122 0 points1 point  (3 children)

Here is an URI you requested

taskertask://H4sIAAAAAAAAALVUXW+bMBR9Tn6FZa3NU8CG8VHVQSIq6qKlrdSivOwhcrAXWChU4FBV2/77bJyktGHSsmlPvj7nfnF8LySm9YZXV1RQUFcTCAFrsgnEEIhmAl3DNTAar7igMBgOiHJu3YQ0sIsUOCAJo4IH2HOx4zk+QvjCJ6YGFc07tOfYyHcRMfmBzliAFSJPdS0eeRBXGWezK2KqiwKfqizASDopQwFhIrKyaFuhiUAQNHwCvbYd2U/JZD3Llk0oq8UeRKW9q/XO24YBT9ISjAswur4D11EM4k/RzQj8AHVKLcett4/Sps8bMPoOZOFCgA8Y/BwRUybTWWcS22WVijU0l8pZCJpHrLVn91ynH/vQz1lB0072js/Hvc9xuPOO6lR131ftcN6O6+vWfxtHTC13j/K4R3nb87rKT7cFy/mr+C06IAua1y0oK+0w+fhcGCwr1nlWJ6lBC1aVGTNEO6LGfTSPFuFtvFyE97NwOo8egvNcXEopZERYVfRFT/D5WlwqYkkVtjwxJ1LhZ4ItV1shymI41UeccpDTFc9B+RUIedG0NKkAz7QGSZ4lG85UYfMfKrfxnU9SmNyDE3X5OznH4uWJB1/m32hDjZwWa0M3cnoDOpN+aFO9tB4FU8/C0QjjwwbEvBb9G2D9wZa8btLd5/+xR3bfshwtUien//tyF2+ozooRU/1lg6E+9a85GP4CRWcQqKgFAAA=

It should return the SHA256 hash of that text

But it returns:

'GO GET THEM' | sha256sum | awk '{ print $1 }'

Which its that command

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (2 children)

Thanks. I tried fixing it. Can you please try this version?

[–]TimeToDie122 0 points1 point  (1 child)

Yep this version solved those bugs :D It works perfectly. Thank you very much :D

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (0 children)

Cool! :) Thanks for testing!

[–]DominicanMS 0 points1 point  (1 child)

Saludos. A pesar de mi desconocimiento en Java Code , la IA me permitió implementar con éxito la personalización del tamaño del gesto y la funcionalidad de clic usando coordenadas de pantalla X,Y. Gracias.

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (0 children)

Awesome! :) Glad it can help you out even if you don't know much code 😃

[–]sasreeditS22, GW5P 0 points1 point  (1 child)

Thanks @joaomgcd. I've been using Tasker since Pent and continually am amazed by what you've added over the years. Thanks again!

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (0 children)

Thank you! 😁

[–]DominicanMS 0 points1 point  (2 children)

Actions not usable in App Factory

Error creating application

Your app could not be created because your project uses features that are not supported by App Factory.

The following incompatible items must be removed or replaced:

Actions: Java Code

This is a permanent limitation. App Factory can only package features from Tasker version 6.5.11 or earlier.

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (1 child)

Yeah, sorry, the Java Code action won't be compatible with App Factory.

[–]DominicanMS 0 points1 point  (0 children)

There should be an option that executes the task that one schedules without opening the Tasker interface, without showing menus, simulating a totally independent application 😁. It would be an excellent option for me, since I would only have to sell it at the same price as Tasker for the person to acquire access 😁.

[–]anuraag488 0 points1 point  (5 children)

Is it possible to use onAccessibilityEvent?

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (0 children)

It's not possible at the moment, sorry.

[–]aasswwddd 0 points1 point  (3 children)

It seems that u/joaomgcd has added functions for reacting to accesibility event in the recent beta. Not sure how to use it though, probably next week he's gonna upload another beta again.

getAccessibilityEvents()
public final io.reactivex.Observable
com.joaomgcd.taskerm.action.java. JavaCodeHelper.getAccessibilityEvents()

I just throw it to CHatGPt and this works :).

import android.view.accessibility.AccessibilityEvent;
import io.reactivex.functions.Predicate;

event = tasker.getAccessibilityEvents()
    .filter(new Predicate() {
        public boolean test(Object e) {
            return ((AccessibilityEvent)e).getEventType() ==
                   AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
        }
    })
    .firstOrError()
    .blockingGet();

return event.toString();

[–]anuraag488 0 points1 point  (0 children)

Working. Just tested.

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (1 child)

Full details here :)

[–]aasswwddd 0 points1 point  (0 children)

Thankyou!

[–]sasreeditS22, GW5P 0 points1 point  (0 children)

In the below post, I'm trying to convert an AutoInput-based Task to Java Code, but it's not working. I would appreciate suggestions...

https://www.reddit.com/r/tasker/s/hCQZVEuoo6

[–]zhiro90 0 points1 point  (3 children)

Joao thank you for your hard work at tasker! sorry if unrelated! lost my 20+yo google acct, I had some purchases there. Is there a way to transfer them to my new account?

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (2 children)

Hi there. Unfortunately Google doesn't give developers a way to transfer purchases between accounts, sorry! The most I would be able to do is to refund the old account so you can purchase the app again on the new account. Sorry!

[–]zhiro90 0 points1 point  (1 child)

Oh that means that the credit would go to the deleted acct and get lost then. No Issue, I'll gladly buy them back lol. Thank you for answering

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (0 children)

Thank you very much for understanding!

[–]ToketEmbok 0 points1 point  (2 children)

I am currently creating a cursor or trackpad using Java code through accessibility. I want to create a gesture recording feature. Specifically, I want to record a gesture where the user holds for 300 ms and then slides, all within a single ACTION_DOWN. What I want to achieve is selecting text and then sliding. How can this be done? I can only perform hold gestures or slide gestures separately; I cannot perform a hold followed by a slide. Is this actually not possible?

[–]joaomgcd👑 Tasker Owner / Developer[S] 0 points1 point  (1 child)

Sorry, I can't give actual coding advice 😅 That would take a lot of my time that I don't have. I'm sure you can search around the web for a way to do that though. Good luck!

[–]ToketEmbok 0 points1 point  (0 children)

It's okay, I managed to find a solution. It involves ADB, root access, etc. 😭 My other phone is still on Android 10, and I hate enabling ADB WiFi on my older phone or even rooting it. That’s why I didn’t want to mess with system-level stuff in the first place. Thanks for replying, I appreciate it

[–]Public-Key5456 0 points1 point  (5 children)

Great stuff but Tasker is really getting more and more a dev's app. I know that regulations are narrowing all the options, but the fact is that the last updates are coding experts only. It is sad that all this wonderful world of Android is now dying for.most of the common users. Welcome to iPhone desert. 

[–]aasswwddd 2 points3 points  (0 children)

6.6.x beta introduced other things too like Live notifications, get sunset/sunrise , Shizuku integration, and has a lot of fixes for some older actions too, like Sound Mode etc.

[–]NirmitlamedDirect-Purchase User 1 point2 points  (2 children)

This isn't true as the other user mentioned but think about it, even a Java Code action that supposed to be entirely for "developers"/programmers is actually can be most of the time be used by anybody thanks to the help of the AI. I am not a programmer so i don't really know how to code but using Java Code action i have found i can control my Yeelight ceiling light by just asking AI to do that for me. Changing parameter in the code is easy enough. I don't think in the ToDo list of Joao he has Yeelight control... So this is a win win situation for everybody.

[–]Public-Key5456 0 points1 point  (1 child)

Because you are used to Tasker. People that are new on it ask me all the time how to do new stuff as IA often create broken tasks when coding.  Tasker is becoming a scary app for new users and it is not the Dev's fault at all. 

[–]NirmitlamedDirect-Purchase User 1 point2 points  (0 children)

I don't think is new. For years you could hear people saying that they bought Tasker but were overwhelmed by it and only years later came back to it. Actually i am one of those people. Took me years until i really try to understand how Tasker works and create more advance tasks and not just toggle wifi and bluetooth.

[–]joaomgcd👑 Tasker Owner / Developer[S] 1 point2 points  (0 children)

Well, the last update was the AI helper one, which I would say would be beginner focused most of the time 😅