;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Testamos o Android 10, e o modo escuro é realmente seu melhor recurso

Android 10: modo escuro e botão do modo "sem distrações" (centro) - Reprodução
Android 10: modo escuro e botão do modo "sem distrações" (centro) Imagem: Reprodução

Rodrigo Lara

Colaboração para Tilt

04/09/2019 16h02

Sem tempo, irmão

  • Apenas celulares da linha Google Pixel receberam a atualização nesta semana
  • Tema escuro é ativado ao toque de um botão, e inverte a ordem das cores do aparelho
  • Modo sem distrações permite silenciar apps que causem dispersão do usuário
  • Controle por gestos foi aprimorado; permissões do app ficaram mais específicas

Se você aguarda ansiosamente pelo Android 10 porque acredita que a nova versão do sistema operacional do Google mudará completamente a forma como você usa o celular, bem, é bom diminuir a expectativa.

Essa é a conclusão que tirei após utilizar a novidade em um smartphone Pixel 2, que faz parte da linha de aparelhos do Google —vendidos nos EUA e mais 12 países, mas não no Brasil— que começou a receber o novo sistema operacional a partir desta terça-feira (3).

O usuário mais desatento provavelmente vai se concentrar em uma única novidade: o tema escuro. Ativado ao toque de um botão, ele basicamente inverte a ordem das cores do aparelho: o que aparecia em tons de cinza claro ou branco, ganhou tonalidade escura.

O resultado, na minha opinião, é bem interessante. Ajuda a descansar um pouco seus olhos e a economizar energia, no caso de celulares com telas com iluminação Amoled, que apaga pixels para ficarem pretos e com isso gastam menos em telas escuras.

Mudando as entranhas

Mas o modo escuro é apenas a novidade mais aparente do novo Android. Se, por um lado, isso significa que a maioria dos usuários não precisará fazer um curso intensivo para aprender a mexer no novo sistema operacional, por outro há um risco razoável de algumas novidades importantes arem despercebidas.

Um exemplo disso são os "quase 50 novos recursos e alterações focadas na privacidade e segurança" que, segundo o Google, o novo Android traz.

O usuário comum provavelmente não mexerá a fundo para descobrir onde cada opção nova fica, mas se eu puder dar um conselho, vale a pena explorar o "Modo sem distrações". Ele é configurado na seção "Bem-estar digital e controle dos pais" e permite selecionar um grupo de apps que você considera como "causadores de distração".

Android 10: modo "sem distrações" nas notificações silencia os apps - Reprodução - Reprodução
Android 10: modo "sem distrações" nas notificações silencia os apps
Imagem: Reprodução

Uma vez que ele é ativado —é possível colocar o ícone da função na bandeja de o rápido do celular, junto com o botão de ativar ou desativar Wi-Fi, por exemplo—, todas as notificações desses apps serão silenciadas.

Um uso prático: você está correndo para entregar uma demanda de trabalho, mas não quer que o seu celular fique apitando a cada nova notificação do Facebook ou do Instagram. Colocar o celular no silencioso, porém, poderia fazer você perder uma ligação importante que você está esperando.

A única opção de resolver isso seria entrar individualmente nos apps e silenciá-los. ado o sufoco, você teria que fazer esse caminho novamente para ativar as notificações.

Com o "Modo sem distrações", o que rola é um "sem tempo, irmão": quando ativado, apenas os apps selecionados serão silenciados, o que é indicado com ícones em preto e branco. Além disso, eles não poderão ser ados enquanto o modo estiver ativo —uma forma até certo ponto exagerada de fazer você controlar a tentação de olhar as redes sociais quando deveria estar concentrado.

Uma vez desativado, tudo volta ao normal.

Caso você queria fazer um "modo sem distrações" mais pontual, é possível pausar apenas um aplicativo por vez. Para isso, basta apertar e segurar sobre o ícone e depois escolher o item da ampulheta. O resultado é o mesmo do descrito acima.

Android 10: recurso Pausar app - Reprodução - Reprodução
Android 10: recurso Pausar app
Imagem: Reprodução

Três modos de controle

Como o Android geralmente a por algum nível de personalização dependendo da fabricante que o utiliza, alguns recursos acabam ficando s a aparelhos que rodam o sistema operacional "puro" (ou quase isso).

Um exemplo é o modo de controle por gestos, que já existia no Android 9 e foi aprimorado na nova versão do sistema. De maneira geral, é possível remover totalmente o botão voltar e o "home", deixando apenas uma barra na base da tela. A partir daí, o controle de gestos fica similar ao do iPhone X, XS e XR.

Além desse modo totalmente gestual, é possível deixar os botões voltar e home fixos ou, ainda, manter o modo de três botões tradicionais do Android.

O que não deve mudar de acordo com a plataforma é o maior controle que o sistema operacional dá para quem deseja ajustar permissões de aplicativos.

Android 10: opções novas de privacidade - Reprodução - Reprodução
Android 10: opções novas de privacidade
Imagem: Reprodução

Vejamos, por exemplo, as permissões para um app utilizar a localização do seu aparelho. Agora, em vez de escolher entre "ligado" e "desligado", há uma opção intermediária que permite aos aplicativos terem o a esses dados apenas quando estão em uso, não em segundo plano.

Em tempos de preocupação cada vez maior com a privacidade, é uma novidade bem-vinda.

Evolução, não revolução

Depois de ar algumas horas na companhia da novidade, creio que a mudança mais chamativa dessa versão do sistema operacional é não trazer um doce como sobrenome.

Não que o Android 10 seja ruim: enquanto usuários antigos do sistema se sentirão em casa, quem migrar da concorrência (leia-se iPhone) tende se adaptar mais facilmente.

Há novidades interessantes em termos de segurança e privacidade, bem como novos controles de notificações que tentam criar uma relação mais sadia entre usuário e aparelho.

Não são novidades que saltam aos olhos, mas am longe de ser funções a serem ignoradas, mas que tendem a decepcionar quem esperava mais revolução do que evolução.

SIGA TILT NAS REDES SOCIAIS