Skip to content

Instantly share code, notes, and snippets.

@erdalkaymak
Last active December 29, 2022 08:03
Show Gist options
  • Select an option

  • Save erdalkaymak/7459ee246c758682ac330eff992c7411 to your computer and use it in GitHub Desktop.

Select an option

Save erdalkaymak/7459ee246c758682ac330eff992c7411 to your computer and use it in GitHub Desktop.
public class KeyringServiceActivity extends AppCompatActivity {
private EditText mUsername;
private EditText mPassword;
private boolean mShowPassword = false;
private CredentialClient mCredentialClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_keyring_service);
setupToolbar();
mCredentialClient = CredentialManager.getCredentialClient(this);
mUsername = findViewById(R.id.edit_username);
mPassword = findViewById(R.id.edit_password);
ImageView showPassword = findViewById(R.id.show_password);
showPassword.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mShowPassword = !mShowPassword;
if (mShowPassword) {
mPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
} else {
mPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
mPassword.setSelection(mPassword.getText().length());
}
});
Button loginButton = findViewById(R.id.button_login);
loginButton.setOnClickListener(this::login);
Button deleteButton = findViewById(R.id.button_reset);
deleteButton.setOnClickListener(this::delete);
}
private void setupToolbar() {
Toolbar toolbar = findViewById(R.id.toolbar_keyring_example);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
private void showMessage(int resId) {
showMessage(getString(resId));
}
private void showMessage(String message) {
SpannableString spannedMsg = new SpannableString(message);
Snackbar hint = Snackbar.make(getWindow().getDecorView(), spannedMsg, Snackbar.LENGTH_SHORT);
hint.getView().setBackgroundResource(R.drawable.snackbar);
hint.getView().setTranslationY(-120);
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) hint.getView().getLayoutParams();
params.gravity = Gravity.BOTTOM | Gravity.CENTER;
params.width = ViewGroup.LayoutParams.WRAP_CONTENT;
hint.show();
}
private boolean checkInput() {
String username = mUsername.getText().toString().trim();
String password = mPassword.getText().toString().trim();
if (username.isEmpty() || password.isEmpty()) {
showMessage(R.string.invalid_input);
return false;
} else {
return true;
}
}
private void login(View view) {
if (!checkInput()) {
return;
}
String username = mUsername.getText().toString().trim();
String password = mPassword.getText().toString().trim();
// connect server to login.
saveCredential(username, password,
"ExploreHMS", "com.hms.explorehms.huawei",
"sharedToAppCertHash",
true);
}
private void saveCredential(String username, String password,
String sharedToAppName, String sharedToAppPackage,
String sharedToAppCertHash, boolean userAuth) {
AndroidAppIdentity app2 = new AndroidAppIdentity(sharedToAppName,
sharedToAppPackage, sharedToAppCertHash);
List<AppIdentity> sharedAppList = new ArrayList<>();
sharedAppList.add(app2);
Credential credential = new Credential(username,
CredentialType.PASSWORD, userAuth,
password.getBytes());
credential.setDisplayName("nickname_" + username);
credential.setSharedWith(sharedAppList);
credential.setSyncable(true);
mCredentialClient.saveCredential(credential, new CredentialCallback<Void>() {
@Override
public void onSuccess(Void unused) {
showMessage(R.string.save_credential_ok);
}
@Override
public void onFailure(long errorCode, CharSequence description) {
showMessage(R.string.save_credential_failed + " " + errorCode + ":" + description);
}
});
}
private void deleteCredential(Credential credential) {
mCredentialClient.deleteCredential(credential, new CredentialCallback<Void>() {
@Override
public void onSuccess(Void unused) {
String hint = String.format(getResources().getString(R.string.delete_ok),
credential.getUsername());
showMessage(hint);
}
@Override
public void onFailure(long errorCode, CharSequence description) {
String hint = String.format(getResources().getString(R.string.delete_failed),
description);
showMessage(hint);
}
});
}
private void delete(View view) {
String username = mUsername.getText().toString().trim();
if (username.isEmpty()) {
return;
}
List<AppIdentity> trustedAppList = new ArrayList<>();
trustedAppList.add(new AndroidAppIdentity("yourAppName", "yourAppPackageName", "yourAppCodeSigningCertHash"));
SharedCredentialFilter sharedCredentialFilter = SharedCredentialFilter.acceptTrustedApps(trustedAppList);
mCredentialClient.findCredential(sharedCredentialFilter, new CredentialCallback<List<Credential>>() {
@Override
public void onSuccess(List<Credential> credentials) {
if (credentials.isEmpty()) {
showMessage(R.string.no_available_credential);
} else {
for (Credential credential : credentials) {
if (credential.getUsername().equals(username)) {
deleteCredential(credential);
break;
}
}
}
}
@Override
public void onFailure(long errorCode, CharSequence description) {
showMessage(R.string.query_credential_failed);
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment