/* * OpenERP, Open Source Management Solution * Copyright (C) 2012-today OpenERP SA (<http:www.openerp.com>) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http:www.gnu.org/licenses/> * */ package com.openerp.base.login; import java.util.List; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.ActionMode; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; import android.widget.Toast; import com.openerp.R; import com.openerp.auth.OpenERPAccountManager; import com.openerp.orm.OEHelper; import com.openerp.support.AppScope; import com.openerp.support.BaseFragment; import com.openerp.support.JSONDataHelper; import com.openerp.support.OEDialog; import com.openerp.support.OEUser; import com.openerp.support.fragment.FragmentListener; import com.openerp.util.controls.OEEditText; import com.openerp.util.drawer.DrawerItem; /** * The Class Login. */ public class Login extends BaseFragment { /** The item arr. */ String[] itemArr = null; /** The context. */ Context context = null; /** The m action mode. */ ActionMode mActionMode; /** The open erp server url. */ String openERPServerURL = ""; /** The edt server url. */ OEEditText edtServerUrl = null; /** The arguments. */ Bundle arguments = null; /** The db list spinner. */ Spinner dbListSpinner = null; /** The root view. */ View rootView = null; /** The login user a sync. */ LoginUser loginUserASync = null; /** The edt username. */ OEEditText edtUsername = null; /** The edt password. */ OEEditText edtPassword = null; /** The OpenERP Object */ OEHelper openerp = null; /* * (non-Javadoc) * * @see * android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, * android.view.ViewGroup, android.os.Bundle) */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setHasOptionsMenu(true); this.context = getActivity(); scope = new AppScope(this); // Inflate the layout for this fragment rootView = inflater.inflate(R.layout.fragment_login, container, false); dbListSpinner = (Spinner) rootView.findViewById(R.id.lstDatabases); this.handleArguments((Bundle) getArguments()); this.loadDatabaseList(); getActivity().setTitle("Login"); getActivity().getActionBar().setDisplayHomeAsUpEnabled(false); getActivity().getActionBar().setHomeButtonEnabled(false); edtUsername = (OEEditText) rootView.findViewById(R.id.edtUsername); edtPassword = (OEEditText) rootView.findViewById(R.id.edtPassword); edtPassword.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) { goNext(); } return false; } }); return rootView; } /* * (non-Javadoc) * * @see * com.openerp.support.FragmentHelper#handleArguments(android.os.Bundle) */ public void handleArguments(Bundle bundle) { arguments = bundle; if (arguments != null && arguments.size() > 0) { if (arguments.containsKey("openERPServerURL")) { openERPServerURL = arguments.getString("openERPServerURL"); } } } /** * Load database list. */ private void loadDatabaseList() { try { openerp = new OEHelper(context, openERPServerURL); List<String> dbList = new JSONDataHelper() .arrayToStringList(openerp.getDatabaseList()); dbList.add(0, getActivity().getString(R.string.login_select_database)); ArrayAdapter<String> dbAdapter = new ArrayAdapter<String>( getActivity(), R.layout.spinner_custom_layout, dbList); dbAdapter.setDropDownViewResource(R.layout.spinner_custom_layout); dbListSpinner.setAdapter(dbAdapter); } catch (Exception e) { e.printStackTrace(); } } /* * (non-Javadoc) * * @see * android.support.v4.app.Fragment#onCreateOptionsMenu(android.view.Menu, * android.view.MenuInflater) */ @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_fragment_login, menu); } /* * (non-Javadoc) * * @see * android.support.v4.app.Fragment#onOptionsItemSelected(android.view.MenuItem * ) */ @Override public boolean onOptionsItemSelected(MenuItem item) { // handle item selection switch (item.getItemId()) { case R.id.menu_login_account: Log.d("LoginFragment()->ActionBarMenuClicked", "menu_login_account"); goNext(); return true; default: return super.onOptionsItemSelected(item); } } private void goNext() { edtUsername.setError(null); edtPassword.setError(null); if (TextUtils.isEmpty(edtUsername.getText())) { edtUsername.setError("Provide Username"); } else if (TextUtils.isEmpty(edtPassword.getText())) { edtPassword.setError("Provide Password"); } else if (dbListSpinner.getSelectedItemPosition() == 0) { Toast.makeText(getActivity(), "Please select database", Toast.LENGTH_LONG).show(); } else { loginUserASync = new LoginUser(); loginUserASync.execute((Void) null); } } /** * The Class LoginUser. */ private class LoginUser extends AsyncTask<Void, Void, Boolean> { /** The pdialog. */ OEDialog pdialog; /** The error msg. */ String errorMsg = ""; /** The user data. */ OEUser userData = null; /* * (non-Javadoc) * * @see android.os.AsyncTask#onPreExecute() */ @Override protected void onPreExecute() { pdialog = new OEDialog(getActivity(), false, "Logging in..."); pdialog.show(); edtPassword.setError(null); } /* * (non-Javadoc) * * @see android.os.AsyncTask#doInBackground(Params[]) */ @Override protected Boolean doInBackground(Void... params) { try { // Simulate network access. Thread.sleep(2000); } catch (InterruptedException e) { return false; } if (openerp != null) { String userName = edtUsername.getText().toString(); String password = edtPassword.getText().toString(); String database = dbListSpinner.getSelectedItem().toString(); userData = openerp.login(userName, password, database, openERPServerURL); if (userData != null) { return true; } else { errorMsg = "Invalid Username or Password !"; return false; } } return false; } /* * (non-Javadoc) * * @see android.os.AsyncTask#onPostExecute(java.lang.Object) */ @Override protected void onPostExecute(final Boolean success) { if (success) { Log.d("Creating Account For Username :", userData.getAndroidName()); if (OpenERPAccountManager.fetchAllAccounts(getActivity()) != null) { if (OpenERPAccountManager.isAnyUser(getActivity())) { OpenERPAccountManager.logoutUser(getActivity(), OpenERPAccountManager .currentUser(getActivity()) .getAndroidName()); } } if (OpenERPAccountManager .createAccount(getActivity(), userData)) { loginUserASync.cancel(true); pdialog.hide(); SyncWizard syncWizard = new SyncWizard(); FragmentListener mFragment = (FragmentListener) getActivity(); mFragment.startMainFragment(syncWizard, false); } } else { edtPassword.setError(errorMsg); } loginUserASync.cancel(true); pdialog.hide(); } /* * (non-Javadoc) * * @see android.os.AsyncTask#onCancelled() */ @Override protected void onCancelled() { loginUserASync.cancel(true); pdialog.hide(); } } /* * (non-Javadoc) * * @see android.support.v4.app.Fragment#onDestroyView() */ @Override public void onDestroyView() { super.onDestroyView(); rootView = null; // now cleaning up! } @Override public Object databaseHelper(Context context) { return null; } @Override public List<DrawerItem> drawerMenus(Context context) { return null; } }