Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f8815853 authored by Abhishek Aggarwal's avatar Abhishek Aggarwal
Browse files

Merge branch '174-ecloud-account-settings' into 'v1-oreo'

eDrive: Add proper ui to show account activity

See merge request !109
parents 74a207de 3d1e58e4
Loading
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -66,6 +66,9 @@ dependencies {
    api 'androidx.annotation:annotation:1.3.0'
    implementation 'androidx.core:core:1.6.0'
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation "androidx.constraintlayout:constraintlayout:2.1.3"
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'com.github.bumptech.glide:glide:4.13.1'

    def work_version = "2.7.1"
    // (Java only)
+7 −6
Original line number Diff line number Diff line
@@ -21,20 +21,21 @@

    <application
        android:name=".EdriveApplication"
        android:persistent="true"
        android:allowBackup="true"
        android:icon="@mipmap/ic_eelo"
        android:label="@string/app_name"
        android:persistent="true"
        android:roundIcon="@mipmap/ic_eelo_round">
        <!-- widget -->
        <activity
            android:exported="true"
            android:name=".activity.AccountsActivity"
            android:label="Account Activity"
            android:theme="@style/Theme.AppCompat.DayNight"/>
            android:exported="true"
            android:label="My Account"
            android:theme="@style/AccountActivityTheme" />

        <!-- widget -->
        <receiver
            android:name=".widgets.EDriveWidget"
            android:label="@string/app_widget_description"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
+102 −6
Original line number Diff line number Diff line
@@ -8,15 +8,24 @@

package foundation.e.drive.activity;

import static foundation.e.drive.widgets.EDriveWidget.buildIntent;
import static foundation.e.drive.widgets.EDriveWidget.convertIntoMB;
import static foundation.e.drive.widgets.EDriveWidget.dataForWeb;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.view.View;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;

import com.bumptech.glide.Glide;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.UserInfo;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
@@ -29,13 +38,20 @@ import foundation.e.drive.databinding.ActivityAccountsBinding;
import foundation.e.drive.operations.GetAliasOperation;
import foundation.e.drive.utils.CommonUtils;
import foundation.e.drive.widgets.EDriveNetworkCallback;
import foundation.e.drive.widgets.EDriveWidget;

public class AccountsActivity extends AppCompatActivity {

    private static final String NON_OFFICIAL_AVATAR_PATH = "/index.php/avatar/";
    private static final String ACCOUNT_SETTINGS =
            EDriveWidget.ACCOUNT_MANAGER_PACKAGE_NAME + ".ui.AccountsActivity";

    private final GetRemoteUserInfoOperation getRemoteUserInfoOperation = new GetRemoteUserInfoOperation();
    private final GetAliasOperation getAliasOperation = new GetAliasOperation();
    private UserInfo userInfo = null;
    private ArrayList<Object> aliases;
    private OwnCloudClient client;
    private Account account;

    private ActivityAccountsBinding binding;

@@ -45,11 +61,29 @@ public class AccountsActivity extends AppCompatActivity {
        binding = ActivityAccountsBinding.inflate(getLayoutInflater());

        setContentView(binding.getRoot());
        setSupportActionBar(binding.toolbar);

        binding.toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });

        binding.settings.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Intent settingsIntent = buildIntent(Intent.ACTION_VIEW, "")
                        .setComponent(new ComponentName(
                                EDriveWidget.ACCOUNT_MANAGER_PACKAGE_NAME, ACCOUNT_SETTINGS));
                startActivity(settingsIntent);
            }
        });

        final AccountManager accountManager = AccountManager.get(this);
        final Account account = CommonUtils.getAccount(getString(R.string.eelo_account_type),
        account = CommonUtils.getAccount(getString(R.string.eelo_account_type),
                accountManager);
        final OwnCloudClient client = CommonUtils.getOwnCloudClient(account, this);
        client = CommonUtils.getOwnCloudClient(account, this);

        final HandlerThread handlerThread = new HandlerThread("Network Request");
        handlerThread.start();
@@ -67,6 +101,12 @@ public class AccountsActivity extends AppCompatActivity {
            }
        };

        if (!CommonUtils.haveNetworkConnection(this)) {
            handleNoInternetConnection();
            return;
        }

        binding.loading.setVisibility(View.VISIBLE);
        mHandler.post(new Runnable() {
            @Override
            public void run() {
@@ -79,13 +119,14 @@ public class AccountsActivity extends AppCompatActivity {
                    if (aliasResult.isSuccess() && aliasResult.getData() != null) {
                        aliases = aliasResult.getData();
                    }
                    callback.onComplete();
                }
                callback.onComplete();
            }
        });
    }

    private void onNetworkRequestCompleted() {
        binding.loading.setVisibility(View.GONE);
        if (userInfo.displayName == null) {
            binding.name.setText(userInfo.alternateDisplayName);
        } else {
@@ -96,24 +137,79 @@ public class AccountsActivity extends AppCompatActivity {
        final int usedMB = convertIntoMB(userInfo.quota.used);
        final int totalMB = convertIntoMB(userInfo.quota.total);

        binding.progress.setMax(totalMB);
        binding.progress.setProgress(usedMB);
        binding.progress.setVisibility(View.VISIBLE);

        binding.plan.setText(getString(R.string.free_plan,
                CommonUtils.humanReadableByteCountBin(userInfo.quota.total)));

        for (String group : userInfo.groups) {
            if (group.contains("premium-")) {
                binding.plan.setText(getString(R.string.premium_plan, group.split("-")[1]));
                break;
            }
        }
        binding.myPlan.setVisibility(View.VISIBLE);
        binding.plan.setVisibility(View.VISIBLE);

        binding.status.setText(getString(R.string.progress_status,
                CommonUtils.humanReadableByteCountBin(userInfo.quota.used),
                CommonUtils.humanReadableByteCountBin(userInfo.quota.total)));

        if (aliases != null && !aliases.isEmpty()) {
            binding.alias1.setText(getString(R.string.alias_dot) + aliases.get(0));
            binding.alias.setVisibility(View.VISIBLE);
            binding.alias1.setText(aliases.get(0).toString());
            binding.aliasDivider.setVisibility(View.VISIBLE);
        } else {
            binding.alias1.setText(getString(R.string.no_alias));
            binding.alias.setVisibility(View.GONE);
            binding.alias1Container.setVisibility(View.GONE);
        }

        binding.alias1Clipboard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CommonUtils.copyToClipboard(Uri.parse(binding.alias1.getText().toString()),
                        v.getContext(), v.getContext().getString(R.string.alias));
            }
        });

        binding.upgrade.setVisibility(View.VISIBLE);
        binding.upgrade.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Intent upgradeIntent = buildIntent(Intent.ACTION_VIEW,
                        String.format(EDriveWidget.WEBPAGE, userInfo.id,
                                client.getCredentials().getAuthToken(), dataForWeb(userInfo.quota.total)));
                startActivity(upgradeIntent);
            }
        });

        binding.alias.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (binding.alias1Container.getVisibility() == View.VISIBLE) {
                    binding.alias1Container.setVisibility(View.GONE);
                    binding.alias.setCompoundDrawablesWithIntrinsicBounds(null, null,
                            ContextCompat.getDrawable(v.getContext(), R.drawable.ic_expand_more), null);
                } else {
                    binding.alias1Container.setVisibility(View.VISIBLE);
                    binding.alias.setCompoundDrawablesWithIntrinsicBounds(null, null,
                            ContextCompat.getDrawable(v.getContext(), R.drawable.ic_expand_less), null);
                }
            }
        });

        Glide.with(this)
                .load(client.getBaseUri() + NON_OFFICIAL_AVATAR_PATH
                        + client.getCredentials().getUsername() + "/" + 300)
                .error(R.mipmap.ic_eelo_foreground)
                .into(binding.avatar);
        binding.avatar.setVisibility(View.VISIBLE);
    }

    private void handleNoInternetConnection() {
        binding.name.setText(account.name);
        binding.email.setText(account.type);
        binding.avatar.setVisibility(View.VISIBLE);
    }
}
+38 −25
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@ import android.accounts.AccountManager;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.Service;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.ContentResolver;
import android.content.Context;
import android.media.MediaScannerConnection;
@@ -25,6 +27,7 @@ import android.net.Uri;
import android.os.Build;
import android.util.Log;
import android.webkit.MimeTypeMap;
import android.widget.Toast;

import com.owncloud.android.lib.common.OwnCloudBasicCredentials;
import com.owncloud.android.lib.common.OwnCloudClient;
@@ -431,4 +434,14 @@ public abstract class CommonUtils {
            notificationManager.createNotificationChannel(channel);
        }
    }

    public static void copyToClipboard(Uri data, Context context, String label) {
        final ClipboardManager clipboard =
                (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
        final ClipData clip = ClipData.newPlainText(label, String.valueOf(data));
        clipboard.setPrimaryClip(clip);
        Toast.makeText(context, context.getString(R.string.copied_to_clipboard, label),
                Toast.LENGTH_SHORT).show();
    }

}
+25 −32
Original line number Diff line number Diff line
@@ -13,8 +13,6 @@ import android.accounts.AccountManager;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -44,10 +42,10 @@ import foundation.e.drive.utils.CommonUtils;
 * Implementation of App Widget functionality.
 */
public class EDriveWidget extends AppWidgetProvider {
    private static final String webpage =
    public static final String WEBPAGE =
            "https://esolutions.shop/ecloud-subscriptions/?username=%s&token=%s&current-quota=%s&from=nextcloud";
    public static final String ACCOUNT_MANAGER_PACKAGE_NAME = "foundation.e.accountmanager";
    private static final String ADD_ACCOUNT_WEBPAGE = "https://e.foundation/e-email-invite/";
    private static final String ACCOUNT_MANAGER_PACKAGE_NAME = "foundation.e.accountmanager";
    private static final String GET_ACCOUNT_MANAGER_COMPONENT_NAME = ACCOUNT_MANAGER_PACKAGE_NAME +
            ".ui.setup.LoginActivity";
    private static final String SETUP_ACCOUNT_PROVIDER_TYPE = "setup_account_provider_type";
@@ -67,6 +65,26 @@ public class EDriveWidget extends AppWidgetProvider {
    private UserInfo userInfo = null;
    private RemoteViews views = null;

    public static String dataForWeb(Long bytes) {
        final String space = CommonUtils.humanReadableByteCountBin(bytes);
        final String[] split = space.split(" ");
        return Math.round(Double.parseDouble(split[0])) + split[1];
    }

    public static Intent buildIntent(String name, String extra) {
        final Intent intent = new Intent(name);
        if (!extra.isEmpty()) {
            intent.setData(Uri.parse(extra));
        }
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        return intent;
    }

    public static int convertIntoMB(Long quota) {
        return (int) (quota / 1048576); // 1024.0 * 1024.0 = 1048576.0
    }

    public void updateAppWidget(final Context context) {
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
        final ComponentName provider = new ComponentName(context, getClass());
@@ -152,28 +170,13 @@ public class EDriveWidget extends AppWidgetProvider {
                updateAppWidget(context);
                break;
            case COPY_ALIAS:
                copyToClipboard(intent.getData(), context);
                CommonUtils.copyToClipboard(intent.getData(), context,
                        context.getString(R.string.alias));
                break;
        }
        super.onReceive(context, intent);
    }

    private String dataForWeb(Long bytes) {
        final String space = CommonUtils.humanReadableByteCountBin(bytes);
        final String[] split = space.split(" ");
        return Math.round(Double.parseDouble(split[0])) + split[1];
    }

    private Intent buildIntent(String name, String extra) {
        final Intent intent = new Intent(name);
        if (!extra.isEmpty()) {
            intent.setData(Uri.parse(extra));
        }
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        return intent;
    }

    private void onNetworkRequestCompleted(Context context, AppWidgetManager appWidgetManager,
                                           int appWidgetId, OwnCloudClient client, Account account) {
        if (account == null || userInfo == null) {
@@ -250,7 +253,7 @@ public class EDriveWidget extends AppWidgetProvider {
        views.setOnClickPendingIntent(R.id.settings, pendingIntentSettings);

        final PendingIntent pendingIntentUpgrade = PendingIntent.getActivity(context, 0,
                buildIntent(Intent.ACTION_VIEW, String.format(webpage, userInfo.id,
                buildIntent(Intent.ACTION_VIEW, String.format(WEBPAGE, userInfo.id,
                        client.getCredentials().getAuthToken(), dataForWeb(userInfo.quota.total))),
                PendingIntent.FLAG_IMMUTABLE);
        views.setOnClickPendingIntent(R.id.upgrade, pendingIntentUpgrade);
@@ -268,14 +271,4 @@ public class EDriveWidget extends AppWidgetProvider {
        return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);
    }

    private void copyToClipboard(Uri data, Context context) {
        final ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
        final ClipData clip = ClipData.newPlainText("alias", String.valueOf(data));
        clipboard.setPrimaryClip(clip);
    }

    public static int convertIntoMB(Long quota) {
        return (int) (quota / 1048576); // 1024.0 * 1024.0 = 1048576.0
    }

}
 No newline at end of file
Loading