Make git username and email configurable (#289)

* Gather git config data and save in preferences

* Align text box properly

* Apply git configs from settings

* Validate email address
This commit is contained in:
shanavas 2017-04-27 19:12:50 +03:00 committed by Mohamed Zenadi
parent 94c9b5be64
commit 2d1a9f7a44
6 changed files with 204 additions and 3 deletions

View file

@ -59,6 +59,7 @@ public class UserPreference extends AppCompatActivity {
private final static int EDIT_GIT_INFO = 3; private final static int EDIT_GIT_INFO = 3;
private final static int SELECT_GIT_DIRECTORY = 4; private final static int SELECT_GIT_DIRECTORY = 4;
private final static int EXPORT_PASSWORDS = 5; private final static int EXPORT_PASSWORDS = 5;
private final static int EDIT_GIT_CONFIG = 6;
private final static int REQUEST_EXTERNAL_STORAGE = 50; private final static int REQUEST_EXTERNAL_STORAGE = 50;
private PrefsFragment prefsFragment; private PrefsFragment prefsFragment;
@ -117,7 +118,17 @@ public class UserPreference extends AppCompatActivity {
} }
}); });
findPreference("git_delete_repo").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { findPreference("git_config").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Intent intent = new Intent(callingActivity, GitActivity.class);
intent.putExtra("Operation", GitActivity.EDIT_GIT_CONFIG);
startActivityForResult(intent, EDIT_GIT_CONFIG);
return true;
}
});
findPreference("git_delete_repo").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override @Override
public boolean onPreferenceClick(Preference preference) { public boolean onPreferenceClick(Preference preference) {
new AlertDialog.Builder(callingActivity). new AlertDialog.Builder(callingActivity).

View file

@ -36,6 +36,8 @@ import java.util.regex.Pattern;
public class GitActivity extends AppCompatActivity { public class GitActivity extends AppCompatActivity {
private static final String TAG = "GitAct"; private static final String TAG = "GitAct";
// copied from http://stackoverflow.com/a/16058059/4247851
private static final String emailPattern = "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$";
private Activity activity; private Activity activity;
private Context context; private Context context;
@ -56,6 +58,7 @@ public class GitActivity extends AppCompatActivity {
public static final int EDIT_SERVER = 105; public static final int EDIT_SERVER = 105;
public static final int REQUEST_SYNC = 106; public static final int REQUEST_SYNC = 106;
public static final int REQUEST_CREATE = 107; public static final int REQUEST_CREATE = 107;
public static final int EDIT_GIT_CONFIG = 108;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -255,6 +258,18 @@ public class GitActivity extends AppCompatActivity {
updateURI(); updateURI();
break;
case EDIT_GIT_CONFIG:
setContentView(R.layout.activity_git_config);
setTitle(R.string.title_activity_git_config);
// init the server information
final EditText git_user_name = ((EditText) findViewById(R.id.git_user_name));
final EditText git_user_email = ((EditText) findViewById(R.id.git_user_email));
git_user_name.setText(settings.getString("git_config_user_name", ""));
git_user_email.setText(settings.getString("git_config_user_email", ""));
break; break;
case REQUEST_PULL: case REQUEST_PULL:
syncRepository(REQUEST_PULL); syncRepository(REQUEST_PULL);
@ -460,6 +475,39 @@ public class GitActivity extends AppCompatActivity {
finish(); finish();
} }
private boolean saveGitConfigs() {
// remember the settings
SharedPreferences.Editor editor = settings.edit();
String email = ((EditText) findViewById(R.id.git_user_email)).getText().toString();
editor.putString("git_config_user_email", email);
editor.putString("git_config_user_name", ((EditText) findViewById(R.id.git_user_name)).getText().toString());
if (!email.matches(emailPattern)) {
new AlertDialog.Builder(this).
setMessage(activity.getResources().getString(R.string.invalid_email_dialog_text)).
setPositiveButton(activity.getResources().getString(R.string.dialog_oops), null).
show();
return false;
}
editor.apply();
return true;
}
public void applyGitConfigs(View view) {
if(!saveGitConfigs())
return;
String git_user_name = settings.getString("git_config_user_name", "");
String git_user_email = settings.getString("git_config_user_email", "");
PasswordRepository.setUserName(git_user_name);
PasswordRepository.setUserEmail(git_user_email);
finish();
}
/** /**
* Clones the repository, the directory exists, deletes it * Clones the repository, the directory exists, deletes it
* *

View file

@ -200,4 +200,39 @@ public class PasswordRepository {
sort(passwordList); sort(passwordList);
return passwordList; return passwordList;
} }
/**
* Sets the git user name
* @param String username username
*/
public static void setUserName(String username) {
setStringConfig("user", null, "name", username);
}
/**
* Sets the git user email
* @param String email email
*/
public static void setUserEmail(String email) {
setStringConfig("user", null, "email", email);
}
/**
* Sets a git config value
* @param String section config section name
* @param String subsection config subsection name
* @param String name config name
* @param String value the value to be set
*/
private static void setStringConfig(String section, String subsection, String name, String value) {
if (isInitialized()) {
StoredConfig config = repository.getConfig();
config.setString(section, subsection, name, value);
try {
config.save();
} catch(Exception e) {
e.printStackTrace();
}
}
}
} }

View file

@ -0,0 +1,94 @@
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.zeapo.pwdstore.git.GitActivity"
android:background="@android:color/white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/git_config"
android:textStyle="bold"
style="@android:style/TextAppearance.Large"
android:gravity="left"
android:paddingBottom="6dp"
android:textColor="@color/blue_grey_500"
android:background="@drawable/bottom_line"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/git_user_name"
android:id="@+id/label_git_user_name"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:paddingBottom="8dp"
android:layout_alignParentStart="true" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/git_user_name_hint"
android:id="@+id/git_user_name"
android:layout_marginLeft="8dp"
android:layout_toEndOf="@+id/label_git_user_name"
android:layout_toRightOf="@+id/label_git_user_name"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:inputType="textWebEmailAddress"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/git_user_email"
android:id="@+id/label_git_user_email"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:paddingBottom="8dp"
android:layout_alignParentStart="true" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/git_user_email_hint"
android:id="@+id/git_user_email"
android:layout_marginLeft="35dp"
android:layout_toEndOf="@+id/label_git_user_email"
android:layout_toRightOf="@+id/label_git_user_email"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:inputType="textWebEmailAddress"/>
</RelativeLayout>
<Button
android:id="@+id/save_button"
android:text="Save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="applyGitConfigs"/>
</LinearLayout>
</ScrollView>

View file

@ -13,6 +13,7 @@
<string name="dialog_delete">Delete directory</string> <string name="dialog_delete">Delete directory</string>
<string name="dialog_do_not_delete">Cancel</string> <string name="dialog_do_not_delete">Cancel</string>
<string name="title_activity_git_clone">Repository information</string> <string name="title_activity_git_clone">Repository information</string>
<string name="title_activity_git_config">Git Configurations</string>
<!-- Password Store --> <!-- Password Store -->
<string name="creation_dialog_text">Please clone or create a new repository below before trying to add a password or any synchronization operation.</string> <string name="creation_dialog_text">Please clone or create a new repository below before trying to add a password or any synchronization operation.</string>
@ -78,6 +79,14 @@
<string name="warn_malformed_url_port">When using custom ports, provide an absolute path (starts with "/")</string> <string name="warn_malformed_url_port">When using custom ports, provide an absolute path (starts with "/")</string>
<!-- Git Config fragment -->
<string name="git_config">Git config</string>
<string name="git_user_name">Username</string>
<string name="git_user_name_hint">User name</string>
<string name="git_user_email">Email</string>
<string name="git_user_email_hint">email</string>
<string name="invalid_email_dialog_text">Please enter a valid email address</string>
<!-- PGP Handler --> <!-- PGP Handler -->
<string name="title_activity_pgp_handler">PgpHandler</string> <string name="title_activity_pgp_handler">PgpHandler</string>
<string name="crypto_name_hint">name</string> <string name="crypto_name_hint">name</string>
@ -97,6 +106,7 @@
<string name="pref_git_username_title">Username</string> <string name="pref_git_username_title">Username</string>
<string name="pref_git_username_hint">username</string> <string name="pref_git_username_hint">username</string>
<string name="pref_edit_server_info">Edit git server settings</string> <string name="pref_edit_server_info">Edit git server settings</string>
<string name="pref_edit_git_config">Edit git config</string>
<string name="pref_ssh_title">Import SSH key</string> <string name="pref_ssh_title">Import SSH key</string>
<string name="pref_ssh_keygen_title">Generate SSH key pair</string> <string name="pref_ssh_keygen_title">Generate SSH key pair</string>
<string name="pref_ssh_see_key_title">View generated public SSH key</string> <string name="pref_ssh_see_key_title">View generated public SSH key</string>

View file

@ -4,6 +4,9 @@
<Preference <Preference
android:key="git_server_info" android:key="git_server_info"
android:title="@string/pref_edit_server_info" /> android:title="@string/pref_edit_server_info" />
<Preference
android:key="git_config"
android:title="@string/pref_edit_git_config" />
<Preference <Preference
android:key="ssh_key" android:key="ssh_key"
android:title="@string/pref_ssh_title" /> android:title="@string/pref_ssh_title" />