mirror of
https://github.com/nerzhul/ownCloud-SMS-App.git
synced 2025-06-24 00:06:22 +00:00
Refactor code with Java best practices, helped by AS
This commit is contained in:
parent
2576ca7468
commit
9d61d6c732
@ -17,8 +17,6 @@ package fr.unix_experience.owncloud_sms.activities;
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.accounts.AccountManager;
|
||||
import android.content.ContentResolver;
|
||||
@ -26,6 +24,9 @@ import android.content.PeriodicSync;
|
||||
import android.os.Bundle;
|
||||
import android.preference.ListPreference;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import fr.nrz.androidlib.activities.NrzSettingsActivity;
|
||||
import fr.unix_experience.owncloud_sms.R;
|
||||
import fr.unix_experience.owncloud_sms.defines.DefaultPrefs;
|
||||
@ -39,87 +40,81 @@ public class GeneralSettingsActivity extends NrzSettingsActivity {
|
||||
private static String _accountType;
|
||||
|
||||
@Override
|
||||
protected void onPostCreate(final Bundle savedInstanceState) {
|
||||
_accountMgr = AccountManager.get(getBaseContext());
|
||||
_accountAuthority = getString(R.string.account_authority);
|
||||
_accountType = getString(R.string.account_type);
|
||||
_prefsRessourceFile = R.xml.pref_data_sync;
|
||||
protected void onPostCreate(Bundle savedInstanceState) {
|
||||
GeneralSettingsActivity._accountMgr = AccountManager.get(getBaseContext());
|
||||
GeneralSettingsActivity._accountAuthority = getString(R.string.account_authority);
|
||||
GeneralSettingsActivity._accountType = getString(R.string.account_type);
|
||||
NrzSettingsActivity._prefsRessourceFile = R.xml.pref_data_sync;
|
||||
|
||||
// Bind our boolean preferences
|
||||
_boolPrefs.add(new BindObjectPref("push_on_receive", DefaultPrefs.pushOnReceive));
|
||||
_boolPrefs.add(new BindObjectPref("sync_wifi", DefaultPrefs.syncWifi));
|
||||
_boolPrefs.add(new BindObjectPref("sync_4g", DefaultPrefs.sync4G));
|
||||
_boolPrefs.add(new BindObjectPref("sync_3g", DefaultPrefs.sync3G));
|
||||
_boolPrefs.add(new BindObjectPref("sync_gprs", DefaultPrefs.syncGPRS));
|
||||
_boolPrefs.add(new BindObjectPref("sync_2g", DefaultPrefs.sync2G));
|
||||
_boolPrefs.add(new BindObjectPref("sync_others", DefaultPrefs.syncOthers));
|
||||
NrzSettingsActivity._boolPrefs.add(new BindObjectPref("push_on_receive", DefaultPrefs.pushOnReceive));
|
||||
NrzSettingsActivity._boolPrefs.add(new BindObjectPref("sync_wifi", DefaultPrefs.syncWifi));
|
||||
NrzSettingsActivity._boolPrefs.add(new BindObjectPref("sync_4g", DefaultPrefs.sync4G));
|
||||
NrzSettingsActivity._boolPrefs.add(new BindObjectPref("sync_3g", DefaultPrefs.sync3G));
|
||||
NrzSettingsActivity._boolPrefs.add(new BindObjectPref("sync_gprs", DefaultPrefs.syncGPRS));
|
||||
NrzSettingsActivity._boolPrefs.add(new BindObjectPref("sync_2g", DefaultPrefs.sync2G));
|
||||
NrzSettingsActivity._boolPrefs.add(new BindObjectPref("sync_others", DefaultPrefs.syncOthers));
|
||||
|
||||
// Bind our string preferences
|
||||
_stringPrefs.add(new BindObjectPref("sync_frequency", ""));
|
||||
NrzSettingsActivity._stringPrefs.add(new BindObjectPref("sync_frequency", ""));
|
||||
|
||||
// Must be at the end, after preference bind
|
||||
super.onPostCreate(savedInstanceState);
|
||||
}
|
||||
|
||||
protected static void handleCheckboxPreference(final String key, final Boolean value) {
|
||||
protected static void handleCheckboxPreference(String key, Boolean value) {
|
||||
// Network types allowed for sync
|
||||
if(key.equals(new String("push_on_receive")) ||
|
||||
key.equals(new String("sync_wifi")) || key.equals("sync_2g") ||
|
||||
key.equals(new String("sync_3g")) || key.equals("sync_gprs") ||
|
||||
key.equals("sync_4g") || key.equals("sync_others")) {
|
||||
final OCSMSSharedPrefs prefs = new OCSMSSharedPrefs(_context);
|
||||
Log.d(TAG,"GeneralSettingsActivity.handleCheckboxPreference: set " + key + " to "
|
||||
if("push_on_receive".equals(key) ||
|
||||
"sync_wifi".equals(key) || "sync_2g".equals(key) ||
|
||||
"sync_3g".equals(key) || "sync_gprs".equals(key) ||
|
||||
"sync_4g".equals(key) || "sync_others".equals(key)) {
|
||||
OCSMSSharedPrefs prefs = new OCSMSSharedPrefs(NrzSettingsActivity._context);
|
||||
Log.d(GeneralSettingsActivity.TAG,"GeneralSettingsActivity.handleCheckboxPreference: set " + key + " to "
|
||||
+ value.toString());
|
||||
prefs.putBoolean(key, value);
|
||||
}
|
||||
else {
|
||||
// Unknown option
|
||||
}
|
||||
}
|
||||
|
||||
protected static void handleListPreference(final String key, final String value,
|
||||
final ListPreference preference) {
|
||||
protected static void handleListPreference(String key, String value,
|
||||
ListPreference preference) {
|
||||
// For list preferences, look up the correct display value in
|
||||
// the preference's 'entries' list.
|
||||
final int index = preference.findIndexOfValue(value);
|
||||
int index = preference.findIndexOfValue(value);
|
||||
|
||||
// Set the summary to reflect the new value.
|
||||
preference
|
||||
.setSummary(index >= 0 ? preference.getEntries()[index]
|
||||
: null);
|
||||
.setSummary((index >= 0) ? preference.getEntries()[index]
|
||||
: null);
|
||||
|
||||
// Handle sync frequency change
|
||||
if (key.equals("sync_frequency")) {
|
||||
final Account[] myAccountList = _accountMgr.getAccountsByType(_accountType);
|
||||
final long syncFreq = Long.parseLong(value);
|
||||
if ("sync_frequency".equals(key)) {
|
||||
Account[] myAccountList = GeneralSettingsActivity._accountMgr.getAccountsByType(GeneralSettingsActivity._accountType);
|
||||
long syncFreq = Long.parseLong(value);
|
||||
|
||||
// Get ownCloud SMS account list
|
||||
for (int i = 0; i < myAccountList.length; i++) {
|
||||
// And get all authorities for this account
|
||||
final List<PeriodicSync> syncList = ContentResolver.getPeriodicSyncs(myAccountList[i], _accountAuthority);
|
||||
List<PeriodicSync> syncList = ContentResolver.getPeriodicSyncs(myAccountList[i], GeneralSettingsActivity._accountAuthority);
|
||||
|
||||
boolean foundSameSyncCycle = false;
|
||||
for (int j = 0; j < syncList.size(); j++) {
|
||||
final PeriodicSync ps = syncList.get(i);
|
||||
PeriodicSync ps = syncList.get(i);
|
||||
|
||||
if (ps.period == syncFreq && ps.extras.getInt("synctype") == 1) {
|
||||
if ((ps.period == syncFreq) && (ps.extras.getInt("synctype") == 1)) {
|
||||
foundSameSyncCycle = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (foundSameSyncCycle == false) {
|
||||
final Bundle b = new Bundle();
|
||||
if (!foundSameSyncCycle) {
|
||||
Bundle b = new Bundle();
|
||||
b.putInt("synctype", 1);
|
||||
|
||||
ContentResolver.removePeriodicSync(myAccountList[i],
|
||||
_accountAuthority, b);
|
||||
GeneralSettingsActivity._accountAuthority, b);
|
||||
ContentResolver.addPeriodicSync(myAccountList[i],
|
||||
_accountAuthority, b, syncFreq * 60);
|
||||
GeneralSettingsActivity._accountAuthority, b, syncFreq * 60);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Unhandled option
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ public class LoginActivity extends Activity {
|
||||
@Override
|
||||
public boolean onEditorAction(TextView textView, int id,
|
||||
KeyEvent keyEvent) {
|
||||
if (id == R.id.oc_login || id == EditorInfo.IME_NULL) {
|
||||
if ((id == R.id.oc_login) || (id == EditorInfo.IME_NULL)) {
|
||||
attemptLogin();
|
||||
return true;
|
||||
}
|
||||
@ -161,12 +161,14 @@ public class LoginActivity extends Activity {
|
||||
if (cancel) {
|
||||
// There was an error; don't attempt login and focus the first
|
||||
// form field with an error.
|
||||
focusView.requestFocus();
|
||||
} else {
|
||||
if (focusView != null) {
|
||||
focusView.requestFocus();
|
||||
}
|
||||
} else {
|
||||
// Show a progress spinner, and kick off a background task to
|
||||
// perform the user login attempt.
|
||||
showProgress(true);
|
||||
String serverURL = new String(protocol + serverAddr);
|
||||
String serverURL = protocol + serverAddr;
|
||||
mAuthTask = new UserLoginTask(serverURL, login, password);
|
||||
mAuthTask.execute((Void) null);
|
||||
}
|
||||
@ -254,12 +256,12 @@ public class LoginActivity extends Activity {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(final Boolean success) {
|
||||
protected void onPostExecute(Boolean success) {
|
||||
mAuthTask = null;
|
||||
showProgress(false);
|
||||
|
||||
if (success) {
|
||||
String accountType = getIntent().getStringExtra(PARAM_AUTHTOKEN_TYPE);
|
||||
String accountType = getIntent().getStringExtra(UserLoginTask.PARAM_AUTHTOKEN_TYPE);
|
||||
if (accountType == null) {
|
||||
accountType = getString(R.string.account_type);
|
||||
}
|
||||
@ -268,7 +270,7 @@ public class LoginActivity extends Activity {
|
||||
String accountLabel = _login + "@" + _serverURI.getHost();
|
||||
|
||||
// We create the account
|
||||
final Account account = new Account(accountLabel, accountType);
|
||||
Account account = new Account(accountLabel, accountType);
|
||||
Bundle accountBundle = new Bundle();
|
||||
accountBundle.putString("ocLogin", _login);
|
||||
accountBundle.putString("ocURI", _serverURI.toString());
|
||||
@ -293,7 +295,9 @@ public class LoginActivity extends Activity {
|
||||
getApplicationContext().startActivity(settingsIntent);
|
||||
} else {
|
||||
switch (_returnCode) {
|
||||
case INVALID_ADDR:
|
||||
case OK:
|
||||
break;
|
||||
case INVALID_ADDR:
|
||||
_serverView.setError(getString(R.string.error_invalid_server_address));
|
||||
_serverView.requestFocus();
|
||||
break;
|
||||
@ -332,6 +336,5 @@ public class LoginActivity extends Activity {
|
||||
private LoginReturnCode _returnCode;
|
||||
|
||||
public static final String PARAM_AUTHTOKEN_TYPE = "auth.token";
|
||||
public static final String PARAM_CREATE = "create";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -25,11 +25,6 @@ package fr.unix_experience.owncloud_sms.activities;
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import org.json.JSONArray;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Fragment;
|
||||
import android.app.FragmentManager;
|
||||
@ -45,6 +40,12 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.json.JSONArray;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import fr.unix_experience.owncloud_sms.R;
|
||||
import fr.unix_experience.owncloud_sms.activities.remote_account.AccountListActivity;
|
||||
import fr.unix_experience.owncloud_sms.engine.ASyncSMSSync.SyncTask;
|
||||
@ -69,14 +70,14 @@ public class MainActivity extends Activity {
|
||||
ViewPager mViewPager;
|
||||
|
||||
@Override
|
||||
protected void onCreate(final Bundle savedInstanceState) {
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
|
||||
// Create the adapter that will return a fragment for each of the three
|
||||
// primary sections of the activity.
|
||||
|
||||
final List<Fragment> fragments = new Vector<Fragment>();
|
||||
List<Fragment> fragments = new Vector<>();
|
||||
|
||||
/*
|
||||
* Add the Main tabs here
|
||||
@ -101,13 +102,13 @@ public class MainActivity extends Activity {
|
||||
|
||||
private final List<Fragment> mFragments;
|
||||
|
||||
public MainPagerAdapter(final FragmentManager fragmentManager, final List<Fragment> fragments) {
|
||||
public MainPagerAdapter(FragmentManager fragmentManager, List<Fragment> fragments) {
|
||||
super(fragmentManager);
|
||||
mFragments = fragments;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fragment getItem(final int position) {
|
||||
public Fragment getItem(int position) {
|
||||
// getItem is called to instantiate the fragment for the given page.
|
||||
// Return a PlaceholderFragment (defined as a static inner class
|
||||
// below).
|
||||
@ -126,53 +127,50 @@ public class MainActivity extends Activity {
|
||||
*/
|
||||
public static class StarterFragment extends Fragment {
|
||||
@Override
|
||||
public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
|
||||
final Bundle savedInstanceState) {
|
||||
final View rootView = inflater.inflate(R.layout.fragment_mainactivity_main, container,
|
||||
false);
|
||||
return rootView;
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_mainactivity_main, container,
|
||||
false);
|
||||
}
|
||||
}
|
||||
|
||||
public static class SecondTestFragment extends Fragment {
|
||||
@Override
|
||||
public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
|
||||
final Bundle savedInstanceState) {
|
||||
final View rootView = inflater.inflate(R.layout.fragment_mainactivity_gotosettings, container,
|
||||
false);
|
||||
return rootView;
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_mainactivity_gotosettings, container,
|
||||
false);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ThanksAndRateFragment extends Fragment {
|
||||
@Override
|
||||
public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
|
||||
final Bundle savedInstanceState) {
|
||||
final View rootView = inflater.inflate(R.layout.fragment_mainactivity_thanks_note, container,
|
||||
false);
|
||||
return rootView;
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
return inflater.inflate(R.layout.fragment_mainactivity_thanks_note, container,
|
||||
false);
|
||||
}
|
||||
}
|
||||
|
||||
public void openAppSettings(final View view) {
|
||||
public void openAppSettings(View view) {
|
||||
startActivity(new Intent(this, GeneralSettingsActivity.class));
|
||||
}
|
||||
|
||||
public void openAddAccount(final View view) {
|
||||
public void openAddAccount(View view) {
|
||||
startActivity(new Intent(Settings.ACTION_ADD_ACCOUNT));
|
||||
}
|
||||
|
||||
public void syncAllMessages(final View view) {
|
||||
final Context ctx = getApplicationContext();
|
||||
final ConnectivityMonitor cMon = new ConnectivityMonitor(ctx);
|
||||
public void syncAllMessages(View view) {
|
||||
Context ctx = getApplicationContext();
|
||||
ConnectivityMonitor cMon = new ConnectivityMonitor(ctx);
|
||||
|
||||
if (cMon.isValid()) {
|
||||
// Now fetch messages since last stored date
|
||||
final JSONArray smsList = new SmsFetcher(ctx)
|
||||
JSONArray smsList = new SmsFetcher(ctx)
|
||||
.bufferMessagesSinceDate((long) 0);
|
||||
|
||||
if (smsList != null) {
|
||||
final OCSMSNotificationManager nMgr = new OCSMSNotificationManager(ctx);
|
||||
OCSMSNotificationManager nMgr = new OCSMSNotificationManager(ctx);
|
||||
nMgr.setSyncProcessMsg();
|
||||
new SyncTask(getApplicationContext(), smsList).execute();
|
||||
}
|
||||
@ -182,16 +180,16 @@ public class MainActivity extends Activity {
|
||||
}
|
||||
}
|
||||
|
||||
public void selectRemoteAccount(final View view) {
|
||||
public void selectRemoteAccount(View view) {
|
||||
startActivity(new Intent(this, AccountListActivity.class));
|
||||
}
|
||||
|
||||
public void openGooglePlayStore(final View view) {
|
||||
public void openGooglePlayStore(View view) {
|
||||
Intent intent;
|
||||
try {
|
||||
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getPackageName()));
|
||||
|
||||
} catch (final android.content.ActivityNotFoundException anfe) {
|
||||
} catch (android.content.ActivityNotFoundException anfe) {
|
||||
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + getPackageName()));
|
||||
}
|
||||
|
||||
|
@ -1,23 +1,25 @@
|
||||
package fr.unix_experience.owncloud_sms.activities.remote_account;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.accounts.AccountManager;
|
||||
import android.app.ListActivity;
|
||||
import android.os.Bundle;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
||||
import fr.nrz.androidlib.adapters.AndroidAccountAdapter;
|
||||
import fr.unix_experience.owncloud_sms.R;
|
||||
|
||||
public class AccountListActivity extends ListActivity {
|
||||
ArrayList<Account> listItems = new ArrayList<Account>();
|
||||
ArrayList<Account> listItems = new ArrayList<>();
|
||||
AndroidAccountAdapter adapter;
|
||||
|
||||
@Override
|
||||
public void onCreate(final Bundle icicle) {
|
||||
public void onCreate(Bundle icicle) {
|
||||
super.onCreate(icicle);
|
||||
|
||||
final AccountManager _accountMgr = AccountManager.get(getBaseContext());
|
||||
AccountManager _accountMgr = AccountManager.get(getBaseContext());
|
||||
|
||||
setContentView(R.layout.restore_activity_accountlist);
|
||||
adapter = new AndroidAccountAdapter(this,
|
||||
@ -27,11 +29,9 @@ public class AccountListActivity extends ListActivity {
|
||||
R.id.accountname, ContactListActivity.class);
|
||||
setListAdapter(adapter);
|
||||
|
||||
final Account[] accountList =
|
||||
Account[] accountList =
|
||||
_accountMgr.getAccountsByType(getString(R.string.account_type));
|
||||
for (final Account element : accountList) {
|
||||
listItems.add(element);
|
||||
}
|
||||
Collections.addAll(listItems, accountList);
|
||||
|
||||
adapter.notifyDataSetChanged();
|
||||
}
|
||||
|
@ -30,19 +30,19 @@ public class ContactListActivity extends Activity implements ASyncContactLoad {
|
||||
ArrayList<String> objects;
|
||||
|
||||
@Override
|
||||
protected void onCreate(final Bundle savedInstanceState) {
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
assert getIntent().getExtras() != null;
|
||||
|
||||
final String accountName = getIntent().getExtras().getString("account");
|
||||
String accountName = getIntent().getExtras().getString("account");
|
||||
|
||||
// accountName cannot be null, devel error
|
||||
assert accountName != null;
|
||||
|
||||
_accountMgr = AccountManager.get(getBaseContext());
|
||||
final Account[] myAccountList =
|
||||
_accountMgr.getAccountsByType(getString(R.string.account_type));
|
||||
ContactListActivity._accountMgr = AccountManager.get(getBaseContext());
|
||||
Account[] myAccountList =
|
||||
ContactListActivity._accountMgr.getAccountsByType(getString(R.string.account_type));
|
||||
|
||||
// Init view
|
||||
objects = new ArrayList<>();
|
||||
@ -79,8 +79,8 @@ public class ContactListActivity extends Activity implements ASyncContactLoad {
|
||||
Integer smsCount = 0;
|
||||
// @TODO asynctask to load more datas
|
||||
|
||||
if (phoneList.size() > 0) {
|
||||
String res = new String("");
|
||||
if (!phoneList.isEmpty()) {
|
||||
String res = "";
|
||||
for (String pn: phoneList) {
|
||||
res += "- " + pn + "\n";
|
||||
}
|
||||
@ -101,28 +101,34 @@ public class ContactListActivity extends Activity implements ASyncContactLoad {
|
||||
Cursor people = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
|
||||
null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " = ?",
|
||||
new String[]{name}, null);
|
||||
people.moveToFirst();
|
||||
if (people == null) {
|
||||
return new Vector<>();
|
||||
}
|
||||
|
||||
Vector<String> r = new Vector<>();
|
||||
people.moveToFirst();
|
||||
|
||||
Vector<String> r = new Vector<>();
|
||||
if (people.getCount() == 0) {
|
||||
return r;
|
||||
}
|
||||
|
||||
String contactId = people.getString(people.getColumnIndex(ContactsContract.Contacts._ID));
|
||||
|
||||
if (people.getString(people.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))
|
||||
.equalsIgnoreCase("1")) {
|
||||
if ("1".equalsIgnoreCase(people.getString(people.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)))) {
|
||||
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
|
||||
null,
|
||||
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
|
||||
new String[]{contactId}, null);
|
||||
while (phones.moveToNext()) {
|
||||
while ((phones != null) && phones.moveToNext()) {
|
||||
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
|
||||
.replaceAll(" ", "");
|
||||
r.add(phoneNumber);
|
||||
}
|
||||
phones.close();
|
||||
}
|
||||
|
||||
if (phones != null) {
|
||||
phones.close();
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
});
|
||||
|
@ -1,50 +1,48 @@
|
||||
package fr.unix_experience.owncloud_sms.adapters;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.TextView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ContactListAdapter extends ArrayAdapter<String> {
|
||||
private final ArrayList<String> _objects;
|
||||
private static int _itemLayout;
|
||||
private static int _fieldId;
|
||||
private Activity _activity;
|
||||
private final Activity _activity;
|
||||
|
||||
public ContactListAdapter(final Context context, final int resource,
|
||||
final ArrayList<String> objects, final int itemLayout,
|
||||
final int fieldId, final Activity activity) {
|
||||
public ContactListAdapter(Context context, int resource,
|
||||
ArrayList<String> objects, int itemLayout,
|
||||
int fieldId, Activity activity) {
|
||||
super(context, resource, objects);
|
||||
_objects = objects;
|
||||
_itemLayout = itemLayout;
|
||||
_fieldId = fieldId;
|
||||
ContactListAdapter._itemLayout = itemLayout;
|
||||
ContactListAdapter._fieldId = fieldId;
|
||||
_activity = activity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(final int position, final View convertView, final ViewGroup parent) {
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
View v = convertView;
|
||||
if (v == null) {
|
||||
final LayoutInflater inflater =
|
||||
LayoutInflater inflater =
|
||||
(LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
v = inflater.inflate(_itemLayout, null);
|
||||
v = inflater.inflate(ContactListAdapter._itemLayout, null);
|
||||
}
|
||||
|
||||
if (_objects.size() == 0) {
|
||||
if (_objects.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final String element = _objects.get(position);
|
||||
String element = _objects.get(position);
|
||||
|
||||
if (element != null) {
|
||||
final TextView label = (TextView) v.findViewById(_fieldId);
|
||||
TextView label = (TextView) v.findViewById(ContactListAdapter._fieldId);
|
||||
if (label != null) {
|
||||
label.setText(element);
|
||||
}
|
||||
@ -52,6 +50,4 @@ public class ContactListAdapter extends ArrayAdapter<String> {
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
private static final String TAG = ContactListAdapter.class.getSimpleName();
|
||||
}
|
||||
|
@ -17,16 +17,6 @@ package fr.unix_experience.owncloud_sms.authenticators;
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import java.io.IOException;
|
||||
import org.apache.commons.httpclient.HttpException;
|
||||
import org.apache.commons.httpclient.methods.GetMethod;
|
||||
import org.apache.http.HttpStatus;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import com.owncloud.android.lib.common.OwnCloudClient;
|
||||
|
||||
import fr.unix_experience.owncloud_sms.activities.LoginActivity;
|
||||
import fr.unix_experience.owncloud_sms.enums.LoginReturnCode;
|
||||
import android.accounts.AbstractAccountAuthenticator;
|
||||
import android.accounts.Account;
|
||||
import android.accounts.AccountAuthenticatorResponse;
|
||||
@ -37,6 +27,18 @@ import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
import com.owncloud.android.lib.common.OwnCloudClient;
|
||||
|
||||
import org.apache.commons.httpclient.HttpException;
|
||||
import org.apache.commons.httpclient.methods.GetMethod;
|
||||
import org.apache.http.HttpStatus;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import fr.unix_experience.owncloud_sms.activities.LoginActivity;
|
||||
import fr.unix_experience.owncloud_sms.enums.LoginReturnCode;
|
||||
|
||||
public class OwnCloudAuthenticator extends AbstractAccountAuthenticator {
|
||||
// Simple constructor
|
||||
public OwnCloudAuthenticator(Context context) {
|
||||
@ -56,8 +58,8 @@ public class OwnCloudAuthenticator extends AbstractAccountAuthenticator {
|
||||
String accountType, String authTokenType,
|
||||
String[] requiredFeatures, Bundle options)
|
||||
throws NetworkErrorException {
|
||||
final Bundle result;
|
||||
final Intent intent;
|
||||
Bundle result;
|
||||
Intent intent;
|
||||
|
||||
intent = new Intent(_context, LoginActivity.class);
|
||||
|
||||
@ -112,11 +114,11 @@ public class OwnCloudAuthenticator extends AbstractAccountAuthenticator {
|
||||
*/
|
||||
public LoginReturnCode testCredentials() {
|
||||
LoginReturnCode bRet = LoginReturnCode.OK;
|
||||
GetMethod get = null;
|
||||
int status = -1;
|
||||
GetMethod get;
|
||||
int status;
|
||||
|
||||
try {
|
||||
get = new GetMethod(_client.getBaseUri() + "/index.php/ocs/cloud/user?format=json");
|
||||
get = new GetMethod(_client.getBaseUri() + "/index.php/ocs/cloud/user?format=json");
|
||||
} catch (IllegalArgumentException e) {
|
||||
return LoginReturnCode.INVALID_ADDR;
|
||||
}
|
||||
@ -136,37 +138,32 @@ public class OwnCloudAuthenticator extends AbstractAccountAuthenticator {
|
||||
try {
|
||||
if(isSuccess(status)) {
|
||||
String response = get.getResponseBodyAsString();
|
||||
Log.d(TAG, "Successful response: " + response);
|
||||
Log.d(OwnCloudAuthenticator.TAG, "Successful response: " + response);
|
||||
|
||||
// Parse the response
|
||||
JSONObject respJSON = new JSONObject(response);
|
||||
JSONObject respOCS = respJSON.getJSONObject(NODE_OCS);
|
||||
JSONObject respData = respOCS.getJSONObject(NODE_DATA);
|
||||
String id = respData.getString(NODE_ID);
|
||||
String displayName = respData.getString(NODE_DISPLAY_NAME);
|
||||
String email = respData.getString(NODE_EMAIL);
|
||||
JSONObject respOCS = respJSON.getJSONObject(OwnCloudAuthenticator.NODE_OCS);
|
||||
JSONObject respData = respOCS.getJSONObject(OwnCloudAuthenticator.NODE_DATA);
|
||||
String id = respData.getString(OwnCloudAuthenticator.NODE_ID);
|
||||
String displayName = respData.getString(OwnCloudAuthenticator.NODE_DISPLAY_NAME);
|
||||
String email = respData.getString(OwnCloudAuthenticator.NODE_EMAIL);
|
||||
|
||||
Log.d(TAG, "*** Parsed user information: " + id + " - " + displayName + " - " + email);
|
||||
Log.d(OwnCloudAuthenticator.TAG, "*** Parsed user information: " + id + " - " + displayName + " - " + email);
|
||||
|
||||
} else {
|
||||
String response = get.getResponseBodyAsString();
|
||||
Log.e(TAG, "Failed response while getting user information ");
|
||||
Log.e(OwnCloudAuthenticator.TAG, "Failed response while getting user information ");
|
||||
if (response != null) {
|
||||
Log.e(TAG, "*** status code: " + status + " ; response message: " + response);
|
||||
Log.e(OwnCloudAuthenticator.TAG, "*** status code: " + status + " ; response message: " + response);
|
||||
} else {
|
||||
Log.e(TAG, "*** status code: " + status);
|
||||
Log.e(OwnCloudAuthenticator.TAG, "*** status code: " + status);
|
||||
}
|
||||
|
||||
if (status == 401) {
|
||||
bRet = LoginReturnCode.INVALID_LOGIN;
|
||||
}
|
||||
else {
|
||||
bRet = LoginReturnCode.UNKNOWN_ERROR;
|
||||
}
|
||||
bRet = (status == 401) ? LoginReturnCode.INVALID_LOGIN : LoginReturnCode.UNKNOWN_ERROR;
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Exception while getting OC user information", e);
|
||||
Log.e(OwnCloudAuthenticator.TAG, "Exception while getting OC user information", e);
|
||||
bRet = LoginReturnCode.UNKNOWN_ERROR;
|
||||
|
||||
} finally {
|
||||
@ -183,7 +180,7 @@ public class OwnCloudAuthenticator extends AbstractAccountAuthenticator {
|
||||
_client = oc;
|
||||
}
|
||||
|
||||
private Context _context;
|
||||
private final Context _context;
|
||||
private OwnCloudClient _client;
|
||||
|
||||
private static final String TAG = OwnCloudAuthenticator.class.getSimpleName();
|
||||
|
@ -28,20 +28,20 @@ public interface ASyncContactLoad {
|
||||
private static AccountManager _accountMgr = null;
|
||||
private static Account _account;
|
||||
private final Context _context;
|
||||
private ContactListAdapter _adapter;
|
||||
private ArrayList<String> _objects;
|
||||
private SwipeRefreshLayout _layout;
|
||||
private ProgressBar _pg;
|
||||
private Spinner _contactSpinner;
|
||||
private final ContactListAdapter _adapter;
|
||||
private final ArrayList<String> _objects;
|
||||
private final SwipeRefreshLayout _layout;
|
||||
private final ProgressBar _pg;
|
||||
private final Spinner _contactSpinner;
|
||||
|
||||
public ContactLoadTask(final Account account, final Context context,
|
||||
public ContactLoadTask(Account account, Context context,
|
||||
ContactListAdapter adapter, ArrayList<String> objects, SwipeRefreshLayout layout,
|
||||
ProgressBar pg, Spinner sp) {
|
||||
if (_accountMgr == null) {
|
||||
_accountMgr = AccountManager.get(context);
|
||||
if (ContactLoadTask._accountMgr == null) {
|
||||
ContactLoadTask._accountMgr = AccountManager.get(context);
|
||||
}
|
||||
|
||||
_account = account;
|
||||
ContactLoadTask._account = account;
|
||||
_context = context;
|
||||
_adapter = adapter;
|
||||
_objects = objects;
|
||||
@ -50,19 +50,19 @@ public interface ASyncContactLoad {
|
||||
_contactSpinner = sp;
|
||||
}
|
||||
@Override
|
||||
protected Boolean doInBackground(final Void... params) {
|
||||
protected Boolean doInBackground(Void... params) {
|
||||
// Create client
|
||||
final String ocURI = _accountMgr.getUserData(_account, "ocURI");
|
||||
String ocURI = ContactLoadTask._accountMgr.getUserData(ContactLoadTask._account, "ocURI");
|
||||
if (ocURI == null) {
|
||||
// @TODO: Handle the problem
|
||||
return false;
|
||||
}
|
||||
|
||||
final Uri serverURI = Uri.parse(ocURI);
|
||||
Uri serverURI = Uri.parse(ocURI);
|
||||
|
||||
final OCSMSOwnCloudClient _client = new OCSMSOwnCloudClient(_context,
|
||||
serverURI, _accountMgr.getUserData(_account, "ocLogin"),
|
||||
_accountMgr.getPassword(_account));
|
||||
OCSMSOwnCloudClient _client = new OCSMSOwnCloudClient(_context,
|
||||
serverURI, ContactLoadTask._accountMgr.getUserData(ContactLoadTask._account, "ocLogin"),
|
||||
ContactLoadTask._accountMgr.getPassword(ContactLoadTask._account));
|
||||
|
||||
// Remove all objects, due to refreshing handling
|
||||
_objects.clear();
|
||||
@ -84,8 +84,8 @@ public interface ASyncContactLoad {
|
||||
ContentResolver cr = _context.getContentResolver();
|
||||
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
|
||||
null, null, null, null);
|
||||
if (cur.getCount() > 0) {
|
||||
while (cur.moveToNext()) {
|
||||
if (((cur != null) ? cur.getCount() : 0) > 0) {
|
||||
while ((cur != null) && cur.moveToNext()) {
|
||||
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
|
||||
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
|
||||
if (Integer.parseInt(cur.getString(
|
||||
@ -97,7 +97,7 @@ public interface ASyncContactLoad {
|
||||
null,
|
||||
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
|
||||
new String[]{id}, null);
|
||||
while (pCur.moveToNext()) {
|
||||
while ((pCur != null) && pCur.moveToNext()) {
|
||||
String phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
|
||||
.replaceAll(" ", "");
|
||||
if (serverPhoneList.contains(phoneNo)) {
|
||||
@ -107,13 +107,17 @@ public interface ASyncContactLoad {
|
||||
serverPhoneList.remove(phoneNo);
|
||||
}
|
||||
}
|
||||
pCur.close();
|
||||
}
|
||||
if (pCur != null) {
|
||||
pCur.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
cur.close();
|
||||
if (cur != null) {
|
||||
cur.close();
|
||||
}
|
||||
|
||||
for (String phone : serverPhoneList) {
|
||||
for (String phone : serverPhoneList) {
|
||||
_objects.add(phone);
|
||||
}
|
||||
|
||||
@ -122,14 +126,14 @@ public interface ASyncContactLoad {
|
||||
} catch (JSONException e) {
|
||||
_objects.add(_context.getString(R.string.err_fetch_phonelist));
|
||||
return false;
|
||||
} catch (final OCSyncException e) {
|
||||
} catch (OCSyncException e) {
|
||||
_objects.add(_context.getString(e.getErrorId()));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
protected void onPostExecute(final Boolean success) {
|
||||
protected void onPostExecute(Boolean success) {
|
||||
_adapter.notifyDataSetChanged();
|
||||
_layout.setRefreshing(false);
|
||||
if (_pg != null) {
|
||||
@ -142,5 +146,5 @@ public interface ASyncContactLoad {
|
||||
}
|
||||
}
|
||||
|
||||
static final String TAG = ASyncContactLoad.class.getSimpleName();
|
||||
String TAG = ASyncContactLoad.class.getSimpleName();
|
||||
}
|
||||
|
@ -17,45 +17,46 @@ package fr.unix_experience.owncloud_sms.engine;
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import org.json.JSONArray;
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.accounts.AccountManager;
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.util.Log;
|
||||
|
||||
import org.json.JSONArray;
|
||||
|
||||
import fr.unix_experience.owncloud_sms.R;
|
||||
import fr.unix_experience.owncloud_sms.exceptions.OCSyncException;
|
||||
import fr.unix_experience.owncloud_sms.notifications.OCSMSNotificationManager;
|
||||
|
||||
public interface ASyncSMSSync {
|
||||
class SyncTask extends AsyncTask<Void, Void, Void> {
|
||||
public SyncTask(final Context context, final JSONArray smsList) {
|
||||
public SyncTask(Context context, JSONArray smsList) {
|
||||
_context = context;
|
||||
_smsList = smsList;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(final Void... params) {
|
||||
protected Void doInBackground(Void... params) {
|
||||
// Get ownCloud SMS account list
|
||||
final AccountManager _accountMgr = AccountManager.get(_context);
|
||||
final Account[] myAccountList = _accountMgr.getAccountsByType(_context.getString(R.string.account_type));
|
||||
AccountManager _accountMgr = AccountManager.get(_context);
|
||||
Account[] myAccountList = _accountMgr.getAccountsByType(_context.getString(R.string.account_type));
|
||||
|
||||
// Notify that we are syncing SMS
|
||||
final OCSMSNotificationManager nMgr = new OCSMSNotificationManager(_context);
|
||||
for (final Account element : myAccountList) {
|
||||
final Uri serverURI = Uri.parse(_accountMgr.getUserData(element, "ocURI"));
|
||||
OCSMSNotificationManager nMgr = new OCSMSNotificationManager(_context);
|
||||
for (Account element : myAccountList) {
|
||||
Uri serverURI = Uri.parse(_accountMgr.getUserData(element, "ocURI"));
|
||||
|
||||
final OCSMSOwnCloudClient _client = new OCSMSOwnCloudClient(_context,
|
||||
OCSMSOwnCloudClient _client = new OCSMSOwnCloudClient(_context,
|
||||
serverURI, _accountMgr.getUserData(element, "ocLogin"),
|
||||
_accountMgr.getPassword(element));
|
||||
|
||||
try {
|
||||
_client.doPushRequest(_smsList);
|
||||
nMgr.dropSyncErrorMsg();
|
||||
} catch (final OCSyncException e) {
|
||||
Log.e(TAG, _context.getString(e.getErrorId()));
|
||||
} catch (OCSyncException e) {
|
||||
Log.e(ASyncSMSSync.TAG, _context.getString(e.getErrorId()));
|
||||
nMgr.setSyncErrorMsg(_context.getString(e.getErrorId()));
|
||||
}
|
||||
}
|
||||
@ -67,5 +68,5 @@ public interface ASyncSMSSync {
|
||||
private final JSONArray _smsList;
|
||||
}
|
||||
|
||||
static final String TAG = ASyncSMSSync.class.getSimpleName();
|
||||
String TAG = ASyncSMSSync.class.getSimpleName();
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ import android.telephony.TelephonyManager;
|
||||
import fr.unix_experience.owncloud_sms.prefs.OCSMSSharedPrefs;
|
||||
|
||||
public class ConnectivityMonitor {
|
||||
public ConnectivityMonitor(final Context context) {
|
||||
public ConnectivityMonitor(Context context) {
|
||||
_context = context;
|
||||
}
|
||||
|
||||
@ -33,17 +33,17 @@ public class ConnectivityMonitor {
|
||||
_cMgr = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
}
|
||||
|
||||
final android.net.NetworkInfo niWiFi = _cMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
|
||||
final android.net.NetworkInfo niMobile = _cMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
|
||||
android.net.NetworkInfo niWiFi = _cMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
|
||||
android.net.NetworkInfo niMobile = _cMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
|
||||
|
||||
if (niWiFi.isAvailable() || niMobile.isAvailable()) {
|
||||
// Load the connectivity manager to determine on which network we are connected
|
||||
final NetworkInfo netInfo = _cMgr.getActiveNetworkInfo();
|
||||
NetworkInfo netInfo = _cMgr.getActiveNetworkInfo();
|
||||
if (netInfo == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
final OCSMSSharedPrefs prefs = new OCSMSSharedPrefs(_context);
|
||||
OCSMSSharedPrefs prefs = new OCSMSSharedPrefs(_context);
|
||||
|
||||
// Check
|
||||
switch (netInfo.getType()) {
|
||||
|
@ -17,9 +17,13 @@ package fr.unix_experience.owncloud_sms.engine;
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.ConnectException;
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.util.Log;
|
||||
|
||||
import com.owncloud.android.lib.common.OwnCloudClient;
|
||||
import com.owncloud.android.lib.common.OwnCloudClientFactory;
|
||||
import com.owncloud.android.lib.common.OwnCloudCredentialsFactory;
|
||||
|
||||
import org.apache.commons.httpclient.HttpException;
|
||||
import org.apache.commons.httpclient.HttpMethod;
|
||||
@ -31,13 +35,9 @@ import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.util.Log;
|
||||
|
||||
import com.owncloud.android.lib.common.OwnCloudClient;
|
||||
import com.owncloud.android.lib.common.OwnCloudClientFactory;
|
||||
import com.owncloud.android.lib.common.OwnCloudCredentialsFactory;
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.ConnectException;
|
||||
|
||||
import fr.unix_experience.owncloud_sms.R;
|
||||
import fr.unix_experience.owncloud_sms.enums.OCSyncErrorType;
|
||||
@ -47,7 +47,7 @@ import fr.unix_experience.owncloud_sms.prefs.OCSMSSharedPrefs;
|
||||
@SuppressWarnings("deprecation")
|
||||
public class OCSMSOwnCloudClient {
|
||||
|
||||
public OCSMSOwnCloudClient(final Context context, final Uri serverURI, final String accountName, final String accountPassword) {
|
||||
public OCSMSOwnCloudClient(Context context, Uri serverURI, String accountName, String accountPassword) {
|
||||
_context = context;
|
||||
|
||||
_ocClient = OwnCloudClientFactory.createOwnCloudClient(
|
||||
@ -62,8 +62,8 @@ public class OCSMSOwnCloudClient {
|
||||
}
|
||||
|
||||
public Integer getServerAPIVersion() throws OCSyncException {
|
||||
final GetMethod get = createGetVersionRequest();
|
||||
final JSONObject obj = doHttpRequest(get, true);
|
||||
GetMethod get = createGetVersionRequest();
|
||||
JSONObject obj = doHttpRequest(get, true);
|
||||
if (obj == null) {
|
||||
// Return default version
|
||||
return 1;
|
||||
@ -72,8 +72,8 @@ public class OCSMSOwnCloudClient {
|
||||
try {
|
||||
_serverAPIVersion = obj.getInt("version");
|
||||
}
|
||||
catch (final JSONException e) {
|
||||
Log.e(TAG, "No version received from server, assuming version 1", e);
|
||||
catch (JSONException e) {
|
||||
Log.e(OCSMSOwnCloudClient.TAG, "No version received from server, assuming version 1", e);
|
||||
_serverAPIVersion = 1;
|
||||
}
|
||||
|
||||
@ -81,21 +81,21 @@ public class OCSMSOwnCloudClient {
|
||||
}
|
||||
|
||||
public JSONArray getServerPhoneNumbers() throws OCSyncException {
|
||||
final GetMethod get = createGetPhoneListRequest();
|
||||
final JSONObject obj = doHttpRequest(get, true);
|
||||
GetMethod get = createGetPhoneListRequest();
|
||||
JSONObject obj = doHttpRequest(get, true);
|
||||
if (obj == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
return obj.getJSONArray("phoneList");
|
||||
} catch (final JSONException e) {
|
||||
Log.e(TAG, "No phonelist received from server, empty it", e);
|
||||
} catch (JSONException e) {
|
||||
Log.e(OCSMSOwnCloudClient.TAG, "No phonelist received from server, empty it", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void doPushRequest(final JSONArray smsList) throws OCSyncException {
|
||||
public void doPushRequest(JSONArray smsList) throws OCSyncException {
|
||||
/**
|
||||
* If we need other API push, set it here
|
||||
*/
|
||||
@ -110,8 +110,8 @@ public class OCSMSOwnCloudClient {
|
||||
Long lastMsgDate = (long) 0;
|
||||
|
||||
if (smsList == null) {
|
||||
final GetMethod get = createGetSmsIdListRequest();
|
||||
final JSONObject smsGetObj = doHttpRequest(get);
|
||||
GetMethod get = createGetSmsIdListRequest();
|
||||
JSONObject smsGetObj = doHttpRequest(get);
|
||||
if (smsGetObj == null) {
|
||||
return;
|
||||
}
|
||||
@ -120,34 +120,34 @@ public class OCSMSOwnCloudClient {
|
||||
JSONArray inboxSmsList = null, sentSmsList = null, draftsSmsList = null;
|
||||
try {
|
||||
smsBoxes = smsGetObj.getJSONObject("smslist");
|
||||
} catch (final JSONException e) {
|
||||
} catch (JSONException e) {
|
||||
try {
|
||||
smsGetObj.getJSONArray("smslist");
|
||||
} catch (final JSONException e2) {
|
||||
Log.e(TAG, "Invalid datas received from server (doPushRequest, get SMS list)", e);
|
||||
} catch (JSONException e2) {
|
||||
Log.e(OCSMSOwnCloudClient.TAG, "Invalid datas received from server (doPushRequest, get SMS list)", e);
|
||||
throw new OCSyncException(R.string.err_sync_get_smslist, OCSyncErrorType.PARSE);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
inboxSmsList = smsBoxes.getJSONArray("inbox");
|
||||
} catch (final JSONException e) {
|
||||
Log.d(TAG, "No inbox Sms received from server (doPushRequest, get SMS list)");
|
||||
} catch (JSONException e) {
|
||||
Log.d(OCSMSOwnCloudClient.TAG, "No inbox Sms received from server (doPushRequest, get SMS list)");
|
||||
}
|
||||
|
||||
try {
|
||||
sentSmsList = smsBoxes.getJSONArray("sent");
|
||||
} catch (final JSONException e) {
|
||||
Log.d(TAG, "No sent Sms received from server (doPushRequest, get SMS list)");
|
||||
} catch (JSONException e) {
|
||||
Log.d(OCSMSOwnCloudClient.TAG, "No sent Sms received from server (doPushRequest, get SMS list)");
|
||||
}
|
||||
|
||||
try {
|
||||
draftsSmsList = smsBoxes.getJSONArray("drafts");
|
||||
} catch (final JSONException e) {
|
||||
Log.d(TAG, "No drafts Sms received from server (doPushRequest, get SMS list)");
|
||||
} catch (JSONException e) {
|
||||
Log.d(OCSMSOwnCloudClient.TAG, "No drafts Sms received from server (doPushRequest, get SMS list)");
|
||||
}
|
||||
|
||||
final SmsFetcher fetcher = new SmsFetcher(_context);
|
||||
SmsFetcher fetcher = new SmsFetcher(_context);
|
||||
fetcher.setExistingInboxMessages(inboxSmsList);
|
||||
fetcher.setExistingSentMessages(sentSmsList);
|
||||
fetcher.setExistingDraftsMessages(draftsSmsList);
|
||||
@ -159,19 +159,19 @@ public class OCSMSOwnCloudClient {
|
||||
}
|
||||
|
||||
if (smsList.length() == 0) {
|
||||
Log.d(TAG, "No new SMS to sync, sync done");
|
||||
Log.d(OCSMSOwnCloudClient.TAG, "No new SMS to sync, sync done");
|
||||
return;
|
||||
}
|
||||
|
||||
final PostMethod post = createPushRequest(smsList);
|
||||
PostMethod post = createPushRequest(smsList);
|
||||
if (post == null) {
|
||||
Log.e(TAG,"Push request for POST is null");
|
||||
Log.e(OCSMSOwnCloudClient.TAG,"Push request for POST is null");
|
||||
throw new OCSyncException(R.string.err_sync_craft_http_request, OCSyncErrorType.IO);
|
||||
}
|
||||
|
||||
final JSONObject obj = doHttpRequest(post);
|
||||
JSONObject obj = doHttpRequest(post);
|
||||
if (obj == null) {
|
||||
Log.e(TAG,"Request failed. It doesn't return a valid JSON Object");
|
||||
Log.e(OCSMSOwnCloudClient.TAG,"Request failed. It doesn't return a valid JSON Object");
|
||||
throw new OCSyncException(R.string.err_sync_push_request, OCSyncErrorType.IO);
|
||||
}
|
||||
|
||||
@ -181,87 +181,81 @@ public class OCSMSOwnCloudClient {
|
||||
pushStatus = obj.getBoolean("status");
|
||||
pushMessage = obj.getString("msg");
|
||||
}
|
||||
catch (final JSONException e) {
|
||||
Log.e(TAG, "Invalid datas received from server", e);
|
||||
catch (JSONException e) {
|
||||
Log.e(OCSMSOwnCloudClient.TAG, "Invalid datas received from server", e);
|
||||
throw new OCSyncException(R.string.err_sync_push_request_resp, OCSyncErrorType.PARSE);
|
||||
}
|
||||
|
||||
// Push was OK, we can save the lastMessageDate which was saved to server
|
||||
(new OCSMSSharedPrefs(_context)).setLastMessageDate(lastMsgDate);
|
||||
|
||||
Log.d(TAG, "SMS Push request said: status " + pushStatus + " - " + pushMessage);
|
||||
Log.d(OCSMSOwnCloudClient.TAG, "SMS Push request said: status " + pushStatus + " - " + pushMessage);
|
||||
}
|
||||
|
||||
public GetMethod createGetVersionRequest() {
|
||||
return createGetRequest(OC_GET_VERSION);
|
||||
return createGetRequest(OCSMSOwnCloudClient.OC_GET_VERSION);
|
||||
}
|
||||
|
||||
public GetMethod createGetPhoneListRequest() {
|
||||
return createGetRequest(OC_GET_PHONELIST);
|
||||
return createGetRequest(OCSMSOwnCloudClient.OC_GET_PHONELIST);
|
||||
}
|
||||
|
||||
public GetMethod createGetSmsIdListRequest() {
|
||||
return createGetRequest(OC_GET_ALL_SMS_IDS);
|
||||
return createGetRequest(OCSMSOwnCloudClient.OC_GET_ALL_SMS_IDS);
|
||||
}
|
||||
|
||||
public GetMethod createGetSmsIdListWithStateRequest() {
|
||||
return createGetRequest(OC_GET_ALL_SMS_IDS_WITH_STATUS);
|
||||
return createGetRequest(OCSMSOwnCloudClient.OC_GET_ALL_SMS_IDS_WITH_STATUS);
|
||||
}
|
||||
|
||||
public GetMethod createGetLastSmsTimestampRequest() {
|
||||
return createGetRequest(OC_GET_LAST_MSG_TIMESTAMP);
|
||||
return createGetRequest(OCSMSOwnCloudClient.OC_GET_LAST_MSG_TIMESTAMP);
|
||||
}
|
||||
|
||||
private GetMethod createGetRequest(final String oc_call) {
|
||||
final GetMethod get = new GetMethod(_ocClient.getBaseUri() + oc_call);
|
||||
private GetMethod createGetRequest(String oc_call) {
|
||||
GetMethod get = new GetMethod(_ocClient.getBaseUri() + oc_call);
|
||||
get.addRequestHeader("OCS-APIREQUEST", "true");
|
||||
return get;
|
||||
}
|
||||
|
||||
public PostMethod createPushRequest() throws OCSyncException {
|
||||
final SmsFetcher fetcher = new SmsFetcher(_context);
|
||||
final JSONArray smsList = fetcher.fetchAllMessages();
|
||||
return createPushRequest(smsList);
|
||||
}
|
||||
|
||||
public PostMethod createPushRequest(final JSONArray smsList) throws OCSyncException {
|
||||
final JSONObject obj = createPushJSONObject(smsList);
|
||||
public PostMethod createPushRequest(JSONArray smsList) throws OCSyncException {
|
||||
JSONObject obj = createPushJSONObject(smsList);
|
||||
if (obj == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final StringRequestEntity ent = createJSONRequestEntity(obj);
|
||||
StringRequestEntity ent = createJSONRequestEntity(obj);
|
||||
if (ent == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final PostMethod post = new PostMethod(_ocClient.getBaseUri() + OC_PUSH_ROUTE);
|
||||
PostMethod post = new PostMethod(_ocClient.getBaseUri() + OCSMSOwnCloudClient.OC_PUSH_ROUTE);
|
||||
post.addRequestHeader("OCS-APIREQUEST", "true");
|
||||
post.setRequestEntity(ent);
|
||||
|
||||
return post;
|
||||
}
|
||||
|
||||
private JSONObject createPushJSONObject(final JSONArray smsList) throws OCSyncException {
|
||||
private JSONObject createPushJSONObject(JSONArray smsList) throws OCSyncException {
|
||||
if (smsList == null) {
|
||||
Log.e(TAG,"NULL SMS List");
|
||||
Log.e(OCSMSOwnCloudClient.TAG,"NULL SMS List");
|
||||
throw new OCSyncException(R.string.err_sync_create_json_null_smslist, OCSyncErrorType.IO);
|
||||
}
|
||||
|
||||
final JSONObject reqJSON = new JSONObject();
|
||||
JSONObject reqJSON = new JSONObject();
|
||||
|
||||
try {
|
||||
reqJSON.put("smsDatas", smsList);
|
||||
reqJSON.put("smsCount", smsList == null ? 0 : smsList.length());
|
||||
} catch (final JSONException e) {
|
||||
Log.e(TAG,"JSON Exception when creating JSON request object");
|
||||
reqJSON.put("smsCount", smsList.length());
|
||||
} catch (JSONException e) {
|
||||
Log.e(OCSMSOwnCloudClient.TAG,"JSON Exception when creating JSON request object");
|
||||
throw new OCSyncException(R.string.err_sync_create_json_put_smslist, OCSyncErrorType.PARSE);
|
||||
}
|
||||
|
||||
return reqJSON;
|
||||
}
|
||||
|
||||
private StringRequestEntity createJSONRequestEntity(final JSONObject obj) throws OCSyncException {
|
||||
private StringRequestEntity createJSONRequestEntity(JSONObject obj) throws OCSyncException {
|
||||
StringRequestEntity requestEntity;
|
||||
try {
|
||||
requestEntity = new StringRequestEntity(
|
||||
@ -269,32 +263,32 @@ public class OCSMSOwnCloudClient {
|
||||
"application/json",
|
||||
"UTF-8");
|
||||
|
||||
} catch (final UnsupportedEncodingException e) {
|
||||
Log.e(TAG,"Unsupported encoding when generating request");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
Log.e(OCSMSOwnCloudClient.TAG,"Unsupported encoding when generating request");
|
||||
throw new OCSyncException(R.string.err_sync_create_json_request_encoding, OCSyncErrorType.PARSE);
|
||||
}
|
||||
|
||||
return requestEntity;
|
||||
}
|
||||
|
||||
private JSONObject doHttpRequest(final HttpMethod req) throws OCSyncException {
|
||||
private JSONObject doHttpRequest(HttpMethod req) throws OCSyncException {
|
||||
return doHttpRequest(req, false);
|
||||
}
|
||||
|
||||
// skipError permit to skip invalid JSON datas
|
||||
private JSONObject doHttpRequest(final HttpMethod req, final Boolean skipError) throws OCSyncException {
|
||||
JSONObject respJSON = null;
|
||||
private JSONObject doHttpRequest(HttpMethod req, Boolean skipError) throws OCSyncException {
|
||||
JSONObject respJSON;
|
||||
int status = 0;
|
||||
|
||||
// We try maximumHttpReqTries because sometimes network is slow or unstable
|
||||
int tryNb = 0;
|
||||
final ConnectivityMonitor cMon = new ConnectivityMonitor(_context);
|
||||
ConnectivityMonitor cMon = new ConnectivityMonitor(_context);
|
||||
|
||||
while (tryNb < maximumHttpReqTries) {
|
||||
while (tryNb < OCSMSOwnCloudClient.maximumHttpReqTries) {
|
||||
tryNb++;
|
||||
|
||||
if (!cMon.isValid()) {
|
||||
if (tryNb == maximumHttpReqTries) {
|
||||
if (tryNb == OCSMSOwnCloudClient.maximumHttpReqTries) {
|
||||
req.releaseConnection();
|
||||
throw new OCSyncException(R.string.err_sync_no_connection_available, OCSyncErrorType.IO);
|
||||
}
|
||||
@ -304,31 +298,31 @@ public class OCSMSOwnCloudClient {
|
||||
try {
|
||||
status = _ocClient.executeMethod(req);
|
||||
|
||||
Log.d(TAG, "HTTP Request done at try " + tryNb);
|
||||
Log.d(OCSMSOwnCloudClient.TAG, "HTTP Request done at try " + tryNb);
|
||||
|
||||
// Force loop exit
|
||||
tryNb = maximumHttpReqTries;
|
||||
} catch (final ConnectException e) {
|
||||
Log.e(TAG, "Unable to perform a connection to ownCloud instance", e);
|
||||
tryNb = OCSMSOwnCloudClient.maximumHttpReqTries;
|
||||
} catch (ConnectException e) {
|
||||
Log.e(OCSMSOwnCloudClient.TAG, "Unable to perform a connection to ownCloud instance", e);
|
||||
|
||||
// If it's the last try
|
||||
if (tryNb == maximumHttpReqTries) {
|
||||
if (tryNb == OCSMSOwnCloudClient.maximumHttpReqTries) {
|
||||
req.releaseConnection();
|
||||
throw new OCSyncException(R.string.err_sync_http_request_connect, OCSyncErrorType.IO);
|
||||
}
|
||||
} catch (final HttpException e) {
|
||||
Log.e(TAG, "Unable to perform a connection to ownCloud instance", e);
|
||||
} catch (HttpException e) {
|
||||
Log.e(OCSMSOwnCloudClient.TAG, "Unable to perform a connection to ownCloud instance", e);
|
||||
|
||||
// If it's the last try
|
||||
if (tryNb == maximumHttpReqTries) {
|
||||
if (tryNb == OCSMSOwnCloudClient.maximumHttpReqTries) {
|
||||
req.releaseConnection();
|
||||
throw new OCSyncException(R.string.err_sync_http_request_httpexception, OCSyncErrorType.IO);
|
||||
}
|
||||
} catch (final IOException e) {
|
||||
Log.e(TAG, "Unable to perform a connection to ownCloud instance", e);
|
||||
} catch (IOException e) {
|
||||
Log.e(OCSMSOwnCloudClient.TAG, "Unable to perform a connection to ownCloud instance", e);
|
||||
|
||||
// If it's the last try
|
||||
if (tryNb == maximumHttpReqTries) {
|
||||
if (tryNb == OCSMSOwnCloudClient.maximumHttpReqTries) {
|
||||
req.releaseConnection();
|
||||
throw new OCSyncException(R.string.err_sync_http_request_ioexception, OCSyncErrorType.IO);
|
||||
}
|
||||
@ -336,11 +330,11 @@ public class OCSMSOwnCloudClient {
|
||||
}
|
||||
|
||||
if(status == HttpStatus.SC_OK) {
|
||||
String response = null;
|
||||
String response;
|
||||
try {
|
||||
response = req.getResponseBodyAsString();
|
||||
} catch (final IOException e) {
|
||||
Log.e(TAG, "Unable to parse server response", e);
|
||||
} catch (IOException e) {
|
||||
Log.e(OCSMSOwnCloudClient.TAG, "Unable to parse server response", e);
|
||||
throw new OCSyncException(R.string.err_sync_http_request_resp, OCSyncErrorType.IO);
|
||||
}
|
||||
//Log.d(TAG, "Successful response: " + response);
|
||||
@ -348,15 +342,15 @@ public class OCSMSOwnCloudClient {
|
||||
// Parse the response
|
||||
try {
|
||||
respJSON = new JSONObject(response);
|
||||
} catch (final JSONException e) {
|
||||
if (skipError == false) {
|
||||
} catch (JSONException e) {
|
||||
if (!skipError) {
|
||||
if (response.contains("ownCloud") && response.contains("DOCTYPE")) {
|
||||
Log.e(TAG, "OcSMS app not enabled or ownCloud upgrade is required");
|
||||
Log.e(OCSMSOwnCloudClient.TAG, "OcSMS app not enabled or ownCloud upgrade is required");
|
||||
throw new OCSyncException(R.string.err_sync_ocsms_not_installed_or_oc_upgrade_required,
|
||||
OCSyncErrorType.SERVER_ERROR);
|
||||
}
|
||||
else {
|
||||
Log.e(TAG, "Unable to parse server response", e);
|
||||
Log.e(OCSMSOwnCloudClient.TAG, "Unable to parse server response", e);
|
||||
throw new OCSyncException(R.string.err_sync_http_request_parse_resp, OCSyncErrorType.PARSE);
|
||||
}
|
||||
}
|
||||
@ -368,40 +362,38 @@ public class OCSMSOwnCloudClient {
|
||||
throw new OCSyncException(R.string.err_sync_auth_failed, OCSyncErrorType.AUTH);
|
||||
} else {
|
||||
// Unk error
|
||||
String response = null;
|
||||
String response;
|
||||
try {
|
||||
response = req.getResponseBodyAsString();
|
||||
} catch (final IOException e) {
|
||||
Log.e(TAG, "Unable to parse server response", e);
|
||||
} catch (IOException e) {
|
||||
Log.e(OCSMSOwnCloudClient.TAG, "Unable to parse server response", e);
|
||||
throw new OCSyncException(R.string.err_sync_http_request_resp, OCSyncErrorType.PARSE);
|
||||
}
|
||||
|
||||
Log.e(TAG, "Server set unhandled HTTP return code " + status);
|
||||
Log.e(OCSMSOwnCloudClient.TAG, "Server set unhandled HTTP return code " + status);
|
||||
if (response != null) {
|
||||
Log.e(TAG, "Status code: " + status + ". Response message: " + response);
|
||||
Log.e(OCSMSOwnCloudClient.TAG, "Status code: " + status + ". Response message: " + response);
|
||||
} else {
|
||||
Log.e(TAG, "Status code: " + status);
|
||||
Log.e(OCSMSOwnCloudClient.TAG, "Status code: " + status);
|
||||
}
|
||||
throw new OCSyncException(R.string.err_sync_http_request_returncode_unhandled, OCSyncErrorType.SERVER_ERROR);
|
||||
}
|
||||
return respJSON;
|
||||
}
|
||||
|
||||
public OwnCloudClient getOCClient() { return _ocClient; }
|
||||
|
||||
private static int maximumHttpReqTries = 3;
|
||||
private static final int maximumHttpReqTries = 3;
|
||||
|
||||
private final OwnCloudClient _ocClient;
|
||||
private final Context _context;
|
||||
|
||||
private Integer _serverAPIVersion;
|
||||
|
||||
private static String OC_GET_VERSION = "/index.php/apps/ocsms/get/apiversion?format=json";
|
||||
private static String OC_GET_ALL_SMS_IDS = "/index.php/apps/ocsms/get/smsidlist?format=json";
|
||||
private static String OC_GET_ALL_SMS_IDS_WITH_STATUS = "/index.php/apps/ocsms/get/smsidstate?format=json";
|
||||
private static String OC_GET_LAST_MSG_TIMESTAMP = "/index.php/apps/ocsms/get/lastmsgtime?format=json";
|
||||
private static String OC_PUSH_ROUTE = "/index.php/apps/ocsms/push?format=json";
|
||||
private static String OC_GET_PHONELIST = "/index.php/apps/ocsms/get/phones/numberlist?format=json";
|
||||
private static final String OC_GET_VERSION = "/index.php/apps/ocsms/get/apiversion?format=json";
|
||||
private static final String OC_GET_ALL_SMS_IDS = "/index.php/apps/ocsms/get/smsidlist?format=json";
|
||||
private static final String OC_GET_ALL_SMS_IDS_WITH_STATUS = "/index.php/apps/ocsms/get/smsidstate?format=json";
|
||||
private static final String OC_GET_LAST_MSG_TIMESTAMP = "/index.php/apps/ocsms/get/lastmsgtime?format=json";
|
||||
private static final String OC_PUSH_ROUTE = "/index.php/apps/ocsms/push?format=json";
|
||||
private static final String OC_GET_PHONELIST = "/index.php/apps/ocsms/get/phones/numberlist?format=json";
|
||||
|
||||
private static final String TAG = OCSMSOwnCloudClient.class.getSimpleName();
|
||||
|
||||
|
@ -17,15 +17,16 @@ package fr.unix_experience.owncloud_sms.engine;
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.util.Log;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import fr.unix_experience.owncloud_sms.enums.MailboxID;
|
||||
import fr.unix_experience.owncloud_sms.providers.SmsDataProvider;
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.util.Log;
|
||||
|
||||
public class SmsFetcher {
|
||||
public SmsFetcher(Context ct) {
|
||||
@ -48,13 +49,13 @@ public class SmsFetcher {
|
||||
private void bufferMailboxMessages(MailboxID mbID) {
|
||||
String mbURI = mapMailboxIDToURI(mbID);
|
||||
|
||||
if (_context == null || mbURI == null) {
|
||||
if ((_context == null) || (mbURI == null)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (mbID != MailboxID.INBOX && mbID != MailboxID.SENT &&
|
||||
mbID != MailboxID.DRAFTS) {
|
||||
Log.e(TAG,"Unhandled MailboxID " + mbID.ordinal());
|
||||
if ((mbID != MailboxID.INBOX) && (mbID != MailboxID.SENT) &&
|
||||
(mbID != MailboxID.DRAFTS)) {
|
||||
Log.e(SmsFetcher.TAG,"Unhandled MailboxID " + mbID.ordinal());
|
||||
return;
|
||||
}
|
||||
|
||||
@ -64,7 +65,7 @@ public class SmsFetcher {
|
||||
Cursor c = new SmsDataProvider(_context).queryNonExistingMessages(mbURI, existingIDs);
|
||||
|
||||
// Reading mailbox
|
||||
if (c != null && c.getCount() > 0) {
|
||||
if ((c != null) && (c.getCount() > 0)) {
|
||||
c.moveToFirst();
|
||||
do {
|
||||
JSONObject entry = new JSONObject();
|
||||
@ -82,12 +83,12 @@ public class SmsFetcher {
|
||||
// Seen and read must be pseudo boolean
|
||||
case "read":
|
||||
case "seen":
|
||||
entry.put(colName, c.getInt(idx) > 0 ? "true" : "false");
|
||||
entry.put(colName, (c.getInt(idx) > 0) ? "true" : "false");
|
||||
break;
|
||||
default:
|
||||
// Special case for date, we need to record last without searching
|
||||
if (colName.equals("date")) {
|
||||
final Long tmpDate = c.getLong(idx);
|
||||
if ("date".equals(colName)) {
|
||||
Long tmpDate = c.getLong(idx);
|
||||
if (tmpDate > _lastMsgDate) {
|
||||
_lastMsgDate = tmpDate;
|
||||
}
|
||||
@ -103,13 +104,13 @@ public class SmsFetcher {
|
||||
_jsonDataDump.put(entry);
|
||||
|
||||
} catch (JSONException e) {
|
||||
Log.e(TAG, "JSON Exception when reading SMS Mailbox", e);
|
||||
Log.e(SmsFetcher.TAG, "JSON Exception when reading SMS Mailbox", e);
|
||||
c.close();
|
||||
}
|
||||
}
|
||||
while(c.moveToNext());
|
||||
|
||||
Log.d(TAG, c.getCount() + " messages read from " + mbURI);
|
||||
Log.d(SmsFetcher.TAG, c.getCount() + " messages read from " + mbURI);
|
||||
|
||||
c.close();
|
||||
}
|
||||
@ -119,7 +120,7 @@ public class SmsFetcher {
|
||||
public JSONArray getLastMessage(MailboxID mbID) {
|
||||
String mbURI = mapMailboxIDToURI(mbID);
|
||||
|
||||
if (_context == null || mbURI == null) {
|
||||
if ((_context == null) || (mbURI == null)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -146,7 +147,7 @@ public class SmsFetcher {
|
||||
// Seen and read must be pseudo boolean
|
||||
case "read":
|
||||
case "seen":
|
||||
entry.put(colName, c.getInt(idx) > 0 ? "true" : "false");
|
||||
entry.put(colName, (c.getInt(idx) > 0) ? "true" : "false");
|
||||
break;
|
||||
case "type":
|
||||
mboxId = c.getInt(idx);
|
||||
@ -167,7 +168,7 @@ public class SmsFetcher {
|
||||
|
||||
results.put(entry);
|
||||
} catch (JSONException e) {
|
||||
Log.e(TAG, "JSON Exception when reading SMS Mailbox", e);
|
||||
Log.e(SmsFetcher.TAG, "JSON Exception when reading SMS Mailbox", e);
|
||||
c.close();
|
||||
}
|
||||
|
||||
@ -189,14 +190,14 @@ public class SmsFetcher {
|
||||
public void bufferMessagesSinceDate(MailboxID mbID, Long sinceDate) {
|
||||
String mbURI = mapMailboxIDToURI(mbID);
|
||||
|
||||
if (_context == null || mbURI == null) {
|
||||
if ((_context == null) || (mbURI == null)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Cursor c = new SmsDataProvider(_context).query(mbURI, "date > ?", new String[] { sinceDate.toString() });
|
||||
|
||||
// Reading mailbox
|
||||
if (c != null && c.getCount() > 0) {
|
||||
if ((c != null) && (c.getCount() > 0)) {
|
||||
c.moveToFirst();
|
||||
do {
|
||||
JSONObject entry = new JSONObject();
|
||||
@ -214,12 +215,12 @@ public class SmsFetcher {
|
||||
// Seen and read must be pseudo boolean
|
||||
case "read":
|
||||
case "seen":
|
||||
entry.put(colName, c.getInt(idx) > 0 ? "true" : "false");
|
||||
entry.put(colName, (c.getInt(idx) > 0) ? "true" : "false");
|
||||
break;
|
||||
default:
|
||||
// Special case for date, we need to record last without searching
|
||||
if (colName.equals("date")) {
|
||||
final Long tmpDate = c.getLong(idx);
|
||||
if ("date".equals(colName)) {
|
||||
Long tmpDate = c.getLong(idx);
|
||||
if (tmpDate > _lastMsgDate) {
|
||||
_lastMsgDate = tmpDate;
|
||||
}
|
||||
@ -235,13 +236,13 @@ public class SmsFetcher {
|
||||
_jsonDataDump.put(entry);
|
||||
|
||||
} catch (JSONException e) {
|
||||
Log.e(TAG, "JSON Exception when reading SMS Mailbox", e);
|
||||
Log.e(SmsFetcher.TAG, "JSON Exception when reading SMS Mailbox", e);
|
||||
c.close();
|
||||
}
|
||||
}
|
||||
while(c.moveToNext());
|
||||
|
||||
Log.d(TAG, c.getCount() + " messages read from " + mbURI);
|
||||
Log.d(SmsFetcher.TAG, c.getCount() + " messages read from " + mbURI);
|
||||
|
||||
c.close();
|
||||
}
|
||||
@ -309,7 +310,7 @@ public class SmsFetcher {
|
||||
return _lastMsgDate;
|
||||
}
|
||||
|
||||
private Context _context;
|
||||
private final Context _context;
|
||||
private JSONArray _jsonDataDump;
|
||||
private JSONArray _existingInboxMessages;
|
||||
private JSONArray _existingSentMessages;
|
||||
|
@ -24,7 +24,7 @@ import fr.unix_experience.owncloud_sms.enums.OCSMSNotificationType;
|
||||
|
||||
public class OCSMSNotificationManager {
|
||||
|
||||
public OCSMSNotificationManager(final Context context) {
|
||||
public OCSMSNotificationManager(Context context) {
|
||||
_context = context;
|
||||
_notification = new NrzNotification(_context, R.drawable.ic_stat_ocsms);
|
||||
}
|
||||
@ -40,7 +40,7 @@ public class OCSMSNotificationManager {
|
||||
_notification.cancelNotify(OCSMSNotificationType.SYNC.ordinal());
|
||||
}
|
||||
|
||||
public void setSyncErrorMsg(final String errMsg) {
|
||||
public void setSyncErrorMsg(String errMsg) {
|
||||
createNotificationIfPossible(OCSMSNotificationType.SYNC_FAILED,
|
||||
_context.getString(R.string.sync_title),
|
||||
_context.getString(R.string.fatal_error) + "\n" + errMsg
|
||||
@ -51,13 +51,13 @@ public class OCSMSNotificationManager {
|
||||
_notification.cancelNotify(OCSMSNotificationType.SYNC_FAILED.ordinal());
|
||||
}
|
||||
|
||||
public void setDebugMsg(final String errMsg) {
|
||||
public void setDebugMsg(String errMsg) {
|
||||
createNotificationIfPossible(OCSMSNotificationType.DEBUG,
|
||||
"DEBUG", errMsg
|
||||
);
|
||||
}
|
||||
|
||||
private void createNotificationIfPossible(final OCSMSNotificationType nType, final String nTitle, final String nMsg) {
|
||||
private void createNotificationIfPossible(OCSMSNotificationType nType, String nTitle, String nMsg) {
|
||||
_notification.createNotify(nType.ordinal(), nTitle, nMsg);
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,13 @@ package fr.unix_experience.owncloud_sms.observers;
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.accounts.AccountManager;
|
||||
import android.content.Context;
|
||||
import android.database.ContentObserver;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
|
||||
import org.json.JSONArray;
|
||||
|
||||
import fr.unix_experience.owncloud_sms.R;
|
||||
@ -26,13 +33,6 @@ import fr.unix_experience.owncloud_sms.engine.OCSMSOwnCloudClient;
|
||||
import fr.unix_experience.owncloud_sms.engine.SmsFetcher;
|
||||
import fr.unix_experience.owncloud_sms.enums.MailboxID;
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.accounts.AccountManager;
|
||||
import android.content.Context;
|
||||
import android.database.ContentObserver;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
|
||||
public class SmsObserver extends ContentObserver implements ASyncSMSSync {
|
||||
|
||||
public SmsObserver(Handler handler) {
|
||||
@ -46,10 +46,10 @@ public class SmsObserver extends ContentObserver implements ASyncSMSSync {
|
||||
|
||||
public void onChange(boolean selfChange) {
|
||||
super.onChange(selfChange);
|
||||
Log.d(TAG, "onChange SmsObserver");
|
||||
Log.d(SmsObserver.TAG, "onChange SmsObserver");
|
||||
|
||||
// No account, abort
|
||||
final Account[] myAccountList = AccountManager.get(_context).
|
||||
Account[] myAccountList = AccountManager.get(_context).
|
||||
getAccountsByType(_context.getString(R.string.account_type));
|
||||
if (myAccountList.length == 0) {
|
||||
return;
|
||||
@ -61,7 +61,7 @@ public class SmsObserver extends ContentObserver implements ASyncSMSSync {
|
||||
ConnectivityMonitor cMon = new ConnectivityMonitor(_context);
|
||||
|
||||
// Synchronize if network is valid and there are SMS
|
||||
if (cMon.isValid() && smsList != null) {
|
||||
if (cMon.isValid() && (smsList != null)) {
|
||||
new SyncTask(_context, smsList).execute();
|
||||
}
|
||||
}
|
||||
|
@ -25,14 +25,14 @@ import fr.unix_experience.owncloud_sms.defines.DefaultPrefs;
|
||||
|
||||
public class OCSMSSharedPrefs extends SharedPrefs {
|
||||
|
||||
public OCSMSSharedPrefs(final Context context) {
|
||||
public OCSMSSharedPrefs(Context context) {
|
||||
super(context, R.string.shared_preference_file);
|
||||
}
|
||||
|
||||
public void setLastMessageDate(final Long msgDate) {
|
||||
final SharedPreferences.Editor editor = _sPrefs.edit();
|
||||
public void setLastMessageDate(Long msgDate) {
|
||||
SharedPreferences.Editor editor = _sPrefs.edit();
|
||||
editor.putLong(_context.getString(R.string.pref_lastmsgdate), msgDate);
|
||||
editor.commit();
|
||||
editor.apply();
|
||||
}
|
||||
|
||||
public Long getLastMessageDate() {
|
||||
|
@ -22,11 +22,12 @@ import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
public class SmsDataProvider extends ContentProvider {
|
||||
public SmsDataProvider () {}
|
||||
|
||||
public SmsDataProvider (final Context ct) {
|
||||
public SmsDataProvider (Context ct) {
|
||||
super();
|
||||
_context = ct;
|
||||
}
|
||||
@ -36,29 +37,29 @@ public class SmsDataProvider extends ContentProvider {
|
||||
return false;
|
||||
}
|
||||
|
||||
public Cursor query(final String mailBox) {
|
||||
public Cursor query(String mailBox) {
|
||||
return query(Uri.parse(mailBox),
|
||||
new String[] { "read", "date", "address", "seen", "body", "_id", "type", },
|
||||
null, null, null
|
||||
);
|
||||
}
|
||||
|
||||
public Cursor query(final String mailBox, final String selection) {
|
||||
public Cursor query(String mailBox, String selection) {
|
||||
return query(Uri.parse(mailBox),
|
||||
new String[] { "read", "date", "address", "seen", "body", "_id", "type", },
|
||||
selection, null, null
|
||||
);
|
||||
}
|
||||
|
||||
public Cursor queryNonExistingMessages(final String mailBox, final String existingIds) {
|
||||
if (existingIds.length() > 0) {
|
||||
public Cursor queryNonExistingMessages(String mailBox, String existingIds) {
|
||||
if (!existingIds.isEmpty()) {
|
||||
return query(mailBox, "_id NOT IN (" + existingIds + ")");
|
||||
}
|
||||
|
||||
return query(mailBox);
|
||||
}
|
||||
|
||||
public Cursor query(final String mailBox, final String selection, final String[] selectionArgs) {
|
||||
public Cursor query(String mailBox, String selection, String[] selectionArgs) {
|
||||
return query(Uri.parse(mailBox),
|
||||
new String[] { "read", "date", "address", "seen", "body", "_id", "type", },
|
||||
selection, selectionArgs, null
|
||||
@ -66,9 +67,9 @@ public class SmsDataProvider extends ContentProvider {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Cursor query(final Uri uri, final String[] projection, final String selection,
|
||||
final String[] selectionArgs, final String sortOrder) {
|
||||
if (_context != null && _context.getContentResolver() != null) {
|
||||
public Cursor query(@NonNull Uri uri, String[] projection, String selection,
|
||||
String[] selectionArgs, String sortOrder) {
|
||||
if ((_context != null) && (_context.getContentResolver() != null)) {
|
||||
return _context.getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
|
||||
}
|
||||
|
||||
@ -76,26 +77,26 @@ public class SmsDataProvider extends ContentProvider {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType(final Uri uri) {
|
||||
public String getType(@NonNull Uri uri) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Uri insert(final Uri uri, final ContentValues values) {
|
||||
public Uri insert(@NonNull Uri uri, ContentValues values) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int delete(final Uri uri, final String selection, final String[] selectionArgs) {
|
||||
public int delete(@NonNull Uri uri, String selection, String[] selectionArgs) {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int update(final Uri uri, final ContentValues values, final String selection,
|
||||
final String[] selectionArgs) {
|
||||
public int update(@NonNull Uri uri, ContentValues values, String selection,
|
||||
String[] selectionArgs) {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
}
|
||||
|
@ -44,9 +44,9 @@ public class SmsSyncService extends Service {
|
||||
* Set the sync adapter as syncable
|
||||
* Disallow parallel syncs
|
||||
*/
|
||||
synchronized (sSyncAdapterLock) {
|
||||
if (_adapter == null) {
|
||||
_adapter = new SmsSyncAdapter(getApplicationContext(), true);
|
||||
synchronized (SmsSyncService.sSyncAdapterLock) {
|
||||
if (SmsSyncService._adapter == null) {
|
||||
SmsSyncService._adapter = new SmsSyncAdapter(getApplicationContext(), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -63,6 +63,6 @@ public class SmsSyncService extends Service {
|
||||
* in the base class code when the SyncAdapter
|
||||
* constructors call super()
|
||||
*/
|
||||
return _adapter.getSyncAdapterBinder();
|
||||
return SmsSyncService._adapter.getSyncAdapterBinder();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user