Some refactoring and organisation for listview.. sooooon
This commit is contained in:
parent
c75fd77fdf
commit
a0b8301a49
9 changed files with 143 additions and 74 deletions
|
@ -12,7 +12,7 @@
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:theme="@style/AppTheme" >
|
android:theme="@style/AppTheme" >
|
||||||
<activity
|
<activity
|
||||||
android:name=".pwdstore"
|
android:name=".PasswordStore"
|
||||||
android:label="@string/app_name" >
|
android:label="@string/app_name" >
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
|
@ -31,9 +31,17 @@ import org.eclipse.jgit.api.errors.InvalidRemoteException;
|
||||||
import org.eclipse.jgit.api.errors.JGitInternalException;
|
import org.eclipse.jgit.api.errors.JGitInternalException;
|
||||||
import org.eclipse.jgit.api.errors.TransportException;
|
import org.eclipse.jgit.api.errors.TransportException;
|
||||||
import org.eclipse.jgit.errors.NotSupportedException;
|
import org.eclipse.jgit.errors.NotSupportedException;
|
||||||
|
import org.eclipse.jgit.internal.storage.file.FileRepository;
|
||||||
|
import org.eclipse.jgit.lib.Constants;
|
||||||
|
import org.eclipse.jgit.lib.Repository;
|
||||||
|
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
|
||||||
import org.eclipse.jgit.transport.JschConfigSessionFactory;
|
import org.eclipse.jgit.transport.JschConfigSessionFactory;
|
||||||
import org.eclipse.jgit.transport.OpenSshConfig;
|
import org.eclipse.jgit.transport.OpenSshConfig;
|
||||||
|
import org.eclipse.jgit.transport.RefSpec;
|
||||||
|
import org.eclipse.jgit.transport.RemoteConfig;
|
||||||
import org.eclipse.jgit.transport.SshSessionFactory;
|
import org.eclipse.jgit.transport.SshSessionFactory;
|
||||||
|
import org.eclipse.jgit.transport.Transport;
|
||||||
|
import org.eclipse.jgit.transport.URIish;
|
||||||
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
|
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
|
||||||
import org.eclipse.jgit.util.FS;
|
import org.eclipse.jgit.util.FS;
|
||||||
|
|
||||||
|
@ -246,7 +254,7 @@ public class GitClone extends Activity {
|
||||||
|
|
||||||
|
|
||||||
public void cloneRepository(View view) {
|
public void cloneRepository(View view) {
|
||||||
localDir = new File(getApplicationContext().getCacheDir().getAbsoluteFile() + "/store");
|
localDir = new File(getApplicationContext().getFilesDir().getAbsoluteFile() + "/store");
|
||||||
|
|
||||||
hostname = ((TextView) findViewById(R.id.clone_uri)).getText().toString();
|
hostname = ((TextView) findViewById(R.id.clone_uri)).getText().toString();
|
||||||
// don't ask the user, take off the protocol that he puts in
|
// don't ask the user, take off the protocol that he puts in
|
||||||
|
@ -355,10 +363,12 @@ public class GitClone extends Activity {
|
||||||
}
|
}
|
||||||
}).show();
|
}).show();
|
||||||
} else {
|
} else {
|
||||||
CloneCommand cmd = Git.cloneRepository().
|
CloneCommand cmd = Git.cloneRepository()
|
||||||
setCloneAllBranches(true).
|
.setDirectory(localDir)
|
||||||
setDirectory(localDir).
|
.setURI(hostname)
|
||||||
setURI(hostname);
|
.setBare(false)
|
||||||
|
.setNoCheckout(false)
|
||||||
|
.setCloneAllBranches(true);
|
||||||
|
|
||||||
new CloneTask(activity).execute(cmd);
|
new CloneTask(activity).execute(cmd);
|
||||||
}
|
}
|
||||||
|
|
41
app/src/main/java/com/zeapo/pwdstore/GitRepo.java
Normal file
41
app/src/main/java/com/zeapo/pwdstore/GitRepo.java
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
package com.zeapo.pwdstore;
|
||||||
|
|
||||||
|
import org.eclipse.jgit.api.Git;
|
||||||
|
import org.eclipse.jgit.internal.storage.file.FileRepository;
|
||||||
|
import org.eclipse.jgit.lib.Repository;
|
||||||
|
import org.eclipse.jgit.lib.RepositoryBuilder;
|
||||||
|
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by zeapo on 7/27/14.
|
||||||
|
*/
|
||||||
|
public class GitRepo {
|
||||||
|
|
||||||
|
private static Repository repository;
|
||||||
|
|
||||||
|
protected GitRepo(){ }
|
||||||
|
|
||||||
|
public static Repository getRepository(File localDir) {
|
||||||
|
if (repository == null) {
|
||||||
|
FileRepositoryBuilder builder = new FileRepositoryBuilder();
|
||||||
|
try {
|
||||||
|
repository = builder.setGitDir(localDir)
|
||||||
|
.readEnvironment()
|
||||||
|
.findGitDir()
|
||||||
|
.build();
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void closeRepository() {
|
||||||
|
repository.close();
|
||||||
|
}
|
||||||
|
}
|
48
app/src/main/java/com/zeapo/pwdstore/PasswordAdapter.java
Normal file
48
app/src/main/java/com/zeapo/pwdstore/PasswordAdapter.java
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
package com.zeapo.pwdstore;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.zeapo.pwdstore.R;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class PasswordAdapter extends ArrayAdapter<String> {
|
||||||
|
private final Context context;
|
||||||
|
private final ArrayList<String> values;
|
||||||
|
|
||||||
|
static class ViewHolder {
|
||||||
|
public TextView text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PasswordAdapter(Context context, ArrayList<String> values) {
|
||||||
|
super(context, R.layout.password_row_layout, values);
|
||||||
|
this.context = context;
|
||||||
|
this.values = values;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
|
View rowView = convertView;
|
||||||
|
|
||||||
|
// reuse for performance, holder pattern!
|
||||||
|
if (rowView == null) {
|
||||||
|
LayoutInflater inflater = (LayoutInflater) context
|
||||||
|
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
rowView = inflater.inflate(R.layout.password_row_layout, null);
|
||||||
|
|
||||||
|
ViewHolder viewHolder = new ViewHolder();
|
||||||
|
viewHolder.text = (TextView) rowView.findViewById(R.id.label);
|
||||||
|
rowView.setTag(viewHolder);
|
||||||
|
}
|
||||||
|
|
||||||
|
ViewHolder holder = (ViewHolder) rowView.getTag();
|
||||||
|
holder.text.setText( values.get(position) );
|
||||||
|
|
||||||
|
return rowView;
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,13 +11,9 @@ import android.widget.AbsListView;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.ListAdapter;
|
import android.widget.ListAdapter;
|
||||||
import android.widget.RelativeLayout;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import com.zeapo.pwdstore.dummy.DummyContent;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A fragment representing a list of Items.
|
* A fragment representing a list of Items.
|
||||||
|
@ -25,8 +21,6 @@ import java.util.List;
|
||||||
* Large screen devices (such as tablets) are supported by replacing the ListView
|
* Large screen devices (such as tablets) are supported by replacing the ListView
|
||||||
* with a GridView.
|
* with a GridView.
|
||||||
* <p />
|
* <p />
|
||||||
* Activities containing this fragment MUST implement the {@link Callbacks}
|
|
||||||
* interface.
|
|
||||||
*/
|
*/
|
||||||
public class PasswordFragment extends Fragment implements AbsListView.OnItemClickListener {
|
public class PasswordFragment extends Fragment implements AbsListView.OnItemClickListener {
|
||||||
|
|
||||||
|
@ -43,31 +37,17 @@ public class PasswordFragment extends Fragment implements AbsListView.OnItemClic
|
||||||
*/
|
*/
|
||||||
private ListAdapter mAdapter;
|
private ListAdapter mAdapter;
|
||||||
|
|
||||||
// TODO: Rename and change types of parameters
|
|
||||||
public static PasswordFragment newInstance(String param1, String param2) {
|
|
||||||
PasswordFragment fragment = new PasswordFragment();
|
|
||||||
Bundle args = new Bundle();
|
|
||||||
fragment.setArguments(args);
|
|
||||||
return fragment;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mandatory empty constructor for the fragment manager to instantiate the
|
* Mandatory empty constructor for the fragment manager to instantiate the
|
||||||
* fragment (e.g. upon screen orientation changes).
|
* fragment (e.g. upon screen orientation changes).
|
||||||
*/
|
*/
|
||||||
public PasswordFragment() {
|
public PasswordFragment() { }
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
if (getArguments() != null) {
|
mAdapter = new PasswordAdapter(getActivity(), new ArrayList<String>());
|
||||||
}
|
|
||||||
String[] values = new String[] { "NOT", "YET", "IMPLEMENTED" };
|
|
||||||
|
|
||||||
// TODO: Change Adapter to display your content
|
|
||||||
mAdapter = new MySimpleArrayAdapter(getActivity(), values);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -76,7 +56,7 @@ public class PasswordFragment extends Fragment implements AbsListView.OnItemClic
|
||||||
View view = inflater.inflate(R.layout.fragment_password, container, false);
|
View view = inflater.inflate(R.layout.fragment_password, container, false);
|
||||||
|
|
||||||
// Set the adapter
|
// Set the adapter
|
||||||
mListView = (AbsListView) view.findViewById(android.R.id.list);
|
mListView = (AbsListView) view.findViewById(R.id.pass_list);
|
||||||
((AdapterView<ListAdapter>) mListView).setAdapter(mAdapter);
|
((AdapterView<ListAdapter>) mListView).setAdapter(mAdapter);
|
||||||
|
|
||||||
// Set OnItemClickListener so we can be notified on item clicks
|
// Set OnItemClickListener so we can be notified on item clicks
|
||||||
|
@ -112,44 +92,9 @@ public class PasswordFragment extends Fragment implements AbsListView.OnItemClic
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* The default content for this Fragment has a TextView that is shown when
|
|
||||||
* the list is empty. If you would like to change the text, call this method
|
|
||||||
* to supply the text it should use.
|
|
||||||
*/
|
|
||||||
public void setEmptyText(CharSequence emptyText) {
|
|
||||||
View emptyView = mListView.getEmptyView();
|
|
||||||
|
|
||||||
if (emptyText instanceof TextView) {
|
|
||||||
((TextView) emptyView).setText(emptyText);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface OnFragmentInteractionListener {
|
public interface OnFragmentInteractionListener {
|
||||||
// TODO: Update argument type and name
|
// TODO: Update argument type and name
|
||||||
public void onFragmentInteraction(String id);
|
public void onFragmentInteraction(String id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public class MySimpleArrayAdapter extends ArrayAdapter<String> {
|
|
||||||
private final Context context;
|
|
||||||
private final String[] values;
|
|
||||||
|
|
||||||
public MySimpleArrayAdapter(Context context, String[] values) {
|
|
||||||
super(context, R.layout.password_row_layout, values);
|
|
||||||
this.context = context;
|
|
||||||
this.values = values;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public View getView(int position, View convertView, ViewGroup parent) {
|
|
||||||
LayoutInflater inflater = (LayoutInflater) context
|
|
||||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
|
||||||
View rowView = inflater.inflate(R.layout.password_row_layout, parent, false);
|
|
||||||
TextView textView = (TextView) rowView.findViewById(R.id.label);
|
|
||||||
textView.setText(values[position]);
|
|
||||||
|
|
||||||
return rowView;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,8 @@ import android.os.Bundle;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.widget.ArrayAdapter;
|
||||||
|
import android.widget.ListView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
|
@ -19,6 +21,8 @@ import org.apache.commons.io.filefilter.FileFilterUtils;
|
||||||
import org.apache.commons.io.filefilter.NotFileFilter;
|
import org.apache.commons.io.filefilter.NotFileFilter;
|
||||||
import org.apache.commons.io.filefilter.TrueFileFilter;
|
import org.apache.commons.io.filefilter.TrueFileFilter;
|
||||||
import org.eclipse.jgit.api.Git;
|
import org.eclipse.jgit.api.Git;
|
||||||
|
import org.eclipse.jgit.api.ListBranchCommand;
|
||||||
|
import org.eclipse.jgit.lib.Ref;
|
||||||
import org.eclipse.jgit.lib.Repository;
|
import org.eclipse.jgit.lib.Repository;
|
||||||
import org.eclipse.jgit.lib.RepositoryBuilder;
|
import org.eclipse.jgit.lib.RepositoryBuilder;
|
||||||
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
|
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
|
||||||
|
@ -28,9 +32,10 @@ import java.io.FileFilter;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
public class pwdstore extends Activity implements ToCloneOrNot.OnFragmentInteractionListener, PasswordFragment.OnFragmentInteractionListener {
|
public class PasswordStore extends Activity implements ToCloneOrNot.OnFragmentInteractionListener, PasswordFragment.OnFragmentInteractionListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
@ -83,12 +88,11 @@ public class pwdstore extends Activity implements ToCloneOrNot.OnFragmentIntera
|
||||||
|
|
||||||
private void checkLocalRepository() {
|
private void checkLocalRepository() {
|
||||||
int status = 0;
|
int status = 0;
|
||||||
final File localDir = new File(getCacheDir() + "/store");
|
final File localDir = new File(getFilesDir() + "/store/.git");
|
||||||
|
|
||||||
FragmentManager fragmentManager = getFragmentManager();
|
FragmentManager fragmentManager = getFragmentManager();
|
||||||
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
|
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
|
||||||
|
|
||||||
|
|
||||||
if (localDir.exists()) {
|
if (localDir.exists()) {
|
||||||
File[] folders = localDir.listFiles((FileFilter) FileFilterUtils.directoryFileFilter());
|
File[] folders = localDir.listFiles((FileFilter) FileFilterUtils.directoryFileFilter());
|
||||||
status = folders.length;
|
status = folders.length;
|
||||||
|
@ -111,4 +115,12 @@ public class pwdstore extends Activity implements ToCloneOrNot.OnFragmentIntera
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addItem(View view) {
|
||||||
|
ListView l = (ListView) findViewById(R.id.pass_list);
|
||||||
|
|
||||||
|
PasswordAdapter pad = (PasswordAdapter) l.getAdapter();
|
||||||
|
|
||||||
|
pad.add("Something");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -6,10 +6,15 @@
|
||||||
tools:context="com.zeapo.pwdstore.PasswordFragment">
|
tools:context="com.zeapo.pwdstore.PasswordFragment">
|
||||||
|
|
||||||
<ListView
|
<ListView
|
||||||
android:id="@android:id/list"
|
android:id="@+id/pass_list"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:dividerHeight="8dp"
|
android:dividerHeight="8dp"
|
||||||
android:divider="@android:color/transparent"/>
|
android:divider="@android:color/transparent"/>
|
||||||
|
<Button
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Add!"
|
||||||
|
android:onClick="addItem"/>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
|
@ -7,8 +7,10 @@
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/myRectangleView"
|
android:id="@+id/myRectangleView"
|
||||||
android:layout_width="200dp"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="18dp"
|
||||||
|
android:layout_marginRight="18dp"
|
||||||
android:background="@drawable/rectangle"
|
android:background="@drawable/rectangle"
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
@ -16,7 +18,8 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="8dp"
|
android:layout_marginBottom="8dp"
|
||||||
android:text="You have no git repository for the password store."/>
|
android:gravity="center"
|
||||||
|
android:text="@string/clone_fragment_text"/>
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/main_clone_button"
|
android:id="@+id/main_clone_button"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -25,13 +28,13 @@
|
||||||
android:layout_marginBottom="8dp"
|
android:layout_marginBottom="8dp"
|
||||||
android:background="@android:color/holo_green_light"
|
android:background="@android:color/holo_green_light"
|
||||||
android:onClick="getClone"
|
android:onClick="getClone"
|
||||||
android:text="Clone!"/>
|
android:text="@string/clone"/>
|
||||||
<Button
|
<Button
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_horizontal"
|
android:layout_gravity="center_horizontal"
|
||||||
android:background="@android:color/holo_red_light"
|
android:background="@android:color/holo_red_light"
|
||||||
android:text="Initialize!"/>
|
android:text="@string/initialize"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
<string name="app_name">PwdStore</string>
|
<string name="app_name">PwdStore</string>
|
||||||
<string name="clone">Clone!</string>
|
|
||||||
<string name="clone_settings">Clone</string>
|
<string name="clone_settings">Clone</string>
|
||||||
<string name="action_settings">Settings</string>
|
<string name="action_settings">Settings</string>
|
||||||
<string name="hello_world">Hello world!</string>
|
<string name="hello_world">Hello world!</string>
|
||||||
|
@ -21,6 +21,11 @@
|
||||||
<item>http://</item>
|
<item>http://</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
|
<!-- Clone fragment -->
|
||||||
|
<string name="clone_fragment_text">Password store empty</string>
|
||||||
|
<string name="clone">Clone a git repository</string>
|
||||||
|
<string name="initialize">Initialize a git repository</string>
|
||||||
|
|
||||||
<string name="hello_blank_fragment">Hello blank fragment</string>
|
<string name="hello_blank_fragment">Hello blank fragment</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue