Application-level energy management is emerging in the form of frameworks and languages that treat energy management as a first-class concern. One major advantage to this approach is that it helps programmers reason about the energy behaviors of their programs instead of viewing said behaviors as merely a side-effect of computation. We introduce Ent, a novel programming language that encourages proactive and adaptive mode-based energy management at the application level. The proactive model allows programmers to leverage knowledge of their application by characterizing the energy behaviors of different program fragments with modes. The adaptive model allows such characterization to be delayed until run time, useful for capturing dynamic program behaviors dependent on program states, configuration settings, and external battery levels or CPU temperatures. Our key insight is both models can be unified under a hybrid type system with static and dynamic typing. We have implemented Ent as an extension of Java; in addition, Ent ships with an auxiliary library for querying battery and temperature information, abstracting away tedious hardware communication for Ent programmers. Ent has been ported to two mobile-platforms: an Intel CPU laptop and the Raspberry Pi. Empirical studies show Ent may improve the programmability, debuggability, energy efficiency, and productivity of battery-aware and temperature-aware programs. Future work will focus on porting Ent to the Android platform.