From e7a37970a42b44872095fb7af1f140ee66660c3f Mon Sep 17 00:00:00 2001 From: Henry Addo Date: Sun, 4 Aug 2013 00:12:21 +0900 Subject: [PATCH] Move heavy operations off the ui thread --- .../smssync/fragments/BaseListFragment.java | 44 +- .../smssync/fragments/PendingMessages.java | 441 +++++++++--------- .../fragments/SentMessageFragment.java | 56 ++- .../smssync/fragments/SyncUrlFragment.java | 36 +- .../smssync/views/SentMessagesView.java | 12 + .../org/addhen/smssync/views/SyncUrlView.java | 8 + smssync/src/main/res/layout/list_items.xml | 13 + smssync/src/main/res/layout/list_messages.xml | 11 +- smssync/src/main/res/layout/list_sync_url.xml | 12 +- smssync/src/main/res/layout/sent_messages.xml | 11 +- 10 files changed, 328 insertions(+), 316 deletions(-) create mode 100644 smssync/src/main/res/layout/list_items.xml diff --git a/smssync/src/main/java/org/addhen/smssync/fragments/BaseListFragment.java b/smssync/src/main/java/org/addhen/smssync/fragments/BaseListFragment.java index ca9a02d56..bb17fd7a5 100644 --- a/smssync/src/main/java/org/addhen/smssync/fragments/BaseListFragment.java +++ b/smssync/src/main/java/org/addhen/smssync/fragments/BaseListFragment.java @@ -36,6 +36,7 @@ import android.widget.AdapterView; import android.widget.ListView; import android.widget.ProgressBar; +import android.widget.TextView; import android.widget.Toast; import com.actionbarsherlock.app.SherlockListFragment; @@ -88,6 +89,7 @@ public abstract class BaseListFragment adapterView, public void onNothingSelected(AdapterView adapterView) { } - /** - * ProgressTask sub-class for showing Loading... dialog while the - * BaseListAdapter loads the data - */ - protected class LoadingTask extends ProgressTask { - public LoadingTask(Activity activity) { - super(activity); - } - - @Override - protected void onPreExecute() { - super.onPreExecute(); - dialog.cancel(); - } - - @Override - protected Boolean doInBackground(String... args) { - - adapter.refresh(); - - return true; - } - - @Override - protected void onPostExecute(Boolean success) { - super.onPostExecute(success); - - onLoaded(success); - listView.setAdapter(adapter); - } - } - protected void log(String message) { Logger.log(getClass().getName(), message); } diff --git a/smssync/src/main/java/org/addhen/smssync/fragments/PendingMessages.java b/smssync/src/main/java/org/addhen/smssync/fragments/PendingMessages.java index 711ef994a..89d0bdb77 100644 --- a/smssync/src/main/java/org/addhen/smssync/fragments/PendingMessages.java +++ b/smssync/src/main/java/org/addhen/smssync/fragments/PendingMessages.java @@ -20,18 +20,16 @@ package org.addhen.smssync.fragments; -import java.text.DateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.LinkedHashSet; +import com.actionbarsherlock.view.MenuItem; +import com.squareup.otto.Subscribe; import org.addhen.smssync.MainApplication; import org.addhen.smssync.Prefs; -import org.addhen.smssync.messages.ProcessSms; import org.addhen.smssync.R; import org.addhen.smssync.SyncDate; import org.addhen.smssync.adapters.PendingMessagesAdapter; import org.addhen.smssync.listeners.PendingMessagesActionModeListener; +import org.addhen.smssync.messages.ProcessSms; import org.addhen.smssync.models.Message; import org.addhen.smssync.services.SyncPendingMessagesService; import org.addhen.smssync.tasks.ProgressTask; @@ -57,26 +55,133 @@ import android.view.View; import android.widget.ListView; -import com.actionbarsherlock.view.MenuItem; -import com.squareup.otto.Subscribe; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.LinkedHashSet; public class PendingMessages extends BaseListFragment implements android.view.View.OnClickListener { - private Intent syncPendingMessagesServiceIntent; + private static final String STATE_CHECKED = "org.addhen.smssync.fragments.STATE_CHECKED"; + + /** + * Delete individual messages 0 - Successfully deleted. 1 - There is nothing to be deleted. + */ + final Runnable mDeleteMessagesById = new Runnable() { + public void run() { + log("mDeleteMessagesById()"); + getActivity().setProgressBarIndeterminateVisibility(true); + boolean result = false; + + int deleted = 0; + + if (adapter.getCount() == 0) { + deleted = 1; + } else { + log("deletebyId position: " + mSelectedItemsPositions.size()); + for (Integer position : mSelectedItemsPositions) { + model.deleteMessagesByUuid(adapter.getItem(position).getUuid()); + } + result = true; + } + + try { + if (deleted == 1) { + toastLong(R.string.no_messages_to_delete); + } else { + + if (result) { + toastLong(R.string.messages_deleted); + + } else { + toastLong(R.string.messages_deleted_failed); + } + } + + // destory the action mode dialog + multichoiceActionModeListener.activeMode.finish(); + multichoiceActionModeListener.getSelectedItemPositions().clear(); + getActivity().setProgressBarIndeterminateVisibility(false); + refreshListView(); + } catch (Exception e) { + return; + } + } + }; private final Handler mHandler; + private Intent syncPendingMessagesServiceIntent; + private Message model; private LinkedHashSet mSelectedItemsPositions; - private static final String STATE_CHECKED = "org.addhen.smssync.fragments.STATE_CHECKED"; - private PendingMessagesActionModeListener multichoiceActionModeListener; + /** + * This will refresh content of the listview aka the pending messages when smssync successfully + * syncs pending messages. + */ + private BroadcastReceiver failedReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (intent != null) { + int status = intent.getIntExtra("failed", 1); + + if (status == 0) { + refreshListView(); + } + } + } + }; + + // when sms has been sent + private BroadcastReceiver smsSentReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + int result = getResultCode(); + log("smsSentReceiver onReceive result: " + result); + switch (result) { + case Activity.RESULT_OK: + toastLong(R.string.sms_status_success); + break; + case SmsManager.RESULT_ERROR_GENERIC_FAILURE: + toastLong(R.string.sms_delivery_status_failed); + break; + case SmsManager.RESULT_ERROR_NO_SERVICE: + toastLong(R.string.sms_delivery_status_no_service); + break; + case SmsManager.RESULT_ERROR_NULL_PDU: + toastLong(R.string.sms_delivery_status_null_pdu); + break; + case SmsManager.RESULT_ERROR_RADIO_OFF: + toastLong(R.string.sms_delivery_status_radio_off); + break; + } + } + }; + + // when sms has been delivered + private BroadcastReceiver smsDeliveredReceiver = new BroadcastReceiver() { + public void onReceive(Context context, Intent intent) { + int result = getResultCode(); + log("smsDeliveredReceiver onReceive result: " + + result); + switch (result) { + case Activity.RESULT_OK: + toastLong(R.string.sms_delivered); + break; + case Activity.RESULT_CANCELED: + toastLong(R.string.sms_not_delivered); + break; + } + } + }; + public PendingMessages() { super(PendingMessagesView.class, PendingMessagesAdapter.class, R.layout.list_messages, R.menu.pending_messages_menu, @@ -112,7 +217,7 @@ public void onActivityCreated(Bundle savedInstanceState) { } } view.sync.setOnClickListener(this); - view.emptyView.setVisibility(View.GONE); + MainApplication.bus.register(this); } @@ -134,7 +239,7 @@ public void onResume() { getActivity().registerReceiver(smsDeliveredReceiver, new IntentFilter(ServicesConstants.DELIVERED)); idle(); - + new LoadingTask(getActivity()).execute((String) null); } @Override @@ -216,9 +321,6 @@ private void initSync() { /** * The last time the sync item was done. - * - * @param lastSync - * @return */ private String getLastSyncText(final long lastSync) { return getString(R.string.idle_details, @@ -238,7 +340,7 @@ public boolean performAction(MenuItem item) { } else if (item.getItemId() == R.id.context_sync) { // Synchronize by ID // only initialize selected items positions if this action is taken - mSelectedItemsPositions =multichoiceActionModeListener.getSelectedItemPositions(); + mSelectedItemsPositions = multichoiceActionModeListener.getSelectedItemPositions(); startSync(); multichoiceActionModeListener.activeMode.finish(); multichoiceActionModeListener.getSelectedItemPositions().clear(); @@ -276,8 +378,8 @@ public void onClick(DialogInterface dialog, int id) { new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // delete all messages - mHandler.post(mDeleteAllMessages); - adapter.refresh(); + new DeleteTask(getActivity()).execute((String) null); + } }); AlertDialog alert = builder.create(); @@ -331,9 +433,10 @@ public void onClick(DialogInterface dialog, int id) { new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // Delete by ID - mHandler.post(mDeleteMessagesById); - adapter.refresh(); - + DeleteTask deleteTask = new DeleteTask(getActivity()); + deleteTask.deletebyUuid = true; + deleteTask.execute((String) null); + } }); AlertDialog alert = builder.create(); @@ -341,165 +444,26 @@ public void onClick(DialogInterface dialog, int id) { } - // Display pending messages. - final Runnable mUpdateListView = new Runnable() { - public void run() { - log("mUpdateListView()"); - showMessages(); - } - }; - - // Synchronize all pending messages. - final Runnable mSyncMessages = new Runnable() { - public void run() { - log("mSyncMessages()"); - Prefs.loadPreferences(getActivity()); - if (Prefs.enabled) { - int result = 0; - try { - if (result == 0) { - toastLong(R.string.sending_succeeded); - } else if (result == 1) { - toastLong(R.string.sending_failed); - } - } catch (Exception e) { - return; - } - } else { - toastLong(R.string.smssync_not_enabled); - } - } - }; - - /** - * Synchronize all pending messages by message id. Which means it - * synchronizes messages individually. - */ - final Runnable mSyncMessagesById = new Runnable() { - public void run() { - log("mSyncMessagesById()"); - Prefs.loadPreferences(getActivity()); - if (Prefs.enabled) { - int result = 0; - try { - if (result == 0) { - toastLong(R.string.sending_succeeded); - showMessages(); - } else if (result == 1) { - toastLong(R.string.sync_failed); - } - } catch (Exception e) { - return; - } - } else { - toastLong(R.string.smssync_not_enabled); - } - } - }; - - /** - * Delete all messages. 0 - Successfully deleted. 1 - There is nothing to be - * deleted. - */ - final Runnable mDeleteAllMessages = new Runnable() { - public void run() { - log("mDeleteAllMessages()"); - getActivity().setProgressBarIndeterminateVisibility(true); - boolean result = false; - - int deleted = 0; - - if (adapter.getCount() == 0) { - deleted = 1; - } else { - result = model.deleteAllMessages(); - } - - try { - if (deleted == 1) { - toastLong(R.string.no_messages_to_delete); - } else { - if (result) { - - toastLong(R.string.messages_deleted); - showMessages(); - } else { - toastLong(R.string.messages_deleted_failed); - } - } - getActivity().setProgressBarIndeterminateVisibility(false); - } catch (Exception e) { - return; - } - } - }; - - /** - * Delete individual messages 0 - Successfully deleted. 1 - There is nothing - * to be deleted. - */ - final Runnable mDeleteMessagesById = new Runnable() { - public void run() { - log("mDeleteMessagesById()"); - getActivity().setProgressBarIndeterminateVisibility(true); - boolean result = false; - - int deleted = 0; - - if (adapter.getCount() == 0) { - deleted = 1; - } else { - log("deletebyId position: " + mSelectedItemsPositions.size()); - for (Integer position : mSelectedItemsPositions) { - model.deleteMessagesByUuid(adapter.getItem(position).getUuid()); - } - result = true; - } - - try { - if (deleted == 1) { - toastLong(R.string.no_messages_to_delete); - } else { - - if (result) { - toastLong(R.string.messages_deleted); - - } else { - toastLong(R.string.messages_deleted_failed); - } - } - showMessages(); - // destory the action mode dialog - multichoiceActionModeListener.activeMode.finish(); - multichoiceActionModeListener.getSelectedItemPositions().clear(); - getActivity().setProgressBarIndeterminateVisibility(false); - } catch (Exception e) { - return; - } - } - }; - /** * Get messages from the database. - * + * * @return void */ public void showMessages() { - log("showMessages()"); + new LoadingTask(getActivity()).execute((String) null); + } - if (adapter != null) { - view.listLoadingProgress.setVisibility(View.VISIBLE); - adapter.refresh(); - view.listLoadingProgress.setVisibility(View.GONE); - } + public void refreshListView() { + new LoadingTask(getActivity()).execute((String) null); } @Subscribe public void syncStateChanged(final SyncPendingMessagesState newState) { log("syncChanged:" + newState); - if (view == null || newState.syncType.isBackground()) + if (view == null || newState.syncType.isBackground()) { return; + } stateChanged(newState); @@ -596,11 +560,6 @@ private void setButtonsToDefault() { view.sync.setText(R.string.sync); } - @Override - protected void onLoaded(boolean success) { - view.listLoadingProgress.setVisibility(View.GONE); - } - // Thread class to handle synchronous execution of message importation task. private class ImportMessagesTask extends ProgressTask { @@ -617,6 +576,10 @@ public ImportMessagesTask(Activity activity) { protected Boolean doInBackground(String... args) { status = new ProcessSms(appContext).importMessages(); + //TODO:: refactor the status code to a boolean value + if (status == 0) { + model.load(); + } return true; } @@ -625,7 +588,7 @@ protected void onPostExecute(Boolean success) { super.onPostExecute(success); if (success) { if (status == 0) { - showMessages(); + adapter.setItems(model.getMessageList()); } else if (status == 1) { toastLong(R.string.nothing_to_import); } @@ -634,62 +597,102 @@ protected void onPostExecute(Boolean success) { } /** - * This will refresh content of the listview aka the pending messages when - * smssync successfully syncs pending messages. + * ProgressTask sub-class for showing Loading... dialog while the BaseListAdapter loads the + * data */ - private BroadcastReceiver failedReceiver = new BroadcastReceiver() { + protected class LoadingTask extends ProgressTask { + + public LoadingTask(Activity activity) { + super(activity); + + } + @Override - public void onReceive(Context context, Intent intent) { - if (intent != null) { - int status = intent.getIntExtra("failed", 1); + protected void onPreExecute() { + super.onPreExecute(); + dialog.cancel(); + view.emptyView.setVisibility(android.view.View.GONE); + } - if (status == 0) { - mHandler.post(mUpdateListView); - } + @Override + protected Boolean doInBackground(String... args) { + return model.load(); + } + + @Override + protected void onPostExecute(Boolean success) { + super.onPostExecute(success); + if (success) { + view.listLoadingProgress.setVisibility(android.view.View.GONE); + view.emptyView.setVisibility(View.VISIBLE); + adapter.setItems(model.getMessageList()); + listView.setAdapter(adapter); } } - }; - // when sms has been sent - private BroadcastReceiver smsSentReceiver = new BroadcastReceiver() { + } + + protected class DeleteTask extends ProgressTask { + + protected boolean deletebyUuid = false; + + protected int deleted = 0; + + public DeleteTask(Activity activity) { + super(activity); + + } + @Override - public void onReceive(Context context, Intent intent) { - int result = getResultCode(); - log("smsSentReceiver onReceive result: " + result); - switch (result) { - case Activity.RESULT_OK: - toastLong(R.string.sms_status_success); - break; - case SmsManager.RESULT_ERROR_GENERIC_FAILURE: - toastLong(R.string.sms_delivery_status_failed); - break; - case SmsManager.RESULT_ERROR_NO_SERVICE: - toastLong(R.string.sms_delivery_status_no_service); - break; - case SmsManager.RESULT_ERROR_NULL_PDU: - toastLong(R.string.sms_delivery_status_null_pdu); - break; - case SmsManager.RESULT_ERROR_RADIO_OFF: - toastLong(R.string.sms_delivery_status_radio_off); - break; + protected void onPreExecute() { + super.onPreExecute(); + dialog.cancel(); + activity.setProgressBarIndeterminateVisibility(true); + } + + @Override + protected Boolean doInBackground(String... args) { + + if (adapter.getCount() == 0) { + deleted = 1; + } else { + // delete by uuid is set + if (deletebyUuid) { + log("deletedbyId position: " + mSelectedItemsPositions.size()); + for (Integer position : mSelectedItemsPositions) { + model.deleteMessagesByUuid(adapter.getItem(position).getUuid()); + } + } else { + model.deleteAllMessages(); + } + deleted = 2; } + return model.load(); } - }; - // when sms has been delivered - private BroadcastReceiver smsDeliveredReceiver = new BroadcastReceiver() { - public void onReceive(Context context, Intent intent) { - int result = getResultCode(); - log("smsDeliveredReceiver onReceive result: " - + result); - switch (result) { - case Activity.RESULT_OK: - toastLong(R.string.sms_delivered); - break; - case Activity.RESULT_CANCELED: - toastLong(R.string.sms_not_delivered); - break; + + @Override + protected void onPostExecute(Boolean success) { + super.onPostExecute(success); + if (success) { + activity.setProgressBarIndeterminateVisibility(false); + view.emptyView.setVisibility(View.VISIBLE); + if (deleted == 1) { + toastLong(R.string.no_messages_to_delete); + } else { + + if (deleted == 2) { + toastLong(R.string.messages_deleted); + + } else { + toastLong(R.string.messages_deleted_failed); + } + } + adapter.setItems(model.getMessageList()); + multichoiceActionModeListener.activeMode.finish(); + multichoiceActionModeListener.getSelectedItemPositions().clear(); + listView.setAdapter(adapter); } } - }; + } } diff --git a/smssync/src/main/java/org/addhen/smssync/fragments/SentMessageFragment.java b/smssync/src/main/java/org/addhen/smssync/fragments/SentMessageFragment.java index 659897e75..66fdd4ed2 100644 --- a/smssync/src/main/java/org/addhen/smssync/fragments/SentMessageFragment.java +++ b/smssync/src/main/java/org/addhen/smssync/fragments/SentMessageFragment.java @@ -26,11 +26,13 @@ import org.addhen.smssync.adapters.SentMessagesAdapter; import org.addhen.smssync.listeners.SentMessagesActionModeListener; import org.addhen.smssync.models.SentMessagesModel; +import org.addhen.smssync.tasks.ProgressTask; import org.addhen.smssync.tasks.state.SyncPendingMessagesState; import org.addhen.smssync.util.ServicesConstants; import org.addhen.smssync.util.Util; import org.addhen.smssync.views.SentMessagesView; +import android.app.Activity; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; @@ -39,6 +41,7 @@ import android.content.IntentFilter; import android.os.Bundle; import android.os.Handler; +import android.view.View; import android.widget.ListView; import com.actionbarsherlock.view.MenuItem; @@ -89,7 +92,7 @@ public void onResume() { getActivity().registerReceiver(broadcastReceiver, new IntentFilter(ServicesConstants.AUTO_SYNC_ACTION)); //mHandler.post(mDisplayMessages); - + refresh(); MainApplication.bus.register(this); } @@ -122,12 +125,6 @@ public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } - // Display pending messages. - final Runnable mDisplayMessages = new Runnable() { - public void run() { - refresh(); - } - }; /** * Delete all messages. 0 - Successfully deleted. 1 - There is nothing to be @@ -270,17 +267,8 @@ private void updateRefreshStatus() { } - @Override - protected void onLoaded(boolean success) { - // TODO Auto-generated method stub - - } - public void refresh() { - - if (adapter != null) - adapter.refresh(); - + new LoadingTask(getActivity()).execute((String)null); } @Subscribe @@ -289,7 +277,7 @@ public void syncStateChanged(final SyncPendingMessagesState newState) { switch (newState.state) { case FINISHED_SYNC: case CANCELED_SYNC: - mHandler.post(mDisplayMessages); + refresh(); break; } @@ -305,9 +293,39 @@ public void syncStateChanged(final SyncPendingMessagesState newState) { @Override public void onReceive(Context context, Intent intent) { if (intent != null) { - mHandler.post(mDisplayMessages); + refresh(); } } }; + private class LoadingTask extends ProgressTask { + + public LoadingTask(Activity activity) { + super(activity); + + } + + @Override + protected void onPreExecute() { + super.onPreExecute(); + dialog.cancel(); + view.emptyView.setVisibility(android.view.View.GONE); + } + + @Override + protected Boolean doInBackground(String... args) { + return model.load(); + } + + @Override + protected void onPostExecute(Boolean success) { + super.onPostExecute(success); + if(success) { + view.listLoadingProgress.setVisibility(android.view.View.GONE); + view.emptyView.setVisibility(View.VISIBLE); + adapter.setItems(model.listMessages); + listView.setAdapter(adapter); + } + } + } } diff --git a/smssync/src/main/java/org/addhen/smssync/fragments/SyncUrlFragment.java b/smssync/src/main/java/org/addhen/smssync/fragments/SyncUrlFragment.java index e8277c73c..aa63d424c 100644 --- a/smssync/src/main/java/org/addhen/smssync/fragments/SyncUrlFragment.java +++ b/smssync/src/main/java/org/addhen/smssync/fragments/SyncUrlFragment.java @@ -423,10 +423,6 @@ public void loadByStatus() { new LoadingStatusTask(getActivity()).execute(); } - @Override - protected void onLoaded(boolean success) { - // TODO Auto-generated method stub - } /** * Get messages from the db and push them to the configured callback URL @@ -534,7 +530,37 @@ protected Boolean doInBackground(String... strings) { @Override protected void onPostExecute(Boolean success) { super.onPostExecute(success); - onLoaded(success); + } + } + + private class LoadingTask extends ProgressTask { + + public LoadingTask(Activity activity) { + super(activity); + + } + + @Override + protected void onPreExecute() { + super.onPreExecute(); + dialog.cancel(); + view.emptyView.setVisibility(android.view.View.GONE); + } + + @Override + protected Boolean doInBackground(String... args) { + return model.load(); + } + + @Override + protected void onPostExecute(Boolean success) { + super.onPostExecute(success); + if(success) { + view.listLoadingProgress.setVisibility(android.view.View.GONE); + view.emptyView.setVisibility(View.VISIBLE); + adapter.setItems(model.getSyncUrlList()); + listView.setAdapter(adapter); + } } } diff --git a/smssync/src/main/java/org/addhen/smssync/views/SentMessagesView.java b/smssync/src/main/java/org/addhen/smssync/views/SentMessagesView.java index 14b8be092..23b7dd9f7 100644 --- a/smssync/src/main/java/org/addhen/smssync/views/SentMessagesView.java +++ b/smssync/src/main/java/org/addhen/smssync/views/SentMessagesView.java @@ -20,9 +20,21 @@ package org.addhen.smssync.views; +import org.addhen.smssync.R; + import android.app.Activity; +import android.widget.ProgressBar; +import android.widget.TextView; + public class SentMessagesView extends View { + + @Widget(R.id.loading_list_progress) + public ProgressBar listLoadingProgress; + + @Widget(android.R.id.empty) + public TextView emptyView; + public SentMessagesView(Activity activity) { super(activity); } diff --git a/smssync/src/main/java/org/addhen/smssync/views/SyncUrlView.java b/smssync/src/main/java/org/addhen/smssync/views/SyncUrlView.java index 3e7384fa6..dd6fc6af1 100644 --- a/smssync/src/main/java/org/addhen/smssync/views/SyncUrlView.java +++ b/smssync/src/main/java/org/addhen/smssync/views/SyncUrlView.java @@ -24,12 +24,20 @@ import android.app.Activity; import android.widget.CheckBox; +import android.widget.ProgressBar; +import android.widget.TextView; public class SyncUrlView extends View { @Widget(R.id.start_checkbox) public CheckBox enableSmsSync; + @Widget(R.id.loading_list_progress) + public ProgressBar listLoadingProgress; + + @Widget(android.R.id.empty) + public TextView emptyView; + public SyncUrlView(Activity activity) { super(activity); } diff --git a/smssync/src/main/res/layout/list_items.xml b/smssync/src/main/res/layout/list_items.xml new file mode 100644 index 000000000..18d1a1d9d --- /dev/null +++ b/smssync/src/main/res/layout/list_items.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/smssync/src/main/res/layout/list_messages.xml b/smssync/src/main/res/layout/list_messages.xml index 52b539ab9..5e6ccbeb0 100644 --- a/smssync/src/main/res/layout/list_messages.xml +++ b/smssync/src/main/res/layout/list_messages.xml @@ -24,16 +24,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" > - - - - + \ No newline at end of file diff --git a/smssync/src/main/res/layout/list_sync_url.xml b/smssync/src/main/res/layout/list_sync_url.xml index fd57530c1..6fdc6c7d0 100644 --- a/smssync/src/main/res/layout/list_sync_url.xml +++ b/smssync/src/main/res/layout/list_sync_url.xml @@ -25,15 +25,5 @@ - - - - + \ No newline at end of file diff --git a/smssync/src/main/res/layout/sent_messages.xml b/smssync/src/main/res/layout/sent_messages.xml index 641d627a6..f746e1902 100644 --- a/smssync/src/main/res/layout/sent_messages.xml +++ b/smssync/src/main/res/layout/sent_messages.xml @@ -15,14 +15,5 @@ android:layout_height="match_parent" > - - - - - + \ No newline at end of file