diff --git a/MessengerProj/jni/Android.mk b/MessengerProj/jni/Android.mk index 1ccda4c3e..531fcef53 100644 --- a/MessengerProj/jni/Android.mk +++ b/MessengerProj/jni/Android.mk @@ -1613,6 +1613,7 @@ LOCAL_SRC_FILES += \ ./messenger-backend/src/mrjob.c \ ./messenger-backend/src/mrloginparam.c \ ./messenger-backend/src/mrmailbox.c \ +./messenger-backend/src/mrmailbox_configure.c \ ./messenger-backend/src/mrmailbox_log.c \ ./messenger-backend/src/mrmimeparser.c \ ./messenger-backend/src/mrmsg.c \ diff --git a/MessengerProj/jni/mrwrapper.c b/MessengerProj/jni/mrwrapper.c index d211c6b69..8fe537afd 100644 --- a/MessengerProj/jni/mrwrapper.c +++ b/MessengerProj/jni/mrwrapper.c @@ -247,33 +247,33 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getBlobdir(JNIEnv *env, jcla } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_MrMailboxConfigure(JNIEnv *env, jclass c, jlong hMailbox) +JNIEXPORT void Java_com_b44t_messenger_MrMailbox_configureAndConnect(JNIEnv *env, jclass cls) { - return mrmailbox_configure((mrmailbox_t*)hMailbox); + mrmailbox_configure_and_connect(get_mrmailbox_t(env, cls)); } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_MrMailboxIsConfigured(JNIEnv *env, jclass c, jlong hMailbox) +/*JNIEXPORT void Java_com_b44t_messenger_MrMailbox_configureCancel(JNIEnv *env, jclass cls) { - return (jint)mrmailbox_is_configured((mrmailbox_t*)hMailbox); + mrmailbox_configure_cancel(get_mrmailbox_t(env, cls)); +}*/ + + +JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_isConfigured(JNIEnv *env, jclass cls) +{ + return (jint)mrmailbox_is_configured(get_mrmailbox_t(env, cls)); } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_MrMailboxConnect(JNIEnv *env, jclass c, jlong hMailbox) +JNIEXPORT void Java_com_b44t_messenger_MrMailbox_connect(JNIEnv *env, jclass cls) { - return mrmailbox_connect((mrmailbox_t*)hMailbox); + mrmailbox_connect(get_mrmailbox_t(env, cls)); } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_MrMailboxDisconnect(JNIEnv *env, jclass c, jlong hMailbox) +JNIEXPORT void Java_com_b44t_messenger_MrMailbox_disconnect(JNIEnv *env, jclass cls) { - mrmailbox_disconnect((mrmailbox_t*)hMailbox); -} - - -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_MrMailboxFetch(JNIEnv *env, jclass c, jlong hMailbox) -{ - return mrmailbox_fetch((mrmailbox_t*)hMailbox); + mrmailbox_disconnect(get_mrmailbox_t(env, cls)); } @@ -456,22 +456,22 @@ JNIEXPORT void Java_com_b44t_messenger_MrMailbox_forwardMsgs(JNIEnv *env, jclass /* MrMailbox - handle config */ -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_MrMailboxSetConfig(JNIEnv *env, jclass c, jlong hMailbox, jstring key, jstring value) +JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_setConfig(JNIEnv *env, jclass cls, jstring key, jstring value) { CHAR_REF(key); CHAR_REF(value); - jint ret = (jint)mrmailbox_set_config((mrmailbox_t*)hMailbox, keyPtr, valuePtr); + jint ret = (jint)mrmailbox_set_config(get_mrmailbox_t(env, cls), keyPtr, valuePtr); CHAR_UNREF(key); CHAR_UNREF(value); return ret; } -JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_MrMailboxGetConfig(JNIEnv *env, jclass c, jlong hMailbox, jstring key, jstring def) +JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getConfig(JNIEnv *env, jclass cls, jstring key, jstring def) { CHAR_REF(key); CHAR_REF(def); - char* temp = mrmailbox_get_config((mrmailbox_t*)hMailbox, keyPtr, defPtr); + char* temp = mrmailbox_get_config(get_mrmailbox_t(env, cls), keyPtr, defPtr); jstring ret = JSTRING_NEW(temp); free(temp); CHAR_UNREF(key); @@ -480,10 +480,10 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_MrMailboxGetConfig(JNIEnv *e } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_MrMailboxGetConfigInt(JNIEnv *env, jclass c, jlong hMailbox, jstring key, jint def) +JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getConfigInt(JNIEnv *env, jclass cls, jstring key, jint def) { CHAR_REF(key); - jint ret = mrmailbox_get_config_int((mrmailbox_t*)hMailbox, keyPtr, def); + jint ret = mrmailbox_get_config_int(get_mrmailbox_t(env, cls), keyPtr, def); CHAR_UNREF(key); return ret; } diff --git a/MessengerProj/src/main/java/com/b44t/messenger/MrMailbox.java b/MessengerProj/src/main/java/com/b44t/messenger/MrMailbox.java index 03d099d76..57e56b788 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/MrMailbox.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/MrMailbox.java @@ -38,51 +38,23 @@ public class MrMailbox { public native static void close(); public native static String getBlobdir(); - public static int configure() { - return MrMailboxConfigure(m_hMailbox); - } + public native static void configureAndConnect(); + //public native static void configureCancel(); - public static int isConfigured() { - return MrMailboxIsConfigured(m_hMailbox); - } + public native static int isConfigured(); - public static int connect() { - return MrMailboxConnect(m_hMailbox); - } + public native static void connect(); + public native static void disconnect(); - public static void disconnect() { - MrMailboxDisconnect(m_hMailbox); - } - - public static int fetch() { - return MrMailboxFetch(m_hMailbox); - } - - public static int setConfig(String key, String value) { - return MrMailboxSetConfig(m_hMailbox, key, value); - } - - public static String getConfig(String key, String def) { - return MrMailboxGetConfig(m_hMailbox, key, def); - } - - public static int getConfigInt(String key, int def) { - return MrMailboxGetConfigInt(m_hMailbox, key, def); - } + public native static int setConfig(String key, String value); + public native static String getConfig(String key, String def); + public native static int getConfigInt(String key, int def); public native static String getInfo(); public native static String cmdline(String cmd); private static long m_hMailbox = 0; // do not rename this, is used in C-part - private native static long MrMailboxNew (); // returns hMailbox which must be unref'd after usage (Names as mrmailbox_new don't work due to the additional underscore) - private native static int MrMailboxConfigure (long hMailbox); - private native static int MrMailboxIsConfigured (long hMailbox); - private native static int MrMailboxConnect (long hMailbox); - private native static void MrMailboxDisconnect (long hMailbox); - private native static int MrMailboxFetch (long hMailbox); - private native static int MrMailboxSetConfig (long hMailbox, String key, String value); // value may be NULL - private native static String MrMailboxGetConfig (long hMailbox, String key, String def); // def may be NULL, returns empty string as NULL - private native static int MrMailboxGetConfigInt (long hMailbox, String key, int def); // def may be NULL, returns empty string as NULL + private native static long MrMailboxNew(); // returns hMailbox which must be unref'd after usage (Names as mrmailbox_new don't work due to the additional underscore) // contacts public native static int[] getKnownContacts(String query); @@ -194,7 +166,7 @@ public class MrMailbox { public final static int MR_EVENT_CONTACTS_CHANGED = 2030; - public final static int MR_EVENT_CONNECTION_STATE_CHANGED = 2040; + public final static int MR_EVENT_CONFIGURE_ENDED = 2040; public final static int MR_EVENT_IS_ONLINE = 2080; public final static int MR_EVENT_GET_STRING = 2091; @@ -208,11 +180,11 @@ public class MrMailbox { public static long MrCallback(final int event, final long data1, final long data2) // this function is called from within the C-wrapper { switch(event) { - case MR_EVENT_CONNECTION_STATE_CHANGED: + case MR_EVENT_CONFIGURE_ENDED: AndroidUtilities.runOnUIThread(new Runnable() { @Override public void run() { - NotificationCenter.getInstance().postNotificationName(NotificationCenter.connectionStateChanged, (int)data1); + NotificationCenter.getInstance().postNotificationName(NotificationCenter.configureEnded, (int)data1); } }); return 0; diff --git a/MessengerProj/src/main/java/com/b44t/messenger/NotificationCenter.java b/MessengerProj/src/main/java/com/b44t/messenger/NotificationCenter.java index d5127eecc..97b19edd6 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/NotificationCenter.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/NotificationCenter.java @@ -31,7 +31,7 @@ public class NotificationCenter { private static int totalEvents = 1; - public static final int connectionStateChanged = totalEvents++; + public static final int configureEnded = totalEvents++; public static final int didReceivedNewMessages = totalEvents++; public static final int updateInterfaces = totalEvents++; public static final int dialogsNeedReload = totalEvents++; diff --git a/MessengerProj/src/main/java/com/b44t/ui/AccountSettingsActivity.java b/MessengerProj/src/main/java/com/b44t/ui/AccountSettingsActivity.java index 1a399bae6..4f2ebbbe8 100644 --- a/MessengerProj/src/main/java/com/b44t/ui/AccountSettingsActivity.java +++ b/MessengerProj/src/main/java/com/b44t/ui/AccountSettingsActivity.java @@ -99,6 +99,7 @@ public class AccountSettingsActivity extends BaseFragment implements Notificatio // misc. private final int ID_DONE_BUTTON = 1; private ProgressDialog progressDialog = null; + private boolean progressCancelPressed; private boolean fromIntro; private boolean m_expanded = false; @@ -113,7 +114,7 @@ public class AccountSettingsActivity extends BaseFragment implements Notificatio public boolean onFragmentCreate() { super.onFragmentCreate(); - NotificationCenter.getInstance().addObserver(this, NotificationCenter.connectionStateChanged); + NotificationCenter.getInstance().addObserver(this, NotificationCenter.configureEnded); m_expanded = false; if( !MrMailbox.getConfig("mail_user", "").isEmpty() @@ -175,7 +176,7 @@ public class AccountSettingsActivity extends BaseFragment implements Notificatio @Override public void onFragmentDestroy() { super.onFragmentDestroy(); - NotificationCenter.getInstance().removeObserver(this, NotificationCenter.connectionStateChanged); + NotificationCenter.getInstance().removeObserver(this, NotificationCenter.configureEnded); } @Override @@ -295,6 +296,7 @@ public class AccountSettingsActivity extends BaseFragment implements Notificatio } // show dialog + progressCancelPressed = false; if( progressDialog!=null ) { progressDialog.dismiss(); progressDialog = null; @@ -304,34 +306,26 @@ public class AccountSettingsActivity extends BaseFragment implements Notificatio progressDialog.setMessage(ApplicationLoader.applicationContext.getString(R.string.OneMoment)); progressDialog.setCanceledOnTouchOutside(false); progressDialog.setCancelable(false); - progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, LocaleController.getString("Cancel", R.string.Cancel), new DialogInterface.OnClickListener() { + /*progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, LocaleController.getString("Cancel", R.string.Cancel), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - progressDialog = null; + progressCancelPressed = true; // force keeping the parent dialog + MrMailbox.configureCancel(); } - }); + });*/ progressDialog.show(); synchronized (MrMailbox.m_lastErrorLock) { MrMailbox.m_showNextErrorAsToast = false; } - // try to connect - // (for the future, we may put all this togehter in a single command, that is executed - // asynchronously by the backend; then we can skip creating a runnable here) - Utilities.searchQueue.postRunnable(new Runnable() { - @Override - public void run() { - MrMailbox.disconnect(); - MrMailbox.configure(); - MrMailbox.connect(); - } - }); + // try to connect, this results in an MR_EVENT_CONFIGURE_ENDED resp. NotificationCenter.configureEnded event + MrMailbox.configureAndConnect(); } @Override public void didReceivedNotification(int id, Object... args) { - if (id == NotificationCenter.connectionStateChanged ) + if (id == NotificationCenter.configureEnded ) { final String errorString; @@ -346,18 +340,20 @@ public class AccountSettingsActivity extends BaseFragment implements Notificatio } if( (int)args[0]==1 ) { - if( fromIntro ) { - presentFragment(new DialogsActivity(null), true); - LaunchActivity la = ((LaunchActivity)getParentActivity()); - if( la != null ) { - la.drawerLayoutContainer.setAllowOpenDrawer(true, false); + if(!progressCancelPressed) { + // close the dialog unless the user hits "cancel" + if (fromIntro) { + presentFragment(new DialogsActivity(null), true); + LaunchActivity la = ((LaunchActivity) getParentActivity()); + if (la != null) { + la.drawerLayoutContainer.setAllowOpenDrawer(true, false); + } + } else { + finishFragment(); } - } - else { - finishFragment(); + AndroidUtilities.showDoneHint(ApplicationLoader.applicationContext); } NotificationCenter.getInstance().postNotificationName(NotificationCenter.mainUserInfoChanged); - AndroidUtilities.showDoneHint(ApplicationLoader.applicationContext); } else { AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity());