package net.i2p.android.wizard.model;
import java.util.Locale;
import android.support.v4.app.Fragment;
import net.i2p.android.wizard.ui.I2PDestinationFragment;
import net.i2p.data.DataFormatException;
import net.i2p.data.Destination;
/**
* A page asking for an I2P Destination.
* This could be a B64, B32 or Addressbook domain.
*/
public class I2PDestinationPage extends SingleTextFieldPage {
private static final int BASE32_HASH_LENGTH = 52; // 1 + Hash.HASH_LENGTH * 8 / 5
private String mFeedback;
public I2PDestinationPage(ModelCallbacks callbacks, String title) {
super(callbacks, title);
}
@Override
public Fragment createFragment() {
return I2PDestinationFragment.create(getKey());
}
@Override
public boolean isValid() {
String data = mData.getString(SIMPLE_DATA_KEY);
if (data.toLowerCase(Locale.US).endsWith(".b32.i2p")) { /* B32 */
if (data.length() != BASE32_HASH_LENGTH + 8) {
mFeedback = "Invalid B32";
return false;
}
} else if (data.endsWith(".i2p")) { /* Domain */
// Valid
} else if (data.length() >= 516) { /* B64 */
try {
new Destination().fromBase64(data);
} catch (DataFormatException dfe) {
mFeedback = "Invalid B64";
return false;
}
} else {
mFeedback = "Not a valid I2P Destination";
return false;
}
mFeedback = "";
return true;
}
@Override
public boolean showFeedback() {
return true;
}
@Override
public String getFeedback() {
return mFeedback;
}
}