User Tools

Site Tools


script_autosetupappfreeze

====== Differences ====== This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
script_autosetupappfreeze [2016/11/16 20:41]
cdfa
script_autosetupappfreeze [2016/12/17 18:59]
cdfa 1.8.3
Line 4: Line 4:
   * Initial request: https://​plus.google.com/​+JaroslavGrochal/​posts/​BDKDMrTMfxt   * Initial request: https://​plus.google.com/​+JaroslavGrochal/​posts/​BDKDMrTMfxt
   * GitHub: https://​github.com/​cdfa/​AutoSetupLongTapFreeze   * GitHub: https://​github.com/​cdfa/​AutoSetupLongTapFreeze
-  * Version: 1.8+  * Version: 1.8.3
  
 ====== How to use the script ====== ====== How to use the script ======
Line 12: Line 12:
 You can setup autosync in the setup, or you can sync manually from the container menu => items => sync, or you can run the script from any item in the container with "​sync"​ (without the ""​) as data, or from anywhere if you put the container id directly behind it, so like "​sync1"​. You can setup autosync in the setup, or you can sync manually from the container menu => items => sync, or you can run the script from any item in the container with "​sync"​ (without the ""​) as data, or from anywhere if you put the container id directly behind it, so like "​sync1"​.
  
-You can sync items separately from the item menu and choosing Sync.+You can sync items separately from the item menu and choosing Sync, or sync all items in a container also from the item menu. This can also be done when the items are in a folder by longpressing the folder item.
  
 Run the script from the container again to uninstall (this won't clear events you manually set to sync the container). Run the script from the container again to uninstall (this won't clear events you manually set to sync the container).
Line 19: Line 19:
  
 ====== Changelog ====== ====== Changelog ======
 +1.8
   * Updated to LL 14b7   * Updated to LL 14b7
   * sync action is now in the items menu in the container menu as well   * sync action is now in the items menu in the container menu as well
   * uninstall everywhere function is lost for now, because i cannot distinguish between the menu from the menu of a container anymore. Please suggest new triggers if you want this functionality back.   * uninstall everywhere function is lost for now, because i cannot distinguish between the menu from the menu of a container anymore. Please suggest new triggers if you want this functionality back.
  
 +1.8.1
 +  * workaround for double comfirm crash in LL14
 +
 +1.8.1.1
 +  * Added item description to the toast message that is displayed if the item doesn'​t launch an app
 +
 +1.8.1.2
 +  * Made the changes in 1.8.1.1 actually work
 +
 +1.8.1.3
 +  * Toasts message that says the item doesn'​t launch an app now only shows when you're actually trying to freeze that item and not anymore on each sync.
 +
 +1.8.2
 +  * The double confirm crash got fixed, so the workaround was removed
 +  * Only commands that need root are executed as root
 +
 +1.8.3
 +  * Added freezeing/​unfreezing all item from menu
 +  * Added long press folder to freeze/​unfreeze all items in it
  
 ====== Script code ====== ====== Script code ======
Line 37: Line 57:
 bindClass("​android.content.pm.PackageManager"​);​ bindClass("​android.content.pm.PackageManager"​);​
 bindClass('​java.lang.Runtime'​);​ bindClass('​java.lang.Runtime'​);​
-bindClass("java.io.DataInputStream"​)+bindClass('java.io.BufferedReader'​)
 +bindClass('​java.io.InputStreamReader'​);​
 bindClass('​java.io.DataOutputStream'​);​ bindClass('​java.io.DataOutputStream'​);​
 bindClass('​java.lang.StringBuffer'​);​ bindClass('​java.lang.StringBuffer'​);​
Line 48: Line 69:
   , screen = getActiveScreen()   , screen = getActiveScreen()
   , context = screen.getContext()   , context = screen.getContext()
-  , frozenItIdss = [] 
   , threads = []   , threads = []
   , GUIHandler = new Handler()   , GUIHandler = new Handler()
   , frozenApps;   , frozenApps;
  
-function setEventHandlerRestorably(ob,​ name, action, data) {+function setEventHandlerRestorably(ob,​ name, action, data){
   var prop = ob.getProperties()   var prop = ob.getProperties()
     , ed = prop.edit()     , ed = prop.edit()
Line 63: Line 83:
 } }
  
-function restoreEventHandler(ob,​ name) { +function restoreEventHandler(ob,​ name){ 
-  if(ob) {+  if(ob){
     var evHa = JSON.parse(ob.getTag("​old " + name + " evHa"​));​     var evHa = JSON.parse(ob.getTag("​old " + name + " evHa"​));​
-    if(evHa) {+    if(evHa){
       var ed = ob.getProperties().edit();​       var ed = ob.getProperties().edit();​
       ed.setEventHandler(name,​ evHa[0], evHa[1]);       ed.setEventHandler(name,​ evHa[0], evHa[1]);
       ed.commit();​       ed.commit();​
       ob.setTag("​name",​ null);       ob.setTag("​name",​ null);
-    } else {+    }else{
       throw new Error("​No eventhandler backup for " + name + " on " + ob + "​found!"​)       throw new Error("​No eventhandler backup for " + name + " on " + ob + "​found!"​)
     }     }
-  } else {+  }else{
     throw new Error("​Cannot restore " + name + "of null!"​)     throw new Error("​Cannot restore " + name + "of null!"​)
   }   }
 } }
  
-function uninstall(c) { +function uninstall(c){ 
-  if(c && c.getTag("​longTapFreeze"​)) {+  if(c && c.getTag("​longTapFreeze"​)){
     c.setTag("​longTapFreeze",​ false);     c.setTag("​longTapFreeze",​ false);
     restoreEventHandler(c,​ freezeEvent);​     restoreEventHandler(c,​ freezeEvent);​
Line 86: Line 106:
     restoreEventHandler(c,​ "​menu"​);​     restoreEventHandler(c,​ "​menu"​);​
     if(c.getTag("​autosync"​) == "​true"​) restoreEventHandler(c,​ "​resumed"​);​     if(c.getTag("​autosync"​) == "​true"​) restoreEventHandler(c,​ "​resumed"​);​
-    ​var frozenItIds = getFrozenItIds(c) +    ​c.getAllItems().forEach(function(it){ 
-      , it; +      if(isFrozen(it))
-    frozenItIds.forEach(function(itId, ind) { +
-      if(it = c.getItemById(itId)) {+
         unfreezeEffect(it);​         unfreezeEffect(it);​
 +    });
 +    var cs = screen.getAllContainersById(c.getId());​
 +    cs.forEach(function(c){
 +      var opener;
 +      if((opener = c.getOpener()) && opener.getType() == "​Folder"​){
 +        if(isFrozen(opener))
 +          unfreezeEffect(opener);​
       }       }
-    }+    });
-    frozenItIds.clear();​ +
-    frozenItIds.queueSave();+
   }   }
 } }
  
-function ​runAsRoot(cmd, newThread, callback) { +function ​isArray(object){ 
-  ​function execCmd(cmd){ +  ​return Object.prototype.toString.call(object) == '​[object Array]'​; 
-    try { +}
-      var process = Runtime.getRuntime().exec("​su"​) +
-        , reader = new DataInputStream(process.getInputStream()+
-        , writer ​new DataOutputStream(process.getOutputStream());+
  
-      writer.writeBytes(cmd + '​\n'​); +/* 
-      ​writer.flush(); + ​ATTENTION:​ 
-      ​writer.close();+ if multiple commands are executed as root, the output will be an array of the returned lines 
 + if multiple commands are not executed as root, the output will be an array of returned outputs ​(which are themselves arrays of lines
 + */ 
 +function runCmd(cmds, asRoot, newThread, callback, onExecuted){ 
 +  var handler = getHandler() 
 +    , output, process, reader, writer;
  
-      var tmp +  function execCmd(){ 
-        , output ​[]+    ​function checkCmd(cmd){ 
-      ​while ((tmp = reader.readLine()) != null) { +      if(typeof(cmd) ​=== "​string"​){ 
-        ​output.push(tmp);+        return true
 +      ​}else 
 +        handleGUIEdit(function(){ 
 +          alert(cmd + " is not a string!"​)
 +        }); 
 +      return false; 
 +    } 
 + 
 +    function exec(cmd, writer){ 
 +      if(checkCmd(cmd)){ 
 +        ​writer.writeBytes(cmd + "​\n"​)
 +        writer.flush();​ 
 +        return true;
       }       }
-      ​reader.close();​ +      return ​false;
-      process.waitFor();​ +
-      ​return ​output; +
-    } catch (err) { +
-      alert(err+"​At line "​+err.lineNumber);+
     }     }
-  } + 
-   +    ​function readOutput(reader){ 
-  if(newThread==false){ +      var tmp, output = []; 
-    ​return execCmd(cmd); +      while((tmp reader.readLine()) !null
-  ​}else{ +        ​output.push(tmp); 
-    var handler ​getHandler()+ 
-    ​startNewBackgroundThread(function(){ +      ​return output.length ​== 1 ? output[0] : output
-      if(callback){ +    ​
-        var output ​execCmd(cmd);+ 
 +    ​function ​handleCallback(callback, output){ 
 +      if(typeof ​callback == "​function"​){
         handler.post(function(){         handler.post(function(){
           callback(output);​           callback(output);​
         });         });
 +      }else if(callback){
 +        handleGUIEdit(function(){
 +          alert(callback + " is not a function!"​);​
 +        });
 +      }
 +    }
 +
 +    try{
 +      if(asRoot){
 +        process = Runtime.getRuntime().exec("​su"​);​
 +        reader = new BufferedReader(new InputStreamReader(process.getInputStream()));​
 +        writer = new DataOutputStream(process.getOutputStream());​
 +
 +        if(isArray(cmds)){
 +          output = [];
 +          cmds.forEach(function(cmd){
 +            if(exec(cmd,​ writer)){
 +              handleCallback(onExecuted);​
 +            }
 +          });
 +
 +          exec("​exit",​ writer);
 +          writer.close();​
 +
 +          output = readOutput(reader);​
 +          handleCallback(callback,​ output);
 +        }else{
 +          var succes = exec(cmds, writer);
 +
 +          exec("​exit",​ writer);
 +          writer.close();​
 +
 +          if(succes){
 +            output = readOutput(reader);​
 +            handleCallback(onExecuted);​
 +            handleCallback(callback,​ output);
 +          }
 +        }
 +
 +        reader.close();​
 +        process.waitFor();​
       }else{       }else{
-        ​execCmd(cmd)+        ​if(isArray(cmds)){ 
 +          var outputs = []; 
 +          cmds.forEach(function(cmd)
 +            if(checkCmd(cmd)){ 
 +              process = Runtime.getRuntime().exec(cmd);​ 
 +              reader = new BufferedReader(new InputStreamReader(process.getInputStream()));​ 
 +              output = readOutput(reader);​ 
 +              reader.close();​ 
 +              outputs.push(output);​ 
 +              handleCallback(onExecuted);​ 
 +              handleCallback(callback,​ output); 
 +            } 
 +          }); 
 +          process.waitFor();​ 
 +          return outputs; 
 +        }else{ 
 +          process = Runtime.getRuntime().exec(cmds);​ 
 +          reader = new BufferedReader(new InputStreamReader(process.getInputStream()));​ 
 +          output = readOutput(reader);​ 
 +          reader.close();​ 
 +          process.waitFor();​ 
 +          handleCallback(onExecuted);​ 
 +          handleCallback(callback,​ output); 
 +          return output; 
 +        }
       }       }
 +    }catch(err){
 +      handleGUIEdit(function(){
 +        alert("​At line " + err.lineNumber + ": " + err);
 +      });
 +    }
 +  }
 +
 +  if(asRoot && isArray(callback))
 +    throw new Error("​Multiple callbacks are not possible in su mode. Use onExecuteds instead."​);​
 +
 +  if(newThread === false){
 +    return execCmd();
 +  }else{
 +    startNewBackgroundThread(function(){
 +      execCmd();
     })     })
   }   }
 } }
  
-function getPackageName(it) { +function getPackageName(it){ 
-  try {+  try{
     return it.getIntent().getComponent().getPackageName();​     return it.getIntent().getComponent().getPackageName();​
-  } catch(e) { +  }catch(e){
-    Toast.makeText(context,​ "This item doesn'​t launch an app!", Toast.LENGTH_SHORT).show();​+
     return null;     return null;
   }   }
 } }
  
-function isFreezable(pkgName) {+function isFreezable(pkgName){
   if(!pkgName)   if(!pkgName)
     return false;     return false;
  
-  var onBlackList = false; +  var onBlackList = false, onWhiteList
-  for(var i = 0; i < blackList.length;​ i++) { +  for(var i = 0; i < blackList.length;​ i++){ 
-    if(pkgName == blackList[i]) {+    if(pkgName == blackList[i]){
       onBlackList = true;       onBlackList = true;
       break;       break;
Line 160: Line 274:
   }   }
  
-  if(whiteList.length == 0) { +  if(whiteList.length == 0){ 
-    ​var onWhiteList = true; +    onWhiteList = true; 
-  } else { +  }else{ 
-    ​var onWhiteList = false; +    onWhiteList = false; 
-    for(var i = 0; i < whiteList.length;​ i++) { +    for(var i = 0; i < whiteList.length;​ i++){ 
-      if(pkgName == whiteList[i]) {+      if(pkgName == whiteList[i]){
         onWhiteList = true;         onWhiteList = true;
         break;         break;
Line 175: Line 289:
 } }
  
-function ​freeze(it, pkgName) { +function ​freezeChecks(it, allGood, giveFeedback){ 
-  ​runAsRoot("​pm disable " + pkgName, true, function() { +  ​var pkgName ​= getPackageName(it
-    ​freezeEffect(it); +    ​, freezeAble = isFreezable(pkgName); 
-    ​var frozenItIds = getFrozenItIds(it.getParent()); +  if(pkgName && freezeAble){ 
-    ​frozenItIds.push(it.getId()); +    ​allGood(pkgName); 
-    ​frozenItIds.queueSave(); +  }else if(giveFeedback !== false){ 
-  });+    ​if(!pkgName) 
 +      Toast.makeText(context, ​it + " doesn'​t launch an app!", Toast.LENGTH_SHORT).show(); 
 +    ​else if(!freezeAble) 
 +      Toast.makeText(context,​ "​Cannot freeze/​unfreeze! (Probably because of black- or whitelist",​ Toast.LENGTH_SHORT).show(); 
 +  }
 } }
  
-function ​unfreeze(it, pkgName) { +function ​freeze(it){ 
-  ​runAsRoot("pm enable ​" ​+ pkgName, true, function() { +  ​if(it.getType() == "Folder"){ 
-    ​unfreezeEffect(it); +    ​freezeContainer(it.getContainer()); 
-    ​var frozenItIds = getFrozenItIds(it.getParent()); +  }else{ 
-    ​frozenItIds.remove(it.getId()); +    ​freezeChecks(it, function(pkgName)
-    ​frozenItIds.queueSave(); +      runCmd("​pm disable " + pkgName, true, true, null, function(){ 
-  });+        ​freezeEffect(it)
 +      }); 
 +    ​}); 
 +  }
 } }
  
-function freezeEffect(it) {+function unfreeze(it){ 
 +  if(it.getType() == "​Folder"​){ 
 +    unfreezeContainer(it.getContainer());​ 
 +  }else{ 
 +    freezeChecks(it,​ function(pkgName){ 
 +      runCmd("​pm enable " + pkgName, true, true, null, function(){ 
 +        unfreezeEffect(it);​ 
 +      }); 
 +    }); 
 +  } 
 +
 + 
 +function freezeEffect(it){
   it.getProperties().edit().setInteger("​s.iconColorFilter",​ 0x00ffffff).commit();​   it.getProperties().edit().setInteger("​s.iconColorFilter",​ 0x00ffffff).commit();​
   it.setTag("​frozen",​ true);   it.setTag("​frozen",​ true);
 } }
  
-function unfreezeEffect(it) {+function unfreezeEffect(it){
   it.getProperties().edit().setInteger("​s.iconColorFilter",​ 0xffffffff).commit();​   it.getProperties().edit().setInteger("​s.iconColorFilter",​ 0xffffffff).commit();​
   it.setTag("​frozen",​ false);   it.setTag("​frozen",​ false);
 } }
  
-function ​getFrozenItIds(c) { +function ​batchFreezeAction(items, action, callback){ 
-  var cId = c.getId()+  var frozenStateChecker,​ cmd, effect
-  if(!frozenItIdss[cId]+  if(action == "​freeze"​){ 
-    ​frozenItIdss[cId] ​new TagArray(c, "frozenItIds"); +    ​frozenStateChecker ​function(it){ return !isFrozen(it);​ }; 
-  return ​frozenItIdss[cId]+    cmd = "pm disable ​"
-}+    effect = function(it){ freezeEffect(it); } 
 +  ​}else if(action == "​unfreeze"​){ 
 +    frozenStateChecker = function(it){ ​return ​isFrozen(it);​ }
 +    cmd = "pm enable "; 
 +    effect = function(it){ unfreezeEffect(it);​ } 
 +  ​}
  
-function ​getFrozenApps() { +  var freezableItems = [] 
-  if(!frozenApps) { +    , cmds = []; 
-    ​frozenApps = runAsRoot("pm list packages -d"false); + 
-    for(var i = 0i < frozenApps.length; i++) { +  items.forEach(function(it){ 
-      ​frozenApps[i] = frozenApps[i].split(":"​)[1];+    if(frozenStateChecker(it)){ 
 +      ​freezeChecks(itfunction(pkgName){ 
 +        ​freezableItems.push(it); 
 +        cmds.push(cmd ​pkgName); 
 +      ​}, false);
     }     }
 +  });
 +
 +  if(cmds.length != 0){
 +    var counter = 0;
 +    runCmd(cmds,​ true, true, function(){
 +      callback();
 +    }, function(){
 +      effect(freezableItems[counter]);​
 +      counter++;
 +    });
 +  }
 +}
 +
 +function containerFreezeAction(c,​ effect){
 +  var cs = screen.getAllContainersById(c.getId());​
 +  cs.forEach(function(c){
 +    var opener;
 +    if((opener = c.getOpener()) && opener.getType() == "​Folder"​)
 +      effect(opener);​
 +  });
 +}
 +
 +function freezeContainer(c){
 +  batchFreezeAction(c.getAllItems(),​ "​freeze",​ function(){
 +    containerFreezeAction(c,​ freezeEffect);​
 +  });
 +}
 +
 +function unfreezeContainer(c){
 +  batchFreezeAction(c.getAllItems(),​ "​unfreeze",​ function(){
 +    containerFreezeAction(c,​ unfreezeEffect);​
 +  });
 +}
 +
 +function isFrozen(it){
 +  return it.getTag("​frozen"​) == "​true";​
 +}
 +
 +function getFrozenApps(){
 +  if(frozenApps == null){
 +    frozenApps = [];
 +    var pkgs = runCmd("​pm list packages -d", false, false);
 +    pkgs.forEach(function(pkg,​ i){
 +      frozenApps[i] = pkg.split(":"​)[1];​
 +    });
   }   }
   return frozenApps;   return frozenApps;
 } }
  
-function syncContainer(c) { +function syncContainer(c){ 
-  startNewBackgroundThread(function() {+  startNewBackgroundThread(function(){
     var items = c.getItems();​     var items = c.getItems();​
-    for(var i = 0; i < items.length;​ i++) {+    for(var i = 0; i < items.length;​ i++){
       syncItem(items.getAt(i));​       syncItem(items.getAt(i));​
     }     }
Line 229: Line 416:
 } }
  
-function syncItem(it) { +function syncItem(it){ 
-  var c = it.getParent() +  var frozenApps = getFrozenApps();​ 
-    , frozenItIds = getFrozenItIds(c) +  if(it.getType() == "​Shortcut"​){
-    , frozenApps = getFrozenApps();​ +
-  if(it.getType() == "​Shortcut"​) {+
     var pkgName = getPackageName(it);​     var pkgName = getPackageName(it);​
-    if(pkgName && isFreezable(pkgName)) { +    if(pkgName && isFreezable(pkgName)){ 
-      var matched = false +      var isFrozen = it.getTag("​frozen"​) == "​true";​ 
-        , isFrozen = it.getTag("​frozen"​) == "​true";​ +      var matched ​= frozenApps.some(function(pkg){ 
-      ​for(var 0; j < frozenApps.length; j++) { +        ​return pkg == pkgName
-        ​if(pkgName ​== frozenApps[j]) { +      }); 
-          matched = true; +      if(!isFrozen && matched){ 
-          break; +        handleGUIEdit(function(){
-        } +
-      } +
-      if(!isFrozen && matched) { +
-        handleGUIEdit(function() {+
           freezeEffect(it);​           freezeEffect(it);​
-        }+        }); 
-        frozenItIds.push(it.getId());​ +      }else if(isFrozen && ​!matched){ 
-        frozenItIds.queueSave(); +        handleGUIEdit(function(){
-      } +
-      ​if(!matched ​&& isFrozen) { +
-        handleGUIEdit(function() {+
           unfreezeEffect(it);​           unfreezeEffect(it);​
-        }+        });
-        frozenItIds.remove(it.getId());​ +
-        frozenItIds.queueSave();+
       }       }
     }     }
Line 262: Line 438:
 } }
  
-function handleGUIEdit(func) { +function handleGUIEdit(func){ 
-  if(Looper.getMainLooper().getThread() == Thread.currentThread()) {+  if(Looper.getMainLooper().getThread() == Thread.currentThread()){
     func();     func();
-  } else {+  }else{
     GUIHandler.post(func);​     GUIHandler.post(func);​
   }   }
 } }
  
-function startNewBackgroundThread(func) { +function startNewBackgroundThread(func){ 
-  var thread = new Thread(function() {+  var thread = new Thread(function(){
     func();     func();
-    if(threads[Thread.currentThread().getId()].prepared == true) { +    if(threads[Thread.currentThread().getId()].prepared == true){ 
-      Looper.myLooper().getQueue().addIdleHandler(function() {+      Looper.myLooper().getQueue().addIdleHandler(function(){
         Looper.myLooper().quitSafely();​         Looper.myLooper().quitSafely();​
-      })+      });
       Looper.loop();​       Looper.loop();​
     }     }
-  }) +  }); 
-  thread.setUncaughtExceptionHandler(function(th,​ ex) { +  thread.setUncaughtExceptionHandler(function(th,​ ex){ 
-    handleGUIEdit(function() { +    handleGUIEdit(function(){ 
-      ​log(ex.getMessage(), logScript.logLevel.ERROR); +      ​alert(ex.getMessage());​ 
-    }) +    }); 
-  })+  });
   threads[thread.getId()] = {};   threads[thread.getId()] = {};
   thread.start();​   thread.start();​
 } }
  
-function getHandler() { +function getHandler(){ 
-  if(Looper.getMainLooper().getThread() == Thread.currentThread()) {+  if(Looper.getMainLooper().getThread() == Thread.currentThread()){
     return GUIHandler;     return GUIHandler;
-  } else {+  }else{
     var threadId = Thread.currentThread().getId();​     var threadId = Thread.currentThread().getId();​
-    if(threads[threadId].prepared != true) {+    if(threads[threadId].prepared != true){
       Looper.prepare();​       Looper.prepare();​
       threads[threadId].prepared = true;       threads[threadId].prepared = true;
Line 300: Line 476:
     return new Handler();     return new Handler();
   }   }
-} 
- 
-function TagArray(ob,​ name, manualSave) { 
-  this.push.apply(this,​ JSON.parse(ob.getTag(name)) || []); 
-  var me = this; 
-  this.save = function() { 
-    ob.setTag(name,​ JSON.stringify(Array.prototype.slice.call(me)));​ 
-    handleGUIEdit(function() { 
-      log("​saved " + name + ": " + Array.prototype.slice.call(me));​ 
-    }); 
-  } 
-  if(manualSave != true) this.queueSave();​ 
-} 
- 
-TagArray.prototype = new Array(); 
-TagArray.prototype.constructor = TagArray; 
-TagArray.prototype.saveQueued = false; 
- 
-TagArray.prototype.queueSave = function() { 
-  if(!this.queueSaved) { 
-    getHandler().post(this.save) 
-    this.queueSaved = true; 
-  } 
-} 
- 
-TagArray.prototype.remove = function(el) { 
-  var ind = this.indexOf(el);​ 
-  if(ind != -1) 
-    this.splice(ind,​ 1); 
-  else 
-    return false; 
-} 
- 
-TagArray.prototype.clear = function() { 
-  this.length = 0; 
 } }
  
 if(typeof getEvent != "​undefined"​){ if(typeof getEvent != "​undefined"​){
-  var e = getEvent() +  var 
-  , it = e.getItem() +    , e = getEvent() 
-  , data = e.getData();​ +    , it = e.getItem() 
-  if(data) { +    , data = e.getData();​ 
-    if(data.length ​== 4) { +  if(data){ 
-      ​var c; +    if(data == "​sync"​){ 
-      if(it) { +      if(c = e.getContainer()){
-        syncContainer(it.getParent());​ +
-      } else if(c = e.getContainer()) {+
         syncContainer(c);​         syncContainer(c);​
-      } else {+      }else{
         throw new Error("​Could not find a way to determine the container to sync. Run the script from an item in the container or from the container itself or add the container id directly afrer '​sync'​."​)         throw new Error("​Could not find a way to determine the container to sync. Run the script from an item in the container or from the container itself or add the container id directly afrer '​sync'​."​)
       }       }
-    } else if(data.substring(0,​ 4) == "​sync"​) { +    }else if(data.substring(0,​ 4) == "​sync"​){ 
-      var cId = data.substring(4,​ data.length) +      var cId = data.substring(4,​ data.length); 
-        , ​c = screen.getContainerById(cId);​ +      c = screen.getContainerById(cId);​ 
-      if(!c) throw new Error("​Could not find container with id:" + cId)+      if(!c) throw new Error("​Could not find container with id:" + cId);
       syncContainer(c);​       syncContainer(c);​
     }     }
-  } else { +  }else{ 
-    if(!it) { +    if(!it){ 
-      ​var /*src = e.getSource(); +      ​= e.getContainer(); 
-        , */cIds = new TagArray(script,​ "​cIds",​ true); +      cId = c.getId();​ 
-      ​//​if(src=="​MENU_CONTAINER"​) { +      if(c.getTag("​longTapFreeze"​) == "​true"​){ 
-        var c = e.getContainer() +        if(confirm("​Are you sure you want to uninstall?"​)){ 
-        ​cId = c.getId();​ +          uninstall(c);​ 
-        if(c.getTag("​longTapFreeze"​) == "​true"​) { +          Toast.makeText(context,​ "​Uninstalled!",​ Toast.LENGTH_SHORT).show();​
-          if(confirm("​Are you sure you want to uninstall?"​)) { +
-            uninstall(c);​ +
-            ​cIds.remove(c.getId());​ +
-            cIds.save();​ +
-            ​Toast.makeText(context,​ "​Uninstalled!",​ Toast.LENGTH_SHORT).show();​ +
-          } +
-        } else { +
-          if(confirm("​Are you sure you want to install?"​)) { +
-            cIds.push(c.getId());​ +
-            c.setTag("​longTapFreeze",​ true); +
-            setEventHandlerRestorably(c,​ freezeEvent,​ EventHandler.RUN_SCRIPT,​ script.getId());​ +
-            setEventHandlerRestorably(c,​ "​i.menu",​ EventHandler.RUN_SCRIPT,​ script.getId());​ +
-            setEventHandlerRestorably(c,​ "​menu",​ EventHandler.RUN_SCRIPT,​ script.getId());​ +
-            if(confirm("​Do you want to enable autosync?"​)) { +
-              setEventHandlerRestorably(c,​ "​resumed",​ EventHandler.RUN_SCRIPT,​ script.getId() + "/​sync"​);​ +
-              syncContainer(c);​ +
-              c.setTag("​autosync",​ true); +
-            } +
-            cIds.save();​ +
-            Toast.makeText(context,​ "​Installed!",​ Toast.LENGTH_SHORT).show();​ +
-          }+
         }         }
-      ​/*} else { +      }else{ 
-        if(confirm("​Are you sure you want to uninstall from every container?")) { +        if(confirm("​Are you sure you want to install?"​)){ 
-          ​for(var i = 0i < cIds.length; i++) { +          ​c.setTag("​longTapFreeze",​ true); 
-            ​uninstall(screen.getContainerById(cIds[i]));+          setEventHandlerRestorably(c,​ freezeEvent,​ EventHandler.RUN_SCRIPT, script.getId()); 
 +          setEventHandlerRestorably(c,​ "i.menu",​ EventHandler.RUN_SCRIPT,​ script.getId());​ 
 +          setEventHandlerRestorably(c,​ "​menu",​ EventHandler.RUN_SCRIPT,​ script.getId());​ 
 +          if(confirm("​Do you want to enable autosync?"​)){ 
 +            ​setEventHandlerRestorably(c, "​resumed",​ EventHandler.RUN_SCRIPT, script.getId() + "/​sync"​);​ 
 +            syncContainer(c);​ 
 +            c.setTag("​autosync",​ true);
           }           }
-          ​cIds.clear();​ +          Toast.makeText(context,​ "Installed!", Toast.LENGTH_SHORT).show();​
-          cIds.save();​ +
-          ​Toast.makeText(context,​ "Uninstalled everywhere!", Toast.LENGTH_SHORT).show();​+
         }         }
-      }*/ +      } 
-    } else {+    }else{ 
 +      //long tap
       var src = e.getSource();​       var src = e.getSource();​
-      if(src == freezeSource) { +      if(src == freezeSource){ 
-        ​var c = it.getParent(+        ​if(isFrozen(it)){ 
-          , pkgName = getPackageName(it); +          unfreeze(it);​ 
-        if(isFreezable(pkgName)) { +        }else{ 
-          ​if(it.getTag("​frozen"​) == "​true"​) { +          freeze(it);
-            ​unfreeze(it, pkgName); +
-          } else { +
-            freeze(it, pkgName); +
-          } +
-        } else { +
-          ​Toast.makeText(context,​ "​Cannot ​freeze/unfreeze! (Probably because of black- or whitelist",​ Toast.LENGTH_SHORT).show();+
         }         }
       }       }
Line 415: Line 532:
   }   }
 }else if(menu){ }else if(menu){
-  var mode = menu.getMode()+  var mode = menu.getMode();
   if(mode == Menu.MODE_ITEM_SUBMENU_ACTION || mode == Menu.MODE_ITEM_NO_EM){   if(mode == Menu.MODE_ITEM_SUBMENU_ACTION || mode == Menu.MODE_ITEM_NO_EM){
     menu.addMainItem("​Sync frozen-state",​ function(){     menu.addMainItem("​Sync frozen-state",​ function(){
Line 423: Line 540:
   }else if(mode == Menu.MODE_CONTAINER_SUBMENU_ITEMS){   }else if(mode == Menu.MODE_CONTAINER_SUBMENU_ITEMS){
     menu.addMainItem("​Sync frozen-state",​ function(){     menu.addMainItem("​Sync frozen-state",​ function(){
-      syncContainer(container)+      syncContainer(container)
 +      menu.close();​ 
 +    }); 
 +    menu.addMainItem("​Freeze all items",​ function(){ 
 +      freezeContainer(container);​ 
 +      menu.close();​ 
 +    }); 
 +    menu.addMainItem("​Unfreeze all items",​ function(){ 
 +      unfreezeContainer(container);​
       menu.close();​       menu.close();​
     });     });
script_autosetupappfreeze.txt · Last modified: 2017/07/21 08:57 by cdfa