mirror of
https://github.com/nerzhul/ownCloud-SMS-App.git
synced 2025-06-28 10:16:13 +00:00
0.21.2: Android 6.0 permissions fixes
This commit is contained in:
parent
d7e1ec729f
commit
6759409188
@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest package="fr.unix_experience.owncloud_sms"
|
<manifest package="fr.unix_experience.owncloud_sms"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:versionCode="36"
|
android:versionCode="37"
|
||||||
android:versionName="0.21.1"> <!-- From Android 4.0 to 6.0 -->
|
android:versionName="0.21.2"> <!-- From Android 4.0 to 6.0 -->
|
||||||
<uses-sdk
|
<uses-sdk
|
||||||
android:maxSdkVersion="23"
|
android:maxSdkVersion="23"
|
||||||
android:minSdkVersion="14"
|
android:minSdkVersion="14"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package fr.unix_experience.owncloud_sms.activities;
|
package fr.unix_experience.owncloud_sms.activities;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2014-2015, Loic Blot <loic.blot@unix-experience.fr>
|
* Copyright (c) 2014-2016, Loic Blot <loic.blot@unix-experience.fr>
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
@ -25,11 +25,14 @@ package fr.unix_experience.owncloud_sms.activities;
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import android.support.design.widget.NavigationView;
|
import android.support.design.widget.NavigationView;
|
||||||
import android.support.v4.view.GravityCompat;
|
import android.support.v4.view.GravityCompat;
|
||||||
import android.support.v4.widget.DrawerLayout;
|
import android.support.v4.widget.DrawerLayout;
|
||||||
@ -46,7 +49,12 @@ import fr.unix_experience.owncloud_sms.engine.ASyncSMSSync.SyncTask;
|
|||||||
import fr.unix_experience.owncloud_sms.engine.ConnectivityMonitor;
|
import fr.unix_experience.owncloud_sms.engine.ConnectivityMonitor;
|
||||||
import fr.unix_experience.owncloud_sms.engine.SmsFetcher;
|
import fr.unix_experience.owncloud_sms.engine.SmsFetcher;
|
||||||
import fr.unix_experience.owncloud_sms.enums.OCSMSNotificationType;
|
import fr.unix_experience.owncloud_sms.enums.OCSMSNotificationType;
|
||||||
|
import fr.unix_experience.owncloud_sms.enums.PermissionID;
|
||||||
import fr.unix_experience.owncloud_sms.notifications.OCSMSNotificationUI;
|
import fr.unix_experience.owncloud_sms.notifications.OCSMSNotificationUI;
|
||||||
|
import fr.unix_experience.owncloud_sms.prefs.PermissionChecker;
|
||||||
|
|
||||||
|
import static fr.unix_experience.owncloud_sms.enums.PermissionID.REQUEST_MAX;
|
||||||
|
import static fr.unix_experience.owncloud_sms.enums.PermissionID.REQUEST_SMS;
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity
|
public class MainActivity extends AppCompatActivity
|
||||||
implements NavigationView.OnNavigationItemSelectedListener{
|
implements NavigationView.OnNavigationItemSelectedListener{
|
||||||
@ -54,8 +62,8 @@ public class MainActivity extends AppCompatActivity
|
|||||||
private static ConnectivityMonitor mConnectivityMonitor = null;
|
private static ConnectivityMonitor mConnectivityMonitor = null;
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
if (mConnectivityMonitor == null) {
|
if (MainActivity.mConnectivityMonitor == null) {
|
||||||
mConnectivityMonitor = new ConnectivityMonitor(getApplicationContext());
|
MainActivity.mConnectivityMonitor = new ConnectivityMonitor(getApplicationContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@ -88,11 +96,12 @@ public class MainActivity extends AppCompatActivity
|
|||||||
boolean res = true;
|
boolean res = true;
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case R.id.nav_sync: res = syncAllMessages(); break;
|
case R.id.nav_sync: syncAllMessages(); break;
|
||||||
case R.id.nav_manage: res = openAppSettings(); break;
|
case R.id.nav_manage: res = openAppSettings(); break;
|
||||||
case R.id.nav_rateus: res = openGooglePlayStore(); break;
|
case R.id.nav_rateus: res = openGooglePlayStore(); break;
|
||||||
case R.id.nav_add_account: res = openAddAccount(); break;
|
case R.id.nav_add_account: res = openAddAccount(); break;
|
||||||
case R.id.nav_my_accounts: res = openMyAccounts(); break;
|
case R.id.nav_my_accounts: res = openMyAccounts(); break;
|
||||||
|
case R.id.nav_appinfo_perms: res = openAppInfos(); break;
|
||||||
}
|
}
|
||||||
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
|
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
|
||||||
drawer.closeDrawer(GravityCompat.START);
|
drawer.closeDrawer(GravityCompat.START);
|
||||||
@ -109,10 +118,15 @@ public class MainActivity extends AppCompatActivity
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean syncAllMessages () {
|
public void syncAllMessages () {
|
||||||
|
if (!PermissionChecker.checkPermission(this, Manifest.permission.READ_SMS,
|
||||||
|
REQUEST_SMS)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Context ctx = getApplicationContext();
|
Context ctx = getApplicationContext();
|
||||||
|
|
||||||
if (mConnectivityMonitor.isValid()) {
|
if (MainActivity.mConnectivityMonitor.isValid()) {
|
||||||
// Now fetch messages since last stored date
|
// Now fetch messages since last stored date
|
||||||
JSONArray smsList = new JSONArray();
|
JSONArray smsList = new JSONArray();
|
||||||
new SmsFetcher(ctx).bufferMessagesSinceDate(smsList, (long) 0);
|
new SmsFetcher(ctx).bufferMessagesSinceDate(smsList, (long) 0);
|
||||||
@ -126,7 +140,6 @@ public class MainActivity extends AppCompatActivity
|
|||||||
else {
|
else {
|
||||||
Toast.makeText(ctx, ctx.getString(R.string.err_sync_no_connection_available), Toast.LENGTH_SHORT).show();
|
Toast.makeText(ctx, ctx.getString(R.string.err_sync_no_connection_available), Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean openMyAccounts () {
|
private boolean openMyAccounts () {
|
||||||
@ -145,4 +158,41 @@ public class MainActivity extends AppCompatActivity
|
|||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean openAppInfos () {
|
||||||
|
Intent intent = new Intent();
|
||||||
|
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
|
||||||
|
Uri uri = Uri.fromParts("package", getPackageName(), null);
|
||||||
|
intent.setData(uri);
|
||||||
|
startActivity(intent);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Permissions
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
|
||||||
|
@NonNull int[] grantResults) {
|
||||||
|
PermissionID requestCodeID = REQUEST_MAX;
|
||||||
|
if ((requestCode > 0) || (requestCode < REQUEST_MAX.ordinal())) {
|
||||||
|
requestCodeID = PermissionID.values()[requestCode];
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (requestCodeID) {
|
||||||
|
case REQUEST_SMS:
|
||||||
|
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||||
|
syncAllMessages();
|
||||||
|
} else {
|
||||||
|
// Permission Denied
|
||||||
|
Toast.makeText(this, getString(R.string.err_cannot_read_sms) + " " +
|
||||||
|
getString(R.string.please_fix_it), Toast.LENGTH_SHORT)
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,19 +1,24 @@
|
|||||||
package fr.unix_experience.owncloud_sms.activities.remote_account;
|
package fr.unix_experience.owncloud_sms.activities.remote_account;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.accounts.AccountManager;
|
import android.accounts.AccountManager;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.provider.ContactsContract;
|
import android.provider.ContactsContract;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
import android.support.v4.widget.SwipeRefreshLayout;
|
import android.support.v4.widget.SwipeRefreshLayout;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
@ -22,13 +27,21 @@ import fr.unix_experience.owncloud_sms.R;
|
|||||||
import fr.unix_experience.owncloud_sms.adapters.ContactListAdapter;
|
import fr.unix_experience.owncloud_sms.adapters.ContactListAdapter;
|
||||||
import fr.unix_experience.owncloud_sms.adapters.RecoveryPhoneNumberListViewAdapter;
|
import fr.unix_experience.owncloud_sms.adapters.RecoveryPhoneNumberListViewAdapter;
|
||||||
import fr.unix_experience.owncloud_sms.engine.ASyncContactLoad;
|
import fr.unix_experience.owncloud_sms.engine.ASyncContactLoad;
|
||||||
|
import fr.unix_experience.owncloud_sms.enums.PermissionID;
|
||||||
|
import fr.unix_experience.owncloud_sms.prefs.PermissionChecker;
|
||||||
|
|
||||||
|
import static fr.unix_experience.owncloud_sms.enums.PermissionID.REQUEST_CONTACTS;
|
||||||
|
import static fr.unix_experience.owncloud_sms.enums.PermissionID.REQUEST_MAX;
|
||||||
|
|
||||||
public class ContactListActivity extends AppCompatActivity implements ASyncContactLoad {
|
public class ContactListActivity extends AppCompatActivity implements ASyncContactLoad {
|
||||||
|
|
||||||
static AccountManager _accountMgr;
|
static AccountManager mAccountMgr;
|
||||||
ContactListAdapter adapter;
|
ContactListAdapter mAdapter = null;
|
||||||
SwipeRefreshLayout _layout;
|
SwipeRefreshLayout mLayout = null;
|
||||||
ArrayList<String> objects;
|
LinearLayout mContactInfos = null;
|
||||||
|
ArrayList<String> mObjects;
|
||||||
|
String mFetchedContact;
|
||||||
|
RecoveryPhoneNumberListViewAdapter mContactPhoneListAdapter = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -41,49 +54,35 @@ public class ContactListActivity extends AppCompatActivity implements ASyncConta
|
|||||||
// accountName cannot be null, devel error
|
// accountName cannot be null, devel error
|
||||||
assert accountName != null;
|
assert accountName != null;
|
||||||
|
|
||||||
ContactListActivity._accountMgr = AccountManager.get(getBaseContext());
|
ContactListActivity.mAccountMgr = AccountManager.get(getBaseContext());
|
||||||
Account[] myAccountList =
|
Account[] myAccountList =
|
||||||
ContactListActivity._accountMgr.getAccountsByType(getString(R.string.account_type));
|
ContactListActivity.mAccountMgr.getAccountsByType(getString(R.string.account_type));
|
||||||
|
|
||||||
// Init view
|
// Init view
|
||||||
objects = new ArrayList<>();
|
mObjects = new ArrayList<>();
|
||||||
setContentView(R.layout.restore_activity_contactlist);
|
setContentView(R.layout.restore_activity_contactlist);
|
||||||
|
|
||||||
_layout = (SwipeRefreshLayout) findViewById(R.id.contactlist_swipe_container);
|
mLayout = (SwipeRefreshLayout) findViewById(R.id.contactlist_swipe_container);
|
||||||
|
|
||||||
adapter = new ContactListAdapter(getBaseContext(), objects);
|
mAdapter = new ContactListAdapter(getBaseContext(), mObjects);
|
||||||
|
|
||||||
final Spinner sp = (Spinner) findViewById(R.id.contact_spinner);
|
final Spinner sp = (Spinner) findViewById(R.id.contact_spinner);
|
||||||
final LinearLayout contactInfos = (LinearLayout) findViewById(R.id.contactinfos_layout);
|
mContactInfos = (LinearLayout) findViewById(R.id.contactinfos_layout);
|
||||||
final ProgressBar contactProgressBar = (ProgressBar) findViewById(R.id.contactlist_pgbar);
|
final ProgressBar contactProgressBar = (ProgressBar) findViewById(R.id.contactlist_pgbar);
|
||||||
final ListView contactPhoneListView = (ListView) findViewById(R.id.contact_phonelistView);
|
final ListView contactPhoneListView = (ListView) findViewById(R.id.contact_phonelistView);
|
||||||
final RecoveryPhoneNumberListViewAdapter contactPhoneListAdapter =
|
mContactPhoneListAdapter = new RecoveryPhoneNumberListViewAdapter(getBaseContext());
|
||||||
new RecoveryPhoneNumberListViewAdapter(getBaseContext());
|
contactPhoneListView.setAdapter(mContactPhoneListAdapter);
|
||||||
contactPhoneListView.setAdapter(contactPhoneListAdapter);
|
|
||||||
|
|
||||||
contactInfos.setVisibility(View.INVISIBLE);
|
mContactInfos.setVisibility(View.INVISIBLE);
|
||||||
|
|
||||||
sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||||
contactInfos.setVisibility(View.INVISIBLE);
|
mContactInfos.setVisibility(View.INVISIBLE);
|
||||||
contactPhoneListAdapter.clear();
|
mContactPhoneListAdapter.clear();
|
||||||
|
|
||||||
String contactName = sp.getSelectedItem().toString();
|
mFetchedContact = sp.getSelectedItem().toString();
|
||||||
Vector<String> phoneList = fetchContact(contactName);
|
fetchContact(mFetchedContact);
|
||||||
Integer smsCount = 0;
|
|
||||||
// @TODO asynctask to load more datas
|
|
||||||
|
|
||||||
if (!phoneList.isEmpty()) {
|
|
||||||
for (String pn: phoneList) {
|
|
||||||
contactPhoneListAdapter.add(pn);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
contactPhoneListAdapter.add(contactName);
|
|
||||||
}
|
|
||||||
|
|
||||||
contactInfos.setVisibility(View.VISIBLE);
|
|
||||||
contactPhoneListAdapter.notifyDataSetChanged();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -91,19 +90,57 @@ public class ContactListActivity extends AppCompatActivity implements ASyncConta
|
|||||||
// Nothing to do there
|
// Nothing to do there
|
||||||
}
|
}
|
||||||
|
|
||||||
private Vector<String> fetchContact(String name) {
|
|
||||||
|
});
|
||||||
|
sp.setAdapter(mAdapter);
|
||||||
|
|
||||||
|
for (final Account element : myAccountList) {
|
||||||
|
if (element.name.equals(accountName)) {
|
||||||
|
// Load "contacts"
|
||||||
|
contactProgressBar.setVisibility(View.VISIBLE);
|
||||||
|
new ContactLoadTask(element, getBaseContext(), mAdapter, mObjects, mLayout, contactProgressBar, mContactInfos).execute();
|
||||||
|
|
||||||
|
// Add refresh handler
|
||||||
|
mLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
|
||||||
|
@Override
|
||||||
|
public void onRefresh() {
|
||||||
|
mLayout.setRefreshing(true);
|
||||||
|
mContactInfos.setVisibility(View.INVISIBLE);
|
||||||
|
contactProgressBar.setVisibility(View.VISIBLE);
|
||||||
|
(new Handler()).post(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
mObjects.clear();
|
||||||
|
mAdapter.notifyDataSetChanged();
|
||||||
|
new ContactLoadTask(element, getBaseContext(), mAdapter, mObjects, mLayout, contactProgressBar, mContactInfos).execute();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fetchContact(String name) {
|
||||||
|
|
||||||
|
if (!PermissionChecker.checkPermission(this, Manifest.permission.READ_CONTACTS,
|
||||||
|
REQUEST_CONTACTS)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Cursor people = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
|
Cursor people = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
|
||||||
null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " = ?",
|
null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " = ?",
|
||||||
new String[]{name}, null);
|
new String[]{name}, null);
|
||||||
if (people == null) {
|
if (people == null) {
|
||||||
return new Vector<>();
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
people.moveToFirst();
|
people.moveToFirst();
|
||||||
|
|
||||||
Vector<String> r = new Vector<>();
|
Vector<String> r = new Vector<>();
|
||||||
if (people.getCount() == 0) {
|
if (people.getCount() == 0) {
|
||||||
return r;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String contactId = people.getString(people.getColumnIndex(ContactsContract.Contacts._ID));
|
String contactId = people.getString(people.getColumnIndex(ContactsContract.Contacts._ID));
|
||||||
@ -124,36 +161,48 @@ public class ContactListActivity extends AppCompatActivity implements ASyncConta
|
|||||||
phones.close();
|
phones.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return r;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sp.setAdapter(adapter);
|
|
||||||
|
|
||||||
for (final Account element : myAccountList) {
|
Integer smsCount = 0;
|
||||||
if (element.name.equals(accountName)) {
|
// @TODO asynctask to load more datas
|
||||||
// Load "contacts"
|
|
||||||
contactProgressBar.setVisibility(View.VISIBLE);
|
|
||||||
new ContactLoadTask(element, getBaseContext(), adapter, objects, _layout, contactProgressBar, contactInfos).execute();
|
|
||||||
|
|
||||||
// Add refresh handler
|
if (!r.isEmpty()) {
|
||||||
_layout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
|
for (String pn: r) {
|
||||||
|
mContactPhoneListAdapter.add(pn);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mContactPhoneListAdapter.add(mFetchedContact);
|
||||||
|
}
|
||||||
|
|
||||||
|
mContactInfos.setVisibility(View.VISIBLE);
|
||||||
|
mContactPhoneListAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Permissions
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onRefresh() {
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
|
||||||
_layout.setRefreshing(true);
|
@NonNull int[] grantResults) {
|
||||||
contactInfos.setVisibility(View.INVISIBLE);
|
PermissionID requestCodeID = REQUEST_MAX;
|
||||||
contactProgressBar.setVisibility(View.VISIBLE);
|
if ((requestCode > 0) || (requestCode < REQUEST_MAX.ordinal())) {
|
||||||
(new Handler()).post(new Runnable() {
|
requestCodeID = PermissionID.values()[requestCode];
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
objects.clear();
|
|
||||||
adapter.notifyDataSetChanged();
|
|
||||||
new ContactLoadTask(element, getBaseContext(), adapter, objects, _layout, contactProgressBar, contactInfos).execute();
|
|
||||||
}
|
}
|
||||||
});
|
switch (requestCodeID) {
|
||||||
|
case REQUEST_CONTACTS:
|
||||||
|
for (int grantResult : grantResults) {
|
||||||
|
Log.d("OcSMS", Integer.toString(grantResult));
|
||||||
}
|
}
|
||||||
});
|
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||||
return;
|
fetchContact(mFetchedContact);
|
||||||
|
} else {
|
||||||
|
// Permission Denied
|
||||||
|
Toast.makeText(this, getString(R.string.err_cannot_read_contacts) + " " +
|
||||||
|
getString(R.string.please_fix_it), Toast.LENGTH_SHORT)
|
||||||
|
.show();
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ package fr.unix_experience.owncloud_sms.broadcast_receivers;
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.accounts.AccountManager;
|
import android.accounts.AccountManager;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
@ -32,7 +33,9 @@ import fr.unix_experience.owncloud_sms.R;
|
|||||||
import fr.unix_experience.owncloud_sms.engine.ASyncSMSSync;
|
import fr.unix_experience.owncloud_sms.engine.ASyncSMSSync;
|
||||||
import fr.unix_experience.owncloud_sms.engine.ConnectivityMonitor;
|
import fr.unix_experience.owncloud_sms.engine.ConnectivityMonitor;
|
||||||
import fr.unix_experience.owncloud_sms.engine.SmsFetcher;
|
import fr.unix_experience.owncloud_sms.engine.SmsFetcher;
|
||||||
|
import fr.unix_experience.owncloud_sms.enums.PermissionID;
|
||||||
import fr.unix_experience.owncloud_sms.prefs.OCSMSSharedPrefs;
|
import fr.unix_experience.owncloud_sms.prefs.OCSMSSharedPrefs;
|
||||||
|
import fr.unix_experience.owncloud_sms.prefs.PermissionChecker;
|
||||||
|
|
||||||
public class ConnectivityChanged extends BroadcastReceiver implements ASyncSMSSync {
|
public class ConnectivityChanged extends BroadcastReceiver implements ASyncSMSSync {
|
||||||
|
|
||||||
@ -58,6 +61,12 @@ public class ConnectivityChanged extends BroadcastReceiver implements ASyncSMSSy
|
|||||||
if (cMon.isValid() && !ConnectivityChanged.dataConnectionAvailable) {
|
if (cMon.isValid() && !ConnectivityChanged.dataConnectionAvailable) {
|
||||||
ConnectivityChanged.dataConnectionAvailable = true;
|
ConnectivityChanged.dataConnectionAvailable = true;
|
||||||
Log.d(ConnectivityChanged.TAG,"ConnectivityChanged.onReceive, data conn available");
|
Log.d(ConnectivityChanged.TAG,"ConnectivityChanged.onReceive, data conn available");
|
||||||
|
|
||||||
|
if (!PermissionChecker.checkPermission(context, Manifest.permission.READ_SMS,
|
||||||
|
PermissionID.REQUEST_SMS)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
checkMessagesAndSend(context);
|
checkMessagesAndSend(context);
|
||||||
}
|
}
|
||||||
// No data available and previous dataConnectionState was true
|
// No data available and previous dataConnectionState was true
|
||||||
@ -68,7 +77,6 @@ public class ConnectivityChanged extends BroadcastReceiver implements ASyncSMSSy
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void checkMessagesAndSend(Context context) {
|
private void checkMessagesAndSend(Context context) {
|
||||||
|
|
||||||
// Get last message synced from preferences
|
// Get last message synced from preferences
|
||||||
Long lastMessageSynced = (new OCSMSSharedPrefs(context)).getLastMessageDate();
|
Long lastMessageSynced = (new OCSMSSharedPrefs(context)).getLastMessageDate();
|
||||||
Log.d(ConnectivityChanged.TAG,"Synced Last:" + lastMessageSynced);
|
Log.d(ConnectivityChanged.TAG,"Synced Last:" + lastMessageSynced);
|
||||||
|
@ -21,4 +21,5 @@ public enum OCSMSNotificationType {
|
|||||||
SYNC,
|
SYNC,
|
||||||
SYNC_FAILED,
|
SYNC_FAILED,
|
||||||
DEBUG,
|
DEBUG,
|
||||||
|
PERMISSION,
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ package fr.unix_experience.owncloud_sms.observers;
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.accounts.AccountManager;
|
import android.accounts.AccountManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@ -32,6 +33,8 @@ import fr.unix_experience.owncloud_sms.engine.ConnectivityMonitor;
|
|||||||
import fr.unix_experience.owncloud_sms.engine.OCSMSOwnCloudClient;
|
import fr.unix_experience.owncloud_sms.engine.OCSMSOwnCloudClient;
|
||||||
import fr.unix_experience.owncloud_sms.engine.SmsFetcher;
|
import fr.unix_experience.owncloud_sms.engine.SmsFetcher;
|
||||||
import fr.unix_experience.owncloud_sms.enums.MailboxID;
|
import fr.unix_experience.owncloud_sms.enums.MailboxID;
|
||||||
|
import fr.unix_experience.owncloud_sms.enums.PermissionID;
|
||||||
|
import fr.unix_experience.owncloud_sms.prefs.PermissionChecker;
|
||||||
|
|
||||||
public class SmsObserver extends ContentObserver implements ASyncSMSSync {
|
public class SmsObserver extends ContentObserver implements ASyncSMSSync {
|
||||||
|
|
||||||
@ -41,6 +44,11 @@ public class SmsObserver extends ContentObserver implements ASyncSMSSync {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void onChange(boolean selfChange) {
|
public void onChange(boolean selfChange) {
|
||||||
|
if (!PermissionChecker.checkPermission(_context, Manifest.permission.READ_SMS,
|
||||||
|
PermissionID.REQUEST_SMS)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
super.onChange(selfChange);
|
super.onChange(selfChange);
|
||||||
Log.d(SmsObserver.TAG, "onChange SmsObserver");
|
Log.d(SmsObserver.TAG, "onChange SmsObserver");
|
||||||
|
|
||||||
|
@ -18,6 +18,10 @@
|
|||||||
android:id="@+id/nav_manage"
|
android:id="@+id/nav_manage"
|
||||||
android:icon="@drawable/ic_menu_manage"
|
android:icon="@drawable/ic_menu_manage"
|
||||||
android:title="@string/action_settings"/>
|
android:title="@string/action_settings"/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/nav_appinfo_perms"
|
||||||
|
android:icon="@drawable/ic_menu_manage"
|
||||||
|
android:title="@string/action_appinfo_perms"/>
|
||||||
</group>
|
</group>
|
||||||
|
|
||||||
<item android:title="@string/communicate">
|
<item android:title="@string/communicate">
|
||||||
|
@ -160,5 +160,13 @@
|
|||||||
<string name="communicate">Communicate</string>
|
<string name="communicate">Communicate</string>
|
||||||
<string name="ma_title_my_accounts">My accounts</string>
|
<string name="ma_title_my_accounts">My accounts</string>
|
||||||
<string name="ma_content_swipeaction">Swipe from left to right to access to action menu.</string>
|
<string name="ma_content_swipeaction">Swipe from left to right to access to action menu.</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<string name="understood">Understood</string>
|
||||||
|
<string name="notif_permission_required">Permissions required</string>
|
||||||
|
<string name="notif_permission_required_content">Some permissions are missing to perform the sync process. Please fix it in app settings</string>
|
||||||
|
<string name="please_fix_it">Please fix it.</string>
|
||||||
|
<string name="err_cannot_read_contacts">We cannot read your contacts.</string>
|
||||||
|
<string name="err_cannot_read_sms">We cannot read your SMS.</string>
|
||||||
|
<string name="action_appinfo_perms">App Infos and permissions</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -91,4 +91,5 @@
|
|||||||
<string name="sync_title">Proceso de sincronización</string>
|
<string name="sync_title">Proceso de sincronización</string>
|
||||||
<string name="sync_inprogress">Sincronización en progreso...</string>
|
<string name="sync_inprogress">Sincronización en progreso...</string>
|
||||||
<string name="fatal_error">Error Fatal ! </string>
|
<string name="fatal_error">Error Fatal ! </string>
|
||||||
|
<string name="understood"></string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -145,4 +145,12 @@
|
|||||||
<string name="communicate">Parlez de nous</string>
|
<string name="communicate">Parlez de nous</string>
|
||||||
<string name="ma_title_my_accounts">Mes comptes</string>
|
<string name="ma_title_my_accounts">Mes comptes</string>
|
||||||
<string name="ma_content_swipeaction">Glissez votre doigt de gauche à droite pour afficher le menu.</string>
|
<string name="ma_content_swipeaction">Glissez votre doigt de gauche à droite pour afficher le menu.</string>
|
||||||
|
<string name="cancel">Annuler</string>
|
||||||
|
<string name="understood">J\'ai compris</string>
|
||||||
|
<string name="notif_permission_required">Permissions requises</string>
|
||||||
|
<string name="notif_permission_required_content">Certaines permissions essentielles sont manquantes, merci de les corriger dans les paramètres de l\'application.</string>
|
||||||
|
<string name="please_fix_it">Merci de bien vouloir le corriger.</string>
|
||||||
|
<string name="err_cannot_read_contacts">Nous ne pouvons lire vos contacts.</string>
|
||||||
|
<string name="err_cannot_read_sms">Nous ne pouvons pas lire vos SMS.</string>
|
||||||
|
<string name="action_appinfo_perms">Infos et permissions</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -195,4 +195,12 @@
|
|||||||
<string name="navigation_drawer_close">Close navigation drawer</string>
|
<string name="navigation_drawer_close">Close navigation drawer</string>
|
||||||
<string name="ma_title_my_accounts">My accounts</string>
|
<string name="ma_title_my_accounts">My accounts</string>
|
||||||
<string name="ma_content_swipeaction">Swipe from left to right to access to action menu.</string>
|
<string name="ma_content_swipeaction">Swipe from left to right to access to action menu.</string>
|
||||||
|
<string name="cancel">Cancel</string>
|
||||||
|
<string name="understood">Understood</string>
|
||||||
|
<string name="notif_permission_required">Permissions required</string>
|
||||||
|
<string name="notif_permission_required_content">Some permissions are missing to perform the sync process. Please fix it in app settings</string>
|
||||||
|
<string name="please_fix_it">Please fix it.</string>
|
||||||
|
<string name="err_cannot_read_contacts">We cannot read your contacts.</string>
|
||||||
|
<string name="err_cannot_read_sms">We cannot read your SMS.</string>
|
||||||
|
<string name="action_appinfo_perms">App Infos and permissions</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user