Big commit: Android Studio + Re-enable ContactList view and make it working to prepare SMS restauration
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/bin/
|
Before Width: | Height: | Size: 82 KiB |
@ -1,15 +0,0 @@
|
|||||||
# This file is automatically generated by Android Tools.
|
|
||||||
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
|
|
||||||
#
|
|
||||||
# This file must be checked in Version Control Systems.
|
|
||||||
#
|
|
||||||
# To customize properties used by the Ant build system edit
|
|
||||||
# "ant.properties", and override values to adapt the script to your
|
|
||||||
# project structure.
|
|
||||||
#
|
|
||||||
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
|
|
||||||
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
|
|
||||||
|
|
||||||
# Project target.
|
|
||||||
target=android-22
|
|
||||||
android.library.reference.1=../Owncloud-Android-Library
|
|
@ -1,15 +1,20 @@
|
|||||||
package fr.unix_experience.owncloud_sms.activities.remote_account;
|
package fr.unix_experience.owncloud_sms.activities.remote_account;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.accounts.AccountManager;
|
import android.accounts.AccountManager;
|
||||||
import android.app.ListActivity;
|
import android.app.ListActivity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import fr.nrz.androidlib.adapters.AndroidAccountAdapter;
|
||||||
import fr.unix_experience.owncloud_sms.R;
|
import fr.unix_experience.owncloud_sms.R;
|
||||||
|
import fr.unix_experience.owncloud_sms.adapters.ContactListAdapter;
|
||||||
import fr.unix_experience.owncloud_sms.engine.ASyncContactLoad;
|
import fr.unix_experience.owncloud_sms.engine.ASyncContactLoad;
|
||||||
|
|
||||||
public class ContactListActivity extends ListActivity implements ASyncContactLoad {
|
public class ContactListActivity extends ListActivity implements ASyncContactLoad {
|
||||||
|
|
||||||
static AccountManager _accountMgr;
|
static AccountManager _accountMgr;
|
||||||
|
ContactListAdapter adapter;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(final Bundle savedInstanceState) {
|
protected void onCreate(final Bundle savedInstanceState) {
|
||||||
@ -26,9 +31,20 @@ public class ContactListActivity extends ListActivity implements ASyncContactLoa
|
|||||||
final Account[] myAccountList =
|
final Account[] myAccountList =
|
||||||
_accountMgr.getAccountsByType(getString(R.string.account_type));
|
_accountMgr.getAccountsByType(getString(R.string.account_type));
|
||||||
|
|
||||||
|
// Init view
|
||||||
|
ArrayList<String> objects = new ArrayList<String>();
|
||||||
|
setContentView(R.layout.restore_activity_contactlist);
|
||||||
|
adapter = new ContactListAdapter(getBaseContext(),
|
||||||
|
android.R.layout.simple_list_item_1,
|
||||||
|
objects,
|
||||||
|
R.layout.contact_list_item,
|
||||||
|
R.id.contactname);
|
||||||
|
|
||||||
|
setListAdapter(adapter);
|
||||||
|
|
||||||
for (final Account element : myAccountList) {
|
for (final Account element : myAccountList) {
|
||||||
if (element.name.equals(accountName)) {
|
if (element.name.equals(accountName)) {
|
||||||
new ContactLoadTask(element, getBaseContext()).execute();
|
new ContactLoadTask(element, getBaseContext(), adapter, objects).execute();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,52 @@
|
|||||||
|
package fr.unix_experience.owncloud_sms.adapters;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import android.content.Context;
|
||||||
|
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;
|
||||||
|
|
||||||
|
public class ContactListAdapter extends ArrayAdapter<String> {
|
||||||
|
private final ArrayList<String> _objects;
|
||||||
|
private static int _itemLayout;
|
||||||
|
private static int _fieldId;
|
||||||
|
|
||||||
|
public ContactListAdapter(final Context context, final int resource,
|
||||||
|
final ArrayList<String> objects, final int itemLayout,
|
||||||
|
final int fieldId) {
|
||||||
|
super(context, resource, resource, objects);
|
||||||
|
_objects = objects;
|
||||||
|
_itemLayout = itemLayout;
|
||||||
|
_fieldId = fieldId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getView(final int position, final View convertView, final ViewGroup parent) {
|
||||||
|
View v = convertView;
|
||||||
|
if (v == null) {
|
||||||
|
final LayoutInflater inflater =
|
||||||
|
(LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
v = inflater.inflate(_itemLayout, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
final String element = _objects.get(position);
|
||||||
|
|
||||||
|
if (element != null) {
|
||||||
|
final TextView label = (TextView) v.findViewById(_fieldId);
|
||||||
|
if (label != null) {
|
||||||
|
label.setText(element + " >");
|
||||||
|
label.setOnClickListener(new OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(final View v) {
|
||||||
|
// @TODO
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
}
|
@ -1,33 +1,46 @@
|
|||||||
package fr.unix_experience.owncloud_sms.engine;
|
package fr.unix_experience.owncloud_sms.engine;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.accounts.AccountManager;
|
import android.accounts.AccountManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
|
import android.util.Log;
|
||||||
|
import fr.unix_experience.owncloud_sms.adapters.ContactListAdapter;
|
||||||
import fr.unix_experience.owncloud_sms.exceptions.OCSyncException;
|
import fr.unix_experience.owncloud_sms.exceptions.OCSyncException;
|
||||||
|
|
||||||
public interface ASyncContactLoad {
|
public interface ASyncContactLoad {
|
||||||
class ContactLoadTask extends AsyncTask<Void, Void, Void> {
|
class ContactLoadTask extends AsyncTask<Void, Void, Boolean> {
|
||||||
private static AccountManager _accountMgr = null;
|
private static AccountManager _accountMgr = null;
|
||||||
private static Account _account;
|
private static Account _account;
|
||||||
private final Context _context;
|
private final Context _context;
|
||||||
|
private ContactListAdapter _adapter;
|
||||||
|
private ArrayList<String> _objects;
|
||||||
|
|
||||||
public ContactLoadTask(final Account account, final Context context) {
|
public ContactLoadTask(final Account account, final Context context,
|
||||||
|
ContactListAdapter adapter, ArrayList<String> objects) {
|
||||||
if (_accountMgr == null) {
|
if (_accountMgr == null) {
|
||||||
_accountMgr = AccountManager.get(context);
|
_accountMgr = AccountManager.get(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
_account = account;
|
_account = account;
|
||||||
_context = context;
|
_context = context;
|
||||||
|
_adapter = adapter;
|
||||||
|
_objects = objects;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
protected Void doInBackground(final Void... params) {
|
protected Boolean doInBackground(final Void... params) {
|
||||||
// Create client
|
// Create client
|
||||||
final String ocURI = _accountMgr.getUserData(_account, "ocURI");
|
final String ocURI = _accountMgr.getUserData(_account, "ocURI");
|
||||||
if (ocURI == null) {
|
if (ocURI == null) {
|
||||||
// @TODO: Handle the problem
|
// @TODO: Handle the problem
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Uri serverURI = Uri.parse(ocURI);
|
final Uri serverURI = Uri.parse(ocURI);
|
||||||
@ -39,15 +52,33 @@ public interface ASyncContactLoad {
|
|||||||
try {
|
try {
|
||||||
if (_client.getServerAPIVersion() < 2) {
|
if (_client.getServerAPIVersion() < 2) {
|
||||||
// @TODO: handle error
|
// @TODO: handle error
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
_client.getServerPhoneNumbers();
|
|
||||||
|
JSONArray phoneNumbers = _client.getServerPhoneNumbers();
|
||||||
|
Log.d(TAG, phoneNumbers.toString());
|
||||||
|
for (int i = 0; i < phoneNumbers.length(); i++) {
|
||||||
|
String phone = phoneNumbers.getString(i);
|
||||||
|
_objects.add(phone);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (JSONException e) {
|
||||||
|
// @TODO: handle error
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
} catch (final OCSyncException e) {
|
} catch (final OCSyncException e) {
|
||||||
// @TODO: handle error
|
// @TODO: handle error
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return null;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void onPostExecute(final Boolean success) {
|
||||||
|
_adapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static final String TAG = ASyncSMSSync.class.getSimpleName();
|
static final String TAG = ASyncContactLoad.class.getSimpleName();
|
||||||
}
|
}
|
@ -44,6 +44,7 @@ import fr.unix_experience.owncloud_sms.enums.OCSyncErrorType;
|
|||||||
import fr.unix_experience.owncloud_sms.exceptions.OCSyncException;
|
import fr.unix_experience.owncloud_sms.exceptions.OCSyncException;
|
||||||
import fr.unix_experience.owncloud_sms.prefs.OCSMSSharedPrefs;
|
import fr.unix_experience.owncloud_sms.prefs.OCSMSSharedPrefs;
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public class OCSMSOwnCloudClient {
|
public class OCSMSOwnCloudClient {
|
||||||
|
|
||||||
public OCSMSOwnCloudClient(final Context context, final Uri serverURI, final String accountName, final String accountPassword) {
|
public OCSMSOwnCloudClient(final Context context, final Uri serverURI, final String accountName, final String accountPassword) {
|
||||||
@ -86,8 +87,9 @@ public class OCSMSOwnCloudClient {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log.d(TAG, obj.toString());
|
||||||
try {
|
try {
|
||||||
return obj.getJSONArray("phonelist");
|
return obj.getJSONArray("phoneList");
|
||||||
} catch (final JSONException e) {
|
} catch (final JSONException e) {
|
||||||
Log.e(TAG, "No phonelist received from server, empty it", e);
|
Log.e(TAG, "No phonelist received from server, empty it", e);
|
||||||
return null;
|
return null;
|
||||||
@ -99,7 +101,6 @@ public class OCSMSOwnCloudClient {
|
|||||||
* If we need other API push, set it here
|
* If we need other API push, set it here
|
||||||
*/
|
*/
|
||||||
switch (_serverAPIVersion) {
|
switch (_serverAPIVersion) {
|
||||||
case 2: doPushRequestV2(smsList); break;
|
|
||||||
case 1:
|
case 1:
|
||||||
default: doPushRequestV1(smsList); break;
|
default: doPushRequestV1(smsList); break;
|
||||||
}
|
}
|
||||||
@ -192,10 +193,6 @@ public class OCSMSOwnCloudClient {
|
|||||||
Log.d(TAG, "SMS Push request said: status " + pushStatus + " - " + pushMessage);
|
Log.d(TAG, "SMS Push request said: status " + pushStatus + " - " + pushMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void doPushRequestV2(final JSONArray smsList) throws OCSyncException {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public GetMethod createGetVersionRequest() {
|
public GetMethod createGetVersionRequest() {
|
||||||
return createGetRequest(OC_GET_VERSION);
|
return createGetRequest(OC_GET_VERSION);
|
||||||
}
|
}
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 916 B After Width: | Height: | Size: 916 B |
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 821 B After Width: | Height: | Size: 821 B |
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 9.2 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
13
src/main/res/layout/contact_list_item.xml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" >
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/contactname"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:padding="20dp"
|
||||||
|
android:textSize="18sp"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
@ -103,7 +103,7 @@
|
|||||||
style="@style/StandardButton"
|
style="@style/StandardButton"
|
||||||
android:text="@string/ma_button_sync_accounts_now" />
|
android:text="@string/ma_button_sync_accounts_now" />
|
||||||
|
|
||||||
<!-- <TextView
|
<TextView
|
||||||
android:id="@+id/tv_remoteaccount"
|
android:id="@+id/tv_remoteaccount"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@ -125,7 +125,7 @@
|
|||||||
android:background="@drawable/standard_button"
|
android:background="@drawable/standard_button"
|
||||||
style="@style/StandardButton"
|
style="@style/StandardButton"
|
||||||
android:text="@string/choose_account" />
|
android:text="@string/choose_account" />
|
||||||
-->
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/imageView1"
|
android:id="@+id/imageView1"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
39
src/main/res/layout/restore_activity_contactlist.xml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<!--
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2014-2015, Loic Blot <loic.blot@unix-experience.fr>
|
||||||
|
* All rights reserved.
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
<LinearLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent" >
|
||||||
|
|
||||||
|
<ListView
|
||||||
|
android:id="@android:id/list"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent"
|
||||||
|
android:drawSelectorOnTop="false" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
@ -27,7 +27,7 @@
|
|||||||
-->
|
-->
|
||||||
<resources>
|
<resources>
|
||||||
<!-- Translation version, reference for translators -->
|
<!-- Translation version, reference for translators -->
|
||||||
<string name="translation_version">3</string>
|
<string name="gp_translation_version">3</string>
|
||||||
|
|
||||||
<!-- Translations must begin here -->
|
<!-- Translations must begin here -->
|
||||||
<string name="gp_short_description">ownCloud SMS synchronizuje vaše lokální SMS zprávy na váš server ownCloud</string>
|
<string name="gp_short_description">ownCloud SMS synchronizuje vaše lokální SMS zprávy na váš server ownCloud</string>
|
@ -27,7 +27,7 @@
|
|||||||
-->
|
-->
|
||||||
<resources>
|
<resources>
|
||||||
<!-- Translation version, reference for translators -->
|
<!-- Translation version, reference for translators -->
|
||||||
<string name="translation_version">3</string>
|
<string name="gp_translation_version">3</string>
|
||||||
|
|
||||||
<!-- Translations must begin there -->
|
<!-- Translations must begin there -->
|
||||||
<string name="gp_short_description">Mit ownCloud SMS kannst Du Deine SMS mit Deiner ownCloud synchronisieren</string>
|
<string name="gp_short_description">Mit ownCloud SMS kannst Du Deine SMS mit Deiner ownCloud synchronisieren</string>
|
@ -27,7 +27,7 @@
|
|||||||
-->
|
-->
|
||||||
<resources>
|
<resources>
|
||||||
<!-- Translation version, reference for translators -->
|
<!-- Translation version, reference for translators -->
|
||||||
<string name="translation_version">3</string>
|
<string name="gp_translation_version">3</string>
|
||||||
|
|
||||||
<!-- Translations must begin here -->
|
<!-- Translations must begin here -->
|
||||||
<string name="gp_short_description">ownCloud SMS synchronize your local SMS on your ownCloud instance</string>
|
<string name="gp_short_description">ownCloud SMS synchronize your local SMS on your ownCloud instance</string>
|
@ -27,7 +27,7 @@
|
|||||||
-->
|
-->
|
||||||
<resources>
|
<resources>
|
||||||
<!-- Translation version, reference for translators -->
|
<!-- Translation version, reference for translators -->
|
||||||
<string name="translation_version">0</string>
|
<string name="gp_translation_version">0</string>
|
||||||
<string name="gp_short_description">ownCloud SMS sincroniza sus mensajes SMS locales en su servidor ownCloud</string>
|
<string name="gp_short_description">ownCloud SMS sincroniza sus mensajes SMS locales en su servidor ownCloud</string>
|
||||||
<string name="gp_description">
|
<string name="gp_description">
|
||||||
La aplicación ownCloud SMS sincroniza sus mensajes SMS en un servidor ownCloud remoto y le permite leer sus mensajes desde él.
|
La aplicación ownCloud SMS sincroniza sus mensajes SMS en un servidor ownCloud remoto y le permite leer sus mensajes desde él.
|
@ -27,7 +27,7 @@
|
|||||||
-->
|
-->
|
||||||
<resources>
|
<resources>
|
||||||
<!-- Translation version, reference for translators -->
|
<!-- Translation version, reference for translators -->
|
||||||
<string name="translation_version">3</string>
|
<string name="gp_translation_version">3</string>
|
||||||
|
|
||||||
<!-- Translations must begin there -->
|
<!-- Translations must begin there -->
|
||||||
<string name="gp_short_description">ownCloud SMS permet de synchroniser vos SMS sur votre instance ownCloud</string>
|
<string name="gp_short_description">ownCloud SMS permet de synchroniser vos SMS sur votre instance ownCloud</string>
|
@ -27,7 +27,7 @@
|
|||||||
-->
|
-->
|
||||||
<resources>
|
<resources>
|
||||||
<!-- Translation version, reference for translators -->
|
<!-- Translation version, reference for translators -->
|
||||||
<string name="translation_version">3</string>
|
<string name="gp_translation_version">3</string>
|
||||||
|
|
||||||
<!-- Translations must begin here -->
|
<!-- Translations must begin here -->
|
||||||
<string name="gp_short_description">Оунклауд СМС синхронизује ваше локалне СМС поруке на ваш Оунклауд налог</string>
|
<string name="gp_short_description">Оунклауд СМС синхронизује ваше локалне СМС поруке на ваш Оунклауд налог</string>
|
@ -28,7 +28,7 @@
|
|||||||
-->
|
-->
|
||||||
<resources>
|
<resources>
|
||||||
<!-- Translation version, reference for translators -->
|
<!-- Translation version, reference for translators -->
|
||||||
<string name="translation_version">4</string>
|
<string name="gp_translation_version">4</string>
|
||||||
<!-- Translations must begin here -->
|
<!-- Translations must begin here -->
|
||||||
<string name="gp_short_description">ownCloud SMS synkroniserar dina lokala SMS till din ownCloudinstans.</string>
|
<string name="gp_short_description">ownCloud SMS synkroniserar dina lokala SMS till din ownCloudinstans.</string>
|
||||||
<string name="gp_description">
|
<string name="gp_description">
|
@ -27,7 +27,7 @@
|
|||||||
-->
|
-->
|
||||||
<resources>
|
<resources>
|
||||||
<!-- Translation version, reference for translators -->
|
<!-- Translation version, reference for translators -->
|
||||||
<string name="translation_version">3</string>
|
<string name="gp_translation_version">3</string>
|
||||||
|
|
||||||
<!-- Translations must begin here -->
|
<!-- Translations must begin here -->
|
||||||
<string name="gp_short_description">ownCloud SMS synchronize your local SMS on your ownCloud instance</string>
|
<string name="gp_short_description">ownCloud SMS synchronize your local SMS on your ownCloud instance</string>
|