If $x_n \rightharpoonup x$ and $|x_n| \to |x|$, then $x_n \to x$ I'm trying to prove Prop 3.32 in Brezis's book of Functional Analysis.

Let $(E, | \cdot |)$ be a uniformly convex Banach space. Let $(x_n)$ be a sequence in $E$ that converges to $x\in E$ in the weak topology $\sigma(E, E')$ and that $\limsup_n |x_n| \le |x|$. Then $x_n \to x$ in norm topology.

Could you have a check on my attempt?
I posted my proof separately so that I can accept my own answer and thus remove my question from unanswered list. If other people post answers, I will happily accept theirs.
 A: Let denote weak convergence by $\rightharpoonup$ and norm convergence by $\to$. Let $B_E$ be the closed unit ball of $E$. Fix $\varepsilon>0$ and let $\delta$ be the modulus of uniform convexity, i.e., $\forall x,y\in B_E$,
$$
\left | \frac{x+y}{2} \right | > 1 - \delta \implies |x-y| < \varepsilon.
$$
Because $x_n \rightharpoonup x$, we get $|x| \le \liminf |x_n|$. It follows that $|x_n| \to |x|$. WLOG, we assume that $x,x_n \neq 0$ for all $n$. Let $y_n := x_n / |x_n|$ and $y := x/|x|$. Then $y,y_n \in B_E$ for all $n$. Because $x_n \rightharpoonup x$ and $|x_n| \to |x|$. Then $y_n \rightharpoonup y$ and thus $\frac{y_n+y}{2} \rightharpoonup y$. It follows that
$$
1 = |y| \le \liminf \left | \frac{y_n+y}{2} \right |.
$$
On the other hand,
$$
\limsup \left | \frac{y_n+y}{2} \right | \le \limsup \frac{|y_n| + |y|}{2}= 1.
$$
We need to prove $y_n \to y$. This is equivalent to find $N$ such that $\left | \frac{y_n+y}{2} \right | > 1 - \delta$ for all $n \ge N$. This is indeed true because $\left | \frac{y_n+y}{2} \right | \to 1$.
