package ru.net.jimm; import android.app.Activity; import android.app.AlertDialog; import android.content.Intent; import android.net.Uri; import jimm.Jimm; import protocol.Contact; import protocol.Protocol; import protocol.xmpp.Xmpp; import protocol.xmpp.Jid; /** * Created with IntelliJ IDEA. * <p/> * Date: 30.12.12 3:15 * * @author vladimir */ public class OpenUriActivity extends Activity { public void onStart() { super.onStart(); Intent intent = getIntent(); if (Intent.ACTION_VIEW.equals(intent.getAction())) { final boolean delay = null == JimmActivity.getInstance(); final Uri uri = intent.getData(); startActivity(new Intent(this, JimmActivity.class)); new Thread(new Runnable() { @Override public void run() { if (delay) try { // has not started yet Thread.sleep(5000); } catch (Exception ignored) { } process(uri); } }).start(); } } public boolean process(Uri uri) { try { String path = uri.toString(); if (path.startsWith("xmpp")) { processXmpp(path.substring("xmpp:".length())); } return true; } catch (Throwable e) { return false; } } public void processXmpp(String path) { String jid = path; if (-1 < path.indexOf('?')) { jid = path.substring(0, path.indexOf('?')); } jimm.modules.DebugLog.println("open xmpp " + path + " " + jid); Xmpp xmpp = getFirstJabber(); if (null == xmpp) { alert(); return; } try { Contact c = xmpp.createTempContact(Jid.getBareJid(jid)); while (xmpp.isConnecting()) { try { Thread.sleep(2000); } catch (Exception ignored) { } } xmpp.addTempContact(c); Jimm.getJimm().getCL().activate(c); } catch (Exception e) { jimm.modules.DebugLog.panic("uri", e); } } private Xmpp getFirstJabber() { for (Protocol p : Jimm.getJimm().jimmModel.getProtocols()) { if (p instanceof Xmpp) return (Xmpp) p; } return null; } private void alert() { AlertDialog alertDialog = new AlertDialog.Builder(JimmActivity.getInstance()).create(); alertDialog.setTitle(getText(R.string.app_name)); alertDialog.setMessage(getText(R.string.xmppAccountDontFound)); alertDialog.show(); } }