These Best Battery Life Smartphones Make Sure You Get All-Day Results Without a Recharge (2023)

Make Yahoo Your Homepage

Discover something new every day from News, Sports, Finance, Entertainment and more!

generic

Sign in

(Video) Battery Life Explained: Are you killing your battery with bad charging habits?
Mail

Sign in to view your mail

    {promoMarkup}{notifMarkup}

{notificationCenterNavMsg}

',panelEmptyTemplate='

  • {emptyPanelMsg}

  • ',panelErrorTemplate='

    {errorMsg}

    (Video) Renault Group Conference - Capital Market Day - Tuesday 8 November 2022, 9am (CET)

    ',panelParentTemplate='

    ',notifOnboardPromoTemplate='

  • These Best Battery Life Smartphones Make Sure You Get All-Day Results Without a Recharge (3)

    {notifOnboardMsg}

  • ',EXPANDED_PANEL="expanded_panel",ERROR_PANEL="error_panel",NotificationView=function(){function e(n,t){classCallCheck(this,e);var i=this;i._config=n,i._panelNode=null,i._store=t}return createClass(e,[{key:"_generatePanelMarkup",value:function(e,n){var t=this._config,i=void 0,o=void 0;"undefined"!=typeof window&&(i=window.Notification&&"default"===window.Notification.permission,o=t.promos.bypassEligibleClassCheck||hasClass(document.body,t.promos.eligibleBodyClass));var r=t.promos.enableNotifOnboard&&i&&o?notifOnboardPromoTemplate:"";if(r){var s=t.promos.showYahooLogo?"":"yns-no-logo";r=r.replace("{notifOnboardBtnLabel}",t.promos.notifOnboardBtnLabel).replace("{notifOnboardMsg}",t.promos.notifOnboardMsg).replace("{subscriptionTopic}",t.promos.subscriptionTopic).replace("{noLogoClass}",s).replace("{promoLogo}",t.promos.promoLogo)}var a=n.newCount>t.panel.maxCount?n.newCount:"",c=t.panel.notificationCenterPath,l=c?"":constants.panelHideElement,d=t.panel.headerMsg?"":" "+constants.panelHideElement,u=c?constants.panelPaddingBtm:"",p=void 0;n.count?p=n.markup:p=panelEmptyTemplate.replace("{emptyPanelMsg}",t.panel.emptyPanelMsg);return e=e.replace("{notifMarkup}",p).replace("{promoMarkup}",r).replace("{hideClass}",l).replace("{notifCenterLink}",c).replace("{paddingClass}",u).replace("{headerMsg}",t.panel.headerMsg).replace("{hideHeaderClass}",d).replace(/{notificationCenterNavMsg}/g,t.panel.notificationCenterNavMsg).replace(/{newCount}/g,a)}},{key:"render",value:function(e,n){var t=this;if(t._panelNode){var i=void 0,o=t._panelNode,r=void 0,s=void 0;switch(e){case EXPANDED_PANEL:i=panelTemplate,s=t._store.getNotifications(),r=t._generatePanelMarkup(i,s),o.innerHTML=r;break;case ERROR_PANEL:r=(i=panelErrorTemplate).replace("{errorMsg}",t._config.panel.errorMsg),o.innerHTML=r}n&&n()}else n&&n(new Error("No panel parent"))}},{key:"createPanelParentNode",value:function(e){e&&(e.innerHTML=panelParentTemplate,this._panelNode=document.getElementById(constants.panelNodeId))}},{key:"updateBadgeNode",value:function(e){if(e){var n=this._store.getNotifications().newCount,t=this._config.badge.maxCount;if(n){var i=n>t?t+"+":n;e.innerHTML=i}else e.innerHTML=""}}},{key:"addStyles",value:function(e){if(e&&"undefined"!=typeof window){var n=document.getElementById(this._config.panel.styleTagId);n||((n=document.createElement("style")).type="text/css",n.id=this._config.panel.styleTagId,n.innerText=e,document.head.appendChild(n))}}}]),e}(),EXPANDED_PANEL$1="expanded_panel",ERROR_PANEL$1="error_panel",PanelController=function(){function e(n,t,i){classCallCheck(this,e);var o=this;o._store=t,o._view=i,o._config=n;var r=o._config.panel;o._panelParentNode=document.querySelector(r.parentSelector),o._badgeNode=o._config.badge.selector&&document.querySelector(o._config.badge.selector),o._indicatorNode=r.indicatorSelector&&document.querySelector(r.indicatorSelector)}return createClass(e,[{key:"createPanelParentNode",value:function(){this._view.createPanelParentNode(this._panelParentNode),this._notifPanelNode=document.getElementById(constants.panelNodeId)}},{key:"refreshPanelNode",value:function(e,n){var t=this;addClass(t._notifPanelNode,constants.panelLoading),t._store.fetchNotifications(e,(function(e,i){var o=window.wafer&&window.wafer.base;o&&o.destroy(t._notifPanelNode),e?t._notifPanelNode.innerHTML||(t._view.render(ERROR_PANEL$1),addClass(t._notifPanelNode,constants.panelLoading)):(t._view.render(EXPANDED_PANEL$1),t._view.updateBadgeNode(t._badgeNode),t._showBadge(),t._showIndicator(),t._view.addStyles(i.css)),removeClass(t._notifPanelNode,constants.panelLoading),o&&o.sync(t._notifPanelNode.parentNode),n&&n(e,i)}))}},{key:"resetBadge",value:function(){var e=this;e._store.resetNewCount(),e._view.updateBadgeNode(e._badgeNode),addClass(e._badgeNode,e._config.badge.hideClass)}},{key:"_showIndicator",value:function(){this._indicatorNode&&(this._store.getNotifications().newCount?addClass(this._indicatorNode,this._config.panel.indicatorClass):removeClass(this._indicatorNode,this._config.panel.indicatorClass))}},{key:"_showBadge",value:function(){var e=this;e._store.getNotifications().newCount?removeClass(e._badgeNode,e._config.badge.hideClass):addClass(e._badgeNode,e._config.badge.hideClass)}}]),e}(),config={promos:{eligibleBodyClass:"display-push-promos",enableNotifOnboard:!0,bypassEligibleClassCheck:!1,notifOnboardBtnLabel:"Notify Me",notifOnboardMsg:"Get alerts for breaking news and top stories",promoLogo:"https://s.yimg.com/cv/apiv2/ae/news/circle_bell.png",showYahooLogo:!0,subscriptionTopic:"gondor_homerun_news"},badge:{hideClass:"",maxCount:5,selector:""},panel:{emptyPanelMsg:"You have no new notifications.",errorMsg:"",headerMsg:"Notifications",imageTag:"img:40x40|2|80",indicatorClass:"yns-indicator",indicatorSelector:null,maxCount:6,notificationCenterNavMsg:"View all {newCount} notifications",notificationCenterPath:"",notificationTypes:"",parentSelector:null,styleTagId:"notificationStyles",theme:"default"},service:{attemptCount:2,attemptDelay:1,url:null,resetUrl:null,isRMP:!1,responseType:"json",timeout:1500}},Main=function(){function e(n){classCallCheck(this,e);var t=this;t.config=t._parseConfig(n),t._validateRequiredConfigs()&&(t._request=new NotificationRequest(t.config),t._store=new NotificationStore(t.config,t._request),t._view=new NotificationView(t.config,t._store),t._panelController=new PanelController(t.config,t._store,t._view),t._panelController.createPanelParentNode(),t._assignHelperMethods())}return createClass(e,[{key:"_parseConfig",value:function(e){var n={};for(var t in objectAssign(n,config),n)if(n.hasOwnProperty(t)){var i=n[t],o=e[t];"object"===(void 0===i?"undefined":_typeof(i))?objectAssign(i,o):n[t]=e[t]}return n}},{key:"_validateRequiredConfigs",value:function(){var e=this.config;return!(!e.panel.parentSelector||!e.service.url)}},{key:"_assignHelperMethods",value:function(){var e=this;e.helpers={refreshPanelNode:e._panelController.refreshPanelNode.bind(e._panelController),resetBadge:e._panelController.resetBadge.bind(e._panelController),resetIndicator:function(){removeClass(e._panelController._indicatorNode,e.config.panel.indicatorClass)}}}}]),e}(),notificationClient_module_min=Main,notificationClient={NotificationClient:notificationClient_module_min},CONSUMPTION_STORAGE_KEY="lnct",NotifClient=function(){function e(){var e,n;this.personalized=!1,this.ybarElem=document.getElementById("ybar"),this.partnerClasses=null===(n=null===(e=this.ybarElem)||void 0===e?void 0:e.className)||void 0===n?void 0:n.match(/ybar-variant-([a-z]*)/),this.client=new notificationClient.NotificationClient(this.getConfig())}return e.prototype.refreshPanel=function(){var e,n,t,i=this,o={lastUpdate:this.getTimeStamp()||this.setTimeStamp(),loadInHpViewer:!0,includePersonalized:this.personalized},r=(null===(e=window.YAHOO)||void 0===e?void 0:e.context)||(null===(n=window.Af)||void 0===n?void 0:n.context)||{};return r.region&&r.lang&&(o.lang=r.lang,o.region=r.region),(null===(t=this.partnerClasses)||void 0===t?void 0:t.length)&&(o.partner=this.partnerClasses[1]),new Promise((function(e,n){i.client.helpers.refreshPanelNode({matrixParams:o},(function(t,i){t&&(logError("Notification refresh error:",t),n(t)),e(i)}))}))},e.prototype.resetBadge=function(){this.client.helpers.resetBadge(),this.setTimeStamp()},e.prototype.getConfig=function(){var e,n,t,i,o,r={promos:{eligibleBodyClass:"display-push-promos",enableNotifOnboard:!0},badge:{selector:"#notif-badge",hideClass:"ybar-notification-hidden"},panel:{emptyPanelMsg:"You have no new notifications.",errorMsg:"Please check back later.",headerMsg:"Notifications",maxCount:5,parentSelector:"#ybarNotificationBody",notificationTypes:"breakingNews"},service:{url:"/tdv2_fp/api/resource/NotificationHistory.getHistory",isRMP:!1}},s=document.getElementById("notification-container"),a=null===(e=null==s?void 0:s.dataset)||void 0===e?void 0:e.config,c={};if(a){"att"===(null===(n=this.partnerClasses)||void 0===n?void 0:n[1])&&(r.promos.showYahooLogo=!1);try{var l=JSON.parse(a);c=__assign({},l),this.personalized=1===l.personalize}catch(e){logError("Notifications config parsing error",e)}s&&delete s.dataset.config}var d=this.mergeConfigs(r,c);return(null===(t=this.partnerClasses)||void 0===t?void 0:t.length)&&"yahoo"!==(null===(i=this.partnerClasses)||void 0===i?void 0:i[1])&&(null===(o=d.promos)||void 0===o?void 0:o.subscriptionTopic)&&delete d.promos.subscriptionTopic,d},e.prototype.mergeConfigs=function(e,n){var t=__assign({},e);for(var i in e)t[i]=__assign(__assign({},e[i]),n[i]);return t},e.prototype.getTimeStamp=function(){var e;return null===(e=window.localStorage)||void 0===e?void 0:e.getItem(CONSUMPTION_STORAGE_KEY)},e.prototype.setTimeStamp=function(){var e,n=""+Math.floor((new Date).getTime()/1e3);return null===(e=window.localStorage)||void 0===e||e.setItem(CONSUMPTION_STORAGE_KEY,n),n},e}(),notifClient=new NotifClient,getNotifClient=function(){return notifClient},reInit=function(){notifClient=new NotifClient},ybarRapid,ybarRapidInterval,ybarRapidErrMsg="",beaconQueue=[],noop=function(){},logRapidError=function(){window.removeEventListener("beforeunload",logRapidError),""!==ybarRapidErrMsg&&logError("Rapid not found on page",new Error(ybarRapidErrMsg))},findRapidWithSpaceid=function(e){var n=void 0;if(e&&e.length>0)for(var t=0;t

    0){if(ybarRapid.addModules(o,!1,i),beaconQueue.length>0)for(e=0;e90&&fireImageBeacon("performance",e)}catch(e){}}),1e3)}))},measureInit=measure("ybar-init");initYbar(),measureInit.stop(),initPerformanceMetricsBeaconListener(),initRapid(),initErrorBeaconListener();var selected="_yb_kc111",Css$7={"right-item":"_yb_14x82",selected:selected,"ybar-mod-topnavigation":"_yb_1k6um","ybar-mod-topnavigation-teaser-imp":"_yb_1tjka"},DOCUMENT_NODE_TYPE=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var proto=Element.prototype;proto.matches=proto.matchesSelector||proto.mozMatchesSelector||proto.msMatchesSelector||proto.oMatchesSelector||proto.webkitMatchesSelector}function closest(e,n){for(;e&&e.nodeType!==DOCUMENT_NODE_TYPE;){if("function"==typeof e.matches&&e.matches(n))return e;e=e.parentNode}}var closest_1=closest;function _delegate(e,n,t,i,o){var r=listener.apply(this,arguments);return e.addEventListener(t,r,o),{destroy:function(){e.removeEventListener(t,r,o)}}}function delegate(e,n,t,i,o){return"function"==typeof e.addEventListener?_delegate.apply(null,arguments):"function"==typeof t?_delegate.bind(null,document).apply(null,arguments):("string"==typeof e&&(e=document.querySelectorAll(e)),Array.prototype.map.call(e,(function(e){return _delegate(e,n,t,i,o)})))}function listener(e,n,t,i){return function(t){t.delegateTarget=closest_1(t.target,n),t.delegateTarget&&i.call(e,t)}}var delegate_1=delegate,ListNode=function(e){this.data=e,this.next=null,this.prev=null},LinkedList=function(){function e(){this.head=null,this.tail=null}return e.prototype.push=function(e){var n=new ListNode(e);return this.head?this.tail?(n.prev=this.tail,this.tail.next=n,this.tail=n):(this.tail=n,this.tail.prev=this.head,this.head.next=this.tail):(this.head=n,n.next=this.tail),n},e.prototype.size=function(){for(var e=0,n=this.head;n;)e+=1,n=n.next;return e},e.prototype.getHead=function(){return this.head},e.prototype.getTail=function(){return this.tail},e.prototype.get=function(e){if(e>=this.size())return null;for(var n=0,t=this.head;(null==t?void 0:t.next)&&n0&&Array.prototype.forEach.call(e,(function(e){e.onerror=function(){e.onerror=null,e.style.display="none"}}))},fixLogoOutline=function(e,n){e&&(hideOutlineOnMouseDown("#ybar-logo","#ybar-logo",n),n.onDestroy((function(){e.classList.remove("ybar-show-outline"),e.classList.remove("ybar-hide-outline")})))},logoClick=function(e,n){n&&e.addElementListener(n,"click",(function(){e.triggerEvent("logo-click")}))},init$3=function(e,n){n.logoImages&&hideLogosOnError(n.logoImages),n.wrapper&&(fixLogoOutline(n.wrapper,e),logoClick(e,n.wrapper))};initModule("ybar-mod-logo",(function(e){var n={wrapper:document.getElementById("ybar-logo"),logoImages:document.querySelectorAll(".".concat(Css$6["logo-image"]))};init$3(e,n)}));var overlay$1="_yb_1r2ir",tooltip="_yb_1rsxv",tooltip__text="_yb_o04ap",tooltip__voice="_yb_1i8f6",tooltip__web="_yb_1gftm",dark="_yb_1psh0",darker="_yb_9iuab",light="_yb_1du1o",midnight60="_yb_m1jsy",Css$5={"dropdown-open":"_yb_12s12","merchant-is-selected":"_yb_1gukl",overlay:overlay$1,"selected-merchant-clear-button":"_yb_b7qnt","shops-buttons":"_yb_cbtmk","styled-select":"_yb_1ii3y",tooltip:tooltip,"tooltip--show":"_yb_1n8xm",tooltip__text:tooltip__text,tooltip__voice:tooltip__voice,tooltip__web:tooltip__web,dark:dark,darker:darker,light:light,midnight60:midnight60},range=function(e,n){var t=Math.max(e,n),i=Math.min(e,n),o=Math.abs(t-i);return __spreadArray([],new Array(o+1),!0).map((function(e,n){return i+n}))},openSearchOverlay=function(e,n,t){var i=e.getConfig().bucketConfig,o=(void 0===i?{}:i).enable_search_ui,r=void 0!==o&&o;if(n.ybar){n.ybar.classList.add("ybar-searchbox-assist-fullscreen"),document.documentElement.classList.add("ybar-overlay"),document.body.classList.add("ybar-overlay-noscroll");beaconClick("ybar","websrch","",{elm:"expand",subsec:"searchbox",itc:"1"}),setTimeout((function(){n.searchInput instanceof HTMLInputElement&&(t&&(n.searchInput.value=t),n.searchInput.focus(),r&&n.searchInput.click())}))}},closeSearchOverlay=function(e){var n;null===(n=e.ybar)||void 0===n||n.classList.remove("ybar-searchbox-assist-fullscreen"),document.documentElement.classList.remove("ybar-overlay"),document.body.classList.remove("ybar-overlay-noscroll"),e.searchInput instanceof HTMLInputElement&&(e.searchInput.value="",e.searchInput.blur())},initMweb=function(e,n){"smartphone"===e.getConfig().device&&(e.addElementListener(n.searchBoxPlaceholder,"click",(function(){openSearchOverlay(e,n)})),e.addElementListener(n.searchBoxPlaceholder,"keydown",(function(t){var i=t,o=i.keyCode,r=i.key,s=range(65,90),a=__spreadArray(__spreadArray([],range(58,57),!0),range(96,105),!0),c=__spreadArray(__spreadArray([],s,!0),a,!0).includes(o);(32===o||13===o||c)&&(t.preventDefault(),t.stopPropagation(),openSearchOverlay(e,n,c?r:""))})),n.searchBoxBackButton&&(e.addElementListener(n.searchBoxBackButton,"click",(function(e){e.stopPropagation(),closeSearchOverlay(n);beaconClick("ybar","back-close-srch","",{elm:"btn",subsec:"searchbox",itc:"1"})})),e.addElementListener(n.searchInput,"keyup",(function(e){e.stopPropagation();27===e.keyCode&&(e.stopPropagation(),closeSearchOverlay(n))}))),e.addEventListener("viewerClosed",(function(){closeSearchOverlay(n)})),e.onDestroy((function(){closeSearchOverlay(n)})))},Tooltip=function(){function e(e,n,t){n&&(this.ybar=e,this.elem=n,this.options=t,this.show=this.show.bind(this),this.hide=this.hide.bind(this),this.addEventListeners())}return Object.defineProperty(e.prototype,"tooltip",{get:function(){var e=this;return this.tooltipMarkup||(this.tooltipMarkup=this.createTooltip(),(this.options.tooltipParentElm||this.elem).appendChild(this.tooltipMarkup),this.ybar.onDestroy((function(){var n,t;null===(t=null===(n=e.tooltipMarkup)||void 0===n?void 0:n.parentNode)||void 0===t||t.removeChild(e.tooltipMarkup)}))),this.tooltipMarkup},enumerable:!1,configurable:!0}),e.prototype.show=function(){this.tooltip.classList.add(this.options.showClass)},e.prototype.hide=function(){this.tooltip.classList.remove(this.options.showClass)},e.prototype.addEventListeners=function(){this.ybar.addElementListener(this.elem,"mouseenter",this.show),this.ybar.addElementListener(this.elem,"focus",this.show),this.ybar.addElementListener(this.elem,"mouseleave",this.hide),this.ybar.addElementListener(this.elem,"blur",this.hide)},e.prototype.createTooltip=function(){var e=document.createElement("div");e.className=this.options.containerClass||"";var n=document.createElement("p");return n.textContent=this.options.label,n.className=this.options.textClass||"",e.appendChild(n),e},e}();createCommonjsModule((function(module){(function(){var __webpack_modules__={"./src/index.js":/*!**********************!*\ !*** ./src/index.js ***! \**********************/function(__unused_webpack_module,__unused_webpack_exports,__webpack_require__){eval("var I18n = __webpack_require__(/*! ./lib/I18n */ \"./src/lib/I18n.js\");\n\n(function (win, doc) {\n \"use strict\";\n\n var defaultConfig = {\n uiLang: 'en-US',\n speechLang: 'en-US',\n voiceButton: '#voice-btn',\n searchBox: {\n form: '#sf',\n input: '#yschsp',\n params: {\n fr: '',\n fr2: ''\n }\n },\n enable_voice_trending: false,\n trending: {\n market: \"en-us\"\n },\n ui: {\n speechOverlay: {\n disableBlur: false\n }\n },\n browsers: {\n edge: false\n }\n };\n\n function VoiceSearch(config) {\n var self = this;\n self.config = Object.assign(defaultConfig, config || {});\n self.i18n = new VoiceSearch.I18n({\n lang: self.config.uiLang\n });\n self.renderPermissionGuide(self);\n self.renderSpeechPanel(self);\n self.speechResult = '';\n self.noSpeech = true;\n self.isRecognitionStart = false;\n self.recognition = null;\n self.voiceButton = doc.querySelector(self.config.voiceButton);\n self.searchBoxForm = doc.querySelector(self.config.searchBox.form);\n self.searchBoxQuery = doc.querySelector(self.config.searchBox.input);\n self.speechPanel = doc.querySelector('#spch');\n self.speechButtonContainer = doc.querySelector('#spchbc');\n self.speechButton = doc.querySelector('#spchbc-btn');\n self.speechText = doc.querySelector('#spcht');\n self.speechOverlay = doc.getElementById('spch-overlay');\n self.retryLink = doc.querySelector('#spcht-retry');\n self.trending = doc.getElementById('spch-trending');\n self.trendingTerms = doc.getElementById('trending-terms');\n self.termSpans = doc.getElementsByClassName(\"trending-term\");\n self.closeButton = doc.querySelector('#spchx');\n self.startAudio = new Audio('https://s.yimg.com/pv/static/misc/voice-start-202105050733.wav');\n self.resultAudio = new Audio('https://s.yimg.com/pv/static/misc/voice-result-202105050733.wav');\n self.errorAudio = new Audio('https://s.yimg.com/pv/static/misc/voice-error-202105050733.wav');\n self.closeAudio = new Audio('https://s.yimg.com/pv/static/misc/voice-close-202105050733.wav');\n self.permissionGuide = doc.querySelector('#spchp');\n self.permissionGuideClose = doc.querySelector('#spchpx');\n self.permissionGuideTimer = null;\n\n self.onEscKeyDown = function (e) {\n if (e.code !== 'Escape') {\n return;\n }\n\n self.recognition.stop();\n self.sendBeacon('keybrd', 'voicesearch_cancel_esc'); // The clean up should put inside closePanel() instead of here,\n // or func won't be cleaned up if user close panel with btn or overlay\n\n self.closePanel(self);\n };\n\n if (self.isBrowserSupported()) {\n var SpeechRecognition = win.SpeechRecognition || win.webkitSpeechRecognition;\n var SpeechGrammarList = win.SpeechGrammarList || win.webkitSpeechGrammarList;\n var speechGrammar = '#JSGF V1.0;';\n self.recognition = new SpeechRecognition();\n var speechRecognitionList = new SpeechGrammarList();\n\n if (speechRecognitionList.addFromString) {\n speechRecognitionList.addFromString(speechGrammar, 1);\n }\n\n self.recognition.grammars = speechRecognitionList;\n self.recognition.continuous = false;\n self.recognition.lang = self.config.speechLang;\n self.recognition.interimResults = false;\n self.recognition.maxAlternatives = 1;\n /* Listeners */\n\n if (self.voiceButton) {\n self.voiceButton.onclick = function () {\n self.recognition.start();\n\n if (self.permissionGuideTimer) {\n win.clearTimeout(self.permissionGuideTimer);\n }\n\n self.permissionGuideTimer = win.setTimeout(function () {\n if (!self.isRecognitionStart) {\n self.showPermissionGuide(self);\n }\n }, 300); // Also close when pressing esc\n\n doc.addEventListener('keydown', self.onEscKeyDown);\n self.sendBeacon('clk', 'voicesearch');\n };\n }\n\n if (self.speechButton) {\n self.speechButton.onclick = function () {\n if (!self.isRecognitionStart) {\n self.recognition.start();\n self.sendBeacon('clk', 'voicesearch_panel_mic_restart');\n } else {\n self.recognition.stop();\n self.sendBeacon('clk', 'voicesearch_panel_mic_close');\n self.closePanel(self);\n }\n };\n }\n\n if (self.retryLink) {\n self.retryLink.onclick = function () {\n if (!self.isRecognitionStart) {\n self.recognition.start();\n self.sendBeacon('clk', 'voicesearch_panel_retry');\n }\n };\n }\n\n if (self.speechOverlay) {\n self.speechOverlay.onclick = function () {\n self.recognition.stop();\n self.sendBeacon('clk', 'voicesearch_cancel_outside');\n self.closePanel(self);\n };\n }\n\n if (self.closeButton) {\n self.closeButton.onclick = function\n /*event*/\n () {\n self.recognition.stop();\n self.sendBeacon('clk', 'voicesearch_cancel');\n self.closePanel(self);\n };\n }\n\n if (self.permissionGuideClose) {\n self.permissionGuideClose.onclick = function\n /*event*/\n () {\n self.recognition.stop();\n self.sendBeacon('clk', 'voicesearch_permission_close');\n self.closeAudio.play();\n self.hidePermissionGuide(self);\n };\n }\n /* Recognition Events */\n\n\n self.recognition.onresult = function (event) {\n // The SpeechRecognitionEvent results property returns a SpeechRecognitionResultList object\n // The SpeechRecognitionResultList object contains SpeechRecognitionResult objects.\n // It has a getter so it can be accessed like an array\n // The first [0] returns the SpeechRecognitionResult at the last position.\n // Each SpeechRecognitionResult object contains SpeechRecognitionAlternative objects that contain individual results.\n // These also have getters so they can be accessed like arrays.\n // The second [0] returns the SpeechRecognitionAlternative at position 0.\n // We then return the transcript property of the SpeechRecognitionAlternative object\n // console.log('Confidence: ' + event.results[0][0].confidence);\n self.speechResult = event.results[0][0].transcript;\n /* Punctuation Handling: Check last character and strip it if necessary */\n\n self.handlePunctuation(self);\n\n if (self.speechText) {\n self.speechText.innerText = self.speechResult;\n }\n\n if (self.searchBoxQuery) {\n self.searchBoxQuery.value = self.speechResult;\n }\n\n self.resultAudio.play();\n win.setTimeout(function () {\n if (self.speechPanel) {\n self.speechPanel.classList.remove(\"s2tb\");\n self.speechPanel.classList.add(\"s2tb-h\");\n }\n\n self.hideRetryLink(self);\n\n if (self.searchBoxForm) {\n var inputFr = self.searchBoxForm.querySelector('[name=fr]');\n var inputFr2 = self.searchBoxForm.querySelector('[name=fr2]');\n\n if (inputFr && self.config.searchBox && self.config.searchBox.params && self.config.searchBox.params.fr) {\n inputFr.value = config.searchBox.params.fr;\n inputFr.disabled = false; // for homepage case\n }\n\n if (inputFr2 && self.config.searchBox && self.config.searchBox.params && self.config.searchBox.params.fr2) {\n inputFr2.value = config.searchBox.params.fr2;\n inputFr2.disabled = false; // for homepage case\n }\n\n self.searchBoxForm.submit();\n }\n }, 1000);\n };\n\n self.recognition.onspeechstart = function\n /*event*/\n () {// Fired when speech starts\n };\n\n self.recognition.onspeechend = function () {\n // Fired when speech ends\n self.recognition.stop();\n };\n\n self.recognition.onerror = function\n /*event*/\n () {\n // console.log('Error occurred in recognition: ' + event.error);\n if (self.speechText) {\n self.speechText.innerText = self.i18n.t('search.voice.recognition_error');\n }\n\n self.hideTrending(self);\n self.showRetryLink(self);\n self.errorAudio.play();\n };\n\n self.recognition.onaudiostart = function\n /*event*/\n () {\n // Fired when the user agent has started to capture audio.\n if (self.speechButtonContainer) {\n self.speechButtonContainer.classList.add(\"listening\");\n }\n };\n\n self.recognition.onaudioend = function\n /*event*/\n () {\n // Fired when the user agent has finished capturing audio.\n if (self.speechButtonContainer) {\n self.speechButtonContainer.classList.remove(\"listening\");\n }\n };\n\n self.recognition.onsoundstart = function\n /*event*/\n () {\n // Fired when any sound — recognisable speech or not — has been detected.\n self.hideTrending(self);\n self.noSpeech = false;\n\n if (self.speechButtonContainer) {\n self.speechButtonContainer.classList.remove(\"listening\");\n self.speechButtonContainer.classList.add(\"speaking\");\n }\n };\n\n self.recognition.onsoundend = function\n /*event*/\n () {\n // Fired when no sound present\n if (self.speechButtonContainer) {\n self.speechButtonContainer.classList.remove(\"speaking\");\n }\n };\n\n self.recognition.onstart = function\n /*event*/\n () {\n // Fired when the speech recognition service has begun listening\n self.recognitionInit(self);\n self.startRecognition(self);\n };\n\n self.recognition.onend = function\n /*event*/\n () {\n // Fired when the speech recognition service has disconnected.\n self.isRecognitionStart = false;\n\n if (self.noSpeech == false && self.speechResult == '') {\n // No match: Fired when the speech recognition can't recognise speech\n if (self.speechText) {\n self.speechText.innerText = self.i18n.t('search.voice.recognition_nomatch');\n }\n\n self.hideTrending(self);\n self.showRetryLink(self);\n self.errorAudio.play();\n }\n }; // trigger onReady event when initialized\n\n\n if (document && document.dispatchEvent) {\n document.dispatchEvent(new Event('VOICE_JS_READY'));\n }\n }\n } // static members\n\n\n VoiceSearch.I18n = I18n; // instance members\n\n VoiceSearch.prototype.renderPermissionGuide = function (self) {\n var tmpl = \"\\n

    \\n

    \\n

    \\n

    \\n

    \\n

    \\n

    \\n

    \".concat(self.i18n.t('search.voice.permission_title'), \"

    \\n

    \").concat(self.i18n.t('search.voice.permission_text'), \"

    \\n

    (Video) I DESTROYED My Battery Life For Good!!! iPhone Tips, Tricks and Hacks YOU NEED TO KNOW!

    \\n

    \\n

    \\n \");\n var dom = new DOMParser().parseFromString(tmpl, 'text/html');\n document.body.appendChild(dom.body.children[0]);\n };\n\n VoiceSearch.prototype.renderSpeechPanel = function (self) {\n var tmpl = \"\\n

    \\n

    \\n

    \\n

    \\n

    \\n

    \\n \\n \\n \\n \\n \\n \\n

    \\n

    \\n

    \\n \\n \\n \".concat(self.i18n.t('search.voice.recognition_retry'), \"\\n

    \\n

    \\n

    \\n

    \\n

    \\n

    (Video) 7 Ways to Improve Your Phone’s Battery Life (Android & iPhone)

    \\n \").concat(self.i18n.t('search.voice.trending_title'), \"\\n \\n

    \\n

    \\n

    \\n \");\n var dom = new DOMParser().parseFromString(tmpl, 'text/html');\n\n if (self && self.config && self.config.ui && self.config.ui.speechOverlay && self.config.ui.speechOverlay.disableBlur) {\n dom.body.children[0].classList.add('disable-blur-overlay');\n }\n\n document.body.appendChild(dom.body.children[0]);\n };\n\n VoiceSearch.prototype.isBrowserSupported = function () {\n var isSupported = false;\n var self = this;\n var isChromium = Boolean(window.chrome);\n var isIOSChrome = /CriOS/.test(window.navigator.userAgent);\n var isEdge = /Edg\\//.test(window.navigator.userAgent);\n var isLegacyEdge = /Edge\\//.test(window.navigator.userAgent);\n var isOpera = Boolean(window.opr);\n var isBrave = Boolean(window.navigator.brave);\n var browsers = [// chrome\n {\n checkEnabled: function checkEnabled() {\n return true;\n },\n checkBrowser: function checkBrowser() {\n return isChromium && !isIOSChrome && !isEdge && !isOpera && !isBrave;\n },\n checkAPI: function checkAPI() {\n return win && ('SpeechRecognition' in win || 'webkitSpeechRecognition' in win) && ('SpeechGrammarList' in win || 'webkitSpeechGrammarList' in win);\n }\n }, // edge\n {\n checkEnabled: function checkEnabled() {\n return self && self.config && self.config.browsers && self.config.browsers.edge;\n },\n checkBrowser: function checkBrowser() {\n return isChromium && isEdge && !isLegacyEdge;\n },\n checkAPI: function checkAPI() {\n return win && ('SpeechRecognition' in win || 'webkitSpeechRecognition' in win) && ('SpeechGrammarList' in win || 'webkitSpeechGrammarList' in win);\n }\n }];\n\n for (var b = 0; b < browsers.length; b++) {\n var browser = browsers[b];\n\n if (browser && browser.checkBrowser && browser.checkBrowser() && browser.checkEnabled && browser.checkEnabled(self) && browser.checkAPI && browser.checkAPI()) {\n isSupported = true;\n }\n }\n\n return isSupported;\n };\n\n VoiceSearch.prototype.recognitionInit = function (self) {\n // Initialize flags for checking whether user is speaking or not\n self.speechResult = '';\n self.noSpeech = true;\n self.isRecognitionStart = true;\n };\n\n VoiceSearch.prototype.showPermissionGuide = function (self) {\n if (self.permissionGuide) {\n self.permissionGuide.classList.remove(\"hide\");\n }\n };\n\n VoiceSearch.prototype.hidePermissionGuide = function (self) {\n if (self.permissionGuide) {\n self.permissionGuide.classList.add(\"hide\");\n }\n };\n\n VoiceSearch.prototype.getTrending = function (self) {\n // Call api for trending terms\n if (!self.config.enable_voice_trending || !self.trending) {\n return;\n }\n\n var url = \"https://api.search.yahoo.com/data/v3/search?appid=4d234a9d&market=\" + self.config.trending.market + \"&features=trending.voice\";\n self.ajaxReq(url, function (resBody) {\n if (!resBody || !resBody.response || !resBody.response.search || !resBody.response.search.results || !resBody.response.search.results[\"trending.voice\"]) {\n return;\n }\n\n var terms = resBody.response.search.results[\"trending.voice\"].data;\n self.showTrending(self, terms);\n });\n };\n\n VoiceSearch.prototype.showTrending = function (self, terms) {\n // params check\n if (!Array.isArray(terms) || terms.length < 3) {\n return;\n } // DOM check\n\n\n if (!self.trending || !self.termSpans || !self.termSpans[0]) {\n return;\n }\n\n var trendingLabel = '';\n trendingLabel += '\"' + terms[0].text + '\"' + ', ';\n trendingLabel += '\"' + terms[1].text + '\"' + ' ';\n trendingLabel += self.i18n.t('search.voice.trending_or') + ' ';\n trendingLabel += '\"' + terms[2].text + '\"';\n self.termSpans[0].innerText = trendingLabel;\n self.trending.classList.remove(\"hide\");\n };\n\n VoiceSearch.prototype.hideTrending = function (self) {\n if (!self.trending) {\n return;\n }\n\n self.trending.classList.add(\"hide\");\n };\n\n VoiceSearch.prototype.showRetryLink = function (self) {\n if (self.retryLink) {\n self.retryLink.innerText = self.i18n.t('search.voice.recognition_retry');\n self.retryLink.classList.remove(\"hide\");\n }\n };\n\n VoiceSearch.prototype.hideRetryLink = function (self) {\n if (self.retryLink) {\n self.retryLink.classList.add(\"hide\");\n }\n };\n\n VoiceSearch.prototype.startRecognition = function (self) {\n self.hidePermissionGuide(self);\n self.getTrending(self);\n self.startAudio.play();\n\n if (self.speechText) {\n self.speechText.innerText = self.i18n.t('search.voice.recognition_start');\n win.setTimeout(function () {\n self.speechText.innerText = self.i18n.t('search.voice.recognition_listening');\n }, 2000);\n }\n\n if (self.speechPanel) {\n self.speechPanel.classList.remove(\"s2tb-h\");\n self.speechPanel.classList.add(\"s2tb\");\n }\n\n self.hideRetryLink(self);\n };\n\n VoiceSearch.prototype.closePanel = function (self) {\n self.closeAudio.play();\n win.setTimeout(function () {\n if (self.speechPanel) {\n self.speechPanel.classList.remove(\"s2tb\");\n self.speechPanel.classList.add(\"s2tb-h\");\n }\n\n self.hideTrending(self);\n self.hideRetryLink(self); // clean up esc listener\n\n doc.removeEventListener('keydown', self.onEscKeyDown);\n }, 100);\n };\n\n VoiceSearch.prototype.handlePunctuation = function (self) {\n if (self.speechResult.length > 0) {\n var lastChar = self.speechResult.charAt(self.speechResult.length - 1);\n\n if (lastChar === '.' || lastChar === '?' || lastChar === '。' || lastChar === '?') {\n self.speechResult = self.speechResult.slice(0, -1);\n }\n }\n };\n\n VoiceSearch.prototype.sendBeacon = function (actn, slk) {\n var ULT = win.YAHOO.ULT || {},\n SB = win.YAHOO.SB || {};\n\n if (ULT.beacon_click) {\n var trackParams = {\n _S: SB.config.i13n.spaceid,\n _I: SB.config.i13n.pvid,\n actn: actn,\n sec: 'search',\n slk: slk\n };\n win.YAHOO.ULT.beacon_click(trackParams);\n }\n };\n\n VoiceSearch.prototype.ajaxReq = function (url, callback) {\n var DONE_STATE = XMLHttpRequest.DONE || 4; // for IE-compatibility\n\n var xhr = new XMLHttpRequest();\n var responseRaw;\n var response; // CORS request only for IE8/IE9\n\n if (doc.documentMode && doc.documentMode < 10) {\n var xdr = new win.XDomainRequest();\n\n xdr.onload = function () {\n try {\n response = JSON.parse(responseRaw);\n callback(response);\n } catch (err) {\n return;\n }\n };\n\n xhr.open('GET', url);\n xhr.send();\n return;\n } // CORS request for browers newer than IE9\n\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState !== DONE_STATE) {\n return;\n } // handle ajax response\n\n\n switch (xhr.status) {\n case 200:\n responseRaw = xhr.responseText;\n\n try {\n response = JSON.parse(responseRaw);\n callback(response);\n } catch (err) {\n return;\n }\n\n break;\n\n default:\n // non-200 status code: retry or assume failure\n callback(response);\n break;\n }\n };\n\n xhr.open('GET', url, true);\n /* aync request */\n\n xhr.timeout = 10000;\n xhr.send();\n };\n\n if (!win.YAHOO) {\n win.YAHOO = {};\n }\n\n if (!win.YAHOO.Util) {\n win.YAHOO.Util = {};\n }\n\n win.YAHOO.Util.VoiceSearch = VoiceSearch;\n})(window, document);\n\n//# sourceURL=webpack://@vzmi/voicejs/./src/index.js?")},"./src/lib/I18n.js":/*!*************************!*\ !*** ./src/lib/I18n.js ***! \*************************/function(module,__unused_webpack_exports,__webpack_require__){eval("module.exports = function () {\n var LANG_LIST = __webpack_require__(/*! ./lang_list.json */ \"./src/lib/lang_list.json\");\n\n var DEFAULT_LANG = 'default';\n\n var isValidLang = function isValidLang(lang) {\n return LANG_LIST.indexOf(lang) !== -1;\n }; // convert language strings to key-value map\n\n\n var buildStrMap = function buildStrMap(langStrings) {\n return langStrings.reduce(function (strMap, item) {\n strMap[item.id] = item.defaultMessage;\n return strMap;\n }, {});\n };\n\n var I18n = function I18n(options) {\n // initialize\n this.lang = isValidLang(options && options.lang) ? options.lang : DEFAULT_LANG;\n }; // static members\n\n\n I18n.langMap = {};\n I18n.langMap[DEFAULT_LANG] = buildStrMap(__webpack_require__(/*! ../lang/strings.json */ \"./src/lang/strings.json\"));\n\n I18n.setLangMap = function (lang, strings) {\n if (lang && strings) {\n I18n.langMap[lang] = buildStrMap(strings);\n }\n }; // instance members\n\n\n I18n.prototype = {\n t: function t(id) {\n switch (true) {\n // look up target language\n case Boolean(I18n.langMap && I18n.langMap[this.lang] && I18n.langMap[this.lang][id]):\n return I18n.langMap[this.lang][id];\n // fallback to default strings\n\n case Boolean(I18n.langMap && I18n.langMap[DEFAULT_LANG] && I18n.langMap[DEFAULT_LANG][id]):\n return I18n.langMap[DEFAULT_LANG][id];\n\n default:\n return '';\n }\n }\n };\n return I18n;\n}();\n\n//# sourceURL=webpack://@vzmi/voicejs/./src/lib/I18n.js?")},"./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./src/index.css":/*!*******************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./src/index.css ***! \*******************************************************************************************************/function(module,__webpack_exports__,__webpack_require__){eval('__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);\n// Imports\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, "/* Sprites */\\n#spchp.permission-guide .guide .microphone .sprite,\\n#spchp .close-button,\\n#spch .close-button,\\n#spch .spchc .microphone,\\n#spch .spchc .speaking .microphone {\\n background-image: url(https://s.yimg.com/pv/static/img/voiceSearch1x-1620383531565.min.png);\\n background-repeat: no-repeat;\\n background-size: initial;\\n color: transparent;\\n}\\n/* Retina displays */\\n@media\\n only screen and (-webkit-min-device-pixel-ratio: 2),\\n only screen and (min-device-pixel-ratio: 2),\\n only screen and (min-resolution: 192dpi),\\n only screen and (min-resolution: 2dppx) {\\n#spchp.permission-guide .guide .microphone .sprite,\\n#spchp .close-button,\\n#spch .close-button,\\n#spch .spchc .microphone,\\n#spch .spchc .speaking .microphone {\\n background-size: 41px 330px;\\n background-image: url(https://s.yimg.com/pv/static/img/voiceSearch2x-1620383531565.min.png)\\n}\\n }\\n\\n/* permission guide */\\n#spchp.permission-guide {\\n height: 100%;\\n width: 100%;\\n padding: 0;\\n opacity: 0.9;\\n background-color: #fff;\\n left: 0;\\n overflow: hidden;\\n position: fixed;\\n text-align: left;\\n top: 0;\\n z-index: 10000;\\n transition: visibility 0s linear 0.218s, background-color 0.218s;\\n}\\n#spchp.permission-guide .close-button {\\n background-position: 0 0;\\n width: 24px;\\n height: 24px;\\n border: none;\\n cursor: pointer;\\n right: 0;\\n margin: 20px;\\n padding: 0;\\n position: absolute;\\n top: 0;\\n z-index: 10;\\n opacity: 0.8;\\n }\\n#spchp.permission-guide .close-button:hover {\\n opacity: 1;\\n }\\n#spchp.permission-guide .guide {\\n margin: 191px 0 0 507px;\\n }\\n#spchp.permission-guide .guide .microphone {\\n height: 68px;\\n width: 52px;\\n border-right: 1px solid #232a31;\\n float: left;\\n }\\n#spchp.permission-guide .guide .microphone .sprite {\\n background-position: 0 -105px;\\n width: 28px;\\n height: 28px;\\n }\\n#spchp.permission-guide .guide .guide-text {\\n height: 68px;\\n margin-left: 24px;\\n float: left;\\n }\\n#spchp.permission-guide .guide .guide-text .title {\\n color: #232a31;\\n font-size: 32px;\\n font-family: HelveticaNeue-Bold;\\n line-height: 28px;\\n margin-bottom: 16px;\\n }\\n#spchp.permission-guide .guide .guide-text .text {\\n color: #232a31;\\n font-size: 16px;\\n line-height: 28px;\\n }\\n#spchp.permission-guide.hide {\\n display: none;\\n }\\n\\n/* speech panel */\\n#spch.spch {\\n background: #fff;\\n height: 100%;\\n left: 0;\\n opacity: 0;\\n overflow: hidden;\\n position: fixed;\\n text-align: left;\\n top: 0;\\n visibility: hidden;\\n width: 100%;\\n z-index: 10000;\\n transition: visibility 0s linear 0.218s, background-color 0.218s;\\n}\\n#spch.spch .close-button {\\n background-position: 0 0;\\n width: 24px;\\n height: 24px;\\n border: none;\\n cursor: pointer;\\n right: 0;\\n margin: 20px;\\n padding: 0;\\n position: absolute;\\n top: 0;\\n z-index: 10;\\n opacity: 0.8;\\n }\\n#spch.spch .close-button:hover {\\n opacity: 1;\\n }\\n#spch.spch .spchc {\\n display: block;\\n height: 97px;\\n pointer-events: none;\\n }\\n#spch.spch .spchc .inner-container {\\n width: 100%;\\n height: 100%;\\n opacity: 0.1;\\n pointer-events: none;\\n transition: opacity 0.318s ease-in;\\n }\\n#spch.spch .spchc .inner-container .spch-control {\\n display: inline-block;\\n }\\n#spch.spch .spchc .inner-container .text-container {\\n float: left;\\n height: 91px;\\n overflow: hidden;\\n margin: 3px 0;\\n pointer-events: none;\\n width: calc(50% - 48.5px);\\n }\\n#spch.spch .spchc .inner-container .text-container p {\\n display: table-cell;\\n vertical-align: middle;\\n width: 550px;\\n height: 97px;\\n }\\n#spch.spch .spchc .inner-container .text-container .spcht {\\n font-weight: normal;\\n color: #6e7780;\\n line-height: normal;\\n opacity: 0;\\n pointer-events: none;\\n text-align: left;\\n -webkit-font-smoothing: antialiased;\\n transition: opacity 0.1s ease-in, margin-left 0.5s ease-in, top 0s linear 0.218s;\\n }\\n#spch.spch .spchc .inner-container .text-container .spcht.hide {\\n display: none;\\n }\\n#spch.spch .spchc .inner-container .text-container #spcht-retry {\\n color: #0f69ff;\\n cursor: pointer;\\n pointer-events: auto;\\n }\\n#spch.spch .spchc .inner-container .button-container {\\n pointer-events: none;\\n position: relative;\\n transition: transform 0.218s, opacity 0.218s ease-in;\\n }\\n#spch.spch .spchc .inner-container .button-container .button {\\n background-color: #fff;\\n border: 1px solid #eee;\\n border-radius: 100%;\\n bottom: 0;\\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\\n cursor: pointer;\\n display: inline-block;\\n left: 0;\\n opacity: 0;\\n pointer-events: none;\\n position: absolute;\\n right: 0;\\n top: 0;\\n transition: background-color 0.218s, border 0.218s, box-shadow 0.218s;\\n }\\n#spch.spch .spchc .inner-container .button-container .button .microphone {\\n background-position: 0 -24px;\\n width: 41px;\\n height: 41px;\\n left: 27px;\\n pointer-events: none;\\n position: absolute;\\n top: 27px;\\n transform: scale(1);\\n }\\n#spch.spch .spchc .inner-container .button-container.listening .ripple {\\n position: absolute;\\n width: 136px;\\n height: 136px;\\n z-index: -1;\\n left: 50%;\\n top: 50%;\\n opacity: 0;\\n margin: -70px 0 0 -70px;\\n border-radius: 100px;\\n -webkit-animation: ripple 3.3s infinite;\\n animation: ripple 3.3s infinite;\\n background-color: #fff !important;\\n border: 2px solid #e0e4e9;\\n }\\n#spch.spch .spchc .inner-container .button-container.listening .ripple:nth-child(2) {\\n -webkit-animation-delay: 1.1s;\\n animation-delay: 1.1s;\\n }\\n#spch.spch .spchc .inner-container .button-container.listening .ripple:nth-child(3) {\\n -webkit-animation-delay: 2.2s;\\n animation-delay: 2.2s;\\n }\\n#spch.spch .spchc .inner-container .button-container.speaking .button {\\n background-color: #0f69ff;\\n }\\n#spch.spch .spchc .inner-container .button-container.speaking .button .microphone {\\n background-position: 0 -65px;\\n width: 40px;\\n height: 40px;\\n pointer-events: none;\\n position: absolute;\\n transform: scale(1);\\n }\\n#spch.spch .spchc .inner-container .button-container.speaking .ripple {\\n background-size: 114px;\\n position: absolute;\\n width: 114px;\\n height: 114px;\\n z-index: -1;\\n left: 50%;\\n top: 50%;\\n margin: -57px 0 0 -57px;\\n -webkit-animation: speakingRipple1 2s infinite;\\n animation: speakingRipple1 2s infinite;\\n }\\n#spch.spch .spchc .inner-container .button-container.speaking .ripple:nth-child(2) {\\n background-size: 123px;\\n width: 123px;\\n height: 123px;\\n margin: -62px 0 0 -62px;\\n -webkit-animation: speakingRipple2 2s infinite;\\n animation: speakingRipple2 2s infinite;\\n }\\n#spch.spch .spchc .inner-container .button-container.speaking .ripple:nth-child(3) {\\n background-size: 136px;\\n width: 136px;\\n height: 136px;\\n margin: -68px 0 0 -68px;\\n -webkit-animation: speakingRipple3 2s infinite;\\n animation: speakingRipple3 2s infinite;\\n }\\n#spch.spch .spcho {\\n background-image: linear-gradient(to bottom, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 99%);\\n display: block;\\n min-width: 100%;\\n text-align: center;\\n top: 145px;\\n padding-bottom: 71px;\\n pointer-events: auto;\\n }\\n#spch.spch .spcho #spch-trending {\\n -webkit-animation: fadeIn 1s forwards;\\n animation: fadeIn 1s forwards;\\n opacity: 0;\\n }\\n#spch.spch .spcho #spch-trending .trending {\\n color: #6e7780;\\n display: inline-block;\\n font-size: 16px;\\n }\\n#spch.spch .spcho #spch-trending #trending-label {\\n font-weight: bold;\\n margin: 5px 5px;\\n }\\n#spch.spch .spcho #spch-trending.hide {\\n display: none;\\n }\\n#spch.spch.s2tb .spchc, #spch.spch.s2tb-h .spchc {\\n background: #fff;\\n box-sizing: border-box;\\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);\\n height: auto;\\n margin: 0;\\n min-width: 100%;\\n overflow: hidden;\\n padding: 24px 115px;\\n }\\n#spch.spch.s2tb .spchc .inner-container, #spch.spch.s2tb-h .spchc .inner-container {\\n opacity: 1;\\n transition: opacity 0.318s ease-in;\\n }\\n#spch.spch.s2tb .spchc .inner-container .text-container, #spch.spch.s2tb-h .spchc .inner-container .text-container {\\n position: relative;\\n }\\n#spch.spch.s2tb {\\n background: rgba(255, 255, 255, 0);\\n opacity: 1;\\n visibility: visible;\\n transition-delay: 0s;\\n }\\n#spch.spch.s2tb .spchc .inner-container .button-container {\\n transform: scale(1);\\n height: 97px;\\n right: 0;\\n top: 0;\\n width: 97px;\\n }\\n#spch.spch.s2tb .spchc .inner-container .button-container .button {\\n opacity: 1;\\n pointer-events: auto;\\n position: absolute;\\n transform: scale(1);\\n transition-delay: 0;\\n }\\n#spch.spch.s2tb .spchc .inner-container .text-container .spcht {\\n font-size: 24px;\\n margin-left: 0;\\n opacity: 1;\\n transition: opacity 0.5s ease-out, margin-left 0.5s ease-out;\\n }\\n#spch.spch.s2tb #spch-overlay {\\n -webkit-backdrop-filter: blur(10px);\\n backdrop-filter: blur(10px);\\n background-color: #fff;\\n height: 100%;\\n opacity: 0.9;\\n position: absolute;\\n top: 149px;\\n\\n /* spchc\'s height */\\n width: 100%;\\n }\\n#spch.spch.disable-blur-overlay #spch-overlay {\\n background-color: transparent;\\n -webkit-backdrop-filter: none;\\n backdrop-filter: none;\\n }\\n#spch.spch.disable-blur-overlay .spcho {\\n height: 27px;\\n padding-bottom: 20px;\\n background: #fff;\\n background-image: none;\\n box-shadow: 0 8px 6px -6px rgb(0 0 0 / 20%);\\n }\\n#spch.spch.s2tb-h {\\n background: rgba(255, 255, 255, 0);\\n opacity: 0;\\n visibility: hidden;\\n }\\n\\n@-webkit-keyframes fadeIn {\\n 0% {\\n opacity: 0;\\n }\\n\\n 100% {\\n opacity: 1;\\n }\\n}\\n\\n@keyframes fadeIn {\\n 0% {\\n opacity: 0;\\n }\\n\\n 100% {\\n opacity: 1;\\n }\\n}\\n\\n@-webkit-keyframes ripple {\\n 0% {\\n opacity: 1;\\n transform: scale(0.7);\\n }\\n\\n 100% {\\n opacity: 0;\\n transform: scale(1);\\n }\\n}\\n\\n@keyframes ripple {\\n 0% {\\n opacity: 1;\\n transform: scale(0.7);\\n }\\n\\n 100% {\\n opacity: 0;\\n transform: scale(1);\\n }\\n}\\n\\n@-webkit-keyframes speakingRipple1 {\\n 0%,\\n 100% {\\n background-image: url(\\"https://s.yimg.com/pv/static/img/ripple1-1-202105260611.png\\");\\n }\\n\\n 25%,\\n 75% {\\n background-image: url(\\"https://s.yimg.com/pv/static/img/ripple1-2-202105260611.png\\");\\n transform: scale(1.1);\\n }\\n\\n 50% {\\n background-image: url(\\"https://s.yimg.com/pv/static/img/ripple1-3-202105260611.png\\");\\n transform: scale(0.9);\\n }\\n}\\n\\n@keyframes speakingRipple1 {\\n 0%,\\n 100% {\\n background-image: url(\\"https://s.yimg.com/pv/static/img/ripple1-1-202105260611.png\\");\\n }\\n\\n 25%,\\n 75% {\\n background-image: url(\\"https://s.yimg.com/pv/static/img/ripple1-2-202105260611.png\\");\\n transform: scale(1.1);\\n }\\n\\n 50% {\\n background-image: url(\\"https://s.yimg.com/pv/static/img/ripple1-3-202105260611.png\\");\\n transform: scale(0.9);\\n }\\n}\\n\\n@-webkit-keyframes speakingRipple2 {\\n 0%,\\n 100% {\\n background-image: none;\\n }\\n\\n 25%,\\n 75% {\\n background-image: url(\\"https://s.yimg.com/pv/static/img/ripple2-2-202105260611.png\\");\\n transform: scale(1.1);\\n }\\n\\n 50% {\\n background-image: url(\\"https://s.yimg.com/pv/static/img/ripple2-3-202105260611.png\\");\\n transform: scale(0.9);\\n }\\n}\\n\\n@keyframes speakingRipple2 {\\n 0%,\\n 100% {\\n background-image: none;\\n }\\n\\n 25%,\\n 75% {\\n background-image: url(\\"https://s.yimg.com/pv/static/img/ripple2-2-202105260611.png\\");\\n transform: scale(1.1);\\n }\\n\\n 50% {\\n background-image: url(\\"https://s.yimg.com/pv/static/img/ripple2-3-202105260611.png\\");\\n transform: scale(0.9);\\n }\\n}\\n\\n@-webkit-keyframes speakingRipple3 {\\n 0%,\\n 25%,\\n 75%,\\n 100% {\\n background-image: none;\\n }\\n\\n 50% {\\n background-image: url(\\"https://s.yimg.com/pv/static/img/ripple3-3-202105260611.png\\");\\n transform: scale(0.9);\\n }\\n}\\n\\n@keyframes speakingRipple3 {\\n 0%,\\n 25%,\\n 75%,\\n 100% {\\n background-image: none;\\n }\\n\\n 50% {\\n background-image: url(\\"https://s.yimg.com/pv/static/img/ripple3-3-202105260611.png\\");\\n transform: scale(0.9);\\n }\\n}\\n", ""]);\n// Exports\n/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://@vzmi/voicejs/./src/index.css?./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js')},"./node_modules/css-loader/dist/runtime/api.js":/*!*****************************************************!*\ !*** ./node_modules/css-loader/dist/runtime/api.js ***! \*****************************************************/function(module){eval('\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item);\n\n if (item[2]) {\n return "@media ".concat(item[2], " {").concat(content, "}");\n }\n\n return content;\n }).join("");\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === "string") {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, ""]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = "".concat(mediaQuery, " and ").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\n//# sourceURL=webpack://@vzmi/voicejs/./node_modules/css-loader/dist/runtime/api.js?')},"./src/index.css":/*!***********************!*\ !*** ./src/index.css ***! \***********************/function(module,__unused_webpack_exports,__webpack_require__){eval('var api = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");\n var content = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!../node_modules/postcss-loader/dist/cjs.js!./index.css */ "./node_modules/css-loader/dist/cjs.js!./node_modules/postcss-loader/dist/cjs.js!./src/index.css");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === \'string\') {\n content = [[module.id, content, \'\']];\n }\n\nvar options = {};\n\noptions.insert = "head";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};\n\n//# sourceURL=webpack://@vzmi/voicejs/./src/index.css?')},"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":/*!****************************************************************************!*\ !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! \****************************************************************************/function(module,__unused_webpack_exports,__webpack_require__){eval("\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = true ? __webpack_require__.nc : 0;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of

    FAQs

    Which smartphone is best for battery life? ›

    Best phone battery life at a glance (hours:minutes)
    • Asus ROG Phone 6 Pro: 15:30.
    • iPhone 14 Pro Max: 13:39.
    • Nubia RedMagic 6: 13:20.
    • Moto G Power (2022): 13:15.
    • Asus Zenfone 9: 13:13 (tie)
    • Nubia RedMagic 6S Pro: 13:13 (tie)
    • Moto G Stylus (2022): 12:30.
    • iPhone 13 Pro Max: 12:16.
    3 Nov 2022

    Which Samsung phone has longest battery life? ›

    On top of how feature-rich it is, the Samsung Galaxy S21 Ultra has the best battery life in its class. In fact, the Galaxy S21 Ultra is the phone with the one of the biggest batteries in mainstream flagships right now at 5,000 mAh capacity.

    How long can the longest phone battery last? ›

    Lasting over 30 hours in our battery test, the Galaxy M31 beat the Lenovo P2 by more than 90 minutes under the same conditions, making it the first phone we can recommend with a proper two-day battery life, and then some.

    How can I make my phone battery last longer all day? ›

    Choose settings that use less battery
    1. Let your screen turn off sooner.
    2. Reduce screen brightness.
    3. Set the brightness to change automatically.
    4. Turn off keyboard sounds or vibrations.
    5. Restrict apps with high battery use.
    6. Turn on adaptive battery.
    7. Delete unused accounts.
    8. Turn on dark theme.

    Which smartphone has the longest life? ›

    Smartphones with the longest battery life
    PhoneBattery life score (%)
    Realme 7 Pro (128GB)94
    Realme 6 (128GB)92
    Realme 7 (5G, 128GB)92
    Samsung Galaxy A7191
    2 more rows
    20 Apr 2021

    Which Android version is best for battery life? ›

    1. Samsung Galaxy S22 Plus
    • ROG Phone 6 specs:
    • ROG Phone 6 Pro specs:
    • Redmi Note 11 specs.
    • OnePlus 10 Pro specs:
    • Motorola Edge Plus (2022) specs:
    • Motorola Moto G Power (2022) specs:
    • Samsung Galaxy A53 specs.
    • Oppo Find X5 Pro specs:
    5 Sept 2022

    Which battery type has the longest life? ›

    Mastervolt Lithium Ion batteries have a lifespan of more than 2000 cycles, which is three times longer than most standard lead-acid batteries. They have an extremely long lifespan due to aspects such as the battery management, very low self-discharge, the lack of memory effect and a discharge of up 20 %.

    What drains Samsung battery? ›

    Here are some of the most common ones: There are too many push notifications and alerts draining the battery. There are too many apps running location services. There are too many apps running in the background.

    Can a smartphone last 10 years? ›

    The stock answer that most smartphone companies will give you is 2-3 years. That goes for iPhones, Androids, or any of the other varieties of devices that are on the market. What is this? The reason that's the most common response is that toward the end of its usable life, a smartphone will begin to slow down.

    How many years can a smartphone last? ›

    The average life of a smartphone

    The Consumentenbond estimates the average lifespan at 2.5 years. Other sources indicate that a new smartphone will last 15 to 18 months. The lifespan of your smartphone depends on how you handle your device.

    How many years should you replace your phone battery? ›

    Cell phone batteries only last between one to two years, which equates to approximately 300 to 500 charging cycles. If the phone battery is older than two years, it should be replaced.

    Which phone has the highest battery capacity in the world? ›

    Oukitel Flagship WP19 World's Largest Battery.

    Which apps drain the most battery? ›

    The top 10 common battery-draining apps
    • Facebook.
    • Facebook Messenger.
    • Instagram.
    • Snapchat.
    • Fitbit.
    12 Sept 2022

    What app can make your battery last longer? ›

    If you need your mobile phone to run smoothly and be energized for longer durations, the Greenify app is for you. Greenify was Featured as Lifehacker's Top 1 Utility Best Android app for the year. The way Greenify works is that it hibernates the apps that are constantly running in the background and consuming battery.

    Does charging overnight damage battery? ›

    Charging your phone overnight occasionally probably won't make a noticeable difference in the battery life for years to come, but if you do it every night consistently, you will probably notice your battery performance degrading over time.

    Which phones last the longest years? ›

    Here is a breakdown of the average mobile life according to the different brands:
    • iPhone - four to eight years.
    • Samsung - three to six years.
    • Huawei - two to four years.
    • Xiaomi - two to four years.
    • Oppo - two to three years.
    22 Jun 2022

    Which lasts longer Apple or Samsung? ›

    Although Samsung now offers four years of major Android updates for its flagships and mid-range phones, iPhones can easily last for five to six years. However, there's one important caveat to this. Smartphone batteries are made of lithium-ion which means they inevitably degrade over time.

    Which company phones have long life? ›

    Like OnePlus, Xiaomi smartphones also get up to three years of Android updates. The smartphones get Android security updates for up to four years consecutively, making them as long-lived as smartphones from competitor OnePlus.

    Is Android or Apple battery better? ›

    In terms of battery life, performance, and security iOS is simply superior in every way because the software is designed specifically for the hardware it's on, the iPhone is the only smartphone that has iOS.

    Which type of Android is best? ›

    Peeping the Pixel 7 Pro? See how it stacks up against the best Android phones
    • Samsung Galaxy S22 Ultra. Best Android phone overall. ...
    • Samsung Galaxy Z Fold 4. Best foldable Android phone. ...
    • Google Pixel 7 Pro. Best camera Android phone. ...
    • OnePlus 10T. Best fast-charging Android phone. ...
    • Google Pixel 6a. Best budget Android phone.
    26 Oct 2022

    Which version of Android is best? ›

    Android 11 is now the most popular version of the OS according to latest distribution numbers.

    Is there a forever battery? ›

    Emergence of the Forever Battery

    You take the liquid electrolyte solution in conventional batteries and compress it into a solid. That creates a hyper-compact solid battery. And since it has zero wasted space and theoretically infinite energy density, it lasts far longer and charges far faster.

    Which brand of battery is the best? ›

    The best AA batteries you can buy in 2022
    1. Energizer Ultimate Lithium: The longest-lasting AA battery. ...
    2. Amazon Basics Performance Alkaline: The best budget battery. ...
    3. Energizer Alkaline Power: The best everyday battery. ...
    4. Duracell Optimum: The best Alkalines for high-drain devices. ...
    5. Duracell Plus: A great all-rounder.
    12 Oct 2022

    Which 2022 battery lasts longest? ›

    Duracell AAA Battery – Best Shelf Life

    The batteries are long-lasting in terms of shelf life with 10 years of storage, and they can last pretty long when used in devices, too.

    What is killing my battery? ›

    Check which apps are draining your battery

    In most versions of Android, hit Settings > Device > Battery or Settings > Power > Battery Use to see a list of all apps and how much battery power they're using. (In Android 9, it's Settings > Battery > More > Battery Usage.)

    Why is my Samsung dying so fast? ›

    The more unused apps there are running in the background, the more power your battery will use. Background usage limits can be set to reduce battery consumption.

    Can Samsung battery be replaced? ›

    or any other battery-related issues, visit the nearest service centre to have your device checked. Depending on your device's warranty, you may qualify for a free replacement*. We may notify you through a device pop-up message that your battery requires replacement.

    When should I replace my phone? ›

    Nonetheless, replacing your device every two years is still a good idea. Even if the phone functions well, the hardware and operating system are antiquated by the time the phone is two years old.

    How often should I replace my phone? ›

    Upgrading Your Phone Every Three Years

    Most people upgrade their phones every two to three years. By then, the battery starts to become bothersome and Android phones stop receiving updates. It's also usually enough time for tech companies to introduce some new features you might want on your next phone.

    When should I change my phone? ›

    Usually you should change your mobile phone after every 2 to 3 years. Because after 2 years the phone starts processing slowly full stop you will find that it takes longer to open an application to do a particular work. Sometimes it hangs or simply restarts itself.

    Is my phone too old? ›

    A good rule of thumb is that a phone will no longer be supported if it's two to three years old. This varies from company to company, however. Google's older Pixel phones typically got three years of software updates, but it upped that to five years of guaranteed updates with the latest Pixel 6 and 6 Pro.

    How many years should I keep my phone? ›

    From physical durability to a smooth operating system, a phone can reach its peak usage anywhere between two and three years. After this, and sometimes before, users consider the switch to a new model.

    What is the difference between a smartphone and an Android phone? ›

    Android vs Smartphones

    Well smartphones are a classification of phones that have advanced capabilities beyond the call and messaging features that we've come to expect. On the other hand, Android is not a specific type of phone but an operating system that is used mainly in smartphones.

    Is it cheaper to get a new phone or replace the battery? ›

    Cost Efficiency

    Smartphones are more expensive than ever before and as tempting as it is to simply purchase a new phone when your old phone's battery is giving out, it will likely be a far more expensive purchase than a basic battery replacement.

    How much does it cost to replace a smartphone battery? ›

    A cellphone battery replacement will likely run you between $50 to $100 from an official service center, including labor and taxes.

    How much does it cost to replace a phone battery? ›

    Prices on Android battery repairs can vary, but usually are around or below $100, but you might need to call in to get an estimate.

    What is the strongest smartphone in the world? ›

    The AnTuTu list for July 2022 now shows the Asus ROG Phone 6 sitting at the top spot with a score of 11,14,647, which gives it a commanding lead over the Snapdragon 8 Gen 1 smartphones. Note that this tested unit has 18GB RAM and 512GB storage.

    Which mobile is strongest mobile? ›

    India Gadgets - Ulefone Power Armor 18T 5G Rugged Android 12 Phone: 12Gb + 256Gb: 108MP + Thermal Camera: 6.58" FHD+: 9600mAh Battery with 66W Super Fast Charging (Phone Only)

    Which phone has better battery life Samsung or iPhone? ›

    Samsung may not match Apple's software-based battery optimization, but it makes up for it by jamming absolutely massive batteries in its phones — and that works too. In fact, among the current generation, Samsung phones on average come out ahead of their iPhone counterparts unless you disable 5G on Apple's phones.

    Does deleting apps save battery? ›

    In the last week or so, both Apple and Google have confirmed that closing your apps does absolutely nothing to improve your battery life. In fact, says Hiroshi Lockheimer, the VP of Engineering for Android, it might make things worse.

    Does fast charging hurt battery life? ›

    You'd think with all that extra power there could be a risk to your battery. From our findings though, fast charging doesn't cause any more damage to your phone than standard charging. It will get hotter, but not at extreme enough levels that would cause noticeable harm.

    How many times should you charge your phone in a day? ›

    How often you charge will affect the battery life, for better or worse. In short, the more often you top up your battery, the better. To REALLY minimize battery degradation, top up for every 10% drop in battery level. And keep your battery level as close to the middle (50%) as possible.

    Does battery saver really work? ›

    But do battery-saving apps really work? Yes, they do. With a combination of techniques to optimize a smartphone battery's usage and reliable battery-saving apps, your phone can definitely keep up with your busy lifestyle.

    Does dark mode save battery? ›

    However, if your phone's always at 100% brightness, the dark mode will save you around 39% to 47% of your battery.

    Should I drain my phone battery once a month? ›

    Or juice it up before a night out, rather than waiting for the battery to run critically low. Having said that, experts recommend charging the battery from zero to 100 per cent about once a month. This will reset your phone, and help it run quicker as well.

    At what percentage should I charge my phone? ›

    Most Smartphones have a lithium-ion battery that lives longer when charged regularly. Unlike the nickel batteries used in older phones, lithium-ion batteries do best when kept above a 50 percent charge. Repeatedly allowing the battery to drain fully may shorten its life and decrease its overall capacity.

    What happens if you leave a battery charging for too long? ›

    Overcharging a battery causes excessive gassing — the electrolyte gets hot and both hydrogen and oxygen gas are generated. On older vented batteries, the electrolyte could cook away, leaving the plates exposed and ruining them. On sealed batteries, the buildup of gases could cause the battery to burst.

    How long does Samsung S22 Ultra battery last? ›

    The premium flagship offers 5,000 mAh of capacity, which is exactly as much as the Galaxy S21 Ultra offered. During our light browsing test—which is most indicative of casual use—the Ultra lasted just over 13 hours.

    How long does Samsung S21 battery last? ›

    It is powered by a 4000mAh battery; has a 25W fast charge feature, a 15W wireless fast charge and a 4.5W reverse charge option included. Through the ViserMark testing protocol, the Samsung Galaxy S21 battery lasted almost 37 hours with a display refreshing rate of 120 Hz and 38.5 hours with 60Hz.

    How long do Samsung Galaxy batteries last? ›

    Samsung's line of Galaxy phones can last anywhere between 11 and 13 hours, depending on the model.

    Which Samsung phone model is best? ›

    The best Samsung smartphones to buy
    • Samsung Galaxy S22 Ultra: The very best for flagship lovers. ...
    • Samsung Galaxy A21s: The best budget Samsung phone. ...
    • Samsung Galaxy Z Fold 4: The best foldable worth buying. ...
    • Samsung Galaxy S21 FE: Fan-tastic value. ...
    • Samsung Galaxy A53 5G: Samsung's best-value sm.
    5 days ago

    Why is my new Samsung Galaxy S22 battery draining so fast? ›

    Turn On Auto-Brightness Feature:

    This is also the main reason why your Samsung S22 Ultra battery might be draining faster. To prevent this loss of battery, we recommend you enable the auto-brightness feature on your phone.

    Does Samsung S22 have battery issues? ›

    But on longer and busier days spent in the office, the battery can dip down to the 30s or 40s by around 9 p.m. with those same settings. Increasing the screen's refresh rate and activating always-on display mode -- features that make the Galaxy S22 feel faster and more convenient -- drains the battery faster.

    Is S22 worth buying? ›

    Both these phones are genuinely premium and are good to use. The larger S22+ can be a bit slippery at times, but the S22 feels reliable to use. It is also ideal for one-hand use. The Galaxy S22 comes as a surprise because of its refreshing form factor.

    Is Samsung S21 still good in 2022? ›

    Yes, Samsung's Galaxy S21 series remains a good buy in 2022. The design is similar to that of the Galaxy S22 series, and the Snapdragon 888 processor still offers excellent performance. You also get larger battery capacities on the Galaxy S21 series.

    Is the S22 better than the S21? ›

    The Galaxy S22 has a number of advantages: it has a faster chip, an improved camera system and its back is not plastic like the Galaxy S21. But at the same time, it is a slightly smaller phone, and while many people will appreciate this, it also means that it comes with a smaller battery size.

    Why is my Samsung S21 battery draining so fast? ›

    The more unused apps there are running in the background, the more power your battery will use. Background usage limits can be set to reduce battery consumption.

    How much does it cost to replace a galaxy S8 battery? ›

    Samsung Galaxy S battery replacement cost
    Battery Replacement Cost (Swappa Repair Network)Phone Replacement Cost (Swappa Marketplace)
    Galaxy S9 Plus$73Starting around $123
    Galaxy S8$72Starting around $103
    Galaxy S8 Plus$72Starting around $118
    Pricing current as of October 3, 2022
    13 more rows
    3 Oct 2022

    How many years should a Samsung phone last? ›

    Samsung - three to six years.

    How much does Samsung charge to replace battery? ›

    How much does Samsung Galaxy battery replacement cost?
    SERVICEBATTERY REPLACEMENT PRICE
    Samsung Premium Care$99
    Batteries + Bulbs$70
    iResQ$39 – $89
    i Fix Your i$39 – $100
    1 more row

    Which series is best in Samsung A or M or S? ›

    Although the Samsung M series lineup is budget-oriented, its brand trust still comes with Samsung's brand. However, the Samsung A series Smartphone is Samsung's old lineup known for its premium touch features and build quality. In addition, those who want to buy a superior Samsung should go with the A-series.

    Which Samsung Series is best A or S? ›

    After all, that's where all the bleeding-edge innovation happens. However, for the average buyer who wants a well-rounded smartphone experience, Samsung's mid-range Galaxy A series offers far better value than its flagship Galaxy S series.

    Which Android phone is best in everything? ›

    OUR TOP TESTED PRODUCTS
    • Samsung Galaxy S22+ 128GB Unlocked Phone (Phantom Black) Best Android Flagship. ...
    • Google Pixel 7. Best Software Experience. ...
    • Google Pixel 7 Pro. Best High-End Pixel Phone. ...
    • Google Pixel 6a. Best Affordable Pixel Phone. ...
    • Samsung Galaxy Z Fold 4. Best Foldable Phone. ...
    • Moto G Power (2022) ...
    • Moto G Pure. ...
    • OnePlus 10T.

    Videos

    1. Does overcharging hurt your phone?
    (The Verge)
    2. Samsung S22 Ultra vs S21 / iPhone 13 Pro Max / Pixel 6 Pro / Xiaomi 12 Pro Battery Life Drain Test!
    (Mrwhosetheboss)
    3. The Top 10 Best Smartphones For 2022
    (Things 2 Know)
    4. Apple Watch Ultra vs Garmin fenix 7X (Day in the Life)
    (Shervin Shares)
    5. iPhone Charging - Best Practices To Get Long Battery Life
    (zollotech)
    6. How to stop iPhone battery health going down!
    (DS TecKnowledge)
    Top Articles
    Latest Posts
    Article information

    Author: Pres. Carey Rath

    Last Updated: 01/25/2023

    Views: 6485

    Rating: 4 / 5 (61 voted)

    Reviews: 84% of readers found this page helpful

    Author information

    Name: Pres. Carey Rath

    Birthday: 1997-03-06

    Address: 14955 Ledner Trail, East Rodrickfort, NE 85127-8369

    Phone: +18682428114917

    Job: National Technology Representative

    Hobby: Sand art, Drama, Web surfing, Cycling, Brazilian jiu-jitsu, Leather crafting, Creative writing

    Introduction: My name is Pres. Carey Rath, I am a faithful, funny, vast, joyous, lively, brave, glamorous person who loves writing and wants to share my knowledge and understanding with you.