package ru.ltst.u2020mvp.ui;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Typeface;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.text.style.StyleSpan;
import android.view.MenuItem;
import android.widget.TextView;
import java.lang.reflect.Field;
import java.util.Arrays;
import butterknife.Bind;
import butterknife.ButterKnife;
import ru.ltst.u2020mvp.R;
import ru.ltst.u2020mvp.ui.misc.Truss;
import ru.ltst.u2020mvp.util.Intents;
import timber.log.Timber;
public final class ExternalIntentActivity extends Activity implements Toolbar.OnMenuItemClickListener {
public static final String ACTION = "com.jakewharton.u2020.intent.EXTERNAL_INTENT";
public static final String EXTRA_BASE_INTENT = "debug_base_intent";
public static Intent createIntent(Intent baseIntent) {
Intent intent = new Intent();
intent.setAction(ACTION);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(EXTRA_BASE_INTENT, baseIntent);
return intent;
}
@Bind(R.id.toolbar) Toolbar toolbarView;
@Bind(R.id.action) TextView actionView;
@Bind(R.id.data) TextView dataView;
@Bind(R.id.extras) TextView extrasView;
@Bind(R.id.flags) TextView flagsView;
private Intent baseIntent;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.debug_external_intent_activity);
ButterKnife.bind(this);
toolbarView.inflateMenu(R.menu.debug_external_intent);
toolbarView.setOnMenuItemClickListener(this);
baseIntent = getIntent().getParcelableExtra(EXTRA_BASE_INTENT);
fillAction();
fillData();
fillExtras();
fillFlags();
}
@Override public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.debug_launch:
if (Intents.maybeStartActivity(this, baseIntent)) {
finish();
}
return true;
default:
return false;
}
}
private void fillAction() {
String action = baseIntent.getAction();
actionView.setText(action == null ? "None!" : action);
}
private void fillData() {
Uri data = baseIntent.getData();
dataView.setText(data == null ? "None!" : data.toString());
}
private void fillExtras() {
Bundle extras = baseIntent.getExtras();
if (extras == null) {
extrasView.setText("None!");
} else {
Truss truss = new Truss();
for (String key : extras.keySet()) {
Object value = extras.get(key);
String valueString;
if (value.getClass().isArray()) {
valueString = Arrays.toString((Object[]) value);
} else {
valueString = value.toString();
}
truss.pushSpan(new StyleSpan(Typeface.BOLD));
truss.append(key).append(":\n");
truss.popSpan();
truss.append(valueString).append("\n\n");
}
extrasView.setText(truss.build());
}
}
private void fillFlags() {
int flags = baseIntent.getFlags();
StringBuilder builder = new StringBuilder();
for (Field field : Intent.class.getDeclaredFields()) {
try {
if (field.getName().startsWith("FLAG_")
&& field.getType() == Integer.TYPE
&& (flags & field.getInt(null)) != 0) {
builder.append(field.getName()).append('\n');
}
} catch (IllegalAccessException e) {
Timber.e(e, "Couldn't read value for: %s", field.getName());
}
}
flagsView.setText(builder.length() == 0 ? "None!" : builder.toString());
}
}