As mentioned in a comment, you can't use firls
directly because this function only designs real-valued filters with (conjugate) symmetrical frequency responses. Your specification can only be met by a complex-valued filter because the frequency domain specification is not symmetrical.
In principle, you could use firls
to design the real part and the imaginary part of the impulse response separately (by using the even and odd parts, respectively, of the frequency domain specification as the desired responses), but in that case you would get discontinuous desired responses, which would result in large approximation errors.
A better and simpler approach is to set up an overdetermined system of complex linear equations and use Matlab/Octave to solve them in a least squares sense. This is very straightforward if you use matrix commands:
N = 51; % desired filter length
% frequency grid, desired frequency response, weighting function
f = [linspace(-1,-.18,164),linspace(-.1,.3,80),linspace(.38,1,124)];
d = [zeros(1,164),ones(1,80),zeros(1,124)].*exp(-1i*pi*f*(N-1)/2);
w = [2*ones(1,164),ones(1,80),2*ones(1,124)];
f = f(:); d = d(:); w = w(:);
% set up and solve overdetermined linear system
A = w(:,ones(1,N)) .* exp(-1i*pi*f*(0:N-1) );
h = A \ (w.*d);
The resulting filter is complex-valued and has a linear phase response, i.e., the real part of the impulse response is even, and the imaginary part is odd (see figure):
You can further decrease the approximation error by chosing a larger filter length.
I also have a corresponding Matlab/Octave function on GitHub: cfirls.m.