package com.permissionnanny.lib;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.annotation.Nullable;
import com.permissionnanny.lib.request.PermissionReceiver;
import java.security.SecureRandom;
/**
* The root class of all requests.
*/
public class NannyRequest {
protected final String mClientAddr;
@Nullable private PermissionReceiver mReceiver;
@Nullable private Intent mPaylaod;
public NannyRequest() {
mClientAddr = Long.toString(new SecureRandom().nextLong());
}
protected NannyRequest addFilter(@Nullable Event event) {
if (event == null) {
return this;
}
if (mReceiver == null) {
mReceiver = new PermissionReceiver();
}
mReceiver.addFilter(event);
return this;
}
protected boolean hasReceiver() {
return mReceiver != null;
}
protected void setPayload(Intent payload) {
mPaylaod = payload;
}
protected void startRequest(Context context) {
if (!Nanny.isPermissionNannyInstalled(context)) {
if (mReceiver != null) {
mReceiver.onReceive(context, newNotFoundIntent());
}
return;
}
if (mPaylaod == null) {
throw new IllegalStateException("No payload.");
}
if (mReceiver != null) {
context.registerReceiver(mReceiver, new IntentFilter(mClientAddr));
}
context.sendBroadcast(mPaylaod);
}
protected void stop(Context context) {
if (mReceiver != null) {
context.unregisterReceiver(mReceiver);
}
}
private Intent newNotFoundIntent() {
return new Intent().putExtras(new NannyBundle.Builder()
.statusCode(Nanny.SC_NOT_FOUND)
.server(Nanny.AUTHORIZATION_SERVICE)
.error(new NannyException("Permission Nanny is not installed."))
.build());
}
}