From 059b617980d0d0194059a925180f946f2a7495c0 Mon Sep 17 00:00:00 2001 From: Takao Sumitomo Date: Thu, 4 Oct 2018 11:38:11 +0900 Subject: [PATCH 01/11] Add AccountsListActivity and AccountEditDialog --- example/src/main/AndroidManifest.xml | 4 + .../example/AccountsListActivity.java | 69 ++++++++++ .../android/snippets/example/Constants.java | 2 + .../snippets/example/MainActivity.java | 3 + .../example/dialog/AccountEditDialog.java | 118 ++++++++++++++++++ .../main/res/drawable/ic_add_white_24dp.xml | 5 + .../res/layout/activity_accounts_list.xml | 29 +++++ .../main/res/layout/dialog_account_edit.xml | 76 +++++++++++ example/src/main/res/values/strings.xml | 4 + 9 files changed, 310 insertions(+) create mode 100644 example/src/main/java/net/cattaka/android/snippets/example/AccountsListActivity.java create mode 100644 example/src/main/java/net/cattaka/android/snippets/example/dialog/AccountEditDialog.java create mode 100644 example/src/main/res/drawable/ic_add_white_24dp.xml create mode 100644 example/src/main/res/layout/activity_accounts_list.xml create mode 100644 example/src/main/res/layout/dialog_account_edit.xml diff --git a/example/src/main/AndroidManifest.xml b/example/src/main/AndroidManifest.xml index 5f3b82e..414d135 100644 --- a/example/src/main/AndroidManifest.xml +++ b/example/src/main/AndroidManifest.xml @@ -2,6 +2,9 @@ + @@ -45,6 +48,7 @@ + \ No newline at end of file diff --git a/example/src/main/java/net/cattaka/android/snippets/example/AccountsListActivity.java b/example/src/main/java/net/cattaka/android/snippets/example/AccountsListActivity.java new file mode 100644 index 0000000..fb2c947 --- /dev/null +++ b/example/src/main/java/net/cattaka/android/snippets/example/AccountsListActivity.java @@ -0,0 +1,69 @@ +package net.cattaka.android.snippets.example; + +import android.accounts.Account; +import android.accounts.AccountManager; +import android.databinding.DataBindingUtil; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; +import android.util.Log; +import android.view.View; + +import net.cattaka.android.snippets.example.databinding.ActivityAccountsListBinding; +import net.cattaka.android.snippets.example.dialog.AccountEditDialog; +import net.cattaka.android.snippets.example.tracker.IScreen; + +public class AccountsListActivity extends AppCompatActivity implements + IScreen, + View.OnClickListener, + AccountEditDialog.IAccountEditDialogListener { + static final String TAG_DIALOG_ACCOUNT_EDIT = "DIALOG_ACCOUNT_EDIT"; + + ActivityAccountsListBinding mBinding; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mBinding = DataBindingUtil.setContentView(this, R.layout.activity_accounts_list); + + mBinding.buttonAdd.setOnClickListener(this); + } + + @Override + protected void onStart() { + super.onStart(); + loadAccounts(); + } + + @Override + public void onClick(View v) { + if (v.getId() == R.id.button_add) { + AccountEditDialog dialog = AccountEditDialog.newInstance(null); + dialog.show(getSupportFragmentManager(), TAG_DIALOG_ACCOUNT_EDIT); + } + } + + private void loadAccounts() { + AccountManager accountManager = (AccountManager) getSystemService(ACCOUNT_SERVICE); + Account[] accounts = accountManager.getAccountsByType(Constants.ACCOUNT_TYPE); + + Log.d("test", String.valueOf(accounts)); + + } + + @Override + public void onClickAccountEditDialogCancel(@Nullable Account origAccount) { + // no-op + } + + @Override + public void onClickAccountEditDialogRemove(@Nullable Account origAccount) { + // TODO + } + + @Override + public void onClickAccountEditDialogOk(@Nullable Account origAccount, @NonNull String name, @NonNull String authToken) { + // TODO + } +} diff --git a/example/src/main/java/net/cattaka/android/snippets/example/Constants.java b/example/src/main/java/net/cattaka/android/snippets/example/Constants.java index 4514a0a..75accd1 100644 --- a/example/src/main/java/net/cattaka/android/snippets/example/Constants.java +++ b/example/src/main/java/net/cattaka/android/snippets/example/Constants.java @@ -7,4 +7,6 @@ public class Constants { public static final String DB_NAME = "database"; public static final int DB_VERSION = 1; public static final String PREF_NAME = "pref"; + + public static final String ACCOUNT_TYPE = "net.cattaka.android.snippets"; } diff --git a/example/src/main/java/net/cattaka/android/snippets/example/MainActivity.java b/example/src/main/java/net/cattaka/android/snippets/example/MainActivity.java index 8ad1d94..202b8f4 100644 --- a/example/src/main/java/net/cattaka/android/snippets/example/MainActivity.java +++ b/example/src/main/java/net/cattaka/android/snippets/example/MainActivity.java @@ -31,6 +31,9 @@ public class MainActivity extends AppCompatActivity implements IScreen { new ActivityEntry("Progress", MotionLayoutProgressActivity.class, Build.VERSION_CODES.JELLY_BEAN_MR2), new ActivityEntry("Morph", MotionLayoutMorphActivity.class, Build.VERSION_CODES.JELLY_BEAN_MR2) ), + new ActivityEntry("AccountManager", null, + new ActivityEntry("Accounts List", AccountsListActivity.class) + ), new ActivityEntry("With Google Applications", null, new ActivityEntry("Pick from Google Photos", PickFromGooglePhotosActivity.class) ), diff --git a/example/src/main/java/net/cattaka/android/snippets/example/dialog/AccountEditDialog.java b/example/src/main/java/net/cattaka/android/snippets/example/dialog/AccountEditDialog.java new file mode 100644 index 0000000..d0dca01 --- /dev/null +++ b/example/src/main/java/net/cattaka/android/snippets/example/dialog/AccountEditDialog.java @@ -0,0 +1,118 @@ +package net.cattaka.android.snippets.example.dialog; + +import android.accounts.Account; +import android.app.Activity; +import android.app.Dialog; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; + +import net.cattaka.android.snippets.example.R; +import net.cattaka.android.snippets.example.databinding.DialogAccountEditBinding; + +public class AccountEditDialog extends DialogFragment implements View.OnClickListener { + public static AccountEditDialog newInstance(@Nullable Account origAccount) { + Bundle args = new Bundle(); + args.putParcelable("origAccount", origAccount); + + AccountEditDialog fragment = new AccountEditDialog(); + fragment.setArguments(args); + return fragment; + } + + DialogAccountEditBinding mBinding; + Account mOrigAccount; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Bundle args = getArguments(); + if (args != null) { + mOrigAccount = args.getParcelable("origAccount"); + } else { + // error case + } + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBinding = DialogAccountEditBinding.inflate(inflater, container, false); + + mBinding.buttonCancel.setOnClickListener(this); + mBinding.buttonRemove.setOnClickListener(this); + mBinding.buttonOk.setOnClickListener(this); + + if (mOrigAccount != null) { + mBinding.editAccountName.setText(mOrigAccount.name); + mBinding.buttonRemove.setVisibility(View.VISIBLE); + } else { + mBinding.buttonRemove.setVisibility(View.INVISIBLE); + } + + return mBinding.getRoot(); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + Dialog dialog = getDialog(); + Window window = dialog.getWindow(); + if (window != null) { + WindowManager.LayoutParams lp = dialog.getWindow().getAttributes(); + lp.width = WindowManager.LayoutParams.MATCH_PARENT; + dialog.getWindow().setAttributes(lp); + } + } + + @Override + public void onClick(View v) { + IAccountEditDialogListener listener = findListener(); + if (listener == null) { + return; + } + + if (v.getId() == R.id.button_cancel) { + listener.onClickAccountEditDialogCancel(mOrigAccount); + dismiss(); + } else if (v.getId() == R.id.button_remove) { + listener.onClickAccountEditDialogRemove(mOrigAccount); + dismiss(); + } else if (v.getId() == R.id.button_ok) { + String name = String.valueOf(mBinding.editAccountName.getText()); + String authToken = String.valueOf(mBinding.editAuthToken.getText()); + listener.onClickAccountEditDialogOk(mOrigAccount, name, authToken); + dismiss(); + } + } + + @Nullable + private IAccountEditDialogListener findListener() { + Fragment f = getParentFragment(); + if (f instanceof IAccountEditDialogListener) { + return (IAccountEditDialogListener) f; + } + Activity a = getActivity(); + if (a instanceof IAccountEditDialogListener) { + return (IAccountEditDialogListener) a; + } + return null; + } + + public interface IAccountEditDialogListener { + void onClickAccountEditDialogCancel(@Nullable Account origAccount); + + void onClickAccountEditDialogRemove(@Nullable Account origAccount); + + void onClickAccountEditDialogOk(@Nullable Account origAccount, @NonNull String name, @NonNull String authToken); + } +} diff --git a/example/src/main/res/drawable/ic_add_white_24dp.xml b/example/src/main/res/drawable/ic_add_white_24dp.xml new file mode 100644 index 0000000..e3979cd --- /dev/null +++ b/example/src/main/res/drawable/ic_add_white_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/example/src/main/res/layout/activity_accounts_list.xml b/example/src/main/res/layout/activity_accounts_list.xml new file mode 100644 index 0000000..baf6f40 --- /dev/null +++ b/example/src/main/res/layout/activity_accounts_list.xml @@ -0,0 +1,29 @@ + + + + + + + + + + diff --git a/example/src/main/res/layout/dialog_account_edit.xml b/example/src/main/res/layout/dialog_account_edit.xml new file mode 100644 index 0000000..23e4c46 --- /dev/null +++ b/example/src/main/res/layout/dialog_account_edit.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + +