Эх сурвалжийг харах

- move check count from shared pref to arbitrary provider
- use it also for checking new dev version (if enabled)

tobiasKaminsky 7 жил өмнө
parent
commit
462d9d90cc

+ 11 - 12
src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java

@@ -28,7 +28,6 @@ import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.accounts.AccountManagerFuture;
 import android.content.Intent;
-import android.content.SharedPreferences;
 import android.content.res.Configuration;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
@@ -36,7 +35,6 @@ import android.graphics.drawable.LayerDrawable;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
-import android.preference.PreferenceManager;
 import android.support.design.widget.NavigationView;
 import android.support.v4.view.GravityCompat;
 import android.support.v4.widget.DrawerLayout;
@@ -82,6 +80,7 @@ import com.owncloud.android.ui.events.MenuItemClickEvent;
 import com.owncloud.android.ui.events.SearchEvent;
 import com.owncloud.android.ui.fragment.OCFileListFragment;
 import com.owncloud.android.utils.DisplayUtils;
+import com.owncloud.android.utils.FilesSyncHelper;
 import com.owncloud.android.utils.ThemeUtils;
 import com.owncloud.android.utils.svg.MenuSimpleTarget;
 
@@ -100,7 +99,6 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
     private static final String TAG = DrawerActivity.class.getSimpleName();
     private static final String KEY_IS_ACCOUNT_CHOOSER_ACTIVE = "IS_ACCOUNT_CHOOSER_ACTIVE";
     private static final String KEY_CHECKED_MENU_ITEM = "CHECKED_MENU_ITEM";
-    private static final String EXTERNAL_LINKS_COUNT = "EXTERNAL_LINKS_COUNT";
     private static final int ACTION_MANAGE_ACCOUNTS = 101;
     private static final int MENU_ORDER_ACCOUNT = 1;
     private static final int MENU_ORDER_ACCOUNT_FUNCTION = 2;
@@ -188,7 +186,6 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
     private Runnable pendingRunnable;
 
     private ExternalLinksProvider externalLinksProvider;
-    private SharedPreferences sharedPreferences;
     private ArbitraryDataProvider arbitraryDataProvider;
 
     /**
@@ -207,9 +204,9 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
      * This method needs to be called after the content view has been set.
      */
     protected void setupDrawer() {
-        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
+        mDrawerLayout = findViewById(R.id.drawer_layout);
 
-        mNavigationView = (NavigationView) findViewById(R.id.nav_view);
+        mNavigationView = findViewById(R.id.nav_view);
         if (mNavigationView != null) {
             setupDrawerHeader();
 
@@ -1106,8 +1103,6 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
 
         externalLinksProvider = new ExternalLinksProvider(MainApp.getAppContext().getContentResolver());
         arbitraryDataProvider = new ArbitraryDataProvider(getContentResolver());
-
-        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
     }
 
     @Override
@@ -1201,7 +1196,7 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
      * @return The view if found or <code>null</code> otherwise.
      */
     private View findNavigationViewChildById(int id) {
-        NavigationView view = ((NavigationView) findViewById(R.id.nav_view));
+        NavigationView view = findViewById(R.id.nav_view);
 
         if (view != null) {
             return view.getHeaderView(0).findViewById(id);
@@ -1347,13 +1342,16 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
                         getStorageManager().getCapability(account.name) != null &&
                         getStorageManager().getCapability(account.name).getExternalLinks().isTrue()) {
 
-                    int count = sharedPreferences.getInt(EXTERNAL_LINKS_COUNT, -1);
+                    int count = arbitraryDataProvider.getIntegerValue(FilesSyncHelper.GLOBAL,
+                            FileActivity.APP_OPENED_COUNT);
+                    
                     if (count > 10 || count == -1 || force) {
                         if (force) {
                             Log_OC.d("ExternalLinks", "force update");
                         }
 
-                        sharedPreferences.edit().putInt(EXTERNAL_LINKS_COUNT, 0).apply();
+                        arbitraryDataProvider.storeOrUpdateKeyValue(FilesSyncHelper.GLOBAL,
+                                FileActivity.APP_OPENED_COUNT, "0");
 
                         Log_OC.d("ExternalLinks", "update via api");
                         RemoteOperation getExternalLinksOperation = new ExternalLinksOperation();
@@ -1369,7 +1367,8 @@ public abstract class DrawerActivity extends ToolbarActivity implements DisplayU
                             }
                         }
                     } else {
-                        sharedPreferences.edit().putInt(EXTERNAL_LINKS_COUNT, count + 1).apply();
+                        arbitraryDataProvider.storeOrUpdateKeyValue(FilesSyncHelper.GLOBAL,
+                                FileActivity.APP_OPENED_COUNT, String.valueOf(count + 1));
                     }
                 } else {
                     Log_OC.d("ExternalLinks", "links disabled");

+ 60 - 3
src/main/java/com/owncloud/android/ui/activity/FileActivity.java

@@ -28,17 +28,22 @@ import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
+import android.content.pm.PackageManager;
+import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
+import android.support.design.widget.Snackbar;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentTransaction;
+import android.view.View;
 import android.widget.Toast;
 
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AuthenticatorActivity;
+import com.owncloud.android.datamodel.ArbitraryDataProvider;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.services.FileDownloader;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
@@ -63,12 +68,16 @@ import com.owncloud.android.operations.UpdateSharePermissionsOperation;
 import com.owncloud.android.operations.UpdateShareViaLinkOperation;
 import com.owncloud.android.services.OperationsService;
 import com.owncloud.android.services.OperationsService.OperationsServiceBinder;
+import com.owncloud.android.ui.asynctasks.LoadingVersionNumberTask;
 import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
 import com.owncloud.android.ui.dialog.LoadingDialog;
 import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
 import com.owncloud.android.ui.helpers.FileOperationsHelper;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.ErrorMessageAdapter;
+import com.owncloud.android.utils.FilesSyncHelper;
+
+import java.util.concurrent.ExecutionException;
 
 
 /**
@@ -79,8 +88,8 @@ public abstract class FileActivity extends DrawerActivity
 
     public static final String EXTRA_FILE = "com.owncloud.android.ui.activity.FILE";
     public static final String EXTRA_ACCOUNT = "com.owncloud.android.ui.activity.ACCOUNT";
-    public static final String EXTRA_FROM_NOTIFICATION =
-            "com.owncloud.android.ui.activity.FROM_NOTIFICATION";
+    public static final String EXTRA_FROM_NOTIFICATION = "com.owncloud.android.ui.activity.FROM_NOTIFICATION";
+    public static final String APP_OPENED_COUNT = "APP_OPENED_COUNT";
 
     public static final String TAG = FileActivity.class.getSimpleName();
 
@@ -541,7 +550,7 @@ public abstract class FileActivity extends DrawerActivity
     }
 
     @Override
-    public void restart(){
+    public void restart() {
         Intent i = new Intent(this, FileDisplayActivity.class);
         i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
         startActivity(i);
@@ -581,4 +590,52 @@ public abstract class FileActivity extends DrawerActivity
     public void onCancelCertificate() {
         // nothing to do
     }
+
+    public void checkForNewDevVersionNecessary(View view, Context context) {
+        if (getResources().getBoolean(R.bool.dev_version_direct_download_enabled)) {
+            ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(getContentResolver());
+            int count = arbitraryDataProvider.getIntegerValue(FilesSyncHelper.GLOBAL, APP_OPENED_COUNT);
+
+            if (count > 10 || count == -1) {
+                checkForNewDevVersion(view, context, false);
+            }
+        }
+    }
+
+    public static void checkForNewDevVersion(View view, Context context, boolean openDirectly) {
+        Integer latestVersion = -1;
+        Integer currentVersion = -1;
+        try {
+            currentVersion = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode;
+            String url = context.getString(R.string.dev_latest);
+            LoadingVersionNumberTask loadTask = new LoadingVersionNumberTask();
+            loadTask.execute(url);
+            latestVersion = loadTask.get();
+        } catch (InterruptedException | ExecutionException | PackageManager.NameNotFoundException e) {
+            Log_OC.e(TAG, "Error detecting app version", e);
+        }
+        if (latestVersion == -1 || currentVersion == -1) {
+            Snackbar.make(view, R.string.dev_version_no_information_available, Snackbar.LENGTH_SHORT).show();
+        }
+        if (latestVersion > currentVersion) {
+            if (openDirectly) {
+                String devApkLink = (String) context.getText(R.string.dev_link) + latestVersion + ".apk";
+                Uri uriUrl = Uri.parse(devApkLink);
+                Intent intent = new Intent(Intent.ACTION_VIEW, uriUrl);
+                context.startActivity(intent);
+            } else {
+                Integer finalLatestVersion = latestVersion;
+                Snackbar.make(view, R.string.dev_version_new_version_available, Snackbar.LENGTH_SHORT)
+                        .setAction(context.getString(R.string.version_dev_download), v -> {
+                            String devApkLink = (String) context.getText(R.string.dev_link)
+                                    + finalLatestVersion + ".apk";
+                            Uri uriUrl = Uri.parse(devApkLink);
+                            Intent intent = new Intent(Intent.ACTION_VIEW, uriUrl);
+                            context.startActivity(intent);
+                        }).show();
+            }
+        } else {
+            Snackbar.make(view, R.string.dev_version_no_new_version_available, Snackbar.LENGTH_SHORT).show();
+        }
+    }
 }

+ 8 - 0
src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -2191,6 +2191,14 @@ public class FileDisplayActivity extends HookActivity
     public void onStart() {
         super.onStart();
         EventBus.getDefault().post(new TokenPushEvent());
+
+        checkForNewDevVersionNecessary(findViewById(R.id.root_layout), getApplicationContext());
     }
 
+    @Override
+    protected void onRestart() {
+        super.onRestart();
+
+        checkForNewDevVersionNecessary(findViewById(R.id.root_layout), getApplicationContext());
+    }
 }

+ 2 - 29
src/main/java/com/owncloud/android/ui/activity/Preferences.java

@@ -47,7 +47,6 @@ import android.preference.PreferenceManager;
 import android.preference.PreferenceScreen;
 import android.preference.SwitchPreference;
 import android.support.annotation.LayoutRes;
-import android.support.design.widget.Snackbar;
 import android.support.v4.content.res.ResourcesCompat;
 import android.support.v7.app.ActionBar;
 import android.support.v7.app.AppCompatDelegate;
@@ -71,14 +70,12 @@ import com.owncloud.android.lib.common.ExternalLinkType;
 import com.owncloud.android.lib.common.OwnCloudAccount;
 import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
 import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.ui.asynctasks.LoadingVersionNumberTask;
 import com.owncloud.android.utils.AnalyticsUtils;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.MimeTypeUtil;
 import com.owncloud.android.utils.ThemeUtils;
 
 import java.io.IOException;
-import java.util.concurrent.ExecutionException;
 
 /**
  * An Activity that allows the user to change the application's settings.
@@ -182,32 +179,8 @@ public class Preferences extends PreferenceActivity
             if (pDevLink != null) {
                 if (getResources().getBoolean(R.bool.dev_version_direct_download_enabled)) {
                     pDevLink.setOnPreferenceClickListener(preference -> {
-                        Integer latestVersion = -1;
-                        Integer currentVersion = -1;
-                        try {
-                            currentVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
-                            String url = getString(R.string.dev_latest);
-                            LoadingVersionNumberTask loadTask = new LoadingVersionNumberTask();
-                            loadTask.execute(url);
-                            latestVersion = loadTask.get();
-                        } catch (InterruptedException | ExecutionException | NameNotFoundException e) {
-                            Log_OC.e(TAG, "Error detecting app version", e);
-                        }
-                        if (latestVersion == -1 || currentVersion == -1) {
-                            Snackbar.make(getListView(), R.string.dev_version_no_information_available,
-                                    Snackbar.LENGTH_SHORT).show();
-                        }
-                        if (latestVersion > currentVersion) {
-                            String devApkLink = (String) getText(R.string.dev_link) + latestVersion + ".apk";
-                            Uri uriUrl = Uri.parse(devApkLink);
-                            Intent intent = new Intent(Intent.ACTION_VIEW, uriUrl);
-                            startActivity(intent);
-                            return true;
-                        } else {
-                            Snackbar.make(getListView(), R.string.dev_version_no_new_version_available,
-                                    Snackbar.LENGTH_SHORT).show();
-                            return true;
-                        }
+                        FileActivity.checkForNewDevVersion(getListView(), getApplicationContext(), true);
+                        return true;
                     });
                 } else {
                     preferenceCategoryDev.removePreference(pDevLink);

+ 1 - 0
src/main/res/layout/files.xml

@@ -28,6 +28,7 @@
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
+        android:id="@+id/root_layout"
         android:orientation="vertical">
 
         <include

+ 2 - 0
src/main/res/values/strings.xml

@@ -723,6 +723,8 @@
     <string name="dev_version_no_information_available">No information available.</string>
     <string name="dev_version_no_new_version_available">No new version available.</string>
     <string name="folder_icon">Folder icon</string>
+    <string name="dev_version_new_version_available">New version available</string>
+    <string name="version_dev_download">Download</string>
 
     <string name="send">Send</string>
     <string name="share">Share</string>