Jelajahi Sumber

do not block on check for dev version

Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
tobiasKaminsky 6 tahun lalu
induk
melakukan
caaf13d678

+ 29 - 23
src/main/java/com/owncloud/android/ui/activity/FileActivity.java

@@ -24,6 +24,7 @@ package com.owncloud.android.ui.activity;
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.accounts.AuthenticatorException;
+import android.app.Activity;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -77,14 +78,13 @@ import com.owncloud.android.utils.ErrorMessageAdapter;
 import com.owncloud.android.utils.FilesSyncHelper;
 import com.owncloud.android.utils.ThemeUtils;
 
-import java.util.concurrent.ExecutionException;
-
 
 /**
  * Activity with common behaviour for activities handling {@link OCFile}s in ownCloud {@link Account}s .
  */
 public abstract class FileActivity extends DrawerActivity
-        implements OnRemoteOperationListener, ComponentsGetter, SslUntrustedCertDialog.OnSslUntrustedCertListener {
+        implements OnRemoteOperationListener, ComponentsGetter, SslUntrustedCertDialog.OnSslUntrustedCertListener,
+        LoadingVersionNumberTask.VersionDevInterface {
 
     public static final String EXTRA_FILE = "com.owncloud.android.ui.activity.FILE";
     public static final String EXTRA_ACCOUNT = "com.owncloud.android.ui.activity.ACCOUNT";
@@ -596,45 +596,51 @@ public abstract class FileActivity extends DrawerActivity
             int count = arbitraryDataProvider.getIntegerValue(FilesSyncHelper.GLOBAL, APP_OPENED_COUNT);
 
             if (count > 10 || count == -1) {
-                checkForNewDevVersion(view, context, false);
+                checkForNewDevVersion(this, context);
             }
         }
     }
 
-    public static void checkForNewDevVersion(View view, Context context, boolean openDirectly) {
-        Integer latestVersion = -1;
+    @Override
+    public void returnVersion(Integer latestVersion) {
+        showDevSnackbar(this, latestVersion, false);
+    }
+
+    public static void checkForNewDevVersion(LoadingVersionNumberTask.VersionDevInterface callback, Context context) {
+        String url = context.getString(R.string.dev_latest);
+        LoadingVersionNumberTask loadTask = new LoadingVersionNumberTask(callback);
+        loadTask.execute(url);
+    }
+    
+    public static void showDevSnackbar(Activity activity, Integer latestVersion, boolean openDirectly) {
         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);
+            currentVersion = activity.getPackageManager().getPackageInfo(activity.getPackageName(), 0).versionCode;
+        } catch (PackageManager.NameNotFoundException e) {
+            Log_OC.e(TAG, "Package not found", e);
         }
+
         if (latestVersion == -1 || currentVersion == -1) {
-            Snackbar.make(view, R.string.dev_version_no_information_available, Snackbar.LENGTH_LONG).show();
+            DisplayUtils.showSnackMessage(activity, R.string.dev_version_no_information_available, Snackbar.LENGTH_LONG);
         }
         if (latestVersion > currentVersion) {
             if (openDirectly) {
-                String devApkLink = (String) context.getText(R.string.dev_link) + latestVersion + ".apk";
+                String devApkLink = (String) activity.getText(R.string.dev_link) + latestVersion + ".apk";
                 Uri uriUrl = Uri.parse(devApkLink);
                 Intent intent = new Intent(Intent.ACTION_VIEW, uriUrl);
-                context.startActivity(intent);
+                activity.startActivity(intent);
             } else {
-                Integer finalLatestVersion = latestVersion;
-                Snackbar.make(view, R.string.dev_version_new_version_available, Snackbar.LENGTH_LONG)
-                        .setAction(context.getString(R.string.version_dev_download), v -> {
-                            String devApkLink = (String) context.getText(R.string.dev_link)
-                                    + finalLatestVersion + ".apk";
+                Snackbar.make(activity.findViewById(android.R.id.content), R.string.dev_version_new_version_available,
+                        Snackbar.LENGTH_LONG)
+                        .setAction(activity.getString(R.string.version_dev_download), v -> {
+                            String devApkLink = (String) activity.getText(R.string.dev_link) + latestVersion + ".apk";
                             Uri uriUrl = Uri.parse(devApkLink);
                             Intent intent = new Intent(Intent.ACTION_VIEW, uriUrl);
-                            context.startActivity(intent);
+                            activity.startActivity(intent);
                         }).show();
             }
         } else {
-            Snackbar.make(view, R.string.dev_version_no_new_version_available, Snackbar.LENGTH_LONG).show();
+            DisplayUtils.showSnackMessage(activity, R.string.dev_version_no_new_version_available, Snackbar.LENGTH_LONG);
         }
     }
 }

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

@@ -71,6 +71,7 @@ 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.DeviceCredentialUtils;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.EncryptionUtils;
@@ -85,7 +86,7 @@ import java.util.ArrayList;
  * It proxies the necessary calls via {@link android.support.v7.app.AppCompatDelegate} to be used with AppCompat.
  */
 public class Preferences extends PreferenceActivity
-        implements StorageMigration.StorageMigrationProgressListener {
+        implements StorageMigration.StorageMigrationProgressListener, LoadingVersionNumberTask.VersionDevInterface {
 
     private static final String TAG = Preferences.class.getSimpleName();
 
@@ -191,7 +192,7 @@ public class Preferences extends PreferenceActivity
             if (pDevLink != null) {
                 if (getResources().getBoolean(R.bool.dev_version_direct_download_enabled)) {
                     pDevLink.setOnPreferenceClickListener(preference -> {
-                        FileActivity.checkForNewDevVersion(getListView(), getApplicationContext(), true);
+                        FileActivity.checkForNewDevVersion(this, getApplicationContext());
                         return true;
                     });
                 } else {
@@ -1096,4 +1097,10 @@ public class Preferences extends PreferenceActivity
     public void onCancelMigration() {
         // Migration was canceled so we don't do anything
     }
+
+    @Override
+    public void returnVersion(Integer latestVersion) {
+        FileActivity.showDevSnackbar(this, latestVersion, true);
+    }
+
 }

+ 15 - 0
src/main/java/com/owncloud/android/ui/asynctasks/LoadingVersionNumberTask.java

@@ -37,6 +37,12 @@ import java.net.URL;
 public class LoadingVersionNumberTask extends AsyncTask<String, Void, Integer> {
     private static final String TAG = LoadingVersionNumberTask.class.getSimpleName();
 
+    private VersionDevInterface callback;
+    
+    public LoadingVersionNumberTask(VersionDevInterface callback) {
+        this.callback = callback;
+    }
+    
     protected Integer doInBackground(String... args) {
         try {
             URL url = new URL(args[0]);
@@ -51,4 +57,13 @@ public class LoadingVersionNumberTask extends AsyncTask<String, Void, Integer> {
         }
         return -1;
     }
+
+    @Override
+    protected void onPostExecute(Integer latestVersion) {
+        callback.returnVersion(latestVersion);
+    }
+
+    public interface VersionDevInterface {
+        void returnVersion(Integer latestVersion);
+    }
 }