~williamvds/taskwarrior-android

fe8f23d01351230ecd249ae03f3b1154284c9983 — williamvds 4 years ago db923ee
Convert AccountAddDialog in Kotlin
M app/src/main/AndroidManifest.xml => app/src/main/AndroidManifest.xml +2 -4
@@ 52,10 52,8 @@
            </intent-filter>
        </activity>
        <activity
            android:name=".account.AccountAuthenticator$AccountAddDialog"
            android:excludeFromRecents="true">

        </activity>
            android:name=".ui.AccountAddDialog"
            android:excludeFromRecents="true" />
        <activity android:name=".ui.AnnotationDialog">
        </activity>
        <activity android:name=".ui.EditorActivity">

M app/src/main/java/kvj/taskw/account/AccountAuthenticator.java => app/src/main/java/kvj/taskw/account/AccountAuthenticator.java +1 -83
@@ 10,23 10,10 @@ import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

import org.kvj.bravo7.form.FormController;
import org.kvj.bravo7.form.impl.ViewFinder;
import org.kvj.bravo7.form.impl.widget.SpinnerIntegerAdapter;
import org.kvj.bravo7.form.impl.widget.TextViewCharSequenceAdapter;

import timber.log.Timber;

import java.util.List;

import kvj.taskw.App;
import kvj.taskw.R;
import kvj.taskw.data.Controller;
import kvj.taskw.ui.AppDialog;
import kvj.taskw.ui.AccountAddDialog;

/**
 * Created by vorobyev on 11/17/15.


@@ 98,73 85,4 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
        Timber.d("hasFeatures %s %s", account, response);
        return null;
    }

    public static class AccountAddDialog extends AppDialog {

        Controller controller = App.controller();
        private View okButton;
        private AccountAuthenticatorResponse mAccountAuthenticatorResponse;
        private Bundle mResultBundle = null;
        private FormController form = new FormController(new ViewFinder.ActivityViewFinder(this));
        private List<String> folders = null;

        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mAccountAuthenticatorResponse =
                getIntent().getParcelableExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE);

            if (mAccountAuthenticatorResponse != null) {
                mAccountAuthenticatorResponse.onRequestContinued();
            }
            setContentView(R.layout.dialog_add_account);
            form.add(new TextViewCharSequenceAdapter(R.id.add_account_input, ""), "input");
            form.add(new SpinnerIntegerAdapter(R.id.add_account_folder, 0), "folder");
            folders = controller.accountFolders();
            folders.add(0, "<<Create new>>");
            ArrayAdapter<String>
                adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, folders);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            form.getView("folder", Spinner.class).setAdapter(adapter);
            okButton = findViewById(R.id.add_account_ok_btn);
            okButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String name = form.getValue("input");
                    int folderIndex = form.getValue("folder");
                    String err = controller.createAccount(name, folderIndex > 0? folders.get(folderIndex): null);
                    if (err == null) {
                        mResultBundle = new Bundle();
                        mResultBundle.putString(AccountManager.KEY_ACCOUNT_NAME, name);
                        mResultBundle
                            .putString(AccountManager.KEY_ACCOUNT_TYPE, App.ACCOUNT_TYPE);
                        finish();
                    } else {
                        controller.messageLong(err);
                    }
                }
            });
            findViewById(R.id.add_account_cancel_btn).setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        finish();
                    }
                });
        }

        public void finish() {
            if (mAccountAuthenticatorResponse != null) {
                // send the result bundle back if set, otherwise send an error.
                if (mResultBundle != null) {
                    mAccountAuthenticatorResponse.onResult(mResultBundle);
                } else {
                    mAccountAuthenticatorResponse.onError(AccountManager.ERROR_CODE_CANCELED, "canceled");
                }
                mAccountAuthenticatorResponse = null;
            }
            super.finish();
        }
    }

}

A app/src/main/java/kvj/taskw/ui/AccountAddDialog.kt => app/src/main/java/kvj/taskw/ui/AccountAddDialog.kt +69 -0
@@ 0,0 1,69 @@
package kvj.taskw.ui

import android.accounts.AccountAuthenticatorResponse
import android.accounts.AccountManager
import android.os.Bundle
import android.widget.ArrayAdapter

import kvj.taskw.App
import kvj.taskw.R
import kvj.taskw.data.Controller

import kotlinx.android.synthetic.main.dialog_add_account.*

class AccountAddDialog : AppDialog() {
    private var controller = App.controller<Controller>()
    private var response: AccountAuthenticatorResponse? = null
    private var result = Bundle()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.dialog_add_account)

        response = intent.getParcelableExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE)
        response?.apply { onRequestContinued() }

        val folders = controller.accountFolders()
        folders.add(0, getString(R.string.data_new_folder))

        val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, folders).apply {
            setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        }
        account_folder_select.adapter = adapter

        ok_button.setOnClickListener {
            val name = account_name_input.text.toString()
            val folderIndex = account_folder_select.selectedItemPosition
            val err = controller.createAccount(name, if (folderIndex > 0) folders[folderIndex] else null)

            err?.let {
                controller.messageLong(err)
                return@setOnClickListener
            }

            result.apply {
                putString(AccountManager.KEY_ACCOUNT_NAME, name)
                putString(AccountManager.KEY_ACCOUNT_TYPE, App.ACCOUNT_TYPE)
            }

            finish()
        }

        cancel_button.setOnClickListener { finish() }
    }

    override fun finish() {
        response?.let {
            // send the result bundle back if set, otherwise send an error.
            if (result.isEmpty) {
                response!!.onResult(result)
            } else {
                response!!.onError(AccountManager.ERROR_CODE_CANCELED, "canceled")
            }

            response = null
        }

        super.finish()
    }
}

M app/src/main/res/layout/dialog_add_account.xml => app/src/main/res/layout/dialog_add_account.xml +4 -4
@@ 13,7 13,7 @@
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/add_account_input"
            android:id="@+id/account_name_input"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:autofillHints="name"


@@ 30,7 30,7 @@
        android:textColor="@color/colorAccent" />

    <Spinner
        android:id="@+id/add_account_folder"
        android:id="@+id/account_folder_select"
        style="@style/Base.Widget.AppCompat.Spinner.Underlined"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


@@ 42,7 42,7 @@
        android:orientation="horizontal">

        <Button
            android:id="@+id/add_account_cancel_btn"
            android:id="@+id/cancel_button"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"


@@ 50,7 50,7 @@
            android:text="@android:string/cancel" />

        <Button
            android:id="@+id/add_account_ok_btn"
            android:id="@+id/ok_button"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

M app/src/main/res/values/strings.xml => app/src/main/res/values/strings.xml +1 -0
@@ 98,6 98,7 @@
    <!-- New account dialog -->
    <string name="account_name_hint">Name</string>
    <string name="data_folder">Folder</string>
    <string name="data_new_folder">Create new</string>

    <!-- Annotation dialog -->
    <string name="annotation">Annotation</string>