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

Commit 0739979f authored by Nihar Thakkar's avatar Nihar Thakkar
Browse files

Implement support for /e/ account SSO

parent 0f88defe
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ dependencies {


    implementation 'com.jakewharton:butterknife:8.8.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    def supportLibVersion = '27.1.1'
+28 −38
Original line number Diff line number Diff line
@@ -5,34 +5,35 @@
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>

    <application
        android:name="it.niedermann.owncloud.notes.util.Notes"
        android:name=".util.Notes"
        android:allowBackup="true"
        android:fullBackupContent="true"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:label="@string/app_name"
        android:networkSecurityConfig="@xml/network_security_config"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity
            android:name="it.niedermann.owncloud.notes.android.activity.SplashscreenActivity"
            android:name=".android.activity.SplashscreenActivity"
            android:theme="@style/SplashTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <meta-data
                android:name="android.app.shortcuts"
                android:resource="@xml/shortcuts" />
        </activity>

        <activity
            android:name="it.niedermann.owncloud.notes.android.activity.NotesListViewActivity"
            android:name=".android.activity.NotesListViewActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">

            <intent-filter>
                <action android:name="android.intent.action.SEARCH" />
            </intent-filter>
@@ -44,39 +45,35 @@
                android:name="android.app.default_searchable"
                android:value="it.niedermann.owncloud.notes.android.activity.NotesListViewActivity" />
        </activity>

        <activity
            android:name="it.niedermann.owncloud.notes.android.activity.SettingsActivity"
            android:name=".android.activity.SettingsActivity"
            android:label="@string/settings_server_settings"
            android:parentActivityName="it.niedermann.owncloud.notes.android.activity.PreferencesActivity"
            android:parentActivityName=".android.activity.PreferencesActivity"
            android:windowSoftInputMode="stateVisible" />

        <activity
            android:name="it.niedermann.owncloud.notes.android.activity.PreferencesActivity"
            android:name=".android.activity.PreferencesActivity"
            android:label="@string/action_settings"
            android:parentActivityName="it.niedermann.owncloud.notes.android.activity.NotesListViewActivity"
            android:windowSoftInputMode="stateHidden"
            android:parentActivityName=".android.activity.NotesListViewActivity"
            android:theme="@style/Preferences"
            />

            android:windowSoftInputMode="stateHidden" />
        <activity
            android:name="it.niedermann.owncloud.notes.android.activity.EditNoteActivity"
            android:name=".android.activity.EditNoteActivity"
            android:label="@string/simple_edit"
            android:parentActivityName="it.niedermann.owncloud.notes.android.activity.NotesListViewActivity"
            android:windowSoftInputMode="stateHidden"
            android:launchMode="singleTask">
            android:launchMode="singleTask"
            android:parentActivityName=".android.activity.NotesListViewActivity"
            android:windowSoftInputMode="stateHidden">
            <intent-filter android:label="@string/action_create">
                <action android:name="android.intent.action.SEND" />

                <category android:name="android.intent.category.DEFAULT" />

                <data android:mimeType="text/plain" />
            </intent-filter>
        </activity>

        <activity
            android:name="it.niedermann.owncloud.notes.android.activity.AboutActivity"
            android:name=".android.activity.AboutActivity"
            android:label="@string/simple_about"
            android:parentActivityName="it.niedermann.owncloud.notes.android.activity.NotesListViewActivity" />

            android:parentActivityName=".android.activity.NotesListViewActivity" />
        <activity
            android:name=".android.activity.SelectSingleNoteActivity"
            android:theme="@style/AppTheme.NoActionBar">
@@ -84,9 +81,7 @@
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
            </intent-filter>
        </activity>

        <activity android:name=".android.appwidget.NoteListWidgetConfiguration">

            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
            </intent-filter>
@@ -95,7 +90,6 @@
        <receiver
            android:name=".android.appwidget.CreateNoteWidget"
            android:label="@string/widget_create_note">

            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
@@ -104,11 +98,9 @@
                android:name="android.appwidget.provider"
                android:resource="@xml/create_note_widget_provider" />
        </receiver>

        <receiver
            android:name="it.niedermann.owncloud.notes.android.appwidget.SingleNoteWidget"
            android:name=".android.appwidget.SingleNoteWidget"
            android:label="@string/widget_single_note_title">

            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
@@ -117,11 +109,9 @@
                android:name="android.appwidget.provider"
                android:resource="@xml/single_note_widget_provider_info" />
        </receiver>

        <receiver
            android:name="it.niedermann.owncloud.notes.android.appwidget.NoteListWidget"
            android:name=".android.appwidget.NoteListWidget"
            android:label="@string/widget_note_list_title">

            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
@@ -134,21 +124,21 @@
        <service
            android:name=".android.appwidget.SingleNoteWidgetService"
            android:permission="android.permission.BIND_REMOTEVIEWS" />

        <service
            android:name=".android.appwidget.NoteListWidgetService"
            android:permission="android.permission.BIND_REMOTEVIEWS" />

        <service
            android:name="it.niedermann.owncloud.notes.android.quicksettings.NewNoteTileService"
            android:name=".android.quicksettings.NewNoteTileService"
            android:description="@string/action_create"
            android:icon="@drawable/ic_quicksettings_new"
            android:label="@string/action_create"
            android:description="@string/action_create"
            android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
            <intent-filter>
                <action android:name="android.service.quicksettings.action.QS_TILE" />
            </intent-filter>
        </service>

        <activity android:name=".android.activity.AccountActivity"></activity>
    </application>

</manifest>
 No newline at end of file
+124 −0
Original line number Diff line number Diff line
package it.niedermann.owncloud.notes.android.activity;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

import it.niedermann.owncloud.notes.R;

import static it.niedermann.owncloud.notes.android.activity.SettingsActivity.SETTINGS_KEY_ETAG;
import static it.niedermann.owncloud.notes.android.activity.SettingsActivity.SETTINGS_KEY_LAST_MODIFIED;
import static it.niedermann.owncloud.notes.android.activity.SettingsActivity.SETTINGS_PASSWORD;
import static it.niedermann.owncloud.notes.android.activity.SettingsActivity.SETTINGS_URL;
import static it.niedermann.owncloud.notes.android.activity.SettingsActivity.SETTINGS_USERNAME;
import static it.niedermann.owncloud.notes.android.activity.SettingsActivity.CREDENTIALS_CHANGED;

public class AccountActivity extends AppCompatActivity {

    private final static String key_login_account = "login_account";
    private final static String login_account_eelo = "login_account_eelo";
    private final static String login_account_manual = "login_account_manual";
    private final static String eelo_account_type = "bitfire.at.davdroid.eelo";

    private final static int pick_account_request_code = 1;

    private AccountManager accountManager;
    private SharedPreferences sharedPreferences;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_account);

        accountManager = AccountManager.get(this);
        sharedPreferences = PreferenceManager
                .getDefaultSharedPreferences(getApplicationContext());

        if (!(getIntent().getBooleanExtra("preference", false))) {
            Account[] eeloAccounts = accountManager.getAccountsByType(eelo_account_type);
            if (eeloAccounts.length > 0) {
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putString(SETTINGS_URL, accountManager
                        .getUserData(eeloAccounts[0], "oc_base_url") + "/");
                editor.putString(SETTINGS_USERNAME, accountManager
                        .getUserData(eeloAccounts[0], "email_address"));
                editor.putString(SETTINGS_PASSWORD, accountManager
                        .getPassword(eeloAccounts[0]));
                editor.remove(SETTINGS_KEY_ETAG);
                editor.remove(SETTINGS_KEY_LAST_MODIFIED);
                editor.apply();

                Intent resultIntent = new Intent();
                resultIntent.putExtra(key_login_account, login_account_eelo);
                resultIntent.putExtra(NotesListViewActivity.CREDENTIALS_CHANGED, CREDENTIALS_CHANGED);
                setResult(RESULT_OK, resultIntent);
                finish();
            }
        }

        findViewById(R.id.eelo_account_login_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String[] accountTypes = new String[]{eelo_account_type};
                Intent intent = AccountManager.newChooseAccountIntent(
                        null,
                        null,
                        accountTypes,
                        null,
                        null, null,null);

                startActivityForResult(intent, pick_account_request_code);
            }
        });

        findViewById(R.id.manual_account_login_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (getIntent().getBooleanExtra("preference", false)) {
                    startActivity(new Intent(AccountActivity.this, SettingsActivity.class));
                }
                else {
                    Intent resultIntent = new Intent();
                    resultIntent.putExtra(key_login_account, login_account_manual);
                    setResult(RESULT_OK, resultIntent);
                }
                finish();
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == pick_account_request_code) {
            if (resultCode == RESULT_OK) {
                String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
                for (Account account : accountManager.getAccountsByType(eelo_account_type)) {
                    if (account.name.equals(accountName)) {
                        SharedPreferences.Editor editor = sharedPreferences.edit();
                        editor.putString(SETTINGS_URL, accountManager
                                .getUserData(account, "oc_base_url") + "/");
                        editor.putString(SETTINGS_USERNAME, accountManager
                                .getUserData(account, "email_address"));
                        editor.putString(SETTINGS_PASSWORD, accountManager
                                .getPassword(account));
                        editor.remove(SETTINGS_KEY_ETAG);
                        editor.remove(SETTINGS_KEY_LAST_MODIFIED);
                        editor.apply();

                        Intent resultIntent = new Intent();
                        resultIntent.putExtra(key_login_account, login_account_eelo);
                        resultIntent.putExtra(NotesListViewActivity.CREDENTIALS_CHANGED, CREDENTIALS_CHANGED);
                        setResult(RESULT_OK, resultIntent);
                        finish();
                        break;
                    }
                }
            }
        }
    }
}
+38 −9
Original line number Diff line number Diff line
@@ -63,6 +63,10 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
    private final static int show_single_note_cmd = 1;
    private final static int server_settings = 2;
    private final static int about = 3;
    private final static int login_account = 4;

    private final static String key_login_account = "login_account";
    private final static String login_account_eelo = "login_account_eelo";


    @BindView(R.id.notesListActivityActionBar)
@@ -110,8 +114,8 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
        super.onCreate(savedInstanceState);
        // First Run Wizard
        if (!NoteServerSyncHelper.isConfigured(this)) {
            Intent settingsIntent = new Intent(this, SettingsActivity.class);
            startActivityForResult(settingsIntent, server_settings);
            Intent settingsIntent = new Intent(this, AccountActivity.class);
            startActivityForResult(settingsIntent, login_account);
        }
        String categoryAdapterSelectedItem = ADAPTER_KEY_RECENT;
        if (savedInstanceState != null) {
@@ -562,7 +566,28 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
                adapter.add(createdNote);
            }
            listView.scrollToPosition(0);
        } else if (requestCode == login_account) {
            if (resultCode == RESULT_OK) {
                if (data.getStringExtra(key_login_account).equals(login_account_eelo)) {
                    // Create new Instance with new URL and credentials
                    db = NoteSQLiteOpenHelper.getInstance(this);
                    if (db.getNoteServerSyncHelper().isSyncPossible()) {
                        adapter.removeAll();
                        synchronize();
                    } else {
                        Toast.makeText(getApplicationContext(), getString(R.string.error_sync, getString(NotesClientUtil.LoginStatus.NO_NETWORK.str)), Toast.LENGTH_LONG).show();
                    }
                }
                else {
                    Intent settingsIntent = new Intent(this, SettingsActivity.class);
                    startActivityForResult(settingsIntent, server_settings);
                }
            }
            else {
                finish();
            }
        } else if (requestCode == server_settings) {
            if (resultCode == RESULT_OK) {
                // Create new Instance with new URL and credentials
                db = NoteSQLiteOpenHelper.getInstance(this);
                if (db.getNoteServerSyncHelper().isSyncPossible()) {
@@ -572,6 +597,10 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
                    Toast.makeText(getApplicationContext(), getString(R.string.error_sync, getString(NotesClientUtil.LoginStatus.NO_NETWORK.str)), Toast.LENGTH_LONG).show();
                }
            }
            else {
                finish();
            }
        }
    }

    @Override
+0 −10
Original line number Diff line number Diff line
@@ -170,16 +170,6 @@ public class SettingsActivity extends AppCompatActivity {
        }
    }

    /**
     * Prevent pressing back button on first run
     */
    @Override
    public void onBackPressed() {
        if (!first_run) {
            super.onBackPressed();
        }
    }

    private void login() {
        String url = field_url.getText().toString().trim();
        String username = field_username.getText().toString();
Loading