Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-notes.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorstefan-niedermann <info@niedermann.it>2019-02-08 12:52:41 +0300
committerstefan-niedermann <info@niedermann.it>2019-02-08 12:52:41 +0300
commit7e75743320ff52271436db6d23ff9b7523e5ca3d (patch)
tree5a35344a3cd7e1fc7510bf685046090d1585b130 /app/src
parente080c42a4f28b31898c940295528da9f48138ba3 (diff)
#519 Synchronize on WiFi only
- Use `OnSharedPreferencesListener` instead of polling the wifi-only-preference every time
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java70
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java38
2 files changed, 70 insertions, 38 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java
index 14e9e213..1d316083 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java
@@ -10,20 +10,6 @@ import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
-import androidx.annotation.Nullable;
-import com.google.android.material.floatingactionbutton.FloatingActionButton;
-import com.google.android.material.snackbar.Snackbar;
-import androidx.drawerlayout.widget.DrawerLayout;
-import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
-import androidx.appcompat.app.ActionBarDrawerToggle;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.view.ActionMode;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-import androidx.appcompat.widget.SearchView;
-import androidx.appcompat.widget.Toolbar;
-import androidx.recyclerview.widget.ItemTouchHelper;
-import androidx.recyclerview.widget.ItemTouchHelper.SimpleCallback;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
@@ -33,10 +19,26 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
+import com.google.android.material.floatingactionbutton.FloatingActionButton;
+import com.google.android.material.snackbar.Snackbar;
+
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.ActionBarDrawerToggle;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.view.ActionMode;
+import androidx.appcompat.widget.SearchView;
+import androidx.appcompat.widget.Toolbar;
+import androidx.drawerlayout.widget.DrawerLayout;
+import androidx.recyclerview.widget.ItemTouchHelper;
+import androidx.recyclerview.widget.ItemTouchHelper.SimpleCallback;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import butterknife.BindView;
import butterknife.ButterKnife;
import it.niedermann.owncloud.notes.R;
@@ -389,7 +391,7 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
listView.setLayoutManager(new LinearLayoutManager(this));
ItemTouchHelper touchHelper = new ItemTouchHelper(new SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
- public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
+ public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@@ -401,7 +403,7 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
* @return 0 if section, otherwise super()
*/
@Override
- public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
+ public int getSwipeDirs(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
if (viewHolder instanceof ItemAdapter.SectionViewHolder) return 0;
return super.getSwipeDirs(recyclerView, viewHolder);
}
@@ -413,8 +415,8 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
* @param direction int
*/
@Override
- public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
- switch(direction) {
+ public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
+ switch (direction) {
case ItemTouchHelper.LEFT: {
final DBNote dbNote = (DBNote) adapter.getItem(viewHolder.getAdapterPosition());
db.deleteNoteAndSync((dbNote).getId());
@@ -444,16 +446,16 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
}
@Override
- public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
+ public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
ItemAdapter.NoteViewHolder noteViewHolder = (ItemAdapter.NoteViewHolder) viewHolder;
// show swipe icon on the side
- noteViewHolder.showSwipe(dX>0);
+ noteViewHolder.showSwipe(dX > 0);
// move only swipeable part of item (not leave-behind)
getDefaultUIUtil().onDraw(c, recyclerView, noteViewHolder.noteSwipeable, dX, dY, actionState, isCurrentlyActive);
}
@Override
- public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
+ public void clearView(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
getDefaultUIUtil().clearView(((ItemAdapter.NoteViewHolder) viewHolder).noteSwipeable);
}
});
@@ -463,6 +465,7 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
private void refreshLists() {
refreshLists(false);
}
+
private void refreshLists(final boolean scrollToTop) {
String subtitle = "";
if (navigationSelection.category != null) {
@@ -487,7 +490,7 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
public void onNotesLoaded(List<Item> notes, boolean showCategory) {
adapter.setShowCategory(showCategory);
adapter.setItemList(notes);
- if(scrollToTop) {
+ if (scrollToTop) {
listView.scrollToPosition(0);
}
}
@@ -522,6 +525,7 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
searchEditFrame.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
int oldVisibility = -1;
+
@Override
public void onGlobalLayout() {
int currentVisibility = searchEditFrame.getVisibility();
@@ -582,8 +586,17 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
if (resultCode == RESULT_OK) {
//not need because of db.synchronisation in createActivity
- DBNote createdNote = (DBNote) data.getExtras().getSerializable(CREATED_NOTE);
- adapter.add(createdNote);
+ Bundle bundle = data.getExtras();
+ if (bundle != null) {
+ DBNote createdNote = (DBNote) data.getExtras().getSerializable(CREATED_NOTE);
+ if (createdNote != null) {
+ adapter.add(createdNote);
+ } else {
+ Log.w(NotesListViewActivity.class.getSimpleName(), "createdNote is null");
+ }
+ } else {
+ Log.w(NotesListViewActivity.class.getSimpleName(), "bundle is null");
+ }
}
listView.scrollToPosition(0);
} else if (requestCode == server_settings) {
@@ -602,8 +615,13 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
private void updateUsernameInDrawer() {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String username = preferences.getString(SettingsActivity.SETTINGS_USERNAME, SettingsActivity.DEFAULT_SETTINGS);
- String url = preferences.getString(SettingsActivity.SETTINGS_URL, SettingsActivity.DEFAULT_SETTINGS).replace("https://", "").replace("http://", "");
- if(!SettingsActivity.DEFAULT_SETTINGS.equals(username) && !SettingsActivity.DEFAULT_SETTINGS.equals(url)) {
+ String url = preferences.getString(SettingsActivity.SETTINGS_URL, SettingsActivity.DEFAULT_SETTINGS);
+ if (url != null) {
+ url = url.replace("https://", "").replace("http://", "");
+ } else {
+ Log.w(NotesListViewActivity.class.getSimpleName(), "url is null");
+ }
+ if (!SettingsActivity.DEFAULT_SETTINGS.equals(username) && !SettingsActivity.DEFAULT_SETTINGS.equals(url)) {
this.account.setText(username + "@" + url.substring(0, url.length() - 1));
}
}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java
index cf214de5..dfeca986 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java
@@ -67,6 +67,15 @@ public class NoteServerSyncHelper {
// Track network connection changes using a BroadcastReceiver
private boolean networkConnected = false;
+ boolean syncOnlyOnWifi = false;
+
+ private SharedPreferences.OnSharedPreferenceChangeListener onSharedPreferenceChangeListener = (SharedPreferences prefs, String key) -> {
+ if ("wifiOnly".equals(key)) {
+ syncOnlyOnWifi = prefs.getBoolean("wifiOnly", false);
+ updateNetworkStatus();
+ }
+ };
+
private final BroadcastReceiver networkReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -114,6 +123,11 @@ public class NoteServerSyncHelper {
// Registers BroadcastReceiver to track network connection changes.
appContext.registerReceiver(networkReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
+
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.appContext);
+ prefs.registerOnSharedPreferenceChangeListener(onSharedPreferenceChangeListener);
+ syncOnlyOnWifi = prefs.getBoolean("wifiOnly", false);
+
updateNetworkStatus();
// bind to certifciate service to block sync attempts if service is not ready
appContext.bindService(new Intent(appContext, CustomCertService.class), certService, Context.BIND_AUTO_CREATE);
@@ -142,16 +156,7 @@ public class NoteServerSyncHelper {
* @return true if sync is possible, otherwise false.
*/
public boolean isSyncPossible() {
- boolean onlyWifiGuard = true;
- if(
- PreferenceManager.getDefaultSharedPreferences(this.appContext)
- .getBoolean("wifiOnly", false) &&
- !((ConnectivityManager) appContext.getSystemService(Context.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {
- onlyWifiGuard = false;
- Log.d(NoteServerSyncHelper.class.getSimpleName(), "Network available, but no wifi.");
- }
-
- return networkConnected && isConfigured(appContext) && cert4androidReady && onlyWifiGuard;
+ return networkConnected && isConfigured(appContext) && cert4androidReady;
}
public CustomCertManager getCustomCertManager() {
@@ -219,9 +224,18 @@ public class NoteServerSyncHelper {
private void updateNetworkStatus() {
ConnectivityManager connMgr = (ConnectivityManager) appContext.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeInfo = connMgr.getActiveNetworkInfo();
+
if (activeInfo != null && activeInfo.isConnected()) {
- Log.d(NoteServerSyncHelper.class.getSimpleName(), "Network connection established.");
- networkConnected = true;
+ networkConnected =
+ !syncOnlyOnWifi || ((ConnectivityManager) appContext
+ .getSystemService(Context.CONNECTIVITY_SERVICE))
+ .getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected();
+
+ if (networkConnected) {
+ Log.d(NoteServerSyncHelper.class.getSimpleName(), "Network connection established.");
+ } else {
+ Log.d(NoteServerSyncHelper.class.getSimpleName(), "Network connected, but not used because only synced on wifi.");
+ }
} else {
networkConnected = false;
Log.d(NoteServerSyncHelper.class.getSimpleName(), "No network connection.");