Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 package org.chromium.chrome.browser.infobar; | |
| 6 | |
| 7 import android.view.LayoutInflater; | |
| 8 import android.view.MenuItem; | |
| 9 import android.view.View; | |
| 10 import android.view.View.OnClickListener; | |
| 11 import android.view.ViewGroup; | |
| 12 import android.widget.Button; | |
| 13 import android.widget.ImageView; | |
| 14 import android.widget.LinearLayout; | |
| 15 import android.widget.PopupMenu; | |
| 16 import android.widget.PopupMenu.OnMenuItemClickListener; | |
| 17 import android.widget.TextView; | |
| 18 | |
| 19 import org.chromium.base.CalledByNative; | |
| 20 import org.chromium.chrome.R; | |
| 21 import org.chromium.chrome.browser.ResourceId; | |
| 22 import org.chromium.chrome.browser.preferences.PreferencesLauncher; | |
| 23 | |
| 24 /** | |
| 25 * An infobar which allows user to choose credentials. | |
| 26 * Provides JNI methods for the infobar which allows user to choose account in | |
| 27 * Google Smart Lock. | |
| 28 */ | |
| 29 public class AccountChooserInfoBar extends InfoBar implements OnMenuItemClickLis tener { | |
| 30 private enum CredentialType { | |
| 31 EMPTY(0), | |
| 32 LOCAL(1), | |
| 33 FEDERATED(2); | |
| 34 | |
| 35 private final int mType; | |
| 36 private CredentialType(int type) { | |
| 37 mType = type; | |
| 38 }; | |
| 39 | |
| 40 public int getValue() { | |
| 41 return mType; | |
| 42 } | |
| 43 } | |
| 44 | |
| 45 private final String[] mUsernames; | |
| 46 | |
| 47 /** | |
| 48 * Creates and shows the infobar wich allows user to choose credentials for login. | |
| 49 * @param nativeInfoBar Pointer to the native infobar. | |
| 50 * @param enumeratedIconId Enum ID corresponding to the icon that the infoba r will show. | |
| 51 * @param usernames Usernames to display in the infobar. | |
| 52 */ | |
| 53 @CalledByNative | |
| 54 private static InfoBar show(long nativeInfoBar, int enumeratedIconId, String [] usernames) { | |
| 55 return new AccountChooserInfoBar( | |
| 56 nativeInfoBar, ResourceId.mapToDrawableId(enumeratedIconId), use rnames); | |
| 57 } | |
| 58 | |
| 59 /** | |
| 60 * Creates and shows the infobar which allows user to choose credentials. | |
| 61 * @param nativeInfoBar Pointer to the native infobar. | |
| 62 * @param iconDrawableId Drawable ID corresponding to the icon that the info bar will show. | |
| 63 * @param usernames list of usernames to display in infobar. | |
| 64 */ | |
| 65 public AccountChooserInfoBar(long nativeInfoBar, int iconDrawableId, String[ ] usernames) { | |
| 66 super(null /* Infobar Listener */, iconDrawableId, null /* bitmap*/, | |
| 67 null /* message to show */); | |
| 68 setNativeInfoBar(nativeInfoBar); | |
| 69 mUsernames = usernames; | |
| 70 } | |
| 71 | |
| 72 /** Called when the user selects a contextual menu item */ | |
| 73 @Override | |
| 74 public boolean onMenuItemClick(MenuItem item) { | |
| 75 if (item.getItemId() == R.id.settings) { | |
| 76 PreferencesLauncher.launchSettingsPage(getContext(), null); | |
| 77 return true; | |
| 78 } | |
| 79 // TODO(melandory): Learn more should open link to help center | |
| 80 // article which is not ready yet. | |
| 81 return false; | |
| 82 } | |
| 83 | |
| 84 /** | |
| 85 * Called when the close button is clicked. Notifies the native infobar, whi ch closes the | |
| 86 * infobar. | |
| 87 */ | |
| 88 @Override | |
| 89 public void onCloseButtonClicked() { | |
| 90 nativeOnCloseButtonClicked(mNativeInfoBarPtr); | |
| 91 } | |
| 92 | |
| 93 /** | |
| 94 * Used to specify button layout and custom content. Makes infobar display l ist of | |
| 95 * credentials | |
| 96 * @param layout Handles user interface for the infobar. | |
| 97 */ | |
| 98 @Override | |
| 99 public void createContent(InfoBarLayout layout) { | |
| 100 layout.setMessage(getContext().getString(R.string.account_chooser_infoba r_title)); | |
| 101 layout.setCustomContent(createAccountsView(), createCustomButtonsView()) ; | |
| 102 } | |
| 103 | |
| 104 private ViewGroup createAccountsView() { | |
| 105 ViewGroup accountsView = | |
| 106 (ViewGroup) LayoutInflater.from(getContext()) | |
| 107 .inflate(R.layout.account_chooser_infobar_items, null, f alse); | |
| 108 // TODO(melandory): use ListView to represent credentials and make them scrollable. | |
|
newt (away)
2015/02/17 21:49:08
Please go ahead and turn this into a ListView as p
melandory
2015/02/18 21:15:34
Implemented this using ListView.
But why do you t
newt (away)
2015/02/18 22:26:02
This has to be scrollable because some people have
| |
| 109 LinearLayout credentialsTable = | |
| 110 (LinearLayout) accountsView.findViewById(R.id.account_chooser_la yout); | |
| 111 int credentialIndex = 0; | |
| 112 for (String username : mUsernames) { | |
| 113 LinearLayout row = makeAccountRow(username, credentialIndex); | |
| 114 credentialsTable.addView(row); | |
| 115 ++credentialIndex; | |
| 116 } | |
| 117 // TODO(melandory): Restrict height to 2.5 elements in case length of us ernames is more | |
| 118 // than 2 elements. | |
| 119 return accountsView; | |
| 120 } | |
| 121 | |
| 122 /** | |
| 123 * Represents row in account chooser infobar, usual row has avatar, username and full name. | |
| 124 * @param username username to diplay. | |
| 125 * @param credentialIndex index of this row which will be back to native cod e in case user | |
| 126 * clicks on that row. | |
| 127 */ | |
| 128 private LinearLayout makeAccountRow(String username, int credentialIndex) { | |
| 129 LinearLayout row = (LinearLayout) LayoutInflater.from(getContext()) | |
| 130 .inflate(R.layout.account_chooser_infobar_ite m, null, false); | |
| 131 ViewGroup.LayoutParams row_params = row.getLayoutParams(); | |
| 132 TextView usernameView = (TextView) row.findViewById(R.id.username); | |
| 133 usernameView.setText(username); | |
| 134 TextView displayName = (TextView) row.findViewById(R.id.display_name); | |
| 135 // TODO(melandory): View should show the full name. Temporarily the view shows | |
| 136 // username. | |
| 137 displayName.setText(username); | |
| 138 // TODO(melandory): View should show proper avatar. Temporarily the view shows | |
| 139 // blue man icon. | |
| 140 ImageView avatar = (ImageView) row.findViewById(R.id.profile_image); | |
| 141 avatar.setImageResource(R.drawable.account_management_no_picture); | |
| 142 final Integer currentCredentialIndex = credentialIndex; | |
|
newt (away)
2015/02/17 21:49:08
Use int instead of Integer throughout this file. Y
melandory
2015/02/18 21:15:34
Done.
| |
| 143 row.setOnClickListener(new View.OnClickListener() { | |
| 144 @Override | |
| 145 public void onClick(View view) { | |
| 146 passCredentialsToNative(currentCredentialIndex); | |
| 147 } | |
| 148 }); | |
| 149 return row; | |
| 150 } | |
| 151 | |
| 152 /** | |
| 153 * For the Account Chooser infobar different, than InfobarLayout has, appear ance of button | |
| 154 * is required. | |
| 155 */ | |
| 156 private ViewGroup createCustomButtonsView() { | |
| 157 ViewGroup buttonsRow = | |
| 158 (ViewGroup) LayoutInflater.from(getContext()) | |
| 159 .inflate(R.layout.account_chooser_infobar_buttonbar, nul l, false); | |
| 160 Button moreButton = (Button) buttonsRow.findViewById(R.id.account_choose r_more); | |
| 161 // TODO(melandory): Looks like spinner in mocks. | |
| 162 moreButton.setOnClickListener(new OnClickListener() { | |
| 163 @Override | |
| 164 public void onClick(View view) { | |
| 165 showMorePopup(view); | |
| 166 } | |
| 167 }); | |
| 168 | |
| 169 Button noThanks = (Button) buttonsRow.findViewById(R.id.account_chooser_ no_thanks); | |
| 170 noThanks.setOnClickListener(new OnClickListener() { | |
| 171 @Override | |
| 172 public void onClick(View view) { | |
| 173 onCloseButtonClicked(); | |
| 174 } | |
| 175 }); | |
| 176 return buttonsRow; | |
| 177 } | |
| 178 | |
| 179 private void passCredentialsToNative(Integer credentialIndex) { | |
| 180 // TODO(melandory): Adding federated login support should change this | |
| 181 // code. | |
| 182 nativeOnCredentialClicked( | |
| 183 mNativeInfoBarPtr, credentialIndex, CredentialType.LOCAL.getValu e()); | |
| 184 } | |
| 185 | |
| 186 /** Pops up menu with two items: Setting and Learn More when user clicks mor e button*/ | |
| 187 private void showMorePopup(View v) { | |
| 188 PopupMenu popup = new PopupMenu(getContext(), v); | |
| 189 popup.setOnMenuItemClickListener(this); | |
| 190 popup.inflate(R.menu.account_chooser_infobar_more_menu_popup); | |
| 191 popup.show(); | |
| 192 } | |
| 193 | |
| 194 private native void nativeOnCredentialClicked( | |
| 195 long nativeAccountChooserInfoBar, int credentialId, int credentialTy pe); | |
| 196 } | |
| OLD | NEW |