diff --git a/notification_icon.svg b/notification_icon.svg
new file mode 100644
index 0000000..c8dd3fa
--- /dev/null
+++ b/notification_icon.svg
@@ -0,0 +1,51 @@
+
+
\ No newline at end of file
diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index 09995bf..aa06d96 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -124,7 +124,8 @@
+ android:label="@string/title_activity_login"
+ android:theme="@style/OcSmsTheme.Login">
+ android:label="@string/app_name"
+ android:theme="@style/OcSmsTheme.Drawer">
diff --git a/src/main/java/fr/unix_experience/owncloud_sms/activities/LoginActivity.java b/src/main/java/fr/unix_experience/owncloud_sms/activities/LoginActivity.java
index 1b9a0f7..3646ec1 100644
--- a/src/main/java/fr/unix_experience/owncloud_sms/activities/LoginActivity.java
+++ b/src/main/java/fr/unix_experience/owncloud_sms/activities/LoginActivity.java
@@ -29,10 +29,12 @@ import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
+import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
+import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
@@ -65,7 +67,7 @@ public class LoginActivity extends AppCompatActivity {
private EditText _loginView;
private EditText _passwordView;
private EditText _serverView;
- private ActionProcessButton _signInButton;
+ private ActionProcessButton _signInButton;
private View mProgressView;
private View mLoginFormView;
@@ -74,6 +76,9 @@ public class LoginActivity extends AppCompatActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
+ ActionBar actionBar = getSupportActionBar();
+ actionBar.setDisplayHomeAsUpEnabled(true);
+
// Set up the login form.
_protocolView = (Spinner) findViewById(R.id.oc_protocol);
_serverView = (EditText) findViewById(R.id.oc_server);
@@ -84,7 +89,7 @@ public class LoginActivity extends AppCompatActivity {
.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int id,
- KeyEvent keyEvent) {
+ KeyEvent keyEvent) {
if ((id == R.id.oc_login) || (id == EditorInfo.IME_NULL)) {
attemptLogin();
return true;
@@ -93,7 +98,7 @@ public class LoginActivity extends AppCompatActivity {
}
});
- _signInButton = (ActionProcessButton) findViewById(R.id.oc_signin_button);
+ _signInButton = (ActionProcessButton) findViewById(R.id.oc_signin_button);
_signInButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
@@ -105,6 +110,19 @@ public class LoginActivity extends AppCompatActivity {
mProgressView = findViewById(R.id.login_progress);
}
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ boolean retval = true;
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ finish();
+ break;
+ default:
+ retval = super.onOptionsItemSelected(item);
+ }
+ return retval;
+ }
+
/**
* Attempts to sign in or register the account specified by the login form.
* If there are form errors (invalid email, missing fields, etc.), the
@@ -127,12 +145,12 @@ public class LoginActivity extends AppCompatActivity {
boolean cancel = false;
View focusView = null;
-
+
// Check for a valid server address.
if (TextUtils.isEmpty(protocol)) {
cancel = true;
}
-
+
// Check for a valid server address.
if (TextUtils.isEmpty(serverAddr)) {
_serverView.setError(getString(R.string.error_field_required));
@@ -146,14 +164,14 @@ public class LoginActivity extends AppCompatActivity {
focusView = _loginView;
cancel = true;
}
-
+
// Check for a valid password
if (TextUtils.isEmpty(password)) {
_passwordView.setError(getString(R.string.error_field_required));
focusView = _passwordView;
cancel = true;
}
-
+
if (!isPasswordValid(password)) {
_passwordView.setError(getString(R.string.error_invalid_password));
focusView = _passwordView;
@@ -163,15 +181,15 @@ public class LoginActivity extends AppCompatActivity {
if (cancel) {
// There was an error; don't attempt login and focus the first
// form field with an error.
- // reset the button progress
- _signInButton.setProgress(0);
- if (focusView != null) {
- focusView.requestFocus();
- }
- } else {
+ // reset the button progress
+ _signInButton.setProgress(0);
+ if (focusView != null) {
+ focusView.requestFocus();
+ }
+ } else {
// Show a progress spinner, and kick off a background task to
// perform the user login attempt.
- _signInButton.setProgress(25);
+ _signInButton.setProgress(25);
showProgress(true);
String serverURL = protocol + serverAddr;
mAuthTask = new UserLoginTask(serverURL, login, password);
@@ -229,10 +247,10 @@ public class LoginActivity extends AppCompatActivity {
* Represents an asynchronous login/registration task used to authenticate
* the user.
*/
- public class UserLoginTask extends AsyncTask {
+ public class UserLoginTask extends AsyncTask {
UserLoginTask(String serverURI, String login, String password) {
- Log.i(TAG, "_serverURI = " + serverURI);
+ Log.i(TAG, "_serverURI = " + serverURI);
_serverURI = Uri.parse(serverURI);
_login = login;
_password = password;
@@ -259,47 +277,47 @@ public class LoginActivity extends AppCompatActivity {
protected void onPostExecute(Boolean success) {
mAuthTask = null;
showProgress(false);
- _signInButton.setProgress(90);
+ _signInButton.setProgress(90);
if (success) {
- _signInButton.setProgress(100);
+ _signInButton.setProgress(100);
String accountType = getIntent().getStringExtra(UserLoginTask.PARAM_AUTHTOKEN_TYPE);
- if (accountType == null) {
- accountType = getString(R.string.account_type);
- }
-
+ if (accountType == null) {
+ accountType = getString(R.string.account_type);
+ }
+
// Generate a label
String accountLabel = _login + "@" + _serverURI.getHost();
-
+
// We create the account
Account account = new Account(accountLabel, accountType);
Bundle accountBundle = new Bundle();
accountBundle.putString("ocLogin", _login);
accountBundle.putString("ocURI", _serverURI.toString());
-
+
// And we push it to Android
AccountManager accMgr = AccountManager.get(getApplicationContext());
- accMgr.addAccountExplicitly(account, _password, accountBundle);
-
+ accMgr.addAccountExplicitly(account, _password, accountBundle);
+
// Set sync options
ContentResolver.setSyncAutomatically(account, getString(R.string.account_authority), true);
-
+
Bundle b = new Bundle();
b.putInt("synctype", 1);
-
+
ContentResolver.addPeriodicSync(account, getString(R.string.account_authority), b, DefaultPrefs.syncInterval * 60);
// Then it's finished
finish();
-
+
// Start sync settings, we have finished to configure account
Intent settingsIntent = new Intent(Settings.ACTION_SYNC_SETTINGS);
settingsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(settingsIntent);
} else {
- boolean serverViewRequestFocus = true;
+ boolean serverViewRequestFocus = true;
switch (_returnCode) {
case 0:
- _serverView.setError("UNK");
+ _serverView.setError("UNK");
break;
case 404:
_serverView.setError(getString(R.string.error_connection_failed_not_found));
@@ -312,24 +330,24 @@ public class LoginActivity extends AppCompatActivity {
_serverView.setError(getString(R.string.error_http_connection_failed));
break;
case 401:
- case 403:
- _passwordView.setError(getString(R.string.error_invalid_login));
- _passwordView.requestFocus();
- // Warning, there is no break here to disable serverViewRequestFocus too
- case 200:
- default:
- serverViewRequestFocus = false;
- break;
+ case 403:
+ _passwordView.setError(getString(R.string.error_invalid_login));
+ _passwordView.requestFocus();
+ // Warning, there is no break here to disable serverViewRequestFocus too
+ case 200:
+ default:
+ serverViewRequestFocus = false;
+ break;
}
- if (serverViewRequestFocus) {
- _serverView.requestFocus();
- }
+ if (serverViewRequestFocus) {
+ _serverView.requestFocus();
+ }
- // If not ok, reset the progress
- if (_returnCode != 200) {
- _signInButton.setProgress(0);
- }
+ // If not ok, reset the progress
+ if (_returnCode != 200) {
+ _signInButton.setProgress(0);
+ }
}
}
@@ -343,8 +361,8 @@ public class LoginActivity extends AppCompatActivity {
private final String _login;
private final String _password;
private int _returnCode;
-
+
static final String PARAM_AUTHTOKEN_TYPE = "auth.token";
- private final String TAG = UserLoginTask.class.getCanonicalName();
- }
+ private final String TAG = UserLoginTask.class.getCanonicalName();
+ }
}
diff --git a/src/main/java/fr/unix_experience/owncloud_sms/activities/MainActivity.java b/src/main/java/fr/unix_experience/owncloud_sms/activities/MainActivity.java
index d06f6eb..05aa9ec 100644
--- a/src/main/java/fr/unix_experience/owncloud_sms/activities/MainActivity.java
+++ b/src/main/java/fr/unix_experience/owncloud_sms/activities/MainActivity.java
@@ -38,6 +38,7 @@ import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import android.view.Window;
@@ -59,107 +60,174 @@ 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
- implements NavigationView.OnNavigationItemSelectedListener{
+ implements NavigationView.OnNavigationItemSelectedListener {
+
+ private ConnectivityMonitor _ConnectivityMonitor = null;
+
+ private DrawerLayout drawer;
- private ConnectivityMonitor _ConnectivityMonitor = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
- if (_ConnectivityMonitor == null) {
- _ConnectivityMonitor = new ConnectivityMonitor(getApplicationContext());
- }
+ if (_ConnectivityMonitor == null) {
+ _ConnectivityMonitor = new ConnectivityMonitor(getApplicationContext());
+ }
- requestWindowFeature(Window.FEATURE_NO_TITLE);
+ requestWindowFeature(Window.FEATURE_NO_TITLE);
- super.onCreate(savedInstanceState);
+ super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
- DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
- ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
- this, drawer, null, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
- assert drawer != null;
- drawer.addDrawerListener(toggle);
- toggle.syncState();
- NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
- assert navigationView != null;
- navigationView.setNavigationItemSelectedListener(this);
+ setupToolbar();
+ getSupportActionBar().setHomeButtonEnabled(true);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- drawer.openDrawer(GravityCompat.START);
+ drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
+ setupDrawer();
+ drawer.openDrawer(GravityCompat.START);
}
- @Override
- public void onBackPressed() {
- DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
- assert drawer != null;
- if (drawer.isDrawerOpen(GravityCompat.START)) {
- drawer.closeDrawer(GravityCompat.START);
- } else {
- super.onBackPressed();
- }
- }
+ protected void setupToolbar() {
+ setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
+ }
- @Override
- public boolean onNavigationItemSelected(MenuItem item) {
- int id = item.getItemId();
- boolean res = true;
+ private void setupDrawer() {
+ ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
+ this, drawer, null, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
+ assert drawer != null;
+ drawer.addDrawerListener(toggle);
+ toggle.syncState();
+ toggle.setDrawerIndicatorEnabled(true);
- switch (id) {
- case R.id.nav_sync: syncAllMessages(); break;
- case R.id.nav_manage: res = openAppSettings(); break;
- case R.id.nav_rateus: res = openGooglePlayStore(); break;
- case R.id.nav_add_account: res = openAddAccount(); 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);
- assert drawer != null;
- drawer.closeDrawer(GravityCompat.START);
- return res;
- }
+ NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
+ assert navigationView != null;
+ navigationView.setNavigationItemSelectedListener(this);
+ }
- private boolean openAppSettings () {
+ /**
+ * checks if the drawer exists and is opened.
+ *
+ * @return true
if the drawer is open, else false
+ */
+ public boolean isDrawerOpen() {
+ return drawer != null && drawer.isDrawerOpen(GravityCompat.START);
+ }
+
+ /**
+ * closes the drawer.
+ */
+ public void closeDrawer() {
+ if (drawer != null) {
+ drawer.closeDrawer(GravityCompat.START);
+ }
+ }
+
+ /**
+ * opens the drawer.
+ */
+ public void openDrawer() {
+ if (drawer != null) {
+ drawer.openDrawer(GravityCompat.START);
+ }
+ }
+
+ @Override
+ public void onBackPressed() {
+ if (isDrawerOpen()) {
+ closeDrawer();
+ } else {
+ super.onBackPressed();
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ boolean retval = true;
+ switch (item.getItemId()) {
+ case android.R.id.home: {
+ if (isDrawerOpen()) {
+ closeDrawer();
+ } else {
+ openDrawer();
+ }
+ break;
+ }
+ default:
+ retval = super.onOptionsItemSelected(item);
+ }
+ return retval;
+ }
+
+ @Override
+ public boolean onNavigationItemSelected(MenuItem item) {
+ int id = item.getItemId();
+ boolean res = true;
+
+ switch (id) {
+ case R.id.nav_sync:
+ syncAllMessages();
+ break;
+ case R.id.nav_manage:
+ res = openAppSettings();
+ break;
+ case R.id.nav_rateus:
+ res = openGooglePlayStore();
+ break;
+ case R.id.nav_add_account:
+ res = openAddAccount();
+ break;
+ case R.id.nav_my_accounts:
+ res = openMyAccounts();
+ break;
+ case R.id.nav_appinfo_perms:
+ res = openAppInfos();
+ break;
+ }
+ closeDrawer();
+ return res;
+ }
+
+ private boolean openAppSettings() {
startActivity(new Intent(this, OCSMSSettingsActivity.class));
- return true;
+ return true;
}
- private boolean openAddAccount () {
+ private boolean openAddAccount() {
startActivity(new Intent(Settings.ACTION_ADD_ACCOUNT));
- return true;
+ return true;
}
- public void syncAllMessages () {
- Log.v(MainActivity.TAG, "Launch syncAllMessages()");
- if (!PermissionChecker.checkPermission(this, Manifest.permission.READ_SMS,
- REQUEST_SMS)) {
- return;
- }
+ public void syncAllMessages() {
+ Log.v(MainActivity.TAG, "Launch syncAllMessages()");
+ if (!PermissionChecker.checkPermission(this, Manifest.permission.READ_SMS,
+ REQUEST_SMS)) {
+ return;
+ }
Context ctx = getApplicationContext();
if (_ConnectivityMonitor.isValid()) {
// Now fetch messages since last stored date
JSONArray smsList = new JSONArray();
- new AndroidSmsFetcher(ctx).bufferMessagesSinceDate(smsList, (long) 0);
+ new AndroidSmsFetcher(ctx).bufferMessagesSinceDate(smsList, (long) 0);
if (smsList.length() > 0) {
- OCSMSNotificationUI.notify(ctx, ctx.getString(R.string.sync_title),
- ctx.getString(R.string.sync_inprogress), OCSMSNotificationType.SYNC.ordinal());
+ OCSMSNotificationUI.notify(ctx, ctx.getString(R.string.sync_title),
+ ctx.getString(R.string.sync_inprogress), OCSMSNotificationType.SYNC.ordinal());
new SyncTask(getApplicationContext(), smsList).execute();
+ } else {
+ Toast.makeText(ctx, ctx.getString(R.string.nothing_to_sync), Toast.LENGTH_SHORT).show();
}
- else {
- Toast.makeText(ctx, ctx.getString(R.string.nothing_to_sync), Toast.LENGTH_SHORT).show();
- }
- }
- else {
+ } else {
Toast.makeText(ctx, ctx.getString(R.string.err_sync_no_connection_available), Toast.LENGTH_SHORT).show();
}
- Log.v(MainActivity.TAG, "Finish syncAllMessages()");
+ Log.v(MainActivity.TAG, "Finish syncAllMessages()");
}
- private boolean openMyAccounts () {
+ private boolean openMyAccounts() {
startActivity(new Intent(this, AccountListActivity.class));
- return true;
+ return true;
}
- private boolean openGooglePlayStore () {
+ private boolean openGooglePlayStore() {
Intent intent;
try {
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getPackageName()));
@@ -168,45 +236,45 @@ public class MainActivity extends AppCompatActivity
}
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;
- }
+ 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
- */
+ /*
+ * 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];
- }
+ @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);
- }
- }
+ 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);
+ }
+ }
- private static final String TAG = MainActivity.class.getSimpleName();
+ private static final String TAG = MainActivity.class.getSimpleName();
}
diff --git a/src/main/java/fr/unix_experience/owncloud_sms/activities/OCSMSSettingsActivity.java b/src/main/java/fr/unix_experience/owncloud_sms/activities/OCSMSSettingsActivity.java
index 54ab540..0bb8ae0 100644
--- a/src/main/java/fr/unix_experience/owncloud_sms/activities/OCSMSSettingsActivity.java
+++ b/src/main/java/fr/unix_experience/owncloud_sms/activities/OCSMSSettingsActivity.java
@@ -24,7 +24,10 @@ import android.content.ContentResolver;
import android.content.PeriodicSync;
import android.os.Bundle;
import android.preference.ListPreference;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatDelegate;
import android.util.Log;
+import android.view.MenuItem;
import java.util.List;
@@ -37,82 +40,104 @@ import fr.unix_experience.owncloud_sms.prefs.PermissionChecker;
import static fr.unix_experience.owncloud_sms.enums.PermissionID.REQUEST_ACCOUNTS;
public class OCSMSSettingsActivity extends VirtualSettingsActivity {
- private static final String TAG = OCSMSSettingsActivity.class.getSimpleName();
+ private static final String TAG = OCSMSSettingsActivity.class.getSimpleName();
- private static AccountManager _accountMgr;
- private static String _accountAuthority;
- private static String _accountType;
+ private static AccountManager _accountMgr;
+ private static String _accountAuthority;
+ private static String _accountType;
- @Override
- protected void onPostCreate(Bundle savedInstanceState) {
- OCSMSSettingsActivity._accountMgr = AccountManager.get(getBaseContext());
- OCSMSSettingsActivity._accountAuthority = getString(R.string.account_authority);
- OCSMSSettingsActivity._accountType = getString(R.string.account_type);
- VirtualSettingsActivity._prefsRessourceFile = R.xml.pref_data_sync;
+ private AppCompatDelegate mDelegate;
- // Bind our boolean preferences
- VirtualSettingsActivity._boolPrefs.add(new BindObjectPref("push_on_receive", DefaultPrefs.pushOnReceive));
- VirtualSettingsActivity._boolPrefs.add(new BindObjectPref("sync_wifi", DefaultPrefs.syncWifi));
- VirtualSettingsActivity._boolPrefs.add(new BindObjectPref("sync_4g", DefaultPrefs.sync4G));
- VirtualSettingsActivity._boolPrefs.add(new BindObjectPref("sync_3g", DefaultPrefs.sync3G));
- VirtualSettingsActivity._boolPrefs.add(new BindObjectPref("sync_gprs", DefaultPrefs.syncGPRS));
- VirtualSettingsActivity._boolPrefs.add(new BindObjectPref("sync_2g", DefaultPrefs.sync2G));
- VirtualSettingsActivity._boolPrefs.add(new BindObjectPref("sync_others", DefaultPrefs.syncOthers));
+ @SuppressWarnings("deprecation")
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
- // Bind our string preferences
- VirtualSettingsActivity._stringPrefs.add(new BindObjectPref("sync_frequency", "15"));
- VirtualSettingsActivity._stringPrefs.add(new BindObjectPref("sync_bulk_messages", "-1"));
- VirtualSettingsActivity._stringPrefs.add(new BindObjectPref("minimum_sync_chars", "1"));
+ ActionBar actionBar = getSupportActionBar();
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ }
- // Must be at the end, after preference bind
- super.onPostCreate(savedInstanceState);
- }
+ private AppCompatDelegate getDelegate() {
+ if (mDelegate == null) {
+ mDelegate = AppCompatDelegate.create(this, null);
+ }
+ return mDelegate;
+ }
- protected void handleCheckboxPreference(String key, Boolean value) {
- // Network types allowed for sync
- 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(VirtualSettingsActivity._context);
- Log.i(OCSMSSettingsActivity.TAG, "OCSMSSettingsActivity.handleCheckboxPreference: set " + key + " to "
- + value.toString());
- prefs.putBoolean(key, value);
- }
- }
+ public ActionBar getSupportActionBar() {
+ return getDelegate().getSupportActionBar();
+ }
- protected void handleListPreference(String key, String value,
- ListPreference preference) {
- // For list preferences, look up the correct display value in
- // the preference's 'entries' list.
- int index = preference.findIndexOfValue(value);
+ @Override
+ protected void onPostCreate(Bundle savedInstanceState) {
+ OCSMSSettingsActivity._accountMgr = AccountManager.get(getBaseContext());
+ OCSMSSettingsActivity._accountAuthority = getString(R.string.account_authority);
+ OCSMSSettingsActivity._accountType = getString(R.string.account_type);
+ VirtualSettingsActivity._prefsRessourceFile = R.xml.pref_data_sync;
- // Set the summary to reflect the new value.
- preference
- .setSummary((index >= 0) ? preference.getEntries()[index]
- : null);
+ // Bind our boolean preferences
+ VirtualSettingsActivity._boolPrefs.add(new BindObjectPref("push_on_receive", DefaultPrefs.pushOnReceive));
+ VirtualSettingsActivity._boolPrefs.add(new BindObjectPref("sync_wifi", DefaultPrefs.syncWifi));
+ VirtualSettingsActivity._boolPrefs.add(new BindObjectPref("sync_4g", DefaultPrefs.sync4G));
+ VirtualSettingsActivity._boolPrefs.add(new BindObjectPref("sync_3g", DefaultPrefs.sync3G));
+ VirtualSettingsActivity._boolPrefs.add(new BindObjectPref("sync_gprs", DefaultPrefs.syncGPRS));
+ VirtualSettingsActivity._boolPrefs.add(new BindObjectPref("sync_2g", DefaultPrefs.sync2G));
+ VirtualSettingsActivity._boolPrefs.add(new BindObjectPref("sync_others", DefaultPrefs.syncOthers));
- Log.i(OCSMSSettingsActivity.TAG, "Modifying listPreference " + key);
+ // Bind our string preferences
+ VirtualSettingsActivity._stringPrefs.add(new BindObjectPref("sync_frequency", "15"));
+ VirtualSettingsActivity._stringPrefs.add(new BindObjectPref("sync_bulk_messages", "-1"));
+ VirtualSettingsActivity._stringPrefs.add(new BindObjectPref("minimum_sync_chars", "1"));
- OCSMSSharedPrefs prefs = new OCSMSSharedPrefs(VirtualSettingsActivity._context);
+ // Must be at the end, after preference bind
+ super.onPostCreate(savedInstanceState);
+ }
- // Handle sync frequency change
- if ("sync_frequency".equals(key)) {
- if (!PermissionChecker.checkPermission(this, Manifest.permission.GET_ACCOUNTS,
- REQUEST_ACCOUNTS)) {
- return;
- }
+ protected void handleCheckboxPreference(String key, Boolean value) {
+ // Network types allowed for sync
+ 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(VirtualSettingsActivity._context);
+ Log.i(OCSMSSettingsActivity.TAG, "OCSMSSettingsActivity.handleCheckboxPreference: set " + key + " to "
+ + value.toString());
+ prefs.putBoolean(key, value);
+ }
+ }
- Account[] myAccountList = OCSMSSettingsActivity._accountMgr.getAccountsByType(OCSMSSettingsActivity._accountType);
- long syncFreq = Long.parseLong(value);
+ protected void handleListPreference(String key, String value,
+ ListPreference preference) {
+ // For list preferences, look up the correct display value in
+ // the preference's 'entries' list.
+ int index = preference.findIndexOfValue(value);
+
+ // Set the summary to reflect the new value.
+ preference
+ .setSummary((index >= 0) ? preference.getEntries()[index]
+ : null);
+
+ Log.i(OCSMSSettingsActivity.TAG, "Modifying listPreference " + key);
+
+ OCSMSSharedPrefs prefs = new OCSMSSharedPrefs(VirtualSettingsActivity._context);
+
+ // Handle sync frequency change
+ if ("sync_frequency".equals(key)) {
+ if (!PermissionChecker.checkPermission(this, Manifest.permission.GET_ACCOUNTS,
+ REQUEST_ACCOUNTS)) {
+ return;
+ }
+
+ Account[] myAccountList = OCSMSSettingsActivity._accountMgr.getAccountsByType(OCSMSSettingsActivity._accountType);
+ long syncFreq = Long.parseLong(value);
// Get ownCloud SMS account list
- for (Account acct: myAccountList) {
+ for (Account acct : myAccountList) {
// And get all authorities for this account
List syncList = ContentResolver.getPeriodicSyncs(acct, OCSMSSettingsActivity._accountAuthority);
boolean foundSameSyncCycle = false;
- for (PeriodicSync ps: syncList) {
+ for (PeriodicSync ps : syncList) {
if ((ps.period == syncFreq) && (ps.extras.getInt("synctype") == 1)) {
foundSameSyncCycle = true;
}
@@ -123,16 +148,29 @@ public class OCSMSSettingsActivity extends VirtualSettingsActivity {
b.putInt("synctype", 1);
ContentResolver.removePeriodicSync(acct, OCSMSSettingsActivity._accountAuthority, b);
- if (syncFreq > 0) {
- ContentResolver.addPeriodicSync(acct, OCSMSSettingsActivity._accountAuthority, b, syncFreq * 60);
- }
+ if (syncFreq > 0) {
+ ContentResolver.addPeriodicSync(acct, OCSMSSettingsActivity._accountAuthority, b, syncFreq * 60);
+ }
}
- prefs.putLong(key, syncFreq);
+ prefs.putLong(key, syncFreq);
}
+ } else if ("sync_bulk_messages".equals(key) || "minimum_sync_chars".equals(key)) {
+ prefs.putInteger(key, Integer.parseInt(value));
}
- else if ("sync_bulk_messages".equals(key) || "minimum_sync_chars".equals(key)) {
- prefs.putInteger(key, Integer.parseInt(value));
- }
+ }
+
+ @Override
+ public boolean onMenuItemSelected(int featureId, MenuItem item) {
+ super.onMenuItemSelected(featureId, item);
+
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ onBackPressed();
+ break;
+ default:
+ return false;
+ }
+ return true;
}
}
diff --git a/src/main/java/fr/unix_experience/owncloud_sms/activities/remote_account/AccountActionsActivity.java b/src/main/java/fr/unix_experience/owncloud_sms/activities/remote_account/AccountActionsActivity.java
index c5eae8c..cecd412 100644
--- a/src/main/java/fr/unix_experience/owncloud_sms/activities/remote_account/AccountActionsActivity.java
+++ b/src/main/java/fr/unix_experience/owncloud_sms/activities/remote_account/AccountActionsActivity.java
@@ -2,7 +2,9 @@ package fr.unix_experience.owncloud_sms.activities.remote_account;
import android.content.Intent;
import android.os.Bundle;
+import android.support.v7.app.ActionBar;
import android.util.Log;
+import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
@@ -19,6 +21,9 @@ public class AccountActionsActivity extends AppCompatListActivity {
setContentView(R.layout.activity_account_actions);
+ ActionBar actionBar = getSupportActionBar();
+ actionBar.setDisplayHomeAsUpEnabled(true);
+
ArrayList itemList = new ArrayList<>();
ArrayAdapter adp = new ArrayAdapter<>(getBaseContext(),
android.R.layout.simple_dropdown_item_1line, itemList);
@@ -33,20 +38,33 @@ public class AccountActionsActivity extends AppCompatListActivity {
_accountName = getIntent().getStringExtra("account");
}
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ boolean retval = true;
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ finish();
+ break;
+ default:
+ retval = super.onOptionsItemSelected(item);
+ }
+ return retval;
+ }
+
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
switch (position) {
case 0:
Intent intent = new Intent(this, RestoreMessagesActivity.class);
intent.putExtra("account", _accountName);
- try {
- startActivity(intent);
- }
- catch (IllegalStateException e) {
- Log.e(AccountActionsActivity.TAG, e.getMessage());
- }
+ try {
+ startActivity(intent);
+ } catch (IllegalStateException e) {
+ Log.e(AccountActionsActivity.TAG, e.getMessage());
+ }
break;
- default: break; // Unhandled
+ default:
+ break; // Unhandled
}
}
diff --git a/src/main/java/fr/unix_experience/owncloud_sms/activities/remote_account/AccountListActivity.java b/src/main/java/fr/unix_experience/owncloud_sms/activities/remote_account/AccountListActivity.java
index f80f487..f2144d5 100644
--- a/src/main/java/fr/unix_experience/owncloud_sms/activities/remote_account/AccountListActivity.java
+++ b/src/main/java/fr/unix_experience/owncloud_sms/activities/remote_account/AccountListActivity.java
@@ -3,13 +3,14 @@ package fr.unix_experience.owncloud_sms.activities.remote_account;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.os.Bundle;
+import android.view.MenuItem;
import java.util.ArrayList;
import java.util.Collections;
-import fr.unix_experience.owncloud_sms.adapters.AndroidAccountAdapter;
import fr.unix_experience.android_lib.AppCompatListActivity;
import fr.unix_experience.owncloud_sms.R;
+import fr.unix_experience.owncloud_sms.adapters.AndroidAccountAdapter;
public class AccountListActivity extends AppCompatListActivity {
@@ -21,21 +22,35 @@ public class AccountListActivity extends AppCompatListActivity {
setContentView(R.layout.restore_activity_accountlist);
- ArrayList itemList = new ArrayList<>();
+ getSupportActionBar().setHomeButtonEnabled(true);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- AndroidAccountAdapter adapter = new AndroidAccountAdapter(this,
+ ArrayList itemList = new ArrayList<>();
+
+ AndroidAccountAdapter adapter = new AndroidAccountAdapter(this,
android.R.layout.simple_list_item_1,
- itemList,
+ itemList,
R.layout.account_list_item,
R.id.accountname, AccountActionsActivity.class);
setListAdapter(adapter);
Account[] accountList =
_accountMgr.getAccountsByType(getString(R.string.account_type));
- Collections.addAll(itemList, accountList);
+ Collections.addAll(itemList, accountList);
adapter.notifyDataSetChanged();
+ }
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ onBackPressed();
+ break;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ return true;
}
}
diff --git a/src/main/java/fr/unix_experience/owncloud_sms/activities/remote_account/RestoreMessagesActivity.java b/src/main/java/fr/unix_experience/owncloud_sms/activities/remote_account/RestoreMessagesActivity.java
index 9d155c9..be14bb0 100644
--- a/src/main/java/fr/unix_experience/owncloud_sms/activities/remote_account/RestoreMessagesActivity.java
+++ b/src/main/java/fr/unix_experience/owncloud_sms/activities/remote_account/RestoreMessagesActivity.java
@@ -26,8 +26,10 @@ import android.content.pm.PackageManager;
import android.os.Bundle;
import android.provider.Telephony;
import android.support.v4.app.ActivityCompat;
+import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
+import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
@@ -49,6 +51,9 @@ public class RestoreMessagesActivity extends AppCompatActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_restore_messages);
+ ActionBar actionBar = getSupportActionBar();
+ actionBar.setDisplayHomeAsUpEnabled(true);
+
assert getIntent().getExtras() != null;
String accountName = getIntent().getExtras().getString("account");
@@ -111,6 +116,19 @@ public class RestoreMessagesActivity extends AppCompatActivity {
});
}
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ boolean retval = true;
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ finish();
+ break;
+ default:
+ retval = super.onOptionsItemSelected(item);
+ }
+ return retval;
+ }
+
private void initInterface() {
TextView tv_error = (TextView) findViewById(R.id.tv_error_default_smsapp);
tv_error.setText(R.string.error_make_default_sms_app);
@@ -132,8 +150,7 @@ public class RestoreMessagesActivity extends AppCompatActivity {
tv_error.setVisibility(View.VISIBLE);
fix_button.setVisibility(View.VISIBLE);
launch_restore.setVisibility(View.INVISIBLE);
- }
- else {
+ } else {
tv_error.setVisibility(View.INVISIBLE);
fix_button.setVisibility(View.INVISIBLE);
launch_restore.setVisibility(View.VISIBLE);
diff --git a/src/main/java/fr/unix_experience/owncloud_sms/notifications/OCSMSNotificationUI.java b/src/main/java/fr/unix_experience/owncloud_sms/notifications/OCSMSNotificationUI.java
index bf92202..0df1878 100644
--- a/src/main/java/fr/unix_experience/owncloud_sms/notifications/OCSMSNotificationUI.java
+++ b/src/main/java/fr/unix_experience/owncloud_sms/notifications/OCSMSNotificationUI.java
@@ -3,13 +3,10 @@ package fr.unix_experience.owncloud_sms.notifications;
import android.annotation.TargetApi;
import android.app.Notification;
import android.app.NotificationManager;
-import android.app.PendingIntent;
import android.content.Context;
-import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
-import android.net.Uri;
import android.os.Build;
import android.support.v4.app.NotificationCompat;
@@ -40,7 +37,7 @@ public class OCSMSNotificationUI {
// This image is used as the notification's large icon (thumbnail).
// TODO: Remove this if your notification has no relevant thumbnail.
- Bitmap picture = BitmapFactory.decodeResource(res, R.drawable.ic_launcher);
+ Bitmap picture = BitmapFactory.decodeResource(res, R.mipmap.ic_launcher);
String ticker = (titleString.length() > 20) ? titleString.substring(0, 20) : titleString;
@@ -50,31 +47,28 @@ public class OCSMSNotificationUI {
// Set appropriate defaults for the notification light, sound,
// and vibration.
- .setSmallIcon(R.drawable.ic_launcher)
+ .setSmallIcon(R.drawable.notification_icon)
.setContentTitle(title)
.setContentText(contentString)
- // All fields below this line are optional.
+ // All fields below this line are optional.
- // Use a default priority (recognized on devices running Android
- // 4.1 or later)
+ // Use a default priority (recognized on devices running Android
+ // 4.1 or later)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
- // Provide a large icon, shown with the notification in the
- // notification drawer on devices running Android 3.0 or later.
- .setLargeIcon(picture)
-
- // Set ticker text (preview) information for this notification.
+ // Set ticker text (preview) information for this notification.
//.setTicker(ticker)
- // Show a number. This is useful when stacking notifications of
- // a single type.
+ // Show a number. This is useful when stacking notifications of
+ // a single type.
.setNumber(number)
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(contentString)
.setBigContentTitle(title)
.setSummaryText(titleString))
- .setAutoCancel(true);
+ .setAutoCancel(true)
+ .setColor(context.getResources().getColor(R.color.oc_primary));
OCSMSNotificationUI.notify(context, builder.build());
}
@@ -83,25 +77,17 @@ public class OCSMSNotificationUI {
private static void notify(Context context, Notification notification) {
NotificationManager nm = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) {
- nm.notify(OCSMSNotificationUI.NOTIFICATION_TAG, 0, notification);
- } else {
- nm.notify(OCSMSNotificationUI.NOTIFICATION_TAG.hashCode(), notification);
- }
+ nm.notify(OCSMSNotificationUI.NOTIFICATION_TAG, 0, notification);
}
/**
* Cancels any notifications of this type previously shown using
- * {@link #notify(Context, String, int)}.
+ * {@link #notify(Context, String, String, int)}.
*/
@TargetApi(Build.VERSION_CODES.ECLAIR)
public static void cancel(Context context) {
NotificationManager nm = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) {
- nm.cancel(OCSMSNotificationUI.NOTIFICATION_TAG, 0);
- } else {
- nm.cancel(OCSMSNotificationUI.NOTIFICATION_TAG.hashCode());
- }
+ nm.cancel(OCSMSNotificationUI.NOTIFICATION_TAG, 0);
}
}
diff --git a/src/main/res/drawable-hdpi/logo.png b/src/main/res/drawable-hdpi/logo.png
new file mode 100644
index 0000000..54d11bc
Binary files /dev/null and b/src/main/res/drawable-hdpi/logo.png differ
diff --git a/src/main/res/drawable-hdpi/notification_icon.png b/src/main/res/drawable-hdpi/notification_icon.png
new file mode 100644
index 0000000..961401a
Binary files /dev/null and b/src/main/res/drawable-hdpi/notification_icon.png differ
diff --git a/src/main/res/drawable-mdpi/logo.png b/src/main/res/drawable-mdpi/logo.png
new file mode 100644
index 0000000..11e3a47
Binary files /dev/null and b/src/main/res/drawable-mdpi/logo.png differ
diff --git a/src/main/res/drawable-mdpi/notification_icon.png b/src/main/res/drawable-mdpi/notification_icon.png
new file mode 100644
index 0000000..28944f9
Binary files /dev/null and b/src/main/res/drawable-mdpi/notification_icon.png differ
diff --git a/src/main/res/drawable-xhdpi/logo.png b/src/main/res/drawable-xhdpi/logo.png
new file mode 100644
index 0000000..a779cf0
Binary files /dev/null and b/src/main/res/drawable-xhdpi/logo.png differ
diff --git a/src/main/res/drawable-xhdpi/notification_icon.png b/src/main/res/drawable-xhdpi/notification_icon.png
new file mode 100644
index 0000000..41cfc43
Binary files /dev/null and b/src/main/res/drawable-xhdpi/notification_icon.png differ
diff --git a/src/main/res/drawable-xxhdpi/logo.png b/src/main/res/drawable-xxhdpi/logo.png
new file mode 100644
index 0000000..61b966b
Binary files /dev/null and b/src/main/res/drawable-xxhdpi/logo.png differ
diff --git a/src/main/res/drawable-xxhdpi/notification_icon.png b/src/main/res/drawable-xxhdpi/notification_icon.png
new file mode 100644
index 0000000..c4543ad
Binary files /dev/null and b/src/main/res/drawable-xxhdpi/notification_icon.png differ
diff --git a/src/main/res/drawable-xxxhdpi/logo.png b/src/main/res/drawable-xxxhdpi/logo.png
new file mode 100644
index 0000000..e08efca
Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/logo.png differ
diff --git a/src/main/res/drawable-xxxhdpi/notification_icon.png b/src/main/res/drawable-xxxhdpi/notification_icon.png
new file mode 100644
index 0000000..384f0df
Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/notification_icon.png differ
diff --git a/src/main/res/layout/activity_login.xml b/src/main/res/layout/activity_login.xml
index 52e5256..1bce17b 100644
--- a/src/main/res/layout/activity_login.xml
+++ b/src/main/res/layout/activity_login.xml
@@ -61,7 +61,9 @@
android:id="@+id/ocsms_logo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:src="@drawable/login_logo"
+ android:paddingTop="24dp"
+ android:paddingBottom="36dp"
+ android:src="@drawable/logo"
android:contentDescription="@string/login_logo" />
-
+ android:layout_gravity="center_vertical"
+ android:popupBackground="@color/oc_primary"
+ android:entries="@array/protocol_array" />
@@ -99,9 +103,9 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/prompt_login"
+ android:textColor="@color/oc_white"
android:inputType="textEmailAddress"
- android:maxLines="1"
- android:singleLine="true" />
+ android:maxLines="1" />
+ android:textColor="@color/oc_white" />
-
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+
-
-
-
+
+ android:fitsSystemWindows="true"/>
\ No newline at end of file
diff --git a/src/main/res/layout/nav_header_main.xml b/src/main/res/layout/nav_header_main.xml
index 0a767b2..4a054cd 100644
--- a/src/main/res/layout/nav_header_main.xml
+++ b/src/main/res/layout/nav_header_main.xml
@@ -3,24 +3,21 @@
android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height"
android:background="@drawable/side_nav_bar"
- android:gravity="top"
+ android:gravity="bottom"
android:orientation="vertical"
- android:paddingBottom="@dimen/activity_vertical_margin"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
+ android:padding="@dimen/activity_horizontal_margin"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
diff --git a/src/main/res/layout/recovery_phone_list_item.xml b/src/main/res/layout/recovery_phone_list_item.xml
index f1de1b2..79701d5 100644
--- a/src/main/res/layout/recovery_phone_list_item.xml
+++ b/src/main/res/layout/recovery_phone_list_item.xml
@@ -6,6 +6,6 @@
android:id="@+id/recovery_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:padding="20dp"
- android:textSize="18sp" />
+ android:padding="@dimen/activity_vertical_margin"
+ android:textSize="18sp"/>
\ No newline at end of file
diff --git a/src/main/res/values-v14/styles.xml b/src/main/res/layout/toolbar.xml
similarity index 56%
rename from src/main/res/values-v14/styles.xml
rename to src/main/res/layout/toolbar.xml
index e871bf8..48cc823 100644
--- a/src/main/res/values-v14/styles.xml
+++ b/src/main/res/layout/toolbar.xml
@@ -1,5 +1,7 @@
+
+
-
+
-
-
+
+
+
\ No newline at end of file
diff --git a/src/main/res/drawable-hdpi/ic_launcher.png b/src/main/res/mipmap-hdpi/ic_launcher.png
similarity index 100%
rename from src/main/res/drawable-hdpi/ic_launcher.png
rename to src/main/res/mipmap-hdpi/ic_launcher.png
diff --git a/src/main/res/drawable-mdpi/ic_launcher.png b/src/main/res/mipmap-mdpi/ic_launcher.png
similarity index 100%
rename from src/main/res/drawable-mdpi/ic_launcher.png
rename to src/main/res/mipmap-mdpi/ic_launcher.png
diff --git a/src/main/res/drawable-xhdpi/ic_launcher.png b/src/main/res/mipmap-xhdpi/ic_launcher.png
similarity index 100%
rename from src/main/res/drawable-xhdpi/ic_launcher.png
rename to src/main/res/mipmap-xhdpi/ic_launcher.png
diff --git a/src/main/res/drawable-xxhdpi/ic_launcher.png b/src/main/res/mipmap-xxhdpi/ic_launcher.png
similarity index 100%
rename from src/main/res/drawable-xxhdpi/ic_launcher.png
rename to src/main/res/mipmap-xxhdpi/ic_launcher.png
diff --git a/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..0a4e4fb
Binary files /dev/null and b/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/src/main/res/values-en/strings.xml b/src/main/res/values-en/strings.xml
index f96af1e..f9aebf6 100644
--- a/src/main/res/values-en/strings.xml
+++ b/src/main/res/values-en/strings.xml
@@ -97,7 +97,7 @@
Rate us !
Add an account
Welcome
- Welcome to ownCloud SMS application. This application let you synchronize your SMS to your ownCloud instance using SMS app.
+ Welcome to Nextcloud SMS application. This application let you synchronize your SMS to your Nextcloud instance using SMS app.
Sync process
diff --git a/src/main/res/values-v21/styles.xml b/src/main/res/values-v21/styles.xml
index 3546a86..af914c8 100644
--- a/src/main/res/values-v21/styles.xml
+++ b/src/main/res/values-v21/styles.xml
@@ -1,23 +1,23 @@
-
-
-
- >
-
+
+
\ No newline at end of file
diff --git a/src/main/res/values-w820dp/dimens.xml b/src/main/res/values-w820dp/dimens.xml
index f3e7020..53d321b 100644
--- a/src/main/res/values-w820dp/dimens.xml
+++ b/src/main/res/values-w820dp/dimens.xml
@@ -6,5 +6,5 @@
would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively).
-->
64dp
-
+ 164dp
diff --git a/src/main/res/values/colors.xml b/src/main/res/values/colors.xml
index 864aaee..0188656 100644
--- a/src/main/res/values/colors.xml
+++ b/src/main/res/values/colors.xml
@@ -2,4 +2,7 @@
#0082C9
#006AA3
+ #007CC2
+ #7fC0E3
+ #ffffff
\ No newline at end of file
diff --git a/src/main/res/values/dimens.xml b/src/main/res/values/dimens.xml
index 4511974..5e2ea1f 100644
--- a/src/main/res/values/dimens.xml
+++ b/src/main/res/values/dimens.xml
@@ -6,7 +6,8 @@
22dp
16dp
- 120dp
+ 8dp
+ 140dp
16dp
diff --git a/src/main/res/values/styles.xml b/src/main/res/values/styles.xml
index cec2cde..0c459f2 100644
--- a/src/main/res/values/styles.xml
+++ b/src/main/res/values/styles.xml
@@ -27,15 +27,39 @@
-
-
-
+
+
+
+
+
+
+
+
-