;(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

Nem Samsung, nem Huawei: o 1º celular dobrável do mundo está entre nós

Primeiro celular dobrável do mundo foi apresentado na China - Reprodução
Primeiro celular dobrável do mundo foi apresentado na China Imagem: Reprodução

Gabriel Francisco Ribeiro

Do UOL, em São Paulo

31/10/2018 16h54

Nem Samsung, nem Huawei, nem LG. A companhia que apresentou o primeiro celular dobrável do mundo foi a desconhecida Rouyu Technology (Royole Corporation), que mostrou o dispositivo, ainda que seja bem rudimentar, nesta quarta (31) em um evento realizado na cidade de Pequim, na China. 

Especializada em fabricar displays flexíveis, a companhia fundada há seis anos apresentou o aparelho chamado de FlexPai e já o colocou à venda. O preço do produto, que será disponibilizado a partir deste 1º de novembro, não será nada barato: custará, em três versões diferentes, de US$ 1.290 a US$ 1.860 (de R$ 5.100 a R$ 7.360).

Veja também:

Quando aberto, o aparelho apresenta um display único com 7,8 polegadas, maior do que alguns tablets no mercado. Já quando está fechada, a tela se divide em três diferentes menores – uma na frente, uma na traseira e outra na lateral do dispositivo, de acordo com a BBC.

As diferenças entre os dois modelos à venda estão na memória e no armazenamento dos aparelhos. Uma outra versão diferente do dispositivo ainda será oferecida a desenvolvedores no resto do mundo.

O aparelho tem o perfil de top de linha, contando ainda com o Snapdragon 8150, que substitui o atual melhor processador da Qualcomm, o Snapdragon 845. Ele ainda tem duas câmeras na traseira e uma bateria de 3.800 mAh. A resolução da tela, com qualidade Amoled, é Full HD.

Em um vídeo, é possível verificar o funcionamento do dispositivo. O vídeo mostra alguns problemas no touch e um funcionamento bem rudimentar do sistema com a tela dobrável - mas é possível ver ela realmente se dobrando sem problemas. 

O celular ainda tem um aspecto bem grosso por causa da tela que se dobra e pesará 320g – cerca do dobro do peso de celulares comuns da atualidade.

Modelos de marcas maiores a caminho

O lançamento pegou de surpresa a indústria de dispositivos móveis, já que era esperado que Samsung ou Huawei apresentassem o primeiro aparelho do tipo. A Samsung confirmou recentemente que seu aparelho, após quatro anos de espera, está “nos últimos estágios de desenvolvimento” e há a possibilidade que seja ao menos mostrado em novembro, durante a conferência de desenvolvedores da empresa.

É bom esperar o lançamento de companhias maiores. Segundo a Bloomberg, a Samsung, por exemplo, trabalha com o Google para fazer um sistema operacional específico para o celular dobrável - o sistema aparenta ser um ponto falho do smartphone apresentado nesta quarta na China. 

A LG é outra que deve lançar um smartphone dobrável em breve. Segundo Evan Blass, que costuma antecipar com grande grau de acerto novidades da indústria de smartphones, a empresa sul-coreana planeja apresentar ao menos um protótipo durante a CES 2019, feira de tecnologia que ocorre em Las Vegas (Estados Unidos) no início de janeiro. 

Consultores ouvidos pela BBC relataram espanto pelo lançamento da Royole, que ao menos colocará seu nome no mercado como a primeira companhia do mundo a apresentar um aparelho do tipo. Ela não deve, contudo, esperar grandes vendas do aparelho.