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:theme="@style/AppTheme" >
|
||||
<activity
|
||||
android:name=".pwdstore"
|
||||
android:name=".PasswordStore"
|
||||
android:label="@string/app_name" >
|
||||
<intent-filter>
|
||||
<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.TransportException;
|
||||
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.OpenSshConfig;
|
||||
import org.eclipse.jgit.transport.RefSpec;
|
||||
import org.eclipse.jgit.transport.RemoteConfig;
|
||||
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.util.FS;
|
||||
|
||||
|
@ -246,7 +254,7 @@ public class GitClone extends Activity {
|
|||
|
||||
|
||||
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();
|
||||
// don't ask the user, take off the protocol that he puts in
|
||||
|
@ -355,10 +363,12 @@ public class GitClone extends Activity {
|
|||
}
|
||||
}).show();
|
||||
} else {
|
||||
CloneCommand cmd = Git.cloneRepository().
|
||||
setCloneAllBranches(true).
|
||||
setDirectory(localDir).
|
||||
setURI(hostname);
|
||||
CloneCommand cmd = Git.cloneRepository()
|
||||
.setDirectory(localDir)
|
||||
.setURI(hostname)
|
||||
.setBare(false)
|
||||
.setNoCheckout(false)
|
||||
.setCloneAllBranches(true);
|
||||
|
||||
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.ArrayAdapter;
|
||||
import android.widget.ListAdapter;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
|
||||
import com.zeapo.pwdstore.dummy.DummyContent;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* 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
|
||||
* with a GridView.
|
||||
* <p />
|
||||
* Activities containing this fragment MUST implement the {@link Callbacks}
|
||||
* interface.
|
||||
*/
|
||||
public class PasswordFragment extends Fragment implements AbsListView.OnItemClickListener {
|
||||
|
||||
|
@ -43,31 +37,17 @@ public class PasswordFragment extends Fragment implements AbsListView.OnItemClic
|
|||
*/
|
||||
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
|
||||
* fragment (e.g. upon screen orientation changes).
|
||||
*/
|
||||
public PasswordFragment() {
|
||||
}
|
||||
public PasswordFragment() { }
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
if (getArguments() != null) {
|
||||
}
|
||||
String[] values = new String[] { "NOT", "YET", "IMPLEMENTED" };
|
||||
|
||||
// TODO: Change Adapter to display your content
|
||||
mAdapter = new MySimpleArrayAdapter(getActivity(), values);
|
||||
mAdapter = new PasswordAdapter(getActivity(), new ArrayList<String>());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -76,7 +56,7 @@ public class PasswordFragment extends Fragment implements AbsListView.OnItemClic
|
|||
View view = inflater.inflate(R.layout.fragment_password, container, false);
|
||||
|
||||
// Set the adapter
|
||||
mListView = (AbsListView) view.findViewById(android.R.id.list);
|
||||
mListView = (AbsListView) view.findViewById(R.id.pass_list);
|
||||
((AdapterView<ListAdapter>) mListView).setAdapter(mAdapter);
|
||||
|
||||
// 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 {
|
||||
// TODO: Update argument type and name
|
||||
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.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
|
||||
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.TrueFileFilter;
|
||||
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.RepositoryBuilder;
|
||||
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
|
||||
|
@ -28,9 +32,10 @@ import java.io.FileFilter;
|
|||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
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
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
@ -83,12 +88,11 @@ public class pwdstore extends Activity implements ToCloneOrNot.OnFragmentIntera
|
|||
|
||||
private void checkLocalRepository() {
|
||||
int status = 0;
|
||||
final File localDir = new File(getCacheDir() + "/store");
|
||||
final File localDir = new File(getFilesDir() + "/store/.git");
|
||||
|
||||
FragmentManager fragmentManager = getFragmentManager();
|
||||
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
|
||||
|
||||
|
||||
if (localDir.exists()) {
|
||||
File[] folders = localDir.listFiles((FileFilter) FileFilterUtils.directoryFileFilter());
|
||||
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">
|
||||
|
||||
<ListView
|
||||
android:id="@android:id/list"
|
||||
android:id="@+id/pass_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:dividerHeight="8dp"
|
||||
android:divider="@android:color/transparent"/>
|
||||
<Button
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Add!"
|
||||
android:onClick="addItem"/>
|
||||
|
||||
</FrameLayout>
|
||||
|
|
|
@ -7,8 +7,10 @@
|
|||
|
||||
<LinearLayout
|
||||
android:id="@+id/myRectangleView"
|
||||
android:layout_width="200dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="18dp"
|
||||
android:layout_marginRight="18dp"
|
||||
android:background="@drawable/rectangle"
|
||||
android:layout_gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
@ -16,7 +18,8 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
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
|
||||
android:id="@+id/main_clone_button"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -25,13 +28,13 @@
|
|||
android:layout_marginBottom="8dp"
|
||||
android:background="@android:color/holo_green_light"
|
||||
android:onClick="getClone"
|
||||
android:text="Clone!"/>
|
||||
android:text="@string/clone"/>
|
||||
<Button
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:background="@android:color/holo_red_light"
|
||||
android:text="Initialize!"/>
|
||||
android:text="@string/initialize"/>
|
||||
</LinearLayout>
|
||||
|
||||
</FrameLayout>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<resources>
|
||||
|
||||
<string name="app_name">PwdStore</string>
|
||||
<string name="clone">Clone!</string>
|
||||
|
||||
<string name="clone_settings">Clone</string>
|
||||
<string name="action_settings">Settings</string>
|
||||
<string name="hello_world">Hello world!</string>
|
||||
|
@ -21,6 +21,11 @@
|
|||
<item>http://</item>
|
||||
</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>
|
||||
|
||||
</resources>
|
||||
|
|
Loading…
Reference in a new issue