From 13c532b7af56d8391aa668a8fd356a0d0e11b9d5 Mon Sep 17 00:00:00 2001 From: Dharmang Soni Date: Wed, 18 Jun 2014 16:29:28 +0530 Subject: [PATCH] [ADD] added preloader while application going to connect with odoo server --- res/layout/activity_main.xml | 8 +++- res/layout/application_preloader.xml | 28 ++++++++++++ src/com/odoo/App.java | 31 +++++++++----- src/com/odoo/MainActivity.java | 61 ++++++++++++++++++++++++++- src/com/odoo/util/OdooTaskWaiter.java | 7 +++ 5 files changed, 122 insertions(+), 13 deletions(-) create mode 100644 res/layout/application_preloader.xml create mode 100644 src/com/odoo/util/OdooTaskWaiter.java diff --git a/res/layout/activity_main.xml b/res/layout/activity_main.xml index b375bb33..60da11c0 100644 --- a/res/layout/activity_main.xml +++ b/res/layout/activity_main.xml @@ -8,7 +8,13 @@ android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#ffffff" /> + android:background="#ffffff" > + + + + + + + + + + + + \ No newline at end of file diff --git a/src/com/odoo/App.java b/src/com/odoo/App.java index 867edcb8..e20c2288 100644 --- a/src/com/odoo/App.java +++ b/src/com/odoo/App.java @@ -18,14 +18,14 @@ */ package com.odoo; +import com.odoo.support.OEUser; + import odoo.Odoo; import android.app.Application; import android.util.Log; -import com.odoo.auth.OdooAccountManager; -import com.odoo.support.OEUser; - -public class App extends Application { +public class App extends Application implements + MainActivity.OnOdooInstanceCreateListener { public static final String TAG = App.class.getSimpleName(); public static Odoo mOEInstance = null; @@ -34,28 +34,37 @@ public class App extends Application { public void onCreate() { Log.d(TAG, "App->onCreate()"); super.onCreate(); + } + + public Odoo createInstance() { + Odoo odoo = null; OEUser user = OEUser.current(getApplicationContext()); if (user != null) { try { - mOEInstance = new Odoo(user.getHost(), - user.isAllowSelfSignedSSL()); - mOEInstance.authenticate(user.getUsername(), - user.getPassword(), user.getDatabase()); + odoo = new Odoo(user.getHost(), user.isAllowSelfSignedSSL()); + odoo.authenticate(user.getUsername(), user.getPassword(), + user.getDatabase()); } catch (Exception e) { e.printStackTrace(); } } - if (!OdooAccountManager.isAnyUser(getApplicationContext())) { - mOEInstance = null; - } + return odoo; } public Odoo getOEInstance() { Log.d(TAG, "App->getOEInstance()"); + if (mOEInstance == null) { + mOEInstance = createInstance(); + } return mOEInstance; } public void setOEInstance(Odoo odoo) { mOEInstance = odoo; } + + @Override + public void onOdooInstanceCreated(Odoo odoo) { + setOEInstance(odoo); + } } diff --git a/src/com/odoo/MainActivity.java b/src/com/odoo/MainActivity.java index 80c7faa6..163b5ac3 100644 --- a/src/com/odoo/MainActivity.java +++ b/src/com/odoo/MainActivity.java @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.List; +import odoo.Odoo; import android.accounts.Account; import android.app.AlertDialog; import android.app.Dialog; @@ -34,6 +35,7 @@ import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Color; +import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.app.Fragment; @@ -63,6 +65,7 @@ import com.odoo.support.fragment.FragmentListener; import com.odoo.util.Base64Helper; import com.odoo.util.OEAppRater; +import com.odoo.util.OdooTaskWaiter; import com.odoo.util.OnBackButtonPressedListener; import com.odoo.util.PreferenceManager; import com.odoo.util.drawer.DrawerAdatper; @@ -75,7 +78,8 @@ * The Class MainActivity. */ public class MainActivity extends FragmentActivity implements - DrawerItem.DrawerItemClickListener, FragmentListener, DrawerListener { + DrawerItem.DrawerItemClickListener, FragmentListener, DrawerListener, + OdooTaskWaiter { public static final String TAG = "com.odoo.MainActivity"; public static final int RESULT_SETTINGS = 1; @@ -104,6 +108,8 @@ public enum SettingKeys { private OnBackButtonPressedListener backPressed = null; private boolean mTwoPane; + App mApp = null; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -111,6 +117,18 @@ protected void onCreate(Bundle savedInstanceState) { getActionBar().setIcon(R.drawable.ic_odoo_o); mContext = this; mFragment = getSupportFragmentManager(); + mApp = (App) getApplication(); + if (mApp.getOEInstance() == null && savedInstanceState == null) { + CreateOdooInstance odooInstance = new CreateOdooInstance( + savedInstanceState); + odooInstance.execute(); + } else { + onTaskDone(savedInstanceState); + } + } + + @Override + public void onTaskDone(Bundle savedInstanceState) { initTouchListener(); initDrawerControls(); if (findViewById(R.id.fragment_detail_container) != null) { @@ -779,4 +797,45 @@ public void restart() { public boolean isTwoPane() { return mTwoPane; } + + class CreateOdooInstance extends AsyncTask { + Bundle mSavedInstanceState = null; + App mApp = null; + + public CreateOdooInstance(Bundle savedInstanceState) { + mSavedInstanceState = savedInstanceState; + mApp = (App) getApplication(); + } + + @Override + protected void onPreExecute() { + super.onPreExecute(); + findViewById(R.id.application_loader).setVisibility(View.VISIBLE); + getActionBar().hide(); + } + + @Override + protected Odoo doInBackground(Void... params) { + try { + Thread.sleep(1500); + } catch (Exception e) { + e.printStackTrace(); + } + return mApp.createInstance(); + } + + @Override + protected void onPostExecute(Odoo result) { + super.onPostExecute(result); + findViewById(R.id.application_loader).setVisibility(View.GONE); + OnOdooInstanceCreateListener app = mApp; + app.onOdooInstanceCreated(result); + onTaskDone(mSavedInstanceState); + getActionBar().show(); + } + } + + public interface OnOdooInstanceCreateListener { + public void onOdooInstanceCreated(Odoo odoo); + } } diff --git a/src/com/odoo/util/OdooTaskWaiter.java b/src/com/odoo/util/OdooTaskWaiter.java new file mode 100644 index 00000000..36a3a84c --- /dev/null +++ b/src/com/odoo/util/OdooTaskWaiter.java @@ -0,0 +1,7 @@ +package com.odoo.util; + +import android.os.Bundle; + +public interface OdooTaskWaiter { + public void onTaskDone(Bundle savedInstance); +}